# US 10,504,280 B2 · Accelerated occlusion computation

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,504,280 B2
- Document ID: US10504280B2
- Status: Granted
- Kind: B2
- Application number: 15/867,401
- Filed: 2018-01-10
- Published: 2019-07-11
- Granted: 2019-12-10
- Earliest claimed: 2018-01-10
- Assignees: QUALCOMM Incorporated
- Applicants: QUALCOMM Incorporated
- Inventors: Dieter Schmalstieg; Markus Steinberger; Philip Voglreiter
- Web page: https://patentgrep.com/patent/US10504280B2

## CPC

- G06T 15/405: {using Z-buffer}
- G06T 15/005: {General purpose rendering architectures}
- G06T 15/20: Perspective computation
- G06T 15/30: Clipping
- G06T 15/40: Hidden part removal
- G06T: IMAGE DATA PROCESSING OR GENERATION, IN GENERAL

## Abstract

A system utilizing specified occlusion techniques to reduce the overall amount of occlusion computations required to generate an image in a changing viewpoint environment. Viewpoint location changes about a current viewpoint can result in a different image view with the potential exposure of previously occluded portions of a scene image that would now be now visible from that new viewpoint location. To reduce the amount of occlusion computations required to render an associated image in a changing viewpoint environment, techniques are described that reduce occlusion computations using, for example, one or more trim region rendering techniques. Some techniques include generating potential visible set (PVS) information based on a viewport including an original viewpoint location and an anticipated change in viewpoint location.

## Claims

### Claim 1

A method of accelerating occlusion computations, the method comprising:
determining a silhouette edge of an object based on viewpoint information,
generating a trim buffer based on viewport information, including the step of generating a trim region bounded by the silhouette edge,
generating a disoccluded scene buffer (DSB), including both the steps of (1) determining whether a triangle is within the trim region, and in response to determining that the triangle is within the trim region, (2) storing the triangle as potential visible set (PVS) image information,
generating a plurality of trim region quads having a quad depth less than a maximum threshold, and
sorting the plurality of trim region quads into a plurality of buckets based on quad depth.

### Claim 2 (depends on 1)

The method of claim 1, wherein the step of generating a trim buffer based on viewport information, further comprises:
rasterizing trim region depth into the trim buffer, and
storing fragments in a per-pixel linked list.

### Claim 3 (depends on 1)

The method of claim 1, wherein the step of generating a DSB further comprises:
rasterizing entire scenes of a plurality of triangles into a G-buffer.

### Claim 4 (depends on 1)

The method of claim 1, further comprising storing back-facing triangles inside the trim region as PVS image information.

### Claim 5 (depends on 1)

The method of claim 1, further comprising harvesting the DSB.

### Claim 6 (depends on 1)

The method of claim 1, wherein the trim region corresponds to the viewport and the viewport has a width corresponding to a small location adjustment to the viewpoint information.

### Claim 7 (depends on 1)

The method of claim 1, wherein a geometry shader performs the steps of determining a silhouette edge based on the viewpoint information and generating the trim region bounded by the silhouette edge.

### Claim 8 (depends on 1)

The method of claim 1, further comprising:
receiving the viewpoint information from a client device, and
sending the PVS image information to the client device.

### Claim 9 (depends on 1)

The method of claim 1, wherein the viewport information is based on the movement of the head of a user of a virtual reality system during rendering delay wherein the rendering delay includes, at least one of the following: transmission of the viewpoint information from the client to the server, and transmission of the PVS image information from the server to the client.

### Claim 10 (depends on 1)

The method of claim 1, further comprising:
wherein sorting the plurality of trim region quads into a plurality of buckets is further based on quad screen-space tile location.

### Claim 11 (depends on 10)

The method of claim 10, wherein the step of sorting the plurality of trim region quads into a plurality of buckets based on quad depth and quad screen space-tile location, further comprising:
sorting the trim region quads into the screen-space tiles locations,
sorting the trim quads by quad depth inside each screen-space tiles location, and
separating the trim region quads into the plurality of buckets, wherein each bucket in the plurality of buckets, contains a maximum number of trim region quads.

### Claim 12 (depends on 10)

The method of claim 10, further comprising the steps of:
generating a trim buffer, and
generating a disoccluded scene buffer (DSB).

### Claim 13 (depends on 10)

The method of claim 10, further comprising streaming out the trim region quads into GPU global memory.

### Claim 14 (depends on 10)

The method of claim 10, wherein the step of generating a trim buffer, further comprising: rasterizing the trim region quads into static per-bucket sorted lists.

### Claim 15 (depends on 10)

The method of claim 10, further comprising harvesting the DSB.

### Claim 16 (depends on 1)

The method of claim 1, further comprising:
performing, iteratively, for individual scene objects of a plurality of scene objects, the steps of:
generating trim region quads of the individual scene object,
sorting the trim region quads of the individual scene object into buckets,
updating a trim buffer with the trim region of the individual scene object, and
updating a DSB for the individual scene object.

### Claim 17 (depends on 16)

The method of claim 16, wherein the step of sorting the trim region quads of the individual scene object into buckets, further comprising:
sorting the trim region quads into screen-space tile locations,
sorting the trim quads by quad depth inside each screen-space tile locations, and
separating the trim region quads into the plurality of buckets, wherein each bucket in the plurality of buckets, contains a maximum number of trim region quads.

### Claim 18 (depends on 16)

The method of claim 16, wherein the step of updating a trim buffer with the trim region of the individual scene object, further comprising:
culling trim region fragments that are occluded in the DSB, and
inserting remaining trim region fragments into the trim buffer.

### Claim 19 (depends on 16)

The method of claim 16, wherein the step of updating a DSB for the individual scene object, further comprising:
culling object fragments that are contained in the trim buffer, and
inserting remaining object fragments into the DSB.

### Claim 20 (depends on 16)

The method of claim 16, further comprising:
harvesting a G-buffer, after performing, iteratively, for individual scene objects of a plurality of scene objects.

### Claim 21

An apparatus for accelerating occlusion computations, comprising:
a memory configured to store potential visible set (PVS) image information,
a processor configured to:
determine a silhouette edge of an object based on viewpoint information,
generate a trim buffer based on viewport information, including generate a trim region bounded by the silhouette edge,
generate a disoccluded scene buffer (DSB), including (1) determine whether a triangle is within the trim region, and in response to the determination that the triangle is within the trim region, (2) store the triangle as potential visible set (PVS) image information,
sort the trim region quads into screen-space tiles, and
separate the trim region quads into the plurality of buckets, wherein each bucket in the plurality of buckets, contains a maximum number of trim region quads.

### Claim 22 (depends on 21)

The apparatus of claim 21, wherein generate a trim buffer based on viewport information, further comprises:
rasterize trim region depth into a trim buffer, and
store fragments in a per-pixel linked list.

### Claim 23 (depends on 21)

The apparatus of claim 21, wherein generate a DSB further comprises:
rasterize entire scene of a plurality of triangles into a G-buffer.

### Claim 24 (depends on 21)

The apparatus of claim 21, further comprising store back-facing triangles inside the trim region as PVS image information.

### Claim 25 (depends on 21)

The apparatus of claim 21, further comprising harvest the DSB.

### Claim 26 (depends on 21)

The apparatus of claim 21, wherein the trim region corresponds the viewport and the viewport has a width corresponding to a small location adjustment to the viewpoint information.

### Claim 27 (depends on 21)

The apparatus of claim 21, further comprising:
a geometry shader, and
determine a silhouette edge based on viewpoint information and generate a trim region bounded by the silhouette edge is performed by the geometry shader.

### Claim 28 (depends on 21)

The apparatus of claim 21, further comprising:
receive the viewpoint information from a client device, and
send the PVS image information to the client device.

### Claim 29 (depends on 21)

The apparatus of claim 21, wherein the viewport information is based on the movement of the head of a user of a virtual reality system during rendering delay wherein the rendering delay includes, at least one of the following: transmission of the viewpoint information from the client to the server, and transmission of the PVS image information from the server to the client.

### Claim 30 (depends on 21)

The apparatus of claim 21, further comprising:
generate a plurality of trim region quads having a quad depth less than a maximum threshold, and
sort the plurality of trim region quads into a plurality of buckets based on quad depth and quad screen-space tile location.

### Claim 31 (depends on 30)

The apparatus of claim 30, wherein sort the plurality of trim region quads into a plurality of buckets based on quad depth and quad screen space-tile location, further comprising:
sort the trim quads by quad depth inside each screen-space tiles.

### Claim 32 (depends on 30)

The apparatus of claim 30, further comprising:
generate a trim buffer, and
generate a disoccluded scene buffer (DSB).

### Claim 33 (depends on 30)

The apparatus of claim 30, further comprising stream out the trim region quads into GPU global memory.

### Claim 34 (depends on 30)

The apparatus of claim 30, wherein the generate a trim buffer, further comprising:
rasterize the trim region quads into static per-bucket sorted lists.

### Claim 35 (depends on 30)

The apparatus of claim 30, further comprising, harvest the DSB.

### Claim 36 (depends on 21)

The apparatus of claim 21, further comprising:
perform, iteratively, for individual scene objects of a plurality of scene objects, the steps of:
generate trim region quads of the individual scene object,
sort the trim region quads of the individual scene object into buckets,
update a trim buffer with the trim region of the individual scene object, and
update a DSB for the individual scene object.

### Claim 37 (depends on 36)

The apparatus of claim 36, wherein sort the trim region quads of the individual scene object into buckets, further comprising:
sort the trim region quads into screen-space tiles,
sort the trim quads by quad depth inside each screen-space tiles, and
separate the trim region quads into the plurality of buckets, wherein each bucket in the plurality of buckets, contains a maximum number of trim region quads.

### Claim 38 (depends on 36)

The apparatus of claim 36, wherein update a trim buffer with the trim region of the individual scene object, further comprising:
cull trim region fragments that are occluded in the DSB, and
insert remaining trim region fragments into the trim buffer.

### Claim 39 (depends on 36)

The apparatus of claim 36, wherein update a DSB for the individual scene object, further comprising:
cull object fragments that are contained in the trim buffer, and
insert remaining object fragments into the DSB.

### Claim 40

An apparatus for accelerating occlusion computations, comprising:
a means for determining a silhouette edge of an object based on viewpoint information,
a means for generating a trim buffer based on viewport information, including a means for generating a trim region bounded by the silhouette edge,
a means for generating a disoccluded scene buffer (DSB), including both (1) a means for determining whether a triangle is within the trim region, and in response to determining that the triangle is within the trim region, (2) a means for storing the triangle as potential visible set (PVS) image information,
a means for generating a plurality of trim region quads having a quad depth less than a maximum threshold, and
a means for sorting the plurality of trim region quads into a plurality of buckets based on quad depth.

### Claim 41

A non-transitory computer-readable medium having stored thereon instructions that when executed by one or more processors cause the one or more processors to:
determine a silhouette edge of an object based on viewpoint information,
generate a trim buffer based on viewport information, including generate a trim region bounded by the silhouette edge,
generate a disoccluded scene buffer (DSB), including (1) determine whether a triangle is within the trim region, and in response to the determination that the triangle is within the trim region, (2) store the triangle as potential visible set (PVS) image information, and
sort the trim region quads into screen-space tiles, and
separate the trim region quads into the plurality of buckets, wherein each bucket in the plurality of buckets, contains a maximum number of trim region quads.
