Rendering学習日記

日々、3DCGの世界は進歩しています。勉強して理解したことをまとめていきます。RenderMan互換レンダラーやグローバル・イルミネーション。いろんなことに好奇心を持って、面白くなる。目指せShader書き!!
ありがとうございます。

Lightflowでレンダリング中エラー

abnormal program termination

Lightflowでレンダリング中、以下のようなエラーが出た。

Microsoft Visual C++ Runtime Library
Runtime Error!
Program: C:\Program Files(x86)\python\python.exe

abnormal program termination

Rendering 720 x 400 pixels
00:00:42 - 73.2%
Error (LfFault):
LfSaveTGABlock()
error writing "to2_8f.tga"

続行するには何かキーを押してください . . .

tmp_ve_a03400などテンポラリーファイルが残ってしまう。
気になるので削除した。
ViX.exe を終了してから、Lightflowを起動するとうまく走ります。
59秒かかった。
使い方としては面倒だけど、いろいろと実験できて面白い。
to2_8f.jpg
  • -
  • -

Metasequoia→ToyStudio→Parthenonでアニメーション

メタセコイアでモデルを作っておいて、ToyStudioに「シーンをインポート」でMetasequoiaを読み込む。
次にキーフレームを各オブジェクトごとに設定する。
シーンを保存しておいて、ToyStudioの「エクスポート」でMetasequoia形式で保存する。保存する際に「連番ファイル出力」を選んでおく。
Parthenonでレンダリングするためには、モデルを三角形分割しておかなくてはならない。
もうひとつ問題。
Parthenonで読み込む時にエラー、「リストのインデックスが範囲を超えています。」
これは、ToyStudioで出力したメタセコイア形式に空のObject?があるためのようだ。
例えばRootが二つあったり、カメラオブジェクトがあるとエラーが出てしまう。
一度メタセコイアで開いて保存しなおすか、エディタで削除するとよい。

Object "Root" {
depth 0
folding 0
scale 1.000000 1.000000 1.000000
rotation 0.000000 0.000000 0.000000
translation 0.000000 0.000000 0.000000
visible 15
locking 0
shading 0
facet 60.0
color 0.898 0.498 0.698
color_type 0
}

以上を削除する。
ToyStudioのカメラワークをメタセコイアのカメラ位置として連番モデル出力できると最高なんですけどね。ToyStudio研修積みます。ありがとうございます。
Scene1_000019.jpg
Scene1_000015.jpg
Scene1_000006.jpg
Scene1_000001.jpg
  • -
  • -

Lightflowでリングをつくる

Lightflowには基本図形としてドーナツ(torus)を持っていない。RenderManやcgkitではtorusを呼び出すことができるので、関数を作ってLightflowでもできると思います。これは後ほど・・・。
ここではメタセコイアmetasequoiaで形状ドーナツ型を生成し、metalightで原点位置に配置し、カメラ位置、ライト位置を決めてPython形式を出力した。

今回作ったドーナツは相当小さいものを作ったので、半径や位置などの数字が小さくなっている。
to2_5.jpg

ドーナツを拡大縮小し、45度回転させ、半径0.1の演習上に18個配置した。

#リストを準備してオブジェクト名を格納し、定義した位置をs.addObject
a=[]
deg=0
r=0.1
for i in range(18):
obj_="Obj"+str(i)
a.append(obj_)
s.materialBegin( Obj1_Mat0 )
s.transformBegin( transform().translation( vector3( r*sin(pi*deg/180.0),r*cos(pi*deg/180.0), 0 ) ) )
s.transformBegin( transform().rotationAroundZ( pi*45/180.0 ))
s.transformBegin( transform().scaling( vector3(1.2,0.8,1.0)))
a[i] = s.newObject( "mesh", [ "file" , "torus1.lfm" , 0 ] )
s.transformEnd()
s.transformEnd()
s.transformEnd()
s.materialEnd()

s.addObject( a[i] )

deg=deg+20


続いて円周上でZ中心に20度ずつ回転させていった。
to2_6.jpg

a=[]
deg=0
r=0.1
for i in range(18):
obj_="Obj"+str(i)
a.append(obj_)
s.materialBegin( Obj1_Mat0 )
#s.transformBegin( transform().rotationAroundY( pi*deg/180.0 ))
s.transformBegin( transform().translation( vector3( r*sin(pi*deg/180.0),r*cos(pi*deg/180.0), 0 ) ) )
s.transformBegin( transform().rotationAroundZ( pi*-1*deg/180.0 ))
s.transformBegin( transform().scaling( vector3(1.2,0.8,1.0)))
a[i] = s.newObject( "mesh", [ "file" , "torus1.lfm" , 0 ] )
s.transformEnd()
s.transformEnd()
s.transformEnd()
#s.transformEnd()
s.materialEnd()

s.addObject( a[i] )

deg=deg+20


次にX軸中心に90度回転させた。
to2_7.jpg
a=[]
deg=0
r=0.1
for i in range(18):
obj_="Obj"+str(i)
a.append(obj_)
s.materialBegin( Obj1_Mat0 )
#s.transformBegin( transform().rotationAroundY( pi*deg/180.0 ))
s.transformBegin( transform().translation( vector3( r*sin(pi*deg/180.0),r*cos(pi*deg/180.0), 0 ) ) )
s.transformBegin( transform().rotationAroundZ( pi*-1*deg/180.0 ))
s.transformBegin( transform().rotationAroundX( pi*90/180.0 ))
s.transformBegin( transform().scaling( vector3(1.2,0.8,1.0)))
a[i] = s.newObject( "mesh", [ "file" , "torus1.lfm" , 0 ] )
s.transformEnd()
s.transformEnd()
s.transformEnd()
s.transformEnd()
#s.transformEnd()
s.materialEnd()

s.addObject( a[i] )

deg=deg+20


以上の配置の仕方をまとめて鎖のリングを作成した。
to2_8f.jpg

a=[]
deg=0
r=0.1
for i in range(18):
obj_="Obj"+str(i)
a.append(obj_)
s.materialBegin( Obj1_Mat0 )
#s.transformBegin( transform().rotationAroundY( pi*deg/180.0 ))
s.transformBegin( transform().translation( vector3( r*sin(pi*deg/180.0),r*cos(pi*deg/180.0), 0 ) ) )
s.transformBegin( transform().rotationAroundZ( pi*-1*deg/180.0 ))
s.transformBegin( transform().rotationAroundX( pi*90/180.0 ))
s.transformBegin( transform().scaling( vector3(1.4,0.85,1.0)))
a[i] = s.newObject( "mesh", [ "file" , "torus1.lfm" , 0 ] )
s.transformEnd()
s.transformEnd()
s.transformEnd()
s.transformEnd()
#s.transformEnd()
s.materialEnd()

s.addObject( a[i] )

deg=deg+20

b=[]
deg2=10
for k in range(18):
obj2_="Obj2"+str(k)
b.append(obj2_)
s.materialBegin( Obj1_Mat2 )
#s.transformBegin( transform().rotationAroundY( pi*deg/180.0 ))
s.transformBegin( transform().translation( vector3( r*sin(pi*deg2/180.0),r*cos(pi*deg2/180.0), 0 ) ) )
s.transformBegin( transform().rotationAroundZ( pi*-1*deg2/180.0 ))
s.transformBegin( transform().scaling( vector3(1.6,0.85,1.0)))
b[k] = s.newObject( "mesh", [ "file" , "torus1.lfm" , 0 ] )
s.transformEnd()
s.transformEnd()
s.transformEnd()
#s.transformEnd()
s.materialEnd()

s.addObject( b[k] )

deg2=deg2+20
  • -
  • -
<< 125/184 >>