Menggunakan Kamera Fisik
Trik Kamera

Kamera dan tekstur kedalaman

Sebuah KameraKomponen yang menciptakan gambar sudut pandang tertentu di tempat kejadian Anda. Output ditarik ke layar atau ditangkap sebagai tekstur. More info
Lihat di Glossary
dapat menghasilkan kedalaman, kedalaman + normal, atau tekstur vektor gerak. Ini adalah tekstur G-buffer minimalis yang dapat digunakan untuk 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
atau untuk menerapkan model pencahayaan kustom (misalnya pra-pass cahaya).

Ini sebagian besar digunakan oleh efek; misalnya, efek pasca proses sering menggunakan informasi kedalaman.

Nilai piksel dalam rentang tekstur kedalaman antara 0 dan 1, dengan distribusi non-linear. Presisi biasanya 32 atau 16 bit, tergantung pada konfigurasi dan platform yang digunakan. Ketika membaca dari Tekstur Kedalaman, nilai presisi tinggi dalam kisaran antara 0 dan 1 dikembalikan. Jika Anda perlu mendapatkan jarak dari Kamera, atau nilai 0–1 linier, menghitung bahwa secara manual menggunakan makro pembantu (lihat di bawah).

Tekstur kedalaman didukung pada sebagian besar perangkat keras modern dan API grafis. Persyaratan khusus tercantum di bawah ini:

  • Direct3D 11+ (Windows), OpenGL 3+ (Mac/Linux), OpenGL ES 3.0+ (iOS), Metal (iOS), dan konsol populer mendukung tekstur kedalaman.
  • OpenGL ES 2.0 (Android) membutuhkan ekstensi GL_OES_depth_texture untuk hadir.
  • WebGLLogin API yang membuat grafis 2D dan 3D di browser web. Opsi build Unity WebGL memungkinkan Unity untuk mempublikasikan konten sebagai program JavaScript yang menggunakan teknologi HTML5 dan WebGL rendering API untuk menjalankan konten Unity di browser web. More info
    Lihat di Glossary
    memerlukan ekstensi WebGL_depth_texture.

Mode Tekstur kedalaman kamera dapat diaktifkan menggunakan variabel Kamera.depthTextureMode dari script. Hal ini juga memungkinkan untuk membangun tekstur yang sama sendiri, menggunakan fitur Penggantian Shader.

Ada tiga mode tekstur kedalaman yang mungkin:

  • DepthTextureMode.Depth: tekstur kedalaman.
  • DepthTextureMode.DepthNormals: kedalaman dan ruang pandangan normal dikemas menjadi satu tekstur. Sitemap
  • DepthTextureMode.MotionVectors: gerakan ruang layar per-piksel dari setiap layar texel untuk bingkai saat ini. Dikemas ke dalam tekstur RG16.

Ini adalah bendera, sehingga dimungkinkan untuk menentukan kombinasi tekstur di atas.

Login Tekstur kedalaman

Ini membangun tekstur kedalaman berukuran layar.

Tekstur kedalaman dirender menggunakan shaderProgram yang berjalan di GPU. More info
Lihat di Glossary
yang sama digunakan untuk rendering kasang (tipe passShadowCaster). Jadi dengan ekstensi, jika naungan tidak mendukung pengecoran bayangan (yaitu tidak ada kasang yang dilewati di naungan atau salah satu fallback), maka benda-benda yang menggunakan naungan itu tidak akan muncul dalam tekstur kedalaman.

  • Buat naungan Anda fallback untuk beberapa naungan lain yang memiliki umpan balik bayangan, atau
  • Jika Anda menggunakan permukaan naunganCara merampingkan naungan menulis untuk Pipeline Render Built-in. More info
    Lihat di Glossary
    , tambahkan arahan addshadow akan membuat mereka menghasilkan bayangan yang lewat juga.

Perhatikan bahwa hanya objek “opaque” (yang memiliki bahan dan naungan mereka setup untuk menggunakan render queue <= 2500) diberikan ke dalam tekstur kedalaman.

KedalamanTextureMode.DepthNormals tekstur

Ini membangun tekstur 32 bit berukuran layar (8 bit / saluran), di mana ruang tampilan normal dikodekan ke saluran R & G, dan kedalaman dikodekan dalam saluran B & A. Normal dikodekan menggunakan proyeksi Stereografis, dan kedalaman adalah nilai 16 bit dikemas menjadi dua saluran 8 bit.

UnityCG.cginc termasuk file memiliki fungsi helper DecodeDepthNormal untuk menurunkan kedalaman dan normal dari nilai pixelUnit terkecil dalam gambar komputer. Ukuran piksel tergantung pada resolusi layar Anda. Pencahayaan pixel dihitung pada setiap piksel layar. More info
Lihat di Glossary
yang dikodekan. Kedalaman pengembalian adalah dalam kisaran 0..1.

Sebagai contoh tentang cara menggunakan tekstur kedalaman dan normal, silakan merujuk ke Mengganti naungan pada runtime atau Ruang Layar Efek Gambar Occlusion Ambient.

KedalamanTextureMode.MotionVectors tekstur

Ini membangun tekstur RG16 (16-bit float/channel), di mana gerakan piksel ruang layar dikodekan ke saluran R & G. Gerakan pixel dikodekan dalam ruang UV layar.

Ketika pengambilan dari gerakan tekstur ini dari pixel yang dikodekan dikembalikan dalam rance dari -1...1. Ini akan menjadi UV offset dari bingkai terakhir ke bingkai saat ini.

Tips & Trik

Inspektur kamera menunjukkan ketika kamera rendering kedalaman atau tekstur abnormal kedalaman.

Cara tekstur kedalaman yang diminta dari Kamera (Kamera.depthTextureMode) mungkin berarti bahwa setelah Anda menonaktifkan efek yang diperlukan, Kamera mungkin masih terus membuat mereka. Jika ada beberapa efek yang ada pada kamera, di mana masing-masing dari mereka membutuhkan tekstur kedalaman, tidak ada cara yang baik untuk secara otomatis menonaktifkan rendering tekstur kedalaman jika Anda menonaktifkan efek individu.

Ketika menerapkan bayangan kompleks atau Efek Gambar, menjaga Perbedaan rendering Antara Platform dalam pikiran. Secara khusus, menggunakan tekstur mendalam dalam Efek Gambar sering membutuhkan penanganan khusus pada Direct3D + Anti-Aliasing.

Dalam beberapa kasus, tekstur kedalaman mungkin datang langsung dari penyangga Z asli. Jika Anda melihat artefak dalam tekstur mendalam Anda, pastikan bahwa naungan yang menggunakannya do not menulis ke buffer Z (menggunakan ZWrite Off).

variabel Shader

Tekstur kedalaman tersedia untuk pengambilan sampel dalam naungan sebagai sifat naungan global. Dengan menentukan sampler yang disebut _CameraDepthTexture, Anda akan dapat mencicipi tekstur kedalaman utama untuk kamera.

_CameraDepthTexture selalu mengacu pada tekstur kedalaman primer kamera. Dengan kontras, Anda dapat menggunakan _LastCameraDepthTexture untuk merujuk pada tekstur kedalaman terakhir yang diberikan oleh kamera apa pun. Ini bisa berguna misalnya jika Anda membuat tekstur kedalaman setengah resolusi di skrip menggunakan kamera sekunder dan ingin membuatnya tersedia untuk naungan pasca proses.

Tekstur vektor gerak (ketika diaktifkan) tersedia di Shaders sebagai properti Shader global. Dengan menentukan sampler yang disebut '_CameraMotionVectorsTexture' Anda dapat mencicipi Tekstur untuk kamera rendering keriting.

Di bawah kap

Tekstur kedalaman dapat datang langsung dari depth bufferSebuah toko memori yang memegang kedalaman nilai z setiap pixel dalam gambar, di mana nilai z adalah kedalaman untuk setiap piksel yang diberikan dari pesawat proyeksi. More info
Lihat di Glossary
yang sebenarnya, atau diberikan dalam lulus terpisah, tergantung pada jalur rendering yang digunakan dan perangkat keras. Biasanya ketika menggunakan Deferred Shading atau Legacy Deferred Lighting rendering pathsTeknik yang menggunakan pipa render untuk membuat grafik. Memilih jalur rendering yang berbeda mempengaruhi bagaimana pencahayaan dan pembentukan dihitung. Beberapa jalur rendering lebih cocok untuk berbagai platform dan perangkat keras daripada yang lain. More info
Lihat di Glossary
, tekstur kedalaman datang "gratis" karena mereka adalah produk dari G-buffer rendering anyway.

Ketika tekstur KedalamanNormal diberikan dalam lulus terpisah, ini dilakukan melalui Penggantian Shader. Oleh karena itu penting untuk memiliki tag "RenderType" yang benar di naungan Anda.

Ketika diaktifkan, tekstur GerakVectors selalu berasal dari lulus render tambahan. Unity akan membuat bergerak GameObjectsObjek 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
menjadi penyangga ini, dan membangun gerakan mereka dari bingkai terakhir ke bingkai saat ini.

Menggunakan Kamera Fisik
Trik Kamera