1/1

メタセコイア マテリアル一括設定???

metasequoia python を使ってマテリアルの一括設定をやろうとした。
やはり、反射の強度は反映されません。材質パネルを確認すると、反射光specularに数値が渡されています。
参考スクリプト いくつか材質を設定しておいて、powerを一括変更するスクリプト(変更しないので勉強中)

s=MQSystem
doc=s.getDocument()
out=s.println

for mat in doc.material:
if not mat:continue
out(mat.name)

num = doc.numMaterial
for x in range(0,num):
mat = doc.material[x]
if mat is None: continue
if mat.power == 5.0:
mat.power = 0.8
elif mat.power == 100.00:
mat.power = 2.0
else:
mat.power = 0.9

for x in range(0,num):
mat = doc.material[x]
if mat is None: continue
out(str(mat.power))

  • -
  • -

正二十面体を並べてみる。

マテリアルの設定を一括で、ガラス質感にした。Pythonスクリプトを使ってみたが、出力された反射の強さpowerはデフォルトの5のままで、0にならない。メタセコイアで平面を入れて、三角形化して、Parthenon Rendererでレンダリングしました。
icosa09.jpg
さらに、勉強ですね。ありがとうございます。
  • -
  • -

正二十面体を並べてみる その2

Metasequoia Pythonを使って正二十面体を81個並べた。Parthenon Rendererでレンダリングできた。
ガラスの質感を設定した。
icosa81.jpg
  • -
  • -

メタセコイア マテリアル一括設定 その2

metasequoia pythonでマテリアルの一括設定がpowerの部分がうまくいかないので、ちょっと考えてみた。保存したmqoファイルはテキスト形式なのだから、Pythonのテキスト処理で何とかなるか。以下のようにエディタでもできる置き換えをPythonで実行した。

#power01.py
name="box_test"
name2="box_test2"
filename=name+".mqo"
f=open(filename,'r')
filename2=name2+".mqo"
g=open(filename2,'w')
a=f.read()
a1=a.replace('power(5.00)','power(100.00)')
g.write(a1)
f.close()
g.flush()
g.close()

上の記述ではbox_test.mqoを読み込んで置換している。コマンドプロンプトから、
>python power01.py
と、打ち込んで実行した。pythonはver2.6をインストールしている。
なお、床面までpower(100.00)としたら、Parthenon rendererはレンダリング中に応答なしになった。強制終了させた。床はちょっと控えめにメタセコイアから材質パネルを開いて、後で調整した。

調整前
box_test.jpg
調整後、面は鏡のように映り込みした。
box_test2.jpg

アイデア次第でいろいろできますね。ありがとうございます。
  • -
  • -

メタセコイアpython 立方体生成その4

立方体を576個生成、乱数で高さを調整、マテリアルにメタリックを加える。Parthenon Renderでレンダリングした。
なお、反射強度は別でPythonでテキスト処理を行った。
boxmetal04.jpg
以下はサンプルスクリプトです。実行後、地面や壁を加え、ポリゴンは三角化してます。

import random

def p(*args):
"""
プリント関数
複数の引数を渡せる。
"""
if len(args)==0:
# 改行させる
MQSystem.println("")
return

for arg in args:
MQSystem.println(str(arg))


# 基本図形、新規オブジェクトで立方体複数つくる その2
#drawCube_def_metal.py
doc = MQSystem.getDocument()


out = MQSystem.println

#
def unitcube(L=50,x=0,y=0,z=0):
obj = MQSystem.newObject() #新規オブジェクト
num=doc.numObject
a=num
obj.name="cube_%d" % a #オブジェクト名をつける

obj.addVertex(x-L/2.0,y-L/2.0,z+L/2.0) #0 頂点番号
obj.addVertex(x+L/2.0,y-L/2.0,z+L/2.0) #1
obj.addVertex(x+L/2.0,y+L/2.0,z+L/2.0) #2
obj.addVertex(x-L/2.0,y+L/2.0,z+L/2.0) #3
obj.addVertex(x-L/2.0,y-L/2.0,z-L/2.0) #4
obj.addVertex(x-L/2.0,y+L/2.0,z-L/2.0) #5
obj.addVertex(x+L/2.0,y+L/2.0,z-L/2.0) #6
obj.addVertex(x+L/2.0,y-L/2.0,z-L/2.0) #7


obj.addFace([0,3,2,1])
obj.addFace([1,2,6,7])
obj.addFace([4,7,6,5])
obj.addFace([0,4,5,3])
obj.addFace([3,5,6,2])
obj.addFace([0,1,7,4])
doc.addObject( obj )

mat1=MQSystem.newMaterial()
doc.addMaterial(mat1) #マテリアルをドキュメントに追加
num0 = doc.numMaterial #現在の材質数を数える
numm=num0-1 #マテリアル番号は一つ少ない

doc.material[numm].color.red=num0*0.00346
doc.material[numm].color.green=0.1
doc.material[numm].color.blue=1-num0*0.00346
doc.material[numm].alpha=1.0
doc.material[numm].diffuse=1.0
doc.material[numm].ambient=0.0
doc.material[numm].emissive=0.0
doc.material[numm].specular=1.0
for face in obj.face:
face.material=numm #マテリアルnumm番を面に割り当てる


import traceback
import sys
cnt=0
try:
for dist in range(0,1400,60):
for dist2 in range(0,1400,60):
cnt=cnt+1
#out(str(dist))
unitcube(40,dist-700,20+random.gauss(0,8),dist2-700)


out(str(cnt))
except:
info=sys.exc_info()
p(info[0])
p(info[1])
p(*traceback.extract_tb(info[2]))


num = doc.numObject #オブジェクトの数
out("オブジェクトの数 %d" % num) #オブジェクトの数を表示
  • -
  • -

1/1