Skip to content

Commit 542b92c

Browse files
committed
Various documentation updates
1 parent 23cabfd commit 542b92c

11 files changed

Lines changed: 132 additions & 19 deletions

File tree

63.8 KB
Loading

pages/docs/animation/paths/spline-component.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,4 @@ Also see the [spline node component](spline-node-component.md) for options on ea
8383

8484
* [Spline Node Component](spline-node-component.md)
8585
* [Follow Path Component](follow-path-component.md)
86+
* [Spline Mesh Component](spline-mesh-component.md)
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Spline Mesh Component
2+
3+
The *spline mesh component* generates a mesh that follows a [spline](spline-component.md). It tiles one or more mesh pieces along the spline, making it easy to create things like pipes, roads, fences, cables or rails without manually placing individual segments.
4+
5+
![Spline Mesh](media/spline-mesh.jpg)
6+
7+
## Setting up a Spline Mesh
8+
9+
1. Add a [spline component](spline-component.md) to a game object and configure the spline shape.
10+
1. Attach a *spline mesh component* to the same object.
11+
1. Set at least one **Middle Part** — this mesh is tiled along the spline.
12+
1. Optionally set a **Start Part** and/or **End Part** to cap the spline with specialized meshes (e.g. a pipe end-cap).
13+
14+
## Distribution Modes
15+
16+
The **Distribution Mode** controls how many mesh pieces are placed and how they are scaled:
17+
18+
* **Fit to Segment**: Each middle part is stretched to fill exactly one spline segment (the span between two spline nodes). Use this when your mesh should align with the spline node positions.
19+
* **Scale Evenly** *(default)*: The number of tiles is derived from the total spline length and the mesh length. All tiles are scaled uniformly.
20+
* **Scale Evenly Per Segment**: Like *Scale Evenly*, but computed independently for each spline segment. This keeps tiles aligned to segment boundaries.
21+
22+
When multiple middle parts are specified, either a random piece or the best-fitting piece is selected at each position, depending on the distribution mode and the relative lengths of the available parts.
23+
24+
## Component Properties
25+
26+
* **Start Part**: Optional mesh placed at the beginning of the spline.
27+
* **Middle Parts**: One or more meshes tiled along the spline body. Each entry has optional **Padding Front** / **Padding Back** values (can be negative to create overlaps).
28+
* **End Part**: Optional mesh placed at the end of the spline.
29+
* **Distribution Mode**: How tiles are counted and scaled (see above).
30+
* **Seed**: Random seed used when picking among multiple middle parts. A negative value uses the owner object's stable random seed; zero or positive sets an explicit seed.
31+
* **Offset Y**: Shifts the entire generated mesh sideways (along the spline's local Y axis).
32+
* **Offset Z**: Shifts the entire generated mesh up/down (along the spline's local Z axis).
33+
34+
## Collision
35+
36+
To add physics collision to a spline mesh, add a [Jolt Generate Collision Component](../../physics/jolt/special/jolt-generate-collision-component.md) to the same game object. It reads the render meshes produced by the spline mesh component and generates a matching Jolt collision mesh on scene export.
37+
38+
## See Also
39+
40+
* [Spline Component](spline-component.md)
41+
* [Spline Node Component](spline-node-component.md)
42+
* [Jolt Generate Collision Component](../../physics/jolt/special/jolt-generate-collision-component.md)

pages/docs/assets/asset-browser.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@ The asset browser can show all files that are on disk in the selected [data dire
2020

2121
**Non-Importable files** are all other files. The editor can't do anything with them, other than to open the default application associated with this file type.
2222

23-
You can also move and delete files and assets. Note that deleting a file moves it to the trash folder, so you can restore the file through the operating system functionality, if necessary.
23+
You can also move and delete files and assets. Note that deleting a file moves it to the trash folder, so you can restore the file through the operating system functionality, if necessary.
24+
25+
### Delete & Replace
26+
27+
Right-clicking a single asset reveals a **Delete & Replace...** option. This opens an asset picker where you select a replacement asset. The editor then rewrites every asset document that referenced the deleted asset so that it now points to the replacement, and finally deletes the original asset. This is useful when consolidating duplicate assets.
2428

2529
## Search Field
2630

@@ -50,7 +54,7 @@ On the left the asset browser displays all [data directories](../projects/data-d
5054

5155
The **eye button** to the right of the search field, toggles which assets are shown. If it shows the *open eye*, the asset browser displays *all assets* below the currently selected folder, if it shows the *closed eye*, only the files directly inside the selected folder are shown. The former mode makes it easy to find assets for which you only roughly know where they are, the latter mode is more useful when you have many assets and you only want to see the ones from a specific folder.
5256

53-
When any search term is entered into the text box, automatically all files are displayed.
57+
When any search term is entered into the text box, automatically all files are displayed.
5458

5559
Some people prefer one mode or the other as their default, which is why this setting is saved and restored between editor runs.
5660

pages/docs/assets/asset-curator.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@ The *asset curator panel* is a tool to help find and fix problems with [assets](
66

77
## Activity
88

9-
At its top the asset curator panel displays an activity log. If *background transform* is active, this shows which assets have been transformed recently. Whether background transform is enabled can be seen from the progress bar at the bottom:
10-
11-
![Transform Progress](media/transform-progress.png)
9+
At its top the asset curator panel displays a timeline of recently processed assets. Each bar represents one asset being transformed, with the Y-axis showing the individual worker processes and the X-axis showing time. Periods of inactivity are compressed to keep the view compact, indicated by a diagonal pattern. This makes it easy to see how many assets were processed in parallel and how long each one took.
1210

1311
## Transform Issues
1412

pages/docs/custom-code/angelscript/as-messaging.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,14 @@ If you need to send a message from one component and handle it in another compon
4747

4848
### AngelScript Event Messages
4949

50-
At the moment it is not supported to send AngelScript messages as event messages.
50+
AngelScript messages can be sent as event messages using `ezGameObject::SendEventMessage()` and `ezGameObject::PostEventMessage()`, just like C++ event messages:
51+
52+
```cpp
53+
AsMyEventMsg msg;
54+
GetOwner().SendEventMessage(msg, GetOwnerComponent());
55+
```
56+
57+
Event messages travel up the object hierarchy. If intermediate objects have script components that do not handle the message, those components must have the **Pass-Through Unhandled Events** option enabled on their [script component](as-components.md), otherwise the event will stop propagating at that object.
5158
5259
## See Also
5360

pages/docs/debugging/tracing.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
# Tracing
22

3-
ezEngine provides a cross-platform tracing system that emits structured events to the operating system's tracing infrastructure. Tracing is different from [profiling](../performance/profiling.md) and [logging](../performance/logging.md) as it allows for different debugging aproaches:
4-
1. Unlike [profiling](../performance/profiling.md), which stores data in an in-process ring buffer, tracing sends events to an external OS-level backend for capture by dedicated tools. This enables correlation with e.g.kernel events (scheduling, I/O).
3+
ezEngine provides a cross-platform tracing system that emits structured events to the operating system's tracing infrastructure. Tracing is different from [profiling](../performance/profiling.md) and [logging](logging.md) as it allows for different debugging approaches:
4+
5+
1. Unlike [profiling](../performance/profiling.md), which stores data in an in-process ring buffer, tracing sends events to an external OS-level backend for capture by dedicated tools. This enables correlation with e.g. kernel events (scheduling, I/O).
56
1. Traces are system wide so you can capture events from multiple threads / processes, even those you don't own.
67
1. You can attach data fields to a trace event which are structured, allowing tools to aggregate or filter by them.
7-
1. Each trace event stores process and thread information, allowing to filter by various dimensions unlike [logging](../performance/logging.md) which is always linear.
8+
1. Each trace event stores process and thread information, allowing to filter by various dimensions unlike [logging](logging.md) which is always linear.
89

910
When you should not use tracing:
10-
1. If you need instant feedback in the debugger, use [logging](../performance/logging.md) instead.
11-
1. If you want to do performance profiling on CPU / GPU, use [profiling](../performance/profiling.md) for capturing or [tracy](../performance/profiling.md) for real-time observation instead.
11+
12+
1. If you need instant feedback in the debugger, use [logging](logging.md) instead.
13+
1. If you want to do performance profiling on CPU / GPU, use [profiling](../performance/profiling.md) for capturing or [tracy](tracy.md) for real-time observation instead.
1214

1315

1416
The tracing system uses:
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Jolt Generate Collision Component
2+
3+
The *Jolt generate collision component* automatically creates a static collision mesh from the render meshes produced by a [spline mesh component](../../../animation/paths/spline-mesh-component.md) on the same game object.
4+
5+
Because spline meshes are procedurally generated from a set of render mesh pieces, there is no single pre-authored collision asset that can be assigned by hand. This component solves that by mapping each render mesh piece to a corresponding Jolt collision mesh asset, then assembling the collision geometry to match the generated spline mesh exactly.
6+
7+
## Setup
8+
9+
1. Add a [spline mesh component](../../../animation/paths/spline-mesh-component.md) to a game object.
10+
1. Add a *Jolt generate collision component* to the same object.
11+
1. For each render mesh piece used by the spline mesh component, add an entry to the **Mesh Mappings** list:
12+
* **Render Mesh**: The render mesh asset used in the spline mesh component.
13+
* **Collision Mesh**: The corresponding [Jolt collision mesh](../collision-shapes/jolt-collision-meshes.md) asset (triangle mesh).
14+
1. Set the **Collision Layer** to the appropriate [collision layer](../collision-shapes/jolt-collision-layers.md).
15+
16+
Render mesh pieces that have no mapping entry will not produce any collision geometry.
17+
18+
## Component Properties
19+
20+
* **Mesh Mappings**: List of render-mesh-to-collision-mesh pairs. Each entry maps one render mesh to one Jolt triangle collision mesh.
21+
* **Collision Layer**: The [collision layer](../collision-shapes/jolt-collision-layers.md) assigned to the generated static actor.
22+
23+
## See Also
24+
25+
* [Spline Mesh Component](../../../animation/paths/spline-mesh-component.md)
26+
* [Jolt Collision Meshes](../collision-shapes/jolt-collision-meshes.md)
27+
* [Jolt Static Actor Component](../actors/jolt-static-actor-component.md)
28+
* [Jolt Collision Layers](../collision-shapes/jolt-collision-layers.md)

pages/docs/terrain/procedural/procgen-graph-output-placement.md

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,22 @@ More elaborate filtering can be achieved with [modifier nodes](procgen-graph-mod
3030
![Different cull distances](media/procgen-cull-distance.jpg)
3131

3232
* `PlacementMode`: How to determine the location where to place objects.
33-
1. *Raycast:* In this mode a physics ray is cast downwards from the volume of the [placement component](procgen-placement-component.md). Using the `CollisionLayer` and `Surface` as filters, the closest intersection point is used.
33+
1. *Raycast:* A physics ray is cast downwards from the volume of the [placement component](procgen-placement-component.md). Using the `CollisionLayer` and `Surface` as filters, the closest intersection point is used.
3434

3535
![Placement mode: raycast](media/procgen-placement-raycast.jpg)
3636

37-
1. *Fixed:* In this mode objects are always placed at the height of the [placement component](procgen-placement-component.md). No ray is cast, and no location is filtered out. This can be used for 2D games where no [collision geometry](../../physics/jolt/collision-shapes/jolt-collision-meshes.md) exists. Custom filtering can still be achieved through [image volumes](procgen-volume-image-component.md) and other [modifiers](procgen-graph-modifiers.md).
37+
1. *Raycast High Quality:* Like *Raycast*, but additionally fires `NumAdditionalRays` extra rays in a circle of radius `RaySpread * Footprint` around the initial hit point. If any of the surrounding rays misses (e.g. the object would be placed too close to a ledge or overhang), the placement is rejected. The normals of all successful hits are averaged to produce a smoother surface orientation for `AlignToNormal`. Use this mode when visual quality matters more than raw performance.
38+
39+
1. *Fixed:* Objects are always placed at the height of the [placement component](procgen-placement-component.md). No ray is cast and no location is filtered out. This can be used for 2D games where no [collision geometry](../../physics/jolt/collision-shapes/jolt-collision-meshes.md) exists. Custom filtering can still be achieved through [image volumes](procgen-volume-image-component.md) and other [modifiers](procgen-graph-modifiers.md).
3840

3941
![Placement mode: fixed](media/procgen-placement-fixed.jpg)
4042

41-
* `CollisionLayer`: The [collision layer](../../physics/jolt/collision-shapes/jolt-collision-layers.md) to use when `PlacementMode` is set to *Raycast*. The collision layer decides which physical objects will be hit by the raycast and thus on which surfaces objects may get spawned at all. Note that in *Raycast* mode objects can only be placed, if a [collision meshes](../../physics/jolt/collision-shapes/jolt-collision-meshes.md) exist in the scene at all ([greyboxes](../../scenes/greyboxing.md) and [heightfields](../heightfield-component.md) set these up automatically).
43+
* `CollisionLayer`: The [collision layer](../../physics/jolt/collision-shapes/jolt-collision-layers.md) to use when `PlacementMode` is set to *Raycast* or *Raycast High Quality*. The collision layer decides which physical objects will be hit by the raycast and thus on which surfaces objects may get spawned at all. Note that in raycast modes objects can only be placed, if [collision meshes](../../physics/jolt/collision-shapes/jolt-collision-meshes.md) exist in the scene ([greyboxes](../../scenes/greyboxing.md) and [heightfields](../heightfield-component.md) set these up automatically).
44+
45+
* `NumAdditionalRays`: Only used in *Raycast High Quality* mode. The number of extra rays fired around the initial hit in a circle. Minimum 3, default 4. More rays improve accuracy at the cost of performance.
46+
47+
* `RaySpread`: Only used in *Raycast High Quality* mode. Scales the radius of the surrounding ray circle relative to the object's `Footprint`. A value of `1` means the circle has the same radius as the footprint.
48+
4249
* `Surface`: An optional [surface](../../materials/surfaces.md) that's used to filter object placement. Objects will only be placed on surfaces of this type (or derived). This is used to only plant certain vegetation on each type of ground.
4350

4451
![Filter by surface type](media/procgen-surface.jpg)

pages/docs/toc.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@
131131
#### [Jolt Breakable Slab Component](physics/jolt/special/jolt-breakable-slab-component.md)
132132
#### [Character Controller](physics/jolt/special/jolt-character-controller.md)
133133
#### [Jolt Cloth Sheet Component](physics/jolt/special/jolt-cloth-sheet-component.md)
134+
#### [Jolt Generate Collision Component](physics/jolt/special/jolt-generate-collision-component.md)
134135
#### [Jolt Grab Object Component](physics/jolt/special/jolt-grab-object-component.md)
135136
#### [Jolt Rope Component](physics/jolt/special/jolt-rope-component.md)
136137
# Effects
@@ -184,6 +185,7 @@
184185
## Paths
185186
### [Follow Path Component](animation/paths/follow-path-component.md)
186187
### [Spline Component](animation/paths/spline-component.md)
188+
### [Spline Mesh Component](animation/paths/spline-mesh-component.md)
187189
### [Spline Node Component](animation/paths/spline-node-component.md)
188190
## Property Animation
189191
### [Color Animation Component](animation/property-animation/color-animation-component.md)

0 commit comments

Comments
 (0)