Ruang warna
Tekstur Gamma dengan rendering linier

Aliran kerja Linear atau gamma

Editor Unity menawarkan alur kerja linier dan gamma. Aliran kerja linier memiliki penyeberangan ruang warna di mana TexturesGambar yang digunakan ketika membuat elemen GameObject, Sprite, atau UI. Tekstur sering diterapkan pada permukaan mesh untuk memberikan detail visual. More info
Lihat di Glossary
yang diberi wewenang di ruang warna gamma dapat dengan benar dan tepat dirender di ruang warna linier. Lihat dokumentasi tentang Gambaran keseluruhan rendering linier untuk informasi lebih lanjut tentang ruang warna gamma dan linier.

Untuk membaca lebih lanjut, lihat dokumentasi tentang:

Tekstur cenderung disimpan di ruang warna gamma, sementara Shaders mengharapkan ruang warna linier. Seperti itu, ketika Tekstur sampel di Shaders, nilai berbasis gamma menyebabkan hasil yang tidak akurat. Untuk mengatasi ini, Anda dapat mengatur Unity untuk menggunakan sampler RGB untuk menyeberang dari gamma ke pengambilan sampel linier. Ini memastikan alur kerja linier dengan semua input dan output dari ShaderProgram yang berjalan di GPU. More info
Lihat di Glossary
di ruang warna yang benar, menghasilkan hasil yang benar.

Untuk menentukan alur kerja gamma atau linier, pergi ke 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, arahkan ke Other Settings, buka bagian Rendering, dan ubah Color Space ke Linear atau Gamma, tergantung pada preferensi Anda.

Player settings showing the Color Space setting
Pengaturan pemain menunjukkan pengaturan ruang warna

Aliran kerja ruang warna Gamma

Meskipun alur kerja linier memastikan rendering yang lebih tepat, kadang-kadang Anda mungkin ingin alur kerja gamma (misalnya, pada beberapa platform perangkat keras hanya mendukung format gamma).

Untuk melakukan ini, set Color Space ke Gamma dalam pengaturan Player (menu: Edit > Project Settings, kemudian pilih kategori Player). Dengan opsi ini dipilih, pipa rendering menggunakan semua warna dan tekstur di ruang warna gamma di mana mereka disimpan - tekstur tidak memiliki koreksi gamma dihapus dari mereka ketika mereka digunakan di Shader.

Perhatikan bahwa Anda dapat memilih untuk memotong sampling sRGB dalam mode Color Space: Gamma dengan memeriksa kotak cemen di sRGB (Color Texture) untuk Tekstur.Jendela inspektur for the Texture.

Note: Meskipun nilai-nilai ini berada di ruang gamma, semua perhitungan Shader Editor Unity masih memperlakukan masukan mereka seolah-olah mereka berada di ruang linier. Untuk memastikan hasil akhir yang dapat diterima, Editor membuat penyesuaian untuk menangani format yang tidak cocok ketika menulis output Shader ke bingkaibuffer dan tidak menerapkan koreksi gamma untuk hasil akhir.

Aliran kerja ruang warna linier

Bekerja di ruang warna linier memberikan rendering yang lebih akurat daripada bekerja di ruang warna gamma.

Untuk melakukan ini, set Color Space ke Linear dalam pengaturan Player (menu: Edit > Project Settings, kemudian pilih kategori Player).

Anda dapat bekerja di ruang warna linier jika Tekstur Anda dibuat di ruang warna linier atau gamma. Masukan Tekstur ruang warna Gamma ke program Shader ruang warna linier disediakan ke Shader dengan koreksi gamma dihapus dari mereka.

Note: Jendela Texture preview di Pengaturan Impor Tekstur menampilkan Tekstur menggunakan campuran gamma bahkan jika Anda bekerja di ruang warna linier.

Tekstur linier

  • Selecting Color Space: Linear mengasumsikan Anda Tekstur berada di ruang warna gamma. Unity menggunakan sampler sRGB GPU Anda secara default untuk crossover dari gamma ke ruang warna linier. Jika Tekstur Anda diberi wewenang di ruang warna linier, Anda perlu memotong pengambilan sampel sRGB. Lihat dokumentasi tentang Bekerja dengan Tekstur linier untuk informasi lebih lanjut.

Tekstur Gamma

Notes

Untuk warna, konversi ini diterapkan secara implicitly, karena Editor Unity telah mengkonversi nilai ke titik mengambang sebelum melewatinya ke GPU sebagai konstan. Ketika sampling Tekstur, GPU secara otomatis menghilangkan koreksi gamma, mengubah hasil ke ruang linier.

Input ini kemudian dilewatkan ke Shader, dengan perhitungan pencahayaan terjadi di ruang linier karena biasanya dilakukan. Ketika menulis nilai yang dihasilkan ke bingkaibuffer, itu baik lurus gamma-corrected atau kiri di ruang linier untuk koreksi gamma nanti - ini tergantung pada konfigurasi rendering saat ini. Misalnya, dalam rentang dinamis tinggi (HDR), hasil rendering tersisa di ruang linier dan gamma dikoreksi nanti.

Perbedaan antara ruang warna linier dan gamma

Saat menggunakan rendering linier, nilai input ke persamaan pencahayaan berbeda dengan ruang gamma. Ini berarti berbeda hasil tergantung pada ruang warna. Misalnya, permukaan mencolok ringan memiliki kurva respons yang berbeda, dan Efek Gambar berperilaku berbeda.

Light fall-off

Mati dari jarak dan pencahayaan berbasis normal berbeda dalam dua cara:

  • Ketika rendering dalam mode linier, koreksi gamma tambahan yang dilakukan membuat radius cahaya tampak lebih besar.

  • Tepi pencahayaan juga tampak lebih jelas. Ini lebih benar model intensitas pencahayaan jatuh di permukaan.

Left: Lighting a sphere in linear space. Right: Lighting a sphere in gamma space
Kiri: Pencahayaan bola di ruang linier. Sitemap Pencahayaan bidang di ruang gamma

Respons intensitas linier

Ketika Anda menggunakan rendering gamma, warna dan Tekstur yang disediakan kepada Shader sudah memiliki koreksi gamma yang diterapkan pada mereka. Ketika mereka digunakan dalam Shader, warna-warna bercahaya tinggi sebenarnya lebih cerah daripada mereka harus dibandingkan dengan pencahayaan linier. Ini berarti bahwa sebagai intensitas cahaya meningkat, permukaan menjadi lebih cerah dengan cara nonlinier. Ini mengarah ke pencahayaan yang bisa terlalu terang di banyak tempat. Ini juga dapat memberikan model dan scenesAdegan 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
rasa yang dicuci. Ketika Anda menggunakan rendering linier, respons dari permukaan tetap linier sebagai intensitas cahaya meningkat. Ini mengarah ke permukaan yang lebih realistis dan respons warna yang jauh lebih bagus dari permukaan.

Gambar Scan Kepala 3D Infinite di bawah ini menunjukkan intensitas cahaya yang berbeda pada model kepala manusia di bawah pencahayaan linier dan pencahayaan gamma.

Infinite 3D Head Scan by Lee Perry-Smith, licensed under a Creative Commons Attribution 3.0 Unported License (available from www.ir-ltd.net)
Infinite 3D Head Scan oleh Lee Perry-Smith, berlisensi di bawah Lisensi Creative Commons Attribution 3.0 Unported (tersedia dari www.ir-ltd.net)

Campuran linier dan gamma

Ketika dicampur ke dalam bingkaibuffer, campuran terjadi di ruang warna bingkaibuffer.

Ketika Anda menggunakan rendering ruang gamma, warna nonlinear dicampur bersama. Ini bukan cara yang benar secara matematika untuk mencampur warna, dan dapat memberikan hasil yang tak terduga, tetapi satu-satunya cara untuk melakukan campuran pada beberapa perangkat keras grafis.

Ketika Anda menggunakan rendering ruang linier, campuran terjadi di ruang warna linier: Ini benar secara matematika dan memberikan hasil yang tepat.

Gambar di bawah ini menunjukkan berbagai jenis campuran:

Top: Blending in linear color space produces expected blending results<br/>Bottom: Blending in gamma color space results in over-saturated and overly-bright blends
Top: Blending di ruang warna linier menghasilkan hasil campuran yang diharapkan
Bottom: Campuran dalam ruang warna gamma menghasilkan campuran yang lebih jenuh dan tegak
Ruang warna
Tekstur Gamma dengan rendering linier