AEC MASSING ANIMATION · v4 · MAXIMUM ║ Blender Python Script | Ultra-High-LOD Urban Development
╔══════════════════════════════════════════════════════════════════════════════╗
║ ║
║ AEC MASSING ANIMATION · v4 · MAXIMUM ║
║ Blender Python Script | Ultra-High-LOD Urban Development ║
║ ║
╚══════════════════════════════════════════════════════════════════════════════╝
Created with Claude (Anthropic) · Blender 3.x / 4.x compatible
600 frames · 25 seconds · 24 fps · 1920 × 1080
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
QUICK START
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. Open Blender (3.x or 4.x)
2. Switch to the Scripting workspace (top tab bar)
3. Click "Open" and select aec_massing_animation_v4.py
— OR — paste the entire script into a new Text block
4. Press Alt + P to run
5. Press Numpad 0 to jump to camera view
6. Press Space to play the animation
The script is safe to re-run at any time. It performs a full scene
reset at the start of every execution, so you will never get duplicate
objects or materials from multiple runs.
If Blender crashes on v4, open the System Console first
(Windows: Window → Toggle System Console | Mac/Linux: launch Blender
from a terminal), then re-run. The last printed line will show exactly
which section failed. Report that line and a patch can be issued fast.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
WHAT THE SCRIPT BUILDS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MASSING
Podium 6 storeys / 24 m
Polished black granite base band
Board-formed concrete body
8-column arcade with soffit beam
Lobby glazing strip
ETFE entry canopy over main entrance
Retail / cafe units at grade (timber + glass)
Underground entrance with glazed box + glow signage
Basement carpark ramp (below grade)
Office Tower 40 storeys / 168 m
3-segment setback profile
Per-floor concrete slab + spandrel bands
Vertical mullion fins every 1.5 m
Animated louvre fins (open 0°→45° as sun rises)
Structural concrete core columns at base
Corten steel crown with emissive warm strip
Blue beacon mast
Full rooftop kit:
— Cooling towers (x2)
— Plant room
— Lift overrun
— Solar PV array (4 rows × 5 panels)
— Parapet walls all sides
— Helipad (rubber disc + H marking + red beacon)
— 3 wind turbines with spinning blades (22 rpm)
— Infinity pool with animated rippling water
— Underwater pool point light
Residential Tower 32 storeys / 132 m
2-segment setback profile
Per-floor slab + spandrel bands
Balconies every 3 floors on east face
Solar PV arrays (3 rows)
Lift overrun + water tanks
Setback terrace at mid-tower
Hotel Mid-Rise 12 storeys / 48 m
Lower 7 st: terracotta brick + Voronoi crack overlay
Upper 5 st: white render
Timber screen wall on west facade
Parapet + granite coping
Plant room + louvre screen
Solar panels on roof
Sky Bridge Glazed link connecting Office + Residential
at approximately 104 m elevation
Context 16 surrounding buildings across 3 LOD tiers
Near tier: animated window spandrel bands
Mid tier: massed volumes with material variation
Far tier: simple background volumes
GROUND PLANE & INFRASTRUCTURE
Roads Dual carriageway (NS + EW)
Cycle lanes (blue tinted strips)
Zebra crossings at all 4 junctions
Bus lane with yellow stripe marking
Tram tracks (polished rail strips, NS route)
Kerb upstands
Site Granite sett plaza paving
Perimeter site wall + gate
Basement carpark ramp entry
Street Furniture Bus shelters (glass + metal frame) ×2
Benches ×8
Bollards ×16
Planting pots with plants ×12
Landscape Green roofs on podium + hotel
Planting beds on podium roof ×6
Trees (trunk + canopy) ×14
Hedgerows ×6
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MATERIALS (all built in Shader Node Editor)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Glass Office IOR-correct Glass BSDF + Fresnel/Glossy mix
Cool blue-green tint · IOR 1.52
Glass Residential Same node setup, warmer grey-green tint
Spandrel Dark anisotropic metallic panel · near-black
Mullion Brushed stainless · Wave Texture anisotropy
Concrete 3-layer Noise stack:
Layer 1 — board grain (low frequency)
Layer 2 — aggregate texture (high frequency)
Mixed + Bump for surface relief
Two variants: standard grey + darker podium
Corten Steel Noise colour ramp · warm oxide tones
Heavy Bump for surface texture
Granite Polished black · Noise variation · rough 0.04
White Render Subtle Noise micro-bump · warm off-white
Terracotta Brick Brick Texture + Voronoi crack overlay + Bump
(compatible with all Blender 3.x / 4.x input names)
Asphalt Road Noise dark variation · rough 0.97
Granite Sett Paving Voronoi sett pattern + Bump
Green Roof 2-Noise blend: moss patches + sedum texture · SSS
Solar PV Anisotropic dark blue-black · rough 0.08
Water (Pool) Glass BSDF deep blue-green + Glossy Fresnel mix
Noise Bump for ripple · animated W offset
ETFE Canopy Translucent BSDF + Glossy mix · milky white
Timber Wave ring grain + Noise overlay · warm oak tones
Rail Steel Anisotropic polished · silver
Helipad Dark rubber Principled · rough 0.90
Louvre / Bronze Anodised aluminium · warm bronze tone
Context ×3 tones Principled + Noise age variation
A: neutral grey-blue
B: warm buff
C: cool slate
Emissive Warm Emission node · warm white 2700 K · strength 12
Emissive Blue Emission node · cool blue · strength 6
Emissive Amber Emission node · warm amber (retail signage)
Floor Plate Off-white concrete slab edge · rough 0.65
Kerb / Marking Light grey + white road markings
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ANIMATION — 5-ACT STRUCTURE (600 frames / 25 seconds)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Act 0 fr 1 – 25 Pre-dawn static wide shot
Orange-tinted Nishita sky · sun at 4°
Crane silhouette visible against sky
Act 1 fr 25 – 180 Construction: floor-by-floor rise
Podium grows first (fr 10–44)
Office tower floors animate sequentially
Residential floors follow offset
Hotel rises last in this act
Louvre fins open progressively as sun rises
Handheld camera shake (±0.15 m amplitude)
Act 2 fr 180 – 300 Reveal
Site hoarding disappears
Construction crane disappears
Street furniture fades in
Landscape: trees, hedges, planting beds
Context buildings fully present
People proxies begin crossing paths
Vehicles animate along road axes
Act 3 fr 300 – 440 Cinematic 330° orbit
Camera cranes up from street to mid-tower
Golden hour sky · sun at 65°+
Focal length breathes: 50 mm → 54 mm
Act 4 fr 440 – 520 Rooftop hero shots
Infinity pool + rippling water
Wind turbines spinning (22 rpm loop)
Helipad + red beacon
Solar array + sky bridge
Tight DOF · f/3.5
Act 5 fr 520 – 600 Zenith aerial pull-back
Camera rises to 200 m
Full site revealed in context
65 mm focal length · wide aerial feel
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CAMERA — 16 KEYFRAMES
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
All keyframes use Bezier interpolation with EASE_IN_OUT easing.
A Track-To constraint keeps the camera locked to an animated empty
target, so the look-at point rises with the construction.
Focal length arc 28 mm → 65 mm across the 5 acts
Aperture arc f/7.1 → f/2.8 (bokeh increases for close shots)
Focus distance Animated independently per keyframe
Handheld shake Frames 25–180 only · ±0.15 m XY · ±0.05 m Z
Applied every 6 frames for natural feel
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
LIGHTING
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Sky Nishita physically-based sky shader
Sun elevation animated: 4° → 76° over 600 frames
Dust density animated: 1.2 → 0.05 (dawn haze clears)
Sky background strength animated: 1.2 → 1.8
Sun Single Sun light · 0.5° angular diameter
Colour animated: warm orange dawn → neutral white noon
Energy animated: 0.8 → 6.4 over 600 frames
Rotation tracks sun elevation arc
Fill — North Area light · 580 W · cool sky blue
Animates from 200 W (dawn) → 580 W (noon)
Fill — East Area light · 380 W · neutral
Sky Dome Large overhead Area light · 340 W
Simulates sky hemisphere bounce
Street Lamps 12 lamp posts (post + arm + emissive globe)
Point lights activate at blue hour (frame 480)
Warm amber colour · physically positioned
Building Uplights 6 Spot lights at tower bases
Activate at dusk, full intensity at night
Pool Light Point light beneath infinity pool surface
Warm cyan · animates on at Act 4
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
RENDER SETTINGS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Engine Cycles
Samples 128 per frame
Denoising OIDN (OpenImageDenoise)
Resolution 1920 × 1080 (Full HD)
Frame rate 24 fps
Color management Filmic · High Contrast · Exposure 0.45
To render the full animation:
Render menu → Render Animation (or Ctrl + F12)
Set output path in Properties → Output before rendering
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
BLENDER VERSION COMPATIBILITY
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
The script handles API differences between Blender 3.x and 4.x
using try/except blocks around every breaking change:
blend_method / shadow_method Removed in Blender 4.2+
Specular IOR Level vs Specular Renamed in Blender 4.0
Subsurface Weight vs Subsurface Renamed in Blender 4.0
Anisotropic KeyError-safe access
Brick Texture input names Try-loop over known variants
Noise Texture W input Try/except if dimension != 4D
Tested against Blender 3.6 LTS and 4.x.
Blender 2.9x is NOT supported.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SCENE COLLECTIONS (Outliner)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
01_SITE
├── GROUND Base plane + plaza paving
├── ROADS Road planes, cycle lanes, markings, tram tracks
├── STREET_FURN Bus shelters, benches, bollards, pots
├── CONTEXT 16 surrounding buildings
├── PODIUM Podium body, arcade, lobby, canopy, retail
├── RETAIL Ground floor retail / cafe units
├── TOWERS Tower envelope segments
├── FLOORS Per-floor slab + spandrel objects
├── FACADE Mullion fins, spandrel bands, louvres
├── LOUVRES Animated louvre fin objects
├── BALCONIES Residential balcony slabs + balustrades
├── SKYBRIDGE Glazed link between towers
├── ROOF All rooftop elements (plant, solar, helipad, pool)
├── TURBINES Wind turbine masts + blades
├── HOTEL Hotel body, crown, plant room
├── LANDSCAPE Green roofs, trees, hedges, planting beds
├── WATER Infinity pool + pool light
└── INFRA Site wall, gate, carpark ramp, underground entrance
02_LIGHTING Sun, fill lights, street lamps, uplights
03_CAMERA Camera + track-to target empty
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TROUBLESHOOTING
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Script crashes Blender
Open the System Console before running:
Windows → Window menu → Toggle System Console
Mac/Linux → Launch Blender from a terminal window
The last printed line before the crash identifies the failing section.
Each section prints a progress marker like " Podium..." or " Turbines..."
Share that output for a targeted patch.
Script runs but no objects appear
Check that a 3D Viewport is open and visible when you run.
Some geometry operators require an active viewport context.
Wind turbines not spinning
The spin_loop() function uses large euler rotation values.
In the NLA Editor or Graph Editor, set the rotation curve to LINEAR
interpolation — the script does this automatically but some Blender
builds override it.
Water not rippling
The Noise W animation only works when the Noise Texture dimension
is set to 4D. Open the Shader Editor, find MAT_Water, click the
Noise Texture node, and set Dimensions to 4D. Then re-run or
manually add W keyframes at frames 180 and 600.
Materials look wrong / too dark
Ensure Color Management is set to Filmic (not Standard).
Properties → Scene → Color Management → View Transform → Filmic
Animation plays back slowly in viewport
Switch viewport shading to Solid or Material Preview (not Rendered)
for smooth playback. Use Cycles only for final rendering.
Grey/pink missing material error on some objects
Re-run the script (Alt+P). The full reset clears any orphaned
data blocks that can cause material assignment failures.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CUSTOMISATION TIPS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Change tower height
Edit the OFLOORS or RFLOORS constants and the segment heights
in the tuples near the top of each tower section.
Change glass tint
Find mat_glass() calls and adjust the tint=() RGB tuple.
Office glass: (0.50, 0.74, 0.96) — cool blue
Resi glass: (0.60, 0.88, 0.78) — warm green
Change animation length
Edit scene.frame_end at the top of the script.
Also adjust the cam_keys list and sky/sun keyframe frames accordingly.
Add a custom material
Copy the mat_simple() pattern — it takes a name, RGB tuple,
roughness, metallic, and specular value. All other material
functions follow the same node-builder pattern.
Disable a section
Each major section (TURBINES, PEOPLE, VEHICLES, etc.) is clearly
delimited with comments. Comment out or delete the entire section
to skip it without affecting the rest of the script.
Export to other formats
After running, use File → Export to save as FBX, glTF, OBJ, etc.
Materials will export with varying fidelity depending on format.
glTF 2.0 supports Principled BSDF best.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
FILE HISTORY
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
v1 Initial build — basic massing, 7 materials, 300 frames
v2 Floor-by-floor animation, street grid, context buildings,
animated sky, 3-act structure, 400 frames
v3 High-LOD mullions, arcade, full rooftop kit, 16 context buildings,
3-layer concrete, corten crown, street furniture, 480 frames
v4 Wind turbines, helipad, infinity pool, sky bridge, balconies,
louvre fins, tram tracks, retail units, ETFE canopy, underground
entrance, 5-act camera, day→night arc, 600 frames ← CURRENT
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
END OF README
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━