Hi,
Rusky wrote:Okay, we've been over this, but: "To support <not being unacceptably slow or low-quality>, the application has to provide <which culling techniques to use>, where <those techniques> are <dependent on various high-level characteristics of the scene, like whether it is open or maze-like or somewhere in between, or has mostly-static or mostly-dynamic components, or what kinds of motion the camera will be going through>.
And as I've already pointed out multiple times (including examples in most cases); an application can provide that information by creating the "dependency graph" a certain way.
Rusky wrote:Brendan wrote:most of these things (all except occlusion queries) have already been discussed and I've already been shown they're easily supported for my system.
Brendan wrote:Except that for my system, the application has no need to care if an object is actually occluded or not because the application is not responsible for micro-managing the rendering in the first place.
So, which is it? Is the application in charge of mangling the dependency graph it hands to the driver- inserting portal framebuffers, culling invisible regions, and otherwise implementing these techniques? Or is the application "not responsible for micro-managing the rendering"?
The application provides the dependency graph in any way it wants (which includes structuring the graph to achieve portals, octrees, pre-processed occlusion, etc); and the video driver renders the dependency graph in any way it wants (which can include doing additional occlusion in any of many ways; and can mean software rendering or GPU, and can include forward rendering or deferred rendering or ray casting or...). Think of it like HTML - the server generates the HTML/CSS however it wants (including describing frames, tables, whatever), and the web browser displays the HTML/CSS however it wants (and the server doesn't constantly pester the web browser for every single part of the DOM).
Rusky wrote:Brendan wrote:ray casting where occlusion queries doesn't make sense in any way at all, or...).
Occlusion queries make perfect sense for ray casting. Ray casting still scales with the number of potential objects, and occlusion queries are just one way to cull parts of a scene graph.
Sure; cull all objects that aren't directly visible, that also don't cast visible shadows, that also aren't indirectly seen in any reflection, and also don't cast shadows that are seen in any reflection. The cost of determining that you can't cull anything is going to cripple performance for no gain.
Brendan wrote:Brendan wrote:Are you serious? You create a shadow volume, use it to create a stencil buffer, and that stencil buffer contains... triangles!?
Perhaps not in the traditional implementation, but that's not the only way to use shadow volumes.
So now there's a mystical way of using shadow volumes that doesn't involve a stencil buffer, that doesn't seem to be mentioned/described anywhere on the Internet (including in your post). Yay!
Brendan wrote:Are you telling me your magical triangles-only method doesn't use shadow volumes? Because otherwise it's going to be doing per-fragment stuff.
It doesn't use shadow volumes, doesn't use stencil buffers and doesn't use z buffers.
Rusky wrote:Besides, you still haven't described how your triangles-only method avoids lighting artifacts on smooth surfaces.
The only cause of artefacts that might effect my lighting system (that I'm aware of); can be solved with smart tessellation (e.g. inserting a new vertex at the point where a specular highlight would be within the triangle, or on the closest edge to a specular highlight if its not within the triangle).
Cheers,
Brendan