well, they don't HAVE to be VTables... that's just a general concept... the key idea is to use function references instead of a long sequence of if-else checks...
i'm well aware that virtual functions must be "called", preventing them from being inlined at compile time.... so it wouldn't be as fast as using a large switch block....
it's all a matter of how you setup you program flow.... a function pointer would only need to be fetched once for every pixel where a particle is, then inside that function, a loop for checking neighbors is done, inside which, a switch block determines how particles react to other types that come in contact with it - no "ifs" - all is done as cleanly as possible and without unneeded checks