DirectX11 자체엔진을 만들면서 일반적으로 많이 알려진 Diffuse Light모델인
Lambert(N·L)계산을 한 뒤 적용 후 몇가지 문제점을 발견했다.
1. 조명을 받지않는 부분이 너무 어둡다.
2. specular가 쎄다.(인간 캐릭터인데 도자기나 플라스틱 재질같다)
3. 색이 묘하게 칙칙하며 전체적으로 퀄리티가 낮다.
이것을 해결하기 위해 Valve사에서 처음 개발된 Half Lambert Lighting모델을 적용시켜보기로 하였다.
Half Lambert란?
명암이 매우 강렬하게 나오는 Lambert의 특성을 보완하기위해 램버트 코사인 법칙의 코사인 곡선이 절반이 되도록
"1/2"을 곱한 다음, "1/2"을 더하고, 다시 이것을 제곱해서 완만한 곡선으로 변환해서 음영처리를 하는 라이팅 기법이다.
dot(N, L) * 0.5f + 0.5;
이 한 줄이 핵심!
기존 dot 연산 코드에 조금의 수정으로 제대로 보이지 않았던 캐릭터가 전체적으로 밝아졌다.
블로그 글들을 읽어본 결과 이 결과는 실무에서 사용하기엔 조금 과한편이라
실제로는 이 효과를 줄여서 사용한다고 한다.
방법으로는 이 결과물에 제곱을 하는것!
자연스러운 음영이 생겼다.
다음으로 Specular 값을 조정해보겠다.
반짝반짝 대머리!
다음글에선 묘하게 칙칙한 색을 조정하기 위해 사용한 Tone Mapping과 Gamma Correction을 알아보며
반영한 결과물을 정리해보도록 하겠다.
참고 : ShaderFX를 이용한, 그래픽 디자이너를 위한 기초 쉐이더 강좌 15강
(https://gamedevforever.com/233?category=387045)
'Shader & 포스트 프로세싱' 카테고리의 다른 글
툰셰이더(1) (0) | 2022.02.24 |
---|---|
디퓨즈/스페큘러 매핑 (0) | 2022.02.23 |
기초적인 조명셰이더(2)_정반사광specular light (0) | 2022.02.23 |
기초적인 조명셰이더(1)_난반사광diffuse light (0) | 2022.02.22 |
텍스처매핑 (0) | 2022.02.15 |
댓글