The vine growing algorithm could be modified so that the constants are replaced with random numbers from a given interval (as suggested by Arvo) to introduce variety. Also there exists room for different plant types to be introduced with different growing algorithms.
The collision detection module needs to be tested with a variety of simulators to get a better idea of its performance. The use of the module with the plant growing module is a start, but it doesn't offer a complete test of the module.
Initially I planned on using spatial division to reduce the number of object against object tests. However this wasn't implemented after I wrote the function for determining which polygons of an object belonged to which voxels of its container, as after that point I saw that deciding upon spatial occupization wasn't a trivial task that could be done quickly. It would be too expensive an operation to carry out everytime the database was updated. Instead of a full spatial division scheme, the database could be divided into those objects that didn't move/change and those that did, and have one spatial subdivision structure that held the objects that didn't change or move and wouldn't have to be rebuilt.
Instead of deciding upon spatial occupancy using the object itself, occupancy could be decided upon using a bounding volume around the object. Deciding upon occupancy would be a much simpler task on a simple volume, rather than on an arbitrarily complex object. Thus the current method of global bounding boxes could be made use of in creating a spatial division structure to reduce object against object testing. It would probably be worth while to exam if any improvements can be obtained by using other types of bounding volumes, although I don't think there will be much improvement.
Perhaps the biggest gains in efficiency can be obtained by being able to predict a better intersection time so the amount of incorrect database states generated and checked is reduced. Bisection works (taking into account numerical errors), but is too slow as it can check a large number of wrong database states before reaching the correct one. Faster methods, such as Newton's root finding method, rely on having a function available, and from this function a guess at the time of intersection can be made. The convergence is much faster than bisection, which doesn't take into account any information. The main difficulty is finding a function that reasonably models the state of the database as a function of time. Candidate functions could be influenced by the following factors:
The purpose of the function would be to help guide the determination of contact time.