Blender + Python
Skrip Python bawaan Blender sangat cocok untuk hal semacam ini.
Buka konsol Python dan rekatkan pada yang berikut ini:
import bpy
import random
def asteroid():
bpy.ops.mesh.primitive_ico_sphere_add()
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.faces_shade_smooth()
bpy.ops.mesh.select_mode(type='VERT')
bpy.ops.mesh.select_random()
bpy.ops.transform.resize(value=(random.uniform(1.1,1.4),random.uniform(1.1,1.4),random.uniform(1.1,1.4)))
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.mesh.subdivide(smoothness=1)
bpy.ops.mesh.select_random()
bpy.ops.transform.resize(value=(random.uniform(1.05,1.15),random.uniform(1.05,1.15),random.uniform(1.05,1.15)))
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.mesh.subdivide(smoothness=1)
bpy.ops.mesh.select_random()
bpy.ops.transform.resize(value=(random.uniform(0.92,1.05),random.uniform(0.92,1.05),random.uniform(0.92,1.05)))
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.mesh.subdivide(smoothness=1)
stretch = random.uniform(0.9,1.5)
bpy.ops.transform.resize(value=(stretch,1,1))
bpy.ops.transform.rotate(value=(random.uniform(-1.57,1.57)), axis=(random.uniform(-1.57,1.57),random.uniform(-1.57,1.57),random.uniform(-1.57,1.57)))
bpy.ops.object.mode_set(mode='OBJECT')
asteroid()
Kemudian asteroid akan dibuat di posisi kursor 3D Anda:
Ingin asteroid lain? Pindahkan kursor 3D di tempat lain lalu ketik kembali asteroid()
ke konsol Python (atau hanya ↑Enteruntuk mengulangi baris terakhir yang dimasukkan).
Untuk membuatnya lebih terlihat seperti sepotong batu ruang angkasa dan kurang seperti gumpalan plastik, Anda perlu menerapkan bahan yang cocok. Materi prosedural berikut berfungsi dengan baik. Saya menggunakan warna difus #635C5B
, dan #8D887F
dalam tekstur marmer.
Bagaimana itu bekerja:
- Mulai dengan membuat icosahedron sederhana (
bpy.ops.mesh.primitive_ico_sphere_add()
).
- Masuk ke mode edit (
bpy.ops.object.mode_set(mode='EDIT')
) dan terapkan shading halus sehingga masing-masing sisi menyatu satu sama lain ( bpy.ops.mesh.faces_shade_smooth()
).
- Pilih subset acak dari simpul objek (
bpy.ops.mesh.select_random()
).
- Skala mereka secara acak dalam arah X, Y dan Z (
bpy.ops.transform.resize()
).
- Pilih seluruh objek (
bpy.ops.mesh.select_all(action='SELECT')
) dan terapkan subdivisi halus untuk menambahkan simpul baru dengan menginterpolasi dengan lancar di seluruh objek yang dideformasi ( bpy.ops.mesh.subdivide(smoothness=1)
).
- (Ulangi langkah 3–5 beberapa kali lagi.)
- Regangkan objek ke arah X untuk membuatnya agak kurang bulat (
bpy.ops.transform.resize(value=(stretch,1,1))
)
- Terapkan transformasi rotasi acak (
bpy.ops.transform.rotate()
)
- Akhirnya, keluar dari mode edit dan biarkan objek dipilih (
bpy.ops.object.mode_set(mode='OBJECT')
).
Lebih banyak contoh: