Android용 싱글 패스 스테레오 렌더링
Explains how to use single-pass stereo rendering in your Android application.
읽는 시간 2분최근 업데이트: 한 달 전
Unity는 멀티뷰를 지원하는 Android 기기에서 싱글 패스 스테레오 렌더링을 지원합니다. 멀티뷰는 GL_OVR_multiview2 및 GL_OVR_multiview_multisampled_render_to_texture OpenGL ES 확장으로 구성됩니다. 이러한 확장을 사용하려면 셰이더가 두 개의 슬라이스(눈당 하나의 슬라이스에 대응)로 구성된 2D 텍스처 배열을 사용해야 합니다.
셰이더 코드 요구 사항
커스텀 셰이더와 함께 싱글 패스 스테레오 렌더링을 사용하려면 추가 셰이더 코드를 포함해야 할 수 있습니다. 커스텀 셰이더가 다음과 같은 경우 추가 코드를 포함할 필요가 없습니다.
- 커스텀 버텍스 프로세싱이 없는 표면 셰이더
- 고정 함수 파이프라인 셰이더
참고: 이러한 셰이더 변경 사항은 멀티 패스 스테레오 렌더링과 호환됩니다.
셰이더 수정
GPU가 렌더링되는 눈을 알기 위해 빌트인 셰이더 변수를 사용하려는 경우 셰이더 단계 출력 구조체에서 를 선언해야 합니다. 예시:
unity_StereoEyeIndexUNITY_VERTEX_OUTPUT_STEREOstruct 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_StereoEyeIndexUNITY_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에는 뎁스 텍스처와 스크린 공간 섀도우 맵을 위한 유사한 매크로도 포함되어 있습니다. 하단에서 전체 리스트를 볼 수 있습니다.
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX()HLSLSupport.cginc