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

> Explains how to use single-pass stereo rendering in your Android application.

Unity는 멀티뷰를 지원하는 Android 기기에서 [싱글 패스 스테레오 렌더링](/engine/6000.0/manual/platform-specific/xr/graphics/single-pass-stereo-rendering/instancing.md)을 지원합니다. 멀티뷰는 [GL\_OVR\_multiview2](https://www.khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview2.txt) 및 [GL\_OVR\_multiview\_multisampled\_render\_to\_texture](https://www.khronos.org/registry/OpenGL/extensions/OVR/OVR_multiview_multisampled_render_to_texture.txt) OpenGL ES 확장으로 구성됩니다. 이러한 확장을 사용하려면 셰이더가 두 개의 슬라이스(눈당 하나의 슬라이스에 대응)로 구성된 2D 텍스처 배열을 사용해야 합니다.

## 셰이더 코드 요구 사항##shader-code-requirements

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

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

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

### 셰이더 수정##modify-your-shaders

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)`를 사용하는 것이 좋습니다.

## 포스트 프로세싱 셰이더##post-processing-shaders

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

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