Rim Lighting
- 프로젝트 진행중 아트측 요청으로 배경과 캐릭터 간의 구분을 위해 Rim Lighting을 추가해달라는 요청이 있어서 추가하게 되었다.
- 적용을하다 보니 구분을 위해 사용함과 동시에 Noise Texture를 혼합하여 피격 효과나 프로젝트에서 보스의 분신을 생성할때 사용하면 나쁘지 않겠다는 생각이 들었다.
- 일단 Rim Light란 Lembert 공식에서 ( N dot L )에서 Light Vector 대신 View Vector를 활용하여 1-( N dot V )로 값을 뒤집어 외곽선을 뚜렷하게 보이게 하는 효과이다.
- 결국 Rim Light는 역광에서 나온 빛이 반사되어 보인다고 생각하면 될 것 같다.
- 해당 Rim Light를 자유롭게 쓰기 위해 너비값, 강도, 색상을 설정하여 사용하도록 하였다.
cbuffer cbMaterial : register(b0)
{
...
float gLimLightFactor : packoffset(c1.w);
float3 gLimLightColor : packoffset(c2.x);
float gLimLightWidth : packoffset(c2.w);
};
// Rim Light Pixel Shader Code..
float rim = 1.0f - max(0, dot(normalW, normalize(gEyePos - pin.PosW)));
rim = smoothstep(1.0f - gLimLightWidth, 1.0f, rim) * gLimLightFactor;
emissive.rgb += gLimLightColor * rim;
- 현재 G-Buffer에서 Emissive 색상에 누적하여 Light Pass에서 추가적으로 색상을 더해준다.
적용 영상
'DirectX 11' 카테고리의 다른 글
[DirectX 11] HDRI Sky Light & Sky Cube Baking (0) | 2022.05.25 |
---|---|
[DirectX 11] Material Property Block (0) | 2022.05.22 |
[DirectX 11] Vertex Texture Fetch Skinning Animation Instancing (0) | 2022.04.21 |
[DirectX 11] Hierarchical Z-Buffer Occlusion Culling (0) | 2022.04.04 |
[DirectX 11] Fast Picking (Object ID Picking) (6) | 2022.03.29 |