bool RNodeVisitorMgr::hasNodeType(const char *nodeType)const
	{
		CM_TRACE_FUNC("RNodeVisitorMgr::hasNodeType("<<nodeType<<")");

		return ( m_map.find(nodeType) != m_map.end() );
	}
// @node	maya shader node name
void Visitor::visitPlusMinusAverage(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitPlusMinusAverage("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitReverse(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitReverse("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitMultiplyDivide(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitMultiplyDivide("<<node<<")");
}
/// General utilities ///
// @node	maya shader node name
void Visitor::visitArrayMapper(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitArrayMapper("<<node<<")");
}
/// glow ///
// @node	maya shader node name
void Visitor::visitOpticalFX(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitOpticalFX("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitHeightField(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitHeightField("<<node<<")");
}
/// color utilities ///
// @node	maya shader node name
void Visitor::visitBlendColors(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitBlendColors("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitClamp(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitClamp("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitUVChooser(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitUVChooser("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitVectorProduct(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitVectorProduct("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitStudioClearCoat(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitStudioClearCoat("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitStencil(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitStencil("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitSetRange(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitSetRange("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitTripleShadingSwitch(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitTripleShadingSwitch("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitContrast(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitContrast("<<node<<")");
}
/// image planes ///
// @node	maya shader node name
void Visitor::visitImagePlane(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitImagePlane("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitGammaCorrect(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitGammaCorrect("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitDistanceBetween(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitDistanceBetween("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitHsvToRgb(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitHsvToRgb("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitLightInfo(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitLightInfo("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitRemapColor(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitRemapColor("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitPlace2dTexture(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitPlace2dTexture("<<node<<")");

	OutputHelper o(RSLfile, m_NodePlugInfo);

	o.addInclude("place2dTexture.h");

	o.beginRSL(node);
	// Inputs
	// add "uvCoord"
	o.addToRSL("extern float s, t;");
	o.addToRSL("float uvCoord[2];");
	o.addToRSL("{");
	//get uvCoord plug value
	if( renderman::isPlugConnectedIn(node, "uvCoord") == 1 )
	{
		o.addToRSL("//uvCoord is connected in");
		o.addRSLVariable("uniform", "float2", "uvCoord_", "uvCoord", node);
		o.addToRSL("uvCoord[0] = uCoord_[0];");
		o.addToRSL("uvCoord[1] = uCoord_[1];");
	}
	else if( renderman::isPlugConnectedIn(node, "uCoord") == 1 )
	{
		o.addToRSL("//uCoord is connected in");
		o.addRSLVariable("uniform", "float", "uCoord", "uCoord", node);
		o.addToRSL("uvCoord[0] = uCoord;");
		o.addToRSL("uvCoord[1] = t;");
	}
	else if( renderman::isPlugConnectedIn(node, "vCoord") == 1 )
	{
		o.addToRSL("//vCoord is connected in");
		o.addRSLVariable("uniform", "float", "vCoord", "vCoord", node);
		o.addToRSL("uvCoord[0] = s;");
		o.addToRSL("uvCoord[1] = vCoord;");
	}
	else
	{
		o.addToRSL("//use renderman internal uv");
		o.addToRSL("uvCoord[0] = s;");
		o.addToRSL("uvCoord[1] = t;");
	}
	o.addToRSL("}");
	o.addToRSL("uvCoord[1] = 1 - uvCoord[1];//adjust v for renderman");

	o.addRSLVariable("uniform", "float2", "coverage",		"coverage",		node);
	o.addRSLVariable("uniform", "float",  "mirrorU",		"mirrorU",		node);
	o.addRSLVariable("uniform", "float",  "mirrorV",		"mirrorV",		node);
	o.addRSLVariable("uniform", "float2", "noiseUV",		"noiseUV",		node);
	o.addRSLVariable(		"", "float2", "offset",			"offset",		node);
	o.addRSLVariable("uniform", "float2", "repeatUV",		"repeatUV",		node);
	o.addRSLVariable("uniform", "float",  "rotateFrame",	"rotateFrame",	node);
	o.addRSLVariable("uniform", "float",  "rotateUV",		"rotateUV",		node);
	o.addRSLVariable("uniform", "float",  "stagger",		"stagger",		node);
	o.addRSLVariable("uniform", "float2", "translateFrame",	"translateFrame",node);
	o.addRSLVariable("uniform", "float",  "wrapU",			"wrapU",		node);
	o.addRSLVariable("uniform", "float",  "wrapV",			"wrapV",		node);
	// Outputs
	o.addRSLVariable(       "", "float2", "outUV",		"outUV",	node);

	o.addToRSL("  maya_place2dTexture(\n\t"
					//Inputs
					"uvCoord,			\n\t"
					"coverage[0],		\n\t"
					"coverage[1],		\n\t"
					"mirrorU,			\n\t"
					"mirrorV,			\n\t"
					"noiseUV[0],		\n\t"
					"noiseUV[1],		\n\t"
					"offset[0],			\n\t"
					"offset[1],			\n\t"
					"repeatUV[0],		\n\t"
					"repeatUV[1],		\n\t"
					"rotateFrame,		\n\t"
					"rotateUV,			\n\t"
					"stagger,			\n\t"
					"translateFrame[0],	\n\t"
					"translateFrame[1],	\n\t"
					"wrapU,				\n\t"
					"wrapV,				\n\t"
					//Outputs
					"outUV   \n"
			"   );");
	o.endRSL();
}
// @node	maya shader node name
void Visitor::visitRgbToHsv(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitRgbToHsv("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitPlace3dTexture(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitPlace3dTexture("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitSmear(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitSmear("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitProjection(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitProjection("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitSurfaceLuminance(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitSurfaceLuminance("<<node<<")");
}
// @node	maya shader node name
void Visitor::visitSamplerInfo(const char* node)
{
	CM_TRACE_FUNC("Visitor::visitSamplerInfo("<<node<<")");
}
Пример #30
0
	//
// 	void Renderer::writeAsCoShader(const liqShader* liqshader)
// 	{
// 		CM_TRACE_FUNC("Renderer::writeAsCoShader("<<liqshader->getName()<<")");
// 		//	unsigned int indentLevel = 0;
// 
// 		MFnDependencyNode node(liqshader->m_mObject);
// 		if( liqshader->hasErrors )
// 		{
// 			liquidMessage2(messageError, "[liqShader::write] Erros occured while initializing shader [%s], won't export shader", node.name().asChar());
// 			return;
// 		}
// 		// write up co-shaders before
// 		unsigned int i; 
// 		for(i=0; i<liqshader->m_coShaderArray.size(); i++)
// 		{
// 			//liqShader coShader(m_coShaderArray[i]);
// 			liqShader &coShader = liqShaderFactory::instance().getShader(liqshader->m_coShaderArray[i]);
// 			this->writeAsCoShader(&coShader);
// 		}
// 		// write co-shader
// 		boost::scoped_array< liqToken > tokenArray( new liqToken[ liqshader->tokenPointerArray.size() ] );
// 		boost::scoped_array< liqPointer > pointerArray( new liqPointer[ liqshader->tokenPointerArray.size() ] );
// 		assignTokenArrays( liqshader->tokenPointerArray.size(), &liqshader->tokenPointerArray[ 0 ], tokenArray.get(), pointerArray.get() );
// 
// 
// 		char* shaderFileName = const_cast<char*>(liqshader->getShaderFileName().c_str());
// 		if( liqshader->shaderSpace != "" )
// 		{
// 			this->shader_transformBegin((const liqString)liqshader->shaderSpace.asChar());
// 
// 		}
// 		// output shader
// 		// its one less as the tokenPointerArray has a preset size of 1 not 0
// 		int shaderParamCount = liqshader->tokenPointerArray.size() - 1;
// 		char *shaderHandlerPtr = const_cast<char*>(liqshader->shaderHandler.asChar());
// 
// 		// 	switch( shader_type )
// 		// 	{
// 		// 	case SHADER_TYPE_SHADER:case SHADER_TYPE_SURFACE:case SHADER_TYPE_DISPLACEMENT:case SHADER_TYPE_VOLUME:
// 		// 		//outputIndentation(indentLevel);
// 		// 		RiShaderV(shaderFileName, shaderHandlerPtr, shaderParamCount, tokenArray.get(), pointerArray.get());
// 		// 		break;
// 		// 	default :
// 		// 		char errorMsg[512];
// 		// 		sprintf(errorMsg, "[liqShader::writeAsCoShader] Unknown shader type for %s shader_type=%d (%s)", name.c_str(), shader_type, liqGetSloInfo::getTypeStr(shader_type).asChar());
// 		// 		liquidMessage( errorMsg, messageError );
// 		// 		break;
// 		// 	}
// 		if( liqshader->shader_type_ex=="shader"       ||
// 			liqshader->shader_type_ex=="surface"      ||
// 			liqshader->shader_type_ex=="displacement" ||
// 			liqshader->shader_type_ex=="volume"         )
// 		{
// 			//outputIndentation(indentLevel);
// 			RiShaderV(shaderFileName, shaderHandlerPtr, shaderParamCount, tokenArray.get(), pointerArray.get());
// 		}else{
// 			char errorMsg[512];
// 			sprintf(errorMsg, "[liqShader::writeAsCoShader] Unknown shader type for %s shader_type=%s", liqshader->getName().c_str(), liqshader->shader_type_ex.asChar());
// 			liquidMessage( errorMsg, messageError );
// 		}
// 
// 
// 		if( liqshader->shaderSpace != "" )
// 		{
// 			this->shader_transformEnd((const liqString)liqshader->shaderSpace.asChar());
// 
// 		}
// 	}
	//
	void Renderer::writeRibAttributes(const liqShader* liqshader/*, SHADER_TYPE shaderType*/)
	{
		CM_TRACE_FUNC("Renderer::writeRibAttributes("<<liqshader->getName()<<")");
		MFnDependencyNode node(liqshader->getMObject());

		MStatus status;
		if( liqshader->shader_type_ex == "shader" )//if( shaderType == SHADER_TYPE_SHADER )
		{
			return;
		}

		////////////////////////////////////////////
		//			COLOR
		if( liqshader->shader_type_ex == "surface" || liqshader->shader_type_ex == "volume")//if( shaderType == SHADER_TYPE_SURFACE || shaderType == SHADER_TYPE_VOLUME)
		{
			RiArchiveRecord( RI_COMMENT, "Renderer::writeRibAttributes()" );
			RiColor((RtFloat*)(liqshader->rmColor));
			RiOpacity((RtFloat*)(liqshader->rmOpacity));
		}

		////////////////////////////////////////////
		//			RIBBOX

		// Try to find a liqRIBBox attribute
		MString shaderRibBox;
		MPlug ribbPlug = node.findPlug( MString( "liqRIBBox" ), &status );
		if( status == MS::kSuccess )
		{
			ribbPlug.getValue( shaderRibBox );
		}
		// just write the contents of the rib box
		if( shaderRibBox != "" )
		{
			RiArchiveRecord( RI_VERBATIM, ( char* )shaderRibBox.asChar() );
			RiArchiveRecord( RI_VERBATIM, "\n" );
		}	

		////////////////////////////////////////////
		//			DISPLACE

		// displacement bounds
		float displacementBounds;
		MString displacementBoundsSpace;
		MPlug sDBPlug = node.findPlug( MString( "displacementBound" ), &status );
		if( status == MS::kSuccess )
		{
			sDBPlug.getValue( displacementBounds );
		}
		MPlug sDBSPlug = node.findPlug( MString( "displacementBoundSpace" ), &status );
		if( status == MS::kSuccess )
		{
			sDBSPlug.getValue( displacementBoundsSpace );
		}
		if( displacementBoundsSpace == "" )
		{
			displacementBoundsSpace = "shader";
		}
		if( displacementBounds != 0.0 )
		{
			RtString coordsys( const_cast< char* >( displacementBoundsSpace.asChar() ) );
			RiAttribute( "displacementbound", (liqToken) "sphere", &displacementBounds, "coordinatesystem", &coordsys, RI_NULL );
		}
	}