WEEK 05 · 2026-02-09 ~ 15

Native prototype

First real week on the native stack. Modelled a 3D city in Blender, replaced the Fibonacci exterior with fluid motion, and started drafting the paper while the code kept moving.

Last week I finished the platform migration. The native application opened a window, rendered particles, and ran hand tracking at a speed I could use. It was the foundation, not the experience. This week the question shifted from “can the application run at all” to “what is actually inside it”. Three tracks started running in parallel. A 3D city to place the particles into, a rewritten exterior visual to replace the Fibonacci spiral from Week 4, and the first pass on the written paper.

PLATFORM ROADMAP

  1. Deprecated STAGE 01

    Web Browser Prototype

    Weeks 1 to 3

    Three.js in the browser. Confirmed the three pillars could run together. Hit latency, performance, and visual ceilings that traced back to the browser environment.

  2. Established STAGE 02

    Native Application

    Week 4

    Python, ModernGL, OpenGL 4.3. Direct GPU access through compute shaders and SSBOs. The platform the rest of the project lives on.

  3. In progress STAGE 03

    Native Application Evolution

    Week 5 onwards

    Building up the actual experience on top of the platform. City modelling, fluid exterior motion, audio integration, and all subsequent phases of the project.

Where the project sits now, at the start of Week 5, is the third stage on that timeline. The platform is settled. What goes on top of it is still open.

MODELLING THE CITY

The native application needed a space. Up to this point the particles existed in abstract 3D space with no architectural context. A particle cloud with nothing around it cannot communicate a place. So this week I started modelling the first city in Blender.

Blender viewport during the first city modelling pass.
Second Blender view. Block layout and rough massing before the model is exported.

The models are intentionally simple. Rough building shapes, flat ground planes, enough to give a sense of the space without competing with the particles. Two reasons for keeping them this way. First, I am not a Blender expert and detailed architectural modelling would have taken weeks I do not have. Second, the particles are the main visual element. If the buildings look too realistic they will fight the particles for attention, and the point of the piece is the particles, not the architecture.

I used Cadmapper to pull basic building footprints from OpenStreetMap, then rebuilt the shapes by hand in Blender. Cadmapper gives accurate footprint positions but produces flat extrusions with no architectural variation. Useful for placement, not for final form.

The same model loaded into the native application as a static placeholder, grid floor visible underneath.

The district is not yet decided. I have ambient audio recordings from both Bugis and Raffles Place and either could become the first interior. The modelling work this week was about getting the pipeline right, not about committing to a specific place. The 3D model becomes the container; the audio and the particles define which place the container is.

These two recordings are the raw material the interior has to answer to. Everything downstream in the pipeline has to start from what these tracks actually sound like.

PARTICLES INSIDE THE SPACE

Once the city container existed, the next pass was to populate it with the particle system and watch the two layers read against each other. This took several iterations. The first attempt was too dense. The particles filled every gap and the architecture drowned behind them. The second attempt eased the density and let the shape of the space breathe. The third loosened the motion so the particles respond to audio instead of drifting on a fixed path. The fourth settled the working combination, where the buildings still anchor the view but the particles remain the dominant visual event.

Iteration 1. Particles populate the city for the first time.
Iteration 2. Density reduced to let the architecture read.
Iteration 3. Movement loosened, particles respond to audio amplitude.
Iteration 4. Final working combination. Particles sit on top of the architecture without drowning it.

FROM FIBONACCI TO FLUID

The exterior visual from Week 4 was a Fibonacci spiral pattern of particles. Mathematically clean, visually static. It worked as a proof that particles could render at all on the new platform, but it was the wrong motion for this project. The spiral is geometric. The sound of a place is not.

This week I rebuilt the exterior motion as a fluid drift. The particles now move the way smoke moves in a still room, or dust moves through a beam of light. Slower, less defined, responding to audio in amplitude and spread rather than in precise orbit.

BEFORE · Fibonacci spiral

Week 4 exterior. Mathematically generated spiral of particles. Visually coherent but mechanical, with no relationship to the sound it was supposed to represent.

AFTER · Fluid motion

Week 5 exterior. Particles drift the way smoke drifts through still air. The motion follows the audio rather than running its own predetermined path.

Getting this to feel right took most of the week. The force values that drive the particles have a very narrow usable range. Too little force and the particles sit still. Too much and they scatter off the screen before the viewer can register what is happening. The working band was narrower than I expected. Once it was tuned the difference between the old and new exterior was obvious. The spiral was something I had made. The fluid was something that seemed to respond.

FIRST DRAFT OF THE PAPER

Alongside the code work, I started drafting the dissertation this week. Not the final text, but the structural scaffold. An outline of the sections, a word budget for each one, and a first pass at the arguments I would need to support.

This was harder than I expected. I had spent four weeks thinking in code and moving between shader uniforms and buffer layouts. Switching into full-paragraph written English required a different kind of attention, and the translation cost from Korean thinking to English writing added another layer on top. The first three hours of writing produced about two paragraphs that would later be rewritten. The day after was more productive because the structural decisions from the first day were already in place.

The weekly meeting with my supervisor landed in the middle of this:

This was the correct feedback to receive at this point. The platform decision was defensible and documented. The project itself, the specific design of the districts and the specific system of interaction, was still being worked out. Acknowledging that honestly was more useful than pretending the design was further along than it actually was. The draft of the paper now had to hold space for decisions I had not fully made yet, which shaped the structure more than I expected.

FINAL RESULT · END-OF-WEEK STATE

End of Week 5. The exterior has moved from a geometric spiral to a fluid, drifting motion. The first 3D city exists as a placeholder inside the native application. The paper has a first draft scaffold.
End of Week 5. The exterior has moved from a geometric spiral to a fluid, drifting motion. The first 3D city exists as a placeholder inside the native application. The paper has a first draft scaffold.