Rendering学習日記

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

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
  • -
  • -

Lightflowで円柱を示す

Lightflowのcylinderには、ふたがしてない。RenderManで用意されているプリミティブと同じだ。X軸中心に30度傾ける。
s.transformBegin( transform().rotationAroundX( pi*30.0/180 )
Pythonで除算する時は、小数点をつけておかないと正しく計算しないから注意する必要がある。
#! /usr/bin/env python
from lightflowPM import *
from math import *

s = scene()

s.lightOn( s.newLight( "point", [ "position", vector3( 5.0, -5.0, 3.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )

s.lightOn( s.newLight( "point", [ "position", vector3( -5.0, -5.0, 3.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )

s.lightOn( s.newLight( "point", [ "position", vector3( 5.0, -5.0, -3.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )

plastic = s.newMaterial( "standard", [ "kc", vector3( 0.096, 0.252, 0.504 ), "kd", 0.5, "km", 0.1 ] )


s.materialBegin( plastic )
s.transformBegin( transform().rotationAroundX( pi*30.0/180 ) )

s.addObject( s.newObject( "cylinder", [ "radius", 1.0 ,"height",2.4] ) )

s.transformEnd()
s.materialEnd()


saver = s.newImager( "tga-saver", [ "file", "bool01.tga" ] )

s.imagerBegin( saver )

camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -4, 3 ),
"aim", vector3( 0, 1, 0 ),
"aa-samples", 2,5
] )

s.imagerEnd()

s.render( camera, 300, 300 )


bool01.jpg
  • -
  • -

Lightflow円柱にふたをする

disc,cylinderを使って、ふたをした円柱を原点で作成する。
capをしてグループ化してみた。

hole = s.newObject( "boundary", [ "surfaces", cyl, cap1, cap2 ] )

これでひとつにまとめ、レンダリングで画面に表示するためには、

s.addObject(hole)を行う。

サンプルファイルは次のようになる。

#! /usr/bin/env python
from lightflowPM import *
from math import *

s = scene()

s.lightOn( s.newLight( "point", [ "position", vector3( 5.0, -5.0, 3.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )

s.lightOn( s.newLight( "point", [ "position", vector3( -5.0, -5.0, 3.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )

s.lightOn( s.newLight( "point", [ "position", vector3( 5.0, -5.0, -3.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )

plastic = s.newMaterial( "standard", [ "kc", vector3( 0.096, 0.252, 0.504 ), "kd", 0.5, "km", 0.1 ] )

s.materialBegin( plastic )
s.transformBegin( transform().rotationAroundX( pi*15.0/180 ) )
s.transformBegin( transform().translation( vector3( 0, 0, 2.4 ) ) )
cap1=s.newObject( "disc", [ "radius", 1.0 ] )
s.transformEnd()

s.transformBegin( transform().translation( vector3( 0, 0, 0 ) ) )
cap2=s.newObject( "disc", [ "radius", 1.0 ] )
s.transformEnd()


cyl=s.newObject( "cylinder", [ "radius", 1.0 ,"height",2.4] )
s.transformEnd()

hole = s.newObject( "boundary", [ "surfaces", cyl, cap1, cap2 ] )

s.materialEnd()

s.addObject(hole)


saver = s.newImager( "tga-saver", [ "file", "bool02.tga" ] )

s.imagerBegin( saver )

camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -4, 3 ),
"aim", vector3( 0, 1, 0 ),
"aa-samples", 2,5
] )

s.imagerEnd()

s.render( camera, 300, 300 )


bool02.jpg

X軸中心に角度を-60度傾けてみた。
bool02_60.jpg

X軸中心に角度を30度傾けてみた。
bool02.plus30JPG.jpg
ありがとうございます。
  • -
  • -
<< 10/15 >>