본문 바로가기
유니티 엔진

OpenGL ES와 DX11의 뎁스 차이

by 대마왕J 2021. 2. 22.

추가 : 그리고 이건 유니티 2019 버전의 버그로 결론지어짐. 그리고 이것만이 문제가 아님 . 두둥. 

 

 

 

DX11

 

OpenGL ES

float thisZ = LinearEyeDepth(projection.z / projection.w, _ZBufferParams);

값의 차이 . 

이것은 

 

                 #ifdef SHADER_API_D3D11
                
                 thisZ = thisZ;
              
                 #else

                 thisZ = thisZ*2;
        
                 #endif

해주자 거의 차이가 없어졌다. 뭐야.. 모바일에서 2만 곱해주면 된다고???? 

 

 

그리고 놀랍게도 

 

float sceneZ = LinearEyeDepth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture,
 sampler_CameraDepthTexture, projection.xy / projection.w), 
_ZBufferParams);

 

의 차이는 거의 없었다. 이 공식은 건드릴 필요가 없다. 

 

뭐야 이게.. 

그래서 위에처럼 *2 해준 것만으로 해결되었다. 

 

기기마다 다를지 모르겠지만 일단 갤럭시 8에서는 위와 같은 문제가 있었고 , 저렇게 해결하였다. 

 

반응형

댓글