[AI Collaboration] Learning English through AI-Driven 3D Modeling

Learning English through AI-Driven 3D Modeling

The Story

Google Gemini generated a Python script to reconstruct a 3D model of a golden retriever puppy by analyzing a reference image. Below is the reference photo and the resulting 3D model rendered in Blender. By following this visual-to-code transformation, we can learn professional English words and phrases from the AI’s own technical logic.

Reference Photo

Reference Image

3D Model Render

3D Model


AI's Explanation

  1. Deconstructing the Form: "I treated the puppy's organic shape as a collection of primitives, specifically using spheres for the head and torso to maintain a soft, rounded appearance."
  2. Precise Placement: "Each component is assigned to a specific coordinate within the 3D space to ensure the proportions remain anatomically accurate."
  3. Surface Texture: "I adjusted the roughness attribute of the material to simulate how light interacts with fur, ensuring the model doesn't look too shiny or metallic."

Key Words and Phrases

primitive

A simple geometric shape (such as a sphere, cube, or cylinder) used as a basic building block in 3D modeling.

Context: "I treated the puppy's organic shape as a collection of primitives."

coordinate

A set of numbers used to specify the exact position of a point or object in a 3D space.

Context: "Each component is assigned to a specific coordinate."

roughness

A measurement of how light scatters across a surface; in 3D design, it determines how "matte" or "shiny" an object appears.

Context: "I adjusted the roughness attribute of the material."

Script Preview

You can run this script in Blender to make the 3D model featured in this article.

Python
import bpy
import math

def create_styled_puppy():
    # Clear existing objects
    bpy.ops.object.select_all(action='SELECT')
    bpy.ops.object.delete()

    # --- MATERIAL SETUP ---
    def create_material(name, color):
        mat = bpy.data.materials.new(name=name)
        mat.use_nodes = True
        nodes = mat.node_tree.nodes
        bsdf = nodes.get("Principled BSDF")
        bsdf.inputs['Base Color'].default_value = color
        # Reduce roughness for a slightly shiny "toy" look
        bsdf.inputs['Roughness'].default_value = 0.3
        return mat

    mat_body = create_material("Mat_Tan", (0.8, 0.55, 0.3, 1))
    mat_black = create_material("Mat_Black", (0.02, 0.02, 0.02, 1))
    mat_beauty = create_material("Mat_Nose", (0.1, 0.05, 0.02, 1))

    # --- HELPER FUNCTIONS ---
    def apply_style(obj, material):
        obj.data.materials.append(material)
        # Smooth shading and subdivision for the "clean" look
        bpy.context.view_layer.objects.active = obj
        bpy.ops.object.shade_smooth()
        mod = obj.modifiers.new(name="Subsurf", type='SUBSURF')
        mod.levels = 2

    def add_sphere(name, location, scale, material):
        bpy.ops.mesh.primitive_uv_sphere_add(radius=1, location=location)
        obj = bpy.context.active_object
        obj.name = name
        obj.scale = scale
        apply_style(obj, material)
        return obj

    def add_cylinder(name, location, rotation, scale, material):
        bpy.ops.mesh.primitive_cylinder_add(radius=1, depth=2, location=location, rotation=rotation)
        obj = bpy.context.active_object
        obj.name = name
        obj.scale = scale
        apply_style(obj, material)
        return obj

    # --- GENERATING THE DOG ---
    
    # Body sections
    add_sphere("Body_Front", (0, 0, 1.5), (1.2, 1.2, 1.2), mat_body)
    add_sphere("Body_Mid", (0, 1.2, 1.4), (1.0, 1.0, 1.0), mat_body)
    add_sphere("Body_Back", (0, 2.4, 1.5), (1.1, 1.1, 1.1), mat_body)

    # Head and Nose
    add_sphere("Head", (0, -0.8, 2.8), (1.1, 1.1, 1.1), mat_body)
    add_sphere("Snout", (0, -1.8, 2.6), (0.5, 0.5, 0.4), mat_body)
    add_sphere("Nose_Tip", (0, -2.25, 2.7), (0.15, 0.15, 0.15), mat_beauty)
    
    # Eyes
    add_sphere("Eye_L", (-0.4, -1.65, 3.1), (0.12, 0.12, 0.12), mat_black)
    add_sphere("Eye_R", (0.4, -1.65, 3.1), (0.12, 0.12, 0.12), mat_black)
    
    # Ears
    for side in [-1, 1]:
        bpy.ops.mesh.primitive_cube_add(location=(1.1 * side, -0.6, 3.0), rotation=(0.3, 0.5 * side, 0))
        ear = bpy.context.active_object
        ear.scale = (0.1, 0.6, 0.4)
        apply_style(ear, mat_body)

    # Legs and Paws
    leg_coords = [(-0.8, 0.2), (0.8, 0.2), (-0.8, 2.2), (0.8, 2.2)]
    for i, (x, y) in enumerate(leg_coords):
        add_cylinder(f"Leg_{i}", (x, y, 0.7), (0, 0, 0), (0.25, 0.25, 0.7), mat_body)
        add_sphere(f"Paw_{i}", (x, y - 0.1, 0.1), (0.35, 0.35, 0.3), mat_body)

    # Tail
    add_cylinder("Tail", (0, 3.2, 2.3), (math.radians(-45), 0, 0), (0.15, 0.15, 0.6), mat_body)

create_styled_puppy()

Comments

Popular posts from this blog

シャキシャキ美味しい!スナップエンドウ、英語でどう言う?

[AI & Seasonal English]: 半夏生編 -「半夏生」で日本の美しい暦と英語を学ぼう!

[AI & Seasonal English] 【スパイス香る】ドイツのクリスマスパン「シュトーレン(Stollen)」の歴史と「しっとり感」を語る英語