1 / 109

1.1k likes | 1.2k Vues

Acceleration. Digital Image Synthesis Yung-Yu Chuang 10/8/2009. with slides by Mario Costa Sousa, Gordon Stoll and Pat Hanrahan. Classes. Primitive (in core/primitive.*) GeometricPrimitive InstancePrimitive Aggregate Two types of accelerators are provided (in accelerators/*.cpp)

Télécharger la présentation
## Acceleration

**An Image/Link below is provided (as is) to download presentation**
Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.
Content is provided to you AS IS for your information and personal use only.
Download presentation by click this link.
While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.
During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

**Acceleration**Digital Image Synthesis Yung-Yu Chuang 10/8/2009 with slides by Mario Costa Sousa, Gordon Stoll and Pat Hanrahan**Classes**• Primitive (in core/primitive.*) • GeometricPrimitive • InstancePrimitive • Aggregate • Two types of accelerators are provided (in accelerators/*.cpp) • GridAccel • KdTreeAccel**Hierarchy**Primitive Instance Primitive Aggregate Geometric Primitive T Material Shape**Primitive**class Primitive : public ReferenceCounted { <Primitive interface> } class InstancePrimitive : public Primitive { … Reference<Primitive> instance; }**Interface**BBox WorldBound(); bool CanIntersect(); bool Intersect(const Ray &r, Intersection *in); bool IntersectP(const Ray &r); void Refine(vector<Reference<Primitive>> &refined); void FullyRefine(vector<Reference<Primitive>> &refined); AreaLight *GetAreaLight(); BSDF *GetBSDF(const DifferentialGeometry &dg, const Transform &WorldToObject); geometry // updatemaxt material**Intersection**• primitive stores the actual intersecting primitive, hence Primitive->GetAreaLight and GetBSDF can only be called for GeometricPrimitive struct Intersection { <Intersection interface> DifferentialGeometry dg; const Primitive *primitive; Transform WorldToObject; }; More information than DifferentialGeometry; also contains material information**GeometricPrimitive**• represents a single shape • holds a reference to a Shape and its Material,and a pointer to an AreaLight Reference<Shape> shape; Reference<Material> material; // BRDF AreaLight *areaLight; // emittance • Most operations are forwarded to shape**Object instancing**61 unique plant models, 1.1M triangles, 300MB 4000 individual plants, 19.5M triangles**InstancePrimitive**Reference<Primitive> instance; Transform InstanceToWorld, WorldToInstance; Ray ray = WorldToInstance(r); if (!instance->Intersect(ray, isect)) return false; r.maxt = ray.maxt; isect->WorldToObject = isect->WorldToObject *WorldToInstance;**Aggregates**• Acceleration is a heart component of a ray tracer because ray/scene intersection accounts for the majority of execution time • Goal: reduce the number of ray/primitive intersections by quick simultaneous rejection of groups of primitives and the fact that nearby intersections are likely to be found first • Two main approaches: spatial subdivision, object subdivision • No clear winner**Find bounding box of objects**Bounding volume hierarchy**Find bounding box of objects**Split objects into two groups Bounding volume hierarchy**Find bounding box of objects**Split objects into two groups Recurse Bounding volume hierarchy**Find bounding box of objects**Split objects into two groups Recurse Bounding volume hierarchy**Find bounding box of objects**Split objects into two groups Recurse Bounding volume hierarchy**Find bounding box of objects**Split objects into two groups Recurse Bounding volume hierarchy**At midpoint**Sort, and put half of the objects on each side Use modeling hierarchy Where to split?**If hit parent, then check all children**BVH traversal**Don't return intersection immediately because the other**subvolumes may have a closer intersection BVH traversal**Quadtree (2D)**Octree (3D) Space subdivisionapproaches Unifrom grid**KD tree**Space subdivisionapproaches BSP tree**Preprocess scene**Find bounding box Uniform grid**Preprocess scene**Find bounding box Determine grid resolution Uniform grid**Preprocess scene**Find bounding box Determine grid resolution Place object in cell if its bounding box overlaps the cell Uniform grid**Preprocess scene**Find bounding box Determine grid resolution Place object in cell if its bounding box overlaps the cell Check that object overlaps cell (expensive!) Uniform grid**Preprocess scene**Traverse grid 3D line = 3D-DDA (Digital Differential Analyzer) Uniform grid traversal naive DDA**octree**Octree**K-d tree**A A Leaf nodes correspond to unique regions in space**K-d tree**A B A Leaf nodes correspond to unique regions in space**K-d tree**A B B A Leaf nodes correspond to unique regions in space**K-d tree**A C B B A**K-d tree**A C B C B A**K-d tree**A C D B C B A**K-d tree**A C D B C B D A**K-d tree**A D B B C C D A Leaf nodes correspond to unique regions in space**K-d tree traversal**A D B B C C D A Leaf nodes correspond to unique regions in space**BSP tree**6 5 9 7 10 8 1 11 2 4 3**BSP tree**6 5 1 outside ones inside ones 9 7 10 8 1 11 2 4 3**BSP tree**6 5 1 5 6 7 8 9 10 11 2 3 4 9 7 10 8 1 11 2 4 3**BSP tree**6 1 5 5 9b 9 6 7 9a 10 11a 8 9b 11b 7 10 11b 8 9a 1 11 11a 2 4 3**BSP tree**6 5 1 9b 9 5 2 7 10 11b 8 8 3 6 9a 1 11 9b 7 4 11a 2 4 9a 11b 3 10 11a**BSP tree traversal**6 5 1 9b 9 5 2 7 11b 10 11b 8 8 3 6 9a 9a 1 11 9b 7 4 11a 2 4 9a 11b point 3 10 11a**BSP tree traversal**6 5 1 9b 9 5 2 7 11b 10 11b 8 8 3 6 9a 9a 1 11 9b 7 4 11a 2 4 9a 11b point 3 10 11a**BSP tree traversal**6 5 1 9b 9 5 2 7 11b 10 11b 8 8 3 6 9a 9a 1 11 9b 7 4 11a 2 4 9a 11b point 3 10 11a**Ray-Box intersections**• Both GridAccel and KdTreeAccel require it • Quick rejection, use enter and exit point to traverse the hierarchy • AABB is the intersection of three slabs

More Related