Unity/UnityShader

[HLSL]Henyey-Greenstein Phase Function

멍산 2025. 3. 25. 14:34

 
 

 
https://www.oceanopticsbook.info/view/scattering/level-2/the-henyey-greenstein-phase-function

 

The Henyey-Greenstein Phase Function :: Ocean Optics Web Book

 

www.oceanopticsbook.info

 
개념
 
빛이 매질을 통과할 때 어느 방향으로 산란되는지 결정하는 확률 분포 함수.
- 앞 쪽으로 잘 퍼지는 빛 - Forward Scattering
- 모든 방향으로 잘 퍼지는 빛 - Isotropic
- 뒤 쪽으로 잘 퍼지는 빛 - Back Scattering
 
 
HLSL 코드

float PhaseFunction(float cosTheta, float g)
{
	//cosTheta : 카메라와 광원 방향사이의 각도 dot(-viewDirection, lightDirection)
    //g : 편향 인자(bias)

    float g2 = g * g;

    return (1.0 - g2) / pow(1.0 + g2 - 2.0 * g * cosTheta, 1.5)
           * (1.0 / (4.0 * 3.14159265));
}

 

근사치 계산 식

float3 L = LightDirection;
float3 V = ViewDirection;

float Scatter(float n)
{
	return pow(dot(-L,V), n);
}

 


그 외 알아보면 좋은 것
Schlick, Mie 등