### Povray Rendering System 구축하기###
작성일 : 2005-07-13
수정일 : 2009-12-31
작성자 : 서진우 ( alang@syszone.co.kr )
povray 는 multiplatform, freeware raytracer 벤치마킹 툴이다.
PVMPOV 벤치 마크는 Ray Tracing 작업으로 성능을 측정하고 PVM으로 프로세스
메세지 패싱을 하기 위해 사용됩니다.
이 테스트를 하기 위해서는 LINUX Cluster 기본 환경이 구축 되어져 있어야 한다.
먼저 Cluster 노드간의 rsh, rlogin 설정을 하고 난뒤 PVM 설정을 한다.
PVM 은 기본적으로 Redhat 에서 제공하는 RPM 패키징을 그대로 사용하면 된다.
설치를 하고 나면..
/usr/share/pvm3 에 설치가 된다.
위 경로가 PVM_ROOT 로서 정의가 되어져야 한다.
# cd /usr/share/pvm3/lib
# vi bashrc.stub
——————————————————————————–
#
# append this file to your .bashrc to set path according to machine
# type. you may wish to use this for your own programs (edit the last
# part to point to a different directory f.e. ~/bin/_$PVM_ARCH.
#
# PVM_ROOT를 정의 한다.
PVM_ROOT=/usr/share/pvm3
export PVM_ROOT
##
if [ -z $PVM_ROOT ]; then
if [ -d ~/pvm3 ]; then
export PVM_ROOT=~/pvm3
else
echo “Warning – PVM_ROOT not defined”
echo “To use PVM, define PVM_ROOT and rerun your .bashrc”
fi
fi
if [ -n $PVM_ROOT ]; then
export PVM_ARCH=`$PVM_ROOT/lib/pvmgetarch`
#
# uncomment one of the following lines if you want the PVM commands
# directory to be added to your shell path.
#
# 아래 PATH 에 lib, pvm_arch 경로를 추가 하는 설정의 주석을 제거한다.
export PATH=$PATH:$PVM_ROOT/lib # generic
export PATH=$PATH:$PVM_ROOT/lib/$PVM_ARCH # arch-specific
#
# uncomment the following line if you want the PVM executable directory
# to be added to your shell path.
#
# export PATH=$PATH:$PVM_ROOT/bin/$PVM_ARCH
fi
———————————————————————————
위 수정된 내용을 클러스터 모든 노드의 /root/.bashrc 마지막에 모두 추가한다.
# cat bashrc.stub >> /root/.bashrc
# . /root/.bashrc
이제 PVM nodelist 를 만든다.
# vi pvm.host
——————————————————————————–
arhfw
arhdev
arh01
arh02
arh05
arh06
arh07
arh08
——————————————————————————-
PVM 을 실행하도록 한다.
# pvm pvm.host
pvm> conf
——————————————————————————
8 hosts, 1 data format
HOST DTID ARCH SPEED DSIG
arhfw 40000 LINUXI386 1000 0x00408841
arhdev 80000 LINUXI386 1000 0x00408841
arh01 c0000 LINUXI386 1000 0x00408841
arh02 100000 LINUXI386 1000 0x00408841
arh05 140000 LINUXI386 1000 0x00408841
arh06 180000 LINUXI386 1000 0x00408841
arh07 1c0000 LINUXI386 1000 0x00408841
arh08 200000 LINUXI386 1000 0x00408841
pvm>
——————————————————————————
이제 pvmpovray 를 설치 한다.
pvmpovray는 http://www.povray.org 에서 패키지를 찾을 수 있다.
# cd /usr/local
# mkdir -p povray/pvm
# cd povray/pvm
# wget -q http://prdownloads.sourceforge.net/pvmpov/pvmpov-3.1g2.tgz
# wget -q ftp://ftp.povray.org/pub/povray/Old-Versions/Official-3.1g/Unix/povuni_s.tgz
# wget -q ftp://ftp.povray.org/pub/povray/Old-Versions/Official-3.1g/Unix/povuni_d.tgz
압축을 푼다.
# tar xzvf pvmpov-3.1g2.tgz
# cd pvmpov3_1g_2/
# tar xzvf ../povuni_d.tgz
# tar xzvf ../povuni_s.tgz
# cd povray31/source/
관련 Library 를 컴파일 한다.
# cd libpng
# cp scripts/makefile.lnx Makefile
# make
# cd ../zlib
# ./configure && make
# cd ../pvm
# aimk newunix
# aimk newxwin
-> aimk 는 PVM 에서 사용하는 make tool로 PVM을 설치하면 /usr/share/pvm3/lib 밑에 존재한다.
/usr/local/povray/pvm/ 밑에 있는 모든 데이터를 클러스터 노드에 동기화 시킨다.
그런후 각 노드에서 aimk install 을 실행한다.
# aimk install
# cd /usr/local/povray/pvm/pvmpov3_1g_2/povray31/scenes/advanced
# x-pvmpov +iskyvase.pov +h600 +w800 +FT +v1 -x -d +a0.300 -q9 -mv2.0 -b1000 -nw32 -nh32 -nt16 -L/usr/local/povray/pvm/pvmpov3_1g_2/povray31/include
————————————————————————————-ㅣㄴ
PVM Slave…… x-pvmpov
PVM WorkingDir. /usr/local/povray/pvm/pvmpov3_1g_2/povray31/scenes/advanced
All Streams to console……….On
Debug Stream to console………On
Fatal Stream to console………On
Render Stream to console……..On
Statistics Stream to console….On
Warning Stream to console…….On
Starting frame 0…
Slave 1 at arhfw successfully started.
Slave 2 at arhdev successfully started.
Slave 3 at arh01 successfully started.
Slave 4 at arh05 successfully started.
Slave 5 at arh06 successfully started.
Slave 6 at arh07 successfully started.
-:–:– 1.05 of blocks complete. Slave 7 at arh08 successfully started.
-:–:– 1.26 of blocks complete. Slave 8 at arh01 successfully started.
Slave 9 at arh02 successfully started.
Slave 10 at arhdev successfully started.
Slave 11 at arh02 successfully started.
Slave 12 at arh05 successfully started.
Slave 13 at arh07 successfully started.
Slave 14 at arh06 successfully started.
Slave 15 at arh08 successfully started.
0:00:05 93.89 of blocks complete.Not using arhfw for reassignment (64%)e 0).
0:00:05 94.53 of blocks complete.Not using arh07 for reassignment (73%)
Not using arhfw for reassignment (67%)
Not using arh07 for reassignment (60%)
0:00:05 95.58 of blocks complete.Not using arh06 for reassignment (77%)
0:00:05 95.79 of blocks complete.Not using arh08 for reassignment (49%)
0:00:05 96.42 of blocks complete.Not using arh08 for reassignment (59%)
Slave at arh07 has exited.
Not using arh05 for reassignment (79%)
Slave at arhfw has exited.
Slave at arhfw has exited.
Not using arh05 for reassignment (83%)
0:00:05 97.47 of blocks complete.Not using arh06 for reassignment (65%)
0:00:05 97.68 of blocks complete.
Slave at arh08 has exited.
0:00:05 97.68 of blocks complete.
Slave at arh07 has exited.
0:00:05 98.11 of blocks complete. 520 of 600 lines finished (in frame 0).
Slave at arh05 has exited.
0:00:05 98.26 of blocks complete. 528 of 600 lines finished (in frame 0).
Slave at arh05 has exited.
0:00:06 98.53 of blocks complete.
Slave at arh06 has exited.
0:00:06 98.58 of blocks complete. 536 of 600 lines finished (in frame 0).
Slave at arh06 has exited.
0:00:06 98.68 of blocks complete. 600 of 600 lines finished (in frame 0).
Finishing frame 0…rtw. 600
Waiting for remaining slave stats.
PVM Task Distribution Statistics:
host name [ done ] [ late ] host name [ done ] [ late ]
arh08 [ 3.20%] [ 0.00%] arh08 [ 3.79%] [ 0.00%]
arhfw [ 4.05%] [ 0.00%] arhfw [ 4.27%] [ 0.00%]
arhdev [ 5.87%] [ 0.24%] arhdev [ 5.97%] [ 0.60%]
arh01 [11.84%] [ 1.87%] arh01 [10.67%] [ 1.79%]
arh02 [11.95%] [ 1.87%] arh02 [10.45%] [ 1.67%]
arh05 [ 5.33%] [ 0.00%] arh05 [ 5.07%] [ 0.00%]
arh06 [ 4.27%] [ 0.00%] arh06 [ 4.85%] [ 0.00%]
arh07 [ 3.84%] [ 0.00%] arh07 [ 4.59%] [ 0.00%]
POV-Ray statistics for finished frames:
skyvase.pov Statistics (Partial Image Rendered), Resolution 800 x 600
—————————————————————————-
Pixels: 214144 Samples: 272232 Smpls/Pxl: 1.27
Rays: 1150367 Saved: 8422 Max Level: 0/5
—————————————————————————-
Ray->Shape Intersection Tests Succeeded Percentage
—————————————————————————-
CSG Intersection 3703914 330451 8.92
Plane 22223484 11875070 53.43
Quadric 3703914 1567155 42.31
Sphere 3703914 565252 15.26
—————————————————————————-
Calls to Noise: 1191556 Calls to DNoise: 2243806
—————————————————————————-
Shadow Ray Tests: 4260072 Succeeded: 100697
Reflected Rays: 878135
—————————————————————————-
Smallest Alloc: 14 bytes Largest: 16028
Peak memory used: 2112704 bytes
—————————————————————————-
Time For Trace: 0 hours 0 minutes 10.0 seconds (10 seconds)
Total Time: 0 hours 0 minutes 10.0 seconds (10 seconds)
————————————————————————————–
그럼 위와 같이 서버당 자원 활용 현황과 렌더링 시간이 나오게 된다.
만일 렌더링중 그래픽 결과를 보고 싶다면.. +v +D 옵션을 붙여서 실행하면 된다.
# x-pvmpov +iskyvase.pov +h600 +w800 +FT +v1 -x -d +a0.300 -q9 -mv2.0 -b1000 -nw32 -nh32 -nt16 -L/usr/local/povray/pvm/pvmpov3_1g_2/povray31/include +v +D
##### Povray 설치 및 사용 방법 #############3
povary 사이트에서 최신 povary를 다운 받는다.
povary 는 pvmpovary 와 달리 단일 시스템에서만 동작을 하는 것이다. 클러스터 시스템과
비교용 벤치 마킹 툴로 사용하면 편리하다.
설치 방법은 매우 간단하다.
# tar xzvf povlinux-3.6.tgz
# cd povray-3.6/
# ./install
————————————————————————————
POV-Ray 3.6 installation
==========================
installing POV-Ray in default location (/usr/local)
——————————————————
Copying files…
creating supplementary files directory (/usr/local/share/povray-3.6)…
copying include files…
copying sample scenes…
copying ini files…
copying script files…
copying icon files…
copying POV-Ray man page…
copying POV-Ray executable…
– creating backup from old POV-Ray executable as povray.old.2005-07-13
creating backup of /usr/local/share/doc/povray-3.6
as /usr/local/share/doc/povray-3.6.bak
copying POV-Ray documentation…
Finished copying files
——————————————————
updating system level configuration…
creating backup of old povray.ini file as povray.ini.old.2005-07-13
updating main POV-Ray ini file…
checking ini file /usr/local/etc/povray/3.6/povray.ini
– file does not need to be modified
a system povray.conf file already exists.
copying the default version as povray.conf.new
Finished updating configuration
——————————————————
POV-Ray 3.6 has seemingly already been installed on this
system before. The installation has updated the existing
povray.ini file.
You should check if the new ini file:
/usr/local/etc/povray/3.6/povray.ini
correctly reflects your configuration.
An existing povray.conf file has been found and was left
as it is. The default file has been copied as:
/usr/local/etc/povray/3.6/povray.conf.new
for reference.
——————————————————
The install script will now run a short test render
to check if POV-Ray is correctly configured.
This test render will be without display since this
is will often not work correctly in superuser mode.
Type ‘R’ to run the test
Type ‘S’ to skip it.
Your choice ([R]/S): R <- R을 입력하면 바로 테스트가 진행된다.
Support libraries used by POV-Ray:
ZLib 1.2.1, Copyright 1995-1998 Jean-loup Gailly and Mark Adler
LibPNG 1.2.5, Copyright 1998-2002 Glenn Randers-Pehrson
LibJPEG 6b, Copyright 1998 Thomas G. Lane
LibTIFF 3.6.1, Copyright 1988-1997 Sam Leffler, 1991-1997 SGI
Redirecting Options
All Streams to console……….On
Debug Stream to console………On
Fatal Stream to console………On
Render Stream to console……..On
Statistics Stream to console….On
Warning Stream to console…….On
Parsing Options
Input file: scenes/advanced/biscuit.pov (compatible to version 3.61)
Remove bounds……..On
Split unions………Off
Library paths:
/usr/local/share/povray-3.6
/usr/local/share/povray-3.6/ini
/usr/local/share/povray-3.6/include
Output Options
Image resolution 320 by 240 (rows 1 to 240, columns 1 to 320).
Graphic display……Off
Mosaic preview…….Off
CPU usage histogram..Off
Continued trace……Off
Tracing Options
Quality: 9
Bounding boxes…….On Bounding threshold: 3
Light Buffer………On
Vista Buffer………On Draw Vista Buffer….Off
Antialiasing………On (Method 1, Threshold 0.300, Depth 3, Jitter 1.00)
Clock value: 0.000 (Animation off)
0:00:01 Parsing 157K tokens
0:00:01 Creating bounding slabs
0:00:01 Creating vista buffer
0:00:01 Creating light buffers 333K tokens
Scene Statistics
Finite objects: 292
Infinite objects: 0
Light sources: 2
Total: 294
0:00:05 Rendering line 28 of 240, 4730 supersamples
———————————————————————————–
이제 실제 그래픽 랜더링을 해 보도록 하자.
# cd /usr/local/povray/povray-3.6/scenes/advanced
# povray +iskyvase.pov +w640 +h480
———————————————————————————–
.
.
0:00:18 Rendering line 466 of 480
0:00:18 Done Tracing
Render Statistics
Image Resolution 640 x 480
—————————————————————————-
Pixels: 307200 Samples: 307200 Smpls/Pxl: 1.00
Rays: 1275206 Saved: 8964 Max Level: 13/20
—————————————————————————-
Ray->Shape Intersection Tests Succeeded Percentage
—————————————————————————-
CSG Intersection 1059055 300654 28.39
Plane 9479604 4509844 47.57
Quadric 961516 429675 44.69
Sphere 1721659 969145 56.29
Bounding Object 763421 578297 75.75
Bounding Box 4805685 1761936 36.66
Light Buffer 5382427 3360289 62.43
Vista Buffer 1754733 1550093 88.34
—————————————————————————-
Calls to Noise: 1336133 Calls to DNoise: 2373988
—————————————————————————-
Shadow Ray Tests: 1355504 Succeeded: 108113
Reflected Rays: 968006
—————————————————————————-
Smallest Alloc: 9 bytes
Largest Alloc: 1228808 bytes
Peak memory used: 1523163 bytes
Total Scene Processing Times
Parse Time: 0 hours 0 minutes 1 seconds (1 seconds)
Photon Time: 0 hours 0 minutes 0 seconds (0 seconds)
Render Time: 0 hours 0 minutes 18 seconds (18 seconds)
Total Time: 0 hours 0 minutes 19 seconds (19 seconds)
————————————————————————————-
#### MPI 환경에서 Povray 를 설치 후 테스트 #####
pvmpovray 소스에서 mpi 관련 패치를 하면 mpi 환경에서 Povray 를 사용할 수 있다.
관련 정보는 아래 사이트에서 얻을 수 있다.
http://www.verrall.demon.co.uk/mpipov/
설치에 사용되는 소스와 방법은 Pvmpovray 와 유사하다.
# mkdir /usr/local/povray/mpi
# cd /usr/local/povray/mpi
Pvmpovray 에서 사용된 povuni_s.tgz 의 압축을 푼다.
patch 파일은 위 사이트에서 구할 수 있다.
# tar xzvf povuni_s.tgz
# cd povray31
# gzip -d mpi-povray-1.0.patch.gz
# patch -p1 < mpi-povray-1.0.patch
# cd source/libpng
# cp scripts/makefile.lnx Makefile
# make
# cd ../zlib
# ./configure && make
# cd ../mpi-unix/
여기에서 시스템 스펙에 맞게 Makefile의 CFLAGS 를 수정하도록 한다.
기본적으로 Pentium II-III 환경에 맞게 설정이 되어져 있다.
mpich 의 PATH 와 같은 기본 환경 설정을 해준 뒤 make 를 실행하다.
# make newxwin
그럼 mpi-x-povray 란 실행 파일이 생성이 되어져 있을 것이다.
이것을 모든 클러스터 노드에 동기화 시킨다.
그런 후 mpirun 으로 실행 하면 된다. sample pov 파일과 라이브러리는 앞서컴파일
한 pvmpovray 것을 사용하면 된다.
# mpirun -np 8 ./mpi-x-povray +i/usr/local/povray/pvm/pvmpov3_1g_2/povray31/scenes/advanced/skyvase.pov +h600 +w800 +FT +v1 -x -d +a0.300 -q9 -mv2.0 -b1000 -nw32 -nh32 -nt16 -L/usr/local/povray/pvm/pvmpov3_1g_2/povray31/include +v +D
——————————————————————————-
.
.
PE Distribution Statistics:
Slave PE [ done ] Slave PE [ done ]
1 [17.81%]
2 [16.48%] 3 [16.48%]
4 [14.35%] 5 [12.59%]
6 [12.00%] 7 [10.29%]
POV-Ray statistics for finished frames:
/usr/local/povray/pvm/pvmpov3_1g_2/povray31/scenes/advanced/skyvase.pov Statistics (Partial Image Rendered), Resolution 800 x 600
—————————————————————————-
Pixels: 62336 Samples: 77464 Smpls/Pxl: 1.24
Rays: 325184 Saved: 2579 Max Level: 0/5
—————————————————————————-
Ray->Shape Intersection Tests Succeeded Percentage
—————————————————————————-
CSG Intersection 1045842 100780 9.64
Plane 6275052 3374865 53.78
Quadric 1045842 456770 43.67
Sphere 1045842 148355 14.19
—————————————————————————-
Calls to Noise: 352825 Calls to DNoise: 634100
—————————————————————————-
Shadow Ray Tests: 1201896 Succeeded: 29076
Reflected Rays: 247720
—————————————————————————-
Smallest Alloc: 48 bytes Largest: 16028
Peak memory used: 988429 bytes
—————————————————————————-
Time For Trace: 0 hours 0 minutes 10.0 seconds (10 seconds)
Total Time: 0 hours 0 minutes 10.0 seconds (10 seconds)
——————————————————————————-
동일 모델에 대한 PVM 과 MPI 의 성능 차이는 PVM 이 15초 처리, MPI 가 10초 처리로
MPI 가 우수한 걸로 나타난다.
Povray-3.6.1+mpi 구성하기
http://comp.uark.edu/~ewe/dvc/MPI-POVRay.html 사이트에서 MPI-povray.patch 파일을 다운 받는다.
MPI-povray.patch 파일을 povray-3.6.1 source 디렉토리에 복사한 후
patch -p1 < MPI-povray.patch 수행
그런 후
# export CC=/engrid/enhpc/mpich/gcc/bin/mpicc
# export CXX=/engrid/enhpc/mpich/gcc/bin/mpicxx
# export CFLAGS=”-DHAVE_MPI”
# export CXXFLAGS=”-DHAVE_MPI”
./configure –prefix=…. COMPILED_BY=”Jinwoo Seo <alang@clunix.com>”
# make && make install
# mpirun -np 2 povray xxx.pov
RHEL5 에 설치 시 ..
render.h:62 line (extern DBL maxclr;)을 주석처리하거나, render.c:108 의 maxclr staic type을 제거함
(static DBL maxclr -> DBL maxclr)
애니메이션 만들기
povray +i<input.pov> +w<width> +h<height> +kfi<start frame> +kff<end frame>
애니메이션 povray source를 가지고 rendering 할때 +kfi 와 +kff 옵션을 사용한다.
+kfi 에 start frame 번호를, +kff 에 end frame 번호를 입력한 후 render을 하면 자동으로 각 프레임별
이미지(png) 파일을 만든다.
이것을 ffmpeg 혹은 별도의 encoding 프로그램으로 동영상 파일을 만들면 된다.
Povray Source 제공 사이트
http://local.wasp.uwa.edu.au/~pbourke/exhibition/scc5/final.html
http://www.oyonale.com/modeles.php?lang=en&format=POV
http://www.shipbrook.com/jeff/raytrace/
http://lib.povray.org/searchcollection/index.php
http://www.dylanbeattie.net//starwars/starwars.html
http://www-graphics.stanford.edu/~tolis/toli/research/shuttle.html
http://runevision.com/3d/anims/
Povray Image rendering 결과
Povray Animation rendering 결과