Re: Re: NSOpenGL RenderKit

Philippe C.D. Robert <[email protected]> Thu, 24 Oct 2002 12:25:28 +0200
Newsgroups gmane.comp.gnu.3dkit.general
Message-ID <[email protected]>
On Wednesday, October 23, 2002, at 05:10  Uhr, Brent Gulanowski wrote:
> On Wednesday, October 23, 2002, at 06:44  AM, Philippe C.D. Robert 
> wrote:
>
>> This is a very interesting issue. The GNU 3DKit was developed as a 
>> OpenGL based 3D framework only, although the idea to write it came 
>> from NeXT's 3DKit. Now my research interests have shifted a little 
>> and I am less interested in pure OpenGL based stuff. Up until 
>> recently I did not think of making the GNU 3DKit more generic, 
>> though. But then I started thinking about how the next gen 3DKit 
>> could be used to render a scene using different techniques (I am 
>> particularly interested in ray tracing, but other scanline based 
>> techniques would be interesting as well). My idea was to manage a 
>> scene in a scene database which could then be rendered by different 
>> renderers. Of course this needs much more thinking, but I now believe 
>> that it is worth it. This has the drawback, that a running version of 
>> it will be even more delayed though.
>>
>> Is this really worth the effort, is anyone else interested in using 
>> such functionality?
>>
>
> I've wondered about this, too. I think the difficulty is that the more 
> optimized the OpenGL renderer is, the more closely tied it is to the 
> scene graph representation. (Actually, this is an area I'm weak on -- 
> I understand the idea of resorting the polygons based on state, but 
> not how this works nicely with sorting them based on visibility.) 
> Given a tree organized spatially, multiple scan line renderers could 
> be supported by providing a different method, and renaming the OpenGL 
> render method to something like "renderToOGL". For a ray tracer, would 
> the nodes still be involved directly in producing output? I can 
> imagine a method that accepted a ray and returned it as reflected and 
> refracted components.

In the design approach I have in mind the scene graph part of the 3DKit 
is decoupled from any concrete renderer - you therefore pass a renderer 
when performing an action on the scene (draw, cull, ... ) which knows 
by itself how to do the job. Thus its the responsibility of the 3DKit 
to provide developers with an API for writing such renderers w/o having 
to know about internals of the 3DKit.

I am currently working on this, I let you know as soon as I have 
something more concrete to show!

> Do ray tracers use polygon approximations or mathematic descriptions 
> for curved surfaces? In the latter case, the scene objects would be 
> fundamentally different than the objects aimed at OpenGL or another 
> realtime renderer. You could have scene objects that produced their 
> own approximations when a scan line renderer was used, and used their 
> mathematical descriptions (if they existed) when a ray tracer (or 
> other offline renderer) was used. Is this too problematic? Would 
> anyone want an abstract scene representation that could adapt itself 
> to the renderer? The predictable solution is that you have a 
> completely different set of node classes, because the overlap in 
> functionality is too small. But it would be nice, for an 
> artist/designer, to produce one scene specification that could be 
> re-used with different renderers, and optimized itself for each of 
> them.

A good scene graph should IMHO be able to manage data in any format - 
remember that a scene graph is 'only' a data structure. It's the 
renderer's responsibility to know how to perform specific actions on 
the graph's data. To help a renderer doing the job well the GNU 3DKit 
could still provide some methods to optimise a scene representation for 
a specific target, though.

-Phil
--
Philippe C.D. Robert
http://www.nice.ch/~phip