CASE STUDY · HBO MAX ON APPLE VISION PRO

The Great Hall

The Great Hall

The Great Hall

Turning video-game assets into a fully immersive environment you can sit inside, with floating candles, a living night sky, and a fire that never goes out.

PLATFORM

Apple Vision Pro · visionOS

TOOLS

Blender · Reality Composer Pro · RealityKit

TEAM

Travis Swan, Mark Brouwer, Luke Lavictoire & the Max visionOS team

MY FOCUS

Project setup, mesh clean-up & UVs, Enchanted Ceiling, transparent rafters

SCROLL TO STEP INSIDE

01 · The brief

An experience to watch immersively

An experience to watch immersively

On Vision Pro, Max offers immersive environments: full 360° spaces that wrap around you while you browse and watch. After the House of the Dragon Throne Room, the next destination was Hogwarts, and there was only one room it could be.

On Vision Pro, Max offers immersive environments: full 360° spaces that wrap around you while you browse and watch. After the House of the Dragon Throne Room, the next destination was Hogwarts, and there was only one room it could be.

The goal: a Great Hall that feels alive at true scale, runs comfortably on-device, and works in two moods: a candle-lit night and a bright day.

The goal: a Great Hall that feels alive at true scale, runs comfortably on-device, and works in two moods: a candle-lit night and a bright day.

424,938

triangles in the night scene

284

named objects across day & night

2

baked lighting states

02 · Project setup · Travis

From game assets to Apple Vision Pro

From game assets to Apple Vision Pro

Our starting point was video-game assets from Avalanche Software, the team behind Hogwarts Legacy. Game assets are built for a game engine, with shared trim sheets, LODs and real-time lighting. Vision Pro needed a self-contained scene with lighting baked into every surface.

I set up the project: importing the source assets into Blender, establishing scale and orientation for Reality Composer Pro, and naming and organising every object so a three-person team could texture, bake and light in parallel without stepping on each other.

I set up the project: importing the source assets into Blender, establishing scale and orientation for Reality Composer Pro, and naming and organising every object so a three-person team could texture, bake and light in parallel without stepping on each other.

✓ Consistent SM_HW_GH_* naming by asset family

✓ _Baked suffix marking every bake target, one texture per object

✓ VFX_* prefix for special-case materials like the rafters

Early import running in the visionOS simulator.

Outliner

greathall_bake · 284 objects

  • Door_single_Sm_A

  • Floor1_tranformBaked_withDiffuseUVs_mark

  • Floor3

  • Floor4_1

  • GC_HM_PR_FireStoker_B_Piece_02_Baked

  • GC_HM_PR_FireStoker_B_Piece_03_Baked

  • GC_HM_PR_FireStoker_B_Piece_04_Baked

  • GC_HM_PR_FireStoker_B_Piece_05_Baked

  • PillarB_Mid_2M_166

  • PillarB_Mid_2M_167

  • PillarB_Mid_2M_168

  • PillarB_Mid_2M_169

  • SM_HW_AT_Wall_6x3_581_Baked

  • SM_HW_AT_Wall_6x3_584_Baked

  • SM_HW_AT_Wall_6x3_586_Baked

  • SM_HW_AT_Wall_6x3_587_Baked

  • SM_HW_AT_Wall_6x3_592_Baked

  • SM_HW_AT_Wall_6x3_593_Baked

  • SM_HW_AT_Wall_6x3_595_Baked

  • SM_HW_AT_Wall_6x3_596_Baked

  • SM_HW_AT_Wall_6x6_812_Baked

  • SM_HW_AT_Wall_6x6_814_Baked

  • SM_HW_AT_Wall_6x6_816_Baked

  • SM_HW_AT_Wall_6x6_817_Baked

  • SM_HW_AT_Wall_6x6_908_Baked

  • SM_HW_AT_Wall_6x6_909_Baked

  • SM_HW_AT_Wall_6x6_910_Baked

  • SM_HW_AT_Wall_6x6_912_Baked

  • SM_HW_Banner_Gryf_B_4

  • SM_HW_Banner_Gryf_B_4_Baked

  • SM_HW_Banner_HW_B_1

  • SM_HW_Banner_HW_B_1_Baked

  • SM_HW_Banner_HW_B_3

  • SM_HW_Banner_HW_B_4

  • SM_HW_Banner_Huff_B_1

  • SM_HW_Banner_Huff_B_1_Baked

  • SM_HW_Banner_Rav_A_6

  • SM_HW_Banner_Rav_A_6_Baked

  • SM_HW_Banner_Sly_B_1

  • SM_HW_Banner_Sly_B_1_Baked

  • SM_HW_Crest2_Baked

  • SM_HW_DecalPlane4_Baked

  • SM_HW_DecalPlane5_Baked

  • SM_HW_DecalPlane_Baked

  • SM_HW_DoorwaySmall_Baked

  • SM_HW_GH_CeilingMain_Baked

  • SM_HW_GH_CeilingRaftersC_1_Bakedd

  • SM_HW_GH_CeilingRaftersC_2_Baked

  • SM_HW_GH_Chair_Faculty_0_Baked

  • SM_HW_GH_Chair_Faculty_1_0_Baked

  • SM_HW_GH_Chair_Faculty_1_1_Baked

  • SM_HW_GH_Chair_Faculty_1_2_Baked

  • SM_HW_GH_Chair_Faculty_1_Baked

  • SM_HW_GH_Chair_Faculty_2_Baked

  • SM_HW_GH_Chair_Faculty_3_Baked

  • SM_HW_GH_Chair_Faculty_4_Baked

  • SM_HW_GH_Chair_Faculty_5_Baked

  • SM_HW_GH_Chair_Faculty_6_Baked

  • SM_HW_GH_Chair_Faculty_7_Baked

  • SM_HW_GH_Chair_Faculty_8_Baked

  • SM_HW_GH_Chair_Faculty_9_Baked

  • SM_HW_GH_Chair_Faculty_Baked

  • SM_HW_GH_Chair_Headmaster_Baked

  • SM_HW_GH_Column_1_Baked

  • SM_HW_GH_Column_2_Baked

  • SM_HW_GH_Door2_Baked

  • SM_HW_GH_Door_Bakedd

  • SM_HW_GH_Door_Bakedd_1

  • SM_HW_GH_Doorway_B_6_Bakedd

  • SM_HW_GH_Doorway_B_7

  • SM_HW_GH_Doorway_B_7_Baked

  • SM_HW_GH_FacultyTable_CombinedA_Baked

  • SM_HW_GH_FacultyTable_CombinedB2_Baked

  • SM_HW_GH_FacultyTable_CombinedB_Baked

  • SM_HW_GH_FireplaceWall_Baked

  • SM_HW_GH_Fireplace_12_Baked

  • SM_HW_GH_FloorEndMedallion_Baked

  • SM_HW_GH_FloorEnd_1_Baked

  • SM_HW_GH_FloorMain_005

  • SM_HW_GH_FloorMain_006

  • SM_HW_GH_OwlPodium_Baked

  • SM_HW_GH_RafterBase_A_1_Baked

  • SM_HW_GH_RafterBase_A_2_Baked

  • SM_HW_GH_RafterBase_A_3_Baked

  • SM_HW_GH_RafterBase_A_4_Baked

  • SM_HW_GH_RafterBase_B_4_Baked

  • SM_HW_GH_RafterBase_B_5_Baked

  • SM_HW_GH_RafterDec_1_Baked

  • SM_HW_GH_RafterDec_2_Baked

  • SM_HW_GH_RafterDec_3_Baked

  • SM_HW_GH_RafterDec_4_Baked

  • SM_HW_GH_RafterDec_5_Baked

  • SM_HW_GH_RafterDec_6_Baked

  • SM_HW_GH_RafterPillar_1_Baked

  • SM_HW_GH_RafterPillar_2_Baked

  • SM_HW_GH_RoodScreen_1_Baked

  • SM_HW_GH_RoodScreen_2_Baked

  • SM_HW_GH_RoodScreen_3_Baked

  • SM_HW_GH_SconceBase_Gryff_Baked

  • SM_HW_GH_SconceBase_HufflePuff_Baked

  • SM_HW_GH_SconceBase_Raven_Baked

  • SM_HW_GH_SconceBase_Slytherin_Baked

  • SM_HW_GH_TableRunnerGryff_1_001_Baked

  • SM_HW_GH_TableRunnerGryff_2_001_Baked

  • SM_HW_GH_TableRunnerHufflePuff_1_001_Baked

  • SM_HW_GH_TableRunnerHufflePuff_2_001_Baked

  • SM_HW_GH_TableRunnerRaven_1_001_Baked

  • SM_HW_GH_TableRunnerRaven_2_001_Baked

  • SM_HW_GH_TableRunnerSlytherin_1_001_Baked

  • SM_HW_GH_TableRunnerSlytherin_2_001_Baked

  • SM_HW_GH_Table_1_Baked

  • SM_HW_GH_Table_2_Baked

  • SM_HW_GH_Table_3_Baked

  • SM_HW_GH_Table_4_Baked

  • SM_HW_GH_Table_5_Baked

  • SM_HW_GH_Table_6_Baked

  • SM_HW_GH_Table_7_Baked

  • SM_HW_GH_Table_8_Baked

  • SM_HW_GH_TimberFill_1_Baked

  • SM_HW_GH_TimberFill_2_Baked

  • SM_HW_GH_TimberFill_3_Baked

  • SM_HW_GH_TimberFill_4_Baked

  • SM_HW_GH_TimberFill_5_Baked

  • SM_HW_GH_TimberFill_6_Baked

  • SM_HW_GH_WallColumnAB_1_Baked

  • SM_HW_GH_WallColumnAB_3_Baked

  • SM_HW_GH_WallColumnAC_10_Baked

  • SM_HW_GH_WallColumnAC_11_Baked

  • SM_HW_GH_WallColumnAC_1_Baked

  • SM_HW_GH_WallColumnAC_3_Baked

  • SM_HW_GH_WallColumnAC_5_Baked

  • SM_HW_GH_WallColumnAC_6_Baked

  • SM_HW_GH_WallColumnAC_7_Baked

  • SM_HW_GH_WallColumnAC_Door_Baked

  • SM_HW_GH_WallColumnC_2_Bakedd

  • SM_HW_GH_WallColumnC_5_Bakedd

  • SM_HW_GH_WallColumnC_6_Baked

  • SM_HW_GH_WallDoor_2_Baked

  • SM_HW_GH_WallDoor_4_Baked

  • SM_HW_GH_WallIntB_2_Baked

  • SM_HW_GH_WallIntB_3_Baked

  • SM_HW_GH_WallIntB_4_Baked

  • SM_HW_GH_WallIntB_5_Baked

  • SM_HW_GH_WallIntBlankDoor_1_Baked

  • SM_HW_GH_WallIntBlank_1_Bakedd

  • SM_HW_GH_WallIntBlank_3_Baked

  • SM_HW_GH_WallIntBlank_5_Baked

  • SM_HW_GH_WallIntD2_Baked

  • SM_HW_GH_WallIntD_Baked

  • SM_HW_GH_WallIntEndBase_1_Baked

  • SM_HW_GH_WallIntEndBase_1_Left

  • SM_HW_GH_WallIntEndBase_1_Middle

  • SM_HW_GH_WallIntEndBase_2_Baked

  • SM_HW_GH_WallIntEndBase_2_Middle

  • SM_HW_GH_WallIntEndBase_2_Right

  • SM_HW_GH_WallIntEndMid_1_Bake

  • SM_HW_GH_WallIntEndMid_2_Baked

  • SM_HW_GH_WallIntEndMid_Pane_0_Bake

  • SM_HW_GH_WallIntEndMid_Pane_Bake

  • SM_HW_GH_WallIntEndTop_1_Baked

  • SM_HW_GH_WallIntEndTop_2_Baked

  • SM_HW_GH_WallIntWindowB_3_Baked

  • SM_HW_GH_WallIntWindowB_4_Baked

  • SM_HW_GH_WallIntWindowC_2_Baked

  • SM_HW_GH_WallIntWindowC_3_Baked

  • SM_HW_GH_WallIntWindowD_3_Baked

  • SM_HW_GH_WallIntWindowD_4_Baked

  • SM_HW_GH_WallIntWindowG_1_Baked

  • SM_HW_GH_WallIntWindowG_2_Baked

  • SM_HW_GH_WallIntWindowG_3_Baked

  • SM_HW_GH_WallIntWindowG_4_Baked

  • SM_HW_GH_WallIntWindowG_5_Baked

  • SM_HW_GH_WallIntWindowG_7_Baked

  • SM_HW_GH_WallIntWindowG_8_Baked

  • SM_HW_GH_WallIntWindowG_9_Baked

  • SM_HW_GH_WallIntWindowI_10_Baked

  • SM_HW_GH_WallIntWindowI_11_Baked

  • SM_HW_GH_WallIntWindowI_12_Baked

  • SM_HW_GH_WallIntWindowI_6_Baked

  • SM_HW_GH_WallIntWindowI_7_Baked

  • SM_HW_GH_WallIntWindowI_8_Baked

  • SM_HW_GH_WallIntWindowI_9_Baked

  • SM_HW_GH_WallIntWindow_1_Baked

  • SM_HW_GH_WallIntWindow_2_Baked

  • SM_HW_GH_WallInt_2_001_Baked

  • SM_HW_GH_WallInt_4_001_Baked

  • SM_HW_GH_WallInt_FlatCeilingB2Test

  • SM_HW_GH_WallInt_FlatCeilingB2_Baked

  • SM_HW_GH_WallInt_FlatCeilingB_Baked

  • SM_HW_GH_WallPanelingBalcony_B_4_Baked

  • SM_HW_GH_WallPanelingLower_A2_Baked

  • SM_HW_GH_WallPanelingLower_A3_Baked

  • SM_HW_GH_WallPanelingLower_A4_Baked

  • SM_HW_GH_WallPanelingLower_A_Baked

  • SM_HW_GH_WallPanelingLower_B2_Baked

  • SM_HW_GH_WallPanelingLower_B3_Baked

  • SM_HW_GH_WallPanelingLower_B4_Baked

  • SM_HW_GH_WallPanelingLower_B8_Baked

  • SM_HW_GH_WallPanelingLower_B9_Baked

  • SM_HW_GH_WallPanelingLower_B_Baked

  • SM_HW_GH_WallPanelingLower_C4_Baked

  • SM_HW_GH_WallPanelingLower_C5_Baked

  • SM_HW_GH_WallPanelingLower_C7_Baked

  • SM_HW_GH_WallPanelingLower_C_Door_Baked

  • SM_HW_GH_WallPanelingLower_D2_Baked

  • SM_HW_GH_WallPanelingLower_D_Baked

  • SM_HW_GH_WallPanelingLower_E_Baked

  • SM_HW_GH_WallPanelingLower_F2_Baked

  • SM_HW_GH_WallPanelingLower_F_Baked

  • SM_HW_GH_WallPaneling_3_Baked

  • SM_HW_GH_WallPaneling_6_Baked

  • SM_HW_GH_WallPaneling_C_1_Baked

  • SM_HW_GH_WallPaneling_C_2_Baked

  • SM_HW_GH_WallPaneling_D_1_Baked

  • SM_HW_GH_WallPaneling_D_2_Baked

  • SM_HW_GH_WallPaneling_E_1_Baked

  • SM_HW_GH_WallPaneling_E_2_Baked

  • SM_HW_GH_WallSconceGryff

  • SM_HW_GH_WallSconceGryff_1

  • SM_HW_GH_WallSconceHufflePuff

  • SM_HW_GH_WallSconceHufflePuff_1

  • SM_HW_GH_WallSconceRaven

  • SM_HW_GH_WallSconceRaven_1

  • SM_HW_GH_WallSconceSlytherin

  • SM_HW_GH_WallSconceSlytherin_1

  • SM_HW_GH_WallTimbers_2_Baked

  • SM_HW_GH_WallTimbers_3_Baked

  • SM_HW_GH_WallTimbers_4_Baked

  • SM_HW_GH_WallTimbers_5_Baked

  • SM_HW_GH_WallTimbers_6_Baked

  • SM_HW_GH_WallTimbers_7_Baked

  • SM_HW_GH_WallTimbers_8_Baked

  • SM_HW_GH_WallTimbers_9_Baked

  • SM_HW_GH_WindowDetails_Baked

  • SM_HW_GH_WindowGryffindor_Baked

  • SM_HW_GH_WindowHufflepuff_Baked

  • SM_HW_GH_WindowLowerB_Pane_Ext_0_Baked

  • SM_HW_GH_WindowLowerB_Pane_Ext_1_Baked

  • SM_HW_GH_WindowLowerB_Pane_Ext_Baked

  • SM_HW_GH_WindowLowerC_Pane_Ext_0_Baked

  • SM_HW_GH_WindowLowerD_Pane_Ext_0_Baked

  • SM_HW_GH_WindowLowerD_Pane_Ext_Baked

  • SM_HW_GH_WindowLower_Pane_Ext_1_Baked

  • SM_HW_GH_WindowLower_Pane_Ext_2_Baked

  • SM_HW_GH_WindowRavenclaw_Baked

  • SM_HW_GH_WindowSlytherin_Baked

  • SM_HW_GH_WindowUpperB_Pane_Ext_1_Baked

  • SM_HW_GH_WindowUpperB_Pane_Ext_2_Baked

  • SM_HW_GH_WindowUpperB_Pane_Ext_Baked

  • SM_HW_GH_WindowUpperC_Pane_Ext_0_Baked

  • SM_HW_GH_WindowUpperC_Pane_Ext_1_Baked

  • SM_HW_GH_WindowUpperC_Pane_Ext_2_Baked

  • SM_HW_GH_WindowUpperC_Pane_Ext_Baked

  • SM_HW_GH_WindowUpperD_Pane_Ext_1_Baked

  • SM_HW_GH_WindowUpperD_Pane_Ext_2_Baked

  • SM_HW_GH_WindowUpperD_Pane_Ext_3_Baked

  • SM_HW_GH_WindowUpperD_Pane_Ext_Baked

  • SM_HW_GH_WindowUpper_Pane_Ext_0_Baked

  • SM_HW_GH_WindowUpper_Pane_Ext_1_Baked

  • SM_HW_GH_WindowUpper_Pane_Ext_2_Baked

  • SM_HW_GH_WindowUpper_Pane_Ext_Baked

  • SM_HW_Rug_GreatHall_A2_Baked

  • SM_HW_Rug_GreatHall_A_Baked

  • SM_HW_Rug_GreatHall_B_Baked

  • SM_HW_WoodenBench_A_6_Baked

  • SM_HW_WoodenBench_A_7_Baked

  • SM_HW_WoodenBench_A_8_Baked

  • SM_HW_WoodenBench_A_9_Baked

  • SM_Int_BCProps_Pot_001_W_Baked

  • SM_Int_BCProps_Pot_002_W_Baked

  • VFX_SM_GH_LightShield_Bakedd

  • VFX_SM_GH_Rafters_A_Lite2_Baked

  • VFX_SM_GH_Rafters_A_Lite3_Baked

  • VFX_SM_GH_Rafters_A_Lite4_Baked

  • VFX_SM_GH_Rafters_A_Lite5_Baked

  • VFX_SM_GH_Rafters_A_Lite6_Baked

  • VFX_SM_GH_Rafters_A_Lite_Baked

  • VFX_SM_GH_Rafters_B_Lite_Baked

  • WallPanneling1

  • WallPanneling2

  • WallPanneling4

  • WallPanneling5

  • pillartest

  • pillartest1

03 · Mesh clean-up & UVs · Travis

Tables, UVs & seam sewing

Tables, UVs & seam sewing

The four long house tables and their benches are the heart of the room, and they’re seen up close. I cleaned up their geometry, then re-unwrapped the UVs so each table could receive its own high-resolution bake. The tables carry a dedicated fixUvMap UV set that the bake reads from.

The four long house tables and their benches are the heart of the room, and they’re seen up close. I cleaned up their geometry, then re-unwrapped the UVs so each table could receive its own high-resolution bake. The tables carry a dedicated fixUvMap UV set that the bake reads from.

Baking lighting exposes every UV seam: a split island means a visible line in the shadow. I sewed seams back together wherever the eye travels, so the baked light flows across the tabletops and runners without breaks.

Baking lighting exposes every UV seam: a split island means a visible line in the shadow. I sewed seams back together wherever the eye travels, so the baked light flows across the tabletops and runners without breaks.

The checker you see on the tables right now is a live UV visualisation on the real meshes; cyan marks the seams. In the shipped environment the house tables appear in day mode, so the hall switches to day for this chapter.

The checker you see on the tables right now is a live UV visualisation on the real meshes; cyan marks the seams. In the shipped environment the house tables appear in day mode, so the hall switches to day for this chapter.

04 · Enchanted Ceiling · Travis

A sky that moves

A sky that moves

The ceiling is the signature of the room, and naturally more than a static picture. I built it as an animated shader in Reality Composer Pro that composites several layers over a deep sky gradient: a star field, drifting cloud sheets moving at different speeds, and procedurally generated noise clouds.

The same graph drives both moods: night blends stars and cool moonlit clouds, day swaps to daylight cloud layers. A soft pill-shaped opacity mask feathers the sky into the stonework so the edges never read as a flat plane.

The same graph drives both moods: night blends stars and cool moonlit clouds, day swaps to daylight cloud layers. A soft pill-shaped opacity mask feathers the sky into the stonework so the edges never read as a flat plane.

Animated cloud and star layers.

One cloud layer in Reality Composer Pro.

05 · Transparent rafters · Travis

Rafters that dissolve into the sky

Rafters that dissolve into the sky

The Great Hall has heavy timber rafters, but the Enchanted Ceiling needed to read as open sky. Making them transparent on Vision Pro required more attention because blended surfaces stacked in front of each other, creating a less than ideal result.

The Great Hall has heavy timber rafters, but the Enchanted Ceiling needed to read as open sky. Making them transparent on Vision Pro required more attention because blended surfaces stacked in front of each other, creating a less than ideal result.

My approach: render the rafters with an unlit material whose opacity comes from world-space height. The shader reads the object’s position, takes its Y value and remaps it: fully solid at 15 m, gone by 30 m. Because the fade is driven by height, not by a texture, it stays seamless across every rafter.

My approach: render the rafters with an unlit material whose opacity comes from world-space height. The shader reads the object’s position, takes its Y value and remaps it: fully solid at 15 m, gone by 30 m. Because the fade is driven by height, not by a texture, it stays seamless across every rafter.

The final step: the rafters sit in their own ”mesh sorting group” with a depth pre-pass. Depth is written first, so only the nearest rafter surface gets shaded at each pixel. The fade then behaves as if the rafters were a flat rendered image: overlapping faces don’t stack up into extra opacity, and the timber dissolves evenly as it rises.

The final step: the rafters sit in their own ”mesh sorting group” with a depth pre-pass. Depth is written first, so only the nearest rafter surface gets shaded at each pixel. The fade then behaves as if the rafters were a flat rendered image: overlapping faces don’t stack up into extra opacity, and the timber dissolves evenly as it rises.

Position

world

Separate

Y

Remap

15→30 m · 1→0

Opacity

Position

world

Opacity

Separate

Y

Remap

15→30 m · 1→0

06 · Fire · Mark

A fire that never goes out

A fire that never goes out

Mark Brouwer did a lot of the texturing and created the flames. Real fire footage was converted into flipbook sprite sheets (an 8-second clip becomes a grid of frames on one texture), and a custom shader steps through the frames every tick.

Mark Brouwer did a lot of the texturing and created the flames. Real fire footage was converted into flipbook sprite sheets (an 8-second clip becomes a grid of frames on one texture), and a custom shader steps through the frames every tick.

It’s an efficient way to put high-quality looping motion into the environment: the great fireplace and the house torches are just flat cards with an animated texture, plus flickering dynamic lights.

It’s an efficient way to put high-quality looping motion into the environment: the great fireplace and the house torches are just flat cards with an animated texture, plus flickering dynamic lights.

Source flame clip.

The same clip as a sprite sheet.

07 · Floating candles · Mark

Hundreds of candles, none of them still

Hundreds of candles, none of them still

Mark also built the floating candles. Their placement was scattered in Blender; their motion lives in Reality Composer Pro, where a dynamically generated noise field offsets each candle’s position so the whole cloud bobs gently and never moves in lockstep.

Mark also built the floating candles. Their placement was scattered in Blender; their motion lives in Reality Composer Pro, where a dynamically generated noise field offsets each candle’s position so the whole cloud bobs gently and never moves in lockstep.

Candles bobbing in the hall.

The noise map driving the offset.

08 · Lighting & final renders · Luke

Two moods, baked in

Two moods, baked in

Luke Lavictoire lit the hall and produced the final renders for both modes. Lighting was built in Blender and baked into the textures. Every surface you’re looking at carries its light with it, which is how a scene this rich stays fast on-device.

Luke Lavictoire lit the hall and produced the final renders for both modes. Lighting was built in Blender and baked into the textures. Every surface you’re looking at carries its light with it, which is how a scene this rich stays fast on-device.

Night is warm firelight and candle glow under a starry sky; day is cool window light and soft clouds. Each mode is its own full set of baked textures on the same geometry.

Night is warm firelight and candle glow under a starry sky; day is cool window light and soft clouds. Each mode is its own full set of baked textures on the same geometry.

Night view
Day view

Final 360° renders. Drag to compare day and night.

09 · In the headset

Watch anything from the Great Hall

Watch anything from the Great Hall

In the app, the hall wraps around you and the video player docks in the middle of the room, so you can watch in the Great Hall itself. The team also shipped Browse & Watch modes and an environment downloader that delivers large environments as remote assets instead of bundling them with the app.

In the app, the hall wraps around you and the video player docks in the middle of the room, so you can watch in the Great Hall itself. The team also shipped Browse & Watch modes and an environment downloader that delivers large environments as remote assets instead of bundling them with the app.

Captured on device.

Choosing an environment in Max.

Credits

Who did what

Who did what

Travis Swan

Project setup, naming & organisation · table clean-up, UV mapping & seam sewing · Enchanted Ceiling (day & night) · transparent rafters

Project setup, naming & organisation · table clean-up, UV mapping & seam sewing · Enchanted Ceiling (day & night) · transparent rafters

Mark Brouwer

Texturing · fireplace & torch flames · floating candles

Texturing · fireplace & torch flames · floating candles

Luke Lavictoire

Lighting · final day & night renders

Lighting · final day & night renders

With the Max on Vision Pro team: Adam Bader, Joseph Megkousoglou, Raffaele La Brocca and Gabriel Banfalvi. Source assets: Avalanche Software.

With the Max on Vision Pro team: Adam Bader, Joseph Megkousoglou, Raffaele La Brocca and Gabriel Banfalvi. Source assets: Avalanche Software.

The 3D hall on this page is the production bake, converted from the Reality Composer Pro project for the web. Fire, candles and sky are recreated in WebGL. Harry Potter characters, names and related indicia are © & ™ Warner Bros. Entertainment Inc.

The 3D hall on this page is the production bake, converted from the Reality Composer Pro project for the web. Fire, candles and sky are recreated in WebGL. Harry Potter characters, names and related indicia are © & ™ Warner Bros. Entertainment Inc.

Back to the entrance

Travis Swan

CASE STUDY