Ilusi 3D Tekstur Planet 2D

10

Beberapa tahun yang lalu saya mendengar suatu teknik yang memberi pengguna ilusi planet berputar dengan menggunakan tekstur 2D. Mengingat bahwa pengguna tidak dapat mengubah posisinya atau viewport.

Apa nama teknik ini?

Henrik P. Hessel
sumber

Jawaban:

25

OK saya pikir saya punya perwakilan sekarang. Isi posting sebelumnya dengan gambar tertanam. Apakah ini efek planet berputar yang Anda cari? Ini hanyalah gambar 2D bergulir yang dilihat melalui "lubang" semi-transparan di bidang bintang.

Saya mengumpulkan sedikit animasi cepat gif dari apa efeknya akan terlihat. Jelas itu bisa dianimasikan jauh lebih mulus - saya menggeser permukaan planet sebesar 4 piksel setiap frame. Ini juga tidak diatur untuk membungkus gambar sehingga ada kesalahan di akhir perulangan.

planet http://www.perludus.com/orbit.gif

Saya memang melakukan ini semua di Photoshop, tetapi konsepnya harus bekerja dalam lingkungan rendering 2D yang memungkinkan Anda melakukan transparansi alpha, dll. Berikut adalah serangkaian tangkapan layar yang menunjukkan proses ...

  1. Buat latar belakang bintang kosong, dan potong lubang bundar di dalamnya.
    teks alternatif
  2. Temukan bola abu-abu untuk planet Anda, seperti ini
    teks alternatif
  3. Inilah bintang-bintang kita dengan lubang dan bulatan berarsir di atasnya, semi transparan
    teks alternatif
  4. Buat lingkaran biru seukuran lubang, dan berikan cahaya biru luar. Juga atur menjadi semi-transparan. Inilah yang terlihat dengan bola teduh
    teks alternatif
  5. Sekarang temukan tekstur permukaan planet. Saya menemukan ini hanya googling "tekstur permukaan planet"
    teks alternatif
  6. Tempatkan tekstur planet di bawah gambar bintang dengan lubang semi-transparan di dalamnya untuk mendapatkan tampilan ini
    teks alternatif

Untuk menghidupkan permukaan planet Anda, gerakkan tekstur permukaan planet yang mendasarinya. Anda harus pandai menggeser tekstur ketika mencapai tepi untuk mendapatkan rotasi yang mulus dan tanpa akhir.

Semoga ini bisa membantu dan merupakan efek yang Anda cari!

PS Lihat artikel ini tentang artis dengan cara yang agak baru untuk membuat tekstur planet - membuat saya memikirkan jawaban ini :) http://www.behance.net/gallery/Pan-Planets/9557465

Tim Holt
sumber
np Henrik. Namun begitu saya melihat posting Anda, saya yakin, "Saya bertaruh saya tahu apa maksud orang ini." Saya tidak 100% yakin tapi saya pikir ini adalah bagaimana efek planet berputar dilakukan dalam acara TV Star Trek asli.
Tim Holt
Ini adalah jawaban yang bagus, memberi saya ide untuk proyek game yang saya miliki. Lain kali saya memuat Starcraft 2 sakit harus melihat apakah ini bagaimana yang dilakukan =)
Bryan Harrington
Jawaban yang fantastis, tangkapan layar luar biasa!
Kesalahan 454
Citra kamu mati. Apakah Anda berpikir dapat memperbaikinya?
Mithical
3

Saya akan menebak apa yang Anda maksud, dan hanya melemparkan ide di luar sana, tapi pasti tidak akan menjadi cara 'terkenal' untuk melakukannya.

semua dalam 2D

ambil 2 tekstur. satu tanah Anda, yang lain awan Anda. cloud harus memiliki lapisan alfa yang cocok sehingga Anda dapat 'melihat melalui mereka'.

membuat tekstur ubin, yaitu mereka bungkus mulus. ada program yang membantu Anda membuat ini atau tutorial di photoshop yang dapat Anda ikuti.

lalu akhirnya Anda membuat topeng stensil yang hanya berupa lingkaran, sehingga Anda pada dasarnya melihat melalui lubang bundar pada tekstur persegi Anda, sehingga menutupi sudut.

sekarang Anda menghidupkan matriks tekstur tanah dan tekstur awan untuk membuatnya bergerak. membuat mereka bergerak ke arah dan kecepatan yang berbeda dan itu akan tampak berputar. itu semua tergantung pada seberapa mulus Anda membuat tekstur.

McKay
sumber
2

Saya pikir artikel ini menjelaskan tekniknya. (Ini dalam bahasa Rusia, jadi saya memposting tautan yang diterjemahkan.)

https://translate.googleusercontent.com/translate_c?depth=1&hl=id&rurl=translate.google.com&sl=auto&sp=nmt4&tl=en&u=https://habrahabr.ru/post/248381/&usg=ALkJhhvVdAjA

Saya sudah menerapkannya di sini. http://github.com/meric/renderplanet

Pada dasarnya Anda mengambil gambar yang mengkodekan proyeksi ortografis ( http://mathworld.wolfram.com/OrthographicProjection.html ) dan membungkus planet Anda dan tekstur awan di sekitarnya menggunakan shader. Offset tekstur planet sesuai dt untuk membuatnya berputar. Gunakan gambar transparan yang disiapkan untuk cincin dan bayangan atmosfer, atau buat dengan menggambar busur transparan dan beberapa bereksperimen dengan shader untuk bayangan.

Ini gambarnya:

ortografis

Untuk setiap piksel dalam lingkaran, Red + Green/255dinormalisasi koordinat X tekstur planet / cloud untuk pencarian dan Blue + Alpha/255dinormalisasi koordinat Y.

Inilah hasilnya:

Sampel

Tekstur planet dan awan harus dalam proyeksi equirectangular.

Eric
sumber
1

Pertanyaan Anda tidak jelas tentang batasan pada konteks tempat Anda bekerja. Sebagian besar tekstur dalam rendering 3D adalah 2D. Jadi jika Anda hanya menunjukkan bola 3D dengan tekstur permukaan 2D yang dipetakan di sekitarnya, ini tidak terlalu menjadi masalah. Jika Anda tidak dapat menggunakan rendering 3D, maka Anda harus mengatakan dengan tepat apa yang dapat Anda gunakan.

Masalah dasarnya adalah Anda harus membuat tekstur datar di atas permukaan bola, yang Anda dapatkan secara gratis dengan rendering 3D. Saat planet berputar, bagian-bagian permukaan planet yang terlihat bernyawa secara non linear (bagian ekuator tekstur bergerak lebih cepat daripada kutub). Jadi saya pikir Anda harus mendistorsi gambar sendiri saat Anda memetakannya pada disk, atau Anda melakukan seperti yang disarankan VirtualVoid, dan cukup memiliki beberapa gambar yang Anda ubah di antara waktu ke waktu.

Akan mengerikan untuk diterapkan, tetapi jika Anda dapat membuat tekstur, piksel demi piksel, maka pada dasarnya Anda bisa melakukan perhitungan rasterisasi untuk setiap baris bola secara terpisah. Mari kita asumsikan bahwa tekstur peta permukaan Anda rata, sehingga di khatulistiwa ada gambar 512px. Mari kita juga asumsikan cakram yang terlihat lebar 256 px. Sekarang pikirkan setiap baris disk yang diberikan sebagai jendela geser pada tekstur permukaan. Di ekuator, jendelanya 50% dari lebar tekstur, dan Anda cukup menyalin masing-masing 256px ke piksel setara pada disk. Baris berikutnya pada disk akan sedikit kurang dari 256 px, tetapi karena peta permukaan terdistorsi, masih ada 256px data peta permukaan input. Jadi, Anda kemudian mengambil sampel data peta permukaan input, dan merender piksel yang dihasilkan. Untuk matematika mudah, mari ' s menganggap bahwa 1/3 dari jalan antara ekuator dan kutub adalah 128px lebar dalam disk keluaran. Jadi masing-masing 128px akan menjadi rata-rata 2 piksel tetangga. Ketika Anda turun ke kutub, Anda akan rata-rata semua 256px menjadi hanya beberapa piksel output.

Anda juga bisa melakukannya dengan cara lain, dan membuat garis-garis dalam tekstur sumber memiliki panjang yang berbeda. Jadi sementara garis yang berisi data sumber memiliki 512px di dalamnya, garis 1/3 dari jalan turun hanya memiliki 256px, dan garis di bagian bawah hanya memiliki beberapa piksel. Tetapi setiap baris memiliki dua kali lipat lebar cakram pada koordinat y yang setara. Tekstur semacam itu akan sangat mengerikan untuk harus dibuat. Dan mungkin akan menderita masalah aliasing yang mengerikan.

Dalam kedua kasus tersebut, animasi Anda akan menambah piksel awal x pada tekstur input, dan membungkusnya dengan awal garis tekstur input.

Semakin saya menulis tentang ini sekarang, semakin saya yakin bahwa itu adalah ide yang mengerikan, bahwa Anda hanya akan menerapkannya jika Anda benar-benar tidak punya pilihan lain. Dan Anda harus berada dalam situasi yang sangat tidak biasa untuk tidak punya pilihan lain.

Saya tidak percaya saya pernah mendengar ada solusi untuk masalah ini (agak kabur) sebagai teknik bernama spesifik.

MrCranky
sumber
0

Sprite. Kedengarannya seperti apa yang Anda gambarkan adalah sprite 2D dalam mesin game 3D untuk dibuat dengan murah (Nintendo64 melakukan ini di semua tempat, seperti yang dilakukan banyak mesin 3D awal).

Jika Anda ingin membuat rotasi planet, Anda hanya perlu menampilkan sprite 2D yang dianimasikan berdasarkan sprite sheet yang merupakan rotasi planet yang dirender sebelumnya. Seperti halnya .GIF animasi misalnya. Masalahnya adalah bahwa itu akan dipra-render, jadi seperti yang Anda katakan, ini hanya berfungsi jika pengguna tidak diizinkan untuk memanipulasi sudut tampilan.

http://en.wikipedia.org/wiki/Sprite_(computer_graphics )

SpacePrez
sumber
0

Itu mungkin hanya animasi sederhana, menggunakan satu tekstur dengan beberapa bingkai.

VirtualVoid
sumber