[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)