Sign in

Mykhailo Moroz

@michael-moroz.bsky.social
397 followers 224 following 84 posts

Love physics simulations and rendering algorithms. Currently work at ZibraAI as Lead 3D Research Engineer. Discord: misha.m. michaelmoroz.github.io/about/

PostsRepliesMedia
Mykhailo Moroz @michael-moroz.bsky.social · 03/09/2026
I've stress tested the simulation with 4M particles and a 384x384x96 grid. Most of the cost right now goes into the rendering prep, SDF gen and isosurface ray tracing (not ray marching, tracing). Could be substantially optimized if properly skipping unused parts of the grid.
051
Mykhailo Moroz @michael-moroz.bsky.social · 03/09/2026
Thats why particle pools in VRChat still "work". Particles tend to settle in the same-ish configuration with time due to gravity pulling the fluid down and not interacting with the game scene.
140
Mykhailo Moroz @michael-moroz.bsky.social · 03/09/2026
Because without deterministic simulation, timestepping and input synchorization with validation the fluid sim is guaranteed to diverge. It might be still similar enough to be usable, but not if left sitting for a long time, only if you "force" the fluid into a similar state
130
Mykhailo Moroz @michael-moroz.bsky.social · 03/09/2026
The 0 gravity mode is especially cool looking, might be cool to make some kind of guns shooting that stuff around. It could potentially be used for gameplay, but only if you are fine with only the simulation master user having the "actual" fluid state.
130
Mykhailo Moroz @michael-moroz.bsky.social · 03/09/2026
I've optimized the radix sort a bit too, now it can do 5 billion key/value pairs sorted per second while using 0 (!) compute shaders. This makes sorting a tiny part of the simulation. I could even make an infinite unbounded SPH sim now, but only with the particles like below:
140
Mykhailo Moroz @michael-moroz.bsky.social · 03/09/2026
So I'm considering releasing my VRChat fluid simulation on Booth. I've ported it into Udon so it is faster and is easier to use. I used the Radix Sort from my 3DGS plugin, allowing me to do a true SPH sim without approximations. I'd love to head what you'd want to do with it 😄
1152
Mykhailo Moroz @michael-moroz.bsky.social · 28/08/2026
You are welcome to contribute to this project! There is still a bunch of stuff to do to make the game properly playable. github.com/modawan/reone (the path tracing stuff is still on my branch tho)
github.com
GitHub - modawan/reone: Game engine capable of running KotOR and TSL
Game engine capable of running KotOR and TSL. Contribute to modawan/reone development by creating an account on GitHub.
010
Mykhailo Moroz @michael-moroz.bsky.social · 28/08/2026
Here is a debug visualization of where the lights are (auroralightN)
110
Mykhailo Moroz @michael-moroz.bsky.social · 28/08/2026
Of course if I add ReSTIR that should help in general too, I'll do that later. Right now I'm mostly using weighted NEE to sample the point lights, as there is usually a bunch of them in the scenes, like in Ebon Hawk
110
Mykhailo Moroz @michael-moroz.bsky.social · 28/08/2026
It somehow manages to transform an equivalent of unusable garbage into something that looks fine, even though there is at best 1 sample per 100 pixels. Leviathan especially suffered from this as it didnt have many point lights authored, most of light was texture emission
110
Mykhailo Moroz @michael-moroz.bsky.social · 28/08/2026
I'm continuing to work on the path tracing renderer for KOTOR 1/2 using the reone rewrite. This time I've integrated DLSS 4.5 RR - and honestly I'm blown away! Its an orders of magnitude better denoiser than NRD, not to mention it even upscales really well.
160
Mykhailo Moroz @michael-moroz.bsky.social · 17/08/2026
poor blahaj 😢
000
Mykhailo Moroz @michael-moroz.bsky.social · 08/08/2026
Code: github.com/MichaelMoroz...
github.com
GitHub - MichaelMoroz/reone: Game engine capable of running KotOR and TSL
Game engine capable of running KotOR and TSL. Contribute to MichaelMoroz/reone development by creating an account on GitHub.
020
Mykhailo Moroz @michael-moroz.bsky.social · 08/08/2026
Before current AI I wouldn't even try doing this, as Vulkan, even without the path tracing part, is super annoying to get going, at least 10k lines of boilerplate, especially if integrating it into a already existing relatively complex engine. Manually this would take months.
110
Mykhailo Moroz @michael-moroz.bsky.social · 08/08/2026
And you can properly sematically establish what objects are what. I could potentially rewrite the particle systems to run on GPU for example, or transform the emitters into actual volume emitters (path traced smoke sim?🤪)
120
Mykhailo Moroz @michael-moroz.bsky.social · 08/08/2026
Unfortunately this engine still lacks a lot of the main game, but I thought it is a better idea to put this on top of an actual engine rather something like RTX Remix which tries to reconstruct the scene from the captured draw calls, you actually have more room for optimization.
110
Mykhailo Moroz @michael-moroz.bsky.social · 08/08/2026
One of the nice things about old games is that the scene is microscopic by todays standards - 100k triangles. So basically I don't even bother building a proper TLAS-BLAS structure, everything gets thrown into 1 BLAS and rebuilt every frame.
110
Mykhailo Moroz @michael-moroz.bsky.social · 08/08/2026
Main issue here of course is getting a scene from a 2003 game into a shape that is reasonable to path trace. Materials aren't PBR so one must PBRify them using heuristics or remake textures from scratch all together. Lots of objects aren't properly classified either, and can just be unlit.
110
Mykhailo Moroz @michael-moroz.bsky.social · 08/08/2026
The path tracer right now is more or less barebones, just basic PBR materials + weighted NEE for the light sources in the scene. I will probably add ReSTIR and MIS later. Likely a radiance cache like SHARC too on top as well.
110
Mykhailo Moroz @michael-moroz.bsky.social · 08/08/2026
Right now I use the Nvidia Real-time denoising library + FSR 2.0 in nativeres TAA mode. I'll probably make my own denoiser as NRD isnt compatible with the GPL license of the engine. I'm pretty sure if I used DLSS RR it would likely work much-much better, but maybe in the future.
110
Mykhailo Moroz @michael-moroz.bsky.social · 08/08/2026
I've been consider trying to make a more ambitious path tracing project for years now. I thought it would be cool to make it based on one of my favourite games - SW:KOTOR 1 and 2 So I started working on a native vulkan path tracer based on an existing open source engine rewrite.
1141
Reposted by Mykhailo Moroz
Dany Bittel @danybittel.bsky.social · 19/05/2026
A Strawberry. 90 stacks, 88 photos each. 2M splats. @michael-moroz.bsky.social helped out with training it. 👇
3457
Mykhailo Moroz @michael-moroz.bsky.social · 26/04/2026
crazy cool
050
Reposted by Mykhailo Moroz
Pema99 @pema99.bsky.social · 23/04/2026
(🧵 1/6) Recently I've been working on an HLSL interpreter, which can execute shader code entirely on the CPU github.com/pema99/HLSLI... I used it to make a cute little interactive debugger demo. You can try it yourself at pema.dev/hlsl/
56824
Reposted by Mykhailo Moroz
Rune Skovbo Johansen @runevision.bsky.social · 26/03/2026
I know I've been talking about this for over six months now, but I swear I'm working towards releasing the source 😅 - along with an explainer video and a blog post.
The Simpsons Aurora Borealis meme with a chunk of eroded terrain in the background.

Chalmers: Good lord, what is happening over there!?

Skinner: Erosion filter.

Chalmers: E--erosion filter!? Running on the GPU, without simulation, in a single frame, localized entirely to each evaluated point!?

Skinner: Yes.

Chalmers: ...may I see the source?

Skinner: No.
527415
Reposted by Mykhailo Moroz
Monsy! @monsy.monster · 18/02/2026
Figured out a proper Gaussian Splat -> #VRChat workflow using free software and @michael-moroz.bsky.social's implementation. I'm really happy with the result! I made a tutorial on my blog if anyone wants to scan the world and create VRChat maps from it! blog.monsy.monster/gaussian-spl...
191
Reposted by Mykhailo Moroz
Brian Karis @briankaris.bsky.social · 02/02/2026
I'm finally writing up how Nanite Tessellation works. The first few blogs posts are up. More will be coming. graphicrants.blogspot.com/2026/02/nani...
graphicrants.blogspot.com
Nanite Tessellation
Nanite Tessellation, aka Nanite Dynamic Tessellation, aka Nanite Dynamic Displacement was the next major feature I worked on after Nanite it...
116250
Reposted by Mykhailo Moroz
Mike Turitzin @miketuritzin.bsky.social · 06/01/2026
I just released my video about the engine (and game) I've been working on. The engine is based on dynamic SDFs, and the video describes how it works and what it makes possible. Link in the reply! This is my first YouTube video and it took forever - please repost!
1229055
Reposted by Mykhailo Moroz
Morten Vassvik @vassvik.bsky.social · 20/12/2025
Ever seen one of these, and wondered *why* they work? 🧵 This is a so-called Bitonic sorting network, and the illustrations show the two common ways to implement them. From an implementation point of view the two methods are effectively the same, so which one you pick just comes down to preference.
23910
Mykhailo Moroz @michael-moroz.bsky.social · 03/12/2025
I might make a new blog post on this, but that will take time 😪
160
Mykhailo Moroz @michael-moroz.bsky.social · 03/12/2025
Of course, it has a drawback since its much noisier than RT (but is it a drawback really?), and is much less suited for a gas simulation due to using whole integer particle masses, so they cant fill all space properly.
150
Mykhailo Moroz @michael-moroz.bsky.social · 03/12/2025
An additional bonus is that since the masses are uints, as long as it doesn't overflow the counter the mass / particle count is preserved exactly. While in reintegration tracking it would have been lost with time due to float imprecision.
130
Mykhailo Moroz @michael-moroz.bsky.social · 03/12/2025
I like this approach significantly more compared to michaelmoroz.github.io/Reintegratio... since without much velocity averaging this can actually preserve angular momentum significantly better. Not to mention the you get subpixel details without aliasing due to the grid.
michaelmoroz.github.io
Reintegration tracking
In this blog post I’ll explain this advection algorithm and how to use it to make advanced fluid simulations like the ones I made, including Paint streams and Everflow. Before starting, I should give ...
120
Mykhailo Moroz @michael-moroz.bsky.social · 03/12/2025
As long as the particle density is lower than 1.0 particle per cell, you are guaranteed that no resampling happens, which means it will behave exactly like a normal SPH (or anything else) particle sim.
120
Mykhailo Moroz @michael-moroz.bsky.social · 03/12/2025
You could also call this particle resampling cellular automaton, i.e. it tries to resample the actual particle count to keep it lower than the max 2 per grid cell (so that a grid only simulation is possible)
120
Mykhailo Moroz @michael-moroz.bsky.social · 03/12/2025
Decided to go back to making Shadertoy fluid sims for for a bit. This time I improved my particle clustering cellular automaton SPH fluid sim to support multiple species particle merging and splitting. Also some fine tuning of the physics. shadertoy.com/view/tfyyWD
1387
Reposted by Mykhailo Moroz
Kufi Bean @kufibean.bsky.social · 08/11/2025
I am making clouds for @skipsy.ca's new VRChat world. The clouds render faster than the mountains lol #VRChat
24411
Mykhailo Moroz @michael-moroz.bsky.social · 11/09/2025
Gonna add my own 2 coins michaelmoroz.github.io/TracingGeode... www.shadertoy.com/view/ftBGWm rantonels.github.io/starless/
michaelmoroz.github.io
Visualizing General Relativity
When thinking about renders of things like warp drives and black holes we usually just expect to see a simple approximation or an artist rendition, assuming the math required to pull off something acc...
050
Mykhailo Moroz @michael-moroz.bsky.social · 20/05/2025
Yeah I was aware of iResolution, I just never used the z component, but I guess I should still add it for compatibility. Mouse zw has no equivalent in Compute toys, so that needs to be added in the first place. Texture mipmaps for the pass-in/out buffers are not computed unfortunately
010
Mykhailo Moroz @michael-moroz.bsky.social · 11/05/2025
Of course there are still some minor differences: * matrix multiplications are not a*b but mul(a,b) * no GLSL texture types like sample2D / etc * there are no "Shadertoy" channels, you need to resetup them to use absolute indices of the pass_in/out buffer
130
Mykhailo Moroz @michael-moroz.bsky.social · 11/05/2025
Slang can be made extremely close to GLSL/Shadertoy style of shaders by using a set of defines and typealiases, I've made a template in compute.toyts just for that compute.toys/view/1947 I also ported my most popular shadertoy using it: compute.toys/view/1948
1242
Mykhailo Moroz @michael-moroz.bsky.social · 05/05/2025
Compute.toys finally got the Slang compiler integrated, which means its finally time to ditch WGSL 🎉🎉 I've ported my FFT to it, coding in it is much nicer. compute.toys/view/1922 Should try something with its autodiff next.
1202
Mykhailo Moroz @michael-moroz.bsky.social · 03/05/2025
Made a mixed radix FFT implementation in compute.toys/view/1915 It is neat, but I still wonder how do you properly handle large prime factor size FFT's?
compute.toys
Faster Mixed Radix FFT
Forked from https://compute.toys/view/1914 Faster version
0173
Mykhailo Moroz @michael-moroz.bsky.social · 24/04/2025
I mean its just SPH, its not *that* difficult
010
Mykhailo Moroz @michael-moroz.bsky.social · 24/04/2025
No, its written by me, that's why I can not answer your question easily.
110
Mykhailo Moroz @michael-moroz.bsky.social · 24/04/2025
uhhhm, shadertoy?
110
Mykhailo Moroz @michael-moroz.bsky.social · 24/04/2025
The answer to this will require a whole new blog post I'm afraid...
100
Mykhailo Moroz @michael-moroz.bsky.social · 23/04/2025
I've also tested out using it for nontrilinear stuff as well as volumetric integration shadertoy.com/view/w3sXzf shadertoy.com/view/t3sXzX shadertoy.com/view/t3lSzf
shadertoy.com
Shadertoy
050
Mykhailo Moroz @michael-moroz.bsky.social · 23/04/2025
I've ported my vrchat isosurface ray tracer to shadertoy and added it to my fluid simulation there. Its probably the fastest multibounce ray tracing for liquids I've made thus far. shadertoy.com/view/w3sXzs
2192
Mykhailo Moroz @michael-moroz.bsky.social · 06/04/2025
I posted my own implementation of the trilinear isosurface intersection on shadertoy 2 methods, one is the one from jcgt.org/published/00... and the other one is my own idea of using 4 trilinear samples (can use HW samplers here) to reconstruct the cubic. www.shadertoy.com/view/WXS3Rm
shadertoy.com
Shadertoy
090