В блендере можно как-то так автоматом 3д модель создавать.
import bpy
import mathutils
def create_planet_with_moons(radius, atmosphere_thickness, distance_to_sun, sun_radius, sun_color, texture_number, atmosphere_color, atmosphere_alpha, moon_radii, moon_distances, moon_texture_numbers):
# Создаем планету
planet, atmosphere, sun = create_planet(radius, atmosphere_thickness, distance_to_sun, sun_radius, sun_color, texture_number, atmosphere_color, atmosphere_alpha)
# Создаем спутники
moons = []
for i in range(len(moon_radii)):
moon_radius = moon_radii[i]
moon_distance = moon_distances[i]
moon_texture_number = random.choice(moon_texture_numbers)
moon = create_moon(moon_radius, moon_distance, planet, moon_texture_number)
moons.append(moon)
# Возвращаем список объектов
return [planet, atmosphere, sun] + moons
def create_moon(radius, distance, planet, texture_number):
# Создаем сферу для спутника
bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, enter_editmode=False, location=(0, 0, 0))
moon = bpy.context.active_object
# Создаем материал для спутника
moon_material =
bpy.data.materials.new(name="Moon Material")
moon_material.use_nodes = True
moon_material.node_tree.nodes.clear()
moon_material_output =
moon_material.node_tree.nodes.new(type='ShaderNodeOutputMaterial')
moon_diffuse =
moon_material.node_tree.nodes.new(type='ShaderNodeBsdfDiffuse')
moon_texture =
moon_material.node_tree.nodes.new(type='ShaderNodeTexImage')
moon_texture.image = bpy.data.images.load(f"moon_texture_{texture_number}.jpg")
moon_material.node_tree.links.new(moon_texture.outputs[0], moon_diffuse.inputs[0])
moon_material.node_tree.links.new(moon_diffuse.outputs[0], moon_material_output.inputs[0])
moon.data.materials.append(moon_material)
# Перемещаем спутник на заданное расстояние от планеты
moon.location = mathutils.Vector((distance, 0, 0))
moon.parent = planet
# Возвращаем объект спутника
return moon