Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 벡터
- working set
- 게임 수학
- 메모리 누수
- URP로 변경
- Specular
- Windows Build
- Three(Two) Tone Shading
- 작업 집합
- 3d
- Cell Look
- 개인 바이트
- Private Bytes
- Toon Shader
- OculusMotionVectorPass
- ColorGradingLutPass
- ASW(Application SpaceWarp)
- URP
- AppSW
- 가상 바이트
- 프로그래밍 기초
- VR
- Cartoon Rendering
- C언어
- Rim Light
- Cell Shader
- Virtual Byte
Archives
- Today
- Total
WinCNT
Light Shaft 본문
현실에서 구름이나 나뭇잎 등의 사이를 뚫고 나오는 빛줄기를 표현한 기법이다
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 |