Glass Dispersion in Blender

Glass Dispersion in Blender

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를 표현하기 위함입니다.

https://commons.wikimedia.org/wiki/File:Mplwp_dispersion_curves.svg

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

Alfredo Louro, https://www.flickr.com/photos/alfredolouro/3776192271

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