Bersepeda melalui warna dengan kecerahan yang sama

8

Baik. Jadi saya memiliki permainan yang saya kerjakan dengan sekelompok partikel berwarna. Masing-masing dari mereka mendapatkan warna mereka sendiri tetapi mereka semua dekat dengan warna tertentu.

Untuk menjelaskan bahwa lebih baik saya menggunakan ruang warna HSV, dan saya memiliki variabel global yang bersepeda dari 0-360 (H) dan masing-masing partikel spesifik menambah atau mengurangi jumlah acak dari itu.

masukkan deskripsi gambar di sini Saya menggunakan HSV karena ini adalah cara termudah bagi saya untuk menelusuri warna karena Anda bisa mengubah H.

Ini terlihat sangat bagus dan semuanya, namun partikelnya seharusnya adalah cahaya murni yang diwarnai. Sekarang mereka semua adalah lingkaran yang diwarnai dengan tempat teduh, tetapi nanti saya mungkin menambahkan efek cahaya dan teknik naungan lainnya.

Masalahnya adalah bahwa tidak semua warna (saya tidak mengacaukan dengan H atau V) sama sejauh kecerahan mata kita, dan ini menyebabkan masalah. Misalnya ketika semuanya bernuansa biru hal-hal terlihat cukup gelap.

Jelas dalam shader saya harus mengubah warna-warna HSV ini menjadi warna RGB dan melakukan beberapa matematika saya dengan cepat melihat apa yang salah ... warna-warna tidak memiliki pencahayaan yang sama!

Seperti yang saya pahami, pencahayaan kira-kira (0.2126*color.r + 0.7152*color.g + 0.0722*color.b)itulah sebabnya semuanya mati.

Apakah cara mereka untuk mendapatkannya jadi saya masih bisa mendapatkan semua kroma yang berbeda (warna pada roda derajat) sambil mempertahankan pencahayaan yang tinggi? Mungkin saya harus bekerja dengan jenis warna yang berbeda daripada HSV, atau mungkin mereka adalah formula yang menemukan warna pada derajat x pada roda warna dengan pencahayaan y?

Terimakasih banyak!

J.Apakah
sumber
Sayangnya ada batasnya. Jika Anda melihat ruang warna yang perseptual-seragam seperti sistem warna Munsell, Anda akan melihat bahwa kuning terang memiliki nilai persepsi yang jauh lebih tinggi daripada biru kuat . Itu berarti jika Anda ingin menyimpan seragam dirasakan nilai / luminance, maka Anda bisa mendapatkan baik biru royal kaya dipasangkan dengan oker gelap di rona kuning, atau kuning cerah dengan pucat bayi biru. Apa pun cara Anda mengorbankan saturasi di suatu tempat di roda warna.
DMGregory
1
Seperti yang Anda catat, RGB dan HSL dirancang di sekitar warna layar yang mungkin dan tidak di sekitar mata manusia. Lihatlah HUSL dan HCL . Terkadang saya akan menggunakan L * a * b * juga.
amitp
@amitp ruang-ruang warna tampaknya cukup baru dan saya melihat beberapa perbedaan dalam bagaimana ruang warna mereka didefinisikan, dan bagaimana mereka dikonversi. Sumber mana yang paling bisa diandalkan untuk ini?
J.Doe
Saya naik bus, jadi saya lebih baik tidak menulis jawaban formal, tapi inilah yang ada di bawah masalah: Anda akan perlu menyelesaikan sistem persamaan di mana Anda memasukkan tiga variabel: Hue, Luminance dan Saturation. Jadi di sini Anda mencari Nilai tertentu, mengingat H dan S, yang memenuhi persyaratan memiliki pencahayaan tertentu. Tidak terlalu sulit. Tetapi Anda akan segera mengetahui bahwa beberapa warna tidak bisa semanis beberapa (coba cari warna biru seterang 100V kuning), jadi Anda mungkin ingin menjepit nilainya, untuk mendapatkan nilai yang dapat ditampilkan di layar.
Gustavo Maciel
Ya saya sudah mengerjakan itu. Saya mendapatkan formula rekursif yang sedang berjalan ... DAN yang tidak rekursif (itu tidak cukup berhasil).
J.

Jawaban:

2

HCY bisa lebih baik untuk kebutuhan Anda. Menurut halaman HSL dan HSV Wikipedia , masalah yang Anda hadapi dengan HSV - bahwa "V" yang sama dengan warna berbeda tidak sesuai dengan persepsi manusia - mirip dengan HSL, tetapi HCY dapat sesuai dengan kebutuhan Anda - "Y" di HCY adalah untuk "luma":

Luma kira-kira sama [dalam terang dengan gambar warna asli], tetapi agak berbeda pada kroma tinggi. HSL L dan HSV V, sebaliknya, berbeda secara substansial dari cahaya persepsi.

HCY dijelaskan di halaman Wikipedia sebagai "luma / chroma / hue". Halaman ini , di sisi lain, tampaknya menggunakan steno "HCY" dan menunjukkan cara mengubahnya ke dan dari RGB.

Jibb Smart
sumber
2
Saran pembagian alternatif Anda tidak akan berfungsi untuk warna-warna seperti biru (0, 0, 1) - karena kami dapat memenuhi jenuh pemilihan pendahuluan kami sebelum mencapai luma yang diinginkan. Fosfor biru pada layar pemain tidak dapat didorong semena-mena terang (meskipun HDR dapat meredupkan bagian layar lainnya untuk mencoba memberikan ilusi bahwa biru sama cerahnya. Atau Anda dapat menetapkan target luma Anda ke 0,0722 untuk dapat bagi warna apa saja dengan luma itu, dengan biaya keseluruhan warna yang sangat gelap)
DMGregory
Poin bagus. Saya akan memperbaiki bagian dari jawabannya.
Jibb Smart
Ada banyak cara untuk meningkatkan saran alternatif, tetapi menjadi sangat kompleks sebelum benar-benar mendapatkan jenis hasil yang diinginkan OP, jadi saya menghapus alternatif saya. HCY sudah cukup.
Jibb Smart
Saya melakukan beberapa eksperimen dengan semua ini. Saya akan memperbarui dalam beberapa hari untuk melihat bagaimana ruang warna ini terbentuk sebelumnya. Terima kasih banyak kawan!
J.Doe
@DMGregory dapatkah Anda menjelaskan lebih lanjut tentang apa yang Anda maksud dengan "tetapkan target luma Anda ke 0,0722 untuk dapat membagi warna apa pun ke luma itu, dengan biaya keseluruhan warna yang sangat gelap"?
J.Doe