Heron
Back to Work

Lunar Base

A 3D scene completed independently: Maya modeling, materials, scene assembly and lighting.

Environment Art3D SceneMayaSubstance PainterArnold

Role

Environment Artist (solo)

Engine

Maya + Substance Painter + Arnold + AE

Team

Solo project

Duration

2025

Overview

A lunar base interior built entirely on my own for the 3D Modelling course. Rather than present this as a gallery of renders, this page reviews it the way an environment artist would review a scene: stage by stage down the art pipeline, noting where each stage broke and what the fix cost.

The final scene runs roughly 426,000 triangles across 216,000 vertices, textured with 2048 × 2048 PBR sets authored per asset. The pipeline is a conventional one:

Blockout → mesh cleanup → UV → Substance Painter → material assignment and lookdev in Maya under ACES → set dressing and foliage → Arnold lighting and render → After Effects comp.

The single most useful thing I took from building it is that these stages are not a queue you walk down once. Cleanup is a gate, and skipping it early meant paying at every gate after.

1. Blockout & Modelling

The scene was built as a modular kit rather than a single mesh: floor tiles, barriers, barrier windows, a doorway, stairs, a viewport, plus set-dressing props (cultivator basins, a table, a cup, a telescope). The dome is a structural lattice, which is what sets the silhouette and does most of the compositional work before any texture exists.

Working in white this long is the right call for a scene like this. With the geometry counters visible in the viewport, form and readability get judged on their own, and the poly budget stays a conscious decision instead of an accident discovered at render time.

Untextured lunar base model in the Maya viewport with vertex, face and triangle counters
Whitebox stage: the dome lattice and modular floor establish the silhouette, with geometry counters kept visible (211k verts / 416k tris at this point)

2. Geometry Integrity — the gate I learned to respect

Early in the project Maya's Unfold simply failed. The cause was non-manifold geometry and "bowtie" vertices — topology that has no valid flattened solution, so the algorithm has nothing to solve.

The fix was to adopt a strict mesh cleanup protocol as a standing step rather than a rescue operation: hunt down T-junctions, merge stray vertices, and verify the mesh is watertight and manifold before it is allowed downstream.

This is the stage that a portfolio render never shows and the one that determines whether the rest of the pipeline is even possible. From an environment art standpoint the lesson is procedural, not artistic: cleanup belongs immediately after modelling each kit piece, because a broken mesh does not announce itself until UV or render, by which point the cost of tracing it has multiplied.

3. UV & Texel Density

With clean topology, UVs became the next failure point. Several components suffered UV explosions and extreme stretching, which showed up as blurry, "barcode-like" texture on the table surfaces — the classic symptom of wildly uneven texel density rather than a texturing mistake.

The resolution came from choosing the algorithm to suit the surface rather than using one everywhere: planar mapping for flat, panel-like faces and Unfold3D for the more organic shells, then checking that texel density stayed uniform across the modular floor tiles. Uniform density across a modular kit matters more than perfect packing on any single piece, because tiles sit next to each other in the final scene and any density mismatch reads instantly as a seam.

Telescope wireframe in Maya beside its unwrapped UV layout in the UV editor
UV unwrapping the telescope: hard-surface shells cut and laid out per material, with the selected piece at roughly 1.7k triangles

This was the hardest part of the project, and the comparison I keep returning to is wrapping a gift without wrinkles — the surface is fixed, so all the skill sits in where you choose to cut.

4. Texturing in Substance Painter

Texturing was organised as one texture set per asset at 2048²FloorTile, Barriers, BarrierWindow, Doorway, Stairs, ViewPort, BasinCultivater, LowCultivater, Table, Cup, DataBase, Ground. Naming sets after the kit pieces is what keeps a modular scene navigable; the one weak point visible in my own project window is a set still carrying the default Standard_Surface name, which is exactly the kind of thing that becomes unfindable once a scene grows.

Substance Painter project showing twelve 2K texture sets across the modular kit
One 2K texture set per kit piece, authored against the assembled modular layout
Substance Painter view of platform and props with tiling controls
Set-dressing props and ground, with UV tiling driven per material

The channel stack was authored as full PBR — height, roughness, metallic, normal, opacity and emissive. Carrying opacity and emissive through the export is what allows the glass panels and the lit elements to behave correctly once they reach Arnold, rather than being faked later in comp.

Substance Painter channel list showing height, roughness, metallic, normal, opacity and emissive for the glass and bar sets
Glass and bar sets carrying a full channel stack — height, roughness, metallic, normal, opacity, emissive — so transparency survives the handoff to Arnold

5. Material Assignment & Lookdev in Maya

Back in Maya the maps were assigned per texture set and the scene was viewed under ACES 1.0 SDR-video (sRGB) colour management, so that what I judged in the viewport matched what Arnold would ultimately produce. Setting colour management before lookdev rather than after is a small discipline that saves re-authoring albedo later.

The useful thing about assembling in passes is that the scene stays reviewable throughout: in the interior below, textured architecture sits alongside props still in white, which makes it obvious which assets have cleared the pipeline and which have not.

Textured lunar base seen from outside in the Maya viewport
Materials assigned across the shell, judged under ACES colour management
Interior view mixing textured architecture with untextured white props
Assembly in passes: textured architecture against still-white props, an at-a-glance progress read

6. Set Dressing & Foliage

The greenhouse cultivators are what give the base its narrative — a lunar habitat growing food — so the foliage carried real weight rather than being filler.

It also produced the most instructive pipeline failure of the project: flora authored with Paint Effects appeared correctly in the viewport and then vanished from the final render. The cause is a hard boundary rather than a bug — Arnold cannot render native Maya strokes. The fix was to convert the Paint Effects to polygons and apply Arnold standard shaders to the result.

The general principle worth carrying forward is to distrust anything that lives only in the viewport. A renderer-agnostic scene needs its content in geometry and shaders the renderer actually understands, and that conversion should happen while dressing, not the night before a render.

Cultivator planters filled with converted polygon foliage inside the base
Cultivator planters after converting Paint Effects to polygons and reshading them for Arnold

7. Lighting & Rendering in Arnold

Two problems dominated the render stage.

Z-fighting produced flickering black artefacts across the floor. This was not a render setting at all but a geometry symptom — coincident, overlapping surfaces — and it was fixed by eliminating the duplicate geometry rather than by biasing anything in the renderer. It is the third time in this project that a render-stage symptom turned out to have a modelling-stage cause.

Noise and render time were the other constraint, worsened by running the GPU renderer with depth of field. Rather than raise sample counts globally, the solution was adaptive sampling paired with the OptiX denoiser, which produced clean frames from comparatively low initial samples — the practical trade for a solo project with a deadline.

Rendered telescope on the base roof against an HDRI environment
Arnold render of the telescope against an HDRI environment, with depth of field in play

8. Compositing & Output

Final frames were assembled as a sequence in After Effects for the turntable and camera move that present the scene.

This stage also exposed two shot-level errors I would fix first on a second pass: foregrounds left fuzzy by depth of field pushed too hard, and a camera moving too fast for the viewer to read the space. Both are cheap to correct and both are decisions made in the last 5% of the pipeline that undercut work done in the first 95% — a good argument for blocking out camera moves early instead of treating them as delivery packaging.

After Effects project compositing the rendered lunar base sequence
Rendered sequence assembled in After Effects for final output

Pipeline Review

Reviewing the whole run, the clearest conclusion is that 3D art is about half building and half cleaning. I started out wanting the scene to look striking, and learned quickly that if what sits under the hood — clean topology, sane UVs, non-overlapping geometry — is wrong, the project breaks somewhere further down, and always at a stage where diagnosis is more expensive.

Three of the four failures I hit were the same failure wearing different clothes: Unfold refusing to run, textures reading as barcodes, and the floor flickering in render were all geometry problems surfacing one stage late. The fix is procedural rather than skill-based — clean each asset as it is finished instead of batching cleanup at the end, which is the single change I would make to how I work.

What did transfer well was the handoff itself. Moving assets between Maya and Substance Painter and back, keeping texture sets aligned to kit pieces, and carrying a full PBR channel stack including opacity and emissive through to Arnold all held up, and I am considerably more confident operating across that toolchain than when I started.