日々適当

hibitekitou

マテリアルを作った時のシェーダーの名前

xsi |2012-12-11
例えば、SI 2012 SAPで

oObj = Application.Selection(0)
oMat = oObj.AddMaterial("Phong",False,"NewMaterial")

とかをオブジェクトを選択の上、実行すると、NewMaterialって名前のマテリアルが作成されて選択されたオブジェクトに適用されます。問題は、適用されたPhongシェーダーの名前です。



Phongシェーダーノードの名前までNewMaterialになりやがっております。もちろんこの方が気付いていないはずも無く、バグだということです [Junki The Junkie's Junkyard]。
ってことで、昔書いたスクリプトはですね。例えばそのPhongシェーダーのノードにテクスチャを繋ぐ時、

app = Application
oObj = app.Selection(0)
oMat = oObj.AddMaterial("Phong",False,"NewMaterial")
app.CreateShaderFromProgID("Softimage.txt2d-image-explicit.1.0", oMat.FullName, "Image")
app.SIConnectShaderToCnxPoint(oMat.FullName + ".Image.out", oMat.FullName + "." + oMat.Name +".diffuse", False)
# app.SIConnectShaderToCnxPoint(oMat.FullName + ".Image.out", oMat.FullName + ".Phong.diffuse", False)

とかアホなかき方をしていたんです。つまり、シェーダーの名前がマテリアルの名前と一緒だから、シェーダーをマテリアルの名前で直接指定していたわけですな。だから2013でこのバグが直ったらしく、



上のスクリプトのコメントアウトした方を使えば動くような事になっており、結果として昔書いたスクリプトが動かなくなってですね、しかしいかんせん昔書いたものだから解決に難儀しました。

しかし、こーいうシェーダ間のネットワークを繋ぐ時、どう書くべきなのか、よく分かっていないのですよねー。
例えばこんな感じ?

app = Application
oObj = app.Selection(0)
oMat = oObj.AddMaterial("Phong",False,"NewMaterial")
surface = oMat.Parameters("surface")

diffuse = surface.NestedObjects(0).Parameters("diffuse")
diffuse.ConnectFromProgID("Softimage.txt2d-image-explicit.1")
tex = diffuse.NestedObjects("Image").Parameters("tex")

oImageClip = app.CreateImageClip( "C:\\Program Files\\Autodesk\\Softimage 2012.SAP\\Data\\XSI_SAMPLES\\Pictures\\xsilogo.pic", "XSILogo" )

tex.Connect(oImageClip)
コメント ( 0 )|Trackback ( )
 
コメント
 
コメントはありません。
コメントを投稿する
ブログ作成者から承認されるまでコメントは反映されません
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。