BLOG ARTICLE 2018/06 | 2 ARTICLE FOUND

  1. 2018.06.27 신형 progressive lightmapper
  2. 2018.06.01 깊이값 가지고 놀기

신형 progressive lightmapper테스트 중인데 

확실히 이전의 Enlighten보다는 좀 더 신용성 있게? 안정은 아닌것 같고 뭐라고 해야 하나 

하여간 좀 더 믿음직하게 움직인다 


그렇다곤 해도 

조금만 한계치를 올리면 생기는 저 노이즈는 바로 어쩔 수 없이 드러난다. 

샘플링 수치를 올리면 되겠지만 그러면 이번엔 베이킹 시간이 문제 




어쨌거나, 라이트맵의 안정성은 확실히 증가한 느낌이다. 다루기 편해지고 믿음직해졌음.

저 퀄리티일때에는 인라이튼 대비 확실히 빨라진 느낌이고, 고 옵션일 때에는 오래 걸리지만 

적어도 특정 구간에서 멈춘듯 오래 기다리는 문제는 일단 안보인다. 




여전히 뒷면이 끼면 라이트맵에 좀 문제가 있는데, 


이 부분은 




커스텀 파라미터에서 백페이스 톨로런스를 조절해 주면 해결할 수 있는 듯 하다. 

아까 저옵션때는 해결되었었음.





할 때 마다 잊어버려서 백업용. 


Shader "ltest"

{

        SubShader

        {

               Tags{ "RenderType" = "Opaque" }

 

               CGPROGRAM

               #pragma surface surf Lambert 

               struct Input

               {

                       float4 screenPos;//스크린 포지션을 받읍시다

               };

 

               sampler2D _CameraDepthTexture;

 

               void surf( Input i , inout SurfaceOutput o )

               {

                       float4 ScreenPos = float4( i.screenPos.xyz , i.screenPos.w + 0.00000000001 ); //0으로 나누는 사태만 방지하기 위해 작은 값을 넣습니다. 

                       float4 screenPosNorm = ScreenPos / ScreenPos.w; // 퍼스펙티브 제거

                       //screenPosNorm.z = ( UNITY_NEAR_CLIP_VALUE >= 0 ) ? screenPosNorm.z : screenPosNorm.z * 0.5 + 0.5;

                       //near클립 값이 0보다 크면 냅두고 작으면 하프 램버트 처리

                       float screenDepth= LinearEyeDepth(UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture,UNITY_PROJ_COORD(ScreenPos)))); // 깊이 텍스쳐를 스크린 좌표계를 이용해서 깊이값을 뽑아내고 그걸 리니어로 변환

                       o.Emission  = 1- ( screenDepth - LinearEyeDepth( screenPosNorm.z ) );

               }

               ENDCG

        }

       

}