<< 6/8 >>

Lightflowで立方体をランダムに回転配置する

立方体49個並べてZ軸中心に回転させる。乱数を発生させる
import random
モジュールを呼び出す。
関数も回転を入れて書き換える。
乱数でリストの中から数値を取り出すようにした。
rot=random.choice([0,6,15,23,30,45,60,75,88])
立方体なので0から90度以内で変化する。

#関数定義 ボックスの位置とリストcolのインデックス番号0から5まで、Z軸中心回転角度rotを追加
def boxpos(x0,y0,z0,rot,c):
s.materialBegin( col[c] )
s.transformBegin( transform().translation( vector3(x0,y0,z0)))
s.transformBegin( transform().rotationAroundZ( pi*rot/180 ))
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.transformEnd()
s.materialEnd()



#Create boxes!!
c=0
cnt=0
for i in range(-9,10,3):
for k in range(-6,13,3):
rot=random.choice([0,6,15,23,30,45,60,75,88])
boxpos(i,k,0,rot,c)
cnt=cnt+1
c=cnt%6




box_pos_rot_rnd1.jpg

box_pos_rot_rnd2.jpg

以下は、サンプルファイル参考にしてください。

#! /usr/bin/env python
#box_pos_rot.py

from lightflowPM import *
from math import *
import colorinc
import random

s = scene()

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

s.lightOn( s.newLight( "ambient", [ "color", vector3( 0.3, 0.3, 0.3 ) ] ) ) #環境光を加える。

plastic = s.newMaterial( "standard",[ "kc", colorinc.Brown,"kd",0.66 ] ) #

plastic2 = s.newMaterial( "standard",[ "kc", colorinc.CadetBlue,"kd",0.66 ] ) #

plastic3 = s.newMaterial( "standard",[ "kc", colorinc.Coral,"kd",0.66 ] ) #

plastic4 = s.newMaterial( "standard",[ "kc", colorinc.VLightGray,"kd",0.66 ] ) #

plastic5 = s.newMaterial( "standard",[ "kc", colorinc.Aquamarine,"kd",0.66 ] ) #

plastic6 = s.newMaterial( "standard",[ "kc", colorinc.BlueViolet,"kd",0.66 ] ) #

#plasticをリスト化した
col=[plastic,plastic2,plastic3,plastic4,plastic5,plastic6]

check_ground=s.newPattern("check",["color",vector3( 0.2, 0.4, 0.6 ),"scale",0.025])

ground=s.newMaterial( "standard",[ "kc", check_ground,"kc",vector3( 1.0, 1.0, 1.0 ),"ka",check_ground ] ) #チェック青と白

#関数定義 ボックスの位置とリストcolのインデックス番号0から5まで、Z軸中心回転角度rotを追加
def boxpos(x0,y0,z0,rot,c):
s.materialBegin( col[c] )
s.transformBegin( transform().translation( vector3(x0,y0,z0)))
s.transformBegin( transform().rotationAroundZ( pi*rot/180 ))
s.addObject( s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] ) )
s.transformEnd()
s.transformEnd()
s.materialEnd()



#Create boxes!!
c=0
cnt=0
for i in range(-9,10,3):
for k in range(-6,13,3):
rot=random.choice([0,6,15,23,30,45,60,75,88])
boxpos(i,k,0,rot,c)
cnt=cnt+1
c=cnt%6



#check模様の地面groundをpatchで作成しています。高さ(z軸)を-1.0にしてぴったり立方体とあわせています。
s.materialBegin( ground )
s.addObject( s.newObject( "patch", [ "points",vector3( -50, -50, -1.0 ),vector3( -50, 50, -1.0 ),vector3( 50, -50, -1.0 ),vector3( 50, 50, -1.0 )] ) )
s.materialEnd()


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

s.imagerBegin( saver )
camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -12, 5 ), "aim", vector3( 0, 0, 0 ) ] )
s.imagerEnd()

s.render( camera, 640, 340 )
  • -
  • -

Lightflowで立方体を45度回転配置する

rot=45に指定してしまうと、全部がいっせいに整列します。
box_pos_rot45.jpg
  • -
  • -

球体の質感1

球体の質感について調整する。
基本質感。
sphere_glass01.jpg

以下はサンプルファイル参考にしてください。

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

s = scene()

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

s.lightOn( s.newLight( "ambient", [ "color", vector3( 0.2, 0.2, 0.2 ) ] ) ) #環境光を加える。

plastic = s.newMaterial( "standard",[ "kc", vector3( 0.6, 0.6, 0.6 ),"kd", 0.33 ] )

plastic2 = s.newMaterial( "standard",[ "kc", vector3( 0.6, 0.6, 0.6 ),"kd", 0.33 ] )

plastic3 = s.newMaterial( "standard",[ "kc", vector3( 0.6, 0.6, 0.6 ),"kd", 0.33 ] )

check_ground=s.newPattern("check",["color",vector3( 0.2, 0.4, 0.6),"scale",0.025])

ground=s.newMaterial( "standard",[ "kc", check_ground,"kc",vector3( 1.0, 1.0, 1.0 ),"ka",check_ground ] )

#ground=s.newMaterial( "standard",[ "kc", vector3( 1, 1, 1 ) ] ) #白


s.materialBegin( plastic )
s.addObject( s.newObject( "sphere", [ "radius",1.4] ) )
s.materialEnd()


#地面groundをpatchで作成しています。高さ(z軸)を-1.4にしてぴったり球とあわせています。
s.materialBegin( ground )

s.addObject( s.newObject( "patch", [ "points",vector3( -50, -50, -1.4 ),vector3( -50, 50, -1.4 ),vector3( 50, -50, -1.4 ),vector3( 50, 50, -1.4 )] ) )

s.materialEnd()

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

s.imagerBegin( saver )

camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -3, 2 ), "aim", vector3( 0, 0, 0 ) ] )

s.imagerEnd()

s.render( camera, 512, 300 )

  • -
  • -

球体の質感2

映り込みの設定
"kr",vector3(0.4,0.4,0.4)
sphere_glass02.jpg

以下のサンプルファイルを参考にしてください。

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

s = scene()

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

s.lightOn( s.newLight( "ambient", [ "color", vector3( 0.2, 0.2, 0.2 ) ] ) ) #環境光を加える。

plastic = s.newMaterial( "standard",[ "kc", vector3( 0.6, 0.6, 0.6 ),"kd", 0.33 ,"kr",vector3(0.4,0.4,0.4)] )

plastic2 = s.newMaterial( "standard",[ "kc", vector3( 0.6, 0.6, 0.6 ),"kd", 0.33 ] )

plastic3 = s.newMaterial( "standard",[ "kc", vector3( 0.6, 0.6, 0.6 ),"kd", 0.33 ] )

check_ground=s.newPattern("check",["color",vector3( 0.2, 0.4, 0.6),"scale",0.025])

ground=s.newMaterial( "standard",[ "kc", check_ground,"kc",vector3( 1.0, 1.0, 1.0 ),"ka",check_ground ] )

#ground=s.newMaterial( "standard",[ "kc", vector3( 1, 1, 1 ) ] ) #白


s.materialBegin( plastic )
s.addObject( s.newObject( "sphere", [ "radius",1.4] ) )
s.materialEnd()


#地面groundをpatchで作成しています。高さ(z軸)を-1.4にしてぴったり球とあわせています。
s.materialBegin( ground )

s.addObject( s.newObject( "patch", [ "points",vector3( -50, -50, -1.4 ),vector3( -50, 50, -1.4 ),vector3( 50, -50, -1.4 ),vector3( 50, 50, -1.4 )] ) )

s.materialEnd()

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

s.imagerBegin( saver )

camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -3, 2 ), "aim", vector3( 0, 0, 0 ) ] )

s.imagerEnd()

s.render( camera, 512, 300 )

  • -
  • -

球体の質感3

透明度を加える。
plastic = s.newMaterial( "standard",[ "kc", vector3( 0.2, 0.2, 0.2 ),"kd", 0.01 ,"kr",vector3(0.2,0.2,0.2),"kt",vector3(0.8,0.8,0.8),"IOR",1.12] )

sphere_glass03.jpg

以下のサンプルファイルを参考にしてください。

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

s = scene()

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

s.lightOn( s.newLight( "ambient", [ "color", vector3( 0.2, 0.2, 0.2 ) ] ) ) #環境光を加える。

plastic = s.newMaterial( "standard",[ "kc", vector3( 0.2, 0.2, 0.2 ),"kd", 0.01 ,"kr",vector3(0.2,0.2,0.2),"kt",vector3(0.8,0.8,0.8),"IOR",1.12] )

plastic2 = s.newMaterial( "standard",[ "kc", vector3( 0.6, 0.6, 0.6 ),"kd", 0.33 ] )

plastic3 = s.newMaterial( "standard",[ "kc", vector3( 0.6, 0.6, 0.6 ),"kd", 0.33 ] )

check_ground=s.newPattern("check",["color",vector3( 0.2, 0.4, 0.6),"scale",0.025])

ground=s.newMaterial( "standard",[ "kc", check_ground,"kc",vector3( 1.0, 1.0, 1.0 ),"ka",check_ground ] )

#ground=s.newMaterial( "standard",[ "kc", vector3( 1, 1, 1 ) ] ) #白


s.materialBegin( plastic )
s.addObject( s.newObject( "sphere", [ "radius",1.4] ) )
s.materialEnd()


#地面groundをpatchで作成しています。高さ(z軸)を-1.4にしてぴったり球とあわせています。
s.materialBegin( ground )

s.addObject( s.newObject( "patch", [ "points",vector3( -50, -50, -1.4 ),vector3( -50, 50, -1.4 ),vector3( 50, -50, -1.4 ),vector3( 50, 50, -1.4 )] ) )

s.materialEnd()

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

s.imagerBegin( saver )

camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -3, 2 ), "aim", vector3( 0, 0, 0 ) ] )

s.imagerEnd()

s.render( camera, 512, 300 )

  • -
  • -

球体の質感4

コースティクス(集光模様)を入れるためにラジオシティのスイッチを入れる。記述の最後の行のひとつ上に
s.radiosity()
を加える。
質感は以下のように設定した。屈折率を調整すると面白い。
plastic = s.newMaterial( "standard",[ "kc", vector3( 0.2, 0.2, 0.2 ),"kd", 0.01 ,"kr",vector3(0.2,0.2,0.2),"kt",vector3(0.8,0.8,0.8),"IOR",1.26,"caustics", 4, 4] )


sphere_glass04.jpg

#! /usr/bin/env python

from lightflowPM import *

from math import *

s = scene()

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

s.lightOn( s.newLight( "ambient", [ "color", vector3( 0.2, 0.2, 0.2 ) ] ) ) #環境光を加える。

plastic = s.newMaterial( "standard",[ "kc", vector3( 0.2, 0.2, 0.2 ),"kd", 0.01 ,"kr",vector3(0.2,0.2,0.2),"kt",vector3(0.8,0.8,0.8),"IOR",1.26,"caustics", 4, 4] )

plastic2 = s.newMaterial( "standard",[ "kt",vector3(0.95,0.95,0.95), "kr",vector3(0.05,0.05,0.05), "kd",0.01, "IOR",1.26,"caustics", 4, 4] )

plastic3 = s.newMaterial( "standard",[ "kt",vector3(0.85,0.85,0.85), "kr",vector3(0.15,0.15,0.15), "kd",0.01, "IOR",1.15,"transmission",1,"radiosity",1 ] )

check_ground=s.newPattern("check",["color",vector3( 0.2, 0.4, 0.6),"scale",0.025])

ground=s.newMaterial( "standard",[ "kc", check_ground,"kc",vector3( 1.0, 1.0, 1.0 ),"ka",check_ground ] )

#ground=s.newMaterial( "standard",[ "kc", vector3( 1, 1, 1 ) ] ) #白


s.materialBegin( plastic1 )
s.addObject( s.newObject( "sphere", [ "radius",1.4] ) )
s.materialEnd()


#地面groundをpatchで作成しています。高さ(z軸)を-1.4にしてぴったり球とあわせています。
s.materialBegin( ground )

s.addObject( s.newObject( "patch", [ "points",vector3( -50, -50, -1.4 ),vector3( -50, 50, -1.4 ),vector3( 50, -50, -1.4 ),vector3( 50, 50, -1.4 )] ) )

s.materialEnd()

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

s.imagerBegin( saver )

camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -3, 2 ), "aim", vector3( 0, 0, 0 ) ] )

s.imagerEnd()
s.radiosity()
s.render( camera, 512, 300 )
  • -
  • -

屈折率を計算する

以下のようにファイル出力するようにした。
idx=[1.05,1.1,1.15,1.2,1.22,1.24,1.26,1.28,1.3,1.4]
10個の屈折率を割り当てて10枚出力する
sphere_glass04pl1.jpg

sphere_glass04pl2.jpg

#! /usr/bin/env python

from lightflowPM import *

from math import *

for f in range(10):
s = scene()
s.lightOn( s.newLight( "point", [ "position", vector3( 5.0, -2.0, 5.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )

s.lightOn( s.newLight( "ambient", [ "color", vector3( 0.2, 0.2, 0.2 ) ] ) ) #環境光を加える。
idx=[1.05,1.1,1.15,1.2,1.22,1.24,1.26,1.28,1.3,1.4]
plastic = s.newMaterial( "standard",[ "kc", vector3( 0.2, 0.2, 0.2 ),"kd", 0.01 ,"kr",vector3(0.2,0.2,0.2),"kt",vector3(0.8,0.8,0.8),"IOR",idx[f],"caustics", 4, 4] )
plastic2 = s.newMaterial( "standard",[ "kt",vector3(0.95,0.95,0.95), "kr",vector3(0.05,0.05,0.05), "kd",0.01, "IOR",1.26,"caustics", 4, 4] )

plastic3 = s.newMaterial( "standard",[ "kt",vector3(0.85,0.85,0.85), "kr",vector3(0.15,0.15,0.15), "kd",0.01, "IOR",1.15,"transmission",1,"radiosity",1 ] )
check_ground=s.newPattern("check",["color",vector3( 0.2, 0.4, 0.6),"scale",0.025])

ground=s.newMaterial( "standard",[ "kc", check_ground,"kc",vector3( 1.0, 1.0, 1.0 ),"ka",check_ground ] )

#ground=s.newMaterial( "standard",[ "kc", vector3( 1, 1, 1 ) ] ) #白

s.materialBegin( plastic )
s.addObject( s.newObject( "sphere", [ "radius",1.4] ) )
s.materialEnd()

#地面groundをpatchで作成しています。高さ(z軸)を-1.4にしてぴったり球とあわせています。
s.materialBegin( ground )
s.addObject( s.newObject( "patch", [ "points",vector3( -50, -50, -1.4 ),vector3( -50, 50, -1.4 ),vector3( 50, -50, -1.4 ),vector3( 50, 50, -1.4 )] ) )

s.materialEnd()
saver = s.newImager( "tga-saver", [ "file", ("sphere_glass_%03d" % f)+".tga" ] )
s.imagerBegin( saver )

camera = s.newCamera( "pinhole", [ "eye", vector3( 0, -3, 2 ), "aim", vector3( 0, 0, 0 ) ] )

s.imagerEnd()
s.radiosity()
s.render( camera, 512, 300 )

  • -
  • -

Lightflow for Linux

メモ:役に立つかも。Thank you.

http://www.nue.tu-berlin.de/wer/knoerig/lightflow.html
http://web.archive.org/web/20070610101954/http://www.nue.tu-berlin.de/wer/knoerig/lightflow.html
  • -
  • -

Lightflow for Linux その2

LightFlowはすでに開発closedしてから、12年も経過しているので
今の状況では使えないところですが・・・・やっとできました。

■(以前のまとめ抜粋)Lightflow インストール Linuxでのインストール方法
http://rman.sakura.ne.jp/sfx/lf_man/lightflow-install.html

Linux勉強としてVirtualBoxを使ってLightFlowをインストールしてみました。
いろいろやってみるとPythonのバージョン違いで走らない状況?
困難?が待っていました。


■Vine Linux3.2の場合

libstdc++-libc6.1-1.so.2: cannot load shared object file: No such file or directory

compat-libstdc++-6.2-2.9.0.14.i386.rpm

# rpm -ivh compat-libstdc++-6.2-2.9.0.14.i386.rpm


上記のパッケージをとってインストールしここまでで終了。

■Debianの場合
debian-6.0.3

libstdc++-libc6.1-1.so.2: cannot load shared object file: No such file or directory

libstdc++2.9-glibc2.1_2.91.66-4_i386.deb
http://archive.debian.org/debian/pool/main/e/egcs1.1/libstdc++2.9-glibc2.1_2.91.66-4_i386.deb

$ dpkg -i libstdc++2.9-glibc2.1_2.91.66-4_i386.deb

上記のパッケージをとってここまでやって、以下実行。

■Lightflow実行
@debian:/usr/local/Lightflow/PM/Examples$ python ball1.py
ball1.py:3: RuntimeWarning: Python C API version mismatch for module lightflowPM: This Python has API version 1013, module lightflowPM has version 1007.
from lightflowPM import *

Lightflow Rendering Tools
Copyright (c) 1995-2000 by Jacopo Pantaleoni. All rights reserved


Error (LfFault):
LfFileIOBStream
error opening tmp_ve_VSE3HY
ここで終了。残念。

■試しにPython1.6.1の解凍しビルドすることをやってみる。
解凍うまくいかず
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error exit delayed from previous errors

拡張子は .gz となっていますが,実際は .tar ファイルのようなので,
次のようにして変更してください.

mv AAA.tar.gz AAA.tar


> どのようにして解凍すればよいのか

tar xvf AAA.tar




■Python1.6.1のビルド
./configure
make
make install

上書きしてしまったような
■Lightflow実行
@debian:/usr/local/Lightflow/PM/Examples$ python ball1.py
WARNING: Python C API version mismatch for module lightflowPM:
This Python has API version 1009, module lightflowPM has version 1007.

Lightflow Rendering Tools
Copyright (c) 1995-2000 by Jacopo Pantaleoni. All rights reserved


Error (LfFault):
LfFileIOBStream
error opening tmp_ve_7F11r0
ここで終了。残念。

■試しにPython1.5.2の解凍
mv py152.tgz py152.tar
tar xvf py152.tar
■Python1.5.2のビルド(Debian6.0.3)
./configure
make
make install
エラー出しながらもできたような。Python-1.5.2$ python
Python 1.6.1 (#1, Jan 9 2012, 15:26:06) [GCC 4.4.5] on linux2
Copyright (c) 1995-2001 Corporation for National Research Initiatives.
All Rights Reserved.
Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.
All Rights Reserved.
できていませんでした。

makeができておらず、
gcc -g -O2 -I./../Include -I.. -DHAVE_CONFIG_H -c -o fileobject.o fileobject.c
fileobject.c:590: error: conflicting types for ‘getline’
/usr/include/stdio.h:651: note: previous declaration of ‘getline’ was here
make[1]: *** [fileobject.o] エラー 1
make[1]: ディレクトリ `/home/mac/Python-1.5.2/Objects' から出ます
make: *** [Objects] エラー 2

どうやら、
fileobject.cの関数getlineがstdio.hとかぶっているようです。

/usr/include/stdio.h:651: note: previous declaration of ‘getline’ was here

エディタでgetlineを検索し、4箇所をgetline1と変えました。
改めて
./configure
make
sudo make altinstall
した。

root@debian:/home/mac/Downloads/Python-1.5.2# python1.5
Python 1.5.2 (#1, Jan 9 2012, 21:03:48) [GCC 4.4.5] on linux2
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterda

Python1.5.2動きました。
(Vine Linux3.2でのPython1.5.2のビルドはすんなりいきました。)


■ここからがうれしいところ(^^)。

root@debian:/usr/local/Lightflow/PM/Examples# python1.5 ball10000.py

Lightflow Rendering Tools
Copyright (c) 1995-2000 by Jacopo Pantaleoni. All rights reserved


Pinhole Camera On
Objects : 10000
00:00:01 - CSEADS 100/100 - boxes 48672 - depth 2 - objects 10000

Rendering 300 x 300 pixels
00:00:03 - 87.1%

root@debian:/usr/local/Lightflow/PM/Examples# gimp ball10000.tga

■無事、Debian Linux6.0.3でLightflowが起動。
古いVine Linux(3.2より古いもの?)でLightflowが動いていたのは、Python1.5.2だったためです。
Windowsと同じでLinuxにおいてもPython1.5.2でLightflowは動きます。
make altinstallするとpythonのバージョン別に使い分けができます。

Lightflow起動は

# python1.5 ball1.py

ball1.tgaが生成されます。
レンダリングが速くて快適ですね。
長年わからなかったのが解決してうれしいです。
ありがとうございます。

root@debian:/usr/local/Lightflow/PM/Examples# python1.5 mechanic.py

以下Rendering Time:17s
mechanic.jpg
  • -
  • -

Lightflow for Linux 最初の設定(抜粋)

Installation Guide.


1.Untar the base packet (e.g. to /usr/local/).

2.The python interface requires python >= 1.5, so install it first if you want to use it.

3.Copy or link LightflowPM.so to /usr/lib/phython1.5/site-packages (or wherever this directory is): ln -s /usr/local/LightFlow/LightflowPM.so /usr/lib/python1.5/site-packages

4. The same for the C++-library: ln -s /usr/local/LightFlow/Lightflow/libLightflow.so /usr/lib

5.Install the content of Lightflow_Include.tar.bz; the includes should be in /usr/include/Lightflow.

6. Extend the startup configuration script of your shell (e.g. bashrc) by setting LIGHTFLOWPATH to Lightflows base directory: export LIGHTFLOWPATH=/usr/local/LightFlow

7.Have a look at the doc's under PM/doc and CS/doc, python-examples are under PM/Examples.

8.Now the examples above should work (python-scripts have to be made executable before run, C++-examples (e.g. tree.tar.gz) have to be compiled (use make).
  • -
  • -

<< 6/8 >>