US12423904B2 - Intersection testing in a ray tracing system - Google Patents
Intersection testing in a ray tracing systemInfo
- Publication number
- US12423904B2 US12423904B2 US18/114,376 US202318114376A US12423904B2 US 12423904 B2 US12423904 B2 US 12423904B2 US 202318114376 A US202318114376 A US 202318114376A US 12423904 B2 US12423904 B2 US 12423904B2
- Authority
- US
- United States
- Prior art keywords
- intersection
- primitive
- ray
- primitives
- orientation
- 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.)
- Active, expires
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/06—Ray-tracing
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/20—Finite element generation, e.g. wire-frame surface description, tesselation
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/21—Collision detection, intersection
Definitions
- the present disclosure is directed to techniques of performing intersection testing in a ray tracing system.
- Ray tracing is a computational rendering technique for generating an image of a scene (e.g. a 3D scene) by tracing paths of light (‘rays’) usually from the viewpoint of a camera through the scene.
- rays paths of light
- Each ray is modelled as originating from the camera and passing through a pixel into the scene.
- a ray traverses the scene it may intersect objects within the scene.
- the interaction between a ray and an object it intersects can be modelled to create realistic visual effects.
- a shader program i.e. a portion of computer code
- a programmer can write the shader program to define how the system reacts to the intersection which may, for example cause one or more secondary rays to be emitted into the scene, e.g. to represent a reflection of the ray off the intersected object or a refraction of the ray through the object (e.g. if the object is transparent or translucent).
- the shader program could cause one or more rays to be emitted into the scene for the purposes of determining whether the object is in shadow at the intersection point.
- the result of executing the shader program (and processing the relevant secondary rays) can be the calculation of a colour value for the pixel the ray passed through.
- Rendering an image of a scene using ray tracing may involve performing many intersection tests, e.g. billions of intersection tests for rendering an image of a scene.
- ray tracing systems can generate acceleration structures, wherein each node of an acceleration structure represents a region within the scene.
- Acceleration structures are often hierarchical (e.g. having a tree structure) such that they include multiple levels of nodes, wherein nodes near the top of the acceleration structure represent relatively large regions in the scene (e.g. the root node may represent the whole scene), and nodes near the bottom of the acceleration structure represent relatively small regions in the scene.
- Leaf nodes of the acceleration structure represent regions bounding one or more primitives in the scene, and have pointers to the bounded primitives.
- Intersection testing can be performed for a ray (e.g. in a recursive manner) using the acceleration structure by first testing the ray for intersection with the root node of the acceleration structure. If the ray is found to intersect a parent node (e.g. the root node), testing can then proceed to the child nodes of that parent. In contrast, if the ray is found not to intersect a parent node, intersection testing of the child nodes of that parent node can be avoided, saving computational effort. If a ray is found to intersect a leaf node then it can be tested against the objects within the region represented by the leaf node to thereby determine which object(s) the ray intersects with. The objects may be represented using “primitives”.
- a primitive denotes a unit of geometry in the system, and may for example be a convex polygon. Often the primitives are triangles, but they may be other shapes, e.g. squares, rectangles, pentagons, hexagons, etc. Furthermore, some primitives might not be convex polygons, or even polygons. For example, a primitive could be a disc or some other surface or volume.
- a primitive can be represented as a convex polygon (e.g. triangle) defined by an ordered set of planar vertices whereby consecutive pairs of vertices define the primitive edges and the overall vertex order gives a winding order for the primitive.
- An orientation of the primitive (i.e. clockwise or anticlockwise) with respect to a ray depends on both the winding order of the primitive and the origin and direction of the ray.
- a flag may be set in the ray tracing system (e.g.
- the winding order of the primitive can be used, with a predetermined orientation as front-facing (either clockwise or anticlockwise), to mark one side of the primitive as the front face and the other as the back face. Depending on which side is viewed by a given ray determines whether that primitive is front-facing or back-facing, clockwise or anticlockwise, at least from the viewpoint of that ray.
- an intersection point of a ray and the plane containing the primitive can be determined, and then it can be determined whether the intersection point is inside the primitive.
- a primitive intersection stage can determine whether the ray intersects the primitive and outputs this as a “hit” result.
- the primitive intersection stage may also calculate additional attributes such as orientation (either clockwise/anticlockwise or front-facing/back-facing), intersection distance, and/or barycentric coordinates indicating the position of the intersection point on the primitive.
- a distance calculation may generate a floating-point value indicating the multiple of ray lengths (e.g. indicated with a value of t) required to travel from the ray origin to the intersection point (this may be negative if the intersection occurs behind the origin).
- a ray may intersect more than one primitive in the scene. So following the primitive intersection stage, if an intersection is found between a ray and a primitive, an intersection selection stage determines whether the new intersection point or an old intersection point for the ray should be selected. Typically, the closer of the two intersections is selected (i.e. the first intersection that the ray encounters in the scene is selected). The term “closer” here may mean closer to the ray origin or it may mean closer to minus infinity depending upon the implementation (these two notions are often equivalent as it is customary, but not necessary, for the minimum distance of a ray to be greater than or equal to zero). The selected intersection is then used for further processing of the ray, whilst the unselected intersection is discarded.
- This process is also known as hidden-surface determination, shown-surface determination, hidden-surface removal (HSR), occlusion culling (OC) or visible-surface determination (VSD).
- HSR hidden-surface removal
- OC occlusion culling
- VSD visible-surface determination
- the “closer” of two intersections may be selected purely on the basis of the intersection distance values output from the primitive intersection stage. However, there are some situations in which either this is not possible or it does not provide good results to do so. For example, if the intersection distances for a ray to two different primitives are equal then it is not possible to distinguish between them on the basis of the intersection distances alone. In this situation, some form of tie-break rule may be used, but known tie-breaking rules do not always select the “best” intersection in terms of reducing perceptual rendering artefacts.
- intersection distances for a ray to two different primitives can be equal because often objects are represented with multiple primitives, e.g. with meshes of primitives, resulting in shared vertices which define two or more of the primitives.
- primitives can have shared edges, i.e., edges where both endpoints are shared vertices. If a ray intersects a point on a shared edge or on a shared vertex then the intersection distances to the two primitives sharing the edge or vertex should be equal. If the intersection tests ensure that a ray that intersects a point on a shared edge or shared vertex intersects at least one of the primitives then the intersection tests are described as being “watertight”.
- intersection tests ensure that a ray that intersects a point on a shared edge or a shared vertex of a closed fan intersects one (and only one) of the primitives then the intersection tests are described as being “non-redundantly watertight”, noting that in this case only a (strict) subset of its boundary may be considered part of a primitive.
- a (closed) fan may be encoded as (a subset of) a list of vertices, with or without a repeated vertex (indicating the central vertex of the fan), and with either an implicit primitive topology, e.g., given by the vertex order (e.g., a list of vertex tuples, or as a triangle fan or triangle strip is compactly represented in a computer graphics system), or an explicit primitive topology, e.g., given by (a subset of) a list of vertex index tuples.
- an implicit primitive topology e.g., given by the vertex order
- an explicit primitive topology e.g., given by (a subset of) a list of vertex index tuples.
- a ray which intersected a point on a shared edge was found to intersect zero primitives then it may appear as though the primitive mesh has a hole in it, such that a colour behind the primitive mesh can be seen through the mesh in the rendered image (this can occur for non-watertight intersection tests, but not for watertight intersection tests).
- These sorts of rendering errors can be very noticeable, e.g. if the colour behind the primitive mesh is significantly different to the colour of the primitive mesh.
- the testing of a ray for intersection with a first primitive is normally performed independently of the testing of the ray for intersection with a second primitive, and it is noted that ensuring watertightness, and specifically non-redundant watertightness, for the intersection tests is not trivial.
- intersection distances Another problem with solely using the intersection distances to perform intersection selection is that there may be some errors in the calculated intersection distances.
- the distance calculations which determine the intersection distances typically operate on floating point numbers, which may be of significantly different scales. When floating point numbers are used in calculations, some rounding of the values normally occurs, which can introduce errors in the results. The rounding errors are particularly significant when values with very differing magnitudes are used in the same operation.
- These errors in the calculations of the intersection distances can cause errors in the determination of which intersection is the closest.
- the errors in the determination of which intersection is the closest can be referred to as “Z fighting” and can result in rendering artefacts where a surface that should be hidden by another surface at a pixel position is visible at that pixel position. Z fighting tends to occur when two overlapping surfaces are close to each other.
- a computer-implemented method of performing intersection testing in a ray tracing system comprising:
- the comparison condition may be satisfied with respect to the threshold if the difference between the intersection distance at which the ray intersects the first primitive and the intersection distance at which the ray intersects the second primitive is less than the threshold.
- the comparison condition may be satisfied with respect to the threshold if the difference between the intersection distance at which the ray intersects the first primitive and the intersection distance at which the ray intersects the second primitive is less than or equal to the threshold.
- Said determining that the difference between the intersection distance at which a ray intersects a first primitive and the intersection distance at which the ray intersects a second primitive satisfies the comparison condition with respect to the threshold may comprise: determining the intersection distance at which the ray intersects the first primitive; determining the intersection distance at which the ray intersects the second primitive; and comparing the determined intersection distances.
- the threshold may be non-zero.
- a primitive which has said particular orientation may be a front-facing primitive, and wherein a primitive which has an orientation that is different to said particular orientation may be a back-facing primitive.
- the method may further comprise determining that the ray intersects the first and second primitives.
- the method may further comprise: if the difference between the intersection distance at which the ray intersects the first primitive and the intersection distance at which the ray intersects the second primitive does not satisfy the comparison condition with respect to the threshold, selecting the intersection of the ray with the one of the first and second primitives which has the smaller intersection distance.
- the method may further comprise: if the intersection distance at which the ray intersects the first primitive is equal to the intersection distance at which the ray intersects the second primitive, and if the orientations of the first and second primitives are the same, selecting the intersection of the ray with one of the first and second primitives based on unique primitive IDs which are associated with the first and second primitives.
- the method may further comprise using the selected intersection in the ray tracing system for rendering an image.
- intersection testing module for use in a ray tracing system, the intersection testing module comprising:
- the comparison condition may be satisfied with respect to the threshold if the difference between the intersection distance at which the ray intersects the first primitive and the intersection distance at which the ray intersects the second primitive is less than the threshold.
- the comparison condition may be satisfied with respect to the threshold if the difference between the intersection distance at which the ray intersects the first primitive and the intersection distance at which the ray intersects the second primitive is less than or equal to the threshold.
- intersection testing module may further comprise intersection determination logic configured to: determine that the ray intersects the first primitive and determine the intersection distance at which the ray intersects the first primitive; and determine that the ray intersects the second primitive and determine the intersection distance at which the ray intersects the second primitive.
- intersection testing module configured to perform any of the methods described herein.
- a computer-implemented method of performing intersection testing in a ray tracing system comprising:
- a computer-implemented method of performing intersection testing in a ray tracing system comprising:
- intersection testing module for use in a ray tracing system, the intersection testing module comprising:
- intersection testing module for use in a ray tracing system, the intersection testing module comprising:
- a computer-implemented method of performing intersection testing in a ray tracing system comprising:
- intersection testing module for use in a ray tracing system, the intersection testing module comprising:
- intersection testing module may be embodied in hardware on an integrated circuit.
- a method of manufacturing at an integrated circuit manufacturing system, an intersection testing module.
- an integrated circuit definition dataset that, when processed in an integrated circuit manufacturing system, configures the system to manufacture an intersection testing module.
- a non-transitory computer readable storage medium having stored thereon a computer readable description of an intersection testing module that, when processed in an integrated circuit manufacturing system, causes the integrated circuit manufacturing system to manufacture an integrated circuit embodying an intersection testing module.
- an integrated circuit manufacturing system comprising: a non-transitory computer readable storage medium having stored thereon a computer readable description of the intersection testing module; a layout processing system configured to process the computer readable description so as to generate a circuit layout description of an integrated circuit embodying the intersection testing module; and an integrated circuit generation system configured to manufacture the intersection testing module according to the circuit layout description.
- FIG. 1 shows a ray tracing system according to examples described herein;
- FIG. 2 shows a ray and two primitives in a scene to be rendered
- FIG. 3 a shows a mesh of primitives forming a circular band with indications of which edges are considered to be part of which primitives in a “winding/orientation independent” scheme
- FIG. 3 b shows a mesh of primitives forming a circular band with indications of which edges are considered to be part of which primitives in a “winding/orientation dependent” scheme
- FIG. 4 a shows an intersection testing module for use in a ray tracing system according to examples described herein;
- FIG. 4 b is a high level flow chart showing an intersection testing process for a ray in a ray tracing system
- FIG. 5 is a flow chart for a first method of performing intersection testing
- FIG. 6 a shows a mesh of primitives forming a circular band with indications of which edges are considered to be part of which primitives in a “winding/orientation independent” scheme in which clockwise orientation is prioritised;
- FIG. 6 b shows a mesh of primitives forming a circular band with indications of which edges are considered to be part of which primitives in a “winding/orientation independent” scheme in which anticlockwise orientation is prioritised;
- FIG. 6 c shows a mesh of primitives forming a circular band with indications of which edges are considered to be part of which primitives in a “winding/orientation dependent” scheme in which clockwise orientation is prioritised;
- FIG. 6 d shows a mesh of primitives forming a circular band with indications of which edges are considered to be part of which primitives in a “winding/orientation dependent” scheme in which anticlockwise orientation is prioritised;
- FIG. 7 a shows a mesh of primitives forming a circular band with indications of which edges are considered to be part of which primitives in a “winding/orientation independent” scheme illustrating regions in which Z fighting is likely to occur;
- FIG. 7 b shows a mesh of primitives forming a circular band with indications of which edges are considered to be part of which primitives in a “winding/orientation dependent” scheme illustrating regions in which Z fighting is likely to occur;
- FIG. 8 is a flow chart for a second method of performing intersection testing
- FIG. 9 a shows a mesh of primitives forming a circular band with indications of which edges are considered to be part of which primitives in a “winding/orientation independent” scheme in which primitives with clockwise orientation have been offset forwards relative to primitives with anticlockwise orientation;
- FIG. 9 b shows a mesh of primitives forming a circular band with indications of which edges are considered to be part of which primitives in a “winding/orientation dependent” scheme in which primitives with clockwise orientation have been offset forwards relative to primitives with anticlockwise orientation;
- FIG. 10 is a flow chart for a third method of performing intersection testing
- FIG. 11 shows a computer system in which a ray tracing system comprising an intersection testing module is implemented.
- FIG. 12 shows an integrated circuit manufacturing system for generating an integrated circuit embodying an intersection testing module.
- FIG. 1 shows a ray tracing system 100 comprising a ray tracing unit 102 and a memory 104 .
- the ray tracing unit 102 comprises a processing module 106 , an intersection testing module 108 and processing logic 110 .
- the intersection testing module 108 comprises one or more box intersection testing units 112 , and one or more primitive intersection testing units 114 .
- the ray tracing unit 102 receives geometric data defining objects within the 3D scene.
- the ray tracing unit 102 also receives ray data defining rays that are to be tested for intersection.
- the rays may be primary rays or secondary rays.
- the processing module 106 is configured to generate an acceleration structure based on the geometric data, and to send the acceleration structure to the memory 104 for storage therein.
- the intersection testing module 108 can retrieve nodes (e.g. comprising data defining axis-aligned boxes corresponding to the nodes) of the acceleration structure from the memory 104 to perform intersection testing of rays against the retrieved nodes. To avoid reading in the whole acceleration structure at a time, the intersection testing module 108 retrieves a subset of the boxes from one level of the acceleration structure from memory 104 at each stage, based on the results of previous intersection tests.
- the box intersection testing unit(s) 112 perform intersection tests to determine whether or not a ray intersects each of the bounding boxes corresponding to nodes of the acceleration structure (where a miss can cull vast swathes of the hierarchical acceleration structure). If it is determined that a leaf node is intersected then the primitive intersection testing unit(s) 114 perform one or more primitive intersection tests to determine which object(s) (if any) the ray intersects.
- the primitives are triangles, although it is noted that in other examples, the primitives could be other shapes, e.g.
- the primitives may be assumed to be nondegenerate (i.e. 2D), as intersections with degenerate primitives (i.e. 1D or 0D primitives) can be treated as misses.
- the results of the intersection tests indicate which object in the scene a ray intersects, and the results may also indicate other intersection data, such as a position on the object at which the ray intersects the object (e.g.
- Barycentric coordinates may also indicate a distance, e.g., Euclidean or as a (signed) multiple of ray lengths, along the ray that the intersection occurs, and may also indicate the perceived orientation of the object from the ray's point of view (e.g., clockwise/anticlockwise or front/back facing).
- the intersection determination may be based on whether the distance along the ray that the intersection occurs is between minimal and maximal clipping distances for the ray (which may be referred to as t min and t max ).
- the results of the intersection testing are provided to the processing logic 110 .
- the processing logic 110 is configured to process the results of the intersection testing to determine rendered values representing the image of the 3D scene.
- the rendered values determined by the processing logic 110 can be passed back to the memory 104 for storage therein to represent the image of the 3D scene.
- the ray tracing system uses an acceleration structure in order to reduce the number of intersection tests that need to be performed for a ray against primitives.
- an acceleration structure in order to reduce the number of intersection tests that need to be performed for a ray against primitives.
- some other examples might not use an acceleration structure, and may simply tests rays against the primitives without first attempting to reduce the number of intersection tests that need to be performed using an acceleration structure.
- FIG. 2 illustrates a ray 202 and two primitives 204 and 206 in a scene to be rendered.
- the two primitives are triangles and they share an edge such that they form a quad.
- the number of primitives tested against in a single instance of the primitive intersection testing unit 114 could be different in different implementations.
- the primitive intersection testing unit 114 could be a “single tester” (i.e. configured to test a ray for intersection with a single primitive at a time), a “dual tester” (i.e. configured to test a ray for intersection with a pair of primitives at a time), etc.
- the primitives should be handled in the same manner by the intersection determination logic 402 .
- the number of primitives that the primitive intersection testing unit 114 is configured to test a ray against in a single instance does not affect how the primitives are processed by the intersection selection logic 404 .
- the orientations of the two primitives are indicated as clockwise, as viewed and from the ray's perspective, in FIG. 2 .
- Primitive 204 is defined by the ordered set of vertices (v 0 , v 1 , v 2 ), and primitive 206 is defined by the ordered set of vertices (v 1 , v 3 , v 2 ).
- the edge between vertices v 1 and v 2 is shared by primitives 204 and 206 .
- v 1 and v 2 are defined in the opposite order in primitives 204 and 206 , and therefore the edge has opposite direction in one from the other, the two primitives are said to be specified with consistent winding.
- O is a vector representing the origin 201 of the ray
- D is the direction vector of the ray.
- the ray 202 intersects the primitive 204 at an intersection point 208 , but the ray 202 does not intersect primitive 206 .
- the primitive intersection testing unit(s) 114 uses a non-redundantly watertight technique to test a ray against a plurality of primitives in the scene, in turn, in order to determine whether the ray intersects each of the plurality of primitives.
- a non-redundantly watertight technique to test a ray against a plurality of primitives in the scene, in turn, in order to determine whether the ray intersects each of the plurality of primitives.
- Different techniques may be used in different examples, and we describe one such example here.
- the methods described below which are performed by the intersection selection logic 404 to address double intersections could be used with other non-redundantly watertight intersection testing schemes and/or with redundantly watertight intersection testing schemes.
- intersection selection logic 404 may be just as, if not more, useful for use with redundantly watertight intersection testing schemes because there will be more double intersections in those intersection testing schemes. Furthermore, the methods described below may still provide some benefit (especially in respect of Z-fighting) for any intersection testing scheme, irrespective of watertightness.
- the primitive testing unit 114 tests a ray for intersection with a primitive by determining, for each edge of the primitive, a parameter, w, indicative of which side of the edge the ray passes on.
- w may be a signed parameter which is determined using a function (which is referred to herein as a “2D cross product”), f(v i , v j ), of the positions of the two vertices (v i and v j ) defining the edge of the primitive, when projected parallel to the direction vector (D) of the ray into a 2D space having axes denoted P and Q in FIG. 2 .
- the axes P and Q are both perpendicular to the ray direction vector D of the ray 202 .
- the P and Q axes are not parallel to each other.
- the P and Q axes may, or may not, be perpendicular to each other.
- the origin of the pair of axes corresponds with the ray origin 201 .
- other functions of the positions of the two projected vertices defining the edge may be used to determine the parameter w.
- the function may return the result of a comparison of p i q j and q i p j , which would avoid performing a subtraction operation, but would not provide a magnitude for use in determining barycentric coordinates.
- the sign of w for the edge of the primitive indicates whether the ray passes on the left or the right of that edge, from the edge's perspective (directed from v i to v j ). Passing on the “left” side of the edge corresponds to an anticlockwise rotation from the first endpoint to the second endpoint relative to the origin. Passing on the “right” side of the edge corresponds to a clockwise rotation from the first endpoint to the second endpoint relative to the origin.
- the primitive intersection testing unit 114 of the intersection testing module 108 determines whether the ray intersects the primitive based on the w parameters determined for the edges of that primitive. For example, if the w parameters determined for the edges of the primitive all have the same sign then it is determined that the ray intersects the primitive; whereas if it is not the case that the w parameters determined for the edges of the primitive all have the same sign then it is determined that the ray does not intersect the primitive.
- the parameters determined for the edges of the primitive are used to determine whether the ray passes on the inside of the edges of the primitive, wherein it is determined that the ray intersects the primitive if it is determined that the ray passes on the inside of all of the edges of the primitive, and wherein it is determined that the ray does not intersect the primitive if it is determined that the ray passes on the outside of one or more of the edges of the primitive.
- the w parameters determined for all of the edges of the primitive 204 in FIG. 2 will be negative which indicates that the ray passes on the right side of all of the edges from the edge's perspective (directed from v i to v j ). As such, it will be determined that the ray intersects primitive 204 .
- the w parameters determined for the edges from vertex v 1 to vertex v 3 and from vertex v 3 to vertex v 2 will be negative which indicates that the ray passes on the right side of those two edges from the edge's perspective (directed from v i to v j ), but the w parameter determined for the edge from vertex v 2 to vertex v 1 will be positive which indicates that the ray passes on the left side of that edge from the edge's perspective (directed from v 2 to v 1 ). Since the signs of the w parameters determined for the edges of the primitive 206 are not all the same, it is determined that the ray does not intersect the primitive 206 .
- the ray 202 could intersect a position on the shared edge between primitives 204 and 206 , i.e. on the edge defined by vertices v 1 and v 2 . As described above, in this situation, it is preferable for the intersection testing to be non-redundantly watertight.
- intersection testing of rays with primitives is “watertight” if it is ensured that a ray that intersects a point on a shared edge of multiple primitives or a shared vertex of a closed fan is determined to intersect at least one of the primitives which share the edge or vertex.
- intersection testing of rays with primitives is “non-redundantly watertight” if it is ensured that a ray that intersects a point on a shared edge of multiple primitives or a shared vertex of a closed fan is determined to intersect a single one of the primitives which share the edge or vertex (i.e. the ray is determined to intersect one and only one of the primitives which share the edge or vertex).
- the ray is tested for intersection against each primitive independently.
- some schemes are “winding/orientation independent” which means that the if the ray intersects an edge of a primitive (e.g. if the 2D cross product for an edge is zero) then the determination of whether or not the ray intersects the primitive does not depend upon the orientation of the primitive.
- the determination may be made based on whether the edge is predominantly a top edge, a bottom edge, a left edge or a right edge of the primitive when considering the primitive in 2D space (e.g. as viewed along the ray direction vector, in the 2D space defined by the P and Q axes mentioned above and shown in FIG.
- FIG. 3 a shows a mesh of primitives 302 to 320 forming a circular band (i.e. annulus) with indications, by appropriate shading, of which edges are considered to be part of each primitive in a “winding/orientation independent” scheme.
- FIG. 3 a is a view of the (unprojected) primitives from a viewpoint that is slightly above the camera's origin, for a camera firing primary rays away from its origin. From the camera's origin only primitives 302 to 310 may be visible, whereas primitives 312 to 320 may be occluded by the primitives in front of them.
- the silhouette boundary of the primitive mesh from the viewpoint is given by the boundary between the front and back primitives, i.e.
- a clockwise orientation of a front primitive has consistent winding with an anticlockwise orientation of a back primitive
- an anticlockwise orientation of a front primitive e.g., primitive 306
- a front primitive e.g., primitive 306
- a back primitive not shown in FIG. 3 a
- the winding order of each primitive can be inferred from its perceived orientation in FIG.
- a shared edge has a solid line of either black or mid grey to indicate which of the black primitive or the grey primitive sharing the edge would be hit by a ray precisely intersecting the shared edge.
- a dotted edge of a light grey colour indicates that no primitive shown in FIG. 3 a would be hit by a ray precisely intersecting the edge.
- a shared edge has a dotted line of both black and mid grey to indicate that both the black primitive and the mid grey primitive sharing the edge would be hit by a ray precisely intersecting the shared edge.
- a winding/orientation independent scheme ensures non-redundant watertightness within the interior of a mesh of primitives, even if the winding orders of the primitives are inconsistent. However, it can result in a lack of non-redundant watertightness, e.g., double/zero hits, on a silhouette edge of the mesh of primitives, regardless of the winding orders of the two primitives sharing the silhouette edge.
- non-redundant watertightness e.g., double/zero hits
- both of the primitives 302 and 320 will be determined to be hit by a ray precisely intersecting the shared edge, as indicated by the black and mid grey shading of the dotted line.
- the edge shared by primitives 310 and 312 neither of the primitives 310 and 312 will be determined to be hit by a ray precisely intersecting the shared edge, as indicated by the light grey shading of the dotted line.
- FIG. 3 a shows the results of a scheme which implements a left-top rule as described above.
- different rules e.g. left-bottom, right-top, right-bottom, top-left, top-right, bottom-left and bottom-right rules
- FIG. 3 b shows the same mesh of primitives as those shown in FIG. 3 a , which form a circular band (i.e. annulus) with indications, by appropriate shading, of which edges are considered to be part of each primitive in a “winding/orientation dependent” scheme.
- a “winding/orientation independent” scheme to a “winding/orientation dependent” scheme (and vice versa) the same methods can be used for intersection testing, but with the addition of a post-processing XOR operation on the primitive intersection determination by an indication of the orientation of the primitive.
- the intersection determination for the primitive is selectively reversed for the primitive in dependence upon the orientation of the primitive (from the viewpoint of the ray). For example, by comparing FIG. 3 b with FIG. 3 a , we can see that, on the shared edges, the intersection determinations in FIG. 3 b are the same as in FIG. 3 a for primitives having clockwise orientation, but the intersection determinations in FIG. 3 b are the opposite of those in FIG. 3 a for primitives having anticlockwise orientation.
- the shared silhouette edge between primitives 302 and 320 returns single hits only in the winding/orientation dependent scheme shown in FIG. 3 b .
- both of the primitives will be determined to be hit by a ray precisely intersecting the shared edge.
- both of the primitives will be determined to be hit by a ray precisely intersecting the shared edge.
- zero hits may occur on shared edges in the interior (i.e. not on the silhouette boundary) of a primitive mesh due to inconsistent winding. Double/zero hits can cause rendering redundancies/artefacts, respectively, at positions on such shared edges for a “winding/orientation dependent” scheme.
- FIGS. 3 a and 3 b The occurrence of such rendering redundancies/artefacts shown in FIGS. 3 a and 3 b are difficult to remove universally, but they can be relocated so that they occur only at the silhouette edges of a mesh of primitives (as in FIG. 3 a ) or so that they only occur on shared edges between primitives with inconsistent winding (as in FIG. 3 b ).
- Visual artefacts at the silhouette edges of geometry in a rendered image are less noticeable to a viewer of the rendered image than visual artefacts in the middle of an object which may, for example in the instance of zero hits, give the appearance of the object having a hole in it, such that a background colour or occluded geometry can be seen through the object.
- the “winding/orientation dependent” scheme (as shown in FIG. 3 b ) may be preferable.
- inconsistent winding orders of primitives are expected to be submitted (or even impossible to avoid, e.g., non-orientable surfaces, e.g., a Mobius band) then the “winding/orientation independent” scheme (as shown in FIG. 3 a ) may be preferable.
- FIG. 4 a shows a primitive intersection testing unit 114 within the intersection testing module 108 .
- the primitive intersection testing unit comprises intersection determination logic 402 and intersection selection logic 404 , which may be implemented in hardware (e.g. in fixed function circuitry), software, firmware or a combination thereof.
- the intersection determination logic 402 is configured to receive ray data for a ray and primitive data defining a new primitive to be tested for intersection with the ray.
- the ray data may comprise the origin and direction vector of the ray, as well as other information associated with the ray such as a maximum culling distance and/or a minimum culling distance.
- the primitive data may comprise position data of the vertices of the primitive (e.g.
- the intersection determination logic 402 is configured to perform intersection testing, according to a non-redundantly watertight scheme as described above, to determine whether the ray intersects the primitive.
- the intersection determination logic 402 comprises distance calculation logic 406 configured to calculate an intersection distance for a determined intersection.
- intersection selection logic 404 compares the intersection data for the new intersection with the intersection data for the previous intersection and selects one of the intersections to keep (with the other intersection being discarded).
- the selected intersection can be compared with subsequent intersections that are found for the ray.
- the intersection selection logic 404 will ideally select to keep the closer of the two intersections being compared, as indicated by the intersection distances of the two primitives.
- the most recently selected intersection is the intersection that is finally determined for the ray, e.g. it represents the closest intersection for the ray with a primitive in the scene.
- This selected intersection can be used for rendering an image of the scene (e.g. by executing a shader program in respect of the intersection as described above with reference to the processing logic 110 shown in FIG. 1 ).
- FIG. 4 b is a high level flow chart showing an intersection testing process for a ray in a ray tracing system in which the ray is tested for intersection with multiple primitives (referred to as “candidate primitives”).
- the intersection testing module 108 determines whether there are any remaining candidate primitives to be tested for intersection with the ray, e.g. using a list of remaining candidate primitives which are still to be tested for intersection with the ray. If there are then the method passes to step S 414 , whereas if there are not then the method passes to step S 426 .
- step S 414 the intersection testing module 108 gets a candidate primitive and removes it from the list of remaining candidate primitives for the ray.
- step S 416 the intersection testing module 108 determines whether the ray intersects the candidate primitive. If the ray does intersect the candidate primitive then the method passes to step S 418 , whereas if the ray does not intersect the candidate primitive then the method passes back to step S 412 so that the ray can be tested against the next candidate primitive for the ray (if any remain).
- step S 418 the intersection testing module 108 determines an intersection distance at which the ray intersects the candidate primitive.
- step S 420 the intersection testing module 108 determines whether the intersection distance is between the minimal and maximal culling distances. If the intersection distance is between the minimal and maximal culling distances (possibly including neither, either or both of the minimal and maximal distances themselves) then the method proceeds to step S 422 , whereas if the intersection distance is not between the minimal and maximal culling distances (possibly including neither, either or both of the minimal and maximal distances themselves) then the method passes back to step S 412 so that the ray can be tested against the next candidate primitive for the ray (if any remain).
- step S 424 the intersection testing module 108 determines which intersection to retain, i.e. the current intersection or the previously determined intersection for the ray. Often the closer of the intersections will be selected to be retained. Details of how the determination of which intersection to retain can be performed are described below with reference to the flow charts of FIGS. 5 , 8 and 10 .
- step S 424 the method passes back to step S 412 so that the ray can be tested against the next candidate primitive for the ray (if any remain).
- step S 412 determines whether there are no remaining candidate primitives to be tested for intersection with the ray. If it is determined in step S 412 that there are no remaining candidate primitives to be tested for intersection with the ray then the method passes to step S 426 . In step S 426 it is determined whether an intersection has been found for the ray. If an intersection has been found for the ray then the method passes to step S 428 , whereas if an intersection has not been found for the ray then the method passes to step S 430 . In step S 428 an intersection is reported. In step S 430 a miss is reported.
- a ray is tested for intersection with multiple candidate primitives, and intersections are compared such that one intersection is retained for the ray.
- the following description provides examples of how two intersections for a ray with two respective primitives can be compared so that one of the intersections can be selected, e.g. for use in the ray tracing system for rendering an image of a 3D scene.
- Pre-culling of primitives that fall outside of a user supplied distance range may occur in either intersection determination logic 402 or intersection selection logic 404 , or in its own intermediate stage (not shown in FIG. 4 a but shown as step S 420 in FIG. 4 b ).
- the distance range may be given as [t min , t max ], (t min , t max ), [t min , t max ) or (t min , t max ], where it is noted that when representing a range, square brackets indicate that the endpoints are included in the range, whereas round brackets indicate that the endpoints are excluded from the range.
- intersection determination logic 402 reduces the situations in which multiple intersections are found at the same intersection distance.
- the non-redundantly watertight intersection testing schemes described above are used by the intersection determination logic, there are still some situations in which, a double intersection can be found on shared edges of primitives, and in which the two intersection distances are equal.
- intersection determination logic 402 Since the intersection determination logic 402 only considers primitives locally, e.g., a single primitive at a time if it is implemented as a “single tester”, or a pair of primitives at a time if it is implemented as a “dual tester”, etc., it cannot remove all of the situations in which double intersections could occur. For example, in the winding/orientation independent example shown in FIG. 3 a , a double intersection will be found when a ray intersects the left silhouette edge of the band of primitives (i.e. the edge shared by primitives 302 and 320 ), and in the winding/orientation dependent example shown in FIG. 3 b , a double intersection will be found when a ray intersects the edge shared by primitives 304 and 306 , and when a ray intersects the edge shared by primitives 306 and 308 .
- Enabling back-face culling could be used to resolve some of the double intersections (e.g. on the left silhouette edge of the example shown in FIG. 3 a ), but users may choose not to enable back-face culling for one of many reasons, e.g. due to potential gains in traversal speeds (as intersecting back-facing geometry may lead to more culling due to earlier box misses), and/or to provide support for intra-surface rays to model effects such as refraction and subsurface scattering. So it would be beneficial to have a method which can resolve the double intersections without back-face culling being enabled.
- the problematic cases in which double intersections occur on shared edges in the examples shown in FIGS. 3 a and 3 b are when the two primitives sharing the edge have different orientations.
- Orientation is a view-dependent property, i.e., it depends on both the primitive and the ray.
- the winding of the primitives 302 and 320 is consistent, but the orientation of the two primitives is different from the viewpoint of the ray because primitive 302 is front-facing whereas primitive 320 is back-facing. Therefore, as shown in FIG. 3 a , primitives 302 and 320 have different orientations, in particular primitive 302 has a clockwise orientation and primitive 320 has an anticlockwise orientation.
- the winding of the primitive 306 is inconsistent with the winding of the other primitives in the mesh, so the orientation of primitive 306 is different from the orientation of the primitives 304 and 308 from the viewpoint of the ray.
- primitives 304 and 308 have a clockwise orientation and primitive 306 has an anticlockwise orientation.
- intersection selection logic 406 can select one of the intersections based on the orientations of the primitives which have been intersected. For example, intersections with front-facing primitives may be prioritised over intersections with back-facing primitives. A user may supply a flag to indicate whether front-facing primitives have a clockwise or an anticlockwise orientation.
- FIG. 5 shows a flow chart for a first method of performing intersection testing in the ray tracing system 100 .
- the method shown in FIG. 5 is performed for a ray by the intersection testing module 108 , e.g. by the primitive intersection testing unit 114 .
- step S 502 the intersection determination logic 402 determines whether the ray intersects a first primitive.
- step S 502 may involve implementing a non-redundantly watertight intersection testing scheme, such as a winding/orientation independent scheme or a winding/orientation dependent scheme as described above. If it is determined in step S 502 that the ray does intersect the first primitive then the method passes from step S 502 to step S 504 , whereas if it is determined in step S 502 that the ray does not intersect the first primitive then the method passes from step S 502 to step S 510 .
- a non-redundantly watertight intersection testing scheme such as a winding/orientation independent scheme or a winding/orientation dependent scheme as described above.
- step S 504 the intersection determination logic 402 (e.g. the distance calculation logic 406 ) determines the intersection distance (t int,1 ) at which the ray intersects the first primitive.
- the intersection determination logic may also determine other intersection data relating to the intersection of the ray with the first primitive, such as barycentric coordinates indicating the position on the first primitive at which the intersection occurs, and the orientation of the first primitive.
- the intersection distance (t int,1 ) and other intersection data determined in step S 504 for the intersection of the ray with the first primitive are passed from the intersection determination logic 402 to the intersection selection logic 404 .
- step S 506 the intersection determination logic 402 determines whether the ray intersects a second primitive.
- step S 506 may involve implementing a non-redundantly watertight intersection testing scheme, such as a winding/orientation independent scheme or a winding/orientation dependent scheme as described above. If it is determined in step S 506 that the ray does intersect the second primitive then the method passes from step S 506 to step S 508 , whereas if it is determined in step S 506 that the ray does not intersect the second primitive then the method passes from step S 506 to step S 510 .
- Step S 506 may be performed immediately after step S 504 , or some other processing may be performed in between steps S 504 and S 506 .
- step S 508 the intersection determination logic 402 (e.g. the distance calculation logic 406 ) determines the intersection distance (t int,2 ) at which the ray intersects the second primitive.
- the intersection determination logic may also determine other intersection data relating to the intersection of the ray with the second primitive, such as barycentric coordinates indicating the position on the second primitive at which the intersection occurs, and the orientation of the second primitive.
- the intersection distance (t int,2 ) and other intersection data determined in step S 508 for the intersection of the ray with the second primitive are passed from the intersection determination logic 402 to the intersection selection logic 404 .
- step S 508 the method proceeds to step S 512 .
- step S 510 which is performed when the intersection determination logic 402 determines that the ray does not intersect a primitive, then the intersection testing module continues with other processing, e.g. by testing the ray for intersection with another primitive (e.g. by looping back to step S 502 or step S 506 in respect of the next primitive) or by testing a different ray for intersection with a primitive.
- step S 514 the intersection selection logic 404 determines whether the orientations of the first and second primitives are the same. If it is determined in step S 514 that the orientations of the first and second primitives are different then the method passes from step S 514 to step S 516 . If it is determined in step S 514 that the orientations of the first and second primitives are the same then the method passes from step S 514 to step S 518 .
- step S 516 the intersection selection logic 404 selects the intersection of the ray with one of the first and second primitives on the basis that said one of the first and second primitives has a particular orientation.
- the “particular orientation” may be the orientation (either clockwise or anticlockwise) which corresponds to a front-facing primitive.
- the particular orientation it would be possible for the particular orientation to be the orientation which corresponds to a back-facing primitive.
- the user may set an indication (e.g.
- a flag to indicate whether front-facing corresponds to clockwise or anticlockwise (and accordingly whether back-facing corresponds to anticlockwise or clockwise).
- the correspondence between front/back facing primitives and clockwise/anticlockwise orientations may be predetermined without the user having to set an indication (e.g. a flag).
- the “particular orientation” is usually set to the “front-facing orientation” for rays originating in the exterior of the surface, whereas the “particular orientation” is usually set to the “back-facing orientation” for rays originating in the interior of the surface.
- the selected intersection data (i.e. the intersection data for the selected intersection) is outputted from the intersection selection logic 404 . Following step S 516 the method passes to step S 522 .
- the intersection selection logic 404 selects the intersection of the ray with one of the first and second primitives using a deterministic fallback tie-break rule. For example, the intersection selection logic 404 may select the intersection of the ray with one of the first and second primitives based on unique primitive IDs which are associated with the first and second primitives.
- Each of the primitives that is processed by the intersection testing module 108 may have a unique primitive ID, or alternatively a primitive ID can be derived from the order the primitives are submitted to the system (which may not be the same order the primitives are tested against the ray, due to the acceleration structure).
- the primitive IDs are used as a secondary tie-break rule which is used as a fall-back in the situation in which the intersections cannot be distinguished by the non-redundantly watertight intersection testing or by selecting an intersection based on the orientations of the intersected primitives.
- This secondary tie-break rule is deterministic, so the combined tie-break rule (i.e.
- the tie-breaking based on orientation with a fallback of tie-breaking based on primitive ID is also deterministic, i.e., it does not depend on the process order of the primitives. This determinism means that stable results (i.e. the same results) are obtained regardless of the order in which primitives are tested for intersection against a ray.
- a different fallback tie-breaking technique may be used in step S 518 . Any total strict order on the primitives will suffice. If the tie-breaking rule encodes a total strict ordering of the primitives then the primitive selection is deterministic.
- the selected intersection data i.e. the intersection data for the selected intersection
- step S 520 The method will perform step S 520 if it is determined that t int,1 ⁇ t int,2 .
- the intersection selection logic 404 selects the intersection of the ray with the one of the first and second primitives which has the smaller intersection distance. Therefore, if t int,1 ⁇ t int,2 then in step S 520 the intersection selection logic 404 selects the intersection with the first primitive, whereas if t int,2 ⁇ t int,1 then in step S 520 the intersection selection logic 404 selects the intersection with the second primitive.
- the selected intersection data i.e. the intersection data for the selected intersection
- the method passes to step S 522 .
- step S 522 the selected intersection is used in the ray tracing system for rendering an image of the 3D scene.
- step S 522 may include determining whether there are more primitives to be tested for intersection with the ray, and if there are then the method can loop back to step S 506 which can then be performed in respect of the next primitive (wherein the primitive involved in the selected intersection for the ray is then treated as the “first primitive” and the next primitive is treated as the “second primitive”). In this way, the data for the selected intersection for the ray can be compared with subsequent intersections for the ray by the intersection testing module 108 to determine which is the closest intersection for the ray.
- step S 522 determines that there are no more primitives to be tested for intersection with the ray then data for the closest intersection for the ray can be passed to the processing logic 110 , which can execute a shader program to determine how to process the intersection.
- the final output of processing all of the rays in the ray tracing system may be a rendered image, which can be used in any suitable way, e.g. it can be displayed on a display, stored in a memory, or transmitted to another device, just to give some examples.
- FIG. 3 a shows the results of the non-redundantly watertight intersection testing scheme using a winding/orientation independent technique, and it can be seen that there is a double intersection on the left silhouette edge.
- FIG. 6 a shows the same mesh of primitives forming a circular band (i.e. annulus) as shown in FIG.
- FIG. 6 a shows the result of using the tie-breaking method based on the orientation of the primitives in this situation (in which a “winding/orientation independent” scheme is used), when the clockwise orientation is prioritised (i.e. when the “particular orientation” is clockwise). It can be seen that the left silhouette edge is now shown as an intersection for primitive 602 and not for primitive 620 , so a non-arbitrary primitive selection has been made resolving the double intersection on this left silhouette edge.
- intersection selection logic 404 selects the intersection with primitive 602 on this shared edge (and does not select the intersection with primitive 620 on this shared edge) because primitive 602 has a clockwise orientation from the viewpoint of the ray (which is the “particular orientation” in this case) whereas the primitive 620 has an anticlockwise orientation from the viewpoint of the ray (which is not the “particular orientation” in this case). All double intersections are resolved in the example shown in FIG. 6 a.
- FIG. 6 b shows the same mesh of primitives forming a circular band (i.e. annulus) as shown in FIG. 3 a , where the primitives 602 to 620 are the same as the respective primitives 302 to 320 shown in FIG. 3 a , with indications, by appropriate shading, of which edges are considered to be part of each primitive.
- FIG. 6 b shows the result of using the tie-breaking method based on the orientation of the primitives in this situation (in which a “winding/orientation independent” scheme is used), when the anticlockwise orientation is prioritised (i.e. when the “particular orientation” is anticlockwise).
- the left silhouette edge is now shown as an intersection for primitive 620 and not for primitive 602 , so a non-arbitrary primitive selection has been made resolving the double intersection on this left silhouette edge.
- the intersection selection logic 404 selects the intersection with primitive 620 on this shared edge (and does not select the intersection with primitive 602 on this shared edge) because primitive 620 has an anticlockwise orientation from the viewpoint of the ray (which is the “particular orientation” in this case) whereas the primitive 602 has a clockwise orientation from the viewpoint of the ray (which is not the “particular orientation” in this case). All double intersections are resolved in the example shown in FIG. 6 b . Both of the examples shown in FIGS.
- FIG. 6 a and 6 b resolve the double intersections on the left silhouette edge, but there might be a preference for the example shown in FIG. 6 a because this has prioritised the orientation which corresponds to most of the front-facing primitives of the mesh indicating how the annulus should be oriented.
- FIG. 3 b shows the results of the non-redundantly watertight intersection testing scheme using a winding/orientation dependent technique, and it can be seen that there are double intersections on the edge shared by primitives 304 and 306 and on the edge shared by primitives 306 and 308 .
- FIG. 6 c shows the same mesh of primitives forming a circular band (i.e. annulus) as shown in FIG. 3 b , where the primitives 602 to 620 are the same as the respective primitives 302 to 320 shown in FIG. 3 b , with indications, by appropriate shading, of which edges are considered to be part of each primitive.
- FIG. 6 c shows the result of using the tie-breaking method based on the orientation of the primitives in this situation (in which a “winding/orientation dependent” scheme is used), when the clockwise orientation is prioritised (i.e. when the “particular orientation” is clockwise). It can be seen that the edge shared by primitives 604 and 606 is now shown as an intersection for primitive 604 and not for primitive 606 , so a non-arbitrary primitive selection has been made resolving the double intersection on this shared edge.
- the intersection selection logic 404 selects the intersection with primitive 604 on this shared edge (and does not select the intersection with primitive 606 on this shared edge) because primitive 604 has a clockwise orientation from the viewpoint of the ray (which is the “particular orientation” in this case) whereas the primitive 606 has an anticlockwise orientation from the viewpoint of the ray (which is not the “particular orientation” in this case).
- the edge shared by primitives 606 and 608 is now shown as an intersection for primitive 608 and not for primitive 606 , so a non-arbitrary primitive selection has been made resolving the double intersection on this shared edge.
- intersection selection logic 404 selects the intersection with primitive 608 on this shared edge (and does not select the intersection with primitive 606 on this shared edge) because primitive 608 has a clockwise orientation from the viewpoint of the ray (which is the “particular orientation” in this case) whereas the primitive 606 has an anticlockwise orientation from the viewpoint of the ray (which is not the “particular orientation” in this case). All double intersections are resolved in the example shown in FIG. 6 c.
- FIG. 6 d shows the same mesh of primitives forming a circular band (i.e. annulus) as shown in FIG. 3 b , where the primitives 602 to 620 are the same as the respective primitives 302 to 320 shown in FIG. 3 b , with indications, by appropriate shading, of which edges are considered to be part of each primitive.
- FIG. 6 d shows the result of using the tie-breaking method based on the orientation of the primitives in this situation (in which a “winding/orientation dependent” scheme is used), when the anticlockwise orientation is prioritised (i.e. when the “particular orientation” is anticlockwise).
- the edge shared by primitives 604 and 606 is now shown as an intersection for primitive 606 and not for primitive 604 , so a non-arbitrary primitive selection has been made resolving the double intersection on this shared edge.
- the intersection selection logic 404 selects the intersection with primitive 606 on this shared edge (and does not select the intersection with primitive 604 on this shared edge) because primitive 606 has an anticlockwise orientation from the viewpoint of the ray (which is the “particular orientation” in this case) whereas the primitive 604 has a clockwise orientation from the viewpoint of the ray (which is not the “particular orientation” in this case).
- the intersection selection logic 404 selects the intersection with primitive 606 on this shared edge (and does not select the intersection with primitive 608 on this shared edge) because primitive 606 has an anticlockwise orientation from the viewpoint of the ray (which is the “particular orientation” in this case) whereas the primitive 608 has a clockwise orientation from the viewpoint of the ray (which is not the “particular orientation” in this case). All double intersections are resolved in the example shown in FIG. 6 d . Both of the examples shown in FIGS.
- 6 c and 6 d resolve the double intersections on the edge shared by primitives 604 and 606 and on the edge shared by primitives 606 and 608 , but there might be a preference for the example shown in FIG. 6 c because this has prioritised the orientation which corresponds to most of the front-facing primitives of the mesh indicating how the annulus should be oriented.
- the orientation-based tie-break rule comes into effect only when the intersection distances of two intersections are equal (as determined in step S 512 ). Problems can occur even when the determined intersection distances are not exactly equal because of errors in the distance calculations (e.g. due to rounding of floating point values). For example, due to the lack of numerical precision in the primitive intersection determination and its subsequent error in the distance calculation, two theoretically equal distances may be output as different by the primitive intersection sub-stage. Furthermore, two nearly theoretically-equal distances may have their relative sizes reversed (or made equal) for the same reasons. So even if the errors in the distance calculations are small, a primitive that should be behind another primitive might actually be shown in front of that other primitive.
- Z-fighting This problem is referred to as “Z-fighting”, and it causes rendering artefacts where a primitive that should be occluded by another primitive shows through (e.g., in a partial or fragmented way).
- Z-fighting enabling back-face culling could avoid some of the problems caused by Z-fighting, particularly around silhouette edges (which is where the problems are often likely to occur), but users might not enable back-face culling for the reasons outlined previously, so another approach for addressing Z-fighting is desired.
- Z-fighting may occur for rays intersecting on or near a shared edge (e.g., on or near a silhouette boundary) when further vertices of the two primitives sharing the edge (where a “further vertex” is a vertex that is not part of the shared edge) have coordinates of very different magnitudes.
- the coordinate values may be represented in a floating-point format.
- a primitive with a further vertex having a coordinate with a high exponent value may result in larger errors in the calculation of the intersection distance than a primitive with a further vertex having coordinates with all low exponent values, as errors are often relative to the biggest input of an arithmetic operation.
- r′ int r int ⁇ O.
- FIGS. 7 a and 7 b show regions which are likely to suffer from Z-fighting in the examples described above.
- FIG. 7 a shows the same mesh of primitives forming a circular band (i.e. annulus) as shown in FIG. 3 a , where the primitives 702 to 720 are the same as the respective primitives 302 to 320 shown in FIG. 3 a in a winding/orientation independent example, with indications, by appropriate shading, of which edges are considered to be part of each primitive.
- FIG. 7 b shows the same mesh of primitives forming a circular band (i.e. annulus) as shown in FIG. 3 b , where the primitives 702 to 720 are the same as the respective primitives 302 to 320 shown in FIG.
- intersections close to (or on) a silhouette boundary or a shared edge between primitives which are at a highly acute angle to each other or very near to (or on) a silhouette boundary are likely candidates for Z-Fighting to occur.
- regions 722 and 724 in FIGS. 7 a and 7 b include their respective shared edges.
- FIG. 8 shows a flow chart for a second method of performing intersection testing in the ray tracing system 100 .
- the method shown in FIG. 8 is performed for a ray by the intersection testing module 108 , e.g. by the primitive intersection testing unit 114 .
- Steps S 802 to S 810 are the same as steps S 502 to S 510 shown in FIG. 5 and described above.
- the intersection determination logic 402 determines whether the ray intersects a first primitive, e.g. using a non-redundantly watertight intersection testing scheme, such as a winding/orientation independent scheme or a winding/orientation dependent scheme as described above. If it is determined in step S 802 that the ray does intersect the first primitive then the method passes from step S 802 to step S 804 , whereas if it is determined in step S 802 that the ray does not intersect the first primitive then the method passes from step S 802 to step S 810 .
- a non-redundantly watertight intersection testing scheme such as a winding/orientation independent scheme or a winding/orientation dependent scheme as described above.
- step S 804 the intersection determination logic 402 (e.g. the distance calculation logic 406 ) determines the intersection distance (t int,1 ) at which the ray intersects the first primitive.
- the intersection determination logic may also determine other intersection data relating to the intersection of the ray with the first primitive, such as barycentric coordinates indicating the position on the first primitive at which the intersection occurs, and the orientation of the first primitive.
- the intersection distance (t int,1 ) and other intersection data determined in step S 804 for the intersection of the ray with the first primitive are passed from the intersection determination logic 402 to the intersection selection logic 404 .
- step S 806 the intersection determination logic 402 determines whether the ray intersects a second primitive, e.g. using a non-redundantly watertight intersection testing scheme, such as a winding/orientation independent scheme or a winding/orientation dependent scheme as described above. If it is determined in step S 806 that the ray does intersect the second primitive then the method passes from step S 806 to step S 808 , whereas if it is determined in step S 806 that the ray does not intersect the second primitive then the method passes from step S 806 to step S 810 .
- Step S 806 may be performed immediately after step S 804 , or some other processing may be performed in between steps S 804 and S 806 .
- step S 808 the intersection determination logic 402 (e.g. the distance calculation logic 406 ) determines the intersection distance (t int,2 ) at which the ray intersects the second primitive.
- the intersection determination logic may also determine other intersection data relating to the intersection of the ray with the second primitive, such as barycentric coordinates indicating the position on the second primitive at which the intersection occurs, and the orientation of the second primitive.
- the intersection distance (t int,2 ) and other intersection data determined in step S 808 for the intersection of the ray with the second primitive are passed from the intersection determination logic 402 to the intersection selection logic 404 .
- step S 808 the method proceeds to step S 812 .
- step S 810 which is performed when the intersection determination logic 402 determines that the ray does not intersect a primitive, then the intersection testing module continues with other processing, e.g. by testing the ray for intersection with another primitive (e.g. by looping back to step S 802 or step S 806 in respect of the next primitive) or by testing a different ray for intersection with a primitive.
- step S 812 the intersection selection logic 404 determines a first offset intersection distance (t off,1 ) which is equal to a sum of the intersection distance (t int,1 ) at which the ray intersects the first primitive and a first offset ( ⁇ 1 ) which is dependent upon the orientation of the first primitive.
- the first offset, ⁇ 1 may be non-zero, in which case step S 812 may involve performing an addition (or subtraction) operation to add t int,1 and ⁇ 1 together.
- the first offset ⁇ 1 may be positive or negative.
- the first offset ⁇ 1 may be a relative offset to t int,1 , i.e., it may scale with the exponent of the floating-point value t int,1 .
- the first offset ⁇ 1 may have an exponent which scales with an exponent of the intersection distance t int,1 with which it is to be summed.
- step S 814 the intersection selection logic 404 determines a second offset intersection distance (t off,2 ) which is equal to a sum of the intersection distance (t int,2 ) at which the ray intersects the second primitive and a second offset ( ⁇ 2 ) which is dependent upon the orientation of the second primitive.
- the second offset, ⁇ 2 may be non-zero, in which case step S 814 may involve performing an addition (or subtraction) operation to add t int,2 and ⁇ 2 together.
- the second offset ⁇ 2 may be positive or negative.
- the second offset ⁇ 2 may be a relative offset to t int,2 , i.e., it may scale with the exponent of the floating-point value t int,2 .
- the second offset ⁇ 2 may have an exponent which scales with an exponent of the intersection distance t int,2 with which it is to be summed.
- the second offset ( ⁇ 2 ) is non-zero
- an offset with the same sign (and optionally the same mantissa) as the second offset ( ⁇ 2 ) is used for determining offset intersection distances for any primitives which have the same orientation as the second primitive. If the orientation of the first primitive is different to the orientation of the second primitive then the first offset ( ⁇ 1 ) is different to the second offset ( ⁇ 2 ), e.g., one may be zero and one may be non-zero.
- intersection selection logic 404 then compares the determined first and second offset intersection distances (t off,1 and t off,2 ) to select the intersection of the ray with one of the first and second primitives. In this way the intersection selection logic 404 identifies which of the determined first and second offset intersection distances is lower, and the intersection corresponding to the identified offset intersection distance is selected.
- step S 816 the intersection selection logic 404 determines whether the second offset intersection distance (t off,2 ) is less than the first offset intersection distance (t off,1 ). If t off,2 ⁇ t off,1 then the method passes from step S 816 to step S 818 , whereas if t off,2 ⁇ t off,1 then the method passes from step S 816 to step S 820 .
- step S 818 (which is performed if t off,2 ⁇ t off,1 ) the intersection selection logic 404 selects the intersection of the ray with the second primitive.
- the selected intersection data (i.e. the intersection data for the selected intersection) is outputted from the intersection selection logic 404 .
- step S 818 the method passes to step S 826 .
- step S 822 (which is performed if t off,2 >t off,1 ) the intersection selection logic 404 selects the intersection of the ray with the first primitive.
- the selected intersection data (i.e. the intersection data for the selected intersection) is outputted from the intersection selection logic 404 .
- step S 826 the method passes to step S 826 .
- the intersection selection logic 404 may select the intersection of the ray with one of the first and second primitives based on unique primitive IDs which are associated with the first and second primitives.
- each of the primitives that is processed by the intersection testing module 108 may have a unique primitive ID, or alternatively a primitive ID can be derived from the order the primitives are submitted to the system (which may not be the same order the primitives are tested against the ray, due to the acceleration structure).
- the primitive IDs are used as a secondary tie-break rule which is used as a fall-back in the situation in which the intersections cannot be distinguished by the non-redundantly watertight intersection testing or by applying the orientation-dependent offsets to the intersection distances.
- This secondary tie-break rule is also deterministic, i.e. it does not depend on the process order of the primitives.
- a different fallback tie-breaking technique may be used in step S 824 . As described above in relation to step S 518 , any total strict order on the primitives will suffice. If the tie-breaking rule encodes a total strict ordering of the primitives then the primitive selection is deterministic.
- the selected intersection data i.e. the intersection data for the selected intersection
- step S 826 the selected intersection is used in the ray tracing system for rendering an image of the 3D scene.
- step S 826 may include determining whether there are more primitives to be tested for intersection with the ray, and if there are then the method can loop back to step S 806 which can then be performed in respect of the next primitive (wherein the primitive involved in the selected intersection for the ray is then treated as the “first primitive” and the next primitive is treated as the “second primitive”). In this way, the data for the selected intersection for the ray can be compared with subsequent intersections for the ray by the intersection testing module 108 to determine which is the closest intersection for the ray.
- step S 826 determines that there are no more primitives to be tested for intersection with the ray then data for the closest intersection for the ray can be passed to the processing logic 110 , which can execute a shader program to determine how to process the intersection.
- the final output of processing all of the rays in the ray tracing system may be a rendered image, which can be used in any suitable way, e.g. it can be displayed on a display, stored in a memory, or transmitted to another device, just to give some examples.
- the same offset may be applied to all intersection distances for primitives with the same orientation.
- an offset with the same sign and mantissa, but different exponent e.g., equal to the exponent of the intersection distance to which it is to be applied
- Different offsets are applied to intersection distances for primitives with different orientations. If the first primitive has the particular orientation then the first offset ( ⁇ 1 ) is less than if the first primitive does not have the particular orientation. Similarly, if the second primitive has the particular orientation then the second offset ( ⁇ 2 ) is less than if the second primitive does not have the particular orientation.
- the selected intersection will be the intersection involving the primitive with the smallest intersection distance. If the difference between two intersection distances is zero, and if the orientations of the two primitives involved in intersections are the same, then the selected intersection will be the intersection involving the primitive selected by the fallback tie-breaking technique. If the difference between two intersection distances is equal to the threshold, and if the orientations of the two primitives involved in intersections are different, then the selected intersection will either be the intersection involving the primitive with the smallest intersection distance or the primitive selected by the fallback tie-breaking technique, depending on whether the primitive with the closer or farther intersection distance has the particular orientation.
- the selected intersection will be the intersection involving the primitive with the smallest intersection distance. If the difference between two intersection distances is greater than the threshold, then the selected intersection will be the intersection involving the primitive with the smallest intersection distance.
- the determination of the first offset intersection distance (t off,1 ) comprises determining the intersection distance (t int,1 ) at which the ray intersects the first primitive
- the determination of the second offset intersection distance (t off,2 ) comprises determining the intersection distance (t int,2 ) at which the ray intersects the second primitive.
- the determination of the first offset intersection distance (t off,1 ) comprises offsetting the determined intersection distance (t int,1 ) at which the ray intersects the first primitive by the first offset ( ⁇ 1 )
- the determination of the second offset intersection distance (t off,2 ) comprises offsetting the determined intersection distance (t int,2 ) at which the ray intersects the second primitive by the second offset ( ⁇ 2 ). It is noted that if the first offset ( ⁇ 1 ) is zero then offsetting the determined intersection distance (t int,1 ) at which the ray intersects the first primitive by the first offset ( ⁇ 1 ) is equivalent to not performing an offsetting step.
- the offsets for primitives of one orientation are set to be zero so that some addition operations can be avoided.
- the first and second primitives have different orientations, either: (i) the first offset ( ⁇ 1 ) is zero and the second offset ( ⁇ 2 ) is non-zero, or (ii) the second offset ( ⁇ 2 ) is zero and the first offset ( ⁇ 1 ) is non-zero.
- first and second primitives have different orientations, either: (iii) the offset of the primitive with the particular orientation is zero and the offset of the primitive without the particular orientation is strictly positive, or (iv) the offset of the primitive without the particular orientation is zero and the offset of the primitive with the particular orientation is strictly negative.
- the intersection selection logic 404 adds either a (small) absolute or a (small) relative offset (e.g., a small number of units of least precision (ULPs)) to the result of the intersection distance calculation, based on the orientation of the intersected primitive output from the intersection determination logic 402 .
- the offset can either be added to one orientation or subtracted from the other, the two approaches having the same effect in terms of the relative order of the intersection distances (i.e., primitive selection). It is noted that subtracting a positive offset is equivalent to adding a negative offset.
- the offsets may be added to the mantissa of a floating point value representing an intersection distance independently of the exponent of that floating point value. In this way, the offsets have magnitudes that depend upon the exponents of the intersection distances.
- the minimal size of the offset (e.g., the minimal number of ULPs) before any Z-Fighting is resolved, may depend on the accuracy (e.g., due to rounding) of the distance calculation performed by the distance calculation logic 406 in the intersection determination logic 402 . If the size of the relative offset (i.e. the difference between ⁇ 1 and ( ⁇ 2 ) is large then false results may occur due to the determination of hidden surface removal being inverted in unintentional cases. As such, the size of the relative offset (i.e.
- the difference between ⁇ 1 and ( ⁇ 2 ) may be set to be conservatively small such that very few false results occur, but with some Z-fighting still solved.
- the size of the relative offset i.e. the difference between ⁇ 1 and ( ⁇ 2 ) may be set to be conservatively large so that it solves all Z-fighting at the expense of some false results (e.g., at near self-intersections).
- a conservatively large value may be resorted to, accepting that excess false results may arise (e.g., at near self-intersections).
- FIG. 9 a shows the same mesh of primitives forming a circular band (i.e. annulus) as shown in FIG. 3 a , where the primitives 902 to 920 are the same as the respective primitives 302 to 320 shown in FIG. 3 a in which a winding/orientation independent scheme is used for intersection testing, with indications, by appropriate shading, of which edges are considered to be part of each primitive.
- FIG. 9 a shows the (exaggerated) result of applying offsets to the intersection distances, where the offset for primitives having a clockwise orientation is less than the offset for primitives having an anticlockwise orientation.
- the clockwise orientation is prioritised and it has the effect of shifting the primitives with anticlockwise orientation (relative to the primitives with clockwise orientation) farther away from the ray origin.
- the left silhouette edge i.e. the edge shared by primitives 902 and 920
- the intersection selection logic 404 can select the intersection with the primitive 902 (and not select the intersection with the primitive 920 ) on the left silhouette edge by comparing the offset intersection distances of the two primitives on the shared edge. It can be seen in FIG. 9 a that the offset intersection distance for primitive 902 is less than the offset intersection distance for primitive 920 on the edge shared by these two primitives.
- FIG. 9 b shows the same mesh of primitives forming a circular band (i.e. annulus) as shown in FIG. 3 b , where the primitives 902 to 920 are the same as the respective primitives 302 to 320 shown in FIG. 3 b in which a winding/orientation dependent scheme is used for intersection testing, with indications, by appropriate shading, of which edges are considered to be part of each primitive.
- FIG. 9 b shows the (exaggerated) result of applying offsets to the intersection distances, where the offset for primitives having a clockwise orientation is less than the offset for primitives having an anticlockwise orientation.
- the clockwise orientation is prioritised and it has the effect of shifting the primitives with anticlockwise orientation (relative to the primitives with clockwise orientation) farther away from the ray origin.
- the right silhouette edge is shown as an excluded edge (represented by the dotted light grey line of primitive 910 ) offset in front of an included edge (represented by the solid mid grey line of primitive 912 ).
- these two lines are visually combined where there is overlap, but it is to be understood that as the occluding edge of primitive 910 is excluded, rays pass through it to the included edge of primitive 912 behind.
- the intersection selection logic 404 can select the intersections with the primitives 904 and 908 (and not select the intersection with the primitive 906 ) on these respective edges by comparing the offset intersection distances of the primitives on the shared edges. It can be seen in FIG. 9 b that the offset intersection distance for primitive 904 is less than the offset intersection distance for primitive 906 on the edge shared by these two primitives, and that the offset intersection distance for primitive 908 is less than the offset intersection distance for primitive 906 on the edge shared by these two primitives.
- FIGS. 9 a and 9 b the viewer's perspective is slightly above the ray origin. This means that the shift along the ray direction due to the offsets is visible in the figures, but the gaps seen between adjacent primitives of the mesh are not visible from the point of view of the ray, i.e. watertightness is still guaranteed. Furthermore, FIGS. 9 a and 9 b only show the situations in which the clockwise orientation is prioritised (i.e. the offset for clockwise primitives is less than the offset for anticlockwise primitives). This is because prioritising the anticlockwise orientation would be incorrect behaviour for the example meshes shown in the figures, as given by the orientation of the majority of the front-facing primitives of the annulus, indicating how the surface should be oriented.
- any ray with exterior origin for rays originating outside the surface
- rays originating outside the surface e.g., camera rays, reflection rays, shadow rays, ambient occlusion rays, etc.
- rays originating inside the surface e.g., refraction rays, subsurface scattering rays, etc.
- intersection distances by the offsets are used only for the purposes of the selection of intersections performed by the intersection selection logic 404 .
- an intersection distance is output from the primitive intersection testing unit 114 (e.g. as part of the selected intersection data) then the unshifted intersection distances are output for use in other parts of the ray tracing system, e.g. by shader programs executed by the processing logic 110 .
- step S 1004 the intersection determination logic 402 (e.g. the distance calculation logic 406 ) determines the intersection distance (t int,1 ) at which the ray intersects the first primitive.
- the intersection determination logic may also determine other intersection data relating to the intersection of the ray with the first primitive, such as barycentric coordinates indicating the position on the first primitive at which the intersection occurs, and the orientation of the first primitive.
- the intersection distance (t int,1 ) and other intersection data determined in step S 1004 for the intersection of the ray with the first primitive are passed from the intersection determination logic 402 to the intersection selection logic 404 .
- step S 1006 the intersection determination logic 402 determines whether the ray intersects a second primitive, e.g. using a non-redundantly watertight intersection testing scheme, such as a winding/orientation independent scheme or a winding/orientation dependent scheme described above. If it is determined in step S 1006 that the ray does intersect the second primitive then the method passes from step S 1006 to step S 1008 , whereas if it is determined in step S 1006 that the ray does not intersect the second primitive then the method passes from step S 1006 to step S 1010 .
- Step S 1006 may be performed immediately after step S 1004 , or some other processing may be performed in between steps S 1004 and S 1006 .
- step S 1008 the intersection determination logic 402 (e.g. the distance calculation logic 406 ) determines the intersection distance (t int,2 ) at which the ray intersects the second primitive.
- the intersection determination logic may also determine other intersection data relating to the intersection of the ray with the second primitive, such as barycentric coordinates indicating the position on the second primitive at which the intersection occurs, and the orientation of the second primitive.
- the intersection distance (t int,2 ) and other intersection data determined in step S 1008 for the intersection of the ray with the second primitive are passed from the intersection determination logic 402 to the intersection selection logic 404 .
- step S 1008 the method proceeds to step S 1012 .
- step S 1010 which is performed when the intersection determination logic 402 determines that the ray does not intersect a primitive, then the intersection testing module continues with other processing, e.g. by testing the ray for intersection with another primitive (e.g. by looping back to step S 1002 or step S 1006 in respect of the next primitive) or by testing a different ray for intersection with a primitive.
- step S 1012 the intersection selection logic 404 determines whether a difference between the intersection distance (t int,1 ) at which the ray intersects the first primitive and the intersection distance (t int,2 ) at which the ray intersects the second primitive is less than or equal to a threshold, ⁇ . In other words the intersection selection logic 404 determines whether
- step S 1014 the intersection selection logic 404 determines whether the orientations of the first and second primitives are the same. If it is determined in step S 1014 that the orientations of the first and second primitives are different then the method passes from step S 1014 to step S 1016 . If it is determined in step S 1014 that the orientations of the first and second primitives are the same then the method passes from step S 1014 to step S 1018 .
- step S 1016 the intersection selection logic 404 selects the intersection of the ray with one of the first and second primitives on the basis that said one of the first and second primitives has a particular orientation.
- the “particular orientation” may be the orientation (either clockwise or anticlockwise) which corresponds to a front-facing primitive.
- the particular orientation it would be possible for the particular orientation to be the orientation which corresponds to a back-facing primitive.
- the user may set an indication (e.g.
- a flag to indicate whether front-facing corresponds to clockwise or anticlockwise (and accordingly whether back-facing corresponds to anticlockwise or clockwise).
- the correspondence between front/back facing primitives and clockwise/anticlockwise orientations may be predetermined without the user having to set an indication (e.g. a flag).
- the “particular orientation” usually corresponds to the orientation of the primitives observed by the rays being tested against the primitive.
- the “front-facing orientation” flag may be set to the orientation of primitives observed by the rays being tested against the primitive. By this first sense, the “particular orientation” is usually equal to the “front-facing orientation”.
- the “front-facing orientation” may be set to the orientation of primitives observed by rays originating in the exterior of the surface (when this is well defined), regardless of the actual rays being tested against the primitive.
- the “particular orientation” is usually set to the “front-facing orientation” for rays originating in the exterior of the surface, whereas the “particular orientation” is usually set to the “back-facing orientation” for rays originating in the interior of the surface.
- the selected intersection data i.e. the intersection data for the selected intersection
- the method passes to step S 1024 .
- step S 1018 The method will perform step S 1018 if it is determined that
- the intersection selection logic 404 selects the intersection of the ray with one of the first and second primitives using a deterministic fallback tie-break rule. For example, the intersection selection logic 404 may select the intersection of the ray with one of the first and second primitives based on unique primitive IDs which are associated with the first and second primitives.
- Each of the primitives that is processed by the intersection testing module 108 may have a unique primitive ID, or alternatively a primitive ID can be derived from the order the primitives are submitted to the system (which may not be the same order the primitives are tested against the ray, due to the acceleration structure).
- the primitive IDs are used as a secondary tie-break rule which is used as a fall-back in the situation in which the intersections cannot be distinguished by the non-redundantly watertight intersection testing or by selecting an intersection based on the orientations of the intersected primitives.
- This secondary tie-break rule is also deterministic, i.e. it does not depend on the process order of the primitives.
- a different fallback tie-breaking technique may be used in step S 1020 . As described above in relation to step S 518 and S 824 , any total strict order on the primitives will suffice. If the tie-breaking rule encodes a total strict ordering of the primitives then the primitive selection is deterministic.
- the selected intersection data i.e. the intersection data for the selected intersection
- step S 1022 The method will perform step S 1022 if it is determined that
- the intersection selection logic 404 selects the intersection of the ray with the one of the first and second primitives which has the smaller intersection distance.
- step S 1022 the intersection selection logic 404 selects the intersection with the first primitive, whereas if t int,2 ⁇ t int,1 then in step S 1022 the intersection selection logic 404 selects the intersection with the second primitive.
- the selected intersection data i.e. the intersection data for the selected intersection
- step S 1024 the method passes to step S 1024 .
- step S 1024 the selected intersection is used in the ray tracing system for rendering an image of the 3D scene.
- step S 1024 may include determining whether there are more primitives to be tested for intersection with the ray, and if there are then the method can loop back to step S 1006 which can then be performed in respect of the next primitive (wherein the primitive involved in the selected intersection for the ray is then treated as the “first primitive” and the next primitive is treated as the “second primitive”). In this way, the data for the selected intersection for the ray can be compared with subsequent intersections for the ray by the intersection testing module 108 to determine which is the closest intersection for the ray.
- step S 1024 determines that there are no more primitives to be tested for intersection with the ray then data for the closest intersection for the ray can be passed to the processing logic 110 , which can execute a shader program to determine how to process the intersection.
- the final output of processing all of the rays in the ray tracing system may be a rendered image, which can be used in any suitable way, e.g. it can be displayed on a display, stored in a memory, or transmitted to another device, just to give some examples.
- the orientation of the first primitive as a whole is different from the orientation of the second primitive as a whole, then the intersection of the ray with the one of the first and second primitives which has a particular orientation, as a whole, is selected.
- the orientation of the primitive is a view-dependent property depending on both the primitive and the ray.
- the primitive orientations of the first and second primitives to be different, each primitive being intersected by a same ray that is travelling in a same direction when it intersects each primitive, one of the two primitives has a clockwise orientation and the other of the two primitives has an anticlockwise orientation.
- the first primitive may have a clockwise orientation and the second primitive may have an anticlockwise orientation.
- the winding of the first primitive may be inconsistent with the winding of the second primitive.
- the first primitive may be a front facing primitive and the second primitive may be a back facing primitive.
- the comparison condition may be a ‘less than’ condition, such that if the difference between an intersection distance at which a ray intersects a first primitive and an intersection distance at which the ray intersects a second primitive is less than a threshold, and if the orientations of the first and second primitives are different, then the intersection of the ray with the one of the first and second primitives which has a particular orientation is selected.
- the comparison condition may be a ‘less than or equal to’ condition, such that if the difference between an intersection distance at which a ray intersects a first primitive and an intersection distance at which the ray intersects a second primitive is less than or equal to a threshold, and if the orientations of the first and second primitives are different, then the intersection of the ray with the one of the first and second primitives which has a particular orientation is selected.
- This concept is used in all three examples to resolve double intersections and to reduce the effects of Z-fighting.
- the threshold is zero and the threshold comparison is implemented as a “less than or equal” comparison
- the second and third examples described with reference to FIGS.
- the threshold is non-zero (e.g., strictly positive).
- the threshold comparison is implemented as either a “less than or equal” or a “less than” comparison, depending on the first or second version of the method used as described above.
- the “particular orientation” may be the orientation which corresponds to the orientation of a front-facing primitive.
- a primitive which has said particular orientation is a front-facing primitive
- a primitive which has an orientation that is different to said particular orientation is a back-facing primitive.
- a fallback tie-breaking rule is used, e.g. an intersection of the ray with one of the first and second primitives is selected based on unique primitive IDs which are associated with the first and second primitives. That is, if the primitive orientations of the first and second primitives are the same, then the primitive orientations of the first and second primitives are not used to select an intersection of the ray with one of the first and second primitives.
- a fallback tie-breaking rule is used. This means that, for each of the three examples described above the method comprises determining whether the first and second primitives have the same primitive orientation, and (i) if the primitive orientations of the first and second primitives are different, selecting the intersection of the ray with the one of the first and second primitives which has a particular primitive orientation, and (ii) if the primitive orientations of the first and second primitives are the same, not selecting the intersection of the ray with the one of the first and second primitives which has a particular primitive orientation and instead performing a fallback tie-breaking rule.
- the method involves selecting the intersection of the ray with one of the first and second primitives using a deterministic fallback tie-break rule instead of selecting the intersection of the ray with the one of the first and second primitives which has a particular primitive orientation.
- the method involves selecting the intersection of the ray with one of the first and second primitives without applying the deterministic fallback tie-break rule, and instead selecting the intersection of the ray with the one of the first and second primitives which has a particular primitive orientation.
- intersection distance at which the ray intersects the first primitive and the intersection distance at which the ray intersects the second primitive is equal to the threshold, then either: (i) the intersection of the ray with the one of the first and second primitives with a particular orientation, (ii) the intersection of the ray with the one of the first and second primitives chosen with respect to the tie-breaking rule (e.g., based on unique primitive IDs), or (iii) the intersection with smaller intersection distance, is selected.
- tie-breaking rule e.g., based on unique primitive IDs
- the threshold is zero
- the threshold ⁇
- the tie-breaking rule is applied otherwise the primitive with the smaller intersection distance is selected.
- the primitive with a particular orientation is selected unless both orientations are the same in which case the smaller intersection distance is selected.
- the primitive with the smaller intersection distance is selected.
- the first method (shown in FIG. 5 ) and the third method (shown in FIG. 10 ) involve: (a) determining that the difference between the intersection distance at which the ray intersects the first primitive and the intersection distance at which the ray intersects the second primitive satisfies a comparison condition with respect to a threshold (e.g. in step S 512 or S 1012 ), (b) determining that the orientations of the first and second primitives are different (e.g.
- step S 514 or S 1014 and (c) selecting the intersection of the ray with the one of the first and second primitives which has a particular orientation (in step S 516 or S 1016 ) in response to determining that: (i) the difference between the intersection distance at which a ray intersects a first primitive and the intersection distance at which the ray intersects a second primitive satisfies the comparison condition with respect to the threshold, and (ii) the orientations of the first and second primitives are different.
- the threshold is zero
- the threshold may be non-zero (e.g., strictly positive).
- FIG. 11 shows a computer system in which the ray tracing systems described herein may be implemented.
- the computer system comprises a CPU 1102 , a GPU 1104 , a memory 1106 and other devices 1114 , such as a display 1116 , speakers 1118 and a camera 1122 .
- a ray tracing unit 1110 (corresponding to ray tracing unit 102 ) is implemented on the GPU 1104 , as well as a Neural Network Accelerator (NNA) 1111 .
- NNA Neural Network Accelerator
- the ray tracing unit 1110 may be implemented on the CPU 1102 or within the NNA 1111 or as a separate processing unit in the computer system.
- the components of the computer system can communicate with each other via a communications bus 1120 .
- a store 1112 (corresponding to memory 104 ) is implemented as part of the memory 1106 .
- the ray tracing system of FIG. 1 is shown as comprising a number of functional blocks. This is schematic only and is not intended to define a strict division between different logic elements of such entities. Each functional block may be provided in any suitable manner. It is to be understood that intermediate values described herein as being formed by a ray tracing system need not be physically generated by the ray tracing system at any point and may merely represent logical values which conveniently describe the processing performed by the ray tracing system between its input and output.
- the ray tracing units, and specifically the intersection testing modules described herein may be embodied in hardware on an integrated circuit.
- the intersection testing modules described herein may be configured to perform any of the methods described herein.
- any of the functions, methods, techniques or components described above can be implemented in software, firmware, hardware (e.g., fixed logic circuitry), or any combination thereof.
- the terms “module,” “functionality,” “component”, “element”, “unit”, “block” and “logic” may be used herein to generally represent software, firmware, hardware, or any combination thereof.
- the module, functionality, component, element, unit, block or logic represents program code that performs the specified tasks when executed on a processor.
- a computer-readable storage medium examples include a random-access memory (RAM), read-only memory (ROM), an optical disc, flash memory, hard disk memory, and other memory devices that may use magnetic, optical, and other techniques to store instructions or other data and that can be accessed by a machine.
- RAM random-access memory
- ROM read-only memory
- optical disc optical disc
- flash memory hard disk memory
- hard disk memory and other memory devices that may use magnetic, optical, and other techniques to store instructions or other data and that can be accessed by a machine.
- Computer program code and computer readable instructions refer to any kind of executable code for processors, including code expressed in a machine language, an interpreted language or a scripting language.
- Executable code includes binary code, machine code, bytecode, code defining an integrated circuit (such as a hardware description language or netlist), and code expressed in a programming language code such as C, Java or OpenCL.
- Executable code may be, for example, any kind of software, firmware, script, module or library which, when suitably executed, processed, interpreted, compiled, executed at a virtual machine or other software environment, cause a processor of the computer system at which the executable code is supported to perform the tasks specified by the code.
- a processor, computer, or computer system may be any kind of device, machine or dedicated circuit, or collection or portion thereof, with processing capability such that it can execute instructions.
- a processor may be or comprise any kind of general purpose or dedicated processor, such as a CPU, GPU, NNA, System-on-chip, state machine, media processor, an application-specific integrated circuit (ASIC), a programmable logic array, a field-programmable gate array (FPGA), or the like.
- a computer or computer system may comprise one or more processors.
- an intersection testing module as described herein. Furthermore, there may be provided an integrated circuit definition dataset that, when processed in an integrated circuit manufacturing system, causes the method of manufacturing an intersection testing module to be performed.
- An integrated circuit definition dataset may be in the form of computer code, for example as a netlist, code for configuring a programmable chip, as a hardware description language defining hardware suitable for manufacture in an integrated circuit at any level, including as register transfer level (RTL) code, as high-level circuit representations such as Verilog or VHDL, and as low-level circuit representations such as OASIS® and GDSII.
- RTL register transfer level
- Higher level representations which logically define hardware suitable for manufacture in an integrated circuit (such as RTL) may be processed at a computer system configured for generating a manufacturing definition of an integrated circuit in the context of a software environment comprising definitions of circuit elements and rules for combining those elements in order to generate the manufacturing definition of an integrated circuit so defined by the representation.
- one or more intermediate user steps may be required in order for a computer system configured for generating a manufacturing definition of an integrated circuit to execute code defining an integrated circuit so as to generate the manufacturing definition of that integrated circuit.
- FIG. 12 shows an example of an integrated circuit (IC) manufacturing system 1202 which is configured to manufacture an intersection testing module as described in any of the examples herein.
- the IC manufacturing system 1202 comprises a layout processing system 1204 and an integrated circuit generation system 1206 .
- the IC manufacturing system 1202 is configured to receive an IC definition dataset (e.g. defining an intersection testing module as described in any of the examples herein), process the IC definition dataset, and generate an IC according to the IC definition dataset (e.g. which embodies an intersection testing module as described in any of the examples herein).
- the processing of the IC definition dataset configures the IC manufacturing system 1202 to manufacture an integrated circuit embodying an intersection testing module as described in any of the examples herein.
- the layout processing system 1204 is configured to receive and process the IC definition dataset to determine a circuit layout.
- Methods of determining a circuit layout from an IC definition dataset are known in the art, and for example may involve synthesising RTL code to determine a gate level representation of a circuit to be generated, e.g. in terms of logical components (e.g. NAND, NOR, AND, OR, MUX and FLIP-FLOP components).
- a circuit layout can be determined from the gate level representation of the circuit by determining positional information for the logical components. This may be done automatically or with user involvement in order to optimise the circuit layout.
- the layout processing system 1204 When the layout processing system 1204 has determined the circuit layout it may output a circuit layout definition to the IC generation system 1206 .
- a circuit layout definition may be, for example, a circuit layout description.
- the different processes performed by the IC manufacturing system 1202 may be implemented all in one location, e.g. by one party.
- the IC manufacturing system 1202 may be a distributed system such that some of the processes may be performed at different locations, and may be performed by different parties.
- some of the stages of: (i) synthesising RTL code representing the IC definition dataset to form a gate level representation of a circuit to be generated, (ii) generating a circuit layout based on the gate level representation, (iii) forming a mask in accordance with the circuit layout, and (iv) fabricating an integrated circuit using the mask may be performed in different locations and/or by different parties.
- processing of the integrated circuit definition dataset at an integrated circuit manufacturing system may configure the system to manufacture an intersection testing module without the IC definition dataset being processed so as to determine a circuit layout.
- an integrated circuit definition dataset may define the configuration of a reconfigurable processor, such as an FPGA, and the processing of that dataset may configure an IC manufacturing system to generate a reconfigurable processor having that defined configuration (e.g. by loading configuration data to the FPGA).
- an integrated circuit manufacturing definition dataset when processed in an integrated circuit manufacturing system, may cause an integrated circuit manufacturing system to generate a device as described herein.
- the configuration of an integrated circuit manufacturing system in the manner described above with respect to FIG. 12 by an integrated circuit manufacturing definition dataset may cause a device as described herein to be manufactured.
- an integrated circuit definition dataset could include software which runs on hardware defined at the dataset or in combination with hardware defined at the dataset.
- the IC generation system may further be configured by an integrated circuit definition dataset to, on manufacturing an integrated circuit, load firmware onto that integrated circuit in accordance with program code defined at the integrated circuit definition dataset or otherwise provide program code with the integrated circuit for use with the integrated circuit.
- performance improvements may include one or more of increased computational performance, reduced latency, increased throughput, and/or reduced power consumption.
- performance improvements can be traded-off against the physical implementation, thereby improving the method of manufacture. For example, a performance improvement may be traded against layout area, thereby matching the performance of a known implementation but using less silicon. This may be done, for example, by reusing functional blocks in a serialised fashion or sharing functional blocks between elements of the devices, apparatus, modules and/or systems.
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
Description
-
- determining that a difference between an intersection distance at which a ray intersects a first primitive and an intersection distance at which the ray intersects a second primitive satisfies a comparison condition with respect to a threshold;
- determining that the orientations of the first and second primitives are different; and
- selecting the intersection of the ray with one of the first and second primitives on the basis that said one of the first and second primitives has a particular orientation.
-
- intersection selection logic configured to:
- determine that a difference between an intersection distance at which a ray intersects a first primitive and an intersection distance at which the ray intersects a second primitive satisfies a comparison condition with respect to a threshold;
- determine that the orientations of the first and second primitives are different; and
- select the intersection of the ray with one of the first and second primitives on the basis that said one of the first and second primitives has a particular orientation.
- intersection selection logic configured to:
-
- if a difference between an intersection distance at which a ray intersects a first primitive and an intersection distance at which the ray intersects a second primitive satisfies a comparison condition with respect to a threshold, and if the orientations of the first and second primitives are different, selecting the intersection of the ray with the one of the first and second primitives which has a particular orientation.
-
- determining that an intersection distance at which a ray intersects a first primitive is equal to an intersection distance at which the ray intersects a second primitive;
- determining that the orientations of the first and second primitives are different; and
- selecting the intersection of the ray with one of the first and second primitives on the basis that said one of the first and second primitives has a particular orientation.
-
- intersection selection logic configured to, if a difference between an intersection distance at which a ray intersects a first primitive and an intersection distance at which the ray intersects a second primitive satisfies a comparison condition with respect to a threshold, and if the orientations of the first and second primitives are different, select the intersection of the ray with the one of the first and second primitives which has a particular orientation.
-
- intersection selection logic configured to:
- determine that an intersection distance at which a ray intersects a first primitive is equal to an intersection distance at which the ray intersects a second primitive;
- determine that the orientations of the first and second primitives are different; and
- select the intersection of the ray with one of the first and second primitives on the basis that said one of the first and second primitives has a particular orientation.
- intersection selection logic configured to:
-
- determining a first offset intersection distance which is equal to a sum of an intersection distance at which a ray intersects a first primitive and a first offset which is dependent upon the orientation of the first primitive;
- determining a second offset intersection distance which is equal to a sum of an intersection distance at which the ray intersects a second primitive and a second offset which is dependent upon the orientation of the second primitive; and
- comparing the determined first and second offset intersection distances to select the intersection of the ray with one of the first and second primitives.
-
- intersection selection logic configured to:
- determine a first offset intersection distance which is equal to a sum of an intersection distance at which a ray intersects a first primitive and a first offset which is dependent upon the orientation of the first primitive;
- determine a second offset intersection distance which is equal to a sum of an intersection distance at which the ray intersects a second primitive and a second offset which is dependent upon the orientation of the second primitive; and
- compare the determined first and second offset intersection distances to select the intersection of the ray with one of the first and second primitives.
- intersection selection logic configured to:
-
- which is correct up to sign. This is just one example of how to calculate the intersection distance for an intersection, and other methods may be used in other examples.
Claims (15)
Applications Claiming Priority (9)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| GB2202657.9A GB2616051B (en) | 2022-02-25 | 2022-02-25 | Intersection testing in a ray tracing system |
| GB2202658 | 2022-02-25 | ||
| GB2202658.7A GB2616052B (en) | 2022-02-25 | 2022-02-25 | Intersection testing in a ray tracing system |
| GB2202659.5 | 2022-02-25 | ||
| GB2202657.9 | 2022-02-25 | ||
| GB2202658.7 | 2022-02-25 | ||
| GB2202657 | 2022-02-25 | ||
| GB2202659.5A GB2616053B (en) | 2022-02-25 | 2022-02-25 | Intersection testing in a ray tracing system |
| GB2202659 | 2022-02-25 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| US20230334755A1 US20230334755A1 (en) | 2023-10-19 |
| US12423904B2 true US12423904B2 (en) | 2025-09-23 |
Family
ID=85384338
Family Applications (4)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| US18/114,376 Active 2043-05-11 US12423904B2 (en) | 2022-02-25 | 2023-02-27 | Intersection testing in a ray tracing system |
| US18/114,483 Active 2043-06-04 US12394136B2 (en) | 2022-02-25 | 2023-02-27 | Intersection testing in a ray tracing system using comparison of intersection distance differences between primitive intersections |
| US18/114,402 Active 2043-12-25 US12469205B2 (en) | 2022-02-25 | 2023-02-27 | Intersection testing in a ray tracing system using offset intersection distances |
| US19/275,690 Pending US20250349065A1 (en) | 2022-02-25 | 2025-07-21 | Intersection Testing in a Ray Tracing System Using Comparison of Intersection Distance Differences Between Primitive Intersections |
Family Applications After (3)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| US18/114,483 Active 2043-06-04 US12394136B2 (en) | 2022-02-25 | 2023-02-27 | Intersection testing in a ray tracing system using comparison of intersection distance differences between primitive intersections |
| US18/114,402 Active 2043-12-25 US12469205B2 (en) | 2022-02-25 | 2023-02-27 | Intersection testing in a ray tracing system using offset intersection distances |
| US19/275,690 Pending US20250349065A1 (en) | 2022-02-25 | 2025-07-21 | Intersection Testing in a Ray Tracing System Using Comparison of Intersection Distance Differences Between Primitive Intersections |
Country Status (2)
| Country | Link |
|---|---|
| US (4) | US12423904B2 (en) |
| EP (3) | EP4235586A1 (en) |
Families Citing this family (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| GB2599183B (en) * | 2021-03-23 | 2022-10-12 | Imagination Tech Ltd | Intersection testing in a ray tracing system |
| EP4235586A1 (en) | 2022-02-25 | 2023-08-30 | Imagination Technologies Limited | Intersection testing in a ray tracing system |
Citations (16)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20080259075A1 (en) * | 2007-04-19 | 2008-10-23 | David Keith Fowler | Dynamically Configuring and Selecting Multiple Ray Tracing Intersection Methods |
| US20100231589A1 (en) * | 2008-09-09 | 2010-09-16 | Caustic Graphics, Inc. | Ray tracing using ray-specific clipping |
| US20110267347A1 (en) | 2010-04-29 | 2011-11-03 | Caustic Graphics, Inc. | Systems and methods for primitive intersection in ray tracing |
| US8059122B1 (en) | 2008-03-25 | 2011-11-15 | The United States Of America As Represented By The Secretary Of The Air Force | Cartesian mesh generation technique |
| US20130113801A1 (en) * | 2011-11-08 | 2013-05-09 | Caustic Graphics, Inc. | Profiling Ray Tracing Renderers |
| US20160260245A1 (en) * | 2015-03-03 | 2016-09-08 | Imagination Technologies Limited | Systems and methods for soft shadowing in 3-d rendering |
| US20180089885A1 (en) | 2016-09-29 | 2018-03-29 | Ingo Wald | Method and apparatus for the proper ordering and enumeration of multiple successive ray-surface intersections within a ray tracing architecture |
| US20190019325A1 (en) * | 2017-07-13 | 2019-01-17 | Imagination Technologies Limited | Hybrid Hierarchy of Bounding and Grid Structures for Ray Tracing |
| US20200051314A1 (en) | 2018-08-10 | 2020-02-13 | Nvidia Corporation | Watertight ray triangle intersection |
| US20200193683A1 (en) | 2018-12-13 | 2020-06-18 | Advanced Micro Devices, Inc. | Robust ray-triangle intersection |
| US20210390759A1 (en) * | 2020-06-15 | 2021-12-16 | Nvidia Corporation | Hardware acceleration for ray tracing primitives that share vertices |
| US20210398340A1 (en) * | 2020-06-18 | 2021-12-23 | Nvidia Corporation | Early release of resources in ray tracing hardware |
| US20220351458A1 (en) | 2021-03-23 | 2022-11-03 | Imagination Technologies Limited | Intersection Testing in a Ray Tracing System Using a Ray Coordinate System |
| US20230334757A1 (en) | 2022-02-25 | 2023-10-19 | Imagination Technologies Limited | Intersection testing in a ray tracing system using comparison of intersection distance differences between primitive intersections |
| US20230359496A1 (en) | 2022-01-31 | 2023-11-09 | Intel Corporation | Stack access throttling for synchronous ray tracing |
| US20240362851A1 (en) | 2020-06-10 | 2024-10-31 | Nvidia Corporation | Hardware-based techniques applicable for ray tracing for efficiently representing and processing an arbitrary bounding volume |
Family Cites Families (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US10861215B2 (en) * | 2018-04-30 | 2020-12-08 | Qualcomm Incorporated | Asynchronous time and space warp with determination of region of interest |
| GB2607350B (en) * | 2021-06-04 | 2023-12-13 | Advanced Risc Mach Ltd | Graphics processing |
| US11887242B2 (en) * | 2021-06-30 | 2024-01-30 | Arm Limited | Circuitry and method |
| DE112022003721T5 (en) * | 2021-09-16 | 2024-05-16 | Nvidia Corporation | MICRO-NETS, A STRUCTURED GEOMETRY FOR COMPUTER GRAPHICS |
-
2023
- 2023-02-24 EP EP23275031.5A patent/EP4235586A1/en active Pending
- 2023-02-24 EP EP23275032.3A patent/EP4235587A1/en active Pending
- 2023-02-24 EP EP23275030.7A patent/EP4235585A1/en active Pending
- 2023-02-27 US US18/114,376 patent/US12423904B2/en active Active
- 2023-02-27 US US18/114,483 patent/US12394136B2/en active Active
- 2023-02-27 US US18/114,402 patent/US12469205B2/en active Active
-
2025
- 2025-07-21 US US19/275,690 patent/US20250349065A1/en active Pending
Patent Citations (18)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20080259075A1 (en) * | 2007-04-19 | 2008-10-23 | David Keith Fowler | Dynamically Configuring and Selecting Multiple Ray Tracing Intersection Methods |
| US8059122B1 (en) | 2008-03-25 | 2011-11-15 | The United States Of America As Represented By The Secretary Of The Air Force | Cartesian mesh generation technique |
| US20100231589A1 (en) * | 2008-09-09 | 2010-09-16 | Caustic Graphics, Inc. | Ray tracing using ray-specific clipping |
| US20110267347A1 (en) | 2010-04-29 | 2011-11-03 | Caustic Graphics, Inc. | Systems and methods for primitive intersection in ray tracing |
| US20130113801A1 (en) * | 2011-11-08 | 2013-05-09 | Caustic Graphics, Inc. | Profiling Ray Tracing Renderers |
| US20160260245A1 (en) * | 2015-03-03 | 2016-09-08 | Imagination Technologies Limited | Systems and methods for soft shadowing in 3-d rendering |
| US20180089885A1 (en) | 2016-09-29 | 2018-03-29 | Ingo Wald | Method and apparatus for the proper ordering and enumeration of multiple successive ray-surface intersections within a ray tracing architecture |
| US20190019325A1 (en) * | 2017-07-13 | 2019-01-17 | Imagination Technologies Limited | Hybrid Hierarchy of Bounding and Grid Structures for Ray Tracing |
| US20200051314A1 (en) | 2018-08-10 | 2020-02-13 | Nvidia Corporation | Watertight ray triangle intersection |
| US20230298258A1 (en) | 2018-08-10 | 2023-09-21 | Nvidia Corporation | Watertight tay triangle intersection |
| US12067669B2 (en) | 2018-08-10 | 2024-08-20 | Nvidia Corporation | Watertight ray triangle intersection |
| US20200193683A1 (en) | 2018-12-13 | 2020-06-18 | Advanced Micro Devices, Inc. | Robust ray-triangle intersection |
| US20240362851A1 (en) | 2020-06-10 | 2024-10-31 | Nvidia Corporation | Hardware-based techniques applicable for ray tracing for efficiently representing and processing an arbitrary bounding volume |
| US20210390759A1 (en) * | 2020-06-15 | 2021-12-16 | Nvidia Corporation | Hardware acceleration for ray tracing primitives that share vertices |
| US20210398340A1 (en) * | 2020-06-18 | 2021-12-23 | Nvidia Corporation | Early release of resources in ray tracing hardware |
| US20220351458A1 (en) | 2021-03-23 | 2022-11-03 | Imagination Technologies Limited | Intersection Testing in a Ray Tracing System Using a Ray Coordinate System |
| US20230359496A1 (en) | 2022-01-31 | 2023-11-09 | Intel Corporation | Stack access throttling for synchronous ray tracing |
| US20230334757A1 (en) | 2022-02-25 | 2023-10-19 | Imagination Technologies Limited | Intersection testing in a ray tracing system using comparison of intersection distance differences between primitive intersections |
Non-Patent Citations (5)
| Title |
|---|
| Chen, X. et al.: "Polygon offsetting by computing winding numbers", In International Design Engineering Technical Conferences and Computers and Information in Engineering Conference Jan. 1, 2005 (vol. 4739, pp. 565-575). |
| Ern, A. et al.: "Finite elements I: Approximation and interpolation", Springer Nature; Feb. 18, 2021. |
| Rainer Agelek, "On Orienting Edges of Unstructured Two- and Three-Dimensional Meshes", Mar. 2018, ACM Transactions on Mathematical Software 44, 1, Article 5, pp. 5:1-5:22 (Year: 2018). * |
| Sjoholm; "Best Practices: Using NVIDIA RTX Ray Tracing (Updated)"; URL:https://developer.nvidia.com/blog/best-practices-using-nvidia-rtx-ray-tracing/; Aug. 10, 2020; pp. 1-10. |
| Woop et al; "Watertight Ray/Triangle Intersection"; Journal of Computer Graphics Techniques; Jun. 28, 2013; Retrieved from the Internet: URL:http;//jcgt.org/published/0002/01/05/paper.pdf; vol. 2; No. 1; 2013; pp. 65-82. |
Also Published As
| Publication number | Publication date |
|---|---|
| US20230334757A1 (en) | 2023-10-19 |
| US12469205B2 (en) | 2025-11-11 |
| US20250349065A1 (en) | 2025-11-13 |
| US12394136B2 (en) | 2025-08-19 |
| EP4235586A1 (en) | 2023-08-30 |
| EP4235585A1 (en) | 2023-08-30 |
| EP4235587A1 (en) | 2023-08-30 |
| US20230334755A1 (en) | 2023-10-19 |
| US20230334756A1 (en) | 2023-10-19 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US20250349065A1 (en) | Intersection Testing in a Ray Tracing System Using Comparison of Intersection Distance Differences Between Primitive Intersections | |
| EP4064199B1 (en) | Intersection testing in a ray tracing system | |
| EP4064201B1 (en) | Intersection testing in a ray tracing system | |
| GB2537972A (en) | Systems and methods for soft shadowing in 3-D rendering | |
| US11682161B2 (en) | Intersection testing in a ray tracing system using a ray coordinate system | |
| US20250173948A1 (en) | Intersection Testing in a Ray Tracing System Using Axis-Aligned Box Coordinate Components | |
| EP4064034B1 (en) | Performing operations using floating point values | |
| GB2616051A (en) | Intersection testing in a ray tracing system | |
| GB2616053A (en) | Intersection testing in a ray tracing system | |
| EP4064033B1 (en) | Performing operations using floating point values | |
| US11741659B2 (en) | Intersection testing in a ray tracing system using three-dimensional axis-aligned box | |
| GB2616052A (en) | Intersection testing in a ray tracing system | |
| GB2618213A (en) | Intersection testing in a ray tracing system | |
| GB2607521A (en) | Intersection testing in a ray tracing system |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| FEPP | Fee payment procedure |
Free format text: ENTITY STATUS SET TO UNDISCOUNTED (ORIGINAL EVENT CODE: BIG.); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: DOCKETED NEW CASE - READY FOR EXAMINATION |
|
| AS | Assignment |
Owner name: FORTRESS INVESTMENT GROUP (UK) LTD, NEW YORK Free format text: SECURITY INTEREST;ASSIGNOR:IMAGINATION TECHNOLOGIES LIMITED;REEL/FRAME:068221/0001 Effective date: 20240730 |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: NON FINAL ACTION MAILED |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: RESPONSE TO NON-FINAL OFFICE ACTION ENTERED AND FORWARDED TO EXAMINER |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: NOTICE OF ALLOWANCE MAILED -- APPLICATION RECEIVED IN OFFICE OF PUBLICATIONS |
|
| AS | Assignment |
Owner name: IMAGINATION TECHNOLOGIES LIMITED, UNITED KINGDOM Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:SMITH-LACEY, PETER;FENNEY, SIMON;CLARK, GREGORY;AND OTHERS;SIGNING DATES FROM 20250611 TO 20250704;REEL/FRAME:071663/0822 |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: PUBLICATIONS -- ISSUE FEE PAYMENT RECEIVED |
|
| STPP | Information on status: patent application and granting procedure in general |
Free format text: PUBLICATIONS -- ISSUE FEE PAYMENT VERIFIED |
|
| STCF | Information on status: patent grant |
Free format text: PATENTED CASE |