24-Bit Colordepth tidak cukup?


30

Saya perhatikan bahwa dalam gradien yang sangat lembut, colordepth 24-Bit tidak cukup karena Anda dapat melihat transisi warna. Ini muncul paling banyak dalam adegan gelap atau langit malam.

Mengapa tidak ada yang mengubah colordepth menjadi dua byte per saluran? Saya tahu itu akan menjadi banyak pekerjaan dan banyak perangkat keras harus diganti, tapi saya merasa sedikit mengganggu. Saya benar-benar tidak berpikir bahwa teknologi perangkat kerasnya belum cukup matang.

Jadi mengapa tidak ada yang melakukan itu?

Inilah gambar "The War Z" di mana Anda dapat melihat apa yang saya maksud:

Transisi warna War Z


12
Gambar Anda dalam format JPEG, itu juga dapat menghasilkan artefak. Bisakah Anda menyajikan contoh dalam format lossless?
Kaisar Orionii

Apakah kamu bercanda? Anda mengeluh tentang kedalaman bit tetapi Anda mengunggah file JPEG?
Tara

1
Persis. Tidak perlu untuk format lossless ketika JPG sangat menunjukkan apa yang saya maksud. BTW: Bukan kompresi yang menyebabkan efek ini. Simpan sumber daya Anda ...
Liess Jemai

Jawaban:


19

Anda kurang lebih mengatakannya sendiri, 'Saya tahu, itu akan banyak pekerjaan dan banyak perangkat keras harus diganti.' Sementara hal-hal grafis-perangkat keras sebenarnya akan relatif mudah (jika mahal - menggandakan ukuran semua tekstur dan penyangga bingkai jauh dari hal sepele), 'ekosistem' untuk citra dengan kedalaman warna yang lebih tinggi tidak tersedia untuk jenis yang membuat ini menjadi pengeluaran yang berharga atas nama siapa pun, karena tidak ada produsen LCD yang berfokus pada upaya untuk mendapatkan hingga 16 bit per piksel (meskipun ada beberapa percobaan di 10BPP, yang masih sesuai dengan sinyal RGB menjadi 32- saluran bit).

Singkatnya, itu terlalu banyak bekerja untuk apa yang kebanyakan orang anggap belum terlalu sedikit. Mungkin 'sedikit mengganggu', tetapi tingkat gangguan sangat tipis sehingga peningkatan kualitas gambar lainnya telah diprioritaskan.


1
Meskipun tidak secara langsung dapat diakses oleh pengguna akhir, beberapa monitor kelas atas 27/30 "yang ditargetkan untuk profesional gambar / video adalah 14 bit secara internal / 10 secara eksternal dan menggunakan 4 bit ekstra untuk menyimpan tabel pencarian untuk membantu mengkalibrasi warna pada tampilan.
Dan Neely

@DanNeely: Setiap "pengguna akhir" dapat memiliki satu untuk beberapa ribu dolar AS. Mereka juga membutuhkan kartu grafis tingkat pro, seperti Quadro. Mengingat apa yang orang bayar untuk TV dan sound system mereka, ini tidak buruk.
Zan Lynx

@ ZanLynx Saya menggunakan frasa yang ditargetkan pada pro sebagai lawan hanya untuk pro dengan sengaja. Siapa pun dapat membeli tumpukan penuh; tetapi harga sangat tinggi dan manfaatnya sangat jarang sehingga sangat sedikit orang yang melakukannya. ex hanya 1,17% pengguna Steam memiliki 2560 tampilan. Dan monitor adalah satu-satunya bagian dari tumpukan yang diperlukan yang oleh pengguna listrik kemungkinan besar akan berakhir secara kebetulan karena beberapa (semua?) Model tahun 2011 menampilkan merek 2560 dari vendor utama termasuk warna 10 / 14bit; dan impor Korea yang lebih murah tidak tersedia secara luas untuk sementara waktu sesudahnya. Kartu quadro / etc tidak menawarkan apa pun kepada gamer vs standar.
Dan Neely

1
Mungkinkah banding tersebut sebenarnya merupakan pengoptimalan tekstual untuk mengurangi jumlah pekerjaan rendering langit? Ketika saya membuat gradien 24bit di GIMP tidak terlihat seperti itu. Lihat static.inky.ws/image/4306/gradient.png untuk gradien 24bit.
ldrumm

2
@rumrum tidak, tidak juga, Anda benar-benar mengambil keuntungan dari rentang paling ekstrim dan mengaktifkan dithering di gimp, lihat contoh ini dengan dithering (sedikit garis terlihat) dan di sini tanpa dithering . Masalahnya adalah bahwa Anda tidak bisa hanya secara universal pasca proses dithering menjadi tekstur dan sebagian besar tekstur tidak dibuat dengan menggunakan gradien. Jika mereka dilukis dengan tangan dan memiliki beberapa bentuk area besar dengan gradien antara 2 warna yang agak mirip maka akan ada banding
PeterT

44

Yap, Anda bukan orang pertama yang memperhatikan ini . :) Dengan rasio kontras tinggi saat ini, 8 bit per komponen tidak cukup untuk membuat gradien yang mulus tanpa garis banding yang terlihat - kecuali digunakan dithering.

Menggunakan lebih dari 8 bit per saluran pada layar disebut " warna dalam " oleh produsen layar. Itu tidak terlalu luas karena masalah ayam dan telur. Tampilan warna yang dalam tidak berguna tanpa kartu video yang dapat menampilkan warna yang dalam, dan mesin game yang mendukung rendering ke warna yang dalam. Demikian juga, tidak ada gunanya mesin permainan atau kartu video yang mendukung warna yang dalam tanpa tampilan. Jadi tidak ada banyak insentif bagi produsen perangkat keras dan pengembang game untuk menambahkan dukungan untuk teknologi ini, karena dari kedua ujungnya, tidak ada pasar untuk membenarkan biaya pengembangan.


Selain itu, ada cara lain untuk memperbaiki bandeng karena presisi 8-bit yang terbatas. Seperti yang saya sebutkan sebelumnya, mesin game dapat menggunakan dithering untuk menyembunyikan banding.


(Gambar kucing dengan palet 256-warna, tanpa dan dengan dithering. Dibuat oleh pengguna Wikipedia Wapcaplet , digunakan di bawah lisensi CC-By-SA 3.0 .)

Menambahkan sedikit gundukan ± 0,5 / 255 sebelum menuliskan nilai piksel ke framebuffer sangat efektif untuk menyembunyikan pita pada gradien halus, dan pada dasarnya tidak terlalu mencolok. Jika Anda berada di mesin HDR, Anda melakukan ini selama tahap pemetaan.


Akhirnya, seperti yang telah dicatat oleh orang lain, kompresi tekstur dapat menjadi sumber artefak seperti pita yang lebih besar dalam gambar daripada presisi 8-bit. Ini mungkin apa yang terjadi dengan langit di gambar itu, meskipun sulit untuk mengatakannya - ada begitu banyak kompresi JPEG di atasnya sehingga setiap artefak akibat kompresi DXT cukup banyak dibanjiri.


+1 - jawaban yang sangat bagus, dan saya benar-benar merindukan kemungkinan bahwa banding memiliki penyebab lain.
Steven Stadnicki

1
+1 karena mengetahui bahwa file tersebut adalah jpeg. Contoh lossless oleh OP akan mencegah penilaian buruk karena kebisingan dalam data.
ldrumm

@ldrumm Juga game / mesin yang tidak mengerikan ...
Brian Ortiz

Saya menambahkan gambar untuk menekankan perbedaan yang bisa dihasilkan oleh dithering. Jangan ragu untuk kembali jika Anda tidak suka :)
BlueRaja - Danny Pflughoeft

13

Perlu dicatat juga bahwa banyak panel LCD bahkan tidak 8 bit per saluran. Yang lebih murah cenderung menggunakan bit lebih sedikit dan menggunakan berbagai trik untuk menyembunyikannya. Misalnya mereka dapat beralih dengan cepat antara dua warna yang berdekatan untuk mewakili satu di antaranya. http://www.anandtech.com/show/1557/3

Ada beberapa detail tentang bagaimana DXGI mendukung 10-bit per saluran dan lebih cerah daripada warna putih di http://msdn.microsoft.com/en-us/library/windows/desktop/jj635732%28v=vs.85%29.aspx

D3D juga telah mendukung lebih dari 8-bit per saluran selama bertahun-tahun. Tidak ada yang menghentikan pengembang melakukan dithering turun dari 16-bit per saluran ke 8-bit jika mereka pikir itu ide yang baik.

Tentu saja itu tidak akan banyak membantu jika sumber data (tekstur, dll) hanya 8-bit (atau lebih mungkin DXT1, yang secara efektif 5-6-5 bit per saluran). Saya percaya bahwa ada apa dengan langit di screenshot itu (sebuah gaussian blur 8-bpp membuatnya jauh lebih mulus bagi saya) tetapi sulit untuk memastikannya.


10

Jawaban Steven Stadnicki benar - permainan jarang menggunakan tekstur presisi yang lebih tinggi karena memerlukan terlalu banyak memori tekstur, dan akibatnya terlalu banyak bandwidth memori ketika mengambil sampel tekstur dalam pixel shader. Namun, ada solusi yang tidak memerlukan tekstur besar. (Saya akan memposting ini sebagai komentar, tapi terlalu panjang.)

Homeworld menyelesaikan masalah ini dengan menyandikan gambar langit sebagai gradien verteks . Teknik ini bekerja sangat baik untuk gambar besar dan frekuensi rendah (yaitu, gradien halus) - seperti langit - di mana teksturnya mencakup sejumlah besar piksel dalam game.

Solusi lain yang mungkin adalah menerapkan normalisasi histogram ke gambar langit Anda. Jika data tekstur berada dalam kisaran nilai yang sempit, seperti langit malam yang gelap, sebagian besar bit di setiap saluran warna tidak membawa data yang berguna. Sebaliknya, lakukan ini:

  • Buat tekstur asli dalam format 16-bit, seperti TIFF 16-bit.
  • Saat Anda menyiapkan tekstur untuk mesin gim, temukan piksel paling gelap yang ada di gambar dan pantau ini sebagai offset. Katakanlah nilai piksel ini adalah 0,1 dalam kisaran 0-1.
  • Selanjutnya, cari piksel yang paling terang dan kurangi piksel yang paling gelap untuk mendapatkan rentang nilai dalam gambar. Jadi, jika piksel paling terang masih cukup gelap - katakanlah 0,35 - kisarannya hanya 0,35 - 0,1 = 0,25. Hanya 25% dari rentang nilai yang ada dalam gambar.
  • Hasilkan tekstur dalam game terkompresi DXT / BC Anda . Kurangi nilai paling gelap dari setiap piksel, dan gandakan untuk menggunakan seluruh rentang warna. Dalam contoh kalkulasi kami mengurangi nilai gelap kami sebesar 0,1 dan, karena hanya 25% dari kisaran nilai yang tersedia ada, kami mengalikan setiap nilai piksel dengan 4x untuk membuat tekstur dalam gim. Pastikan untuk melakukan semua ini sebelum Anda mengukur gambar sumber 16-bit Anda ke input 8bpp ke kompresor DXT. Gambar output sekarang akan memanfaatkan seluruh rentang nilai yang didukung oleh format dalam game. Kami mengalokasikan semua bit kami untuk mewakili nilai yang sebenarnya ada dalam gambar.
  • Simpan offset nilai gelap (0,1) dan rentang (0,25) di metadata di suatu tempat. Lewati ini sebagai input ke pixel shader Anda.
  • Dalam kode pixel shader, cicipi tekstur Anda yang bergeser dan diperluas, konversikan ke nilai float dan kemudian lakukan penggandaan / tambahkan untuk mengembalikan nilai warna asli. Dengan kata lain, kalikan dengan 0,25 dan tambahkan 0,1 untuk mengembalikan nilai yang disimpan dalam gambar sumber.

Pastikan kode shader gamma benar . Jika Anda melakukan matematika (pencahayaan & pasca pemrosesan) pada sampel tekstur yang tidak dikonversi dari ruang warna sRGB ke ruang linier, Anda akan melihat artefak pita seperti yang Anda gambarkan. Koreksi Gamma dibuat untuk membantu mengatasi masalah semacam ini dengan mengalokasikan lebih banyak bit ke nilai gelap di mana mata Anda lebih sensitif terhadap perubahan nilai. Tetapi Anda dapat dengan mudah memecahkan hal-hal jika Anda tidak memperhitungkan koreksi gamma saat menghitung, misalnya, pencahayaan, pencahayaan, atau pasca-pemrosesan FX. The Gamma FAQ membantu.


1

24 bit tidak cukup, tetapi jauh lebih umum untuk masalah seperti ini disebabkan oleh algoritma kompresi gambar, alias, atau artefak digital lainnya. Selain itu, jangan mengabaikan peran teknologi tampilan - apa pun input digitalnya, display mungkin tidak menghasilkan langkah-langkah yang sesuai dalam kecerahan aktual.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.