Rendering学習日記

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

Primitive group in Fujiyama Renderer

feature since v0.2.9
-------------------------------------------------
* Mesh primitive group has been supported. Different shaders can be assigned to each primitive group. Shading group tagged by 'g' in wavefront obj file is converted to primitive group in Fujiyama.
twoboxes

OBJ export from blender


open obj file with text editor.
change o Cube.001 -----> g Cube.001
change o Cube -----> g Cube
following are: test01.obj

# Blender v2.79 (sub 0) OBJ File: ''
# www.blender.org
mtllib test01.mtl
g Cube.001
v 2.320780 -0.989213 -3.512618
v 2.320780 -0.989213 -1.512618
v 0.320780 -0.989213 -1.512618
v 0.320780 -0.989213 -3.512618
v 2.320780 1.010787 -3.512617
v 2.320779 1.010787 -1.512617
v 0.320780 1.010787 -1.512618
v 0.320780 1.010787 -3.512618
vn 0.0000 -1.0000 -0.0000
vn 0.0000 1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn -0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 -0.0000
vn 0.0000 0.0000 -1.0000
usemtl Material.001
s off
f 1//1 2//1 3//1 4//1
f 5//2 8//2 7//2 6//2
f 1//3 5//3 6//3 2//3
f 2//4 6//4 7//4 3//4
f 3//5 7//5 8//5 4//5
f 5//6 1//6 4//6 8//6
g Cube
v 1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 1.000000
v -1.000000 -1.000000 1.000000
v -1.000000 -1.000000 -1.000000
v 1.000000 1.000000 -0.999999
v 0.999999 1.000000 1.000001
v -1.000000 1.000000 1.000000
v -1.000000 1.000000 -1.000000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn -0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 -0.0000
vn 0.0000 0.0000 -1.0000
usemtl Material
s off
f 9//7 10//7 11//7 12//7
f 13//8 16//8 15//8 14//8
f 9//9 13//9 14//9 10//9
f 10//10 14//10 15//10 11//10
f 11//11 15//11 16//11 12//11
f 13//12 9//12 12//12 16//12

Material: test01.mtl



# Blender MTL File: 'None'
# Material Count: 2
newmtl Material
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.000000 0.000000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2

newmtl Material.001
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.008794 0.005152 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2

Use wavefrontobj.py


open terminal.
$ export PYTHONPATH=$PYTHONPATH:/usr/lib/python2.7/site-packages/:$HOME/Fujiyama-Renderer/bin/

$ python wavefrontobj.py test01.obj


# Setting up environment variable
# FJ_LIBRARY_PATH = /home/mac/Fujiyama-Renderer/lib
reading test01.obj
reading test01.mtl

si.NewShader(Material, PlasticShader)
si.SetProperty3(Material, ambient, 1.0, 1.0, 1.0)
si.SetProperty3(Material, diffuse, 0.8, 0.0, 0.0)
si.SetProperty3(Material, reflection, 0.5, 0.5, 0.5)

si.NewShader(Material.001, PlasticShader)
si.SetProperty3(Material.001, ambient, 1.0, 1.0, 1.0)
si.SetProperty3(Material.001, diffuse, 0.008794, 0.005152, 0.64)
si.SetProperty3(Material.001, reflection, 0.5, 0.5, 0.5)

si.AssignShader(myobj, Cube.001, Material.001)
si.AssignShader(myobj, Cube, Material)

Rendering with Fujiyama Renderer


following are : two_boxes. Thank You.

import fujiyama
si = fujiyama.SceneInterface()

#plugins
si.OpenPlugin('plastic_shader', 'PlasticShader')
si.OpenPlugin('glass_shader', 'GlassShader')
si.OpenPlugin('constant_shader', 'ConstantShader')
si.OpenPlugin('stanfordply_procedure', 'StanfordPlyProcedure')
si.OpenPlugin('wavefrontobj_procedure', 'WavefrontObjProcedure')

#Camera
si.NewCamera('cam1', 'PerspectiveCamera')
si.SetProperty3('cam1', 'translate', 0, 2, 7)
#si.SetProperty3('cam1', 'rotate', -5.710593137499643, 0, 0)
si.SetProperty3('cam1', 'rotate', -8, 0, 0)

#Light
si.NewLight('light0', 'PointLight')
si.SetProperty3('light0', 'translate', 0.900771, 12, 4.09137)
si.SetProperty1('light0', 'intensity', 0.03125)
si.NewLight('light1', 'PointLight')
si.SetProperty3('light1', 'translate', 2.02315, 12, 5.28021)
si.SetProperty1('light1', 'intensity', 0.03125)
si.NewLight('light2', 'PointLight')
si.SetProperty3('light2', 'translate', 10.69, 12, 13.918)
si.SetProperty1('light2', 'intensity', 0.03125)
si.NewLight('light3', 'PointLight')
si.SetProperty3('light3', 'translate', 4.28027, 12, 7.58462)
si.SetProperty1('light3', 'intensity', 0.03125)
si.NewLight('light4', 'PointLight')
si.SetProperty3('light4', 'translate', 12.9548, 12, 1.19914)
si.SetProperty1('light4', 'intensity', 0.03125)
si.NewLight('light5', 'PointLight')
si.SetProperty3('light5', 'translate', 6.55808, 12, 2.31772)
si.SetProperty1('light5', 'intensity', 0.03125)
si.NewLight('light6', 'PointLight')
si.SetProperty3('light6', 'translate', 0.169064, 12, 10.9623)
si.SetProperty1('light6', 'intensity', 0.03125)
si.NewLight('light7', 'PointLight')
si.SetProperty3('light7', 'translate', 1.25002, 12, 4.51314)
si.SetProperty1('light7', 'intensity', 0.03125)
si.NewLight('light8', 'PointLight')
si.SetProperty3('light8', 'translate', 2.46758, 12, 5.73382)
si.SetProperty1('light8', 'intensity', 0.03125)
si.NewLight('light9', 'PointLight')
si.SetProperty3('light9', 'translate', 3.55644, 12, 6.84334)
si.SetProperty1('light9', 'intensity', 0.03125)
si.NewLight('light10', 'PointLight')
si.SetProperty3('light10', 'translate', 4.76112, 12, 8.00264)
si.SetProperty1('light10', 'intensity', 0.03125)
si.NewLight('light11', 'PointLight')
si.SetProperty3('light11', 'translate', 13.3267, 12, 9.10333)
si.SetProperty1('light11', 'intensity', 0.03125)
si.NewLight('light12', 'PointLight')
si.SetProperty3('light12', 'translate', 14.4155, 12, 2.68084)
si.SetProperty1('light12', 'intensity', 0.03125)
si.NewLight('light13', 'PointLight')
si.SetProperty3('light13', 'translate', 8.10755, 12, 3.79629)
si.SetProperty1('light13', 'intensity', 0.03125)
si.NewLight('light14', 'PointLight')
si.SetProperty3('light14', 'translate', 9.21103, 12, 4.9484)
si.SetProperty1('light14', 'intensity', 0.03125)
si.NewLight('light15', 'PointLight')
si.SetProperty3('light15', 'translate', 2.83469, 12, 6.09221)
si.SetProperty1('light15', 'intensity', 0.03125)
si.NewLight('light16', 'PointLight')
si.SetProperty3('light16', 'translate', 4.00945, 12, 7.18302)
si.SetProperty1('light16', 'intensity', 0.03125)
si.NewLight('light17', 'PointLight')
si.SetProperty3('light17', 'translate', 12.6072, 12, 0.832089)
si.SetProperty1('light17', 'intensity', 0.03125)
si.NewLight('light18', 'PointLight')
si.SetProperty3('light18', 'translate', 6.21169, 12, 1.98055)
si.SetProperty1('light18', 'intensity', 0.03125)
si.NewLight('light19', 'PointLight')
si.SetProperty3('light19', 'translate', 7.39599, 12, 10.5563)
si.SetProperty1('light19', 'intensity', 0.03125)
si.NewLight('light20', 'PointLight')
si.SetProperty3('light20', 'translate', 8.52421, 12, 4.15086)
si.SetProperty1('light20', 'intensity', 0.03125)
si.NewLight('light21', 'PointLight')
si.SetProperty3('light21', 'translate', 9.5891, 12, 5.39715)
si.SetProperty1('light21', 'intensity', 0.03125)
si.NewLight('light22', 'PointLight')
si.SetProperty3('light22', 'translate', 3.18967, 12, 13.9542)
si.SetProperty1('light22', 'intensity', 0.03125)
si.NewLight('light23', 'PointLight')
si.SetProperty3('light23', 'translate', 4.41432, 12, 0.082813)
si.SetProperty1('light23', 'intensity', 0.03125)
si.NewLight('light24', 'PointLight')
si.SetProperty3('light24', 'translate', 5.48803, 12, 1.21856)
si.SetProperty1('light24', 'intensity', 0.03125)
si.NewLight('light25', 'PointLight')
si.SetProperty3('light25', 'translate', 6.57647, 12, 2.31432)
si.SetProperty1('light25', 'intensity', 0.03125)
si.NewLight('light26', 'PointLight')
si.SetProperty3('light26', 'translate', 0.265098, 12, 10.9453)
si.SetProperty1('light26', 'intensity', 0.03125)
si.NewLight('light27', 'PointLight')
si.SetProperty3('light27', 'translate', 8.84422, 12, 12.1117)
si.SetProperty1('light27', 'intensity', 0.03125)
si.NewLight('light28', 'PointLight')
si.SetProperty3('light28', 'translate', 10.0154, 12, 5.67625)
si.SetProperty1('light28', 'intensity', 0.03125)
si.NewLight('light29', 'PointLight')
si.SetProperty3('light29', 'translate', 11.0907, 12, 14.4043)
si.SetProperty1('light29', 'intensity', 0.03125)
si.NewLight('light30', 'PointLight')
si.SetProperty3('light30', 'translate', 4.71726, 12, 7.98851)
si.SetProperty1('light30', 'intensity', 0.03125)
si.NewLight('light31', 'PointLight')
si.SetProperty3('light31', 'translate', 13.3907, 12, 9.08986)
si.SetProperty1('light31', 'intensity', 0.03125)

#Texture
# You can specify file paths to *.hdr/*.jpg file via python API
si.NewTexture('tex1', '../hdr/grace-new.hdr')

#Shader
si.NewShader('floor_shader', 'plastic_shader')
si.NewShader('dome_shader', 'constant_shader')

si.NewShader("Material", 'plastic_shader')
si.SetProperty3("Material", 'ambient', 1.0, 1.0, 1.0)
si.SetProperty3("Material", 'diffuse', 0.8, 0.0, 0.0)
si.SetProperty3("Material", 'reflect', 0.5, 0.5, 0.5)

si.NewShader("Material.001", 'plastic_shader')
si.SetProperty3("Material.001", 'ambient', 1.0, 1.0, 1.0)
si.SetProperty3("Material.001", 'diffuse', 0.008794, 0.005152, 0.64)
si.SetProperty3("Material.001", 'reflect', 0.5, 0.5, 0.5)

#Mesh
si.NewMesh('boxes_mesh')
si.NewMesh('floor_mesh')
si.NewMesh('dome_mesh')

#Procedure
si.NewProcedure('boxes_proc', 'wavefrontobj_procedure')
si.AssignMesh('boxes_proc', 'mesh', 'boxes_mesh')
si.SetStringProperty('boxes_proc', 'filepath', '../ply/test01.obj')
si.RunProcedure('boxes_proc')

si.NewProcedure('floor_proc', 'stanfordply_procedure')
si.AssignMesh('floor_proc', 'mesh', 'floor_mesh')
si.SetStringProperty('floor_proc', 'filepath', '../ply/floor.ply')
si.SetStringProperty('floor_proc', 'io_mode', 'r')
si.RunProcedure('floor_proc')

si.NewProcedure('dome_proc', 'stanfordply_procedure')
si.AssignMesh('dome_proc', 'mesh', 'dome_mesh')
si.SetStringProperty('dome_proc', 'filepath', '../ply/dome.ply')
si.SetStringProperty('dome_proc', 'io_mode', 'r')
si.RunProcedure('dome_proc')

#ObjectInstance
si.NewObjectInstance('boxes1', 'boxes_mesh')
#si.AssignShader('boxes1', 'DEFAULT_SHADING_GROUP', "Material")
si.AssignShader('boxes1', "Cube.001", "Material.001")
si.AssignShader('boxes1', "Cube", "Material")

si.NewObjectInstance('floor1', 'floor_mesh')
si.SetProperty3('floor1', 'translate', 0, -1, 0)
si.AssignShader('floor1', 'DEFAULT_SHADING_GROUP', 'floor_shader')

si.NewObjectInstance('dome1', 'dome_mesh')
si.SetProperty3('dome1', 'scale', .5, .5, .5)
si.SetProperty3('dome1', 'rotate', 0, 30, 0)
si.AssignShader('dome1', 'DEFAULT_SHADING_GROUP', 'dome_shader')
si.AssignTexture('dome_shader', 'texture', 'tex1')

#ObjectGroup
si.NewObjectGroup('group1')
si.AddObjectToGroup('group1', 'boxes1')
si.AssignObjectGroup('boxes1', 'shadow_target', 'group1')
si.AssignObjectGroup('floor1', 'shadow_target', 'group1')

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

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

#Rendering
si.RenderScene('ren1')

#Output
# You can specify file paths to *.exr file via python API
si.SaveFrameBuffer('fb1', '../two_boxes.fb')

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

Fujiyama-Renderer-0.3.6 has installed under Fedora 32

Download Fujiyama-Renderer-0.3.6.tar.gz
Rename Fujiyama-Renderer folder

Edit.
# nano .bash_profile

#Fujiyama-Renderer
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/Fujiyama-Renderer/lib
export PATH=$PATH:/home/yourname/Fujiyama-Renderer/bin
export FJ_LIBRARY_PATH=/home/yourname/Fujiyama-Renderer/lib

creat mesh folder and ply folder and hdr folder.
copy fujiyama.py to bin folder.
$ export PYTHONPATH=$PYTHONPATH:/usr/lib/python2.7/site-packages/:$HOME/Fujiyama-Renderer/bin/

not python3.8.
Python 3 is not supported.
$ python teapot2.py

thank you.

si.SetProperty2('ren1', 'resolution', 320, 240)
si.SetProperty2('ren1', 'pixelsamples', 32, 32)
rendering time: 14m by my laptop 8 years ago
fujipath

Resolution: 640 x 480
rendering time: 0h 12m 8s
pyro01
  • -
  • -

Fedora 32 boost python & python cgkit install under Fedora 32.

How to change default Python version on Linux/Fedora 32

under Fedora32

# alternatives --install /usr/bin/python python /usr/bin/python3.8 2
# alternatives --install /usr/bin/python python /usr/bin/python2.7 1

$ sudo alternatives --config python

2 プログラムがあり 'python' を提供します。

選択 コマンド
-----------------------------------------------
* 1 /usr/bin/python3.8
+ 2 /usr/bin/python2.7

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:1

$ alternatives --list | grep -i python
python manual /usr/bin/python3.8

boost python


can not find -lboost_python

-----------------------------------------------
Install boost
Install boost-devel
Install python2-devel
Install python3-devel
Install boost-python2
Install boost-python3

-----------------------------------------------

-Lsupportlib/lib -L/usr/lib64 -lboost_python -lcore -l3ds -lGL -lGLU -lpython2.7 -o build/lib.linux-x86_64-2.7/cgkit/_core.so
/usr/bin/ld: -lboost_python が見つかりません
collect2: エラー: ld はステータス 1 で終了しました

$ sudo ldconfig -p | grep boost_python3
libboost_python38.so.1.69.0 (libc6,x86-64) => /lib64/libboost_python38.so.1.69.0

$ sudo ldconfig -p | grep boost_python2
libboost_python27.so.1.69.0 (libc6,x86-64) => /lib64/libboost_python27.so.1.69.0

/usr/lib64
$ sudo ln -s libboost_python27.so.1.69.0 libboost_python2.so

/usr/lib64 $ sudo ldconfig
-lboost_python2 is OK.

Boost.Python の機能をざっと紹介してみる
http://moriyoshi.hatenablog.com/entry/20091214/1260779899

export CPLUS_INCLUDE_PATH=/usr/include/python2.7

$ python
Python 2.7.18 (default, Apr 20 2020, 00:00:00)
[GCC 10.0.1 20200328 (Red Hat 10.0.1-0.11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
$ export CPLUS_INCLUDE_PATH=/usr/include/python2.7
$ g++ -I`python -c 'from distutils.sysconfig import *; get_python_inc()'` -DPIC -shared -fPIC -o basic.so basic.cpp -lboost_python-py27
/usr/bin/ld: -lboost_python-py27 が見つかりません
collect2: エラー: ld はステータス 1 で終了しました

g++ -I`python -c 'from distutils.sysconfig import *; get_python_inc()'` -DPIC -shared -fPIC -o basic.so basic.cpp -lboost_python2

python cgkit install under fedora 32


switch python2.7
$ sudo alternatives --config python
[sudo] のパスワード:

3 プログラムがあり 'python' を提供します。

選択 コマンド
-----------------------------------------------
1 /usr/bin/python3.7
+ 2 /usr/bin/python2.7
* 3 /usr/bin/python3.8

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:
$ alternatives --list | grep -i python
python manual /usr/bin/python2.7
------------------------------------------------

/usr/lib64
$ sudo ln -s libboost_python27.so.1.69.0 libboost_python2.so
------------------------------------------------

python cgkit folder config.cfg
######################################################################
# Boost.Python settings
######################################################################

# Name of the Boost.Python library to link with
BOOST_LIB = "boost_python2"

######################################################################
# Optional libraries
######################################################################

Install lib3ds-devel

####### Libd3DS #######

LIB3DS_AVAILABLE = True
LIB3DS_PATH = r"/lib64/"
LIB3DS_LIBNAME = "3ds"
------------------------------------------------
$ sudo python setup.py build
.....
.....
.....
$ sudo python setup.py install
python cgkit is OK.

alternatives --remove python


$ sudo alternatives --config python
[sudo] のパスワード:

3 プログラムがあり 'python' を提供します。

選択 コマンド
-----------------------------------------------
1 /usr/bin/python3.7
+ 2 /usr/bin/python2.7
* 3 /usr/bin/python3.8

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:

$ sudo alternatives --remove python /usr/bin/python3.7

$ sudo alternatives --config python

2 プログラムがあり 'python' を提供します。

選択 コマンド
-----------------------------------------------
* 1 /usr/bin/python3.8
+ 2 /usr/bin/python2.7

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:
-----------------------------------------------------------
$ sudo alternatives --config python

2 プログラムがあり 'python' を提供します。

選択 コマンド
-----------------------------------------------
* 1 /usr/bin/python3.8
+ 2 /usr/bin/python2.7

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:1
~]$ python
Python 3.8.2 (default, Feb 28 2020, 00:00:00)
[GCC 10.0.1 20200216 (Red Hat 10.0.1-0.8)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
~]$ sudo alternatives --config python

2 プログラムがあり 'python' を提供します。

選択 コマンド
-----------------------------------------------
*+ 1 /usr/bin/python3.8
2 /usr/bin/python2.7

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2
~]$ python
Python 2.7.18 (default, Apr 20 2020, 00:00:00)
[GCC 10.0.1 20200328 (Red Hat 10.0.1-0.11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

Thank you.
  • -
  • -
<< 6/184 >>