|
|
Hi,
how about improving render speeds by tracking of details.
Following idea could be used for in example scene like - meany small rocks
with ultra-high quality (isosurface, complicated multilayer texture
concerning small dust, dirt, tiny dents) - some are near camera, some far
away, others are only reflecting in water.
In short: no need to calculate rocks with such details when they are far far
away, nor if they are just reflecting in blurry water (except where they
are really near to water, like lying in it).
I used to write macros that will put different types of objects depending on
distance from camera, but such approach gets very complicated and
uncomfortible with more complicated scenes. So perhaps it could be
implemented as well on tracer-level, on per-ray basics.
Idea of speed improvment is something a bit like expansion of idea with area
light max_trace_level from MegaPov.
How that would work?
Elements of scene (like texture details, finish special effects, and
possible also objects and other elements) would be renderd with details or
without them, depending on detail_level while tracing giving ray.
For each casted ray, detail_level will start with some value like 100%
(initial value could be decreased for quick-test renders), and it will
decrease
1) depending on traveled length
2) current distance from camera
3) it will decrease each time a new ray is cast:
- radiosity ray
- shadow test ray
- reflection ray (especially for blurred reflections)
test texture is an avarage pigment of in example:
1.0 main_image with interpolate 4
0.3 some bozo with turbulance octaves 10
0.1 small_dust
0.1 small_dirt
now, when this object would be far far away from camera, then it will be
rendered with lower detail_level, perhaps only:
1.0 main_image with interpolate 4
0.3 some bozo with turbulance octaves 10
skipping the dust and dirt layers of texture
object that is quite away from camera (but not very far yet) could have
something like:
1.0 main_image with interpolate 4
0.3 some bozo with turbulance octaves 10
0.1*0.1 small_dust
0.1*0.1 small_dirt
so that if we put a lots of thoes objects, or the object is very long, then
the texture will loose the details more fluently instead of rapiddly
dropping them.
In some way, this problem is simmilar IMHO to mipmapping. Not only less
details for far away objecst whould improve rendering time, also it should
decrease aliasing problems (with even more improves quality)
Now, same thing applies in example to reflection rays, or radiosity rays,
while calculating radiosity from a rock with texture above we can skip the
details.
IMHO it could apply not only to all kinds of texture/material.
MORE ADVANCED IDEA, perhaps even to entire objects, as in - small details
objects would be skipped by the ray if it is very low quality, or better
yet - one the bounding box is hit, object could be evaluated as it is a
sphere or something.
Imagin a complicated isosurface creating a rock. We have few rocks near
camera so want to draw it with high qualiry. More distant rock can be drawn
as low quality isosurface, and the very far away ones even as simple
spheres (they will just pixels anyway).
It is a general idea, something to discuss... I hope my small idea is
interesting :)
--
Post a reply to this message
|
|