sparse components

Richard Fabian <[email protected]>
Newsgroups gmane.games.devel.sweng
Message-ID <[email protected]>
I'm working on some stuff at the moment, a kind of collection of techniques
that I've started pulling together into a more coherent single way of
thinking.

One of the techniques is something I've been calling Existence Based
Processing, and it was born of my early implementations of component based
development. I've now heard someone call it Push Processing, but can't find
any references on Google, and wondered if anyone knew of the right search
phrase.
In my component system, I oriented the component processing to a per
component type rather than per entity, which meant I was keeping the I cache
warm all the time. I was lucky, I hadn't noticed this benefit at the time,
and now I do. Also, because components only existed for entities which
needed them, there was no processing done for entities without that
component. At the time I had simple finite state machines for AI that
switched in and out which component the AI was using as a hierarchical FSM,
but I've seen now that this rabbit hole goes deeper.

So, what's this stuff called normally, and also, why aren't we taught
anything about it, and why aren't we using it?

I've seen speed ups in my own code due to rewriting small sections in this
style, so can't fathom why we're not using it in general, or for that
matter, taught it at all.

I've breathed even more life into this technique with my current work on
writing up my experience with data oriented development by adding or at
least clarifying what this sparse existence component technique can offer,
including some work on making your components behave as states for an FSM,
or even, because now I only have the concept of an implicit core entity, the
ability to generate multiple entities from one when needed (such as level of
detail change), and also collapse multiple entities down to one when the
level of detail is no longer necessary.

A bit of background,: I was spurred on a bit by the "OOP is bad" talk into
putting a bit more effort into what I was doing so that other people might
benefit. The basis of my stuff is really a revisit to old computer science,
relational databases to be specific, and leveraging what has been learned
over the decades into something more useful for games. I've found that there
are a number of parallels in database technology and current high
performance game development, and I think it's because we're effectively in
the same hardware situation, just scaled up a lot. I think of the old DB
hard drives as our main memory, and their old small computers as being
equivalent to our modern CPUs and parallel machines. That is, we're using
powerful but small processing machines, committing transforms on the data
set that is in a slow medium.

I'm currently doing general research to find out if there are other old
science techniques that we've forgotten, or not repurposed, while also
writing a proof of concept rogue-like in 3D. This does mean I have to write
two whole games that are exactly the same, as best I can, just to prove any
of my research, but I hope that doing so I may come across some other
unexpected discoveries.

Many thanks for reading to the bottom.

-- 
fabs();
Just because the world is full of people that think just like you, doesn't
mean the other ones can't be right.

_______________________________________________
Sweng-Gamedev mailing list
[email protected]
http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.