The setup I’m looking to support these effects is very specific: I’m using a parallel-projection isometric viewpoint, with global ambient lighting (well, as far as the viewer is concerned,) a global directional light source (again, as far as the viewer is concerned,) which I want to project shadows, and probably a large number of point/spot light sources with very limited bounds that are unlikely to intersect or even affect most of the world, which don’t need to cast shadows.
My thought for supporting shadow casting is essentially to render the world from the perspective of the directional light source, at a similar resolution to the main screen, with all textures disabled, to produce a pixel-by-pixel depth-map of the screen. Then, during the main rendering process, diffuse lighting would be disabled, or greatly attenuated, for points of greater depth in terms of the shadow-projection coordinates than those produced in the shadow-rendering pass. Y’know, because they were obscured.
Water surfaces in the engine I’m trying to develop would typically be completely flat, and the advantage of isometric projection is that differences in height can be compensated through simple translation, so my fudge solution would be render the world upside down at the same angle relative to the surface normal from the viewer’s perspective, then slap the generated image onto the water surface modulated with a nice ripple effect. This isn’t true ripple reflection, which would require many, many viewpoints rendered, but it’s close enough for aesthetic purposes.
While this is all probably doable, and reasonably efficient, I don’t know if it can be done without hacking the J3d source, so especially in that scenario some tips and pointers would be appreciated.