<< 3/4 >>
直線の始点、終点の座標を求める
Metasequoia Pythonで
メタセコイアの「面の作成」で「辺」をクリックし、一本の直線を描画する。オブジェクトパネルで、オブジェクト名をobj1_lightとする。
この直線がRenderManのライトの向きにしようかと検討中。
それで、始点と終点の座標を出力するスクリプトを作ってみた。
ありがとうございます。
助かります。
以下はMetasequoia Pythonスクリプトです。
オブジェクト名にlightを含む文字列であること。頂点は2個以内であること。で、座標を出力します。
#face_index22.py
class S(str):
def __contains__(self,x):
for i in range(len(self)):
if self.startswith(x,i): return 1
doc=MQSystem.getDocument()
out=MQSystem.println
#obj=doc.object[doc.currentObjectIndex]
#out(str(obj.numFace))
#out(str(obj.numVertex))
#out(str(obj.name))
num = doc.numObject
for n in range(0,num):
obj = doc.object[n]
out(str(obj.name))
if obj is None: continue
for face in obj.face:
for aIndex in face.index:
out(str(aIndex))
if obj.numVertex>2: continue
if "light" in S(str(obj.name)):
for k in range(0,obj.numVertex):
out(str(obj.vertex[k].pos.x)+","+str(obj.vertex[k].pos.y)+","+str(obj.vertex[k].pos.z))
メタセコイアからRIB出力 ライト設定
メタセコイアからRenderManのRIB形式へ、metasequoia pythonを使って出力検証。
今回は、直線を引っ張り、distantlightライトの位置として出力するようにpythonスクリプトを書き換えた。ライト位置、RIBではZ位置に-1をかけて出力している。
後、オブジェクト名に"no_"がついたら頂点法線は計算しないようにしてみた。実験君です。
今後は、オブジェクト名にspotlightと入れたら、スポットライトを出すように追加できるように工夫していきたいところです。
ありがとうございます。
##Renderman RIB-Structure 1.0
MakeTexture "00tex_master.tif" "00tex_master.tdl" "periodic" "periodic" "gaussian" 1 1
Display "out_scene2.tif" "file" "rgba"
Format 640 480 1
PixelSamples 4 4
PixelFilter "catmull-rom" 3 3
ShadingRate 1
Imager "background" "background" [0.2 0.4 0.6]
Sides 1
Orientation "rh"
Projection "perspective" "fov" [15.7411862756]
ConcatTransform [
0.989678789967 -0.0703824392657 -0.124828702357 0
0 0.87107923842 -0.49114250518 0
-0.143303498523 -0.486073320228 -0.862088646645 0
120.757968634 -292.714072303 3702.46738861 1
]
Scale 1 1 -1
WorldBegin
Attribute "visibility" "trace" [1]
Attribute "visibility" "transmission" ["Os"]
Attribute "visibility" "transmission" "opaque"
Attribute "light" "shadows" "on"
LightSource "distantlight" 1
"from" [714.900024414 688.590026855 -50.0]
"to" [0.0 286.878967285 -0.0]
"lightcolor" [0.800 0.800 0.800]
LightSource "ambientlight" 2
"lightcolor" [0.300 0.300 0.300]
Color 1.0 1.0 1.0
Surface "supertexmap" "string Csmapname" "00tex_master.tdl"
AttributeBegin
Scale 1 1 -1
Declare "st" "facevarying float[2]"
Attribute "identifier" "name" ["no_obj1"]
PointsPolygons
[ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 以下省略・・・・
Spotlight設定
メタセコイアで作った簡単なシーンをmetasequoia pythonでRIB出力した。オブジェクトはスムージングを計算するしないを選択できるように、オブジェクト名にno_をつけておく。
オブジェクト名がdistantlight,spotlight,maya_spotlightであると、3delightのシェーダを出力する。影はレイトレーシングを利用できるようにスクリプトを設定した。
ここでは、出力したライトのカラーを変更した。明るさintensityも調整する。当初spotlightのintensityを大きくしても変化しなかったが、距離を地面近くまでもってきたら、かすかに光る。何とintensity 700000と、とんでもない数字を入れたら、それらしく見えるようになった。
以下は、ライトの設定部分です。まだまだ課題はたくさんあります。
ありがとうございます。
Attribute "visibility" "trace" [1]
Attribute "visibility" "transmission" ["Os"]
Attribute "visibility" "transmission" "opaque"
Attribute "light" "shadows" "on"
LightSource "spotlight" 2
"from" [250.0 380.0 -340.0]
"to" [0.0 0.0 -0.0]
"lightcolor" [0.800 0.100 0.100]
"string shadowmap" "raytrace"
"float intensity" 400000
"float coneangle" 0.52
"float conedeltaangle" 0.52
LightSource "ambientlight" 3
"lightcolor" [0.300 0.300 0.300]
LightSource "maya_spotlight" 4
"from" [250.0 340.0 340.0]
"to" [0.0 0.0 -0.0]
"lightcolor" [0.100 0.100 0.800]
"string shadowmapname" "raytrace"
"float intensity" 1.0
"float coneangle" 0.8
"float penumbraangle" 0.15
金属質感
shinyシェーダ設定
3Delightでレンダリング。
モデルは、メタセコイアからmetasequoia pythonスクリプトを実行
RIB出力したものを調整。
BMRTのfakeskyシェーダも利用。周囲は大きな球体にfakeskyを割り当てる。
計算処理速度をあげる工夫を実験ですね。
ありがとうございます。
Indirectlight
3Delightのindirectlightを追加できるようにした。
メタセコイアのオブジェクトパネルにidirectlightとぶつを追加して、
metasequoia python スクリプトでRIB出力
以下はライト部分RIB抜粋、結構レンダリング時間かかります。
Attribute "visibility" "trace" [1]
Attribute "visibility" "transmission" ["Os"]
Attribute "visibility" "transmission" "opaque"
Attribute "light" "shadows" "on"
TransformBegin
Translate 3.0 300.0 -3.0
LightSource "maya_pointlight" 1
"lightcolor" [0.800 0.800 0.800]
"string shadowmapname" "raytrace"
"float intensity" 50000
TransformEnd
LightSource "spotlight" 2
"from" [-64.2728729248 115.28918457 96.3978881836]
"to" [-0.649001300335 10.0252351761 -12.1598510742]
"lightcolor" [0.800 0.100 0.100]
"string shadowmap" "raytrace"
"float intensity" 80000
"float coneangle" 0.52
"float conedeltaangle" 0.52
LightSource "maya_spotlight" 3
"from" [127.575531006 153.345001221 -69.9409103394]
"to" [42.3550758362 20.9788990021 -12.4399051666]
"lightcolor" [0.100 0.100 0.800]
"string shadowmapname" "raytrace"
"float intensity" 1.0
"float coneangle" 0.8
"float penumbraangle" 0.15
TransformBegin
Translate 0 10 0
LightSource "indirectlight" "ambientLightShape1"
"uniform float intensity" [ 1 ]
"uniform float finalgather" [ 1 ]
"uniform float samples" [ 256 ]
"uniform float maxdist" [ 0.99999997e36 ]
"uniform float __nonspecular" [ 1 ]
TransformEnd
楽しいですね。
Tkinter使えない??
メタセコイアpythonでTkinter実験君。
単にウインドウを表示しようとしたが、うまくいかない。
def p(*args):
"""
プリント関数
複数の引数を渡せる。
"""
if len(args)==0:
# 改行させる
MQSystem.println("")
return
for arg in args:
MQSystem.println(str(arg))
import traceback
import sys
from Tkinter import *
try:
r=Tk()
except:
info=sys.exc_info()
p(info[0])
p(info[1])
p(*traceback.extract_tb(info[2]))
エラーは以下のとおり・・・・残念??
exceptions.AttributeError
'module' object has no attribute 'argv'
('C:\\Users\\makura\\Documents\\tk_error.py', 19, '?', 'r=Tk()')
('c:\\Python22jp\\Lib\\lib-tk\\Tkinter.py', 1507, '__init__', 'baseName = os.path.basename(sys.argv[0])')
文字列操作
メタセコイアのPythonを使えるようになるために。
python 2.2.3インタラクティブモードで文字列操作を検証してみた。
>>> tex="texture01.jpg"
>>> print tex[:-4]
texture01
>>> print tex[-4:]
.jpg
>>> print tex[:-4]+".tif"
texture01.tif
>>>
これで、テクスチャ名の変更できますね。ありがとうございます。
metasequoia python RenderMan Export
メタセコイア Pythonスクリプトを使って、RIB出力、ライトをいろいろとつけられるように工夫しました。
1.ambientlight,spotlight,maya_spotlight,indirectlight,maya_pointlight,distantlightをオブジェクトパネルに書き込むと、出力する。
その際、方向は、面の作成の辺を使って線分を作ります。
2.複数でスポットライトを設けたいときは、オブジェクト名に番号をつけておきます。
spotlight1
spotlight2
3.ライトの色変更は、マテリアルをつくり、ライトオブジェクトを選択し割り当てます。
4.マテリアルにテクスチャがあると、supertexmapシェーダを割り当てます。面ごとのマテリアルには非対応。1オブジェクトに1マテリアル設定になります。
maya_spotlight,indirectlightを利用した。
テクスチャマップは、レンダリング前にtifに変更しておきます。
maya_spotlight色変更,indirectlightを利用した。
すべて、3Delightでレンダリングしました。
使いやすくなってきました。面白いです。ありがとうございます。
RIB出力検証その6
metasequoia pythonスクリプトを使ってRenderMan RIB出力が面白い。キャラクターのレンダリングを再度やってみた。
3Delightシェーダのmaya_spotlightを2つ入れて、indirectlightは調整しました。以下はlight部分のRIB前半です。
##Renderman RIB-Structure 1.0
Display "nanase01.tif" "file" "rgba"
Format 640 480 1
PixelSamples 4 4
PixelFilter "catmull-rom" 3 3
ShadingRate 1
Imager "background" "background" [0.2 0.4 0.6]
Sides 1
Orientation "rh"
Projection "perspective" "fov" [16.8611511458]
ConcatTransform [
0.682221487495 0.0292391623782 0.730560684258 0
0 0.999200044373 -0.0399908905246 0
0.731145568269 -0.0272826448199 -0.681675740577 0
30.1351455113 10.4167089142 1500.00002977 1
]
Scale 1 1 -1
WorldBegin
Attribute "visibility" "trace" [1]
Attribute "visibility" "transmission" ["Os"]
Attribute "visibility" "transmission" "opaque"
Attribute "light" "shadows" "on"
LightSource "ambientlight" 3
"lightcolor" [0.600 0.600 0.600]
LightSource "maya_spotlight" 4
"from" [143.23878479 383.181335449 -243.087921143]
"to" [-11.150762558 152.709259033 -47.7991714478]
"lightcolor" [0.898039221764 0.933333337307 1.0]
"string shadowmapname" "raytrace"
"float intensity" 1.0
"float coneangle" 0.8
"float penumbraangle" 0.15
LightSource "maya_spotlight" 5
"from" [-128.688598633 -72.6545791626 -299.763641357]
"to" [-11.5170631409 152.373718262 -24.4289131165]
"lightcolor" [0.898039221764 0.933333337307 1.0]
"string shadowmapname" "raytrace"
"float intensity" 1.0
"float coneangle" 0.8
"float penumbraangle" 0.15
TransformBegin
Translate 0 10 0
LightSource "indirectlight" 6
"uniform float intensity" [ 0.6 ]
"uniform float finalgather" [ 1 ]
"uniform float samples" [ 256 ]
"uniform float maxdist" [ 0.99999997e36 ]
"uniform float __nonspecular" [ 1 ]
TransformEnd
Color 1.0 1.0 1.0
MakeTexture "nanase._tex.tif" "nanase._tex.tdl" "periodic" "periodic" "gaussian" 1 1
Surface "supertexmap" "string Csmapname" "nanase._tex.tdl"
AttributeBegin
Scale 1 1 -1
Declare "st" "facevarying float[2]"
Attribute "identifier" "name" ["body"]
PointsPolygons
[ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 以下省略
調整していくと面白くなりますね。ありがとうございます。
1〜20まで重複しない乱数表示 その2
VBScriptを参考に一致しない乱数を表示するスクリプトを考えてみた。
前回の記事とはまた違っている。
#naraberu4.py
import random
a=[]
for i in range(1,21):
a.append(i)
for i in range(1000):
idx01=int(random.random()*20)
idx02=int(random.random()*20)
temp=a[idx01]
a[idx01]=a[idx02]
a[idx02]=temp
print a
print sorted(a)
ありがとうございます。
<< 3/4 >>