1/1

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

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
ありがとうございます。
  • -
  • -

Lightflow円柱と立方体

ブーリアン演算をするために、円柱は傾けたまま、立方体は回転させてみた。元ねたは、「はじめてのCG」POV-Ray本を参考にした。

まずは円柱と立方体を表示する。
bool03.jpg

サンプルファイルはこちら

#! /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( -3.0, -3.0, 3.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )

s.lightOn( s.newLight( "point", [ "position", vector3( 3.0, 3.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 ] )

#cylinder
s.materialBegin( plastic )
s.transformBegin( transform().rotationAroundX( pi*5.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()
s.materialEnd()

#cylinder with double caps
hole = s.newObject( "boundary", [ "surfaces", cyl, cap1, cap2 ] )



plastic2 = s.newMaterial( "standard", [ "kc", vector3(0.556863,0.137255,0.137255), "kd", 0.5, "km", 0.1 ] )

#box
s.materialBegin( plastic2 )
s.transformBegin( transform().translation( vector3( 0, 0, 1.2 ) ) )
s.transformBegin( transform().rotationAroundY( pi*45.0/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()

s.addObject(hole)


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

s.imagerBegin( saver )

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

s.imagerEnd()

s.render( camera, 400, 400 )


面白いですね。ありがとうございます。
  • -
  • -

Lightflowブーリアン演算その1

立方体からふたつき円柱を使ってくり貫いた。
bool042.jpg

csg1 = s.newObject( "solid",[ "type", "difference",
"solids", box1, hole ] )
"difference"差集合を表す。
box1-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( -3.0, -3.0, 3.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )

s.lightOn( s.newLight( "point", [ "position", vector3( 3.0, 3.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 ] )

#cylinder
s.materialBegin( plastic )
s.transformBegin( transform().rotationAroundX( pi*5.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()
s.materialEnd()

#cylinder with double caps
hole = s.newObject( "boundary", [ "surfaces", cyl, cap1, cap2 ] )



plastic2 = s.newMaterial( "standard", [ "kc", vector3(0.556863,0.137255,0.137255), "kd", 0.5, "km", 0.1 ] )

#box1
s.materialBegin( plastic2 )
s.transformBegin( transform().translation( vector3( 0, 0, 1.2 ) ) )
s.transformBegin( transform().rotationAroundY( pi*45.0/180 ) )
box1=s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] )
s.transformEnd()
s.transformEnd()
s.materialEnd()


csg1 = s.newObject( "solid",
[ "type", "difference",
"solids", box1, hole ] )

s.addObject(csg1)


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

s.imagerBegin( saver )

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

s.imagerEnd()

s.render( camera, 400, 400 )


逆にすれば形も変わる。
csg1 = s.newObject( "solid",[ "type", "difference",
"solids", hole, box1 ] )
bool041.jpg
ありがとうございます。
  • -
  • -

Lightflowブーリアン演算その2

ブーリアン演算を使って、お互いの物体の重なっている部分を表示するには、"intersection"を使う。Lightflowの設定では3つの物体でもまとめて計算できるようだ。便利かも。
csg1 = s.newObject( "solid",
[ "type", "intersection",
"solids", box1, hole ] )
bool04in.jpg
以下はサンプルファイル参考にしてみてください。


#! /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( -3.0, -3.0, 3.0 ), "color", vector3( 300.0, 300.0, 300.0 ) ] ) )

s.lightOn( s.newLight( "point", [ "position", vector3( 3.0, 3.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 ] )

#cylinder
s.materialBegin( plastic )
s.transformBegin( transform().rotationAroundX( pi*5.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()
s.materialEnd()

#cylinder with double caps
hole = s.newObject( "boundary", [ "surfaces", cyl, cap1, cap2 ] )



plastic2 = s.newMaterial( "standard", [ "kc", vector3(0.556863,0.137255,0.137255), "kd", 0.5, "km", 0.1 ] )

#box1
s.materialBegin( plastic2 )
s.transformBegin( transform().translation( vector3( 0, 0, 1.2 ) ) )
s.transformBegin( transform().rotationAroundY( pi*45.0/180 ) )
box1=s.newObject( "box", [ "position",vector3( -1.0, -1.0, -1.0 ),vector3( 1.0, 1.0, 1.0 )] )
s.transformEnd()
s.transformEnd()
s.materialEnd()


csg1 = s.newObject( "solid",
[ "type", "intersection",
"solids", box1, hole ] )

s.addObject(csg1)


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

s.imagerBegin( saver )

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

s.imagerEnd()

s.render( camera, 400, 400 )
  • -
  • -

1/1