Mengapa peta Bump, Normal, dan Displacement tidak bisa dikoreksi?

9

Jadi saya mencoba untuk membungkus kepala saya dari sudut pandang yang cukup teknis.

Saat Anda menambahkan peta Bump atau Normal atau Pemindahan di shader Anda, peta itu seharusnya tidak dikoreksi gamma. Tapi teksturnya harus difus. Tapi kenapa?

Ketika Anda menyimpan file dalam 8bit (atau 16bit Integer) dengan format seperti JPEG, PNG atau TIFF, mereka mendapatkan gamma 0,4545 (1 / 2.2) yang dibakar. Jadi kamera menangkap cahaya dari dunia nyata (yaitu linier) dan ketika menyimpan foto sebagai JPEG, nilai gamma 1 / 2.2 ditambahkan, sebagai cara untuk mengompresi informasi menjadi 8bit, dan kemudian ketika Anda melihat gambar pada monitor yang menambahkan gamma 2.2 yang membuat luminance linier lagi.

Jadi ketika menggunakan tekstur difus (seperti foto) Anda perlu "menghapus" gamma 1 / 2.2 untuk membuatnya linier (disebut linierisasi) jadi sekarang teksturnya terlihat lebih gelap tetapi nilai-nilai ini benar dari sudut pandang matematika sehingga pemberi render akan buat perhitungan yang benar. Catatan: perangkat lunak menggunakan gamma tampilan 2.2 untuk memastikan tekstur terlihat benar. Itu hanya untuk perhitungan internal yang mereka linierisasi. Tetapi ketika saya membuat peta Bump di Photoshop dan menyimpannya sebagai JPG atau PNG maka gamma 1 / 2.2 itu dibakar ke dalam gambar itu juga, jadi mengapa peta Bump ini tidak perlu dilinearisasi juga?

Jika saya memuat peta Bump dalam 3ds Max dengan input gamma 2.2 seperti yang akan dilakukan dengan tekstur Diffuse, difus terlihat benar tetapi benjolan terlihat salah, jadi saya harus mengatur input gamma ke 1.0 untuk benjolan secara berurutan untuk membuatnya terlihat benar, tetapi seperti yang saya katakan: mengapa, kedua file gambar memiliki 1 / 2.2 gamma terbakar, kan?

Kristoffer Helander
sumber

Jawaban:

5

Fakta bahwa foto disimpan dalam ruang gamma tidak ada hubungannya dengan PNG atau JPEG, itu ada hubungannya dengan fakta bahwa itu adalah foto.

Kamera mendeteksi intensitas 50% tetapi akan menyimpannya sebagai 187 bukan 127, karena itu lebih efisien untuk menyimpan informasi warna yang penting bagi mata manusia ketika Anda hanya memiliki 256 kemungkinan nilai yang berbeda. Dan begitu juga Photoshop jika Anda mengatakannya.

Untuk peta normal atau perpindahan, Anda tidak memiliki kebutuhan ini sehingga tidak ada alasan untuk menggunakan ruang gamma untuk mereka (menggunakan gamma untuk mereka sebenarnya akan menjadi kesalahan, karena itu akan mempengaruhi bagaimana presisi didistribusikan). Jadi ketika Anda mendekode tekstur normal atau tekstur perpindahan, Anda tidak perlu menerapkan gamma.

Jika peta normal dikodekan dalam ruang yang berbeda, seperti halnya G-Buffer misalnya , maka Anda harus menerapkan koreksi yang sesuai.

Julien Guertault
sumber
Bagaimana Anda memberi tahu Photoshop untuk menyimpan gambar dengan gamma yang dipanggang seperti yang Anda katakan di atas: "Dan begitu juga Photoshop jika Anda mengatakannya."
Kristoffer Helander
Ini sama sekali tidak menjelaskan "mengapa". Itu hanya menegaskan "apa".
user1118321
@ user1118321: Saya percaya begitu. Saya menambahkan penekanan dalam upaya untuk membuatnya lebih jelas.
Julien Guertault
Yah, benar tetapi masih belum benar-benar menjelaskan alasannya. Saya akui saya memiliki masalah yang sama, saya hanya menyebutkan kurangnya manfaat atau kerugian yang dilakukan oleh kompresi tersebut. Tidak perlu tetapi mengapa adalah bahwa data gambar aneh karena indera manusia sedangkan penalaran spasial kami lebih linier di alam (sejauh aplikasi 3D yang bersangkutan)
joojaa
3

JPG, PNG atau format gambar 8 bit lainnya secara intrinsik tidak memiliki 1 / 2.2 gamma yang terkait dengannya. Mereka hanya menyimpan nilai dari 0-255. Bagaimana data ditafsirkan tergantung pada perangkat lunak yang membaca dan menulis file-file itu. Fakta yang menarik adalah bahwa sebagian besar perangkat lunak pengedit gambar menggunakan ruang warna gamma secara default. Semua kuas, efek, filter, dan bahkan color picker semuanya beroperasi dalam ruang gamma. Lihat saja nuansa abu-abu pada color picker di Photoshop. Mereka tidak mengikuti distribusi linier.

Konsekuensinya adalah Photoshop tidak melakukan konversi antara gamma dan ruang warna linier saat membuka atau menyimpan gambar (secara default), hanya saat menampilkannya. Itu berarti Anda dapat menggunakannya dengan mudah untuk membuat atau mengedit data linear seperti peta ketinggian seperti halnya Anda dapat mengedit foto. Peta benjolan tidak terlihat dengan benar ketika dimuat dengan koreksi gamma, karena tidak disimpan dengannya.

Quinchilion
sumber
Berikut adalah video YouTube juga menjelaskan bahwa nilai disimpan dalam sebuah gambar adalah 1 / 2.2 (tapi dia menyederhanakan dan hanya mengatakan bahwa itu adalah akar kuadrat, ada disclaimer dari yang dalam teks.) Warna Komputer Patah - minutephysics Link
Kristoffer Helander
@ KristofferHelander Ya, tapi dia bilang itu hanya kamera yang menyimpan nilai sebagai akar kuadrat dan hanya tampilan yang mengkuadratkannya kembali. Perangkat lunak pengedit gambar seperti Photoshop kemudian buka dan simpan gambar tanpa konversi, yang menghasilkan artefak yang ditampilkan dalam video ketika Anda mencoba untuk memadukan warna.
Quinchilion
Koreksi saya jika saya salah dalam hal ini. Ketika saya menggambar gradient ramp di Photoshop yang terlihat linier di layar, nilai-nilai di ramp itu sebenarnya linear. Tetapi Photoshop menambahkan gamma tampilan 1 / 2.2 karena monitor menambahkan gamma 2.2, sehingga nilai-nilai piksel gambar linier dan mereka juga terlihat linier. Tapi gamma 1 / 2.2 ini hanyalah gamma penglihatan yang digunakan Photoshop untuk menampilkan gambar, itu tidak dimasukkan ke dalam gambar, dan oleh karena itu tidak ada koreksi gamma ke gambar perlu dilakukan dalam perangkat lunak 3D, (gunakan gamma 1.0) karena nilai sudah linear?
Kristoffer Helander
@KristofferHelander goo.gl/yqkeUP Gradien bawah mewakili kecerahan fisik. Jika Photoshop menerapkan gamma 1 / 2.2 untuk menggambar gradien atau menampilkan gambar, Anda akan melihat gradien bawah. Alih-alih, Anda melihat yang teratas, yang secara kebetulan tampak linier, tetapi tidak. Ini juga tidak akan berfungsi untuk melihat foto. Kamera menerapkan 1 / 2.2 saat menyimpan foto, maka Photoshop akan menerapkan 1 / 2.2 lainnya, tetapi layar hanya menambahkan gamma 2,2 sekali. Itu tidak akan terlihat benar.
Quinchilion
Jika saya mengisi dokumen di Photoshop setengah sisi merah (255,0,0) dan setengah lainnya dengan hijau (0,255,0) dan kemudian menggunakan Gaussian blur pada itu, gradien yang dihasilkan menjadi kecoklatan daripada kuning di tengah seperti yang ditunjukkan dalam video yang saya posting. Mengapa demikian? Jika piksel dalam gambar linier, mengapa matematika dikacaukan? Saya tidak mengerti bagaimana peta perpindahan yang dicat di Photoshop adalah linier dan bagus untuk rendering tetapi pada saat yang sama kaburnya piksel kacau dengan gamma yang salah dan warna menjadi gelap dan kecoklatan?
Kristoffer Helander
3

pengantar

Tergantung bagaimana Anda membuat peta! Pertimbangkan yang berikut dan biarkan meresap sebentar sebelum Anda melanjutkan:

  1. Gambar ditampilkan dengan koreksi gamma untuk kepentingan mata Anda
  2. Data masih berupa data saja. Koreksi gamma adalah untuk bagian tampilan bukan bagian data.

Sekarang peta benjolan cukup sulit untuk menggambar dengan aplikasi cat. Karena sulit untuk melihat bahkan jika Anda benar linier. Jadi Anda akhirnya menggunakan hal-hal seperti melihat nilai. Sekarang inilah tangkapannya:

  • Jika Anda memutuskan bahwa 128 adalah setengah dari intensitas Anda maka itu adalah kenyataan. Karena itulah penyandian Anda ke dalam aliran data. Data adalah apa yang Anda interpretasikan karena tidak dimaksudkan untuk mata manusia dan monitor. Siapa yang peduli dengan apa yang ditunjukkan oleh monitor sebagai nilai pada cara Anda menginterpretasikan data.

Membuat peta benjolan / perpindahan

Ok, jadi sekarang saya telah menjelaskan bahwa data tersebut sesuai dengan interpretasi. Tetapi mengapa Anda menafsirkan data sebagai linear? Karena dengan begitu Anda dapat mendesain profil sisi Anda dengan lebih baik. Lihat apa yang dapat Anda lakukan adalah memikirkan opacity 100% dari kuas Anda sebagai tinggi target yang ingin Anda ukir atau lapiskan. Anda kemudian dapat menggunakan alat kurva untuk merancang bentuk kuas perangko Anda (karena Anda pikir datanya linier).

masukkan deskripsi gambar di sini

Gambar 1 : Cap suction cup.

Sekarang jika Anda melakukan sesuatu seperti ini maka gambar Anda linear meskipun apa yang dikatakan semua orang kepada Anda. Anda telah memutuskan untuk membuang aturan gambar yang mengatakan sebaliknya. Dan itulah mengapa gambar itu linier , penulis memilih untuk itu menjadi linier sehingga lebih mudah untuk dikerjakan.

masukkan deskripsi gambar di sini

Gambar 2 : Gambar yang sama dipindahkan dan ditafsirkan linier (catatan saya menskalakan ketinggian sedikit agar sesuai dengan ukuran bb default saya), berfungsi sebagaimana dimaksud.

Secara teknis linear lebih baik.

Peta sintetis tidak memiliki manfaat mengompresi nilai-nilai tertentu dengan mengorbankan orang lain. Linear secara inheren lebih baik karena penyebaran benjolan Anda lebih baik seperti itu. Itulah sebabnya Anda akan membuang-buang sumber daya untuk mengkodekannya dengan cara yang dikoreksi gamma.

Kedua gambar tidak perlu menentukan ruang warna apa itu. Hanya saja editor gambar akan menganggap itu disandikan sRGB. Anda tidak memiliki alasan untuk melakukan interpretasi yang sama, tidak ada info yang berarti: "Tidak ada yang peduli untuk menuliskan apa yang mereka pikirkan". Jadi mungkin intinya harus dibuat Anda harus menandainya linear. Tapi ini masalahnya ... komputer Anda tidak datang dengan profil linier yang mudah diakses.

Bagaimana dengan Photoshop dan blur?

Di sinilah rumit. Photoshop mencoba melakukan banyak pekerjaan untuk memastikan Anda tidak perlu tahu apa-apa tentang hal ini. Dan di sinilah Anda menembak diri sendiri di kaki. Se Photoshop tidak dimaksudkan untuk membuat tekstur, itu dimaksudkan untuk mengedit gambar bukan data acak. Jadi karena keburaman pada gambar adalah linier dan nonlinier yang berbeda, ia tidak akan bekerja untuk data yang salah.

Tetapi Anda dapat melakukan salah satu dari 2 hal untuk memperbaikinya:

  1. Nonaktifkan koreksi gamma blur
  2. atur ruang kerja Anda ke profil linier

Kesimpulan

Alasan Anda mengalami kesulitan dengan ini adalah

  1. Anda tidak tahu apa yang dipikirkan orang lain, Anda tidak tahu apakah mereka harus dikoreksi gamma atau tidak.
  2. Anda menggunakan aplikasi yang memperlakukan gambar sebagai gambar

Poin satu sangat membingungkan. Saya hanya tahu bahwa SEMUA peta benjolan dan perpindahan saya sebenarnya linear. Tapi saya tidak tahu apa peta Anda. Kemungkinannya adalah linear karena hampir secara universal dipahami bahwa data tersebut linear. Bahkan orang-orang yang tidak tahu tentang gamma cenderung melakukannya linier untuk benjolan / perpindahan karena beberapa alasan (karena mudah dan itulah yang Anda pikirkan gambar sampai seseorang memberitahu Anda sebaliknya).

joojaa
sumber
Terima kasih atas masukan Anda - wow! :) Saya akan melihat ini ketika saya mendapatkan lebih banyak waktu luang. Saya akan membalas Anda, terima kasih!
Kristoffer Helander
Even people who do not know about gamma tend to do it linear for bump/displacement for some reasonMungkin karena peta-peta itu dihasilkan.
Tara
3

Sebenarnya, jika benjolan atau peta perpindahan Anda disimpan dengan koreksi gamma 0,45 itu, itu salah. Peta-peta ini mengandung informasi geometris daripada warna, dan dengan demikian, harus disandikan secara linear.

Untuk masalah terkait dan perbaikan untuk Adobe Photoshop, lihat dek slide ini: https://docs.google.com/presentation/d/1vS5nAAnXbZ8Pt6-dXxy-xEXDkjfjXTmNnthNGccorl0/edit#slide=id.g14b3e28660_0_8

IneQuation
sumber
Hal ini terutama berlaku untuk peta normal jika Anda mengharapkan panjang vektor menjadi 1.
PaulHK