Skip to content

Commit 2b264d4

Browse files
authored
Merge branch 'main' into patch-18
2 parents 7f41154 + ed2fb93 commit 2b264d4

File tree

7 files changed

+39
-25
lines changed

7 files changed

+39
-25
lines changed

content/en-us/performance-optimization/design.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,11 @@ More generally, testing on a variety of devices can help you check that the expe
2727

2828
## Streaming and teleportation
2929

30-
- [Instance streaming](../workspace/streaming.md) lets Roblox dynamically load and unload 3D content and is a great option for most experiences, especially larger ones. Streaming improves join times, reduces memory footprint, and increases frame rates. For more information, see [Improving performance](improve.md#instance-streaming).
30+
- [Instance streaming](../workspace/streaming.md) lets Roblox dynamically load and unload 3D content and is a great option for most places, especially larger ones. Streaming improves join times, reduces memory footprint, and increases frame rate. For more information, see [Improve performance](improve.md#instance-streaming).
3131

32-
- Break large places into more manageable ones and use [teleportation](../projects/teleport.md) to move players between them.
32+
- Consider breaking large places into more manageable ones and using [teleportation](../projects/teleport.md) to move players between them. This approach can reduce **initial** join times, but imposes additional join times as players teleport from place to place. Benefits to memory usage vary depending on the size of the place and whether you've enabled streaming.
33+
34+
Even ignoring performance considerations, you might find that having multiple places simplifies the development process, especially if you regularly add new content to your experience or are part of a larger team.
3335

3436
## Materials and duplication
3537

content/en-us/performance-optimization/improve.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -186,11 +186,11 @@ per frame on both the server and the client.
186186
- For objects that don't require collisions, disable collisions and use box or
187187
hull fidelity, since the collision geometry is still stored in memory.
188188
- You can render collision geometry for debug purposes in Studio by toggling
189-
on **Collision fidelity** from the [Visualization Options](../studio/ui-overview.md#visualization-options) widget in the upper‑right corner of the 3D viewport.
189+
on **Collision fidelity** from the [Visualization options](../studio/ui-overview.md#visualization-options) widget in the upper‑right corner of the 3D viewport.
190190

191191
Alternatively, you can apply the `CollisionFidelity = Precise` filter to the [Explorer](../studio/explorer.md#property-filters) which shows a count of all mesh parts with the precise fidelity and allows you to easily select them.
192192

193-
- For an in-depth walkthrough on how to choose a collision fidelity option that balances your precision and performance requirements, see [Set Physics and Rendering Parameters](../tutorials/curriculums/environmental-art/assemble-an-asset-library.md#collisionfidelity).
193+
- For an in-depth walkthrough on how to choose a collision fidelity option that balances your precision and performance requirements, see [Set physics and rendering parameters](../tutorials/curriculums/environmental-art/assemble-an-asset-library.md#collisionfidelity).
194194

195195
### MicroProfiler scopes
196196

@@ -338,7 +338,7 @@ same `MeshId` are handled in a single draw call when:
338338
Objects like decals, textures, and particles don't batch well and introduce
339339
additional draw calls. Pay extra attention to these object types in a scene. In particular, property changes to `Class.ParticleEmitter|ParticleEmitters` can have a dramatic impact on performance.
340340

341-
- **Missed Instancing Opportunities** - Often, a scene will include the same mesh
341+
- **Missed instancing opportunities** - Often, a scene will include the same mesh
342342
duplicated a number of times, but each copy of the mesh has different mesh or
343343
texture asset IDs. This prevents instancing and can lead to unnecessary draw
344344
calls.
@@ -362,7 +362,7 @@ same `MeshId` are handled in a single draw call when:
362362
near each other forces the engine to render the overlapping pixels multiple
363363
times, which can hurt performance. For more information on identifying and
364364
fixing this issue, see
365-
[Delete Layered Transparencies](../tutorials/curriculums/environmental-art/optimize-your-experience.md#delete-layered-transparencies).
365+
[Delete layered transparencies](../tutorials/curriculums/environmental-art/optimize-your-experience.md#delete-layered-transparencies).
366366

367367
### Mitigation
368368

@@ -512,7 +512,7 @@ You can employ the following tactics to reduce unnecessary replication:
512512

513513
## Asset memory usage
514514

515-
The highest impact mechanism available to creators to improve client memory usage is to enable [Instance Streaming](../workspace/streaming.md).
515+
The highest impact mechanism available to creators to improve client memory usage is to enable [Instance streaming](../workspace/streaming.md).
516516

517517
### Instance streaming
518518

@@ -525,13 +525,13 @@ If instance streaming is enabled, you can increase the aggressiveness of it. For
525525
- Reducing use the persistent **StreamingIntegrity**.
526526
- Reducing the **streaming radius**.
527527

528-
For more information on streaming options and their benefits, see [Streaming Properties](../workspace/streaming.md#streaming-properties).
528+
For more information on streaming options and their benefits, see [Streaming properties](../workspace/streaming.md#streaming-properties).
529529

530530
### Other common problems
531531

532532
- **Asset duplication** - A common mistake is to upload the same asset multiple times resulting in different asset IDs. This can lead to the same content being loaded into memory multiple times.
533533
- **Excessive asset volume** - Even when assets are not identical, there are cases when opportunities to reuse the same asset and save memory are missed.
534-
- **Audio files** - Audio files can be a surprising contributor to memory usage, particularly if you load all of them into the client at once rather than only loading what you need for a portion of the experience. For strategies, see [Load Times](#load-times).
534+
- **Audio files** - Audio files can be a surprising contributor to memory usage, particularly if you load all of them into the client at once rather than only loading what you need for a portion of the experience. For strategies, see [Load times](#load-times).
535535
- **High resolution textures** - Graphics memory consumption for a texture is unrelated to the size of the texture on the disk, but rather the number of pixels in the texture.
536536
- For example, a 1024x1024 pixel texture consumes four times the graphics memory of a 512x512 texture.
537537
- Images uploaded to Roblox are transcoded to a fixed format, so there is no memory benefit to uploading images in a color model associated with fewer bytes per pixel. Similarly, compressing images prior to upload or removing the alpha channel from images that don't need it can decrease image size on disk, but either doesn't improve or only minimally improves memory usage. Though the engine automatically downscales texture resolution on some devices, the extent of the downscale depends on the device characteristics, and excessive texture resolution can still cause problems.
@@ -544,17 +544,17 @@ For more information on streaming options and their benefits, see [Streaming Pro
544544
- Though there is no API to detect similarity of assets automatically, you can collect all the image asset IDs in your place (either manually or with a script), download them, and compare them using external comparison tools.
545545
- For mesh parts, the best strategy is to take unique mesh IDs and organize them by size to manually identify duplicates.
546546
- Instead of using separate textures for different colors, upload a single texture and use the `Class.SurfaceAppearance.Color` property to apply various tints to it.
547-
- **Importing assets in map separately** - Instead of importing an entire map at once, import and reconstruct assets in the map individually and reconstruct them. The 3D importer doesn't do any de-duplication of meshes, so if you were to import a large map with a lot of separate floor tiles, each of those tiles would be imported as a separate asset (even if they are duplicates). This can lead to performance and memory issues down the line, as each mesh is treated as individually and takes up memory and draw calls.
547+
- **Import assets in map separately** - Instead of importing an entire map at once, import and reconstruct assets in the map individually and reconstruct them. The 3D importer doesn't do any de-duplication of meshes, so if you were to import a large map with a lot of separate floor tiles, each of those tiles would be imported as a separate asset (even if they are duplicates). This can lead to performance and memory issues down the line, as each mesh is treated as individually and takes up memory and draw calls.
548548
- **Limit the pixels of images** to no more than the necessary amount. Unless an image is occupying a large amount of physical space on the screen, it usually needs at most 512x512 pixels. Most minor images should be smaller than 256x256 pixels.
549-
- **Use Trim Sheets** to ensure maximum texture reuse in 3D maps. For steps and examples on how to create trim sheets, see [Creating Trim Sheets](../resources/beyond-the-dark/building-architecture.md#creating-trim-sheets).
549+
- **Use trim sheets** to ensure maximum texture reuse in 3D maps. For steps and examples on how to create trim sheets, see [Create trim sheets](../resources/beyond-the-dark/building-architecture.md#create-trim-sheets).
550550

551551
## Load times
552552

553553
Many experiences implement custom loading screens and use the `Class.ContentProvider:PreloadAsync()` method to request assets so that images, sounds, and meshes are downloaded in the background.
554554

555555
The advantage of this approach is that it lets you ensure important parts of your experience are fully loaded without pop-in. However, a common mistake is overutilizing this method to preload more assets than are actually required.
556556

557-
An example of a bad practice is loading the _entire_ `Class.Workspace`. While this might prevent texture pop-in, it significantly increases load time.
557+
An example of a bad practice is loading the entire `Class.Workspace`. While this might prevent texture pop-in, it significantly increases load time.
558558

559559
Instead, only use `Class.ContentProvider:PreloadAsync()` in necessary situations, which include:
560560

content/en-us/performance-optimization/index.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ description: Introduces the performance optimization process.
55

66
Performance optimization is the process of building and iterating on an experience to improve frame rate, memory usage, and load times. Players expect games to perform well, so taking the time to understand and improve your experience's performance can be critical to its success.
77

8-
The first step in performance optimization is to [Design for Performance](design.md), which means following a set of best practices **as you build** a new experience. After you publish an experience, the optimization process follows a common cycle:
8+
The first step in performance optimization is to [design for performance](design.md), which means following a set of best practices **as you build** a new experience. After you publish an experience, the optimization process follows a common cycle:
99

1010
<GridContainer numColumns="2">
1111
<figure>
12-
1. [Identifying Performance Issues](identify.md) - Use Roblox's built-in tools to find performance problems and identify root causes.
13-
1. [Improving Performance](improve.md) - After you find an issue, see if it's a common one and how you might mitigate it. You might also want to take proactive action.
14-
1. [Monitoring Performance](monitor.md) - Use analytics tools to monitor the impact of your changes and watch for indicators of any performance issues.
12+
1. [Identify performance Issues](identify.md) - Use Roblox's built-in tools to find performance problems and identify root causes.
13+
1. [Improve performance](improve.md) - After you find an issue, see if it's a common one and how you might mitigate it. You might also want to take proactive action.
14+
1. [Monitor performance](monitor.md) - Use analytics tools to monitor the impact of your changes and watch for indicators of any performance issues.
1515
</figure>
1616
<figure>
1717
<img alt="A diagram showing the flow from designing, identifying, improving, and monitoring performance." src="../assets/optimization/Perf-Flow.png" width="70%" />

content/en-us/production/publishing/publish-experiences-and-places.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ After you have published a [start place](#start-place) to create the overall exp
7171
1. In the window that appears, click the tile for the experience you'd like to add the place to.
7272
1. In the next view, select **Add as a new place** and then click the **Create** button.
7373

74+
Whether you choose to have a single, large place or many smaller places is mostly personal preference. For more information, see [Design for performance](../../performance-optimization/design.md#streaming-and-teleportation).
75+
7476
### Change the start place
7577

7678
The [start place](#start-place) of an experience cannot be instantly swapped with another place, but you can change it through the following steps.

content/en-us/reference/engine/classes/BasePart.yaml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -659,12 +659,14 @@ properties:
659659
summary: |
660660
Determines whether or not a part casts a shadow.
661661
description: |
662-
Determines whether or not a part casts a shadow.
662+
Determines whether or not a part casts a shadow. Disabling this property
663+
for a given part can cause visual artifacts on the shadows cast upon that
664+
part.
663665
664-
Note that this feature is **not** designed for performance enhancement. It
665-
should only be disabled on parts where you want to hide the shadows the
666-
part casts. Disabling this property for a given part may cause visual
667-
artifacts on the shadows cast upon that part.
666+
This property is not designed for performance enhancement, but in complex
667+
scenes, strategically disabling it on certain parts can improve
668+
performance. Due to the possibility of visual artifacts, we recommend
669+
leaving it enabled on all parts in most situations.
668670
code_samples: []
669671
type: boolean
670672
tags: []

content/en-us/reference/engine/classes/Player.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2539,7 +2539,12 @@ methods:
25392539
type: double
25402540
default: 0
25412541
summary: |
2542-
Optional timeout for the request.
2542+
Optional timeout for the request, the maximum duration that the engine
2543+
attempts to stream regions around the `position` parameter before
2544+
abandoning the request. If you don't specify a value, the timeout is
2545+
effectively infinite. However, if the client is low on memory, the
2546+
engine abandons all streaming requests, even those that are still
2547+
within the timeout duration.
25432548
returns:
25442549
- type: ()
25452550
summary: ''

content/en-us/reference/engine/classes/TestService.yaml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,8 @@ properties:
301301
tags:
302302
- NotReplicated
303303
- Deprecated
304-
deprecation_message: ''
304+
deprecation_message: |
305+
This has been deprecated and directly renamed to `Class.TestService.ThrottlePhysicsToRealtime|ThrottlePhysicsToRealtime` to better reflect its practical use.
305306
security:
306307
read: None
307308
write: None
@@ -416,8 +417,10 @@ properties:
416417
capabilities: []
417418
writeCapabilities: []
418419
- name: TestService.ThrottlePhysicsToRealtime
419-
summary: ''
420-
description: ''
420+
summary: |
421+
Sets whether the test should be throttled to simulate time according to real world time or as fast as possible.
422+
description: |
423+
Sets whether the test should be throttled to simulate time according to real world time or as fast as possible.
421424
code_samples: []
422425
type: boolean
423426
tags: []

0 commit comments

Comments
 (0)