반응형



http://blog.naver.com/kimachine/130104998068

지금도 주말마다 개발하고 있는 게임이 있는데 쉐이더 공부를 하면서 하니까 오래 걸린다.

그림이 점점 좋아 지고는 있으나 직업으로 하지 못하니 시간을 내기 힘들고 주말에만 잠깐씩 할 수 있다.

공부해서 알게된 쉐이더 기법을 하나씩 적용해 나갔다.

 

1. HDR Lighting 기법

노말매핑을 적용한 물체에 HDR(High Dynamic Range) Lighting 을 적용했다. 

반사되는 부분이 빛이 옆으로 번지는 기법 (Blooming)이 사용되었다.

HDR을 하기 위해서는 먼저 16비트 렌더링 타겟에 물체를 렌더링한다.  즉, A16R16G16B16 포멧을 갖는 텍스쳐를 만들어 이것을 렌더 타겟으로 설정한다.  이후 쏘이는 빛의 세기를 1.0을 초과하는 큰 값을 가지게 하여 렌더링한다.  그러면 각 물체의 표면이 어두운 곳은 변함이 없지만 밝은 곳은 1.0을 넘는 밝기를 가지게 된다.  16비트 텍스쳐는 각 픽셀의 밝기값을 훨씬 크게 저장할 수 있다.  하지만 마지막 보여지는 화면은 각 픽셀의 밝기가 1.0까지만 되므로 1.0을 초과하는 밝기를 다른 형태로 표현해 줘야 한다.  그러기 위해 Blooming효과를 준다.  Blooming 효과 말고도 tone mapping이나 다른 방식이 있으나 번쩍이는 효과를 주기로 했다.  이렇게 얻어진 16비트 텍스쳐는 필터링을 거쳐서 밝은 부분만 걸러내는 작업을 통과하게 된다.  그러면 어두운 화면에 밝은 부분이 군데 군데 남게 된다.  이렇게 얻어진 화면을 Gaussian Blur를 한다.  Blur는 번지게 하는 기법을 말하는데 간단히 말하면 주위 근처의 픽셀 밝기값들을 현재의 픽셀값에 더한후 나누어 주는 것을 말한다.  그러면 어두운 화면에 번져있는 부분이 있는 텍스쳐가 얻어지는데 이것을 원래 그림과 합해서 렌더링해주면 된다.

 





 


2. Environment Mapping

  환경매핑(Environment Mapping)은 일반적으로 매끈한 금속성 표면에 주위가 비춰지는 효과를 나타내 주는 기법을 말하나 나는 바다의 반짝이는 효과를 주기 위해 사용되었다.  바다는 전에 골프장에서 썼던 반사맵을 이용해서 그리면 바다 처럼 보이지가 않았다.  그래서 반짝거리는 효과가 주로 나타내는 데 집중했다.  일반적으로 물을 그릴때는 물의 표면의 움직임(파도)을 나타내는 normal map(법선맵)을 가지고 environment map(환경맵)의 좌표값을 알아낸후 텍스쳐로 사용한다.

  일반적인 노말매핑은 노말맵에 들어 있는 값 (예, -0.7, 0.0, 0.7)을 물체에서 그 좌표에 해당하는 표면이 바라보는 방향으로 간주한다.  즉 어떤 물체의 표면에 매핑된 노말맵의 좌표값이 (0.1, 0.2) 라면 이 좌표값에 있는 노말맵의 색깔 (RGB) 값을 3차원 벡터로 바꿔주고 그 벡터가 가리키는 방향이 그 표면이 보고 있는 방향이라고 간주하는 것이다.  만약 그 표면이 광원을 향하고 있으면 밝게 그려주고 그렇지 않으면 어둡게 그려주므로써 표면을 픽셀단위로 굴곡을 줄 수 있다.  이것은 결국 로우폴리곤 모델로 하이폴리곤 모델을 나타내 주는 방법이다.  그러나 환경매핑은 같은 노말값을 이용해서 광원에 따라 밝기를 계산하는게 아니고 그 노말값이 가리키는 방향에 있는 환경 (즉, 주변물체)의 표면을 그려준다.  하늘을 예로 들면 노말값이 수직이면 하늘의 정 중앙의 이미지를 텍스쳐링하는 식이다.  그러면 결국 울퉁불퉁한 표면이 주위의 환경을 반사하는 물체가 그려진다.  이때 반사되는 물체들을 일일히 찾아서 그려주는 것이 아니고 환경맵이라는 주변을 찍은 텍스쳐를 이용해서 그려준다.  이때 사용하는 텍스쳐는 큐브맵(Cube map) 인데 박스형태의 이미지로 6개의 면으로 되어 있다.  즉, 상하, 좌우, 앞뒤를 가운데 에서 찍은 이미지로 사방의 환경을 나타낸 것이다. 

  물은 이 방법에서 나아가 표면의 노말값이 시간에 따라 바뀌도록 (즉, 돌려주거나 움직이거나 등) 해야 한다.  그러면 겉에 반사된 이미지가 물결에 따라 출렁거리게 보인다.  아래의 스크린 샷에서 반짝이는 하얀 점들은 환경맵에 있는 광원이 번진 것이다.  광원을 크게 그리면 너무 밝게 보여서 멀리 있는 물처럼 보이지를 않아서 작은 광원이 모여있는 방식으로 그렸다.


[출처] 쉐이더 기법 1|작성자 바람소리


반응형

'그래픽스(Graphics) > Shader' 카테고리의 다른 글

[소스] 해칭(Hatching) HLSL 소스  (0) 2013.01.05
VS에서 HLSL 편집하기 InteliShade  (0) 2013.01.05
셰이더 내장함수  (0) 2012.11.02
smoothstep  (0) 2012.11.02
NVIDIA계열 그래픽카드 오버클럭 하기  (0) 2012.10.31

+ Recent posts