GB2513699A - 3-D Graphics rendering with implicit geometry - Google Patents

3-D Graphics rendering with implicit geometry Download PDF

Info

Publication number
GB2513699A
GB2513699A GB1403242.9A GB201403242A GB2513699A GB 2513699 A GB2513699 A GB 2513699A GB 201403242 A GB201403242 A GB 201403242A GB 2513699 A GB2513699 A GB 2513699A
Authority
GB
United Kingdom
Prior art keywords
ray
intersection
geometry
testing
implicit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
GB1403242.9A
Other versions
GB201403242D0 (en
GB2513699B (en
Inventor
Cuneyt Ozdas
Luke Tilman Peterson
Steven Blackmon
Steven John Clohset
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Imagination Technologies Ltd
Original Assignee
Imagination Technologies Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Imagination Technologies Ltd filed Critical Imagination Technologies Ltd
Priority to GB1610625.4A priority Critical patent/GB2541505B/en
Publication of GB201403242D0 publication Critical patent/GB201403242D0/en
Publication of GB2513699A publication Critical patent/GB2513699A/en
Application granted granted Critical
Publication of GB2513699B publication Critical patent/GB2513699B/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/12Bounding box

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Geometry (AREA)
  • Software Systems (AREA)
  • Image Generation (AREA)

Abstract

Aspects relate to tracing rays in 3-D scenes that comprise objects that are defined by or with implicit geometry. In an example, a trapping element defines a portion of 3-D space in which implicit geometry exists. When a ray is found to intersect a trapping element, a trapping element procedure is executed. The trapping element procedure may comprise marching a ray through a 3-D volume and projecting the current 3-D position of the ray onto a current position on an explicitly defined surface and evaluating the data produced from such projection to indicate a hit or a miss for the ray. An intersection detected with the implicit geometry may be found concurrently with intersections for the same ray with explicitly-defined geometry, and data describing these intersections may be stored with the ray and resolved.

Description

3-D GRAPHICS RENDERING WITH IMPLICIT GEOMETRY
Background
The following relates to ray tracing and in a specific application, ray tracing of computer graphics using displaced geometry.
Rendering photo-realistic 2-D images from 3-D scene descriptions with ray tracing is known in the computer graphics arts. Ray tracing usually involves obtaining a scene description composed of geometric shapes, which describe surfaces of structures in the scene. Virtual rays of light are traced into the scene from a view point ("a camera"); each ray is issued to travel through a respective pixel of the 2-D representation, on which that ray can have an effect. The rays are tested for intersection with the geometric shapes to identify a closest intersection for each ray, if any.
These geometry shapes can be composed of primitives, such as triangular primitives. Representing a shape using triangular primitives provides a representation that can be consumed easily by some ray tracing renderers, and testing rays for intersection with triangles can be accomplished according to a variety of algorithms. However, for high quality rendering, e.g., to produce HD resolution images from a virtual 3-0 scene, such as for a high-quality video game or an animation, detailed object models are beneficial. A detailed object model defined only using triangular primitives can consume a great deal of memory, compared with other representations. For example, representing a smoothly curving surface of an object using only triangular primitives generally would consume comparatively more memory than a spline-based representation.
Another example is terrain features of a landscape. For example, representing a realistic mountain range using only triangular primitives may be memory-intensive, as many finely detailed features are required.
Displacement mapping is a technique that can be used to address these situations. Displacement mapping refers to displacing defined geometry data in one or more directions so that the geometry that is ultimately used to render the 3-D scene is modified according to the displacement strategy. This geometry can be considered displaced geometry. In ray tracing, rendering using displaced geometry involves testing displaced geometry for intersection. This is in contrast to bump mapping, which involves testing rays for intersection with source geometry and then upon identifying an intersection, a bump mapping process can be executed. Thus, bump mapping requires less computation for intersection testing, because rays are tested for intersected with simplified source geometry, not displaced geometry that might have many more primitives. However, bump mapping allows a more limited set of behaviors to be realized.
Summary
In one aspect, a method of testing a ray for intersection with an implicit surface comprises entering a ray into a surface of a shell bounding a 3-D volume. The shell defines a maximum extent for implicitly-defined geometry within the shell.
The method comprises iteratively stepping a current 3-0 position of the ray along its path through the 3-D volume defined by the shell. For each current 3-D position, the current 3-D position of the ray is projected to a current 2-D position on an explicitly-defined surface bounded in the shell and data for the implicitly-defined geometry at the current 3-D position is produced using the current 2-D position on the explicitly-defined surface. The ray is characterized as either hitting or missing the implicitly-defined geometry at the current 3-0 position, using the produced data. Ray data structures can store data produced for an intersection detected with the implicitly-defined geometry. The intersection can be expressed initially in a referenced coordinate system, and transformed into a global coordinate system for comparison with other detected intersections.
A bounding element can enclose the shell. The bounding element can be identified with a flag that indicates that bounding element should be traversed using an implicit-geometry intersection. A step size of the stepping can be varied.
The step size can be set based on a ray differential or a level of detail indication.
A set of volume exclusion elements can be defined in the bounding element, which each exclude a portion of the 3-0 volume between the bounding element and an extent of the implicit geometry. The set of volume exclusion elements can be defined during a pre-execution step and stored in association with an acceleration structure for a 3-D scene. These are example aspects included in the detailed
description that follows.
Brief Description of the Drawings
FIG. I depicts an example of an explicitly-defined element of geometry that is associated with artist-supplied vectors that are used in approaches to testing rays for intersection with implicitly defined surfaces; FIG. 2 depicts a shell defined based on artist-supplied vectors according to FIG. 1; FIG. 3 depicts an example process of traversing rays through a 3-D scene that is defined using explicit geometry and implicit geometry; FIG. 4 depicts an example approach to traversing a ray through a 3-D volume that may contain implicitly-defined geometry; FIG. 5 depicts an acceleration structure with bounding elements and trapping elements; FIG. 6 depicts an example shell bounded by a trapping element; FIG. 7A depicts a sub-volume of the example shell of FIG. 6; FIG. 7B depicts a bi-linear patch that can be used to define sub-volumes of the
example shell;
FIG. 8 depicts a set of shapes that can be used to define a sub-volume of the
example shell;
FIG. 9 depicts an example of traversing a sub-volume and projecting current 3-D positions of the ray to a 2-D position in order to determine implicit geometry characteristic(s); FIG. 10 depicts an example of an implicitly defined final geometry surface within a bounding element; FIG. 11 depicts an example of volume exclusion elements formed within the bounding element, based on the final geometry surface of FIG. 10; FIG. 12 depicts a situation where instances of geometry are enclosed in a trapping element FIG. 13 depicts a process of pre-execution of geometry procedures or other evaluation of implicit geometry definition data in order to determine an extent of final geometry; FIG. 14 depicts a process of intersection testing within bounding elements that overlap in 3-D space; FIG. 15 depicts a trapping element setup and transformation process; FIG. 16 depicts an example system in which disclosed aspects can be implemented; FIG. 17 depicts an example of limited function circuitry that can be included in system implementations according to FIG. 16; FIG. 18 depicts an example process of intersection disambiguation where concurrent intersection testing of multiple portions of a ray path may be performed; FIG. 19 depicts an example operation of a throughput compute unit; and FIG. 20 depicts an example of implementing quality-of-service aware throughput computing.
Detailed Description
Displaced geometry can be implemented using vector displacements. Vector displacement allows an arbitrary vector or vector to control displacement of an element of scene geometry or a portion thereof. In some implementations] vector displacement allows a completely arbitrary displacement for any element of geometry. For example, an element of geometry could be displaced in any direction by any amount. Vector displacement thus provides a high degree of control over displacement, but presents a comparatively difficult rendering task.
In some aspects herein, displacement is implicitly constrained within a bound, which is set based on one or more pre-defined vectors, where a maximum displacement can be set for these vectors. In one example approach, artist-supplied vectors can be associated with vertices that define source geometry. An artist can be any human, machine, or process that generates the vectors. The term is used to distinguish these vectors from other vectors that may be associated with source geometry, such as normals that can be associated with vertices and primitives of source geometry. Displacement can be further constrained, for any point on a 2-D surface, to be along a vector determined by interpolating two or more artist-supplied vectors associated with the 2-D surface.
Thus, a completely general displacement can be constrained to an analytical result determined by an interpolated vector and a maximum displacement limit.
In order to determine displaced geometry based on a given element of source geometry, the artist-supplied vectors for two or more vertices that define the element of source geometry can be used to control how, or otherwise be used in defining limitations on possible displacements for a particular location on the element of source geometry. The source geometry can be displaced according to some process and according to the determined control vector. The displaced geometry can then be used in ray intersection testing, and for other purposes as appropriate.
Some aspects of the disclosure relate to exemplary systems and processes by which source geometry can be displaced and techniques that can be used in testing displaced geometry for intersection.
FIG. 1 depicts a triangular primitive 10 that is associated with a geometric normal (which can in turn be defined by a winding order of vertexes forming the primitive and locations of those vertexes in space (the locations of the vertices establish a plane having a normal direction, and a convention establishes which way the normal points along that normal direction). In FIG. 1, the vertexes forming primitive 10 also are associated with artist-supplied vectors 13-15. Here, artist-supplied refers to the concept that these vectors are not needed to define the surface or location of the primitive 10 or its relationship to other primitives, such as a mesh of primitives. Rather, these vectors are used according to the techniques described below.
FIG. 2 depicts a mesh of primitives 18 (e.g., looking ata cross-section of a mesh of primitives coarsely defining a sphere.) Primitive 10 is identified, along with artist-supplied vectors 14 and 15. An interpolated vector 16 is shown between these artist-supplied vectors 14 and 15. Collectively, the artist-supplied vectors for the primitives forming the sphere are used to define a shell 20. Shell 20 is depicted as a smooth shape; however, shell 20 would be faceted to a degree determinable by whether and how much each of the original primitives were sub-divided. In one example, the primitives are not sub-divided, and shell 20 would have a facet for each original primitive. In other examples, each primitive would have a corresponding plurality of facets in shell 20. Shells according to the example shell 20 can be used in furtherance of ray tracing implicitly defined geometry, according to the disclosures that follow. Displaced geometry provides an example of implicit geometry processing according to the disclosure. Here, implicit geometry includes approaches to storing a set of geometry data prior to "run time" that is used in some fashion to produce a final geometry surface. In one example, a function can be associated with primitive 10, and that function can be evaluated based on one or more inputs produced during runtime, in order to evaluate presence of final geometry within a particular volume or at a point in 3-D space.
An overview of how rays can be traced in a 3-D scene that has explicitly-defined and implicitly-defined geometry is depicted by FIG. 3. At 203, it is determined to trace ray(s) through a volume in 3-D space. Such a volume can be an entirety of a 3-D scene, or a portion thereof. Such determination may be implemented by emitting a ray during rendering of an image, for example. At 205, such ray(s) begin (or continue) to traverse an acceleration structure. The acceleration structure includes a graph of elements that each bound a respective portion of the 3-D scene. Traversal of the graph allows identification of a final subset of geometry against which the ray(s) will be tested for intersection. In some implementations, such traversal occurs out of an order that the ray travels in the scene. As examples, each ray may be tested breadth-first, rays may be grouped and regrouped for testing according to a criteria, and traversal for rays emitted together may not begin together. Thus, a given ray may have candidate intersections identified out of distance order, and such intersection(s) should be further processed in order to ultimately identify a closest intersection for the ray, in typical usage.
At 207, the traversal results in identification of elements(s) that the ray enters, and hence need to be further processed to determine whether an intersection for each such ray exists there. At 209, it is determined whether that element is a trapping element or not. A trapping element can be the same shape as other acceleration structure elements, but may be associated with a flag that indicates its status as a trapping element. FIG. 5 depicts an acceleration structure that has both non-trapping elements (e.g., bounding elements 303, 305, 307, 315 and 316), and trapping box elements 309-313. Each of these elements is shown to have a connection with at least one other element, and would be located in 3-D space.
Some implementations may have a single trapping element type; other implementations may have a plurality of trapping element types. Such implementations may have multiple bits allocated to indicate the trapping element type. In some examples, indicating that the element is a trapping element results in execution of a trapping element procedure 211. Where an implementation includes multiple trapping element types, a different trapping element procedure may be executed for each type. Trapping elements also may be stored in a separate acceleration structure, which can be traversed separately from/additionally to one bounding explicitly defined geometry. Here, trapping element types refers to what procedure or differentiated computation protocol will be followed when entering that trapping element. For example, trapping elements can be provided to evaluate a Non-Uniform Rational B-Spline (NURBS) surface or a subdivision surface, determining Level Of Detail (LaD), performing motion blur calculations, and so on. As will be explained further below, an acceleration structure may contain elements for different purposes. For example, trapping elements 309-311 may enclose representations of different levels of detail for the same geometry. Some aspects of the disclosure provide tester circuitry that can selectively traverse an acceleration structure (such as without intervention of a generally programmable computation unit or program that emitted the ray being traversed), as explained below.
If the element is not a trapping element, then at 215, it is determined whether the element directly bounds geometry (e.g., it is a leaf node in a homogeneous acceleration structure). If not, then at 205, traversal continues to subsequent elements (e.g., child elements of the previously-identified element). Reference counts are updated (223), as explained below. If there was directly-bounded geometry, then at 217, that geometry is tested for intersection with the ray(s), and at 219, results of such testing are outputted. Results of intersection testing can include an identifier for a primitive intersected by each ray(s), a distance to the intersection, parametric coordinates determined for an intersected surface, some combination thereof, or other data and combinations thereof.
In using trapping elements, fully completing the traversal of a ray may involve creating multiple distinct ray segments, each defined with a respective distinct ray data structure. A reference counts can be maintained within each trapping element and also across all of the ray segments used to fully trace a given ray (e.g., rays that may have different origins and/or term mi along the path of the ray).
For example, a trapping element may have a separate acceleration structure from a principal acceleration structure of a 3-D scene, the ray segment may be located in several elements in that acceleration structure; after resolving the reference count for that trapping element, the ray segment may be completed, but the entire ray, of which the ray segment is a part may not be.
Since other intersections for each ray may have been identified already, at 221, an intersection or intersections being tracked for each ray may be updated. For example, if an intersection closer than a previously-identified closest intersection was identified, then the new closest intersection is maintained in favor of the previous one. At 223, one or more reference counts for each of the rays are updated according to the traversal. In particular, a count may be maintained for each ray, which tracks how many acceleration structure elements that ray currently exists in (where multiple segments are used for one ray, then distributed reference counts may be maintained and ultimately resolved). For example, the count is decremented when testing of a ray with an element completes, but is incremented if that ray is then indicated for testing against a child element. The count reaching zero indicates that the ray has completed traversal (although, depending on implementation, testing of that ray with all geometry may not yet have completed).
Returning to 209 and 211, a trapping element can be used to indicate that there is implicitly defined geometry within the 3-D volume bounded by that trapping element. Processes and system aspects are disclosed with respect to figures following FIG. 3. With respect to the remainder of FIG. 3, an output of a trapping element procedure may include an indication of a nearest intersection of a ray with geometry (implicit or explicit); where a closest intersection is desired, this defines a maximum distance that the ray needs to be traced. The ray also may be associated with minimum distance information, which may be used to exclude acceleration structure elements or geometry, as explained below. These intersections ultimately may feed into process portion 213. At 218, if intersection testing is completed, then at 225, intersection(s) can be identified for shading, and at 227, shader code can be executed. In some implementations, more than one intersection value may be provided for a single intersection, and at 229, one of these values may be selected for use as an origin for a child ray emission occurring at 231. For example, a different intersection value may be selected for a reflection ray than for a refraction ray, as explained below.
FIG. 4 depicts a first example of a process for identifying an intersection between a ray and implicit geometry. In one example, the trapping element found to be intersected bounds a shell (and source geometry for the shell) as disclosed with respect to FIGs. 1-2. At 245, a point of intersection between each ray(s) and a shell surface is found. Thus, after determining that the ray(s) are to enter the trapping element] the rays can be projected to a surface of the shell at one or more points.
FIG. 6 depicts a trapping element 534 that bounds a faceted shell 323. The faceted shell 323 can be formed by extruding a set of primitives along directions defined by artist-supplied vectors (FIGs. 1-2). For example, primitive 332 can be extruded to define a segment 324 of shell 323. Thus, in one approach, there is a 1:1 correspondence between facets of a shell and original primitives of the source geometry. FIG. 7A depicts segment 324 as being constructed of primitive 332 of source geometry, and a set of bilinear patches that connect primitive 332 to facet 325. For example, as shown in FIG. 7B, bi-linear patch 350 connects vertex 355 and 356 of primitive 332 respectively to vertexes 358 and 359 of facet 325. Using a bi-linear patch to define sides of each segment allows the segments to be adaptable to a range of problems, by allowing the sides of these segments to be non-parallel to each other. FIG. 8 depicts an alternate construction for a segment of a shell. In the example of FIG. B, a set of bounding shapes 365-367 (e.g., tetrahedrons) are provided that collectively define the segment.
FIG. 6 also depicts that an entrance 330 to one segment of shell 323 can be tracked, which corresponds with exit point 331. Segment 324 has entrance point 339 and exit point 340. In some situations, the ray may enter the shell but not leave the shell, in that it would first intersect a source geometry primitive. Any of these entrance points, including the first one to the shell, and each segment entered can be considered an entrance point or intersection with a shell surface.
With respect to entrance points to each segment of a shell, tracking when a ray enters a different segment of the shell allows a specific geometry process to be associated with each primitive, and executed to evaluate the implicit geometry in that segment of the shell.
Returning to FIG. 4, the rays are then to be stepped through a volume enclosed by the shell to establish a current 3-D position for each ray. The stepping is on an interval (epsilon). At 239, epsilon can be set. As an example, epsilon can be set according to a variety of inputs, such as a level of detail indicator 235 or a ray differential 237. Epsilon can be fixed or variable; FIG. 4 includes description of a variable epsilon implementation. For the remainder of FIG. 4, a single ray is described, although multiple rays can be processed concurrently. At 247, the ray is stepped. At 248, it is determined whether the ray is at a surface of a volume exclusion element within the shell. A volume exclusion element defines a sub-portion of space within the shell in which no implicit geometry will exist. Further description of volume exclusion elements is provided with respect to FIGs. 10 and 11. In brief, volume exclusion elements can be identified by determining a final extent of implicit geometry within the shell, and then defining a set of bounding volumes that enclose regions of space that have no geometry. These bounding volumes can vary in size, in order to fit within different portions of the final extent of the implicit geometry.
If the ray has entered a volume exclusion element, then, at 249, an exit point from the volume exclusion element is determined, and, at 250, the current 3-D position of the ray is incremented to that exit point, and the determination at 248 is performed again. If the current 3-D position is not in a volume exclusion element, then, at 251, that current 3-D position is projected to the surface of the primitive that was projected to define that portion of the shell. An example of such projection is depicted in FIG. 9. FIG. 9 depicts that ray 335 is stepped a number of times along a direction of travel for the ray (to identify current 3-D positions 405), and corresponding 2-D positions 406 on primitive 332 are identified for each current 3-D position. Each of these 2-D positions can be expressed, for example, as a parametric coordinate pair, or using barycentric coordinates. These 2-D positions can be used as inputs to a procedural geometry shader 410, which executes in order to produce an implicit geometry characteristic (collectively, 415 in FIG. 9) for each of the 2-D positions. As explained with respect to FIG. 3, a step size can be set based on a level of detail indicator for the ray. A ray differential also can be used as an input to set a step size.
Setting a step size is one way to adjusting an amount of computation used during marching of a ray. In one sense, the amount of computation may be adjusted based on how much detail is desired for a given implicit geometry rendering.
However, in other situations, a total amount of computation may be reduced by finding an intersection region between a larger step size, and then refining the intersection. In some implementations, a region of 3-D positions may be snapped to the same 2-D position, based on a level of detail or ray differential. For example, even if a step size is set to one size, several steps of a ray may snap to be evaluated based on the same function. In another example, a larger step may be taken, and then one or more intermediate step can be interpolated from the ends of that step. For example, where a level of detail is low, then a larger step size may be taken, larger regions of the 2-D surface may all evaluate to the same function value, or interpolated values may be taken for intermediate values, or some combination of these options.
In one example, the 2-D positions also can be used as inputs to a function that outputs a height of implicit geometry for that 2-D position. Here, a height can mean a distance along a path; such path may be a line segment. The line segment may be defined by interpolating artist-defined vectors (see FIGs. 1-2). In other examples, the path may be defined by a function or procedure associated with the source primitive, or a portion of it. Where an implementation displaces along a line segment, an intersection can be detected by comparing, a current height of the ray, in 3-D space, above the surface with a height generated by the implicit geometry function evaluated for that 2-D position. In one example, such comparison can include a subtraction. When the result of the subtraction changes sign, then, it is concluded that the ray has intersected the implicit geometry somewhere between the previous and current step. These operations are examples of operations depicted in FIG. 4, including at 253, running a geometry process to determine a geometry characteristic for the projected current ray point, and comparison 255. The subtraction implements overlap determination 257. If there is no overlap (e.g., the height of the ray is still greater than the implicit geometry at a given point, then the process returns to 269 to perform another step of the ray. If overlap was detected (e.g., the sign of the subtraction result changed), then at 259, a bisection process can be conducted in order to refine the intersection point further. At 261, a pair of 3-D positions can be identified that describe the interval of the ray which contains the intersection. At 263, these points can be returned as representing the intersection of the ray with implicit geometry. It remains to be determined whether this intersection is a closest intersection, since geometry closer than the intersected implicit geometry may remain to be tested.
Instead of comparing heights, a collision detection algorithm can be employed that compares a current 3-D position with the implicit geometry. The current 3-D position can be modeled as a sphere or shape with a certain extent. This extent can be controlled by level of distance information, a ray differential, or some combination thereof. In some applications, the implicit geometry being tested for intersection may originate from a volumetric data set. For example, the volumetric data set can be expressed as data in a uniform or hierarchical voxel structure. For example, data may originate from 3-D scanning technologies, such as medical imaging scanners, such as Computed Tomography (CT) scanners, and similar technologies.
FIG. 10 depicts a curve 430 that represents a final surface of implicitly-defined geometry (shown in 2-D for clarity). Bounding element 429 encloses this geometry (shell and a trapping element, if provided). With respect to a trapping element, a size and overall dimensionality of the trapping element may be influenced by constraints on the form of the trapping element (e.g., an axis aligned box, a square, a sphere, and so on). Such constraints may affect a tightness of fit capable of being achieved for a given shell. FIG. 11 depicts exclusion elements (431 and 432 specifically identified) that fill space between final geometry 430 and bounding 429. These exclusion elements also may be sized and positioned according to constraints placed on the shapes that can be used for the elements.
Further constraints may relate to an amount of memory to devote to these elements. For example, a minimum size of element may be required, or a maximum size of memory required for storing data defining the exclusion elements in a particular trapping element may be set. These decisions can be made based on characteristics of a computing platform that will implement the stepping algorithm, including memory bandwidth and size characteristics, power consumption constraints, requirements on latency, throughput, and so on. FIG. 13 depicts an example process by which volume exclusion elements can be produced. At 451, a portion of implicit geometry is identified (e.g., procedurally defined displacement). Such identification can occur in a pre-execution environment, in which source geometry is submitted, along with a function(s), procedure(s), or other definition of how the implicit geometry will be determined when necessary (e.g., for testing for intersection). At 455, these function(s), procedure(s), and so on are evaluated or executed as appropriate in order to obtain a final geometry extent. In some cases, such final geometry extent will depend on information available only during runtime, or more generally, information that is not yet available (e.g., the evaluation depends on a value retrieved during a lookup operation). In such circumstances, the source geometry, function, or procedure can be associated with information on a range of values that can be expected from the lookup. In other implementations, an expression that describes a value to be returned from the lookup can be supplied, and a final extent of implicit geometry can be evaluated based on a joint evaluation of these sources.
At 457, based on this evaluation, exclusion volumes are defined within a maximum extent of the final geometry and within a shell (see FIG. 6). Examples of implementations of exclusion volumes include voxel structures, which can be hierarchical, such as an oct-tree. In an alternate implementation, the shell may be omitted, and then exclusion volumes would be defined based on an extent of the trapping element that will bound the final geometry. If the shell were omitted, it would generally be expected that a larger quantity of volume exclusion elements would be required, since trapping element would not bound the final geometry as closely as the shell. At 459, definitions of these exclusion volumes are stored for later access. In addition to defining exclusion volumes in a pie-pass, volume portions can be excluded based on properties of a function describing an implicit geometry surface.
FIG. 12 depicts more details concerning how trapping elements can be used for intersection testing of implicit geometry and more generally, for abstracting portions of 3-D space. As an additional example usage, trapping elements can be used to abstract instances of the same geometric object, even if they do not use implicit geometry. FIG. 12 gives a toy example of a tree being a geometric object, with instances 405-407 of this geometric object being bounded by respective trapping elements 431-433. These trapping elements can in turn be bounded by a bounding volume 420 (see FIG. 5). Instance 431 is shown as overlapping with instance 432. Such overlap, in a 3-D scene, could be a situation where branches of these tree instances intertwine, such that they occupy overlapping volumes of space. A ray 438 is being traversed in the scene. FIG. 3 depicted a process that uses a trapping element procedure 211; FIG. 15 depicts an example of trapping element procedure 211.
In FIG. 15, when a ray encounters a trapping element, in order to test that ray for intersection with geometry in the trapping element, that ray is transformed at 461 to a coordinate system referenced by the trapping element. At 463, one or more process(es) are performed. These processes can vary significantly based on the characteristics of the trapping element. For example, an implicit geometry process may be performed. Or, geometry bounded in the trapping element may be tested.
Ultimately, at 465, resulting data is produced. As an example, this resulting data is a closest intersection found, based on the geometry tested or the processes performed. A variety of data can be produced as a result of intersection testing in a trapping element, including barycentric coordinates, a distance to the intersection, a point in 3-D space identifying an intersection point, or another expression of a location of the intersection.
Where this data contains positional information, it can be expressed in the coordinate system referenced by the trapping element. At 467, the positional information and associated information is transformed from the referenced coordinate system to a global coordinate system (or another coordinate that is common to other operations to be performed). Such transformation could be performed immediately, but in another implementation, a transformation matrix may be provided that will allow the transformation to be effected at a later time.
For example, a result data structure may contain the result data in the referenced coordinate system and a transformation matrix. Later, during an intersection disambiguation or sorting process, the transformation matrix can be applied to the result data. This implementation may be appropriate where the functional unit performing the intersection testing may not have a capability to perform a matrix transformation, or may not perform such transformation efficiently. If a trapping element does not reference a coordinate system other than the global coordinate system, then a transformation matrix may not be required.
Returning to FIG. 12, in this figure, the ray originates within both trapping element 434 and trapping element 435. In some systems according to the disclosure, it could be a case that trapping element 435 (and/or geometry in 435) is found to be intersected by ray 438 before it is determined that ray 438 also intersects trapping element 434 (and/or geometry in 434) (e.g., if each ray begins testing at a root of a hierarchical acceleration structure, then ray 438 may visit trapping element 435 first). This situation could occur because of deferral of some intersection tests or deferred propagation of intermediate results of testing, or simply based on how the testing happened to be scheduled, for example. Thus, instance 432 may be evaluated for intersection before instance 431, even though portions of instance 431 are closer to the origin of ray 438. FIG. 14 depicts an example approach to intersection testing that accounts for these situations.
FIG. 14 depicts that results for intersection testing with implicit geometry are produced at 411, and results of testing the same ray with explicit geometry are produced at 413. In the process of FIG. 14, there are multiple intersection results available for a given ray. More commonly, it might be expected that a single closest intersection for a ray is maintained, and each time an intersection result for that ray is identified, it is compared with that closest intersection, and the single closest one is maintained. Here, however, a simple distance evaluation may be insufficient to immediately disambiguate which intersection is closest, or in other situations, there may be two intersections that have distances indistinguishable from one another, at a resolution at which the results are expressed (e.g. single precision floating point). In these situations, an approach that provides reproducible results may be important, even though there is more than one "valid" solution. In the case of an acceleration structure element (trapping or regular), if any part of the volume of that element overlaps a range defined by a minimum distance and the current closest intersection, then that acceleration element would not be excluded from being entered for testing (acceleration structure elements do not establish a closest intersection fora ray (i.e., a maximum t)).
FIG. 14 depicts that, at 415, a determination whether any two or more of multiple intersection results are at undifferentiated distances. There may be some geometry intersections evaluated that are clearly not the closest one, under the circumstances present. These can be excluded; if they are excluded before the process of FIG. 14, then determination 415 may be omitted for those, but still may be needed to identify or maintain overlapping acceleration structure elements for test. If all geometry intersection results are at different intersection distances, then a closest intersection (or group of) can be used (here, a group of intersections can be, for example, a pair of points returned as bracketing an intersection of a ray with a surface, such as a result returned from a ray march as discussed with respect to FIG. 9).
At 419, an ID for each object (e.g., acceleration structure element or primitive) having undifferentiated distance compared with comparison objects is accessed.
Based on the IDs of the objects, one or more objects may be excluded from further processing, or selected. At 423, intersection information for the ray is updated based on 421. At 425, reference counts for the ray are updated. A reference count for the ray is increased when it is added for test against an acceleration structure element, and decreased when removed or when an element is excluded from test, if previously indicated for test.
Considering 421 in more detail, an acceleration structure element may be excluded from further processing if its identifier indicates that it already has been entered for testing. This may be determined by comparing at least a portion of the identifier for the acceleration structure element with identifier information stored or associated with the ray. Such information stored with the ray may include an identifier of the acceleration structure element that has a highest value in a sequence of identifiers (e.g., all the identifiers have a relative order, and the ray maintains identification of a highest order element) that was already entered for that ray. A specific example can be considered with respect to ray 440. Ray 440 can be seen to first enter trapping element 434. A minimum t would be established for that trapping element upon entering the trapping element. Ray 440 also intersects trapping element 435, but the distance to that intersection is different from the intersection with trapping element 434. However, it also is the case that the intersection with trapping element 435 remains within a volume of trapping element 434. Thus, in this circumstance, trapping element 434 may be reentered and processed. So in one approach, the minimum t can be used to exclude, from retesting, geometry bounded by bounding elements that do not overlap with another element.
Instances of the same geometry can be spread through a 3-D scene, with each instance being enclosed by a difference trapping element. Each trapping element includes a world space coordinate location (and/or extent). Each trapping element can be a different size and can be oriented differently. For example, trapping elements can be scaled and rotated. Each instance space can use a referenced coordinate system. Each trapping element also can include information about a transform to be applied to a ray in order to translate between world space and the referenced coordinate system of that instance. Each trapping element also can include a reference to objects or other data within that trapping element, for example, explicit geometry and other data, as explained above. In another example, each element of an acceleration structure can have an identifier, and acceleration structure elements that represent a trapping element encapsulating the same geometry can have a certain number of bits in common. Rays that intersect these different instance elements can be collected, and can begin intersection testing together. Where each trapping element has a reference to instance space, then that reference can be used to collect rays that will need to test that referenced instance space. Where a portion of an identifier is shared among elements that reference the same instance space, that portion of the identifier can be used to collect rays.
FIG. 16 depicts a system 501 that can implement aspects disclosed herein.
System 501 comprises a compute cluster 502 that can have a set of cores, each capable of executing instructions from a respective independent instruction stream. Each core can have a private cache and can share a secondary cache with one or more other cores; other cache configurations can be implemented.
For example, cores 503 and 504 can each have a private Li cache, 505 and 506 respectively. Cores 503 and 504 can share L2 cache 507. Compute cluster 502 can read from acceleration structure storage 509 and from geometry storage 508.
Compute cluster 502 can be assisted with performance of various algorithms, such as rendering algorithms by throughput compute unit 515. Compute unit 515 comprises a task collector 521, a plurality of ray/primitive intersection test cells 520 and a plurality of ray/box test cells 516. Each of these cells can be configured to execute one or more defined intersection algorithms. Ray/box test cells 516 can be implemented so that they produce a distance from a ray origin to an intersection point with a box, when the ray originates from outside of the box.
Ray/box test cells 516 also can be implemented so that they return a distance that the ray travels to a point of exit of a box, when the ray originates in the box (e.g., ray 438 originates in trapping element 435, and ray/box test cells 516 can be made to return a distance to exit trapping element 435.) Ray/box test cells are an example of test cells for a particular kind of shape. Test cells can be provided for other kinds of shapes, either in addition to or in substitution of box test cells.
In some examples, each test cell comprises fixed-function circuitry that performs at least a portion of a given intersection algorithm. Example primitive tests include tests for intersection with triangular primitives, such as the barycentric coordinates test. Boxes tested for intersection may be axis-aligned bounding boxes, for example. Other approaches to acceleration structure tests include kd-tree testing.
In addition to these intersection testing cells, compute unit 515 may comprise a set of (one or more) limited programmability circuits 512, which can be associated with respective test cells or included in task collector 521.
Each intersection test cell may use a respective local ray data storage 514. As a particular example, ray data 518 comprises sets of ray definition data. Each set of ray definition data may comprise a minimum distance identification (mm t). In an example, the minimum distance can be used to step through a set of elements, without having to test them all for each step in same process, as explained above.
A maximum distance identification (max t), which can identify the closest current intersection for that ray, also can be stored. Data concerning the current closest intersection may be stored, such as interpolated varyings for an intersection point, barycentric coordinates, and a primitive identifier. In general, data stored can be selected based on data that would be needed to execute a shader for the ray (if the intersection to which the data pertains is one to trigger shader execution).
Where an intersection involves a bounding box element (e.g., a trapping element) with a referenced coordinate system, a transformation matrix describing a mapping between global and local coordinates can be stored.
As explained above, task collector 521 forms groupings of computation (e.g., groupings of rays that can be tested together). A grouping of rays can identify an acceleration structure element to be tested. In some examples, the acceleration elements can be elements that define a given object (or portion of) at a respective LOD. These elements may bound such different LOD geometry in overlapping space. In one implementation, these elements can be trapping elements. A ray can be associated with an LOD indicator, a ray differential, a spreading factor, or there can another mechanism for deciding a LOD at which geometry is to be represented. A limited programmability circuit can select one or more collections, each associated with a respective acceleration element, in which to place a ray.
For example, even though the acceleration structure element tested may have a number of child acceleration structure elements, only a subset of those may be selected by the limited programmability circuit. For example, an acceleration structure element associated with a particular Level of Detail (LOD) may be selected. In some examples, the ray may be in a transition zone between two levels of detail, and the ray may be added to two collections, so that the ray is traversed in geometry at multiple levels of detail. An attenuation of the ray can be adjusted based on what the limited programmability circuit does, such as reducing importance of each of multiple rays that are derived from a single original ray. As another example, a limited programmability circuit can neglect to add a ray to any collection, even if a parent element was intersected. Thus, a limited programmability circuit can influence or control subsequent testing of a ray.
System 501 also may provide a result return path 511. In some cases, a result may require further processing that will be performed by program code distinct from program code that generated the task leading to the result. However, in some cases, the further processing may use some portion of data common to the program code that generated the task. Depending on an architecture of compute cluster 502, and as one specific example, on an efficiency of moving data from one core to another (such as across different L2 caches 507), result return path may be configured to return a result to a core that uses an L2 cache 507 that already stores the data to be used in the further processing. In some implementations, a destination identifier can be associated with a task, when it is generated, and that destination identifier can be used to guide a result back to a source of that task.
FIG. 17 depicts an example of a limited programmability circuit(s) 550 that can be used to implement the limited programmability circuits 512 depicted in FIG. 16.
Circuit(s) 550 may comprise pre-defined mathematical functions 552 and programmable function implementations 554. The pre-defined mathematical functions 552 may include a set of functions that can be evaluated for different values for one or more independent variables for the functions. Such pre-defined mathematical functions may include a matrix transformation for a 3-D space according to a transformation matrix supplied to the limited programmability circuit.
In another example, programmable function implementations can execute or repeat a defined operation or set of operations for a number of times.
Examples of how circuitry can be limited-programmability includes that the circuit is capable of executing a limited number of instructions, or is otherwise required to complete in a fixed timeframe, that programs avoid looping or branching, or that the circuit does not have an instruction fetch pipeline. In one example, branching is supported by executing multiple paths through a section of code, and then selecting a result or masking an undesired result. Where the limited programmability circuit does not support instruction fetching, a set of instructions can be pre-loaded through a control path. A limited memory may be provided for storing these instructions, and can be designed to support a maximum latency or timeframe of execution, as explained above. Thus, a limited programmability circuit can work in conjunction with a test cell in order to implement marching, iterations, progressive refinements, bisections, successive approximations, displacements, vector graphics, volumetric effects, and so on.
FIG. 18 depicts an overall flow of ray information in an example implementation.
Shader code 580 and shader code 582 each can emit rays; such rays can be defined by data contained in a ray data structure. The data in the ray data structures can be produced by shader code modules, which can submit the data using an API 575. For example, API 575 may have a ray emit call that accepts a set of data for the ray. A collection tracking function 584 can receive data from the ray data structures and collect each new ray to begin traversal with one or more other rays. There may be a variety of intermediate steps or functional elements between emitting a ray and tracking that ray in a collection, and FIG. 18 does not imply a direct linkage.
Ray collections produced by collection tracking function 584 can be emitted or submitted to begin traversal (e.g., collections 586 and 588). These collections can be received for traversal by intersection testing function 590 (which can be implemented by primitive test cells and acceleration structure element test cells, in an example). Intersection testing function 590 can activate an implicit geometry shader function 592, for one or more instances where implicit geometry is to be traversed or tested for intersection.
Intersection testing function 590 and implicit geometry shader function 592 can each produce ray data structure updates, those from geometry shader function 592 being numbered 594-596 and those from intersection testing function 590 being numbered 600-602. Intersection disambiguation function 606 can receive the data structure updates from these sources (or other sources, if present), and produce an output that updates ray collections in which the ray will be tracked (608) during further traversal (seeking a closest intersection) and initiation of ray shading (609) (for an identified closest intersection), which may cause emission of further rays to be traversed. The production of updates to data structures may be an appropriate implementation where the geometry shader function or at least certain portions thereof, are implemented by a limited programmability or fixed-function element coupled with intersection testing 590. In such an implementation, a general purpose portion of code may not be invoked for that geometry shader function or such general purpose portion of code may setup the limited programmability unit, but not perform all of the calculations. FIG. 18 depicts aspects of an alternate implementation in which geometry shader function 692 is implemented by code executed on a general purpose compute element. In such an implementation geometry shader function 592 can be considered a "peer" of shader code 580 and 582, in that geometry shader function 592 can be invoked in response to a ray intersection, as can code 580 and 582, and an output of such geometry shader function 592 can be effected by using a ray emit call of API 575.
Thus, geometry shader function 592 can be invoked using the same semantic as used for invoking shaders after a ray completes intersection testing. However, geometry shader function 592 operates during an intermediate phase of intersection testing to produce results for testing a ray with implicit geometry. A result of that testing can be carried with a new ray emitted through API 575. Thus, over the course of traversing a given ray path, multiple different rays may be emitted, and intersections may be accumulated over the path. Some implementations may use the geometry shader function 592 to compare intersections associated with a ray that caused invocation of the shader, and ultimately determine whether a newly-identified intersection is closer or not to the origin of the ray path, and retain the closer intersection only. In other implementations, test cells 520 can compare an intersection stored in localized ray data 514 with an intersection identified in an arriving ray data structure, and keep the closer. In such an implementation, test cells 520 maintain the current candidate for the closest intersection in its localized ray data 514, by comparing intersections that come from geometry shader function 592 and/or from its own testing operations.
Intersection disambiguation function 606 takes a set of intersections for a given ray path, and determines a closest intersection from among that set of intersections. For example, where a given ray path has traversed one or more instances of trapping elements, there may be a local intersection for that trapping element, while there may also be an intersection for the ray with geometry that was not bounded by a trapping element, which was found during concurrent testing of the ray. These intersections may be stored in different data structures, which are collected for comparison purposes. For example, a plurality of separately instantiated rays may ultimately be used to fully trace a single ray path, and those rays may be traced concurrently in the scene. In other implementations, multiple portions of a single ray path may be traced serially, where one ray completes (i.e., a data structure defining a ray that is along the ray path, but possibly only a limited segment of the path), and another is issued and carries information relating to completed portions of intersection testing.
Reference counting across these multiple portions of a ray path may also be maintained as each segment completes. The functions disclosed with respect to FIG. 18 may be realized in fixed-function hardware, or in configurable hardware, or in hardware programmed by software.
In further regard to trapping elements, the above-disclosure provided an example relating to displaced geometry. Trapping elements can be provided to handle a variety of situations. For example, motion-blur can be implemented within trapping elements by performing calculations using a time-value associated with the ray to test where the intersection with a moving object occurs at sequence of moments in time. Then, these results can be blended in order to determine a motion-blur feature. Although a trapping element may reference a coordinate system other than a world-space coordinate system, a trapping element may also use world-space coordinates.
FIG. 19 depicts an example operation of throughput compute unit 515. Tasks to be processed 705 are inputted to compute unit 515. As an example, each task can include a collection key 710, a data reference 711, and an optional prioritization indicator 712. In some implementations, key 710 identifies an input or part of a computation problem that will be shared among a plurality of computation processes. In some implementations, data reference 711 identifies a portion of data that is to be processed as a data element in a vector of data elements with the input or computation problem identified by key 710. As one example, key 710 can identify an acceleration structure element, and data reference 711 can identify a ray to be tested for intersection with the acceleration structure element. Key 710 can identify a program or process to be performed on or with data referenced by data reference 711. As another example, key 710 can identify a coefficient to be multiplied by data identified by data reference 711.
Other data describing tasks 705 can be available in the system, or provided within a data structure, but not all of this data may be moved around together within throughput compute system 515. For example, each task may be associated with additional data to be used in further processing based on a result of the task, but that additional data is unnecessary for performance of the task itself.
These tasks 705 (or portions of descriptive information for the tasks, such as key 710, data reference 711, and prioritization 712) may be provided to task collector 521 (FIG. 16), which is shown here as containing a collection forming/updating module 715. Module 715 may be implemented with a cache that stores collections of data references 711, in association with a respective key 710. As an example, multiple data references may be stored in association with a single key. FIG. 19 depicts collection storage 718 comprising keys 720-723, each having a bin of data references associated with it, in summary of the above. A priority may be produced for each collection based on prioritization indicators 712 that were associated with each task whose data reference was associated with that collection. As an example, each collection may be given a priority based on the highest priority task in that collection. The same task (e.g., a data reference from that task) may exist in multiple collections. In the context of ray tracing, each collection can be associated with a shape to be tested for intersection with the set of rays collected into a collection associated with that shape. In an implementation, collection storage 718 can include an interleaved cache, where keys (e.g., 720-723) are hashed or masked in order to identify candidate positions at which a collection for that key may be placed. A collision among collections may be resolved by an eviction of a collection.
A scheduler 733 uses the data in collection storage 718 to form packets comprising data from different tasks that were associated with a given key in a collection from collection storage 718. Scheduler 733 can communicate with collection forming/updating module 715 in order to coordinate formation and eviction of collections from collection storage 718. Scheduler 733 may store packets, awaiting emission, to one or more packet queues (two queues 734 and 735 depicted). Where multiple queues are used, packets can be sorted based on a priority of the packet. Queues can be implemented in a non-transitory memory as first-in-first-out memories, linked lists, ring buffers, and so on. Packets from queues 734 and 735 can be dispatched (e.g., dispatched packet 719). Dispatched packet 719 is depicted to include a packet ID, a packet priority, and a set of keys, and associated data references. In one example, packets may include a single key, which identifies a program for execution, a data element to be used during execution, or both.
Prioritization indicator 712 may be implemented in a variety of ways. Indicator 712 can simply be a sequence identifier (e.g., an incrementing number) that indicates a relative order or time at which the task was emitted. In one approach, this sequence identifier allows a minimum quality of service for completion of each task. Tasks also can have respective indicators 712 that are interpretable as a higher or lower priority than a minimum quality of service level. Tasks do not need to have unique indicators 712, even if a general case provides an incrementing identifier. For example, a relatively higher priority for a newly emitted task can be achieved by duplicating a sequence identifier that is closer to a current task clearance number (as explained with respect to FIG. 20), and implementations according to the disclosure can process the newly emitted task at the same priority as a previously-emitted task that has the same sequence identifier. Other implementations may provide a sequence identifier and a separate prioritization
field.
Test cells 516/520 (see FIG. 16) receive inputs at respective input buffers 740- 742. The inputs can be selected for distribution among test cells 516/520 based on which of the test cells stores localized data for execution related to those inputs. For example, definition data for a ray identified by a specific data reference 711 may be stored in a local memory of only one of the test cells 516/520, and that data reference would be distributed to that test cell, along with a reference to a shape or shape data to be tested with respect to that ray. A task status feedback 749 can be implemented by the limited programmability circuit(s) 550. In an example of traversing a ray through an acceleration structure, the feedback can include selecting which children, from a plurality of children, a ray should be collected against next. That can be effected by providing a task with a key 710 for each child element. More generally, circuit(s) 550 can calculate a reference or address of a program, acceleration structure element, or a data element to be used in subsequent processing or to be processed as a next step for a particular data reference 711.
In one example, modules of code can execute on compute cluster 502 in order to setup relevant data in local memories of test cells 516/520. However, in some implementations, a task storage maintenance module 716 can setup data in those local memories, based on information arriving in task definitions. For example, module 716 can arrange direct memory transfer requests, from a shared coherent memory to local memories of test cells 516/520. These transfers can be scheduled with awareness of which packets have been queued by scheduler 733.
Although the exact timing of when a given task is performed by test cells 716/720 may not be deterministic, a small cache can be provided to buffer data retrieved from a shared memory until used and then discarded.
FIG. 20 depicts an example of implementing quality-of-service aware throughput computing. As shown in FIG. 19, a task collector may produce collections of tasks that are to be execution on a set of computation elements. The task collector an establish groupings of tasks that can be executed concurrently for at least some portion of those tasks. The task collector can defer commencement of execution of particular tasks in favor of increasing throughput of completion of tasks as a whole. However, if tasks are selected for processing purely on throughput considerations, then certain tasks may fail to be completed on a timely basis. In the context of ray tracing, a relatively small number of rays may end up in seldom-visited portions of a 3-D scene. Thus, insufficient rays may be available to make a full collection for those portions, and so the rays may not be scheduled for further traversal, if a scheduling heuristic is made to select full collections in order to maximize computation parallelism. In a general computation scenario, a set of code modules, routines, or segments may have parts that are much more frequently visited than others. The execution of these elements of code may be scheduled by collecting requests for such execution and selecting collections based at least on respective numbers of requests collected for different elements of code. Here also, some requests may languish if scheduling is done purely on a throughput decision.
In one example, tasks that are defined (defined tasks defined 625) can be given increasing identifiers, starting from a task emission point 631. Tasks can be selected for, and processed for throughput considerations, but additionally, a task clearance point 632 can be maintained. Task clearance point 632 identifies a position in the sequence of identifiers at which all lower task identifiers are to be prioritized for completion. As depicted in FIG. 20, some tasks greater than task clearance point 632 may already have been completed (e.g., task 642). As point 632 moves, scheduler 733 of FIG. 19 may identify (644) collections in collection storage 718 that contain that task, select those collections for eviction, and dispatch (644) as a corresponding packet (e.g., in a fast packet queue, e.g. 735).
Task results can be obtained (646), and based on those results, a decision as to whether a task has been completed is made. If the task is not completed, then further collections in which the task is to be put are selected/updated (650). If that task is complete, then processing can continue (651) for other tasks.
In a scheduling approach according to FIG. 20, scheduling can be performed primarily based on throughput, but ensure that a given task does not linger more than a pre-determined time (e.g., processor cycles) before it is advanced. Giving tasks higher priorities can be accomplished by giving that task a sequence identifier lower than what is being issued to other tasks, which causes the task to reach clearance point 632 sooner than it would have otherwise. A separate priority indicator can be maintained also, as explained above. In the specific context of animation, sequences of frames may be rendered. Task identifiers can include data relating to a frame number (e.g., absolute, or a relative number for frames in flight), that frame number can be used for prioritization. Classes of rays also can be prioritized by such techniques, such as rays coming from a certain shader module, a certain type of ray, and so on. Implementations can provide a latency cap for individual tasks or classes of tasks, rays or classes of rays. To generalize to computation tasks, classes of tasks, such as tasks originating from a particular source, or which reference a particular dataset can be given a particular latency cap. Other ways to relatively prioritize rays or tasks may be provided in implementations that generally prioritize throughput, but also avoid exceeding latency caps for individual elements of computation.
A number of tasks between task clearance point 632 and task emission point 631 can be selectable and can be modulated according to real-time system conditions.
For example, if rendering is implemented on a processing system that also can intermittently perform more time-critical digital signal processing tasks, or where available memory is currently constrained, then task clearance point 632 can be made to follow more closely to emission point 631.
If implemented in firmware and/or software, functions may be represented as one or more instructions or code on a computer-readable medium, in one example, the media is non-transitory. Examples include a computer-readable medium encoded with a data structure and a computer-readable medium encoded with a computer program. Machine-readable media includes non-transitory machine readable media. Other kinds of media include transmission media. A non-transitory medium may be any tangible medium that can be accessed by a machine. By way of example, and not limitation, such computer-readable media can comprise RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, or any other medium that can be used to store desired program code in the form of instructions or data structures and that can be accessed by a machine.
The description of the aspects and features is provided to enable any person skilled in the art to make and use the systems, apparatuses and perform the methods disclosed. Various modifications will be readily apparent to those skilled in the art, and the principles described in this document may be applied to other aspects without departing from the spirit or scope of the disclosure. Thus, the description is not intended to limit the claims. Rather, the claims are to be accorded a scope consistent with the principles and novel features disclosed herein.
The drawings include relative arrangements of structure and ordering of process components, solely as an aid in understanding the description. These relative arrangements and numbering is not an implicit disclosure of any specific limitation on ordering or arrangement of elements and steps in the claims. Process limitations may be interchanged sequentially without departing from the scope of the disclosure, and means-plus-function clauses in the claims are intended to cover the structures described as performing the recited function that include not only structural equivalents, but also equivalent structures.
Although a variety of examples and other information was used to explain aspects within the scope of the appended claims, no limitation of the claims should be implied based on particular features or arrangements in such examples, as one of ordinary skill would be able to use these examples to derive a wide variety of implementations. Further and although some subject matter may have been described in language specific to examples of structural features and/or method steps, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to these described features or acts. For example, such functionality can be distributed differently or performed in components other than, additional to, or less than, those identified herein. Rather, the described features and steps are disclosed as examples of components of systems and methods within the scope of the appended claims.

Claims (21)

  1. Claims 1. A method of testing a ray for intersection with an implicit surface, comprising: entering a surface of a shell bounding a 3-D volume with a ray, the shell defining a maximum extent for implicitly-defined geometry within the shell; iteratively stepping a current 3-D position of the ray along its path through the 3-D volume defined by the shell; for each current 3-D position, projecting the current 3-D position of the ray to a current 2-D position on an explicitly-defined surface bounded in the shell, producing data for the implicitly-defined geometry using the current 2-D position on the explicitly-defined surface, and characterizing the ray as either hitting or missing the implicitly-defined geometry at the current 3-D position, using the produced data.
  2. 2. The method of testing a ray for intersection with an implicit surface of Claim 1, wherein the producing of the data for the implicitly-defined geometry comprises executing a procedure to determine a height of implicitly-defined geometry for the current 2-D position.
  3. 3. The method of testing a ray for intersection with an implicit surface of Claim 2, wherein the executing of the procedure comprises evaluating a function that accepts, as input, data relating to the current 2-D position.
  4. 4. The method of testing a ray for intersection with an implicit surface of Claim 1, 2 or 3, further comprising determining that the ray intersects a 3-D bounding volume that encloses the shell, and responsively initiating an implicit geometry intersection testing process.
  5. 5. The method of testing a ray for intersection with an implicit surface of any preceding Claim, further comprising setting a step size used in the iterative stepping according to a level of detail indication.
  6. 6. The method of testing a ray for intersection with an implicit surface of any preceding Claim, further comprising stepping over a pre-defined volumetric portion within the shell responsive to data indicating absence of implicit geometry in that pre-defined volumetric portion.
  7. 7. The method of testing a ray for intersection with an implicit surface of any preceding Claim, wherein the shell comprises a set of sub-volumes, and the ray is marched through the sub-volumes until an intersection is identified.
  8. 8. The method of testing a ray for intersection with an implicit surface of any preceding Claim, further comprising determining that the ray intersects a 3-0 bounding volume that encloses the shell, and projecting an entry point of the ray into the 3-D bounding volume to an entry point of the shell.
  9. 9. The method of testing a ray for intersection with an implicit surface of any preceding Claim, wherein the shell is defined by a mesh of interconnected primitives, which are tested for intersection with the ray.
  10. 10. The method of testing a ray for intersection with an implicit surface of Claim 9, wherein the interconnected primitives have respective corresponding primitives in a set of source geometry defining the explicitly-defined surface, and the shell comprises sub-volumes defined by surfaces connecting the corresponding primitive in the set of source geometry with its primitive in the mesh of interconnected primitives.
  11. 11. The method of testing a ray for intersection with an implicit surface of Claim 10, wherein the surfaces connecting primitives in the set of source geometry with the primitives of the mesh are bilinear patches.
  12. 12. The method of testing a ray for intersection with an implicit surface of Claim 9, wherein the interconnected primitives have respective corresponding primitives in a set of source geometry, and each primitive in the set of source geometry is associated with a respective implicit geometry definition function.
  13. 13. The method of testing a ray for intersection with an implicit surface of any preceding Claim, further comprising passing a level of detail parameter within a data structure for the ray to a procedure that produces the data for the implicitly-defined geometry.
  14. 14. The method of testing a ray for intersection with an implicit surface of any preceding Claim, wherein the producing data for the implicitly-defined geometry comprises using the current 2-D position as a parameter in evaluating an expression that determines an extent of implicit geometry at the current 3-D position.
  15. 15. The method of testing a ray for intersection with an implicit surface any preceding Claim, further comprising identifying a first 3-D point at which the ray is found to miss the implicitly-defined geometry and a second 3-D point at which the ray is found to hit the implicitly defined geometry, and selecting one of the first 3-D point and the second 3-0 point as an origin for a child ray, according to a ray type for the child ray.
  16. 16. A method of representing implicit surfaces for ray tracing based rendering, comprising: associating a description of an implicit surface with a primitive, wherein the description of the implicit surface can be evaluated for different coordinates on the surface of the primitive; marching a ray along a direction within a pre-defined 3-D volume defined based on an extent of the primitive; for each position of the ray within the 3-D volume, determining a surface coordinate for that position on the primitive; evaluating the description of the implicit surface for that surface coordinate; and indicating whether the ray hits or missing the implicit surface at that position within the 3-0 volume based on the evaluating.
  17. 17. The method of representing implicit surfaces for ray tracing based rendering of Claim 16, further comprising collecting a plurality of rays and evaluating the description of the implicit surface for the plurality of rays concurrently.
  18. 18. A system for testing a ray for intersection with an implicit surface, comprising: a cluster of programmable execution units, capable of executing shader code that, during execution, emits rays to be tested for intersection in a 3-D scene; a plurality of test cells for testing one or more rays with primitives that compose objects located in the 3-D scene; a plurality of local memories associated with respective test cells; and a plurality of programmable circuits coupled with respective test cells, the programmable circuits capable of being configured to march a ray through a volume in the 3-D scene and evaluate a function that indicates presence or absence of an intersection of the ray with an implicitly-defined surface within the volume.
  19. 19. The system for testing a ray for intersection with an implicit surface of Claim 18, wherein the programmable circuits are programmable by setting a parameter that defines a step size for the march of the ray.
  20. 20. The system for testing a ray for intersection with an implicit surface of Claim 18, wherein the programmable circuits are programmable by setting one or more coefficients for a polynomial function to be evaluated.
  21. 21. The system for testing a ray for intersection with an implicit surface of Claim 18, 19 or 20, wherein the programmable circuits are configurable to receive a 2-D coordinate produced by projecting a current 3-D position for the ray and the function is evaluated for the 2-D coordinate.
GB1403242.9A 2013-03-14 2014-02-25 3-D Graphics rendering with implicit geometry Active GB2513699B (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
GB1610625.4A GB2541505B (en) 2013-03-14 2014-02-25 Determining closest intersections during ray-tracing

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US201361783754P 2013-03-14 2013-03-14

Publications (3)

Publication Number Publication Date
GB201403242D0 GB201403242D0 (en) 2014-04-09
GB2513699A true GB2513699A (en) 2014-11-05
GB2513699B GB2513699B (en) 2017-01-11

Family

ID=50482721

Family Applications (4)

Application Number Title Priority Date Filing Date
GB1709391.5A Active GB2549217B (en) 2013-03-14 2014-02-25 3-D Graphics rendering with implicit geometry
GB1610625.4A Active GB2541505B (en) 2013-03-14 2014-02-25 Determining closest intersections during ray-tracing
GB1709390.7A Active GB2549020B (en) 2013-03-14 2014-02-25 3-D Graphics rendering with implicit geometry
GB1403242.9A Active GB2513699B (en) 2013-03-14 2014-02-25 3-D Graphics rendering with implicit geometry

Family Applications Before (3)

Application Number Title Priority Date Filing Date
GB1709391.5A Active GB2549217B (en) 2013-03-14 2014-02-25 3-D Graphics rendering with implicit geometry
GB1610625.4A Active GB2541505B (en) 2013-03-14 2014-02-25 Determining closest intersections during ray-tracing
GB1709390.7A Active GB2549020B (en) 2013-03-14 2014-02-25 3-D Graphics rendering with implicit geometry

Country Status (3)

Country Link
CN (4) CN110458934B (en)
DE (1) DE102014003463A1 (en)
GB (4) GB2549217B (en)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113628318A (en) * 2021-07-20 2021-11-09 北京智源人工智能研究院 Ray tracing-based distributed real-time neuron rendering method and system
US20220292759A1 (en) * 2020-06-15 2022-09-15 Nvidia Corporation Ray tracing hardware acceleration for supporting motion blur and moving/deforming geometry
US11920934B2 (en) 2016-08-19 2024-03-05 Movidius Limited Path planning using sparse volumetric data

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9984492B2 (en) * 2015-04-02 2018-05-29 Qualcomm Incorporated Efficient hierarchy traversal in ray tracing applications
CN110580736B (en) * 2018-06-07 2023-10-20 中国科学院深圳先进技术研究院 Ray tracing method and system for plate mode non-uniform rational spline surface
CN110599579B (en) * 2019-09-20 2023-02-24 山东师范大学 Photon resampling-based random asymptotic photon mapping image rendering method and system
US11257280B1 (en) * 2020-05-28 2022-02-22 Facebook Technologies, Llc Element-based switching of ray casting rules
CN111784843A (en) * 2020-07-01 2020-10-16 上海电气集团股份有限公司 Three-dimensional display method and system for pipeline grid model
CN111967174A (en) * 2020-07-30 2020-11-20 北京应用物理与计算数学研究所 Laser dynamics solving method and system based on light grid
CN112206517B (en) * 2020-10-22 2024-03-12 网易(杭州)网络有限公司 Rendering method, rendering device, storage medium and computer equipment
CN114119849B (en) * 2022-01-24 2022-06-24 阿里巴巴(中国)有限公司 Three-dimensional scene rendering method, device and storage medium

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7567248B1 (en) * 2004-04-28 2009-07-28 Mark William R System and method for computing intersections between rays and surfaces

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8018457B2 (en) * 2006-09-19 2011-09-13 Caustic Graphics, Inc. Ray tracing system architectures and methods
US7830379B2 (en) * 2006-09-19 2010-11-09 Caustic Graphics, Inc. Architectures for parallelized intersection testing and shading for ray-tracing rendering
US8139060B2 (en) * 2006-11-28 2012-03-20 International Business Machines Corporation Ray tracing image processing system
US7773087B2 (en) * 2007-04-19 2010-08-10 International Business Machines Corporation Dynamically configuring and selecting multiple ray tracing intersection methods
CN104112291B (en) * 2008-03-21 2017-03-29 想象技术有限公司 The parallel test for intersection rendered for ray tracing and the framework of coloring
US9349214B2 (en) * 2008-08-20 2016-05-24 Take-Two Interactive Software, Inc. Systems and methods for reproduction of shadows from multiple incident light sources
US8421801B2 (en) * 2008-09-09 2013-04-16 Caustic Graphics, Inc. Ray tracing using ray-specific clipping
US9483864B2 (en) * 2008-12-05 2016-11-01 International Business Machines Corporation System and method for photorealistic imaging using ambient occlusion
KR101076807B1 (en) * 2009-05-29 2011-10-25 주식회사 실리콘아츠 Ray tracing apparatus and method
US8797322B2 (en) * 2009-06-24 2014-08-05 Imagination Technologies, Limited Systems and methods of defining rays for ray tracing rendering
CN101819684B (en) * 2010-04-12 2012-06-20 长春理工大学 Spatial acceleration structure for virtual three-dimensional scene of animated film and creation and update method thereof
CN102947865B (en) * 2010-04-29 2016-10-05 想象技术有限公司 The system and method for the graph element intersecting in ray trace
CN102243074B (en) * 2010-05-13 2014-06-18 中国科学院遥感应用研究所 Method for simulating geometric distortion of aerial remote sensing image based on ray tracing technology
CN102346922B (en) * 2010-07-30 2013-09-18 中国科学院遥感应用研究所 Space remote sensing load imaging geometric distortion three-dimensional visualization simulation method
US8339409B2 (en) * 2011-02-16 2012-12-25 Arm Limited Tile-based graphics system and method of operation of such a system
CN102169366B (en) * 2011-03-18 2012-11-07 汤牧天 Multi-target tracking method in three-dimensional space
FR2974213B1 (en) * 2011-04-12 2013-05-24 Real Fusio France METHOD AND SYSTEM FOR RENDERING A THREE-DIMENSIONAL VIRTUAL SCENE
CN102184517A (en) * 2011-05-06 2011-09-14 南京工程学院 Fast intersection solving algorithm in dynamic scene

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7567248B1 (en) * 2004-04-28 2009-07-28 Mark William R System and method for computing intersections between rays and surfaces

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"Curvature-driven Modeling and Rendering of Point-Based Surfaces",Joao Paulo Gois; Eduardo Tejada; Tiago Etiene; Luis Gustavo Nonato; Antonio Castelo; Thomas Ertl, SIBGRAPI '06. 19th Brazilian Symp on Computer Graphics and Image Processing, 1-10-2006,pages 27-36 *
"Voxels on fire [computer animation]", Ye Zhao; Xiaoming Wei; Zhe Fan; Kaufman A; Hong Qin, PROC IEEE CONF ON VISUALIZATION 2003,OCT. 19 - 24, 2003, pages 271-278, SEATTLE, WA *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11920934B2 (en) 2016-08-19 2024-03-05 Movidius Limited Path planning using sparse volumetric data
US11965743B2 (en) 2016-08-19 2024-04-23 Movidius Limited Operations using sparse volumetric data
US12085392B2 (en) 2016-08-19 2024-09-10 Movidius Ltd. Dynamic culling of matrix operations
US20220292759A1 (en) * 2020-06-15 2022-09-15 Nvidia Corporation Ray tracing hardware acceleration for supporting motion blur and moving/deforming geometry
CN113628318A (en) * 2021-07-20 2021-11-09 北京智源人工智能研究院 Ray tracing-based distributed real-time neuron rendering method and system
CN113628318B (en) * 2021-07-20 2023-09-15 北京智源人工智能研究院 Distributed real-time neuron rendering method and system based on ray tracing

Also Published As

Publication number Publication date
GB2541505A (en) 2017-02-22
CN110458934A (en) 2019-11-15
CN110458934B (en) 2023-12-19
GB201403242D0 (en) 2014-04-09
GB2549217B (en) 2017-11-22
GB2549217A (en) 2017-10-11
CN110490963A (en) 2019-11-22
CN110490963B (en) 2023-06-30
GB2549020A (en) 2017-10-04
CN104050710A (en) 2014-09-17
CN104050710B (en) 2019-08-23
GB2513699B (en) 2017-01-11
GB2549020B (en) 2017-11-08
GB201709390D0 (en) 2017-07-26
GB201709391D0 (en) 2017-07-26
CN110458933A (en) 2019-11-15
GB201610625D0 (en) 2016-08-03
GB2541505B (en) 2017-08-02
CN110458933B (en) 2023-06-02
DE102014003463A1 (en) 2014-09-18

Similar Documents

Publication Publication Date Title
US11861787B2 (en) 3-D graphics rendering with implicit geometry
GB2513699A (en) 3-D Graphics rendering with implicit geometry
US8018453B2 (en) Deferred acceleration data structure optimization for improved performance
US11804002B2 (en) Techniques for traversing data employed in ray tracing
US11069124B2 (en) Systems and methods for reducing rendering latency
US7884819B2 (en) Pixel color accumulation in a ray tracing image processing system
JP5480815B2 (en) Ray tracing rendering system and method
US11138782B2 (en) Systems and methods for rendering optical distortion effects
US9940687B2 (en) Dynamic graphics rendering scheduling
US8234234B2 (en) Utilizing ray tracing for enhanced artificial intelligence path-finding
US8284195B2 (en) Cooperative utilization of spatial indices between application and rendering hardware
US8248402B2 (en) Adaptive ray data reorder for optimized ray temporal locality
US8797322B2 (en) Systems and methods of defining rays for ray tracing rendering
US10699467B2 (en) Computer-graphics based on hierarchical ray casting
US10553012B2 (en) Systems and methods for rendering foveated effects
US20080074418A1 (en) Methods and Systems for Texture Prefetching Based on a Most Recently Hit Primitive Algorithm
US8102389B2 (en) Box casting using an integrated acceleration data structure

Legal Events

Date Code Title Description
COOA Change in applicant's name or ownership of the application

Owner name: IMAGINATION TECHNOLOGIES LIMITED

Free format text: FORMER OWNER: CAUSTIC GRAPHICS INC

732E Amendments to the register in respect of changes of name or changes affecting rights (sect. 32/1977)

Free format text: REGISTERED BETWEEN 20240822 AND 20240828