Version: 2020.2
언어: 한국어
빠른 개발 반복을 위한 앱 패치
Vulkan 스왑체인 사전 회전

Android용 싱글 패스 스테레오 렌더링

싱글 패스 스테레오 렌더링(Single-pass stereo rendering)은 현재 Gear VR 및 Daydream 기기에서 지원됩니다. 이 기능을 활성화하기 위해 GL_OVR_multiview2GL_OVR_multiview_multisampled_render_to_texture OpenGL|ES 확장자*를 사용합니다. 이 두 확장자를 사용하려면 텍스처 조각이 2개(한 눈에 하나씩)인 텍스처 2D 배열을 사용해야 합니다. 2배로 넓은 2D 텍스처를 사용하는 PC/PS4 구현과는 다르므로 다른 셰이더 변경 사항이 요구됩니다.

셰이더 스크립트 요구 사항

싱글 패스 스테레오 렌더링을 사용자 셰이더와 함께 사용하려면 아래 나열된 추가 코드를 포함시켜야 할 수 있습니다. 커스텀 버텍스 프로세싱이 포함된 표면 셰이더를 제외하고, Unity 에디터에서 자동으로 전환되는 표면 셰이더 또는 고정 함수 파이프라인 셰이더에는 해당되지 않습니다.

이러한 셰이더 스크립트 변경 사항은 멀티 패스 스테레오 렌더링과 호환되므로 해당 모드에서 부작용이 발생하지 않습니다.

첫째, 버텍스 셰이더 이후의 셰이더 단계에서 unity_StereoEyeIndex를 사용하려면 셰이더 단계 출력 구조체에서 UNITY_VERTEX_OUTPUT_STEREO를 선언해야 합니다. 아래 예제를 참고하십시오.

struct v2f {
    float2 uv : TEXCOOR0;
    float4 vertex : SV_POSITION;
    UNITY_VERTEX_OUTPUT_STEREO
};

둘째, UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO()를 버텍스 셰이더 함수에 사용하여 출력 데이터를 초기화해야 합니다.

v2f vert (appdata v)
{
    v2f o;
    UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
    o.vertex = UnityObjectToClipPos(v.vertex);
    o.uv = TRANSFORM_TEX(v.uv, _MainTex);
    return o;
}

이어지는 단계에서 unity_StereoEyeIndex를 초기화하려면 다음과 같이 UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX()를 앞에 추가해야 합니다.

fixed4 frag (v2f i) : SV_Target
{
    UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
    // sample the texture
    fixed4 col = tex2D(_MainTex, i.uv);
    // apply fog
    UNITY_APPLY_FOG(i.fogCoord, col);
    return col;
}

다른 셰이더 단계를 사용한다면 UNITY_TRANSFER_VERTEX_OUTPUT_STEREO() 매크로를 사용하여 눈 인덱스(eye index)를 후속 단계로 전송해야 합니다.

마지막으로, UnityObjectToClipPos(IN.vertex)를 mul(UNITY_MATRIX_MVP, IN.vertex) 대신 사용하여 오브젝트의 최종 포지션을 계산하는 것이 좋습니다.

포스트 프로세싱 셰이더

눈 텍스처가 텍스처 2D 배열이 되는 상황을 처리하기 위해 포스트 프로세싱 셰이더를 업데이트해야 합니다. Unity는 업데이트를 지원하는 UNITY_DECLARE_SCREENSPACE_TEXTURE() 매크로를 만들었습니다. 텍스처가 멀티 패스 및 싱글 패스 모드에서 모두 작동하도록 하기 위해 이 매크로를 모든 텍스처를 래핑하는 데 사용해야 합니다.

텍스처를 샘플링할 때에는 다음 매크로를 사용해야 합니다.

UNITY_SAMPLE_SCREENSPACE_TEXTURE()

UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX()가 싱글 패스 모드에서 이미 호출된 경우에만 이 매크로를 사용할 수 있습니다. Unity는 뎁스 텍스처와 화면 공간 섀도우맵에 관한 유사한 매크로도 만들었습니다. HLSLSupport.cginc에서 전체 목록을 확인할 수 있습니다.

셰이더 코드에 대한 자세한 내용은 버텍스 및 프래그먼트 셰이더 예제 페이지를 참조하십시오.

* OpenGL|ES 확장자는 비교적 새로운 확장자이므로 해당 휴대폰의 드라이버 때문에 그래픽스와 관련한 문제가 발생할 수 있습니다.


  • Unity 5.5의 새로운 기능

  • 2017–06–20 페이지 게시됨

빠른 개발 반복을 위한 앱 패치
Vulkan 스왑체인 사전 회전