Shaders for physically based rendering (PBR)

Overview

PBR surface shader를 작성하는 것은 surface에 대한 BSDF(bidirectional scattering distribution funtion)는 디자인을 하는 것을 수반한다. 이 함수는 빛이 표면에 부딪힐 때 얼마나 산포되는지 설명한다. BSDF들은 VEX에서 불투명한 데이터 타입으로 다른 primitive 타입들처럼  연산하고 저장할 수 있다.

shader에 대한 최종 BSDF를 새로운 전역 변수 F를 통해 아웃풋 할 수 있다. VOP에서 BSDF를 아웃풋 노드의 F 커넥션에 연결한다. (페이지 하단 VOPs를 본다).

BSDF는 어떻게 표면이 빛을 반사하는지의 내용을 자체로 가지고 있다. PBR을 함께하면, 빛을 계산할 필요가 없다 (예, illuminance loop 또는 trace() 호출을 사용). 사용자는 bsdf를 제공할 필요만 있다.

사용자는 스스로 산포 함수를 작성하지 않아도 된다. BSDF들은 덧셈, 곱셈, scalar 곱셈을 사용해 primitive BSDF들을 합치는 것으로 만든다. 하단의 “Primitive BSDFs”와 “Combining BSDFs”를 본다.

렌더를 위해 선택한 셋팅을 기반으로 Mantra는 사용자의 shader에서 계산된BSDFs를 여러 방법으로 사용할 수 있다. 예를 들어, 직광(direct lighting), 간접광(indirect lighting), photon 매핑같은 알고리즘에 대해 빛을 반전해 계산하는 것들을 수행할 수도 있다.

사용자는 전통적인 방식과 물리 기반 렌더 방식을 모두 지원하는 shader들을 디자인 할 수 있다. shader에서 아웃풋 변수들의 두 타입들에 값을 할당해 주기만 하면 된다. (Cf, Of, Af는 전통적 렌더링이고, F는 PBR 렌더링이다).

Primitive BSDFs

phong

phonglobe

ashikhmin

blinn

matchvex_blinn

specular

mathvex_specular

cone

diffuse

wireblinn

wirediffuse

Combining BSDFs

  • bsdf + (bsdf, bsdf)
    두 bsdf들을 서로 합한다. bsdf들을 합하는 것은 diffuse()와 phong()을 서호 합치는 것처럼, 사용자가 하나 이상의 컴포넌트 타입을 포함할 수 있게 한다.
  • bsdf * (float scale, bsdf)
  • bsdf * (vector scale, bsdf)
    bsdf의 scale을 color나 scale factor로 변경한다. bsdf의 scale을 변경하는 것은 사용자가 surface color (예, texturing)를 bsdf로 보간할 수 있게 한다.
  • bsdf * (bsdf, bsdf)
    두 bsdfs의 프로듀스를 만든다. 이 함수는 diffuse()를 통해 specular basdf의 scale을 변경하는데 매우 유용하다.
  • vector albedo (bsdf)
    bsdf에 대한 반사된 빛의 일부를 리턴한다. 에너지를 보존하는 bsdf에 대한 리턴 값은 0과 1 사이어야만 한다. albedo에 대한 디폴트 diffuse bsdf는 0.5이지만, vector scale factor와 다른 bsdf 컴포넌트들을 기반으로 변경될 것이다.

VOPs

VOP들을 사용해 BSDF(노란색) 아웃풋을 생상히거 아웃풋 노드의 F 커넥션에 연결하는 것으로 PBR shader를 만들 수 있다. 대부분의 전통적인 lighting VOP들은 이제 bsdf 아웃풋뿐만 아니라 전통적인 아웃풋들까지 생성한다.

다음은 VOP 네트워크의 예제로 specular bsdf와 diffuse bsdf를 만들고, add1로 열결하고, 결과로 나온 bsdf를 output으로 전달한다.

pbr_vops

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s