'공부/RenderMan'에 해당되는 글 2건
- 2009.11.08 RenderMan #2
- 2009.11.01 RenderMan #1
- RenderMan #2
- 공부/RenderMan
- 2009. 11. 8. 09:12
이번강의는 RSL(RenderMan Shader Language)에 관한 내용이었다.
강의중에는 랜더맨 프로서버를 이용하여 랜더링은 하였지만, 난 Aqsis를 사용한다.
쉐이더파일은 적용전 반드시 컴파일을 시켜줘야 하는데 ASCII코드로 코딩을 한 후, shaderfile.sl형식으로 저장한다.
그후에 cygwin을 이용 .sl을 .slo로 컴파일 시켜준다.
기본명령어(cygwin상)
For RenderMan
../program\Files/Pixar/RenderManProServer-14.3/bin/shader simple.sl
프로그램파일안에 랜더맨프로서버의 폴더로 이동하여 쉐이더파일을 컴파일 시켜준다.
그 후 RIB파일을 다시 랜더링 시켜주면된다.
../program\Files/Pixar/RenderManProServer-14.3/bin/prman object.rib
For Aqsis
Aqsis를 예전에 사용한 경험이 있어서 대충은 어떻게 쉐이더파일을 적용시키는 줄 알지만, 확실히 랜더맨이 더욱 정확도가 있는 것 같긴하다.
어찌되었든,
Aqsis또한 sl파일을 컴파일 시켜줘야한다. 하지만, 컴파일 후 파일은 slo가 아닌 slx라는 확장자를 가진다.
aqsl simple.sl 라는 명령어를 주면, 쉐이더가 컴파일된다.
RSL에 관한 내용
RenderMan은 모두 5종류의 쉐이더를 가지고 있다.
1.
surface
2.
displacement
3.
light
4.
volume
5.
imager
surface simple( )
{
Oi = Os;
Ci = Os * Cs;
}
대충 모양은 여타의 프로그래밍언어와 다를 것이 없다.
여기서 Oi나 Os는 쉐이더의 변수이다.
활용 가능한 쉐이더변수의 종류에는
- P
- shading point location
- N
- shading point normal
- I
- camera view direction
- E
- camera location
- L
- light direction
- Cs
- inherent surface color
- Os
- inherent surface opacity
- s,t
- texture coords of shading point
- Ci
- outgoing shading point color
- Oi
- outgoing shading point opacity
- Cl
- outgoing light color [valid only in 'light' shaders]
하나의 쉐이더에는 3가지의 데이터소스가 있다.
다음 문장을 보면,
surface
simple(
float Ka=1, Kd=1 )
{
normal Nf; // 'local' variable, normal
'type'
Nf = faceforward(normalize(N),I);
Oi = Os;
Ci = Os * Cs * ( Ka*ambient() +
Kd*diffuse(Nf) ) ;
}
RSL(Renderman
Shading Language)안의 변수의 타입에는 float, color,
point, vector, normal, matrix, string이 있다.
다음은 normal을 이용 쉐이더를 만드는 문장이다.
surface simple( color cpcc = color(.5,.5,.5) )
{
normal Nn = normalize(N);
float r = ( xcomp(Nn ) +1 )*0.5; //
val.between 0 and 1
float g = ( ycomp(Nn ) +1 )*0.5;
float b = ( zcomp(Nn ) +1 )*0.5;
Ci = color(r,g,b);
}
이문장을 simple shader.slx 혹은 .slo 로 컴파일후 RIB파일에 적용시키면
이러한 결과물을 얻을 수 있다.
첨부파일은 Torus.rib파일과 normal쉐이더 .sl 과 .slx파일이다.
http://www.smartcg.com/Salty 참고하였음.
'공부 > RenderMan' 카테고리의 다른 글
RenderMan #1 (0) | 2009.11.01 |
---|
- RenderMan #1
- 공부/RenderMan
- 2009. 11. 1. 07:17
이곳에 블로깅하는 내용은 제가 강의를 들으면 노트필기를 한 내용이며, 그냥 그런것들을 보기쉽게 정리한 것 뿐입니다.
Websites:
www.aqsis.org
기본 RIB파일
---source--
# teapot.rib
# Author: Scott Iverson <jsiverso@midway.uchicago.edu>
# Date: 6/7/95
#
Display "TeapotAfter.tif" "framebuffer" "rgb"
(framebuffer는 랜더러에서 실시간 랜더링//file값을 설정해주면 file로 지정된 폴더에 저장//rgb+a값까지 설정)
Format 400 300 1
(티비포멧은 1보다 작은값, 영화포멧은 1보다 큰값
DV1 ratio에다가 영화포멧을 나눈 값이 default값이라고 했는데, 자세히는 기억이 나지 않는다.)
Projection "perspective" "fov" 30
(렌즈의 값을 설정, 한마디로 카메라 렌즈구경을 말하는 것)
Translate 0 0 25
Rotate -22 1 0 0
Rotate 19 0 1 0
Translate 0 -3 0
PixelSamples 3 3
(픽셀을 3*3으로 나눈 후 그 중간의 값을 다시 평균값으로 지정. Saty는 마이크로 픽셀이라고 했다. 한마디로 픽셀보다 더 작은개념)
WorldBegin
(world begin과 world end사이에는 object의 속성이 결정된다)
LightSource "ambientlight" 1 "intensity" .6
LightSource "distantlight" 2 "intensity" .6 "from" [-4 6 -7] "to" [0 0 0] "lightcolor" [1.0 0.4 1.0]
LightSource "distantlight" 3 "intensity" .36 "from" [14 6 7] "to" [0 -2 0] "lightcolor" [0.0 1.0 1.0]
Surface "plastic"
Color [1 .6 1]
# spout
AttributeBegin
Sides 2
Translate 3 1.3 0
Rotate 30 0 0 1
Rotate 90 0 1 0
Hyperboloid 1.2 0 0 .4 0 5.7 360
AttributeEnd
# handle
AttributeBegin
Translate -4.3 4.2 0
TransformBegin
Rotate 180 0 0 1
Torus 2.9 .26 0 360 90
TransformEnd
TransformBegin
Translate -2.38 0 0
Rotate 90 0 0 1
Torus 0.52 .26 0 360 90
TransformEnd
Translate -2.38 0.52 0
Rotate 90 0 1 0
Cylinder .26 0 3.3 360
AttributeEnd
# body
AttributeBegin
Rotate -90 1 0 0
TransformBegin
Translate 0 0 1.7
Scale 1 1 1.05468457
Sphere 5 0 3.12897569 360
TransformEnd
TransformBegin
Translate 0 0 1.7
Scale 1 1 0.463713017
Sphere 5 -3.66606055 0 360
TransformEnd
AttributeEnd
# top
AttributeBegin
Rotate -90 1 0 0
Translate 0 0 5
AttributeBegin
Scale 1 1 0.2051282
Sphere 3.9 0 3.9 360
AttributeEnd
Translate 0 0 .8
AttributeBegin
Orientation "rh"
Sides 2
Torus 0.75 0.45 90 180 360
AttributeEnd
Translate 0 0 0.675
Torus 0.75 0.225 -90 90 360
Disk 0.225 0.75 360
AttributeEnd
WorldEnd
- Micro Pixel에 관한 내용

픽셀을 마이크로픽셀로 나눈 후 그 각각의 마이크로 픽셀안의 정보의 평균치를 나타내어 주는 원리인 것 같다.
랜더맨의 동작원리
랜더링할때 난 랜더맨을 쓴게 아니라(비싸거니와 내 넷북에는 깔리지도 않는다 32비트라..ㅠ) AQSIS 랜더러를 사용했다.
프리웨어이기도 하고 기본적인 랜더러의 개념을 습득하기는 빠르고 좋은 것 같다.
'공부 > RenderMan' 카테고리의 다른 글
RenderMan #2 (0) | 2009.11.08 |
---|
Recent comment