TopoWeaverIO

108 posts

TopoWeaverIO banner
TopoWeaverIO

TopoWeaverIO

@TopoWeaverIO

🛠️ Building a WebGPU game 🕹️ for the browser.

Katılım Mayıs 2022
22 Takip Edilen111 Takipçiler
TopoWeaverIO
TopoWeaverIO@TopoWeaverIO·
@techietaro Still need to integrate the culling for the individual shadow maps. Will improve performance.
English
0
0
0
19
Taro Bushidō
Taro Bushidō@techietaro·
@TopoWeaverIO Hand-tuning WebGPU shadows demands Bushidō focus. I respect the discipline to optimize manually rather than rely on engine bloat.
English
1
0
1
38
TopoWeaverIO
TopoWeaverIO@TopoWeaverIO·
@eddieprograms Yes vegetation is instances culled and lod switched on the GPU. Did not implemented lod transition so it goes straight from imposter to real mesh. Will handle that later.
English
0
0
1
29
Eddie Hatfield
Eddie Hatfield@eddieprograms·
@TopoWeaverIO That’s awesome, I wanna make something similar but using Vulkan. Very fast movement thru a huge world, emphasis on physics based gameplay. How did you make your world, are the trees instanced?
English
2
0
1
71
TopoWeaverIO
TopoWeaverIO@TopoWeaverIO·
@hasan_ab_hasan I have full control over optimizations and features. It's a little more tedious but most of the time and effort is spent out of engine and physics stuff.
English
1
0
0
7
Hasan Aboul Hasan
Hasan Aboul Hasan@hasan_ab_hasan·
@TopoWeaverIO can I why you chose to go with custom 3d and physics, is is for learning? or there is something missing in the available libraries
English
1
0
0
9
TopoWeaverIO
TopoWeaverIO@TopoWeaverIO·
@hasan_ab_hasan Custom 3D and physics engine.. assets will be built internally with the world editor.. have not built that yet so stuck with the basic car for now sadly🫤
English
1
0
1
52
TopoWeaverIO
TopoWeaverIO@TopoWeaverIO·
CPU now sending only one command to the GPU for the vegetation. Render Bundle packing one draw for each model type and one draw for all imposters. Need to add chunk culling on top of per instance culling for performance. #webgpu #gamedev #indiedev
English
4
5
167
15.1K
TopoWeaverIO
TopoWeaverIO@TopoWeaverIO·
@wrennly_dev I changed the way I render the instances since this post. All instances are now in one sparse buffer. Thing is I am wasting compute on culling instances in groups that are outside frustum. Need some further storage barrier testing..
English
0
0
1
16
Wrennly
Wrennly@wrennly_dev·
@TopoWeaverIO storageBarrier() is the unsung hero here. did you run into issues with workgroup size when the instance count drops to near zero?
English
1
0
1
3
TopoWeaverIO
TopoWeaverIO@TopoWeaverIO·
Nighttime. Added clouds, lights to tunnels. Performance improvements. Next up : megabuffers !! To reduce draw calls. More GPU driven rendering. CPU to GPU communication is bottleneck now. ... And maybe finally add shadows to the car 😅 #webgpu #indiedev #gaming
English
3
1
37
1.4K
TopoWeaverIO
TopoWeaverIO@TopoWeaverIO·
@wrennly_dev I finally did a separate pass to do the reset. But I'm looking into using them again for the per Instance culling and combined chunk culling..
English
0
0
0
14
Wrennly
Wrennly@wrennly_dev·
@TopoWeaverIO storage barriers can get expensive if workgroups aren't balanced. did you hit any stalls on smaller instances or just rely on the gpu to chew through it?
English
1
0
1
5
TopoWeaverIO
TopoWeaverIO@TopoWeaverIO·
@Aureon_de_Veyra Using texture atlas and batching geometry to reduce the draw calls until webgpu gets bindless textures
English
0
0
2
111
TopoWeaverIO
TopoWeaverIO@TopoWeaverIO·
@imanands There are 4 LODs for the chunks. Still working on that..
English
1
0
0
33
Anand Singh
Anand Singh@imanands·
Smart approach — chunking with instanced meshes is the way to go for open world in WebGPU. Are you handling LOD transitions between chunks too or keeping it simple for now? Would love to follow your progress, this is exactly the kind of project that proves browser games can compete.
English
1
0
0
34
TopoWeaverIO
TopoWeaverIO@TopoWeaverIO·
@imanands Thanks 🙂. It is separated in individual world chunks with one mesh and one group of instances per chunk.
English
1
0
0
201
Anand Singh
Anand Singh@imanands·
Really impressive render bundle work. WebGPU is so underrated for browser games — the performance ceiling is way higher than most people expect. We're building a full AI-native game IDE on BabylonJS + WebGPU at Arclusion and this kind of optimization is exactly why we bet on the browser stack. What are you using for the scene graph?
English
1
0
1
641
TopoWeaverIO
TopoWeaverIO@TopoWeaverIO·
@paws4puzzles On an rtx 4050 (30W) I'm at 120fps with max 50% used. With frame drops because I'm still transferring nested objects from the worker(next fix) in addition to sharedbuffer. On the ultra5 125H iGPU I get 35 fps with plenty of frame drops.. unusable.
English
0
0
0
129
Puzzle Paws
Puzzle Paws@paws4puzzles·
@TopoWeaverIO Solid optimization. Render bundles really shine for batched draws like this. What frame time gains are you seeing so far?
English
1
0
1
177
TopoWeaverIO
TopoWeaverIO@TopoWeaverIO·
Doing pixel dissolve to emulate cloud fog for a pixel art feel. #pixelart
English
0
0
0
158
TopoWeaverIO
TopoWeaverIO@TopoWeaverIO·
@KentoAsashima Doing that for the imposter switch and discard. Base on the minimum pixels it would have on screen. For chuncks I'm just hard coding the distance thresholds.
English
0
0
1
9
Kento Asashima
Kento Asashima@KentoAsashima·
@TopoWeaverIO I like to use the projected screen size of objects/chunks as a means to select the LOD. The details then naturally scale with screen resolution and field of view. Using bounding sphere radius is often enough and very cheap to calculate.
English
1
0
1
13