Version: Unity 6.0 (6000.0)
언어 : 한국어
화면 구성
프레임버퍼 방향

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

Unity는 멀티뷰를 지원하는 Android 기기에서 싱글 패스 스테레오 렌더링을 지원합니다. 멀티뷰는 GL_OVR_multiview2GL_OVR_multiview_multisampled_render_to_texture OpenGL ES 확장으로 구성됩니다. 이러한 확장을 사용하려면 셰이더가 두 개의 슬라이스(눈당 하나의 슬라이스에 대응)로 구성된 2D 텍스처 배열을 사용해야 합니다.

셰이더 코드 요구 사항

커스텀 셰이더와 함께 싱글 패스 스테레오 렌더링을 사용하려면 추가 셰이더 코드를 포함해야 할 수 있습니다. 커스텀 셰이더가 다음과 같은 경우 추가 코드를 포함할 필요가 없습니다.

  • 커스텀 버텍스 프로세싱이 없는 표면 셰이더
  • 고정 함수 파이프라인 셰이더

참고: 이러한 셰이더 변경 사항은 멀티 패스 스테레오 렌더링과 호환됩니다.

셰이더 수정

GPU가 렌더링되는 눈을 알기 위해 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() 매크로를 사용하여 눈 인덱스를 후속 단계로 전송해야 합니다.

: 오브젝트의 최종 위치를 계산하려면 mul(UNITY_MATRIX_MVP, IN.vertex) 대신 UnityObjectToClipPos(IN.vertex)를 사용하는 것이 좋습니다.

포스트 프로세싱 셰이더

눈 텍스처가 2D 텍스처 배열인 경우 포스트 프로세싱 셰이더를 업데이트해야 합니다. 이를 지원하기 위해 Unity에는 UNITY_DECLARE_SCREENSPACE_TEXTURE() 매크로가 포함되어 있습니다. 멀티 패스와 싱글 패스 모드에서 텍스처가 작동하도록 만들려면 이 매크로에서 각 텍스처를 래핑합니다. 또한 텍스처를 샘플링할 때 UNITY_SAMPLE_SCREENSPACE_TEXTURE() 매크로를 사용합니다.

이 매크로는 싱글 패스 모드일 때 UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX()를 미리 호출해야 합니다. Unity에는 뎁스 텍스처와 스크린 공간 섀도우 맵을 위한 유사한 매크로도 포함되어 있습니다. HLSLSupport.cginc 하단에서 전체 리스트를 볼 수 있습니다.

화면 구성
프레임버퍼 방향