modo Script Python 頂点法線と頂点カラーの変換

# python
import lx
cmap = []
nmap = []
uvmap = []
for x in lx.eval("query layerservice vmaps ?"):
	vmapName = lx.eval("query layerservice vmap.name ? {0:}".format(x))
	vmapType = lx.eval("query layerservice vmap.type ? {0:}".format(x))
	if vmapType=="rgba":
		cmap.append(vmapName)
	if vmapType=="normal":
		nmap.append(vmapName)
	if vmapType=="texture":
		uvmap.append(vmapName)
if nmap:
	if cmap:
		lx.eval("select.vertexMap {0:} rgba replace".format(cmap[0]))
		lx.eval("!!vertMap.delete rgba")
	lx.eval("vertMap.new Color rgba true {0.0 0.0 0.0} 1.0")
	lx.command("vertMap.math",dest="RGBA[4]:Color",map0="NORM[3]:{0:}".format(nmap[0]),scale0=0.25,offset0=1,mode0="direct",index0=0,map1="NORM[3]:{0:}".format(nmap[0]),scale1=0.25,offset1=1,mode1="direct",index1=0)
	lx.eval("select.vertexMap Color rgba replace")
	if uvmap:
		lx.eval("select.vertexMap {0:} txuv replace".format(uvmap[0]))
# python
import lx
cmap = []
nmap = []
uvmap = []
for x in lx.eval("query layerservice vmaps ?"):
	vmapName = lx.eval("query layerservice vmap.name ? {0:}".format(x))
	vmapType = lx.eval("query layerservice vmap.type ? {0:}".format(x))
	if vmapType=="rgba":
		cmap.append(vmapName)
	if vmapType=="normal":
		nmap.append(vmapName)
	if vmapType=="texture":
		uvmap.append(vmapName)
if cmap:
	if nmap:
		lx.eval("select.vertexMap {0:} norm replace".format(nmap[0]))
		lx.eval("!!vertMap.delete norm")
	lx.eval("vertMap.new Normal norm true {0.0 0.0 0.0} 1.0")
	lx.command("vertMap.math",dest="NORM[3]:Other",map0="RGBA[4]:{0:}".format(cmap[0]),scale0=1,offset0=-0.5,mode0="direct",index0=0,map1="RGBA[4]:{0:}".format(cmap[0]),scale1=1,offset1=-0.5,mode1="direct",index1=0)
	lx.eval("select.vertexMap {0:} rgba replace".format(cmap[0]))
	if uvmap:
		lx.eval("select.vertexMap {0:} txuv replace".format(uvmap[0]))

あまり需要はないかと思いますが、頂点法線マップと頂点カラーマップの変換です。
上の方が頂点法線を頂点カラーに変換するもので、下のものがその逆です。
 

modoの法線マップはマニュアルにもあったかと思いますが、あくまでも補助的なもので、細かく調整するものではない。
という発想で作られているそうです。
確かに大した編集はできない。
しかし、それをカラーマップにすることで、だいぶ編集が可能になります。もちろんオブジェクト法線ですが。

 

それにしてもmodoのスクリプト、作りにくい、、
オブジェクト指向になれると、手続き型のものがまどろっこしく感じてしまう。
しかし、チューリングの時からコンピュータの基礎中の基礎は手続き型なのだし、汎用性の高いプログラムとなると、
確実にそういった部分が必要なのだろうと思う。
でも、evalで文字列としてコマンドを渡りたりlx.command()のような形でカッコつきでコマンドを入力しなければならないのはいかがなものだろうか。
カッコが多すぎて見難い。

コメントする

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トラックバックする

トラックバック用URL:

アニメーションが親切に解説されております

レンダリング、ライティングの基本が分かります

図版が見やすい美術解剖書です