1/1

LightFlow for linux 64bit その2

前回64bitでうまくいかなかった。やっとできたのでメモする。
CentOS 64bit環境でpython1.5を32bitビルド試みたが、64bitになってしまう。結局Virtualboxに入れたCentOS i686(32bit)版でビルドしたpython1.5をコピーして、LightFlowが起動した。

以下試みる。CentOS 64bitでビルドしても64bit.
export CFLAGS=-m32
export CXXFLAGS=-m32
echo $CFLAGS
echo $CXXFLAGS
yum install glibc-2.12-1.80.el6_3.5.i686
yum install libstdc++*
yum install libstdc++*.i686
./configure --enable-32bit
make ARCH="-m32"

32bit環境の以下をコピー
/usr/local/bin python1.5
/usr/local/lib python1.5/
/usr/local/include python1.5/
64bit環境にインストールする。
sudo cp python1.5 /usr/local/bin

さらに次のファイルをダウンロードします。
compat-libstdc++-6.2-2.9.0.14.i386.rpm
http://rpm.pbone.net/index.php3/stat/4/idpl/14760/com/compat-libstdc++-6.2-2.9.0.14.i386.rpm.html

インストールします。
[root@localhost]# rpm -ivh compat-libstdc++-6.2-2.9.0.14.i386.rpm
Preparing... ########################################### [100%]
1:compat-libstdc++ ########################################### [100%]

その他、.bashrcに記入
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/Lightflow
PYTHONPATH=$PYTHONPATH:$HOME/Lightflow
LIGHTFLOWPATH=$HOME/Lightflow
LIGHTFLOW_SE_MEMORY=32000
LIGHTFLOW_VE_MEMORY=32000

export LD_LIBRARY_PATH PYTHONPATH LIGHTFLOWPATH LIGHTFLOW_SE_MEMORY LIGHTFLOW_VE_MEMORY

以下を実行するとレンダリングできました。
Examples]$ python1.5 ball1.py

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


Pinhole Camera On
Objects : 1

Rendering 300 x 300 pixels
00:00:00 - 87.1%
Windowsより速いです。
  • -
  • -

はじめてのFujiyama Renderer その1

Fujiyama Rendererをさわる。
CentOS6.3 x86_64でビルドした。

Python APIを利用する。
fujiyama.pyはbinフォルダに置いた。
座標空間は右手系 Y up。

fujiyama.pyを利用するには
$ export PYTHONPATH=$PYTHONPATH:/usr/lib/python2.6/site-packages/:$HOME/Fujiyama-Renderer/bin/

レンダリングはscenesフォルダから
scenes]$ python cube01.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#export PYTHONPATH=$PYTHONPATH:/usr/lib/python2.6/site-packages/:$HOME/Fujiyama-Renderer/bin/

import fujiyama

si = fujiyama.SceneInterface()

#plugins
si.OpenPlugin('ConstantShader')
si.OpenPlugin('PlasticShader')
si.OpenPlugin('GlassShader')

#Camera
si.NewCamera('cam1', 'PerspectiveCamera')
si.SetProperty3('cam1', 'translate', 0, 2, 6)
si.SetProperty3('cam1', 'rotate', -11.309932474020213, 0, 0)

#Light
si.NewLight('light1', 'PointLight')
si.SetProperty3('light1', 'translate', 10, 12, 10)

#Shader
si.NewShader('floor_shader', 'PlasticShader')
si.SetProperty3('floor_shader', 'diffuse', .2, .25, .3)
si.SetProperty1('floor_shader', 'ior', 2)

si.NewShader('cube_shader', 'PlasticShader')
si.SetProperty3('cube_shader', 'diffuse', .9, .2, .2)

si.NewShader('cube_shader3', 'PlasticShader')
si.SetProperty3('cube_shader3', 'diffuse', .1, .2, .8)

si.NewShader('cube_shader2', 'PlasticShader')
si.SetProperty3('cube_shader2', 'diffuse', .1, .95, .1)

si.NewShader('dome_shader', 'ConstantShader')
si.SetProperty3('dome_shader', 'diffuse', .8, .8, .8)


#Mesh
si.NewMesh('dome_mesh', '../mesh/dome.mesh')
si.NewMesh('floor_mesh', '../mesh/floor.mesh')
si.NewMesh('cube_mesh', '../mesh/cube.mesh')

#ObjectInstance
si.NewObjectInstance('cube1', 'cube_mesh')
si.AssignShader('cube1', 'cube_shader3')
si.SetProperty3('cube1', 'translate', 1.2,.6, 0)
si.SetProperty3('cube1', 'scale', .8,.8, .8)

si.NewObjectInstance('cube2', 'cube_mesh')
si.AssignShader('cube2', 'cube_shader2')
si.SetProperty3('cube2', 'translate', 0,.6, 0)

si.NewObjectInstance('cube3', 'cube_mesh')
si.AssignShader('cube3', 'cube_shader')
si.SetProperty3('cube3', 'translate', -1.2,.6, 0)

si.NewObjectInstance('floor1', 'floor_mesh')
si.AssignShader('floor1', 'floor_shader')

si.NewObjectInstance('dome1', 'dome_mesh')
si.AssignShader('dome1', 'dome_shader')

#FrameBuffer
si.NewFrameBuffer('fb1', 'rgba')

#Properties
si.ShowPropertyList('Renderer')

#Renderer
si.NewRenderer('ren1')
si.AssignCamera('ren1', 'cam1')
si.AssignFrameBuffer('ren1', 'fb1')
si.SetProperty2('ren1', 'resolution', 640, 480)
#si.SetProperty2('ren1', 'resolution', 160, 120)

si.SetProperty1('ren1', 'raymarch_step', .01)
si.SetProperty1('ren1', 'raymarch_shadow_step', .02)
si.SetProperty1('ren1', 'raymarch_reflect_step', .02)

#Rendering
si.RenderScene('ren1')

#Output
si.SaveFrameBuffer('fb1', '../cube01.fb')

#Run commands
si.Run()
#si.Print()

cube01.jpeg
画像を見るには
$ fbview cube01.fb
OpenEXRに変換は
$ fb2exr cube01.fb cube01.exr

Light設定が変更
'translate'になった。
  • -
  • -

はじめてのFujiyama Renderer その2

Python API fujiyama.pyを利用。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#export PYTHONPATH=$PYTHONPATH:/usr/lib/python2.6/site-packages/:$HOME/Fujiyama-Renderer/bin/
from math import *
import fujiyama

si = fujiyama.SceneInterface()

#plugins
si.OpenPlugin('ConstantShader')
si.OpenPlugin('PlasticShader')
si.OpenPlugin('GlassShader')

#Camera
si.NewCamera('cam1', 'PerspectiveCamera')
si.SetProperty3('cam1', 'translate', 0, 2, 6)
si.SetProperty3('cam1', 'rotate', -11.309932474020213, 0, 0)

#Light
si.NewLight('light1', 'PointLight')
si.SetProperty3('light1', 'position', 10, 12, 10)

#Shader
si.NewShader('floor_shader', 'PlasticShader')
si.SetProperty3('floor_shader', 'diffuse', .2, .25, .3)
si.SetProperty1('floor_shader', 'ior', 2)

si.NewShader('cube_shader', 'PlasticShader')
si.SetProperty3('cube_shader', 'diffuse', .9, .2, .2)

#si.NewShader('cube_shader3', 'PlasticShader')
#si.SetProperty3('cube_shader3', 'diffuse', .1, .2, .8)

#si.NewShader('cube_shader2', 'PlasticShader')
#si.SetProperty3('cube_shader2', 'diffuse', .1, .95, .1)

si.NewShader('dome_shader', 'ConstantShader')
si.SetProperty3('dome_shader', 'diffuse', .8, .8, .8)


#Mesh
si.NewMesh('dome_mesh', '../mesh/dome.mesh')
si.NewMesh('floor_mesh', '../mesh/floor.mesh')
si.NewMesh('cube_mesh', '../mesh/cube.mesh')

#ObjectInstance
N1=5
J=1
for i in range(5):
si.NewShader('cube_shader'+str(i), 'PlasticShader')
si.SetProperty3('cube_shader'+str(i), 'diffuse', 0.5*(1+sin(2*pi/N1*J)),0.5, 0.5*(1+cos(2*pi/N1*J)))
si.NewObjectInstance('cube'+str(i), 'cube_mesh')
si.AssignShader('cube'+str(i), 'cube_shader'+str(i))
si.SetProperty3('cube'+str(i), 'translate', i-2,.6, 0)
si.SetProperty3('cube'+str(i), 'scale', .8,.8, .8)
J+=1



si.NewObjectInstance('floor1', 'floor_mesh')
si.AssignShader('floor1', 'floor_shader')

si.NewObjectInstance('dome1', 'dome_mesh')
si.AssignShader('dome1', 'dome_shader')

#FrameBuffer
si.NewFrameBuffer('fb1', 'rgba')

#Properties
si.ShowPropertyList('Renderer')

#Renderer
si.NewRenderer('ren1')
si.AssignCamera('ren1', 'cam1')
si.AssignFrameBuffer('ren1', 'fb1')
si.SetProperty2('ren1', 'resolution', 640, 480)
#si.SetProperty2('ren1', 'resolution', 160, 120)

si.SetProperty1('ren1', 'raymarch_step', .01)
si.SetProperty1('ren1', 'raymarch_shadow_step', .02)
si.SetProperty1('ren1', 'raymarch_reflect_step', .02)

#Rendering
si.RenderScene('ren1')

#Output
si.SaveFrameBuffer('fb1', '../cube03.fb')

#Run commands
si.Run()
#si.Print()

cube03.jpeg
  • -
  • -

はじめてのFujiyama Renderer その3

地道に試してみる。si.Print()はシーンファイルの出力です。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#export PYTHONPATH=$PYTHONPATH:/usr/lib/python2.6/site-packages/:$HOME/Fujiyama-Renderer/bin/
from math import *
import fujiyama

si = fujiyama.SceneInterface()

#plugins
si.OpenPlugin('ConstantShader')
si.OpenPlugin('PlasticShader')
si.OpenPlugin('GlassShader')

#Camera
si.NewCamera('cam1', 'PerspectiveCamera')
si.SetProperty3('cam1', 'translate', 0, 2, 6)
si.SetProperty3('cam1', 'rotate', -11.309932474020213, 0, 0)

#Light
si.NewLight('light1', 'PointLight')
si.SetProperty3('light1', 'position', 10, 12, 10)

#Shader
si.NewShader('floor_shader', 'PlasticShader')
si.SetProperty3('floor_shader', 'diffuse', .2, .25, .3)
si.SetProperty1('floor_shader', 'ior', 2)

si.NewShader('cube_shader', 'PlasticShader')
si.SetProperty3('cube_shader', 'diffuse', .9, .2, .2)

#si.NewShader('cube_shader3', 'PlasticShader')
#si.SetProperty3('cube_shader3', 'diffuse', .1, .2, .8)

#si.NewShader('cube_shader2', 'PlasticShader')
#si.SetProperty3('cube_shader2', 'diffuse', .1, .95, .1)

si.NewShader('dome_shader', 'ConstantShader')
si.SetProperty3('dome_shader', 'diffuse', .8, .8, .8)


#Mesh
si.NewMesh('dome_mesh', '../mesh/dome.mesh')
si.NewMesh('floor_mesh', '../mesh/floor.mesh')
si.NewMesh('cube_mesh', '../mesh/cube.mesh')

#ObjectInstance
N1=16
J=1
while J<=N1:
si.NewShader('cube_shader'+str(J), 'PlasticShader')
si.SetProperty3('cube_shader'+str(J), 'diffuse', 0.5*(1+sin(2*pi/N1*J)),0.5, 0.5*(1+cos(2*pi/N1*J)))
si.NewObjectInstance('cube'+str(J), 'cube_mesh')
si.AssignShader('cube'+str(J), 'cube_shader'+str(J))
si.SetProperty3('cube'+str(J), 'translate', 1.7*sin(2*pi/N1*J),.4, 1.7*cos(2*pi/N1*J))
si.SetProperty3('cube'+str(J), 'rotate', 0,360/N1*J, 0)
si.SetProperty3('cube'+str(J), 'scale', .5,.5, .5)
J+=1



si.NewObjectInstance('floor1', 'floor_mesh')
si.AssignShader('floor1', 'floor_shader')

si.NewObjectInstance('dome1', 'dome_mesh')
si.AssignShader('dome1', 'dome_shader')

#FrameBuffer
si.NewFrameBuffer('fb1', 'rgba')

#Properties
si.ShowPropertyList('Renderer')

#Renderer
si.NewRenderer('ren1')
si.AssignCamera('ren1', 'cam1')
si.AssignFrameBuffer('ren1', 'fb1')
si.SetProperty2('ren1', 'resolution', 640, 480)
#si.SetProperty2('ren1', 'resolution', 160, 120)

si.SetProperty1('ren1', 'raymarch_step', .01)
si.SetProperty1('ren1', 'raymarch_shadow_step', .02)
si.SetProperty1('ren1', 'raymarch_reflect_step', .02)

#Rendering
si.RenderScene('ren1')

#Output
si.SaveFrameBuffer('fb1', '../cube04.fb')

#Run commands
si.Run()
#si.Print()


cube04.jpeg
Thank you for your support.
ありがとうございます。
  • -
  • -

はじめてのFujiyama Renderer その4

Stanford Happy buddhaをレンダリングする。
jpegに変換するとねむくなるのでgimpでトーンカーブ調整する。
bd04.jpeg

Glass shaderを利用
bd05.jpeg
ありがとうございます。
  • -
  • -

はじめてのFujiyama Renderer その5

毛並表現わかりました。

$ curvegen hoge.mesh hoge.crv

でファーを生成する。
ありがとうございます。
furbunny.jpg
  • -
  • -

1/1