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