Hey!
Please check out the images above - in full-screen (there are a lot of details)
First, let's talk about YouTube: I've been thinking of starting to make videos again - but on a new channel with a different name. There is just so much weird MCPE stuff associated with "umsoea" now, that I'm actually kind of ashamed to still use this username.
Here are a few "survival-friendly" textures that made:
(downloads are at the bottom of this post)


I think the survival textures are somewhat usable now.
Before I finish this project, I'd like to have most of the overworld vegetation completed.
My progress on learning how ray/path-traced shaders work:
In my last post, I created a renderer with ray-traced shadows, reflections and glass refractions. Every frame calculates a completely new, pixel-perfect image. This approach only works for simple effects that can be calculated perfectly. For example, to calculate a 100% sharp shadow, we just need to shoot a ray from the surface to the light-source and check if there is something in between that's blocking the light. (0 or 1, nothing in between)
This only works for infinitely small light sources. Any real light source has a certain radius/size and thus creates soft shadows. The larger the light source, the softer the shadow.
Calculating soft shadows
We would need to shoot infinite rays from the surface towards all possible points on the light source and then average all the results. We would get a value between 0 and 1 which tells us how much of the light source is exposed and illuminates the surface. 0 is completely blocked. 1 is completely exposed. and everything in between means that there is a soft shadow visible there.
Noise
Because we cannot do infinite checks, the best thing is to choose random points on the light source. Here we finally introduce noise. Noise just means that something is sampled randomly. In our example, this means we shoot a ray from the surface point towards a random point on the light source.
For every pixel, we choose a different, random point - this is the reason every pixel has a slightly different level of brightness.
Accumulating Frames
Now we have soft shadows but a really noisy image.
The easiest way to reduce noise is to just average multiple images/frames.
The noise is different on every frame so when you average them, they "smear" over time and slowly converge to a single correct value.
A good comparison would be a real camera:
The longer the camera aperture opens to take an image, the more the electronic noise caused by the sensor is "smeared" over time and you get a clean image. But longer shutter-speeds also mean that everything that moves is "smeared" as well. This is one of the reasons - besides TAA and denoising - why shaders like PTGI have visible "ghosting" when you move.
Global Illumination
Light is infinitely complex. Light rays bounce around many many times until they loose all their energy. Calculating this cannot be done with super basic raytracing - it cannot be calculated, it can only be approximated by averaging A LOT of random checks/samples. (Monte-Carlo-Theory)
What's the difference between Ray and Path-tracing?
Ray-tracing is just a general term for calculating things like intersections with vector-mathematics. Path-tracing is just a special/advanced use of ray-tracing.
During Path-tracing, we follow one possible path of a light ray - it can reflect, refract, scatter, be absorbed etc.... And at the end we get an RGB value that describes the brightness at this specific pixel. By doing this many many times randomly and for every single pixel, we get a clean final image - the average of all the individual light paths.
This takes a lot of time and is just an approximation of something infinitely complex that cannot be calculated directly.
The goal was to code a simple Monte-Carlo path-tracer in minecraft. That's done now.
I don't want to dive any deeper into graphics programming for now. - I was mostly interested in the "geometric" aspect. More advanced topics like BRDFs, denoising and optimizations require a lot more math and system level understanding.

Added a debug screen that displays a few technical values such as the light source storage or the auto-focus distance, etc.. The image on the right is an "infinity mirror room". 4 spheres and 2 blocks of orange glass, surrounded by iron_blocks (mirrors). The auto-focus for the DOF is also working through reflections and through glass. There is an option to switch between different auto-focus modes. (focus glass surface directly, ignore glass and focus whats behind, focus what's visible in reflections)
Downloads:
Hold_Up 홀드업
2024-07-25 19:05:40 +0000 UTCXTRM XPRT KILR
2024-06-09 09:22:28 +0000 UTCFakey
2024-03-04 18:32:42 +0000 UTCSN vlogs SNBcoolvids
2023-07-07 18:59:30 +0000 UTCellis furman
2023-06-19 22:05:03 +0000 UTCellis furman
2023-06-19 22:03:49 +0000 UTCKaden Wolfenden
2022-06-21 08:34:34 +0000 UTCAlex
2022-05-18 03:50:58 +0000 UTCDavid Villegas
2022-04-12 06:08:45 +0000 UTCEnrique Castillo
2022-01-17 14:51:26 +0000 UTCLix Tertrax
2021-11-06 10:18:46 +0000 UTCumsoea
2021-10-25 23:24:02 +0000 UTCumsoea
2021-10-07 01:20:16 +0000 UTCumsoea
2021-10-02 23:23:47 +0000 UTCma men
2021-09-08 00:58:29 +0000 UTCumsoea
2021-08-24 17:40:28 +0000 UTCYassin
2021-08-20 15:45:19 +0000 UTCumsoea
2021-08-16 20:21:05 +0000 UTCumsoea
2021-07-07 17:50:46 +0000 UTCumsoea
2021-07-03 13:28:15 +0000 UTCumsoea
2021-07-02 16:28:10 +0000 UTCumsoea
2021-07-01 21:41:12 +0000 UTCVIPUL
2021-05-06 04:13:25 +0000 UTCDevilswarchild
2021-05-04 17:33:48 +0000 UTC