【Maya插件开发】开发自定义模型导出器和渲染视口

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tomicyo/article/details/42342985


前言


Maya作为一款3D建模软件,受到大多数游戏建模师和CG工作者欢迎。Maya所有的概念都建立在“节点”之上,Maya的GUI之所以能够跨平台,是采用了流行的Qt Gui框架完成的,因此,为用户(3D游戏建模师)开发插件的UI除了使用MEL脚本外,也可以直接使用Qt C++进行开发。Maya安装完成之后,自带了devKit和示例,上手比较简单。

遍历Maya场景节点




模型导出器(Translator)


模型文件导出器只要实现上图中需要override的函数即可。


定制渲染器(Viewport)



同理,Maya渲染视口插件也只需实现需要override的函数即可。


注册/反注册插件


注册插件需要实现MStatus initializePlugin( MObject obj )方法

    MStatus   status = MStatus::kFailure;
    MFnPlugin plug(obj, MAYA_PLUGIN_COMPANY, MAYA_PLUGIN_VERSION, MAYA_PLUGIN_REQUIREDAPI);

	gRenderer = new Mk3dRenderer();
	if (gRenderer)
	{
		status = gRenderer->registerRenderer();
		if (status != MStatus::kSuccess)
		{
			status.perror("Failed to register Kaleido3D renderer properly.");
		}
	}

	status = plug.registerFileTranslator(
		MAYA_TRANSLATOR,
                "none",
                DCTranslator::creator
    <span style="white-space:pre">	</span>);
	if (status != MStatus::kSuccess)
	{
		status.perror("Failed to register Kaleido3D Translator properly.");
	}
	return status;


反注册插件需要实现MStatus uninitializePlugin( MObject obj )方法

        MFnPlugin plug( obj ); 
	MStatus   status = MStatus::kSuccess;

	// Deregister the renderer
	if (gRenderer)
	{
		status = gRenderer->deregisterRenderer();
		if (status != MStatus::kSuccess)
		{
			status.perror("Failed to deregister Kaleido3D renderer properly.");
		}
	}
	gRenderer = 0;
	status = plug.deregisterFileTranslator(MAYA_TRANSLATOR);
	if (status != MStatus::kSuccess)
	{
		status.perror("Failed to deregister Kaleido3D Translator properly.");
	}

上面两个方法需要在编译的时候导出符号,见第4小节。

用CMake创建Maya插件工程


关键代码如下
set(MAYA_PLUGIN_NAME "MayaDCC")
set(MAYA_DIRECTORY "C:\\Program Files\\Autodesk\\Maya2015")
set(MAYA_HEADERS_DIR "${MAYA_DIRECTORY}/include")
set(MAYA_LIBRARY_DIR "${MAYA_DIRECTORY}/lib")
include_directories(
	.
	${MAYA_HEADERS_DIR}
)
link_directories(${MAYA_LIBRARY_DIR})
set(LIBRARIES Foundation.lib OpenMaya.lib OpenMayaAnim.lib OpenMayaUI.lib OpenMayaRender.lib)
set(MAYA_DEFINITIONS _MBCS NT_PLUGIN REQUIRE_IOSTREAM _BOOL)
add_library(
	${MAYA_PLUGIN_NAME} SHARED 
	${PLUGIN_SRCS}
)
target_link_libraries(
	${MAYA_PLUGIN_NAME}
	${LIBRARIES}
)
set_target_properties(
	${MAYA_PLUGIN_NAME} PROPERTIES 
	COMPILE_DEFINITIONS "${MAYA_DEFINITIONS}"
)

set_target_properties(
	${MAYA_PLUGIN_NAME} PROPERTIES 
	OUTPUT_NAME "${MAYA_PLUGIN_NAME}"
)

set_target_properties(
	${MAYA_PLUGIN_NAME} PROPERTIES 
	CLEAN_DIRECT_OUTPUT 1
)
set_target_properties(
	${MAYA_PLUGIN_NAME} PROPERTIES 
	LINK_FLAGS "/export:initializePlugin /export:uninitializePlugin"
)

set_target_properties(
	${MAYA_PLUGIN_NAME} PROPERTIES 
	SUFFIX ".mll"
)



     本文版权DsoTsin所有,转载文章请注明出处!


参考




猜你喜欢

转载自blog.csdn.net/tomicyo/article/details/42342985