model tool - Lighting.

반응형
현재 되는 것들 : aabb, obb 충돌.
사이즈 조절
shader 처리 : 원하는 셰이더를 바로 적용.
                    각 셰이더의 값들을 바로 수정해서 볼 수 있도록.

결론은 오브젝트 띄워서 셰이더 렌더링 테스트 할 수 있는 환경만 구축해 둔 것이 전부...후덜덜하네...
1년동안은 엔진 코어 작업하느라 보내고 반년 쉬고, 다시 할려고 하니까 왜이렇게 했나 후회만...쩝.

Max Export에 관한 내용은 아래 글 참조..
http://mgun.tistory.com/1092
http://mgun.tistory.com/1095
http://mgun.tistory.com/1096
http://mgun.tistory.com/1097

이번에 DD Study 발표 주제인 NPR 때문에 다시 꺼내든 Model Tool..흐음..
짜놓은 셰이더도 Visionary Study때 발표했던 Lighting 기본편 때문에 잠시 만든 Light관련 밖에 없네.

아쉬운건 모델이 노말이 없어서 ㅜㅜ.

 
   diffuse
 

       Lambert
 

       Phong_VS
 

     Blinn_Phong_PS
 

        Cook_Torrance
 

       Color_Shift


technique
- Lambert : 물체 표면에서 반사하는 빛의 휘도(Luminance)는 빛의 입사벡터 L과
          표면의 법선벡터 N이 이루는 각도에 비례한다.
    렘버트 코사인 법칙에 의한 확산조명 + 환경광에 의한 라이팅
    I_d * K_d * ( N · L ) + I_a * K_a

- Phong : 하이라이트(강한 빛이 반사된 부분)를 표현하기 위한 반영 반사광.
          시선이 물체에서 반사되었을 때, 그 방향이 빛의 입사방향에 가까울 수록 밝게 보인다.
          I_d * K_d + I_a * K_a * ( N · L ) + I_s * K_s * (L ·R)n
          렘버트 반영반사광에서 하이라이트 부분만 추가된 것.
          R : -E + 2(N·E)N으로 구한다.
          n은 반사지수, 값이 작을 수록 넓은 범위에 걸쳐서 적용, 클수록 점의 형태가 된다.
          하이라이트(반영반사광)은 물체 표면에서 일어나는 빛.
         
- Blinn Phong PS : Phong 모델의 R(반사벡터)를 구하는 부담을 줄이고자 나온 이론.
          하프벡터를 사용한다.
          버텍스 세이더에서 해도 되지만 이번건 그냥 픽셀 세이더에서 구현. 대신 부하가 크다.
          H = (E + L) / |E + L|
          = I_a * K_a + I_d * K_d * ( N ·L ) + I_s * K_s * cosθ^n
    I_d * K_d + I_a * K_a * ( N ·L ) + I_s * K_s * ( N ·H )^n

- Cook Torrance : 표면의 건친정도를 표현하기 위한 반사모델
          물체의 표면을 미세한 면들의 집합이라고 생각.
          미세면이 여러방향으로 향하고 있기 때문에 하이라이트가 희미해 진다라고 가정.
          I = (K_ct) * (D * G * F) / (N ·V)
          K_ct는 물체의 색, D는 희석효과(반영 반사 지수 n과 같음), G는기하 감쇠 계수,
          F는 프레넬 공식에 의한 반사계수, N은 법선벡터, V는 시선벡터.
         
- Color Shift : 빛의 입사 방향이 수평에 가까울 때에 반사광의 색이 입사광 색 자체가 된다.
          입사 벡터와 시선벡터가 거의 같을 때, 반사광에는 금속의 색이 첨가되는 현상.
          즉, 컬러시프트가 고려되지 않은 상태는 금속의 색이 그대로 반사광이 되지만
          컬러시프트가 고려된 반사에서는 빛이 뒤로 돌아갈때 반사하는 색이 입사광의 색에 가까워진다.
          프레넬 반사에서 빛이 거의 뒤쪽에서 입사하는 경우 하프벡터와 광원벡터가 직교하므로 내적값은 0이 되고
          그럼으로 인해 프레넬 계수가 정수값 1이 되어 빛은 굴절률에 따르지 않고 전반사 한다.
          하지만 시점이 정면에서 조명을 비추었을 때 하프벡터가 광원벡터와 거의 같은 방향을
          향하므로 반사율은 물질의 굴절률에 따른다.
         
          빛이 주파수마다 굴절률이 다르다.(프리즘에서 빛을 비추면 빛이 주파수별로 무지개 모양을 띈다)
          프레넬의 반사법칙은 굴절률에 의존하므로 반사율은굴절률에 따라 주파수에 의존한다.
          빛이 정면에 있을때는 프레넬 반사가 굴절률에 의존하여 물질의 색이 되지만
          빛이 뒤에 있을 때는 반사율이 굴절률을 따르지 않기 때문에 입사광의 색이 그대로 반사된다.
    
         빛이 정면에 있을때와 뒤에있을 때의 색을 알고 있으므로 중간값을 선형보간하자!!!.
         color = (1-t) * color0 + t * light_color(빛의 색)
         인수 t를 정면에서 빛이 비칠땐 0, 뒤에서 빛이 비칠땐 1로 설정해서 컬러시프트를 구현가능.
   
         또는 인수 t를 컬러시프트 효과가 프레넬 계수에 의해 정해지므로 대표적인 굴절률 n을 적ㄷ아하게 결정해서 보간.
         color = color0 + (light_color-color0) * ( max(0,F-F(0)) / (1-F(0)) )

'작업장 > Mgin 제작' 카테고리의 다른 글

2. Core - Assert.  (0) 2014.09.21
1. Property Sheet  (0) 2014.09.20
DXUT BackBuffer assert  (0) 2011.07.06
AddRef() func  (2) 2011.05.13
하루를 잡아먹은 export unit error.  (0) 2011.04.29
TAGS.

Comments