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<<")"); }
// // 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 ); } }