hibitekitou
マテリアルを作った時のシェーダーの名前
xsi |2012-12-11
例えば、SI 2012 SAPで
oObj = Application.Selection(0)
oMat = oObj.AddMaterial("Phong",False,"NewMaterial")
とかをオブジェクトを選択の上、実行すると、NewMaterialって名前のマテリアルが作成されて選択されたオブジェクトに適用されます。問題は、適用されたPhongシェーダーの名前です。
![](https://blogimg.goo.ne.jp/user_image/1c/63/e2b346571f7b263788611d1df5968311.jpg?random=d9d2923347cfc1a92298ee83d09f8fff)
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でこのバグが直ったらしく、
![](https://blogimg.goo.ne.jp/user_image/25/3e/fb064fa0ff0c40fa5ca70e674415707e.jpg?random=be1a89e4334a4c9a52bf94a884c2a9c9)
上のスクリプトのコメントアウトした方を使えば動くような事になっており、結果として昔書いたスクリプトが動かなくなってですね、しかしいかんせん昔書いたものだから解決に難儀しました。
しかし、こーいうシェーダ間のネットワークを繋ぐ時、どう書くべきなのか、よく分かっていないのですよねー。
例えばこんな感じ?
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)
oObj = Application.Selection(0)
oMat = oObj.AddMaterial("Phong",False,"NewMaterial")
とかをオブジェクトを選択の上、実行すると、NewMaterialって名前のマテリアルが作成されて選択されたオブジェクトに適用されます。問題は、適用されたPhongシェーダーの名前です。
![](https://blogimg.goo.ne.jp/user_image/1c/63/e2b346571f7b263788611d1df5968311.jpg?random=d9d2923347cfc1a92298ee83d09f8fff)
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でこのバグが直ったらしく、
![](https://blogimg.goo.ne.jp/user_image/25/3e/fb064fa0ff0c40fa5ca70e674415707e.jpg?random=be1a89e4334a4c9a52bf94a884c2a9c9)
上のスクリプトのコメントアウトした方を使えば動くような事になっており、結果として昔書いたスクリプトが動かなくなってですね、しかしいかんせん昔書いたものだから解決に難儀しました。
しかし、こーいうシェーダ間のネットワークを繋ぐ時、どう書くべきなのか、よく分かっていないのですよねー。
例えばこんな感じ?
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 ( )
コンビニのホットドリンク
与太話 |2012-12-11
コンビニで飲み物を買う時、ホットドリンクに手を伸ばす季節です。
僕が普段利用しているコンビニは、FにSにLにTなのですけど、いずれも食品類を並べている棚と同じ形状の棚に熱源を仕込んでその上にペットボトルや缶を並べて温める形式を採用しています。
ところが、そこの設定温度がコンビニによってまちまちなんですな。
あたたか~い飲み物ということで期待するのは、個人的には、手に持ち続けることが出来ないくらいの温度になっていることです。しかし、その辺クレームがつくからか節電からかは知らないけど、多くのコンビニではそんな状態になっておりません。特にFなんかはぬるいというかなまあたたかいレベルの温度で売られているように思います。SもTもそこまで温度は低くないのだけど、ぬるい。それに対してLの温度の高さは特質すべきものがあるのですよ。求めている温度に一番近い。
どちらかというとLは当たり前の「あたたか~い飲み物」の温度を実現しているだけのように思うのだけど、それが素晴らしいと思えるぐらい、他のコンビニの温度にはがっかりしている今日この頃なのですな。
まぁ電力事情がひっ迫している現在ですから、節電ということなら仕方ないとは思いますけど、そうならそう書いておいてくれないと、誤解しちゃうよ、僕は(^^) 駄目なコンビニだなと。
注:あくまでも僕の行動半以内にあるコンビニでの感想です。
僕が普段利用しているコンビニは、FにSにLにTなのですけど、いずれも食品類を並べている棚と同じ形状の棚に熱源を仕込んでその上にペットボトルや缶を並べて温める形式を採用しています。
ところが、そこの設定温度がコンビニによってまちまちなんですな。
あたたか~い飲み物ということで期待するのは、個人的には、手に持ち続けることが出来ないくらいの温度になっていることです。しかし、その辺クレームがつくからか節電からかは知らないけど、多くのコンビニではそんな状態になっておりません。特にFなんかはぬるいというかなまあたたかいレベルの温度で売られているように思います。SもTもそこまで温度は低くないのだけど、ぬるい。それに対してLの温度の高さは特質すべきものがあるのですよ。求めている温度に一番近い。
どちらかというとLは当たり前の「あたたか~い飲み物」の温度を実現しているだけのように思うのだけど、それが素晴らしいと思えるぐらい、他のコンビニの温度にはがっかりしている今日この頃なのですな。
まぁ電力事情がひっ迫している現在ですから、節電ということなら仕方ないとは思いますけど、そうならそう書いておいてくれないと、誤解しちゃうよ、僕は(^^) 駄目なコンビニだなと。
注:あくまでも僕の行動半以内にあるコンビニでの感想です。
コメント ( 2 )|Trackback ( )
・