Node setup
Blender에서 glass dispersion 효과를 주기 위한 shader node setup입니다.

빛의 색상과 IOR(Index of Refraction)를 매 light path마다 샘플링하는 것이 핵심입니다.
[0, 1] Random Sampling
White noise texture node는 [0, 1] 사이의 랜덤한 값을 output으로 내보냅니다.
Color
스펙트럼 색상을 표현하기 위한 ColorRamp입니다. Interpolation은 linear로 설정합니다. 각 색상의 scale을 4로 두면 평균 색상이 [R, G, B] = [1, 1, 1]
이 되므로, 투명한 (#FFFFFF
) 유리 재질이 됩니다.
Pos 0.00
:[R, G, B] = [0, 0, 0]
Pos 0.25
:[R, G, B] = [4, 0, 0]
Pos 0.50
:[R, G, B] = [0, 4, 0]
Pos 0.75
:[R, G, B] = [0, 0, 4]
Pos 1.00
:[R, G, B] = [0, 0, 0]
IOR
Map Range와 Float Curve 노드를 통해 재질의 IOR를 대략적으로 표현합니다. Float Curve를 사용하는 이유는 파장이 짧을수록 (=푸른색에 가까울수록) IOR의 변화량이 커지는 nonlinearity를 표현하기 위함입니다.

실제로 프리즘에서 빛이 분산될 때도 푸른색 영역이 붉은색 영역보다 상대적으로 더 넓게 퍼지는 것을 확인할 수 있습니다.

Glass BSDF
Refraction BSDF와 Glossy BSDF를 mix하여 Glass BSDF를 생성합니다. Fresnel node를 통해 빛이 얼마나 반사될지, 얼마나 굴절될지의 비율을 결정합니다.
Light Path Setting
Shader node와 별도로, 빛이 반사되고 굴절되는 caustics 표현을 위해 render properties를 조절하는 것이 좋습니다. Ray tracing의 정확도를 높이기 위해서는 clamping과 caustics 값을 0으로 두어야 합니다.

- Clamping > Indirect Light : 0.00
- Caustics > Filter Glossy : 0.00
- 다이아몬드와 같이 빛이 여러 번 반사될 수 있는 형태에서는 Max Bounces 값을 높여 렌더 디테일을 향상시킬 수 있습니다.
Results
