Florisium's Avatar

Florisium

@florisium.bsky.social

Your calm escape into a uniquely blooming world Join our community: https://discord.gg/DPvkZhwhnN

17 Followers  |  7 Following  |  33 Posts  |  Joined: 05.07.2025  |  1.6645

Latest posts by florisium.bsky.social on Bluesky

btw - check HDR version of these images on Threads - completely different atmosphere!

www.threads.com/@florisium.g...

29.10.2025 15:12 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image Post image Post image Post image

Sunlight meets color, and I’m hooked. Proof that subsurface scattering deserves more hype.

#flowers #mobilegame #cozygame #flowerlovers #homeplant #sandbox #simulationgames #subsurfacescattering

29.10.2025 15:10 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Video thumbnail

Sometimes, the best things grow when you stop trying to control them. This tangled beast I grew up last week, thinkscreenshotsaturday is the best time to share it.

#screenshotsaturday #flowers #mobilegame #cozygame #flowerlovers #homeplant #sandbox #simulationgames #bee #honeybee

25.10.2025 11:16 β€” πŸ‘ 5    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

Autumn is here πŸπŸ‚πŸ₯€

#screenshotsaturday

11.10.2025 10:22 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

I have forwards and mobile - not too many moves allowed πŸ˜… So its a simple multiply-blending that runs after all geometry. For the lights, its a bit hackier - I don't have proper albedo at the pass, instead, I multiply with the back buffer and add the same value on top, very wrong but works for me 😜

07.10.2025 20:13 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image Post image Post image Post image

There are, of course, plenty of limitations (obvious and not-so-obvious) - I’ll dive into those next time πŸ˜‰

And finally, here are a few fresh in-game shots (and remember - the game is still about flowers! 🌸)

(16/16)

07.10.2025 10:39 β€” πŸ‘ 5    πŸ” 1    πŸ’¬ 0    πŸ“Œ 0
Post image Post image

Bonus point: the same approach also gives cheap multi-point (and areal) lights support - in forward rendering, on mobile! πŸŽ‰πŸŽ‰πŸŽ‰

(15/16)

07.10.2025 10:38 β€” πŸ‘ 5    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Performance-wise, it’s similar to the previous method, but no texture fetches, all math is half-based, and only ~30–40 instructions per shape type.
On an iPhone 15Pro, native res, it costs about 0.02–0.2ms, depending on scene complexity and density (all are combined to a single draw-call).
(14/16)

07.10.2025 10:38 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Post image Post image

Using this system, I built a small set (7 types) of analytical AO shapes that cover most in-game dynamic props.
The result is much more detailed and believable than the old texture-based version.

Left = old. Right = new.

(13/16)

07.10.2025 10:37 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Post image Post image

Side views of cylindrical shapes also needed separate math (and again, the right image shows the ray-traced reference).

(12/16)

07.10.2025 10:36 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Post image Post image

Rectangular shapes are trickier since they have hard edges.
I ended up with a slightly different, yet still cheap, function that models the visibility per rectangle size - same logic as with cylinders.

(11/16)

07.10.2025 10:36 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Post image Post image

For a top-down projected cylinder, that relation is proportional to arctan(D/R), where R is the cylinder radius.
This separation (vertical+horizontal) produces results that are visually close to ray-traced truth - see the right image (distances and heights are not correlated on the images):
(10/16)

07.10.2025 10:35 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

The vertical part comes from the formula I showed earlier - nice and straightforward.

The horizontal part, though, depends on how visibility changes with the distance to the surface and the surface’s own size.

07.10.2025 10:34 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

The 2D version is a good start - but it doesn’t capture the whole. We need one more dimension to handle, which makes things trickier.
Ideally, this should be a hemispherical integral of point visibility.
In practice, I simplified it by splitting it into vertical and horizontal 2D components.
(9/16)

07.10.2025 10:34 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Preview
occlusion-simplified

Luckily, this simplifies nicely since cos(arctan(x)) = x/sqrt(xΒ²+1).
That gives a lightweight, computation-friendly formula that still behaves like smooth, realistic occlusion.
You can play with the simplified version here: www.desmos.com/calculator/j...
(8/16)

07.10.2025 10:32 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Post image

The core 2D case is actually simple:
Imagine a flat occluder of width 2W(from -W to W) standing at height H.
The occlusion function looks like:
(cos(arctan((x - W)/H)) + cos(arctan((-x - W)/H))) / 2 + 1
In other words - the sum of light coming from the left and right gaps around the occluder.
(7/16)

07.10.2025 10:31 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

So I finally found the courage to revisit the technique.
This time - no prebaked textures.
Instead, I went analytical - doing the math to emulate occlusion shapes directly for some simple primitives (boxes, spheres, cylinders, cones, etc).

(6/16)

07.10.2025 10:31 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Results were way better than no AO at all, and every earlier game shot you’ve seen used this method.

But... it was never perfect. Fixed textures have obvious limits.

(5/16)

07.10.2025 10:31 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Post image

For the first version of the system, I used static textures to approximate the occlusion shape of some typical primitives.

Just 3 texture types - pulled on for every moving object in the game (could be more than 1 shape per object).
It worked!

07.10.2025 10:30 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Post image

4. Apply some shadow (occlusion) pattern on the area and draw the resulting geometry.

5. And yeah - do the above for every occlusion-receiver pair πŸ˜…

(4/16)

07.10.2025 10:30 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

The base idea is beautifully simple:

1. Define surfaces that receive occlusion.

2. Define objects that cast occlusion.

3. For each receiver–caster pair, compute the projected occlusion area that roughly estimates shadowing of the cast object.

07.10.2025 10:30 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Post image

So, I went back in time and revived a classic: blob shadows - the technique used in early 3D games that often mimicked ambient occlusion rather than true shadows.

(3/16)

07.10.2025 10:29 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Since the game’s main platform is mobile, I needed a fast and robust AO solution for dynamic objects.
Screen-space AO? Not great for mobile-too noisy, not tile-based GPU friendly, inconsistent across devices, and needs heavy filtering.
Ray-traced AO? Same story-not (yet?) practical on mobile.
(2/16)

07.10.2025 10:29 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Post image Post image

A bit technical thread 🧡

I’ve been improving the in-game ambient occlusion system - and ended up with something I call:
Blob-based Analytical Ambient Occlusion on Primitives

Here’s what it does to the final image:
(more examples later in the thread)

(1/16)

07.10.2025 10:28 β€” πŸ‘ 8    πŸ” 2    πŸ’¬ 2    πŸ“Œ 0
Post image

So, how many flowers on one plant is enough for you?

#florisium #flowers #nature #homeplants #cozygame #indiegame #screenshotsaturday

20.09.2025 11:31 β€” πŸ‘ 11    πŸ” 1    πŸ’¬ 0    πŸ“Œ 0
Post image

Cozy corner inspiration for autumn.

#florisium #flowers #nature #homeplants #cozygame #indiegame #screenshotsaturday

13.09.2025 10:24 β€” πŸ‘ 11    πŸ” 3    πŸ’¬ 0    πŸ“Œ 0
Post image

Who’s ready to plant these little sprouts?

#florisium #flowers #nature #homeplants #cozygame #indiegame #screenshotsaturday

06.09.2025 12:36 β€” πŸ‘ 9    πŸ” 5    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

A Fresh Start, Frame by Frame 🏠

#florisium #flowers #nature #homeplants #cozygame #indiegame #screenshotsaturday

30.08.2025 18:48 β€” πŸ‘ 5    πŸ” 2    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

In the dark, every flower finds its light.

Music: Libeccio by Christo4us
(all shots are captured using the in-game video recorder)

#flowers #mobilegame #sandbox #cozygame #gamedev #plants #timelapse

09.08.2025 12:09 β€” πŸ‘ 12    πŸ” 3    πŸ’¬ 0    πŸ“Œ 0
Post image Post image Post image Post image

Check out these awesome shots directly from the in-game photo mode!

"Bloom under the Moon"

#flowers #mobilegame #sandbox #cozygame #gamedev

06.08.2025 12:02 β€” πŸ‘ 9    πŸ” 2    πŸ’¬ 0    πŸ“Œ 0

@florisium is following 7 prominent accounts