Night City: an office tower with blue-lit floors above a street with streetlamps and a red LED crosswalk Pool Rooms: a wide tiled deck reflecting rows of ceiling lights, the pool at the far end Backrooms VR: yellow wallpapered pillars and open rooms under a lit drop ceiling

Enzo
Cruz

Environment Technical Artist Rendering · Lighting · Performance

I build environments that look real and stay fast. Most of my work happens where art and code meet: lighting, shaders, LODs and the profiler.

StudyingHonours Bachelor of Game Design, Sheridan College
GraduatingApril 2028
EnginesUnity (HDRP) · Unreal Engine
Based inMississauga, ON
Featured project · Advanced topic in game art · Fall 2026

Night City

In production
Probe memory
292 → 2MB
Lighting bake
6.5 → 1min
Pipeline
Unity 6 HDRP
Assets
100% my own

One neon street at night, inspired by Cyberpunk 2077's Night City and built in Unity's High Definition Render Pipeline. The goal is to prototype the lighting and optimization techniques studios use for night scenes, and to measure how each one changes both the look and the frame time.

No Asset Store content: everything is modeled in Maya and textured in Substance Painter, so I control poly counts, LODs, UVs and texture sizes.

  • Probes

    Local Adaptive Probe Volume

    The volume was covering a 1 km ground plane. Sizing it to the street cut memory from 292 MB to about 2 MB and bake time from 6.5 to 1 minute.

  • Reflect

    Baked reflections on the wet road

    Reflection probes instead of leaning on SSR, which can only reflect what is already on screen. A planar probe stays only if a side-by-side comparison proves it is worth the extra render.

  • Windows

    Office interior LOD chain

    Modeled interiors up close, a parallax interior shader further out, culled beyond that.

  • Imports

    Texture import fixes

    Road normal map was imported as Default with sRGB on, which skewed reflections. Seven mask maps switched to sRGB off.

Same block, start to now

Drag the slider to fade between builds.

Early blockout of the street block in the Unity scene view with light gizmos The block with the office tower added and its floors lit blue The block with sidewalks, streetlamps and the lit tower Latest build: the tower with ceiling light strips on every floor above the lit crosswalks Latest
StreetPuddle reflections, neon spill and streetlamps.
CrossingLED crosswalk bars and wet-road reflections.
PainterLED zebra bars with WALK / DON'T WALK emissive sets.
Road4K road material and its fixed normal map import.

Sidewalk LOD chain

The curb corner loses edge loops at each step until it is two cuts, only seen from a distance. All four LODs share one texture set, so Unity uses a single material.

LOD0128 tris
LOD172 tris
LOD240 tris
LOD317 tris

Streetlamp LOD chain

From 214 triangles down to six flat planes for the pole, arm and light. At that distance you can't tell.

LOD0214 tris
LOD1148 tris
LOD242 tris
LOD36 tris

Sidewalk UVs, before and after

Top and side bevels unrolled into three side-by-side segments, with separate shells for the rounded end and the step. No overlaps, no flipped UVs.

BeforeOverlapping, stretched shells.
AfterThree clean strips plus end and step shells.
Next

Still to come: neon signs, holograms and far-building LODs, then facades and car paint, full night lighting, occlusion culling and GPU instancing, and finally Profiler and Frame Debugger captures comparing every change before and after.

Speed build · May 2026

Pool Rooms

5-hour build
Build time
05:00:00
Prior planning
none
Engine
Unity 6 HDRP
Scripts
4 C#

A liminal indoor pool, built from an empty project in one five-hour sitting. I gave myself the time limit and no plan going in, so every choice had to be made on the spot: what to light, what to script, and what to leave out.

The water is the centre of it. It reacts to the player, throws moving light onto the tile, and turns into a window to the room above once you dive under. Getting that working meant learning Unity's water deformation system from scratch inside the deadline.

  • Water

    Interactive water surface

    Scripted in C# on top of Unity's water deformation graph, with the ripple logic in PoolRipples.cs.

  • Player

    Controller with buoyancy and swimming

    A full first-person controller written from scratch, with separate behaviour above and below the waterline.

  • Audio

    Spatial sound

    Several layered sound effects and a reverb zone so the room sounds tiled and hollow.

  • Light

    HDRP lighting and post

    Rows of fluorescent fixtures, glossy tile and a global volume tuned for the clinical, slightly-off look of the space.

In-game capture
DeckWet tile catching the ceiling lights.
PoolThe full pool from the deck.
RoomWalking the edge of the pool.
SurfaceReflections across the water.
WaterlineSwimming at the surface.
WindowThe room above, bent by the water.
FloorThe swim controller below the waterline.
VR optimization project · June 2026

Backrooms VR

Quest 2
Desktop
~1300FPS
Quest 2
120FPS max
VR render res
5408×2752
Lighting
baked shadowmask
VR play test

A Backrooms maze for VR, built for realism first: real-world wall heights and room dimensions, high-detail textures and lighting that reads correctly at headset scale. The wallpaper textures are my own, made from scratch in Substance Painter. Every wall, floor plane, and ceiling is both an occluder and occlude with their occlusion scales tuned to perfection.

The constraint was frame rate. VR punishes dropped frames and input latency, so every technique was chosen to keep the frame time low and steady on the headset.

  • Lighting

    Fully baked lighting

    Progressive GPU lightmapper, 256 direct and 1024 indirect samples, 2 bounces, baked ambient occlusion.

  • Culling

    Walls split into segmented planes

    Long walls are broken into separate pieces so frustum culling skips anything outside the player's view.

  • Scale

    Measured to real dimensions

    Walls, ceilings and fixtures built at true size so the space feels right in a headset.

  • Result

    ~1300 FPS desktop, 120 FPS on Quest 2

    On a Quest 2 with the render resolution maxed at 5408×2752, it held the headset's 120 FPS cap. The only limit was the PC-to-headset connection.

MazePillars and open rooms.
CorridorBaked lighting down a long hall.
TextureWallpaper and carpet, Substance Painter.
Team project · Unity Shader Graph

Thousands of socks, one material

In a Unity game me and my friend are making, players need to pair up socks to sell. I built the core systems: interaction, a hotbar inventory and the sell feature. The game needed thousands of uniquely coloured and patterned socks that could identify each other's pair.

Instead of one material per sock, I wrote a Shader Graph that pulls each sock's look from one shared texture sheet. Every sock uses the same material, so the GPU can instance them all, and the variety costs almost nothing so its limitless on how many different socks we can have.

Shader GraphPer-object variation from a single texture sheet.
About

Art problems, technical answers

I'm a third-year Game Design student at Sheridan College, focused on rendering, lighting and optimization. My favourite problems are art problems solved with a technical decision. Like a shared material so thousands of objects can instance, a probe volume sized to the playable area, a wall cut into pieces so the camera can cull it.

On teams I handle the systems and fix bugs fast so nobody else gets blocked. At Sheridan's Design Week, where teams of about five build a full game in a week, I delivered every feature I committed to.

Outside school I set up a dual-boot PC with a headless Ubuntu Server partition for running open-source AI models locally, and I'm curious how tools like ComfyUI and 2D-to-3D generation could speed up artist workflows. Next on my list: Python for Maya tooling, and C++. None of my projects used AI, however I am open to using it and understand the basics of prompt engineering.

I grew up on shooters and exploration games: Titanfall 2, Rainbow Six Siege, Subnautica, No Man's Sky. Away from the screen it's airsoft, rock climbing and the Ontario car scene.

Engines and code

  • Unity · HDRP / URP
  • Unreal Engine
  • C#
  • Unreal Blueprints
  • Shader Graph
  • Visual Studio
  • GitHub

Art

  • Maya
  • Substance Painter
  • Figma

Performance

  • Unity Profiler
  • Frame Debugger
  • Rendering Debugger
  • LOD Groups
  • Occlusion culling
  • GPU instancing
  • Lightmapping
  • Adaptive Probe Volumes

Production

  • Jira
  • Trello
  • Miro
Open to internships and co-ops · 2027

Let's talk

enzo.cruz0086@gmail.com Write
Enzo CruzEnvironment Technical ArtistMississauga, Ontario