Following the previous discussions about GPU support in Povray, which are some
years old now, i'd like to reemphasize this issue.
This is no feature request. Rather i'd like to clarify the purpose of the Nvidia
Optix library and, well, re-initiate the discussion.
Optix is no triangle renderer, it's a collection of building blocks to do
efficient, multi-level GPU raytracing of any type of geometry, including
implicit shapes or iso-surfaces. Anyone in doubt should really study and compile
the examples and see for themselves.
It's well documented (in text and public talks) so here's only the basics:
- The code is to be written in Cuda C (with C/C++ bindings), will be compiled
into PTX and recompiled for the specific hardware.
- By using unified entry-points, something like issueRay, closestHit, anyHit and
by declaring arbitrary data structures, associated to rays and objects, *any*
kind of raytracing algorithm can be implemented.
- BVH-trees and stuff in different flavors already exist (all executed on GPU as
- Traversing, intersecting, shading, re-issuing and all that branching is
handled by the library, to optimally fill the hardware with work (using ques and
worker threads). On modern hardware, one might expect 10,000+ rays to be
evaluated at the same time.
Now, for use with Povray there are mainly these problems:
- Complete re-write of povray's render engine, for a single vendor's hardware
- Memory limits
Why would i still want this?
It's so amazingly fast. For scenes with only a few thousands objects, especially
scenes with few but very complicated iso-surfaces and/or procedural materials,
the increase in speed would be fantastic. I love Povray especially for it's
inbuilt patterns and the way they can be composed. So that should be part of a
GPU port, of course.
So firstly, i'd like to hear your comments on this.
Then i'd like to ask you pov-source experts: To build a proof-of-concept hack,
where should one access the object data? I understand that the SceneData class
in 3.7 is only an interim structure that will go away, but i figure that to be
the place to access all the relevant data after parsing?
If time permits, i'd like to investigate this further, implement some basic
shapes and materials and start benchmarking.
Post a reply to this message