ok
テクスチャの配置を自動でやってくれる便利機能ないかなーといつもの他力本願で海外サイトをいろいろ探していると
http://www.sidefx.com/index.php?option=com_forum&Itemid=172&page=viewtopic&t=22198
とか
http://www.sidefx.com/exchange/info.php?fileid=603&versionid=603
があった!
けど・・・おしい・・・インスタンスじゃなくてSOPNetwork内でやりたい!
あとたまに変形もしたいし、sortで順番もバラバラにしたい!

今回は自分で作るしかないかと腹を決めて作成開始!参考サイトは以下のサイトです
https://nccastaff.bournemouth.ac.uk/jmacey/Python/HoudiniExample/tools_5forloop.html

とりあえずコードはこんな感じで

node = hou.pwd()
geo = node.geometry()
import glob
import os

#add 'File'(Name:image_path) from Edit Parameter Interface 
mappath = hou.parm("image_path").eval()
if(os.listdir(mappath)):
    list = os.listdir(mappath)
else:
    #dummy
    list = [""]
#print(list)

mapnum = len(list)-1

#add Attribute
textureName =  geo.addAttrib(hou.attribType.Prim, "texturename", "")
textureNo =  geo.addAttrib(hou.attribType.Prim, "textureno", 0)

#shop###############
if(hou.node("../SHADING_CONTROL_PANEL")==None):
    shaders = hou.node('../').createNode('shopnet', 'SHADING_CONTROL_PANEL')
else:
    shaders = hou.node("../SHADING_CONTROL_PANEL") 

##if use shop
#shaders = hou.node("../../../shop")

shaders.moveToGoodPosition()
delnode = shaders.children()
#all delete!
for i in delnode:
    i.destroy()

#loop###############

j=0
firstloop = 1
for prim in geo.prims():
    #attrib##############
    prim.setAttribValue(textureName, mappath + list[j] )
    prim.setAttribValue(textureNo,j)
    
    #material##############
    if(firstloop==1):
        material = shaders.createNode('material', "shaders"+str(j) , run_init_scripts=False)
        material.moveToGoodPosition()
        suboutput = material.createNode('suboutput')
        v_layered = material.createNode("v_layered")
        v_layered.parm("map_base").set(mappath + list[j])
        #wire
        suboutput.setFirstInput(v_layered)
        v_layered.moveToGoodPosition()
        suboutput.moveToGoodPosition()

    if(j < mapnum):
        j+=1
    else:
        j=0
        firstloop=0

houdinisprite1

うーん思ったより長くなってしまった。
あと作業しているときにびっくりしたことがあった。
僕はいつもStringのエリアでattributeとかの変数入れられないとき
無理やり一個前にnullノード作って
`prim(“../null1”, 0, “hoge”, 0)`
とかやるんだけれども、これどうやっても文字型が認識されない!
けどこれは文字型でOK
`points(“../null1”, 0, “hoge”)`
うーん・・・よくわからん・・・

とりあえず今回は数字でattributeに値もっておいて
foreach内でshaders+数字
とすることで処理したので一応問題なし。
以上覚え書きでした。

ファイルは整理整頓したらアップします。

>>一覧にもどる