import bpy import bmesh # Delete default objects bpy.ops.object.select_all(action='SELECT') bpy.ops.object.delete(use_global=False) # Create an Icosphere bpy.ops.mesh.primitive_ico_sphere_add(subdivisions=4, radius=1.0, location=(0, 0, 0)) obj = bpy.context.active_object obj.name = "CrystalMesh" # Add Subdivision Surface Modifier subdiv = obj.modifiers.new(name="Subdivision", type='SUBSURF') subdiv.levels = 2 subdiv.render_levels = 2 # Add Displacement Modifier with Voronoi Texture disp = obj.modifiers.new(name="Displace", type='DISPLACE') tex = bpy.data.textures.new("VoronoiTex", type='DISTORTED_NOISE') tex.distortion = 1.0 disp.texture = tex disp.strength = 0.3 # Add Bevel Modifier bevel = obj.modifiers.new(name="Bevel", type='BEVEL') bevel.width = 0.02 bevel.segments = 2 bevel.limit_method = 'ANGLE' # Apply all modifiers bpy.ops.object.convert(target='MESH') # Create a new material mat = bpy.data.materials.new(name="CrystalMaterial") mat.use_nodes = True nodes = mat.node_tree.nodes links = mat.node_tree.links # Clear default nodes for node in nodes: nodes.remove(node) # Create nodes output = nodes.new(type='ShaderNodeOutputMaterial') principled = nodes.new(type='ShaderNodeBsdfPrincipled') fresnel = nodes.new(type='ShaderNodeFresnel') emission = nodes.new(type='ShaderNodeEmission') mix_shader = nodes.new(type='ShaderNodeMixShader') # Set node properties principled.inputs['Base Color'].default_value = (0.5, 0.2, 1.0, 1) # Violet principled.inputs['Transmission'].default_value = 0.8 principled.inputs['Roughness'].default_value = 0.1 emission.inputs['Color'].default_value = (1.0, 1.0, 1.0, 1) emission.inputs['Strength'].default_value = 5.0 # Link nodes links.new(fresnel.outputs[0], mix_shader.inputs[0]) links.new(principled.outputs[0], mix_shader.inputs[1]) links.new(emission.outputs[0], mix_shader.inputs[2]) links.new(mix_shader.outputs[0], output.inputs[0]) # Assign material to object obj.data.materials.append(mat) # Unwrap UVs bpy.ops.object.mode_set(mode='EDIT') bpy.ops.uv.smart_project() bpy.ops.object.mode_set(mode='OBJECT') # Export as FBX bpy.ops.export_scene.fbx(filepath="CrystalMesh.fbx", use_selection=True) # Export as GLTF bpy.ops.export_scene.gltf(filepath="CrystalMesh.glb", export_format='GLB', use_selection=True)