Handling Scale

This is an important conversation I’ve seen almost no talk about. How do we plan on handling scale? Cells come in all shapes and sizes. You can see a single-celled organism that makes a tardigrade look small, or others that make it look huge. Do we have any plans for handling this? Or do we just plan to have a “cell size” and a macro size, etc?

So far, yea it seems the plan is to have set scales rather than a dynamic system. I figure it comes from the fact somebody has to be willing to code something better if that’s what they want.

1 Like

I have to wonder. What would such a system even look like though? I think it would add a ton to the game, but I’m not quite sure how to get it right.

I mostly started this thread as I really think it should be dynamic, but I wanted to discuss the logistics of doing that. How would it work?

Also thinking about clouds of bacteria for filter feeders like rotifers to feed on. Stuff like that is quite important for simulating an ecosystem.

The name escapes me of the algorithm but, you actually have to do this with planets and huge worlds/levels like in say Elite Dangerous and Star Citizen. Floating point errors become increasingly bad when you have extreme differences in scale between different objects therefore, in some games you have to constantly change and track the scale of everything, and hide things that are too small or too big in order to suit the perspective of the player. This is why big levels are chunked. There’s also thing like Floating Origin which is needed because the further something gets from the world origin, the more it jitters and game physics can begin to breakdown.

You could use point drawing in a shader. Drawing points is significantly cheaper than drawing any number of triangles according to my OpenGL reference as it relies more on a GPU’s pixel fill rate which in modern cards is comically high. This is also why some scientist have been researching using Point Splatting for drawing meshes

I know that. And at some point, single-celled organisms will need to be rendered as more of a cloud than individual organisms.

What I’m more talking about here is the really large single-celled organims. If I am playing as an equivalent to a tardigrade I want to see long strings of Cyanobacteria around me. As well as seeing other things of many different scales. If everything is ruffly the same size cells very quickly all look the same.

Yeah it’s a difficult problem. Unreal addresses this with Nanite inherently so devs on that engine don’t even have to worry about this sort of thing (at least on the graphics side) but, we’ll probably need to roll our own solution since Godot frankly has no plans of addressing this sort of thing.

The general algorithm would have to constantly keep triangles on screen above a certain size (at a minimum larger than a pixel) and also incorporate a means to chunk meshes. We need to probably incorporate the metric system and ensure for game physics reasons that we are not allowing interactions at ridiculous scales, so individual physics bodies/capsules below a certain diameter should simply be discarded, and very large ones chunked into planar/triangular meshes.

As for the matter of physics interactions with many tiny things we would need a custom solution for hit scans and we would need generated physics bodies like Total War uses that encompass a group. The graphics side would probably need a fairly elaborate LOD system, I can’t see us doing anything other than billboarding when triangles become too small to cleanly and quickly draw.

Edit: I looked it up to actually confirm and the physics system Total War uses is most likely something like Spatial Hashing with Swept AABB.

Spatial Hashing: https://hhoppe.com/perfecthash.pdf
Swept AABB: https://www.amanotes.com/post/using-swept-aabb-to-detect-and-process-collision

Not only that but stuff like AI. We have a ton of processes running for every cell. We need to handle that.

With the current mutation system are giant single-celled organisms even practical in Thrive? You would need to slowly build up something massive one cytoplast at a time. Would something like the cells that gobble up hundreds of photosynthetic cells to form a symbiotic relationship with ever be possible?

You would have to abstract more and more the bigger it gets. I imagine a giant thing would necessarily have to be very dumbed down. All those processes would have to get truncated down to something more manageable. Path finding would need some sort of clustering solution, like turning a group into one thing, without detailed consideration of individual parts. I’m not sure what the solution here is but, I can see there being lots of hand-waving.