
Lazy-100
A Lua fantasy console with code, sprite, map, sound and music editors, built on VRI for desktop and browser play.
Games, graphics, and handhelds.
I build graphics libraries, engines, games, and small tools. Before starting my PhD, I completed an MSc in High-Performance Graphics and Games Engineering at the University of Leeds. My MSc covered modelling and rendering, animation and simulation, geometry processing, high-performance graphics, and scientific computation. I also have professional experience developing game servers in Shanghai. I collect retro handhelds and enjoy bringing games and software to GameShell, Game Boy, PocketCHIP, and Trimui. Away from code, I enjoy singing — OmniLyrics grew out of wanting a lyric tool that worked the way I wanted. Curiosity and the satisfaction of making something keep me coming back.
Also Kexuan Zhang, PhD researcher & graphics programmer at University of Leeds. Academic page
Updated
Refining my cross-platform lyric tool, recently focusing on signed macOS releases, installation, and lyric display.
Developing the VRI-based graphics framework on dev-VRI, with the near-term goal of supporting small rendering demos.
Following CIS5650 independently to understand high-performance GPU programming more deeply. Projects 0 and 1 are complete; Project 2 (stream compaction) is halfway through.
Build small rendering demos on libvultra, exploring GPU-driven large-scene rendering and sampling techniques relevant to my research.
Frustum culling, hierarchical Z-buffer (Hi-Z) occlusion culling, stream compaction, and indirect drawing, with visibility and timing comparisons.
Mesh clustering, hierarchical LOD selection, and on-demand geometry streaming, taking inspiration from Nanite.
Feedback-driven texture streaming, page tables, and cache management under a fixed memory budget.
Compare tiled and clustered light assignment in forward and deferred shading, including light-list construction and shading cost.
Explore voxel-based global illumination (VXGI), Dynamic Diffuse Global Illumination (DDGI), and Lumen-inspired surface-cache and radiance-cache experiments.
Implement ReSTIR DI for many-light direct illumination using spatiotemporal reservoir resampling, then investigate ReSTIR GI for indirect illumination and VR applications.

A Lua fantasy console with code, sprite, map, sound and music editors, built on VRI for desktop and browser play.

A top-down bullet hell roguelike on Steam — fight alongside clones of your past runs inside the immune system. Free demo out now! Co-founder of High Path Games; programming lead.

Cross-platform desktop, terminal and status-bar lyrics with GUI, CLI/TUI, bilingual karaoke, .NET 10 and Avalonia.
Desktop releases available

A faithful remake of the classic Flash game, built with LÖVE2D for GameShell, Trimui, and other retro gaming handhelds.

A custom Mini vMac build and handheld setup for running classic Mac OS System 7.5 on PocketCHIP.
Handheld port

A Linux GUI and CLI for MCHOSE mice, with DPI and sensor settings, per-application presets and KDE desktop integration.

C++23 plotting through a C ABI, with PNG, SVG and PDF export, ImGui integration and a WebAssembly demo.
Early development · API evolving

Graphics and engine projects for research and games, with current libvultra development on the VRI-based dev-VRI branch.
Current development: dev-VRI · early stage
I port games and emulators to handhelds including GameShell, PocketCHIP, Game Boy, and Trimui devices.
More about retro handheldsAway from graphics and code, I enjoy singing. OmniLyrics grew out of wanting a lyric tool that worked the way I wanted.
More about singingEngines, libraries, fantasy consoles, and useful little tools. I like the process of understanding a thing by making it.
More about engines & toolsThese are the steps I used for repeated permission prompts with a locally installed GodotSteam build on macOS. First, reset the relevant privacy permissions. Use the bundle iden...
A general checklist to read before preparing a submission.
How Tracy buffers profiling events before connection, and what on-demand capture changes.
If you don't have an XR headset but you want to develop OpenXR apps, you can use Meta XR Simulator! It's great.