<< はじめてのFujiyama Renderer その17 戻る はじめてのFujiyama Renderer その19 >>

はじめてのFujiyama Renderer その18

カメラ位置を考える。

デフォルトカメラは、右手系Y-upで、原点に位置して-Z方向を見ている。
Fujiyama Rendererはrotate,-32,0,0、rotate,0,45,0と続けての記述はできない。まとめてrotate,-32,45,0と書くと良いです。


#1 z軸から見る。(0,1,18)から見る。
si.SetSampleProperty3('cam1', 'translate', 0, 1, 18, 0)
boxz1.jpg

#2
si.SetSampleProperty3('cam1', 'rotate', -90, 0, 0, 0)
si.SetSampleProperty3('cam1', 'translate', 0, 18, 0, 0)
boxz2.jpg

#3 x軸から見る。
si.SetSampleProperty3('cam1', 'rotate',0, 90, 0, 0)
si.SetSampleProperty3('cam1', 'translate', 18, 1, 0, 0)
boxz3.jpg

#4 10 10 10から、 0 1 0を見る。
si.SetSampleProperty3('cam1', 'rotate', -32.47, 45, 0, 0)
si.SetSampleProperty3('cam1', 'translate', 10, 10, 10, 0)
boxz4.jpg

以下Pythonスクリプト

#!/usr/bin/env python

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

#si = fujiyama.SceneInterface()

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

#Camera
si.NewCamera('cam1', 'PerspectiveCamera')
#si.SetProperty1('cam1', 'transform_order', 'ORDER_STR')
#si.SetProperty1('cam1', 'rotate_order', 'ORDER_YXZ')

#Calculate python fujicam.py 10 10 10 0 1 0
si.SetSampleProperty3('cam1', 'rotate', -32.47, 45, 0, 0) #4
si.SetSampleProperty3('cam1', 'translate', 10, 10, 10, 0) #4

#si.SetSampleProperty3('cam1', 'rotate',0, 90, 0, 0) #3
#si.SetSampleProperty3('cam1', 'translate', 18, 1, 0, 0) #3

#si.SetSampleProperty3('cam1', 'rotate', -90, 0, 0, 0) #2
#si.SetSampleProperty3('cam1', 'translate', 0, 18, 0, 0) #2
#si.SetSampleProperty3('cam1', 'translate', 0, 1, 18, 0) #1
si.SetProperty1('cam1', 'fov', 30)

#Light
si.NewLight('light1', 'SphereLight')
si.SetProperty3('light1', 'translate', -10, 10, 10)
si.SetProperty3('light1', 'scale', .5, .5, .5)
si.SetProperty1('light1', 'intensity', 1)
si.SetProperty1('light1', 'sample_count', 16)

si.NewLight('light2', 'SphereLight')
si.SetProperty3('light2', 'translate', 10, 10, 10)
si.SetProperty3('light2', 'scale', .5, .5, .5)
si.SetProperty1('light2', 'intensity', 1)
si.SetProperty1('light2', 'sample_count', 16)

#Texture
si.NewTexture('tex1', '../mip/pisa.mip')

#Shader
si.NewShader('dome_shader', 'ConstantShader')
si.AssignTexture('dome_shader', 'texture', 'tex1')

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

si.NewShader('cubex_shader', 'PlasticShader')
si.SetProperty3('cubex_shader', 'diffuse', 1, 0, 0)

si.NewShader('cubey_shader', 'PlasticShader')
si.SetProperty3('cubey_shader', 'diffuse', 0, 1, 0)

si.NewShader('cubez_shader', 'PlasticShader')
si.SetProperty3('cubez_shader', 'diffuse', 0, 0, 1)


intensity = 0
si.NewShader('sphere_shader', 'PlasticShader')
si.SetProperty3('sphere_shader', 'diffuse', intensity, intensity, intensity)
si.SetProperty1('sphere_shader', 'ior', 40)

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

#ObjectInstance
# x position's cubes
si.NewObjectInstance('cube1', 'cube_mesh')
si.AssignShader('cube1', 'cubex_shader')
si.SetProperty3('cube1', 'translate', 1.5,0.6, 0)

si.NewObjectInstance('cube2', 'cube_mesh')
si.AssignShader('cube2', 'cubex_shader')
si.SetProperty3('cube2', 'translate', 2.6,0.6, 0)

si.NewObjectInstance('cube3', 'cube_mesh')
si.AssignShader('cube3', 'cubex_shader')
si.SetProperty3('cube3', 'translate', 3.7,0.6, 0)

# y position's cubes
si.NewObjectInstance('cube4', 'cube_mesh')
si.AssignShader('cube4', 'cubey_shader')
si.SetProperty3('cube4', 'translate', 0,2.5, 0)

si.NewObjectInstance('cube5', 'cube_mesh')
si.AssignShader('cube5', 'cubey_shader')
si.SetProperty3('cube5', 'translate', 0,3.6, 0)

si.NewObjectInstance('cube6', 'cube_mesh')
si.AssignShader('cube6', 'cubey_shader')
si.SetProperty3('cube6', 'translate', 0,4.7, 0)

# z position's cubes
si.NewObjectInstance('cube7', 'cube_mesh')
si.AssignShader('cube7', 'cubez_shader')
si.SetProperty3('cube7', 'translate', 0,0.6, 1.5)

si.NewObjectInstance('cube8', 'cube_mesh')
si.AssignShader('cube8', 'cubez_shader')
si.SetProperty3('cube8', 'translate', 0,0.6, 2.6)

si.NewObjectInstance('cube9', 'cube_mesh')
si.AssignShader('cube9', 'cubez_shader')
si.SetProperty3('cube9', 'translate', 0,0.6, 3.7)

# center position's sphere
si.NewObjectInstance('sphere1', 'sphere_mesh')
si.AssignShader('sphere1', 'sphere_shader')
si.SetProperty3('sphere1', 'translate', 0, 1, 0)

si.NewObjectInstance('dome1', 'dome_mesh')
si.SetProperty3('dome1', 'rotate', 0, 0, 0)
#si.SetProperty3('dome1', 'scale', -.5, .5, .5)
si.SetProperty3('dome1', 'scale', -2, 2, 2)
si.AssignShader('dome1', 'dome_shader')

si.NewObjectInstance('floor1', 'floor_mesh')
si.SetProperty3('floor1', 'scale', 50, 50, 50)
si.AssignShader('floor1', 'floor_shader')

#ObjectGroup
si.NewObjectGroup('group1')
si.AddObjectToGroup('group1', 'sphere1')
si.AddObjectToGroup('group1', 'cube1')
si.AddObjectToGroup('group1', 'cube2')
si.AddObjectToGroup('group1', 'cube3')
si.AddObjectToGroup('group1', 'cube4')
si.AddObjectToGroup('group1', 'cube5')
si.AddObjectToGroup('group1', 'cube6')
si.AddObjectToGroup('group1', 'cube7')
si.AddObjectToGroup('group1', 'cube8')
si.AddObjectToGroup('group1', 'cube9')
si.AssignObjectGroup('cube1', 'shadow_target', 'group1')
si.AssignObjectGroup('cube2', 'shadow_target', 'group1')
si.AssignObjectGroup('cube3', 'shadow_target', 'group1')
si.AssignObjectGroup('cube4', 'shadow_target', 'group1')
si.AssignObjectGroup('cube5', 'shadow_target', 'group1')
si.AssignObjectGroup('cube6', 'shadow_target', 'group1')
si.AssignObjectGroup('cube7', 'shadow_target', 'group1')
si.AssignObjectGroup('cube8', 'shadow_target', 'group1')
si.AssignObjectGroup('cube9', 'shadow_target', 'group1')
si.AssignObjectGroup('sphere1', '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', 512, 384)
#si.SetProperty2('ren1', 'resolution', 160, 120)
#si.SetProperty2('ren1', 'pixelsamples', 12, 12)

#Rendering
si.RenderScene('ren1')

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

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

  • -
  • -

<< はじめてのFujiyama Renderer その17 戻る はじめてのFujiyama Renderer その19 >>