Skip to content Skip to sidebar Skip to footer

Cara Membuat Ribuan Koleksi NFT 3D Menggunakan Blender

Cara Membuat Ribuan Koleksi NFT 3D Menggunakan Blender


Cara Membuat Ribuan Koleksi NFT 3D Menggunakan Blender - Saya ingin membuat karakter 3D untuk sekitar 1000+ Koleksi NFT, tetapi tidak tahu bagaimana melakukannya.
Itu bodoh untuk membuat semua model satu per satu secara manual.

Sebenarnya, saya suka menggunakan Blender untuk membuat model 3D, jadi saya juga ingin menggunakannya untuk itu.

Ketika saya mencari di internet, saya menemukan solusi bahwa Blender Scripting (Python) dapat digunakan untuk menggabungkan secara acak berbagai sifat untuk membuat model 3D secara terprogram.
Ini menggunakan bahasa Python .



Repo GitHub

Sebuah proyek demo tersedia.
Periksa Gudang GitHub: https://github.com/hideckies/nft-collectibles-blender-python

0. Prasyarat

  • Blender diinstal pada PC Anda.

1. Buat Direktori

Pohon direktori adalah sebagai berikut.


  • bagian — Setiap bagian 3D termasuk dalam ini.
  • tubuh - Tubuh.
  • kepala - Kepala.
  • misc — File lain (latar belakang, lampu, kamera, dll.).
  • output — Gambar & Metadata yang dihasilkan oleh Blender Scripting.
  • skrip — File skrip.



2. Buat Setiap Bagian di Blender Secara Manual

Kali ini buat 2 jenis part yaitu head , body . Dan lain-lain (file termasuk gambar latar belakang, kamera, cahaya) .

Langkah:

  1. Buka Blender dan buat file baru dan hapus semua objek default, dan simpan di folder body atau head . (misalnya nft-collectibles/parts/head/head_rabbit.blend )
  2. Di Blender, buat koleksi baru bernama sama dengan nama file. (mis. Jika nama filenya adalah head_rabbit.blend , nama koleksinya adalah head_rabbit )
  3. Buat model bagian dalam koleksi yang baru saja dibuat.
  4. Sesuaikan ukuran dan posisinya agar karakter terlihat natural.
  5. Simpan akhirnya.

*Artikel ini tidak menjelaskan cara pemodelan.

Misalnya (Kepala):

Nama file: nft-collectibles/parts/head/head_rabbit.blend
Nama koleksi: head_rabbit


Nama file: nft-collectibles/parts/head/head_frog.blend
Nama koleksi: head_frog


Misalnya (Badan):

Nama file: nft-collectibles/parts/body/body_shirt.blend
Nama koleksi: body_shirt


Nama file: nft-collectibles/parts/head/body_zombie.blend
Nama koleksi: body_zombie

Misalnya (Lainnya):

Nama file: nft-collectibles/parts/misc/misc.blend
Nama koleksi: misc


3. Buat File Script untuk Scripting

Untuk membuat file skrip, buka editor teks / kode favorit Anda atau editor teks di Scripting Workspace di Blender.

3-1. gen_metadata.py

Ini untuk menghasilkan metadata acak untuk NFT.


34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import bpy  # The module for Blender Python
import json
import random

# This time, 100 characters will be generated.
TOTAL_CHARACTERS = 100

# Specify the directory in which generate images finally.
OUTPUTS_DIR = "c:/nft-collectibles/outputs/"

# List of parts (the file name (collection name) of each created part is included in this.)
list_body = [
"hoodie",
"overall",
"pants",
"shirt",
"tanktop",
"t_shirt",
"zombie"
]
list_head = [
"devil",
"dragon",
"frog",
"king",
"pirate",
"rabbit",
"robot",
"skull",
"warrior"
]


def random_attributes():
# Select parts randomly from lists
random_head = random.choice(list_head)
random_body = random.choice(list_body)

# Format each name for the value of attributes in metadata (e.g. "head_rabbit" -> "Head Rabbit")
random_head = random_head.replace("_", " ").title()
random_body = random_body.replace("_", " ").title()

attributes = [
{
"trait_type": "Body",
"value": random_body
},
{
"trait_type": "Head",
"value": random_head
}
]

return attributes


def main():
print("Start generating metadata...")

# Create a tempolary dict
dict_list = []

for i in range(TOTAL_CHARACTERS):
attributes = random_attributes(i)
d = { "attributes": attributes }
dict_list.append(d)

# Create a list of unique data removed duplicates
unique_list = list(map(json.loads, set(map(json.dumps, dict_list))))
# If the duplicated found, cancel scripting and try again
if len(unique_list) < TOTAL_CHARACTERS:
print("ERROR: Properties duplicate")
return

# Save metadata files (.json) to outputs folder
for i, attr_dict in enumerate(unique_list):
# Create a metadata object
obj = {
"name": "Character #" + str(i),
"description": "A collection of 3D character",
"image": "https://example.com/"+ str(i) + ".png",
"external_url": "https://example.com/",
"attributes": attr_dict["attributes"]
}
with open(OUTPUTS_DIR + str(i) + ".json", 'w') as outjson:
json.dump(obj, outjson, indent=4)

print("Generated metadata id: {}\n".format(i))


main()

3-2. gen_model.py

Ini untuk menghasilkan model dari metadata.


  44 
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import bpy
import json
import random
import shutil

# This time, 100 characters will be generated.
TOTAL_CHARACTERS = 100

# Path
PARTS_DIR = "c:/nft-collectibles/parts/"
OUTPUTS_DIR = "c:/nft-collectibles/outputs/"


# Initialize the scene (deleting the all default objects)
def init():
for obj in bpy.data.objects:
bpy.data.objects.remove(obj)
for col in bpy.data.collections:
bpy.data.collections.remove(col)


# Set configurations for rendering
def set_render_config():

# For example, set the rendering engine "EEVEE" (but Blender may be configured EEVEE default. if so, you don't need to do that)
r = bpy.context.scene.render
r.engine = "BLENDER_EEVEE"
r.resolution_x = 1024
r.resolution_y = 1024

# Set the output file format
r.image_settings.file_format = 'PNG'


def append_misc():
path = PARTS_DIR + "misc/" + "misc.blend/Collection/"
collection_name = "misc"
bpy.ops.wm.append(filename=collection_name, directory=path)

# Link camera to scene
cam = bpy.data.objects["camera"]
scene = bpy.context.scene
scene.camera = cam


def append_body(trait_value):
body_name = "body_" + trait_value

path = PARTS_DIR + "body/" + body_name + ".blend/Collection/"
bpy.ops.wm.append(filename=body_name, directory=path)


def append_head(trait_value):
head_name = "head_" + trait_value

path = PARTS_DIR + "head/" + head_name + ".blend/Collection/"
bpy.ops.wm.append(filename=head_name, directory=path)


def render(id):
# Render
bpy.ops.render.render(write_still=1)

# Save
bpy.data.images['Render Result'].save_render(filepath=OUTPUTS_DIR + id + ".png")


def remove_parts():
# Remove all parts except "misc"
for col in bpy.data.collections:
if col.name != "misc":
for obj in col.objects:
bpy.data.objects.remove(obj)
bpy.data.collections.remove(col)
continue


def generate(id, metadata):
for attr in metadata["attributes"]:
# Body
if attr["trait_type"] == "Body" and attr["value"] != "":
append_body(attr["value"])
# Head
if attr["trait_type"] == "Head" and attr["value"] != "":
append_head(attr["value"])

render(str(id))

# After rendered, remove all parts
remove_parts()


def main():
print("Start generating models...")

init()
set_render_config()
append_misc() # Regarding "misc", add it to the scene in advance because it is common to all characters.

# Generate character images
for i in TOTAL_CHARACTERS:
with open(OUTPUTS_DIR + str(i) + ".json", 'r') as metaJson:
data = json.load(metaJson)
generate(i, data)
print("Generated model id: {}\n".format(id))

main()

4. Jalankan Skrip

Setelah membuat file skrip, Anda dapat menjalankannya.
Buka Blender dan klik ruang kerja Scripting di sebelah Geometry Nodes di bagian atas editor.


Untuk memeriksa status selama pemrosesan, Anda dapat membuka konsol dengan mengklik Window”-> “Toggle System Console” di menu atas.

4-1. Hasilkan metadata

Klik Open --> pilih a gen_metadata.py --> klik Run Script .

Seperti yang ditunjukkan oleh kode sumber di atas ( gen_metadata.py , baris 68-73), Jika kombinasi data terduplikasi, proses akan dibatalkan.
Dalam hal ini, Anda perlu mengklik Run Script lagi.

Setelah itu, Anda dapat melihat bahwa file metadata seperti 0.json , 1.json dihasilkan di folder output .

4-2. Hasilkan karakter

Klik Open -> pilih gen_model.py -> klik Run Script .

Setelah itu, Anda dapat melihat bahwa file gambar yang dirender seperti 0.png , 1.png dihasilkan di folder output .

 



Post a Comment for "Cara Membuat Ribuan Koleksi NFT 3D Menggunakan Blender"