[HN Gopher] Shader School - An introduction to GLSL shaders that... ___________________________________________________________________ Shader School - An introduction to GLSL shaders that runs in your web browser Author : ducaale Score : 202 points Date : 2021-09-26 11:31 UTC (11 hours ago) (HTM) web link (github.com) (TXT) w3m dump (github.com) | thrower123 wrote: | It seems really odd to me that GLSL and HLSL never unified into a | common language. | pjmlp wrote: | Because neither Nintendo nor Sony consoles use any of them, so | in practice there are five major shading languages. You forgot | MSL. | | And for WebGPU, it seems like C++, Rust and HLSL had a baby | named WGSL. | | Finally, GLSL on desktop, GL ES, WebGL and Vulkan isn't the | same language anyway, just close enough to port most shaders. | Jasper_ wrote: | Nintendo uses GLSL (you can verify this by looking at some of | the .sharc files accidentally included in Mario Kart 8 [0]). | | Sony uses a variant of HLSL called PSSL [1], where one of the | goals to it was being HLSL-compatible. | | [0] https://tcrf.net/Mario_Kart_8/Kiosk_Demo_(April_4th,_2016 | )/d... [1] https://ubm- | twvideo01.s3.amazonaws.com/o1/vault/gdceurope201... | pjmlp wrote: | Not quite right, the Wii uses a GL based API similar to GL | 3.3. | | Not all Nintendo consoles do so. | | And the switch has even GL 4.5, Vulkan and NVN to chose | from. | | As anyone with some graphic programming experience in cross | platform knows, even among GL variants, being a variant is | enough for shaders not to compile the same way and require | code rewrites. | Jasper_ wrote: | What? The Wii uses the GX API from the GameCube [0], | which is not similar at all to GL 3.3; it was developed | in 1999. It does not have any form of programmable | shaders; it uses TexEnv-style combinators. | | The Wii U has a custom GX2 API, where the official shader | language is GLSL (again, see the Mario Kart 8 kiosk | demo). | | The Switch has NVN, GL, Vulkan, where the official shader | language for all three is GLSL (based on NVIDIA's GLSL | compiler). | | [0] https://libogc.devkitpro.org/gx_8h.html | [deleted] | rectang wrote: | As an outsider, it's really hard to discern what I might | choose to learn amongst graphics tech. I've tried to invest | my learning in subjects and technologies that aren't going | anywhere and where my knowledge will pay off over decades -- | computer science fundamentals, math, SQL, C, vanilla | JavaScript, HTML, CSS, LaTeX, Git, Python, etc. It looks like | everybody's still fighting it out in graphics though. | Jasper_ wrote: | GLSL and HLSL are close enough; as a professional engine | developer I'm biased towards HLSL but just learn whatever | you can. | Agentlien wrote: | Honestly, if you learn hlsl or glsl it's not much work to | learn the other. | | I originally learned opengl in school and after a few years | of working with it I transitioned to a job where we | primarily used Direct3D. I guess I had passively picked up | enough bits and pieces along the way because I never really | thought about the shift. | | I briefly looked at Vulkan when it first came out, but I | haven't had the time to get into it. That's a whole | different beast. | billti wrote: | This. I wrestled with the same topic a couple years ago. | Not only which to use, but once you choose a "common" one | (say OpenGL), then actually getting pixels in a window is | still different across platforms (hence things like SDL | and GLFW). | | For me I settled on: 1) Learn WebGL in the browser. It's | a pretty good subset of OpenGL [ES] and an easy | environment to experiment in. Then 2) learn a more | "native" approach with good tooling support, such as | Direct3D 11. (I wouldn't get into D3D12 or Vulkan until | you learn the basics pretty well). | | As others have mentioned, while the landscape is | confusing, the concepts across them are pretty similar | once you get a foothold. | mhh__ wrote: | FWIW A engine Dev at a Sony owned studio tells me they do | have HLSL in their pipeline for their compute shaders | pjmlp wrote: | Great, but that isn't what LibGNM and LibGNMX use out of | the box. | Impossible wrote: | Playstation uses PSSL, which is basically HLSL with some | slightly different semantics. It's possible to compile hlsl | as pssl with a single (small) header file with some | preprocessor defines in it. PSSL and HLSL are not developed | in lock step though so all valid PSSL is not valid HLSL and | vice a versa even without defines. It's not possible to | actually get into details without breaking NDA and I | haven't actively done Sony development since PS4 days (5-6 | years ago) | dahart wrote: | HLSL is proprietary, and GLSL is open. It would be more odd if | they had somehow unified. We still have plenty of proprietary | vs open choices in computer languages - it doesn't seem odd C++ | and C# haven't unified, does it? | thrower123 wrote: | Most people are probably working at the Unity or Unreal or | Godot level anyway. Interaction with graphics APIs is pretty | niche these days. | Impossible wrote: | Vulkan supports both officially, although GLSL support is | better. To be fair Vulkan kind of assumes the game engine | shader compiler does most of the heavy lifting and using either | glsl or hlsl directly in a small Vulkan application is a pain | compared to OpenGL or DirectX. | silverfrost wrote: | 7 years old? | pjmlp wrote: | Given the progress of WebGL adoption and development tools, | still pretty much up to date, for the most part. | | Safari 15 just added WebGL 2.0 available on stable, and native | debugging tools are still the way to go for most cases. | | After 10 years. | beebeepka wrote: | Yep, not much had changed over the last few years on that | regard. Well, except running complex 3d scenes in a modern | browser is mostly fine these days. Plenty of performance | | I still remember Macromedia/Adobe showing off their flash 3d | engine. Nothing was accelerated, just software rendering. | Ugly and slow but there wasn't anything better at the time. | It went nowhere I think | pjmlp wrote: | Of course it went nowhere, we have spent 10 years catching | up with 2011, after killing Flash. | | See Unreal Engine 3 demo on Flash. | | And with Web 3D reflecting 2012 hardware in 2021, no wonder | that the answer for ultimate 3D and good debugging tools is | native on mobile, or server side rendering with streaming. | dahart wrote: | > we have spent 10 years catching up with 2011, after | killing Flash. | | Lol, Flash 3d was built on OpenGL and DirectX, which are | still here and have progressed since then. What are we | catching up with? Adobe chose to kill flash because of | WebGL. | pjmlp wrote: | Lol, it wasn't Adobe that killed plugins, rather an | intifada against browser plugins, that is yet to match | Adobe's tooling. | dahart wrote: | Hahaha Flash abuse by advertisers and spammers is a big | reason plugins met their well-deserved end. I really am | sorry that you lost your favorite tools, Flash was truly | awesome for animators and developers. What you're talking | about is separate and independent from GL APIs, which | don't attempt to compete in the artist-facing tooling | space at all. | pjmlp wrote: | The irony is that native game development and server side | rendering is where all the 3D programming fun is | nowadays. | | Even when WebGPU eventually comes out into stable Chrome, | it will take again 10 years to similar adoption, and it | won't be anything more than a plain 1.0 MVP, short of | many things that Vulkan, Metal and DirectX 12 Ultimate | are capable of in 2021. | | Enjoy your pyrrhic victory. | dahart wrote: | Safari, made by Apple, was the lone holdout for WebGL2. | You're familiar with Apple's relationship to Flash. No I | won't be surprised _at all_ if Safari holds out on | WebGPU, and it will be _precisely_ because it offers | functionality that Metal already has. | | > Enjoy your pyrrhic victory. | | I don't understand why you're repeatedly spending time on | WebGL threads sharing sour grapes about Flash. They don't | compete. At all. WebGL is not an authoring tool, and | Flash was. Your sentiment is just laughably misplaced. | Adobe killed flash, Adobe alone is where your ire should | be aimed, for not making an ecosystem that could | withstand abusive content creators. | pjmlp wrote: | As if WebGL and WebAssembly protect anything against | abusive content creators. | | Worse, they can't be be turned off, can be used for | tracking analytics as well and it isn't as if shaders | can't be used for mining. | BrightGlow wrote: | Not sure about other browsers but this is incorrect for | Chrome and Firefox. They both have flags to disable WebGL | and WASM. Please be careful not to spread misinformation, | we owe it to ourselves to research our posts well. | CodeArtisan wrote: | https://thebookofshaders.com | | Still incomplete but browsable online and has its own interactive | shader editor | | (try to click on values like floats or vectors) | | https://thebookofshaders.com/edit.php?log=161127202429 | doctorhandshake wrote: | For anyone looking to pick up shaders for the first time, I | recommend _not_ beginning with the book of shaders. It's an | excellent introduction to a particularly heady slice of shader | programming that, in my opinion, is a blind alley for folks new | to shaders. I think focusing on fragment shaders rendering as | full-screen quads makes the process feel more arcane and mind- | shattering than it does when you consider the frag shader's | role in a 3D rendering pipeline. In the latter context, the | simultaneous invocation of every frag doesn't feel like a | puzzle to solve but a reasonable part of getting pixels | onscreen as part of a 3D render. For that reason I recommend | newbies work on using fragments in the context of materials | that include vertex and potentially compute shaders to | manipulate geometry and to replicate things like phong shading | or a shader-based particle system first. | sydthrowaway wrote: | Very sad that none of the fragment shader experts have written a | book focusing on generative art. The Book of Shaders is very | basic. | | How to create something like this (including sound!) while | thinking on a per color x,y basis is mind boggling. | | https://www.shadertoy.com/view/XsfXD2 | modeless wrote: | Inigo Quilez has a ton of great material: | https://iquilezles.org/www/index.htm | | It's not printed on dead trees but there's easily enough | covered there for a book or three. | pdkl95 wrote: | Thinking about designing a scene in a fragment shader is | already mind boggling. Writing a new shader from scratch live | in front of an audience within a 25 minute deadline is insane. | The demoscene calls this a "Shader Showdown" competition, and | they are amazing to watch. | | A good example is the Revision 2021 semi-finals[1]. The entire | video is worth watching, but I especially recommend watching | the last half of evvvil-vs-flopine (from about 43:00); the last | few minutes (from ~56:00) fundamentally changed my | understanding of what is possible in a fragment shader. Ray | marching into a hand crafted signed distance field is such a | bizarre way of thinking about a scene. | | [1] https://www.youtube.com/watch?v=NBdRfFwuP40 | | edit: corrected 'last few minutes' time | jedimastert wrote: | Also not a book, but Sebastian Lague has some absolutely | beautiful generative art | | https://www.youtube.com/user/Cercopithecan | trollied wrote: | This is the one that blew my mind: | https://www.shadertoy.com/view/3lsSzf | | 5 hour video of its creation: | https://www.youtube.com/watch?v=Cfe5UQ-1L9Q | | Utterly amazing. | train_robber wrote: | I would recommend having a look at "The Art of Code" youtube | channel. There is some interesting material there. | | https://www.youtube.com/watch?v=rvDo9LvfoVE is a good first | watch. | ducaale wrote: | The sequel to shader-school: Learn the WebGL API | | https://github.com/stackgl/webgl-workshop | modeless wrote: | Maybe this is a good place to note that with the release of | Safari 15 now every major browser has WebGL 2 enabled. It's | finally possible to rely on WebGL 2 without excluding iOS users. | For GLSL that means you can upgrade to a new major version of the | language. Some limitations on loops have been lifted, bitwise | integer operations are available, as well as many other things: | https://webgl2fundamentals.org/webgl/lessons/webgl2-whats-ne... | poniko wrote: | And with the latest release of Chrome/Edge you can now tinker | with WebGPU stable release. | greggman3 wrote: | I must be misunderstood your comment but WebGPU is has not | shipped yet except behind flags and or origin trials. the | specs are still changing and not done | poniko wrote: | My bad it's in origin and available for tinkering nothing | else, that was what I was going for. | pjmlp wrote: | To note that WSGL still is pretty much WIP, with many | semantics up in the air how they will look like in version | 1.0. ___________________________________________________________________ (page generated 2021-09-26 23:00 UTC)