Shader logam yang realistis

13

Bagaimana Anda membuat shader logam yang bagus?

Untuk logam yang berbeda dan katakan kurang lebih tererosi / berkarat dan sebagainya.

Saya tahu bahwa satu perbedaan dari bahan biasa adalah bahwa logam harus 'mewarnai' cahaya specular tetapi ketika saya melakukannya dengan emas misalnya hanya terlihat "kuning", bukan logam sama sekali.

Bantuan apa pun dihargai!

Valmond
sumber
1
Pertanyaan Anda terdengar seperti sesuatu yang sederhana dan spesifik, tetapi sebenarnya tidak. Anda tidak bisa meniru tampilan metalik dengan shader saja. Melakukannya memerlukan tekstur yang tepat, sehingga Anda memerlukan tekstur shininess specular, mungkin peta benjolan jika logam sama sekali tidak teratur, dll. Jika logam dipoles sampai tingkat tertentu, Anda perlu mencerminkan lingkungan (atau karikaturnya) sebagai baik. Ini bukan masalah sederhana "ini beberapa kode shader logam".
Nicol Bolas
Lihatlah subjek refleksi anisotropik juga, sebuah fenomena yang biasanya terlihat pada logam yang disikat.
David Gouveia
@ David: Itu terlihat sangat keren, mungkin agak berlebihan bagi saya saat ini tetapi saya pasti memeriksanya dan menggunakannya jika saya bisa :-)
Valmond
@Nicol Terima kasih atas komentarnya, saya sepenuhnya OK dengan menggunakan tekstur, shader 'normal' saya terdiri dari 3: Diffuse, Glow dan peta
kendali
Pencarian cepat menghasilkan banyak shader logam yang berbeda dan langsung dari mulut kuda: developer.download.nvidia.com/shaderlibrary/webpages/…
Patrick Hughes

Jawaban:

4

Saya baru-baru ini membuat shader untuk logam yang bersih dan disikat untuk permainan saya yang sedang berlangsung dan saya cukup senang dengan hasilnya.

Logam bersih: Fitur terpenting dalam percobaan saya adalah pantulan lingkungan dengan peta kubus. Saya menerapkannya dengan lingkungan render-to-tekstur realtime, tetapi juga gambar statis sering memberikan hasil yang baik dan lebih mudah untuk mengaburkannya. Fitur terpenting kedua adalah efek fresnel, yang membuat siluet objek lebih baik. Ini misalnya memberikan tampilan bola yang lebih bulat. Pencahayaan specular tidak selalu diperlukan, karena peta kubus dapat memberikan highlight secara langsung. Render HDR juga penting untuk membuat refleksi peta kubus terlihat bagus.

Logam yang disikat : Untuk logam yang disikat Anda mendapatkan hasil yang baik dengan cukup mudah dengan menggunakan tekstur sikat, sesuatu seperti ini, bersama dengan pencahayaan anisotropik. Untuk pencahayaan anisotropik Anda dapat menemukan tutorial dari web, tapi saya menerapkannya sendiri dengan menggunakan blinn-phong sebagai dasarnya, tetapi dari setengah vektor saya menghilangkan 80% dari arah singgung. Ini berarti bahwa Anda memerlukan garis singgung atau bitangen selain dari normals dalam model Anda. Refleksi lingkungan sulit untuk logam disikat. Anda dapat mengambil sampel dari berbagai arah dari peta kubus berdasarkan pada arah tangen / bitangent, tetapi Anda mungkin membutuhkan banyak sampel untuk hasil yang baik. Namun ini tidak perlu, karena tekstur dan pencahayaan anisotropik dengan beberapa sumber cahaya sudah terlihat cukup bagus. Hasil akhir dalam kasus saya terlihat seperti ini:

Bahan logam disikat

msell
sumber
6

Seperti yang dikatakan Nicol dalam komentarnya, ada banyak hal yang masuk ke shader logam berkualitas tinggi. Untuk hasil terbaik, penyaji Anda harus benar-gamma dan menggunakan model arsir berbasis fisik (lihat khususnya dua makalah oleh Naty Hoffman di tautan itu).

Mengingat hal-hal itu, cara khas untuk membuat bahan logam adalah memiliki warna difus yang sangat rendah atau tidak ada dan reflektif spekuler tinggi, mulai dari 50% hingga 100% (dalam ruang warna linier). Seperti yang Anda perhatikan, untuk beberapa logam specular akan berwarna.

Karena penampilan logam sepenuhnya spekuler dengan sedikit atau tanpa difusi, refleksi akan sangat penting. Jika hanya memantulkan titik cahaya, Anda akan mendapatkan tampilan material hitam karena bagian lingkungan lainnya tidak ada (bahkan logam yang sangat kasar akan memantulkan gambar buram di sekitarnya). Cara khas untuk mendapatkan lebih banyak refleksi adalah dengan menggunakan cubemap. Refleksi realistis dalam grafik waktu nyata adalah topik yang sangat besar, dan ada banyak pendekatan berbeda di luar sana.

Nathan Reed
sumber
Terima kasih, ini persis apa yang saya cari! Saat saya melakukan refleksi dengan peta kubus, mungkin saya harus menggunakan semacam pencahayaan lingkungan sebagai pencahayaan specular yang sangat tinggi?
Valmond
@Valmond Saya tidak yakin apa yang Anda maksud dengan "menggunakan semacam pencahayaan lingkungan sebagai pencahayaan specular yang sangat tinggi". Yang saya maksudkan adalah bahwa refleksi specular harus mencakup sumber cahaya dan segala sesuatu yang lain di lingkungan (ditambahkan bersama), di mana bagian "segalanya" dapat diimplementasikan sebagai cubemap. Cara tipikal adalah menghasilkan beberapa cubemaps kabur untuk kekasaran yang berbeda seperti yang ditunjukkan di sini .
Nathan Reed