API Reference
Login Login

Single Pass Stereo rendering (Double-Wide rendering)

Single Pass Stereo rendering adalah fitur untuk aplikasi VR berbasis PC dan Playstation. Ini render gambar mata kiri dan kanan pada saat yang sama menjadi satu Render TextureJenis Tekstur khusus yang diciptakan dan diperbarui pada runtime. Untuk menggunakannya, pertama membuat Tekstur Render baru dan menunjuk salah satu Kamera Anda untuk membuatnya. Kemudian Anda dapat menggunakan Tekstur Render dalam Bahan seperti Tekstur biasa. More info
Lihat di Glossary
dikemas yang dua kali lebar tekstur mata tunggal. Unity renders SceneAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
Lihat di Glossary
dua kali menggunakan 2 panggilan menggambar untuk setiap GameObjectObjek mendasar dalam adegan Unity, yang dapat mewakili karakter, props, pemandangan, kamera, waypoints, dan banyak lagi. Fungsi GameObject didefinisikan oleh Komponen yang melekat padanya. More info
Lihat di Glossary
yang memiliki komponen Renderer, namun, itu hanya iterates melalui grafik Adegan setelah rendering untuk mata kiri dan kanan. Selama rendering Stereo Pass Tunggal, kedua mata berbagi pekerjaan yang diperlukan dengan menghitung dan komputasi bayangan. Ada juga switch perubahan state perintah grafis yang lebih sedikit, karena GPU renders setiap GameObject dalam mode ping pong (penghasilan alternatif objek antara mata).

Satu Pass Stereo rendering memungkinkan GPU untuk berbagi culling untuk kedua mata. GPU hanya perlu bergetar melalui semua GameObjects di Adegan sekali untuk tujuan budidaya, dan kemudian render GameObjects yang selamat dari proses penanaman.

Gambar perbandingan di bawah ini menunjukkan perbedaan antara rendering VR normal dan rendering Stereo Pass Tunggal.

Normal VR rendering:

Left-eye image on the left, right-eye image on the right
Gambar kiri mata pada gambar kiri, mata kanan di sebelah kanan

Single-Pass Stereo VR rendering:

Left-eye and right-eye images packed together
Gambar kiri dan mata kanan dikemas bersama

Untuk mengaktifkan fitur ini, buka pengaturan Player (menu: Edit > Project SettingsPengumpulan yang luas dari pengaturan yang memungkinkan Anda untuk mengkonfigurasi bagaimana Fisika, Audio, Jaringan, Grafik, Input dan banyak bidang lain dari jangkauan proyek Anda. More info
Lihat di Glossary
, kemudian pilih kategori Player). Kemudian arahkan ke panel XR Settings, pastikan kotak cemen yang dicentang, dan pilih opsi Virtual Reality Supported dari dropdown Single Pass.Stereo Rendering Method dropdown.

Selecting Single Pass rendering from the Players XR Settings panel
Memilih Single Pass rendering dari panel Pengaturan XR Pemain

Fitur rendering bawaan unity dan Aset Standar semua mendukung fitur ini. Namun, dibuat khusus ShadersProgram yang berjalan di GPU. More info
Lihat di Glossary
dan Shaders yang diunduh dari Asset StoreSebuah perpustakaan yang berkembang dari aset gratis dan komersial yang diciptakan oleh Unity dan anggota komunitas. Menawarkan berbagai aset, dari tekstur, model dan animasi ke seluruh contoh proyek, tutorial dan ekstensi Editor. More info
Lihat di Glossary
mungkin perlu dimodifikasi (misalnya, Anda mungkin perlu skala dan mengimbangi ruang layar berkoordinasi untuk mengakses setengah yang sesuai dari Tekstur Render dikemas) untuk menambahkan dukungan rendering Stereo Pass Tunggal.

Menambahkan dukungan rendering Stereo Pass Tunggal ke Shaders

Metode bantuan yang ada di UnityCG.cginc mendukung rendering Stereo Pass Tunggal. Apakah aplikasi Anda adalah XR atau tidak, Anda masih perlu melakukan transformasi pada vertices. Misalnya, ketika membuat jenis aplikasi, simpul memasuki tahap vertex shaderProgram yang berjalan pada setiap simpul model 3D ketika model sedang diberikan. More info
Lihat di Glossary
di ruang model dan keluar di ruang klip. Naungan vertex harus mengkoordinasikan ruang klip output. Set vertik yang dipengaruhi oleh naungan biasanya dimulai di ruang model sebelum naungan simpul mengubahnya menjadi ruang klip. Namun, untuk vertices ini untuk tiba di ruang klip, naungan simpul pertama mengubahnya menjadi ruang dunia dan kemudian ke ruang viewportArea tampilan pengguna aplikasi di layar mereka.
Lihat di Glossary
.

Dalam kasus XR, ada beberapa karik pandangan: satu untuk mata kiri dan kanan. Anda dapat menggunakan metode built-in UnityWorldToClipPos untuk memastikan bahwa Unity perlu dipertimbangkan apakah perhitungan memerlukan penanganan beberapa karik tampilan. Jika Anda menggunakan metodeUnityWorldToClipPos, naungan secara otomatis melakukan perhitungan transformasi dengan benar, terlepas dari platform aplikasi Anda berjalan.

UnityCG.cginc juga mengandung metode bantuan berikut untuk membantu Anda dengan otorsi stereoscopic Login

Property Parameters Description
UnityStereoScreenSpaceUVAdjust(uv, sb) uv: koordinasi tekstur UV. Baik float2 untuk UV standar atau float4 untuk sepasang dikemas dua UV.
sb: A float4 mengandung skala 2D dan bias 2D yang digunakan untuk UV, dengan skala xy dan bias dalam zw.
Jika UNITY_SINGLE_PASS_STEREO didefinisikan, ini mengembalikan hasil menerapkan skala dan bias dalam sb ke koordinat tekstur dalam uv. Jika tidak, ini mengembalikan koordinat tekstur yang tidak dimodifikasi. Gunakan ini untuk menerapkan skala per mata dan bias hanya ketika dalam mode rendering Stereo Pass Tunggal.
UnityStereoTransformScreenSpaceTex(uv) uv: koordinasi tekstur UV. Baik float2 untuk UV standar atau float4 untuk sepasang dikemas dua UV. Jika UNITY_SINGLE_PASS_STEREO didefinisikan, ini mengembalikan hasil menerapkan skala mata saat ini dan bias ke koordinat tekstur dalam uv. Jika tidak, ini mengembalikan koordinat tekstur yang tidak terdaftar.
UnityStereoClamp(uv, sb) uv: koordinasi tekstur UV. Baik float2 untuk UV standar atau float4 untuk sepasang dikemas dua UV.
sb: A float4 mengandung skala 2D dan bias 2D yang digunakan untuk UV, dengan skala xy dan bias dalam zw.
Jika UNITY_SINGLE_PASS_STEREO didefinisikan, ini mengembalikan hasil menerapkan klem ke nilai x, menggunakan lebar, dan bias, disediakan oleh sb, ke koordinat tekstur dalam uv. Jika tidak mengembalikan koordinasi tekstur yang tidak dimodifikasi. Gunakan ini untuk menerapkan penjepit per mata dalam mode rendering Stereo Pass Tunggal untuk menghindari pendarahan warna antara mata.

Shaders mengekspos variabel in-built konstan 'unity_StereoEyeIndex', sehingga Unity dapat melakukan perhitungan tergantung mata. Nilai unity_StereoEyeIndex adalah 0 untuk rendering mata kiri, dan 1 untuk rendering mata kanan.

Berikut adalah contoh dari UnityCG.cginc, menunjukkan bagaimana Anda dapat menggunakanunity_StereoEyeIndex untuk memodifikasi koordinat ruang layar:

float2 TransformStereoScreenSpaceTex(float2 uv, float w)
{
    float4 scaleOffset = unity_StereoScaleOffset[unity_StereoEyeIndex];
    return uv.xy * scaleOffset.xy + scaleOffset.zw * w;
}

Dalam kebanyakan kasus, Anda tidak perlu memodifikasi Shaders Anda. Namun, ada situasi di mana Anda mungkin perlu mencicipi Login Sitemap sebagai sumber untuk rendering Stereo Pass Tunggal (misalnya, jika Anda membuat biji-bijian film layar penuh atau efek kebisingan di mana gambar sumber harus sama untuk kedua mata, daripada dikemas menjadi Gambar stereoscopic). Dalam situasi seperti itu, gunakan ComputeNonStereoScreenPos() bukan ComputeScreenPos() untuk menghitung lokasi dari Tekstur sumber penuh.

Efek pasca proses

Efek pasca proses memerlukan beberapa pekerjaan tambahan untuk mendukung rendering Stereo Pass Tunggal. Setiap efek 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
berjalan sekali pada Tekstur Render dikemas (yang mengandung gambar mata kiri dan kanan), tetapi menerapkan semua perintah menggambar yang berjalan selama proses pasca dua kali: setelah setengah mata kiri dari tujuan Render Tekstur, dan sekali ke paruh mata kanan.

Efek pasca proses tidak secara otomatis mendeteksi rendering Stereo Pass Tunggal, sehingga Anda perlu menyesuaikan pembacaan Tekstur Render Stereo dikemas sehingga mereka hanya membaca dari sisi yang benar untuk mata yang diberikan. Ada dua cara untuk melakukan ini tergantung pada bagaimana efek pasca-olahan Anda diberikan:

Tanpa penyesuaian yang disebutkan di atas, setiap perintah menggambar membaca seluruh sumber Render Tekstur (mengamati pandangan mata kiri dan kanan), dan output seluruh pasangan gambar ke sisi mata kiri dan kanan dari output Render Tekstur, menghasilkan duplikasi yang salah dari gambar sumber di setiap mata.

Ini terjadi ketika menggunakan Graphics.Blit atau poligon layar penuh dengan peta Tekstur untuk menarik setiap efek pasca-proses. Kedua metode merujuk seluruh output dari efek pasca-olahan sebelumnya di rantai. Ketika mengacu pada area dalam Tekstur stereo Render yang dikemas, mereka referensi seluruh dikemas Tekstur Render bukan hanya setengah yang relevan.

Grafik.Blit()

Efek pasca proses rendered dengan Blit() tidak secara otomatis merujuk bagian yang benar dari tekstur stereo Render dikemas. Secara default, mereka merujuk pada seluruh tekstur. Ini benar-benar meregangkan efek pasca-olahan di kedua mata.

Untuk Single Pass Stereo rendering menggunakan Blit(), sampel tekstur di Shaders memiliki variabel auto-calculated tambahan yang mengacu pada paruh yang benar dari Tekstur stereo Render dikemas, tergantung pada mata yang ditarik. Variabel berisi nilai skala dan offset yang memungkinkan Anda untuk mengubah koordinasi target Anda ke lokasi yang benar.

Untuk mengakses variabel ini, deklarasikan half4 di Shader Anda dengan nama yang sama seperti sampler Anda, dan tambahkan suffix _ST (lihat di bawah ini untuk contoh kode ini). Untuk menyesuaikan koordinat UV, masukkan variabel _ST Anda ke scaleAndOffset dan gunakan UnityStereoScreenSpaceUVAdjust(uv, scaleAndOffset). Metode ini mengkompilasi untuk tidak ada di gedung Stereo non-Single Pass, yang berarti bahwa naungan dimodifikasi untuk mendukung mode ini masih kompatibel dengan build Stereo non-Single Pass.

Contoh berikut menunjukkan apa yang perlu Anda ubah dalam kode naungan fragmen Anda untuk mendukung rendering Stereo Pass Tunggal.

Tanpa rendering stereo:

uniform sampler2D _MainTex;

fixed4 frag (v2f_img i) : SV_Target
{   
    fixed4 myTex = tex2D(_MainTex, i.uv);
    ...
}

Dengan rendering stereo:

uniform sampler2D _MainTex;
half4 _MainTex_ST;

fixed4 frag (v2f_img i) : SV_Target
{   
    fixed4 myTex = tex2D(_MainTex, UnityStereoScreenSpaceUVAdjust(i.uv, _MainTex_ST));
    ...
}

Gambar berbasis Mesh

Mengirimkan efek pasca-olahan menggunakan jala (misalnya, dengan menggambar quadrilateral dalam mode segera menggunakan API documentation) juga perlu menyesuaikan koordinat UV pada Tekstur target ketika membuat setiap mata. Untuk menyesuaikan koordinat Anda dalam keadaan ini, gunakan UnityStereoTransformScreenSpaceTex(uv). Metode ini dengan benar menyesuaikan untuk dikemas Tekstur stereo Render dalam mode rendering Stereo Tunggal, dan secara otomatis mengkompilasi untuk Tekstur Render yang tidak dikemas jika Anda telah menonaktifkan mode rendering Stereo Tunggal Pass. Namun, jika Anda berniat menggunakan Shader baik untuk Tekstur Render dikemas dan dikemas dalam mode yang sama, Anda perlu memiliki dua Shader terpisah.

Efek ruang layar

Efek ruang layar adalah efek visual yang ditarik atas gambar yang telah ditentukan sebelumnya. Contoh efek ruang layar termasuk ambient occlusionMetode perkiraan berapa banyak cahaya ambient (cahaya tidak datang dari arah tertentu) dapat memukul titik di permukaan.
Lihat di Glossary
, kedalaman lapanganEfek pasca proses yang mensimulasikan sifat fokus dari lensa kamera. More info
Lihat di Glossary
, dan bloomEfek pasca proses yang digunakan untuk mereproduksi artefak pencitraan kamera dunia nyata. Efek ini menghasilkan fringes dari cahaya yang meluas dari perbatasan daerah terang dalam gambar, berkontribusi pada ilusi cahaya yang sangat terang membanjiri kamera atau eye capturing adegan.
Lihat di Glossary
.

Misalnya, bayangkan efek ruang layar yang membutuhkan gambar yang akan ditarik di atas layar (mungkin Anda menggambar beberapa jenis kotoran yang ditempatkan di layar). Alih-alih menerapkan efek atas seluruh tampilan output, yang akan meregangkan gambar kotoran di kedua mata, Anda perlu menerapkannya dua kali: sekali untuk setiap mata. Dalam kasus seperti ini, Anda perlu mengonversi dari menggunakan koordinat tekstur yang merujuk seluruh Tekstur Render dikemas, untuk mengkoordinasikan referensi setiap mata.

Contoh kode berikut menunjukkan Surface ShaderCara merampingkan naungan menulis untuk Pipeline Render Built-in. More info
Lihat di Glossary
yang mengulangi Tekstur input (disebut _Detail) 8 x 6 kali pada gambar output. Dalam contoh kedua, naungan mengubah koordinasi tujuan dalam mode Stereo Pass Tunggal untuk merujuk ke bagian dari Tekstur output yang mewakili mata saat ini diberikan.

Sitemap Tekstur Detail tanpa dukungan Stereo Single-PassExample 1: Detail Texture with no Single-Pass Stereo support

void surf(Input IN, inout SurfaceOutput o) 
{
    o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;
    float2 screenUV = IN.screenPos.xy / IN.screenPos.w;
    screenUV *= float2(8,6);
    o.Albedo *= tex2D(_Detail, screenUV).rgb * 2;
}

Sitemap Tekstur Detail dengan dukungan Stereo Single-PassExample 2: Detail Texture with Single-Pass Stereo support

void surf(Input IN, inout SurfaceOutput o) 
{
    o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;
    float2 screenUV = IN.screenPos.xy / IN.screenPos.w;
    #if UNITY_SINGLE_PASS_STEREO
    // If Single-Pass Stereo mode is active, transform the
    // coordinates to get the correct output UV for the current eye.
    float4 scaleOffset = unity_StereoScaleOffset[unity_StereoEyeIndex];
    screenUV = (screenUV - scaleOffset.zw) / scaleOffset.xy;
    #endif
    screenUV *= float2(8,6);
    o.Albedo *= tex2D(_Detail, screenUV).rgb * 2;
}

  • 2018–08–16 Sitemap
  • Baru di Unity NewIn20173
API Reference
Login Login