Cara menggambar dunia 3D dengan garis-garis, lebih seperti gambar sketsa atau kartun


9

Pertimbangkan membuat gambar tinta, tanpa naungan dan semua garis memiliki bobot yang sama - seperti yang Anda lihat dalam komik strip seperti Dilbert. Ini mewakili dunia 3 dimensi yang aktif, tetapi objek tidak memiliki tekstur, namun Anda tidak melihat segitiga tessellated juga.

Demi contoh, pertimbangkan menggambar permukaan bulan. Garis-garis yang mungkin Anda gambar akan berada di sepanjang tepi atas bukit, ke tempat mereka bertemu dengan tingkat permukaan secara umum. Di belakang itu Anda akan melakukan hal yang sama untuk bukit yang lebih besar, ke kejauhan, dan di belakang itu apa yang terlihat dari cakrawala. Untuk kawah, Anda bisa menggambar lingkaran dekat untuk tepi luar, dan sebagian bertopeng, lingkaran untuk tepi bawah. Batu-batu besar akan memiliki garis di sekitar tepi, dan di sepanjang tepi yang terlihat utama. Para astronot akan memiliki garis di sepanjang tepi luar mereka, dan di sepanjang fitur utama dari pakaian luar angkasa mereka.

Saya seorang programmer berpengalaman tetapi baru dalam pemrograman 3D. Saya tidak bisa begitu saja memikirkan sebuah game yang terlihat seperti ini - apakah sudah dilakukan? Dan bagaimana orang melakukannya? Dua masalah muncul di pikiran - menemukan tepi yang signifikan, dan menggambarnya. Apakah perlu "mesin" yang dikodekan dari matriks ke atas, berdasarkan garis, bukan mesin 3D biasa?


Saya hanya ingin memperingatkan Anda bahwa manusia tidak pandai dalam memahami 3D pada layar 2D apa adanya, jadi menghilangkan bayangan, yang merupakan bagian yang sangat penting untuk memahami kedalaman adegan, mungkin tidak berfungsi dengan baik dalam permainan yang mengandalkan 3D gameplay
Jeff

Ada satu permainan yang sesuai dengan gaya yang Anda gambarkan - Okami, dirilis untuk PS2 beberapa tahun yang lalu en.wikipedia.org/wiki/%C5%8Ckami
Eran Galperin

1
Bagus, saya sudah berpikir untuk melakukan ini sendiri. Saya pikir Anda ingin menggunakan semacam cel shading , bukan hanya garis.
mpnk121

Jawaban:


11

Pada dasarnya, apa yang Anda bicarakan adalah penemuan tepi, dan ada sejumlah permainan yang melakukannya, dalam berbagai cara berbeda.

Mungkin yang pertama adalah Jet Set Radio (dirilis di barat sebagai "Jet Grind Radio"). Dirilis hanya satu atau dua bulan setelah itu adalah permainan yang saya kembangkan teknik rendering serupa: Looney Tunes: Space Race . (Di Space Race, kami melakukan yang terbaik untuk mempertahankan ketebalan garis yang seragam, sementara Jet Set Radio menjadikan lebar garis yang tidak rata sebagai bagian besar dari gaya visualnya).

Kedua game ini bekerja dengan cara yang sama; untuk setiap objek yang akan diuraikan, gambar objek dua kali. Pertama, render dengan backfacing terbalik, dengan dorongan dhuwur diterapkan (yaitu, pindahkan setiap dhuwur dengan jarak tertentu di sepanjang vektor normalnya), dan dalam warna apa pun Anda ingin 'garis' muncul. Kemudian gambar lagi, tanpa dorongan simpul dan dengan backfacing normal. Pasangan operasi ini memberi Anda siluet berwarna yang merayap di sekitar objek, dan hanya itu yang digunakan dua game pertama ini. Dalam Space Race, saya mempertahankan ilusi lebar garis konstan dengan mendorong simpul pada jarak yang bervariasi, berdasarkan seberapa jauh objek itu dari kamera. Di Jet Set Radio, mereka tidak (yang menyebabkan garis menjadi lebih besar atau lebih kecil, karena objek bergerak lebih dekat atau lebih jauh dari kamera)

NVidia dan ATI memiliki beberapa demo cara lain untuk mencapai efek ini, sebagian besar berputar di sekitar pixel shader mencari normals yang tegak lurus dengan vektor kamera-ke-pixel untuk setiap piksel, tetapi ini semua membutuhkan jerat resolusi sangat tinggi, dan menghasilkan tidak konsisten lebar garis dalam praktek. Saya tidak tahu apakah ada game yang benar-benar menggunakan jenis pendekatan ini; Saya tidak berpikir saya pernah melihat yang terlihat seperti sampel dari perusahaan-perusahaan ini.

Saya juga akan mengarahkan Anda ke Dragon's Lair 3D , yang merupakan satu-satunya permainan yang saya tahu tampaknya benar-benar melakukan ini dengan benar; mengambil produk titik dari kamera-ke-poligon dan normal poligon untuk setiap poligon dalam model untuk melihat apakah setiap poligon menghadap ke arah atau menjauh dari kamera, dan kemudian memeriksa semua pasangan poligon yang terhubung; jika ada sepasang poligon yang berbagi tepi, dan satu poligon menghadap kamera dan satu poligon tidak, maka itu menarik garis tipis, lebar konstan di sepanjang tepi itu di ruang layar. (Saya tidak bisa membuat pekerjaan ini cukup cepat di Dreamcast for Space Race, atau saya akan menggunakannya. Hari ini, di komputer modern, ini benar-benar cara saya mencoba melakukan efek ini, meskipun itu '

Dragon's Lair 3D juga satu-satunya permainan yang saya sadari yang benar-benar menarik garis di antara area-area dengan warna berbeda atau pada diskontinuitas vertex-normal, bahkan jika tidak ada tepi siluet untuk menemukannya di sana. Saya menduga bahwa mereka memiliki alat khusus yang memungkinkan artis mereka untuk menominasikan tepi poligon untuk selalu menerima garis.

Okami , yang telah disebutkan oleh beberapa orang lain, tampaknya menggunakan pendekatan push-vertex render ganda, mirip dengan Jet Set Radio dan Space Race, tetapi juga menggunakan tekstur yang telah dibangun menggunakan gaya seni kuas. (Bukit di kejauhan, misalnya, digambar sebagai sapuan kuas ke dalam tekstur yang digambar sebagai quad standar). Okami memang menyenangkan, tapi saya tidak berpikir itu benar-benar menyentuh teknologi yang Anda tanyakan; tentu saja, ini menggunakan pendekatan lama untuk efeknya.

Sekarang, dalam kasus Anda, Anda bertanya tentang melakukan ini tanpa mengisi warna, hanya menggambar dunia dengan garis-garis saja. Itu mudah dilakukan; hanya menggambar semua poligon tanpa penerangan, dan dalam warna konstan tunggal yang cocok dengan warna latar belakang. Salah satu dari pendekatan ini harus bekerja menggunakan pendekatan itu tanpa mengubah mesin gim Anda sama sekali. Sangat penting untuk benar-benar menggambar poligon "warna yang sama dengan latar belakang", karena mereka akan menjaga tepi latar belakang tidak terlihat melalui objek latar depan, yang bisa membingungkan dengan sangat cepat.


+1 jawaban cemerlang termasuk teori, dan contoh
Maik Semder

Jawaban yang luar biasa, terima kasih atas waktu Anda menulisnya.
rawa ceria

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.