Learning English through AI-Driven 3D Modeling: Crafting a Kangaroo

Learning English through AI-Driven 3D Modeling: Crafting a Kangaroo

The Story

Australia's most iconic marsupial, the kangaroo, is defined by its unique anatomy—powerful hind legs built for jumping and a thick tail that acts as a tripod. Recreating this form in a 3D environment requires more than just placing shapes; it involves understanding how different parts of the body relate to one another. By using a Python script to automate the process, we can precisely control the proportions and the skeletal-like hierarchy of the model. This project provides an excellent opportunity to learn the English terminology used to describe object structures and transformations within Blender's 3D viewport.

A realistic reference photo of a red kangaroo standing in the Australian outback
Reference Image
3D kangaroo model created in Blender viewport using primitive shapes and custom colors
3D Model Render

AI's Explanation

  1. Structural Hierarchy: "To ensure the model moves realistically, I established parenting between the torso and limbs, creating a logical tree of object dependencies."
  2. Primitive Transformation: "The kangaroo's tail and snout were shaped by adjusting the scale of basic UV spheres along specific axes to achieve the desired length."
  3. Color Assignment: "The outback-inspired look was finalized by defining unique RGB values for different materials, such as Terracotta for the fur and Sandy White for the belly."

Key Words and Phrases

parenting

The process of linking objects so that 'child' objects follow the spatial transformations of their 'parent'. This hierarchy ensures that motion is inherited through the chain.

Context: "I established parenting between the torso and limbs."

scale

The size factor of an object. Changing the scale allows you to stretch or squash a simple primitive into a specific anatomical part like a tail.

Context: "The tail was shaped by adjusting the scale of basic UV spheres."

RGB values

A system for representing colors by combining Red, Green, and Blue light. It is the standard way to define material colors in 3D software.

Context: "The look was finalized by defining unique RGB values."

Script Preview

Copy the code below into Blender's Text Editor to generate your own Kangaroo model.

Python
import bpy
import math

def create_body_part(name, scale, location, rotation=(0, 0, 0), color=(0.8, 0.4, 0.2, 1)):
    bpy.ops.mesh.primitive_uv_sphere_add(radius=1, location=location, rotation=rotation)
    obj = bpy.context.active_object
    obj.name = name
    obj.scale = scale
    
    mat = bpy.data.materials.new(name=f"Mat_{name}")
    mat.use_nodes = True
    nodes = mat.node_tree.nodes
    nodes["Principled BSDF"].inputs[0].default_value = color
    obj.data.materials.append(mat)
    return obj

# Clear scene
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete()

# Colors (RGB values)
TERRACOTTA = (0.7, 0.3, 0.1, 1)
SANDY_WHITE = (0.9, 0.8, 0.7, 1)
DARK_ACCENT = (0.1, 0.1, 0.1, 1)

# 1. Create all parts first
torso = create_body_part("Torso", (0.9, 0.7, 1.5), (0, 0, 3.0), rotation=(math.radians(-20), 0, 0), color=SANDY_WHITE)
tail = create_body_part("Tail", (0.4, 2.5, 0.4), (0, -2.0, 1.2), rotation=(math.radians(25), 0, 0), color=TERRACOTTA)

thigh_l = create_body_part("Thigh_L", (0.5, 0.8, 1.2), (-0.7, 0, 1.35), color=TERRACOTTA)
thigh_r = create_body_part("Thigh_R", (0.5, 0.8, 1.2), (0.7, 0, 1.35), color=TERRACOTTA)
foot_l = create_body_part("Foot_L", (0.3, 1.2, 0.2), (-0.7, 0.5, 0.1), color=DARK_ACCENT)
foot_r = create_body_part("Foot_R", (0.3, 1.2, 0.2), (0.7, 0.5, 0.1), color=DARK_ACCENT)

neck = create_body_part("Neck", (0.4, 0.4, 0.8), (0, 0.35, 4.4), rotation=(math.radians(-15), 0, 0), color=TERRACOTTA)
head = create_body_part("Head", (0.5, 0.8, 0.5), (0, 0.8, 4.8), color=TERRACOTTA)
arm_l = create_body_part("Forelimb_L", (0.2, 0.2, 0.8), (-0.6, 0.6, 3.5), rotation=(math.radians(30), 0, 0), color=TERRACOTTA)
arm_r = create_body_part("Forelimb_R", (0.2, 0.2, 0.8), (0.6, 0.6, 3.5), rotation=(math.radians(30), 0, 0), color=TERRACOTTA)

ear_l = create_body_part("Ear_L", (0.15, 0.1, 0.6), (-0.3, 0.6, 5.4), rotation=(math.radians(-10), 0, math.radians(20)), color=DARK_ACCENT)
ear_r = create_body_part("Ear_R", (0.15, 0.1, 0.6), (0.3, 0.6, 5.4), rotation=(math.radians(-10), 0, math.radians(-20)), color=DARK_ACCENT)
eye_l = create_body_part("Eye_L", (0.12, 0.12, 0.12), (-0.35, 1.1, 5.0), color=DARK_ACCENT)
eye_r = create_body_part("Eye_R", (0.12, 0.12, 0.12), (0.35, 1.1, 5.0), color=DARK_ACCENT)
snout = create_body_part("Snout", (0.3, 0.4, 0.3), (0, 1.4, 4.7), color=DARK_ACCENT)

# 2. Establish Hierarchy (Parenting)
relationships = [
    (tail, torso),
    (thigh_l, torso),
    (thigh_r, torso),
    (neck, torso),
    (arm_l, torso),
    (arm_r, torso),
    (head, neck),
    (snout, head),
    (eye_l, head),
    (eye_r, head),
    (ear_l, head),
    (ear_r, head),
    (foot_l, thigh_l),
    (foot_r, thigh_r),
]

for child, parent in relationships:
    child.parent = parent
    child.matrix_parent_inverse = parent.matrix_world.inverted()

Comments

Popular posts from this blog

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

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

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