Bentuk kompleks di SceneKit

Di SceneKit, seorang programmer dapat membuat node/objek dengan memasukkan kode berikut:

SCNBox* box = [SCNBox boxWithWidth:1 height:1 length:1 chamferRadius:0.1]; // define a geometry
SCNNode* boxNode = [SCNNode nodeWithGeometry:box]; // make this geometry into a 3D node
[scene.rootNode addChildNode:boxNode]; // add the node into the scene

dan Anda mendapatkan simpul kotak, berukuran 1x1x1 unit, dengan radius talang 0,1. Bentuknya hampir seperti lingkaran.

kotak

Namun, saya ingin membuat bentuk yang lebih kompleks daripada kotak, bola, atau silinder. Misalnya, saya ingin menampilkan potongan puzzle ke layar.

Bagaimana cara saya melakukan itu? Saya tahu ini mungkin dengan mendefinisikan SCNShape dengan kurva Bézier (dikombinasikan dengan NSBezierCurve). Jika saya ingin memuat sekumpulan simpul ke dalam geometri dan menjadikannya material, bagaimana cara melakukannya?

Saya baru mengenal pemrograman 3D. Saya telah bermain-main dengan bola dan bentuk sederhana sebelumnya. Saya mungkin akan membuat potongan puzzle dirender ke layar dengan cara yang salah.


person DDPWNAGE    schedule 22.10.2015    source sumber


Jawaban (1)


Saat ini Scene Kit hanya untuk merender geometri dan memiliki alat pembuatan geometri yang sangat terbatas, meskipun pengenalan Model I/O tampaknya menjadi langkah pertama untuk mendukung kemampuan pemodelan 3D yang lebih kompleks.

Anda benar bahwa untuk bentuk sederhana Anda dapat menggunakan Scene Kit geometri dasar (kotak, bola, dll.) atau SCNShape dengan NSBezierCurve untuk ekstrusi 3D dengan bevel dan chamfer. Untuk geometri yang lebih kompleks, Anda memiliki beberapa opsi:

Perangkat lunak Pemodelan 3D pihak ketiga dapat digunakan untuk membuat geometri dan dalam beberapa kasus animasi yang kemudian dapat diimpor langsung ke Scene Kit. Tampaknya banyak orang menggunakan Sketchup karena gratis dan mudah digunakan. Ini bagus untuk bentuk dasar tetapi kemampuannya sangat terbatas. Saya menyarankan penggunaan Blender, yang juga gratis tetapi memiliki lebih banyak hal untuk membuat geometri dan jerat dan juga memungkinkan Anda membuat animasi dan material yang dapat diimpor secara langsung. Ini memang memiliki kurva pembelajaran yang curam tetapi setelah Anda berhasil memecahkannya, itu adalah aset yang bagus untuk dimiliki.

Perangkat lunak semacam ini paling baik digunakan untuk geometri kompleks seperti level, karakter, dan pemandangan. Namun ada kelemahannya karena tidak dinamis setelah diimpor, karena setiap jaring akan terlihat sama, misalnya jika Anda membuat batu sebagai pemandangan, Anda perlu membuat banyak variasi batu, atau buat setiap batu di game Anda terlihat identik.

Buat di Scene Kit dengan menggunakan kelas SCNGeometrySource dan SCNGeometryElement. Ini pada dasarnya adalah serangkaian titik dalam ruang 3D (masing-masing SCNVector3) yang menentukan sudut atau simpul mesh Anda. Anda kemudian menggabungkannya ke dalam jaring dengan memasukkan titik-titik Anda ke dalam larik dan menentukan titik mana yang harus digabungkan untuk membuat segitiga atau elemen jaring Anda. Ini diberikan sebagai array lain dari SCNVector3 vektor, di mana setiap bagian dari vektor menunjuk ke indeks dalam array simpul. Vektor [0, 1, 2] akan membuat segitiga dari titik-titik dalam indeks array 0, 1 dan 2. Ada tutorial tersedia tentang cara melakukan ini.

Manfaatnya adalah kemampuan untuk membuat geometri acak, dengan membuat sekumpulan titik pseudorandom dan kemudian menggabungkannya untuk membuat mesh Anda. Dari sini Anda kemudian dapat memanggang oklusi ambien menggunakan Model I/O (dengan asumsi Apple telah memperbaikinya, saya belum memeriksanya) dan terus menggunakan Model I/O untuk membuat material yang cukup realistis. Berarti Anda dapat secara efektif membuat apa pun yang Anda inginkan. Mengikuti contoh sebelumnya, secara prosedural Anda dapat menghasilkan batuan yang semuanya terlihat berbeda satu sama lain. Anda dapat menggunakan ini untuk menghasilkan kemungkinan potongan puzzle yang jumlahnya hampir tak terbatas.

Sebagai catatan tambahan, geometri dan material adalah dua hal yang berbeda dalam pemodelan 3D, dan saat Anda baru memulai, sepertinya Anda telah mencampuradukkannya dalam pertanyaan Anda. Geometri adalah jaring yang menentukan bentuk suatu objek, dan material menentukan bagaimana cahaya berinteraksi dengan jaring tersebut untuk menghasilkan tampilan akhirnya. Suatu geometri dapat memiliki satu atau lebih bahan yang melekat padanya untuk menghasilkan hasil yang Anda inginkan.

Pilihan yang Anda pilih benar-benar tergantung pada apa yang ingin Anda capai. Untuk keacakan pilihan kedua lebih baik, untuk kualitas pilihan pertama adalah yang terbaik. Saya merasa saya sedikit bingung sekarang, jadi saya akan mengakhirinya di sini.

person Andy Heard    schedule 22.10.2015
comment
Terima kasih atas jawaban detailnya! Saya punya teman yang tahu cara menggunakan Blender tapi saya ingin tahu apakah saya bisa menggunakan SceneKit untuk menghasilkan model berdasarkan titik 3D. Saya tidak tahu tentang kelas yang Anda sebutkan; itu akan banyak membantu! ???? - person DDPWNAGE; 22.10.2015