[HN Gopher] WebGPU-Based WiFi Simulator
       ___________________________________________________________________
        
       WebGPU-Based WiFi Simulator
        
       Author : jasmcole
       Score  : 131 points
       Date   : 2024-10-20 18:01 UTC (4 hours ago)
        
 (HTM) web link (wifi-solver.com)
 (TXT) w3m dump (wifi-solver.com)
        
       | jasmcole wrote:
       | See also the blog post here discussing this project:
       | 
       | https://jasmcole.com/2024/10/18/a-decade-of-wifi/
        
       | noahbp wrote:
       | It's so frustrating that WebGPU support was released 1.5 years
       | ago on Chrome, and yet is still unavailable on all other
       | browsers.
       | 
       | This is a real killer feature that will dramatically slow
       | adoption of non-Chromium browsers, even with Google defanging ad
       | blockers.
        
         | jasmcole wrote:
         | Agreed! Though support should be coming soon it seems. As a
         | complete WebGPU novice I was really impressed with how quick it
         | was to get going.
        
         | gnarbarian wrote:
         | it's still not well supported on Linux unfortunately either
        
         | pjmlp wrote:
         | Even Chrome only supports it officially on Windows, macOS and
         | Android, no GNU/Linux (as stable).
         | 
         | And when it becomes widespread, just like WebGL 2.0, it will be
         | a decade behind of what native APIs are capable of.
         | 
         | And in both cases, good luck debugging, other than replicating
         | the content on native APIs, as means to use proper GPU
         | debuggers, because even Chrome has yet to offer any developer
         | tooling for GPU debugging.
        
           | petermcneeley wrote:
           | Runs great on my ChromeBook.
        
             | pjmlp wrote:
             | Forgot about that, which isn't GNU/Linux anyway.
        
               | murderfs wrote:
               | By what metric? It's a gentoo deriviative with glibc,
               | coreutils, etc.
        
               | pjmlp wrote:
               | A JavaScript userspace juggling Chrome instances.
        
               | murderfs wrote:
               | ...no, it isn't?
               | 
               | Even if you're claiming (incorrectly) that the window
               | manager, etc. contain javascript, the same would apply to
               | GNOME!
        
             | SoKamil wrote:
             | ChromeOS is not a Linux distribution, change my mind.
        
               | yjftsjthsd-h wrote:
               | ChromeOS is a Linux kernel with some software bundled on
               | top to make a usable system; it is by definition a Linux
               | distro. Curiously, it's even a GNU/Linux distro, as it
               | uses glibc and GNU coreutils, unlike ex Android which is
               | a non-GNU distro.
               | 
               | I will grant that it's a slightly odd distro, but is it
               | any weirder than NixOS or Fedora Silverblue?
        
               | pjmlp wrote:
               | Only runs browser instances. Even Crostini is sandoxed in
               | a way similar to WSL2.
        
               | yjftsjthsd-h wrote:
               | User-facing apps are browser instances and VMs, and under
               | that is a pretty normal userland. It's still a
               | distribution of software on a Linux kernel. And for that
               | matter, is Silverblue any less a Linux distro with its
               | read-only root and apps in flatpak/distrobox? Are Qubes
               | OS or Proxmox with everything in VMs?
        
         | moffkalast wrote:
         | For Safari that's par for the course, but Firefox is in
         | surprisingly far behind in terms of anything GPU related in the
         | browser.
         | 
         | I've recently been shocked trying out the WebGL aquarium demo
         | [0] on Chrome and Firefox after running into some really odd
         | performance issues on a project. You'd expect them to behave
         | about the same with GPU acceleration, but FF barely gets half
         | the framerate at the same load. Like, what?! On Linux FF is
         | also several times slower at canvas rendering.
         | 
         | [0] https://webglsamples.org/aquarium/aquarium.html
        
           | epuixrk wrote:
           | I'm not an expert but I think it works on IOS with Safari.
           | You have to enable WebGPU in the extra flag category in the
           | settings app.
           | 
           | But I still need to figure out what exactly this is.
        
             | givinguflac wrote:
             | Can confirm, I have it enabled on iOS 18.1 and this seems
             | to work fine.
        
         | soheil wrote:
         | Why do you need webgpu? It's unfortunate that people use
         | technology that is "state-of-the-art techniques to run
         | simulations at interactive speeds" without fully understanding
         | what it's for. General compute on GPU is what webgpu is for..
         | To simulate basic waves like in this demo you absolutely do not
         | need that, in fact it's an indication the author implemented
         | the solution in a non-optimal way. WebGL is fully supported by
         | all browsers fully supported by well-maintained libs like 3js,
         | yet here we are people writing a sin function with basic
         | interference patterns, one of the most elementary 3D
         | primitives, in webgpu and argue that's using the "state-of-the-
         | art" techniques.
        
           | jasmcole wrote:
           | Good question! This is actually a numerical solver for a few
           | coupled partial differential equations - the method in this
           | context (electromagnetism) is called FDTD. It's implemented
           | as a WebGPU compute shader.
           | 
           | You absolutely could do this using WebGL2 compute shaders
           | too, but I thought it would be fun to try this newer API.
        
             | zorgmonkey wrote:
             | Annoyingly WebGL2 doesn't have compute shaders even though
             | GLES3.x that it is based on does.
        
               | pjmlp wrote:
               | Thank Google for that, as they dropped Intel contribution
               | to WebGL Compute, with the reasoning WebGPU would be good
               | enough.
        
             | soheil wrote:
             | I don't understand what other type of solution is there to
             | render on a gpu other than a numeric one?
             | 
             | Here is a very basic shader for what you want:
             | float freq1 = 2.0;       float freq2 = 3.0;       float amp
             | = 0.5;            pos.z += sin(pos.x * freq1 + uTime) *
             | amp;       pos.z += cos(pos.y * freq2 + uTime) * amp;
             | gl_Position = projectionMatrix * modelViewMatrix *
             | vec4(pos, 1.0);
        
               | vardump wrote:
               | That's no solver, it just displays a sine wave pattern.
        
         | jsheard wrote:
         | Especially frustrating in the case of Safari, which only needs
         | to support one native API backend (Metal) on a pretty narrow
         | set of hardware and drivers. Firefox has a much bigger task
         | with needing to support everything, like Chrome, but with far
         | less resources than Google or Apple can afford to throw at it.
        
           | aabhay wrote:
           | Its in technology preview, so likely to go GA at the next
           | major OS cycle (1yish)
        
             | jsheard wrote:
             | I'm not holding my breath, their WebGL2 support entered
             | preview in early 2017 but didn't actually ship until late
             | 2021...
        
         | modeless wrote:
         | WebGL 2 took almost 5 years to come to Safari after Chrome. It
         | will not take as long for WebGPU; development is active now.
         | 
         | It is also a bit frustrating that Chrome has not enabled WebGPU
         | on all platforms by default yet.
        
       | zamadatix wrote:
       | Badass on the visualization side. The multiple emitter portion
       | and the end of the scroll reminded me of
       | https://apenwarr.ca/beamlab/ which demonstrates beamforming
       | (adjusting the phase of adjacent transmitters to focus power
       | towards a specific receiver). To play with this one the "easiest"
       | way to see what's going on is go to the right hand menu, unclick
       | 3 so you just have 2 transmitters, click the "r" button, and then
       | click or click and drag to see how the beam gets optimized (you
       | can see some stats about the received power gain in the righthand
       | side).
       | 
       | While this has to be the most fun to watch demonstration I've
       | seen, something like the free tier of Hamina will likely be many
       | times more useful to those wanting to optimize home Wi-Fi layout
       | https://www.hamina.com/planner. The downside being they force you
       | to make an account whereas this one lets you use it locally with
       | the power of your own browser. The upside being Hamina gives
       | multiple distilled views of the simulation as focused on common
       | Wi-Fi statistics + features and less focus on displaying the wave
       | simulation itself.
        
       | geysersam wrote:
       | Another interesting similar project: https://cemsim.com/ (I'm not
       | the author)
        
       | missblit wrote:
       | Bugs:
       | 
       | #1 if you spam the "add a new source" button you eventually get a
       | JavaScript exception logged to the screen due to an array with a
       | fixed max size of 128 elements overflowing.
       | 
       | #2 this could be graphics card or driver specific (I have an AMD
       | card), but scrolling just right can can break the simulation due
       | the the text boxes; for example by quickly paging up and down, or
       | scrolling all the way to the bottom and then wiggling the scroll
       | position up and down. Once this happens the bad data propagates
       | until the entire thing is filled with noise, solid black, or
       | solid white. If you then scroll up to 3D mode the screen will be
       | filled with a mess of polygons.
        
         | grishka wrote:
         | I did get #2 on an Apple M1, so probably not video card
         | specific.
        
       | dtgriscom wrote:
       | > For example, as you scroll you'll notice that the waves are
       | refracting around these text boxes.
       | 
       | Now, that's useless AND badass.
        
         | jasmcole wrote:
         | Definitely the vibe I'm going for!
        
       | seanp2k2 wrote:
       | Cool visualization but it focuses so much on the
       | ``'-.,_,.-'`waves`'-.,_,.='`` and not on the actual coverage
       | pattern of 6-12.5cm waves, so not as actually useful for showing
       | coverage as other tools, but fun as an art project.
       | 
       | And of course, I can't mention that without shouting out projectM
       | (open-source Milkdrop) that supports WebGL
       | https://github.com/projectM-visualizer/projectm/blob/master/...
       | and one of the OGs, Geisswerks https://www.geisswerks.com/
       | 
       | If you like that, you might also love NestDrop for music
       | visualization tailored for VJs and with special features to
       | support projecting inside domed surfaces
       | https://nestimmersion.ca/nestdrop.php
        
         | jasmcole wrote:
         | Hey, if you click through to one of the example simulations
         | you'll be able to change the visualization from waves to time-
         | averaged power density, which should be closer to what you're
         | looking for.
        
       | Scryptonite wrote:
       | When I run the Waveguide Simulator demo on my Alienware M15 Ryzen
       | Ed. R5 (has a RTX 3070; Windows 11 Pro, Chrome v129), I hear a
       | distinct high pitched flutter noise emanating from my laptop. I
       | thought it was from the speakers, but no, with my volume down it
       | was still present as long as the simulator was playing. Weird,
       | but very cool demo (probably my hardware, never hear this during
       | games or other WebGPU demos). The realistic house simulation
       | yields a different signature in the sound.
        
         | Tiberium wrote:
         | That sounds like coil whine, it's a common thing to hear when
         | GPU is working at full capacity.
         | 
         | https://en.wikipedia.org/wiki/Electromagnetically_induced_ac...
        
         | jasmcole wrote:
         | Interesting! I have a desktop 3070 and hear the same. I don't
         | hear anything on a Mac M1 though.
        
         | eyegor wrote:
         | Coil whine (or capacitor whine) from the gpu running at too
         | high a refresh rate. Easiest thing would be to use nvidia
         | control panel to add an fps cap to something like 2x your
         | monitors max rate for the browser (or globally). It's pretty
         | common with any workload after like 600 fps.
        
         | userbinator wrote:
         | As others have said, it's probably the GPU power supply
         | circuits making the sound; if the pattern of power consumption
         | has frequencies in the audible range, it can cause components
         | like inductors and capacitors to mechanically vibrate at those
         | frequencies and emit sound. The reason you don't hear it in
         | games is either due to the game audio being much louder or the
         | power pattern not having those audible frequencies.
         | 
         | CPU power circuitry can do the same, but given this is using
         | the GPU, it's a safe assumption that it's the latter.
        
       | crazygringo wrote:
       | This is _exceptionally_ cool.
       | 
       | A while ago I was trying to find realistic examples of what WiFi
       | "looks like", to try to get an intuitive sense of how it operated
       | in a house or outside a building -- to what extent it spreads in
       | the same way as a normal lightbulb, or to what extent its vastly
       | larger wavelength complicated the picture.
       | 
       | At the time, literally the only visualization I was able to find
       | was this artistic seemingly nonsense:
       | 
       | https://inspirationist.net/what-wifi-looks-like/
       | 
       | So I'm very happy to see this tool. I'd be even more curious to
       | see a non-animated version that lets you drag your router around
       | and see "illumination" of the overall signal to see how it
       | changes, continuing to take into account how reflections confuse
       | and degrade the usable signal, etc. Instead of the animation of
       | slow wave propagation. Maybe that exists somewhere?
        
         | jasmcole wrote:
         | Thanks! If you navigate to one of the example simulations,
         | you'll be able to change the instantaneous field visualisation
         | to one of time-averaged power density, which sounds closer to
         | what you're looking for.
         | 
         | The cool thing about the speed of WebGPU is that you can drag
         | things around and watch changes in real-time, even if you have
         | to average lots of simulation steps per rendered frame.
        
           | crazygringo wrote:
           | Ah yes, I've found it -- changing "Signal" from "EM field" to
           | "Power". That is _fascinating_ to look at.
           | 
           | Is there a way to move the router around to see how the field
           | changes in response?
           | 
           | As far as I can tell you can do that in the paid version, and
           | I totally understand gating that for people modeling their
           | own home/office layout. But it would be pretty cool as a free
           | educational demo if you could move the router in the
           | otherwise fixed example.
        
       | richbradshaw wrote:
       | I have a Wifi 6E router, so I wonder if 6GHz vs 5 vs 2.4 acts
       | noticeabley differently here? Is the overall shape the same or
       | does the frequency make a big difference?
        
       | crtified wrote:
       | What are the system requirements to run this? Fairly 'standard'
       | Linux system running Chrome here.
       | 
       | "Sorry, there was an error starting the simulation
       | 
       | Sorry, WebGPU is not supported on our device
       | 
       | WiFi Solver may not be compatible with your device."
        
         | cloogshicer wrote:
         | No Linux support for WebGPU in Chrome yet:
         | https://caniuse.com/webgpu
        
         | jeroenhd wrote:
         | Dev tools gave me this link:
         | https://github.com/gpuweb/gpuweb/wiki/Implementation-Status#...
         | 
         | Barely any Firefox support either.
         | 
         | Looks like I'll skip this one.
        
         | throwaway0665 wrote:
         | To run on Chromium Linux you need to enable "enable-unsafe-
         | webgpu" as well as "enable-vulkan" flags in "chrome://flags".
         | Best to disable again afterwards.
        
         | kiwijamo wrote:
         | Doesn't work on Firefox/Windows either.
        
       ___________________________________________________________________
       (page generated 2024-10-20 23:00 UTC)