카테고리 없음

[문제 해결] RenderTexture 에 화면이 뒤집혀서 출력될 때

Ardmos :) 2022. 2. 3. 05:11

모니터 화면을 가진 3D 오브젝트를 만들던 중에 RenderTexture에 출력되는 화면이 거꾸로 출력되는 문제를 발견했습니다. 

 

1. 원인 

  Direct3D 타입과 OpenGL 타입 플랫폼의 수직 텍스쳐 좌표 규칙은 서로 다른데, 

RenderTexture는 Direct3D를 사용해서 렌더링하기 때문에 뒤집혀서 렌더링되는 것 입니다. 

 

2. 해결 

  아래 Unity Manual을 참고해서 해결했는데 아직 쉐이더에대한 지식이 부족해서 모든 내용을 이해하고 따라하진 못하고, 나름 이해한 내용들만 짜깁기해서 적용시켰습니다.

아래는 제가 적용시킨 코드입니다.

            # if UNITY_UV_STARTS_AT_TOP
                IN.uv_MainTex.y = 1 - IN.uv_MainTex.y;
                IN.uv_MainTex.x = 1 - IN.uv_MainTex.x;
            # endif

 

이 부분이며, 

첫 번째 줄 # if UNITY_UV_STARTS_AT_TOP 의 뜻은 아래와 같습니다. 

이걸 이용해서 화면이 뒤집힌 경우에만 한 번 뒤집어주도록 체크하고 있습니다.

그리고 나머지 두 줄

                IN.uv_MainTex.y = 1 - IN.uv_MainTex.y;
                IN.uv_MainTex.x = 1 - IN.uv_MainTex.x;

은 제가 위에서 선언한 텍스쳐의 y값과 x값을 반전시켜주는 내용입니다. 

 

# if UNITY_UV_STARTS_AT_TOP 를 통해 화면이 뒤집혔는지 확인하고, 뒤집혔으면 다시 뒤집어주는겁니다. 

 

저는 일단 이렇게 해결해봤는데, 메뉴얼에서 안내하는 if (_MainTex_TexelSize.y < 0) 이 부분을 이해하지 못해서 사용하지 못했습니다. 

더 열심히 해야겠습니다 :)

 

 

 

** 참고 

https://docs.unity3d.com/kr/current/Manual/SL-PlatformDifferences.html 

 

Writing shaders for different graphics APIs - Unity 매뉴얼

In some cases, there are differences in how graphics rendering behaves between different graphics APIs. Most of the time the Unity Editor hides the differences, but there are some situations where the Editor cannot do this for you. These situations, and th

docs.unity3d.com

 

728x90