Files
PythonInUnreal/tools/create_character.py
T
2026-10-31 17:03:41 +01:00

59 lines
2.1 KiB
Python

"""Blender --background --python tools/create_character.py (does not need UE)."""
from pathlib import Path
import bpy
root = Path(__file__).resolve().parents[1]
target = root / "source_assets/character/character.blend"
if target.exists():
raise RuntimeError(f"Plik juz istnieje: {target}. Generator nie nadpisuje Twojego modelu.")
bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete(use_global=False)
collection = bpy.data.collections.new("Character")
bpy.context.scene.collection.children.link(collection)
def material(name, color):
mat = bpy.data.materials.new(name)
mat.use_nodes = True
bsdf = mat.node_tree.nodes.get("Principled BSDF")
bsdf.inputs["Base Color"].default_value = (*color, 1)
bsdf.inputs["Roughness"].default_value = 0.5
mat.diffuse_color = (*color, 1)
return mat
blue = material("Body_Blue", (0.03, 0.3, 0.8))
orange = material("Head_Orange", (0.9, 0.22, 0.04))
dark = material("Eyes", (0.01, 0.01, 0.015))
def part(name, position, scale, mat, sphere=False):
if sphere:
bpy.ops.mesh.primitive_uv_sphere_add(segments=24, ring_count=16, radius=0.5, location=position)
else:
bpy.ops.mesh.primitive_cube_add(size=1, location=position)
obj = bpy.context.object
obj.name = name
obj.scale = scale
for owner in list(obj.users_collection):
owner.objects.unlink(obj)
collection.objects.link(obj)
obj.data.materials.append(mat)
if sphere:
for polygon in obj.data.polygons:
polygon.use_smooth = True
return obj
part("Body", (0, 0, 0.9), (0.55, 0.8, 0.9), blue)
part("Head", (0, 0, 1.75), (0.7, 0.7, 0.7), orange, True)
part("LeftLeg", (0, -0.23, 0.25), (0.35, 0.3, 0.5), blue)
part("RightLeg", (0, 0.23, 0.25), (0.35, 0.3, 0.5), blue)
part("Eye_L", (0.31, -0.14, 1.82), (0.12, 0.12, 0.12), dark, True)
part("Eye_R", (0.31, 0.14, 1.82), (0.12, 0.12, 0.12), dark, True)
bpy.context.scene.unit_settings.system = "METRIC"
target.parent.mkdir(parents=True, exist_ok=True)
bpy.ops.wm.save_as_mainfile(filepath=str(target))
print("Gotowy model: " + str(target))