렌더맨 셰이딩 언어

렌더맨 셰이딩 언어(Renderman Shading Language 약어로 RSL)는 렌더맨 인터페이스 사양(또는 규격)의 한 컴포넌트로 셰이더를 정의하는 데 이용된다. 언어의 문법은 C 언어와 유사하다.

렌더맨 셰이딩 언어는 표준함수와 다섯 종류의 셰이더를 정의하고 있다. 셰이더에는 surface, light, volume, imager, displacement 셰이더가 있다.

예를 들어서 금속성(metalic) 표면을 정의하는 셰이더는 다음과 같다.

surface metal(float Ka = 1; float Ks = 1; float roughness = 0.1;)
{
  normal Nf = faceforward(normalize(N), I);
  vector V = - normalize(I);
  Oi = Os;
  Ci = Os * Cs * (Ka * ambient() + Ks * specular(Nf, V, roughness));
}

셰이더는 예제에 나타난 것과 같이 Cs(표면 색상, Surface color), N(주어진 점에 대한 법선 벡터), Ci(최종적인 표면 색상)와 같은 미리 정의된 특별한 변수에 값을 읽고 쓰는 역할을 한다. 셰이더에서 매개변수는 객체의 모델에 미리 붙어있는 전역적인 파라메터이다.

셰이더는 반환값이 없지만 함수는 다음과 같이 매개변수를 받아서 값을 반환할 수도 있다. 이때 벡터내적연산 "."는 미리 정의된 연산자이다.

float length(vector v) {
  return sqrt(v . v); /* .은 내적연산자임 */
}