Skip to content

Commit caf0774

Browse files
authored
Merge pull request #204261 from FlorianBorn71/PointCloudTelemetryChanges
Doc fixes to contribute for Polygons->Primitives renaming
2 parents 6cd2a73 + 0e53bb6 commit caf0774

File tree

4 files changed

+18
-16
lines changed

4 files changed

+18
-16
lines changed

articles/remote-rendering/how-tos/conversion/configure-model-conversion.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ This chapter documents the options for the model conversion.
1313

1414
## Settings file
1515

16-
If a file called `<modelName>.ConversionSettings.json` is found in the input container beside the input model `<modelName>.<ext>`, then it will be used to provide additional configuration for the model conversion process.
16+
If a file called `<modelName>.ConversionSettings.json` is found in the input container beside the input model `<modelName>.<ext>`, then it will be used to provide extra configuration for the model conversion process.
1717
For example, `box.ConversionSettings.json` would be used when converting `box.gltf`.
1818

1919
The contents of the file should satisfy the following json schema:
@@ -127,7 +127,7 @@ If a model is defined using gamma space, then these options should be set to tru
127127
* `gammaToLinearVertex` - Convert :::no-loc text="vertex"::: colors from gamma space to linear space
128128

129129
> [!NOTE]
130-
> For FBX files these settings are set to `true` by default. For all other file types, the default is `false`.
130+
> For FBX, E57, PLY and XYZ files these settings are set to `true` by default. For all other file types, the default is `false`.
131131
132132
### Scene parameters
133133

@@ -252,12 +252,13 @@ The properties that do have an effect on point cloud conversion are:
252252
* `scaling` - same meaning as for triangular meshes.
253253
* `recenterToOrigin` - same meaning as for triangular meshes.
254254
* `axis` - same meaning as for triangular meshes. Default values are `["+x", "+y", "+z"]`, however most point cloud data will be rotated compared to renderer's own coordinate system. To compensate, in most cases `["+x", "+z", "-y"]` fixes the rotation.
255-
* `gammaToLinearVertex` - similar to triangular meshes, this flag can be used when point colors are expressed in gamma space. In practice, when enabled, makes the point cloud appear darker.
255+
* `gammaToLinearVertex` - similar to triangular meshes, this flag indicates whether point colors should be converted from gamma space to linear space. Default value for point cloud formats (E57, PLY and XYZ) is true.
256+
256257
* `generateCollisionMesh` - similar to triangular meshes, this flag needs to be enabled to support [spatial queries](../../overview/features/spatial-queries.md). But unlike for triangular meshes, this flag doesn't incurs longer conversion times, larger output file sizes, or longer runtime loading times. So disabling this flag can't be considered an optimization.
257258

258259
## Memory optimizations
259260

260-
Memory consumption of loaded content may become a bottleneck on the rendering system. If the memory payload becomes too large, it may compromise rendering performance or cause the model to not load altogether. This paragraph discusses some important strategies to reduce the memory footprint.
261+
Memory consumption of loaded content may become a bottleneck on the rendering system. If the memory payload becomes too large, it may compromise rendering performance, or cause the model to not load altogether. This paragraph discusses some important strategies to reduce the memory footprint.
261262

262263
> [!NOTE]
263264
> The following optimizations apply to triangular meshes. There is no way to optimize the output of point clouds through conversion settings.

articles/remote-rendering/overview/features/debug-rendering.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ void EnableDebugRenderingEffects(RenderingSession session, bool highlight)
3030
// Enable frame counter text overlay on the server side rendering
3131
settings.RenderFrameCount = true;
3232

33-
// Enable polygon count text overlay on the server side rendering
34-
settings.RenderPolygonCount = true;
33+
// Enable triangle-/point count text overlay on the server side rendering
34+
settings.RenderPrimitiveCount = true;
3535

3636
// Enable wireframe rendering of object geometry on the server
3737
settings.RenderWireframe = true;
@@ -46,8 +46,8 @@ void EnableDebugRenderingEffects(ApiHandle<RenderingSession> session, bool highl
4646
// Enable frame counter text overlay on the server side rendering
4747
settings->SetRenderFrameCount(true);
4848

49-
// Enable polygon count text overlay on the server side rendering
50-
settings->SetRenderPolygonCount(true);
49+
// Enable triangle-/point count text overlay on the server side rendering
50+
settings->SetRenderPrimitiveCount(true);
5151

5252
// Enable wireframe rendering of object geometry on the server
5353
settings->SetRenderWireframe(true);

articles/remote-rendering/overview/features/performance-queries.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Client-side application performance might be a bottleneck, too. For an in-depth
1818

1919
## Client/server timeline
2020

21-
Before going into detail regarding the various latency values, it is worthwhile to have a look at the synchronization points between client and server on the timeline:
21+
Before going into detail regarding the various latency values, it's worthwhile to have a look at the synchronization points between client and server on the timeline:
2222

2323
![Pipeline timeline](./media/server-client-timeline.png)
2424

@@ -66,7 +66,7 @@ The retrieved `FrameStatistics` object holds the following members:
6666
| VideoFramesReceived | The number of frames received from the server in the last second. |
6767
| VideoFrameReusedCount | Number of received frames in the last second that were used on the device more than once. Non-zero values indicate that frames had to be reused and reprojected either due to network jitter or excessive server rendering time. |
6868
| VideoFramesSkipped | Number of received frames in the last second that were decoded, but not shown on display because a newer frame has arrived. Non-zero values indicate that network jittering caused multiple frames to be delayed and then arrive on the client device together in a burst. |
69-
| VideoFramesDiscarded | Very similar to **VideoFramesSkipped**, but the reason for being discarded is that a frame came in so late that it can't even be correlated with any pending pose anymore. If this discarding happens, there is some severe network contention.|
69+
| VideoFramesDiscarded | Very similar to **VideoFramesSkipped**, but the reason for being discarded is that a frame came in so late that it can't even be correlated with any pending pose anymore. If this discarding happens, there's some severe network contention.|
7070
| VideoFrameMinDelta | Minimum amount of time between two consecutive frames arriving during the last second. Together with VideoFrameMaxDelta, this range gives an indication of jitter caused either by the network or video codec. |
7171
| VideoFrameMaxDelta | Maximum amount of time between two consecutive frames arriving during the last second. Together with VideoFrameMinDelta, this range gives an indication of jitter caused either by the network or video codec. |
7272
@@ -76,7 +76,7 @@ The sum of all latency values is typically much larger than the available frame
7676
7777
Lastly,`TimeSinceLastPresent`, `VideoFrameMinDelta`, and `VideoFrameMaxDelta` give an idea of the variance of incoming video frames and local present calls. High variance means instable frame rate.
7878
79-
None of the values above gives clear indication of pure network latency (the red arrows in the illustration), because the exact time that the server is busy rendering needs to be subtracted from the roundtrip value `LatencyPoseToReceive`. The server-side portion of the overall latency is information that is unavailable to the client. However, the next paragraph explains how this value is approximated through additional input from the server and exposed through the `NetworkLatency` value.
79+
None of the values above gives clear indication of pure network latency (the red arrows in the illustration), because the exact time that the server is busy rendering needs to be subtracted from the roundtrip value `LatencyPoseToReceive`. The server-side portion of the overall latency is information that is unavailable to the client. However, the next paragraph explains how this value is approximated through extra input from the server and exposed through the `NetworkLatency` value.
8080
8181
## Performance assessment queries
8282
@@ -118,11 +118,12 @@ Contrary to the `FrameStatistics` object, the `PerformanceAssessment` object con
118118
| UtilizationGPU | Total server GPU utilization in percent |
119119
| MemoryCPU | Total server main memory utilization in percent |
120120
| MemoryGPU | Total dedicated video memory utilization in percent of the server GPU |
121-
| NetworkLatency | The approximate average roundtrip network latency in milliseconds. In the illustration above, this value corresponds to the sum of the red arrows. The value is computed by subtracting actual server rendering time from the `LatencyPoseToReceive` value of `FrameStatistics`. While this approximation is not accurate, it gives some indication of the network latency, isolated from the latency values computed on the client. |
122-
| PolygonsRendered | The number of triangles rendered in one frame. This number also includes the triangles that are culled later during rendering. That means, this number does not vary a lot across different camera positions, but performance can vary drastically, depending on the triangle culling rate.|
121+
| NetworkLatency | The approximate average roundtrip network latency in milliseconds. In the illustration above, this value corresponds to the sum of the red arrows. The value is computed by subtracting actual server rendering time from the `LatencyPoseToReceive` value of `FrameStatistics`. While this approximation isn't accurate, it gives some indication of the network latency, isolated from the latency values computed on the client. |
122+
| PolygonsRendered | The number of triangles rendered in one frame. This number also includes the triangles that are culled later during rendering. That means, this number doesn't vary a lot across different camera positions, but performance can vary drastically, depending on the triangle culling rate.|
123+
| PointsRendered | The number of points in point clouds rendered in one frame. Same culling criteria as mentioned above for `PolygonsRendered` apply here.|
123124
124125
To help you assess the values, each portion comes with a quality classification like **Great**, **Good**, **Mediocre**, or **Bad**.
125-
This assessment metric provides a rough indication of the server's health, but it should not be seen as absolute. For example, assume you see a 'mediocre' score for the GPU time. It is considered mediocre because it gets close to the limit for the overall frame time budget. In your case however, it might be a good value nonetheless, because you are rendering a complex model.
126+
This assessment metric provides a rough indication of the server's health, but it shouldn't be seen as absolute. For example, assume you see a 'mediocre' score for the GPU time. It's considered mediocre because it gets close to the limit for the overall frame time budget. In your case however, it might be a good value nonetheless, because you're rendering a complex model.
126127
127128
## Statistics debug output
128129

articles/remote-rendering/reference/vm-sizes.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ For the [example PowerShell scripts](../samples/powershell-example-scripts.md),
7373

7474
### How the renderer evaluates the number of primitives
7575

76-
The number of primitives that are considered for the limitation test are the number of primitives that are actually passed to the renderer. This geometry is typically the sum of all instantiated meshes, but there are also exceptions. The following geometry is **not included**:
76+
The number of primitives that are considered for the limitation test are the number of primitives (triangles and points) that are actually passed to the renderer. This geometry is typically the sum of all instantiated meshes, but there are also exceptions. The following geometry is **not included**:
7777
* Loaded model instances that are fully outside the view frustum.
7878
* Models or model parts that are switched to invisible, using the [hierarchical state override component](../overview/features/override-hierarchical-state.md).
7979

@@ -83,7 +83,7 @@ Accordingly, it's possible to write an application that targets the `standard` s
8383

8484
There are two ways to determine the number of primitives of a model or scene that contribute to the budget limit of the `standard` configuration size:
8585
* On the model conversion side, retrieve the [conversion output json file](../how-tos/conversion/get-information.md), and check the `numFaces` entry in the [*inputStatistics* section](../how-tos/conversion/get-information.md#the-inputstatistics-section). This number denotes the triangle count in triangular meshes and number of points in point clouds respectively.
86-
* If your application is dealing with dynamic content, the number of rendered primitives can be queried dynamically during runtime. Use a [performance assessment query](../overview/features/performance-queries.md#performance-assessment-queries) and check for the `polygonsRendered` member in the `FrameStatistics` struct. The `PolygonsRendered` field will be set to `bad` when the renderer hits the primitive limitation. The checkerboard background is always faded in with some delay to ensure user action can be taken after this asynchronous query. User action can, for instance, be hiding or deleting model instances.
86+
* If your application is dealing with dynamic content, the number of rendered primitives can be queried dynamically during runtime. Use a [performance assessment query](../overview/features/performance-queries.md#performance-assessment-queries) and check for the sum of the values in the two members `PolygonsRendered` and `PointsRendered` in the `PerformanceAssessment` struct. The `PolygonsRendered` / `PointsRendered` field will be set to `bad` when the renderer hits the primitive limitation. The checkerboard background is always faded in with some delay to ensure user action can be taken after this asynchronous query. User action can, for instance, be hiding or deleting model instances.
8787

8888
## Pricing
8989

0 commit comments

Comments
 (0)