Unity mendukung rendering stereo tunggal untuk perangkat Android yang mendukung multiview. Multiview terdiri dari ekstensi 100GL_OVR_multiview2 dan GL_OVR_multiview_multisampled_render_to_texture OpenGL ES. Ekstensi ini memerlukan naungan untuk menggunakan array tekstur 2D yang terdiri dari dua irisan, satu irisan per mata. Ini berbeda dari implementasi PC / PS4 Unity dari rendering stereo tunggal yang menggunakan tekstur 2D dua lebar. Ini berarti bahwa modifikasi shaderProgram yang berjalan di GPU. More info
Lihat di Glossary untuk mendukung rendering stereo tunggal di Android berbeda dari platform lain.
Untuk menggunakan rendering stereo tunggal dengan warna kustom, Anda mungkin perlu memasukkan kode naungan tambahan. Anda tidak perlu memasukkan kode tambahan jika warna kustom Anda adalah:
Note: Perubahan naungan ini kompatibel dengan rendering stereo multi-pass.
Jika Anda ingin menggunakan variabel naungan unity_StereoEyeIndex
built-in untuk mengetahui mata GPU rendering ke, Anda harus menyatakan UNITY_VERTEX_OUTPUT_STEREO
pada setiap tahap naungan output structs yang Anda miliki. Contoh:
struct v2f {
float2 uv : TEXCOOR0;
float4 vertex : SV_POSITION;
UNITY_VERTEX_OUTPUT_STEREO
};
Untuk menginisialisasi data output, gunakan UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO()
dalam fungsi vertex shaderProgram yang berjalan pada setiap simpul model 3D ketika model sedang diberikan. More info
Lihat di Glossary. Contoh:
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;
}
Untuk menginisialisasikan unity_StereoEyeIndex
pada tahap berikutnya, tambahkan UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX()
pada awal. Contoh:
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;
}
Jika naungan Anda menggunakan tahap naungan lainnya, gunakan makro UNITY_TRANSFER_VERTEX_OUTPUT_STEREO()
untuk mentransfer indeks mata ke tahap berikutnya.
Tip: Untuk menghitung posisi akhir objek, praktik terbaik untuk menggunakan UnityObjectToClipPos(IN.vertex)
bukan mul(UNITY_MATRIX_MVP, IN.vertex)
.
Anda harus memperbarui naungan post-processingProses yang meningkatkan visual produk dengan menerapkan filter dan efek sebelum gambar muncul di layar. Anda dapat menggunakan efek pasca proses untuk mensimulasikan kamera fisik dan sifat film, misalnya Bloom dan Kedalaman Lapangan. More info pemrosesan pos, pasca proses, pasca proses
Lihat di Glossary untuk menangani tekstur mata menjadi array tekstur 2D. Untuk membantu dengan ini, Unity mencakup makro UNITY_DECLARE_SCREENSPACE_TEXTURE()
. Untuk membuat tekstur bekerja dalam mode multi-pass dan single-pass, bungkus setiap tekstur dalam makro ini. Juga, ketika Anda mencicipi tekstur, gunakan makro UNITY_SAMPLE_SCREENSPACE_TEXTURE()
.
makro ini mengharuskan Anda memanggil UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX()
sebelum tangan ketika dalam mode single-pass. Unity juga termasuk makro serupa untuk tekstur kedalaman dan peta bayangan ruang layar. Anda dapat melihat daftar lengkap di bagian bawah HLSLSupport.cginc
.