/////////////////////////////////////////// // // Name: // fdMiaMaterialXCreateFB // // Author: // FEVRIER Dorian (fevrier.dorian@yahoo.fr) // // Website: // www.fevrierdorian.com // // Tested on: // Maya 2009 // // Description: // This MEL code create frameBuffer for the given mia_material_x shader. // The most interesting thing is that if you have lot of mia_material_x shader, // there will be only the 13 necessary passes created for all. // In others words, if you work only with mia_material_x shaders you will have // all necessary passes to compose your picture directly following this shema: // // Compositing Model: // Beauty = diffuse_level * (diffuse_raw + (indirect_raw * ao_raw)) + // spec_level * spec_raw + // refl_level * refl_raw + // refr_level * refr_raw + // tran_level * tran_raw + // add_result // // (See the section "Multiple Outputs of mia_material_x" // of your mental ray documentation for more informations) // // Arguments: // string $miaMaterialName: // The name of the mia_material_x shaders you want to create passes for. // // Last Update: // 2009/02/25: Move and complete comments for a better visibility // /////////////////////////////////////////// global proc fdMiaMaterialXCreateFB(string $miaMaterialName) { //If the given node is a mia_material_x shader if(`nodeType $miaMaterialName` == "mia_material_x") { //We create all the renderPass nodes and skip them is they already exist string $passArray[] = { "diffuse_level", "diffuse_raw", "spec_level", "spec_raw", "refl_level", "refl_raw", "refr_level", "refr_raw", "tran_level", "tran_raw", "indirect_raw", "ao_raw", "add_result"}; //For each $pass in the pass list for($pass in $passArray) { //If node doesn't exist if(!`objExists ($pass+"_renderPass")`) { print ($pass+"_renderPass node doesn't exist.\n"); //We create a renderPass node createNode renderPass -name ($pass+"_renderPass"); //We set the renderPass as a customColor pass setRenderPassType -type "CSTCOL" ($pass+"_renderPass"); print ("Node "+$pass+"_renderPass -> Created.\n"); } else { print ($pass+"_renderPass node already exist.\n"); } } //Should be this kind: mia_material_x1_writeToColorBuffer string $w2ColBufNodeName = ($miaMaterialName+"_writeToColorBuffer"); //We create all the writeToColorBuffer nodes for($pass in $passArray) //For each $pass in the pass list { string $w2colBufNodeName; //If node doesn't exist if(!`objExists ($pass+"_"+$w2ColBufNodeName)`) { //We create the writeToColorBuffer Node named diffuse_level_mia_material_x1_writeToColorBuffer $w2colBufNodeName = `createNode writeToColorBuffer -name ($pass+"_"+$w2ColBufNodeName)`; } else { warning ($pass+"_"+$w2ColBufNodeName+" node already exist! Name convention ignored."); $w2colBufNodeName = `createNode writeToColorBuffer`; } connectAttr ($pass+"_renderPass.message") ($w2colBufNodeName+".renderPass"); connectAttr ($miaMaterialName+"."+$pass) ($w2colBufNodeName+".color"); connectAttr ($miaMaterialName+"."+$pass+"A") ($w2colBufNodeName+".alpha"); } } else { error ($miaMaterialName+" is not a mia_material_x node."); } }