Bagaimana saya bisa dengan mudah membuat peta tekstur cloud?

16

Saya membuat planet 3d di game saya; ini akan dipandang sebagai "bola". Beberapa dari mereka akan membutuhkan lapisan cloud. Saya melihat berbagai tutorial Blender untuk membuat "bumi" , dan untuk lapisan cloud mereka menggunakan peta cloud bumi dari NASA .

Namun saya akan menciptakan alam semesta fiksi dengan banyak planet yang dihasilkan secara prosedural. Jadi saya ingin menggunakan banyak variasi.

Saya berharap ada cara untuk secara prosedural menghasilkan peta cloud seperti tautan NASA. Saya juga perlu membuat gas raksasa, jadi saya juga perlu jenis peta tekstur awan lainnya .

Jika itu terlalu sulit, saya bisa kembali membuat beberapa variasi peta cloud. Misalnya, 3 untuk bumi-seperti, 3 untuk gas raksasa, dll.

Jadi bagaimana cara saya membuat secara statis atau secara terprogram menghasilkan peta cloud semacam itu?

EdwardTeach
sumber

Jawaban:

19

Generasi cloud itu menyenangkan! Saya akan membahas metode offline dan runtime.

Awan yang dirender sebelumnya

Jika Anda ingin melakukan pra-render tekstur cloud Anda offline, tidak terlihat lagi selain Photoshop (atau Gimp , jika Anda mau). Kedua program dapat dengan mudah menghasilkan pola cloud. Item menu cenderung bergerak di antara rilis, tetapi pada Gimp 2.8.2 perintah inti yang Anda cari adalah Filters -> Render -> Clouds -> Solid Noise. Anda harus membuat gambar kosong baru sebelum perintah diaktifkan. Saya mendorong Anda untuk bereksperimen dengan parameter noise, tetapi seperti contohnya, inilah yang terjadi jika Anda mengatur "Random Seed" menjadi 1, "Detail" ke 4, "X Size" ke 4.0, "Y Size" ke 8.0, menonaktifkan "Acak" dan "Turbulent", dan aktifkan "Tilable": Output mentah dari perintah Gimp "Solid Noise"

Satu langkah lebih lanjut yang saya rekomendasikan adalah mengedit level gambar ( Colors -> Levels...dalam Gimp). Dengan menyeret titik akhir di sekitar, Anda dapat secara efektif mengubah tingkat tutupan awan dari "sepenuhnya mendung" menjadi "bukan awan di langit". Awan yang mengalami ambang batas

Kemungkinan menarik lainnya:

  • Gunakan alat "Dodge" dan "Burn" untuk secara manual mencerahkan / menggelapkan bagian gambar.
  • Warp gambar cloud untuk menyarankan pola angin. Coba Filters -> Distorts -> Whirl and Pinch...perintah Gimp , atau untuk kontrol lebih lanjut gunakan Filters -> Distorts -> IWarp...dengan Mode Deform diatur ke "Swirl". Tetap halus, meskipun - terlalu banyak melengkung cenderung mengaburkan detail frekuensi tinggi dari gambar.
  • Tambahkan beberapa lapisan awan independen untuk mensimulasikan berbagai jenis awan, dari tipis dan tipis hingga besar & tebal (saya yakin mereka memiliki nama ilmiah yang tepat, tetapi sial, saya seorang programmer, bukan ahli meteorologi!). Dalam hal ini, Anda mungkin ingin menyimpan setiap layer sebagai gambar terpisah sehingga Anda dapat menganimasinya secara mandiri saat runtime.

Itu sangat tergantung pada visi artistik Anda. Tergila-gila! Setelah selesai, ingatlah untuk mengekspor tekstur sebagai gambar skala abu-abu saluran tunggal, sehingga Anda dapat menggunakan data cloud yang sama untuk warna dan saluran alfa saat runtime.

Generasi awan runtime

Menghasilkan pola cloud tanpa batas saat runtime sedikit lebih terlibat, tetapi masih sangat layak. Ini adalah topik yang sangat besar, dan ini hanya akan mencakup stroke luas.

Pada dasarnya Anda akan meniru perintah "Solid Noise" Gimp dalam kode shader Anda, menggunakan fungsi noise seperti Perlin Noise kanonik untuk menghasilkan volume kebisingan periodik yang tak terbatas, halus, deterministik, (opsional). Pertanyaan Anda tidak menentukan API rendering mana yang Anda targetkan, jadi saya tidak bisa terlalu spesifik di sini; bab 26 dari "GPU Permata 2" mencakup varian noise Perlin dalam (agak tanggal) HLSL dan CgFX, atau Anda dapat menggunakan fungsi noise GLSL drop-in ini. Dengan mengambil sampel 2D dari volume noise 3D, Anda mendapatkan sesuatu seperti perintah Gimp "Solid Noise" dengan Detail = 0. Semakin rendah jarak antara sampel volume suara Anda, semakin rendah frekuensi ("halus") kebisingan Anda. Untuk meningkatkan level detail frekuensi tinggi, mulailah dengan pola noise frekuensi rendah dasar dan tambahkan tambahan "oktaf" frekuensi tinggi, di mana setiap "oktaf" adalah irisan berbeda dari volume suara 3D dengan jarak pengambilan sampel yang lebih besar dan amplitudo lebih rendah. Contoh visual dari proses ini (yang saya temukan di Googling "multi-oktaf Perlin noise") dapat ditemukan di sini .

Sebagai bonus tambahan yang sangat besar, tekstur cloud yang dihasilkan dengan cara ini sangat mudah dianimasikan! Tambahkan offset berbasis waktu ke koordinat sampel fungsi derau 3D Anda, dan Anda akan mendapatkan gerakan cloud yang sangat meyakinkan (seperti terlihat dalam video ini , misalnya). Ini karena fungsi noise halus di ketiga dimensi; menggulir tekstur ke arah U / V menyebabkan awan bergerak di sekitar planet ini, sementara menggulir ke arah W (tegak lurus) memiliki efek "berevolusi" awan secara perlahan.

Warping cloud saat runtime juga dimungkinkan, untuk efek seperti badai. Hasil dapat benar-benar kualitas yang jauh lebih tinggi daripada filter warp Gimp naif, yang (seperti disebutkan sebelumnya) dapat menyebabkan tekstur yang terlalu buram. Salah satu teknik yang Anda pasti ingin lihat adalah "flow map", seperti yang dijelaskan oleh Alex Vlachos dari Valve ( SIGGRAPH 2010 slide ) atau Carlos Gonzalez dari Naughty Dog ( slide GDC 2012 ). Ide dasarnya adalah Anda melukis bidang vektor ("flow map") dan menggunakannya untuk mendistorsi dan menggulir tekstur cloud saat runtime, sementara secara berkala memudar antara dua tekstur cloud yang berbeda ketika jarak distorsi menjadi terlalu tinggi.

Metode mana yang digunakan?

Pra-rendering tekstur cloud di Gimp / Photoshop sangat mudah; Anda dapat menghasilkan tekstur baru dalam beberapa detik setelah Anda terbiasa. Kode runtime itu sepele, dan sangat cepat. Namun, tekstur cloud yang lebih unik berarti persyaratan ruang disk yang lebih tinggi (juga, unduhan yang lebih besar / lebih lambat) dan lebih banyak penggunaan VRAM saat runtime.

Pembuatan awan Runtime jauh lebih sulit pada awalnya, tetapi begitu Anda membuatnya berfungsi, ia memiliki beberapa keuntungan yang jelas dibandingkan tekstur awan yang dirender sebelumnya. Anda dapat menghasilkan berbagai pola awan animasi realistis tanpa menggunakan ruang disk tambahan atau VRAM. Namun, biaya runtime untuk mengevaluasi beberapa fungsi noise 3D per-pixel bisa menjadi curam; cloud pixel shaders Anda akan jauh lebih lambat daripada yang ada di case yang telah dirender.

TL; DR: pasti mulai dengan menggunakan awan yang dirender sebelumnya, dan beralih ke awan prosedural runtime jika Anda memerlukan variasi tambahan (atau ingin tantangan pemrograman tambahan).

postgoodism
sumber
1
Ini adalah jawaban yang bagus: sangat komprehensif dan mudah diikuti. Saya melihat Anda menyebutkan "membelokkan awan untuk menyarankan pola angin". Ini adalah sesuatu yang saya pasti perlu lakukan, jadi bisakah Anda menguraikan sedikit? Setelah saya memiliki ini, saya akan menerima jawaban Anda.
EdwardTeach
@EdwardTeach Selesai; berharap itu bisa membantu!
postgoodism