WinCNT

Light Shaft 본문

게임 프로그래밍(학습 내용 정리)/게임 수학

Light Shaft

WinCNT_SSS 2022. 6. 28. 14:15

현실에서 구름이나 나뭇잎 등의 사이를 뚫고 나오는 빛줄기를 표현한 기법이다

 

Radial Blur와 구현 방식은 비슷하다

Light가 그려진 Buffer에 Radial Blur를 적용하여 BackBuffer와 합성(Add)해서 구현한다

float2  vLightShaftPos : POSTEFFECT_SEMANTIC_LIGHTSHAFT_POS;
float4  vLightShaftValue : POSTEFFECT_SEMANTIC_LIGHTSHAFT_VALUE;
// .x=Density, .y=Decay, .z=Weight, .w=Exposure

float4 psLightShaft( float2 texCoord : TEXCOORD0 ) : COLOR0
{
    #define NUM_LIGHTSHAFT_SAMPLES 64
    float2 DeltaTexCoord = ( texCoord.xy - vLightShaftPos.xy );
    float Len = length( DeltaTexCoord );
    DeltaTexCoord *= 1.0 / NUM_LIGHTSHAFT_SAMPLES * vLightShaftValue.x;
    float3 Color = tex2D( SamplerSrc0, texCoord );
    float IlluminationDecay = 1.0;
    for( int i = 0; i < NUM_LIGHTSHAFT_SAMPLES ; ++i )
    {
        texCoord -= DeltaTexCoord;
        float3 Sample = tex2D( SamplerSrc0, texCoord );
        Sample *= IlluminationDecay * vLightShaftValue.z;
        Color += Sample;
        IlluminationDecay *= vLightShaftValue.y;    
    }
    
    float4 c0 = float4( Color * vLightShaftValue.w, 1.0 );
    
    return c0;
}

 

SSS

'게임 프로그래밍(학습 내용 정리) > 게임 수학' 카테고리의 다른 글

Illusion  (0) 2022.06.28
Edge Detect Filter  (0) 2022.06.28
Vignetting  (0) 2022.06.28
DOF(Depth Of Field)  (0) 2022.06.21
Posterize  (0) 2022.06.21