'공부/RenderMan'에 해당되는 글 2

  1. 2009.11.08 RenderMan #2
  2. 2009.11.01 RenderMan #1

RenderMan #2

이번강의는 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

이곳에 블로깅하는 내용은 제가 강의를 들으면 노트필기를 한 내용이며, 그냥 그런것들을 보기쉽게 정리한 것 뿐입니다.


Websites:

www.renderman.org

www.cygwin.com

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에 관한 내용



픽셀을 마이크로픽셀로 나눈 후 그 각각의 마이크로 픽셀안의 정보의 평균치를 나타내어 주는 원리인 것 같다.

랜더맨의 동작원리

그러니까 한마디로 여러 모델러의 데이터를 RIB에서 받아서 다시 그것을 Renderman으로 보낸 후 Renderman은 각각의 이미지를 랜더링해서 보여주는 그런 개념인것 같다.

랜더링할때 난 랜더맨을 쓴게 아니라(비싸거니와 내 넷북에는 깔리지도 않는다 32비트라..ㅠ) AQSIS 랜더러를 사용했다.
프리웨어이기도 하고 기본적인 랜더러의 개념을 습득하기는 빠르고 좋은 것 같다.

'공부 > RenderMan' 카테고리의 다른 글

RenderMan #2  (0) 2009.11.08