From 24b58adbe64db7371d7777211a10d622bf967174 Mon Sep 17 00:00:00 2001 From: Mark Green Date: Mon, 28 Jul 2025 11:29:10 +0000 Subject: [PATCH 1/3] [Port] [2022.3] Docs feedback fixes Jul 2025 --- .../Documentation~/Override-Contact-Shadows.md | 2 +- .../Documentation~/shader-terrain-lit.md | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Override-Contact-Shadows.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Override-Contact-Shadows.md index 2427546ac29..ec81ce00264 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Override-Contact-Shadows.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Override-Contact-Shadows.md @@ -1,5 +1,5 @@ # Contact Shadows -The Contact Shadows [Volume Override](Volume-Components.md) specifies properties which control the behavior of Contacts Shadows. Contact Shadows are shadows that The High Definition Render Pipeline (HDRP) [ray marches](Glossary.md#RayMarching) in screen space inside the depth buffer. The goal of using Contact Shadows is to capture small details that regular shadow mapping algorithms fail to capture. +Contact Shadows are shadows that HDRP [ray marches](Glossary.md#RayMarching) in screen space, inside the depth buffer, at a close range. Use Contact Shadows to provide shadows for geometry details that regular shadow mapping algorithms usually fail to capture. ## Enabling Contact Shadows diff --git a/Packages/com.unity.render-pipelines.universal/Documentation~/shader-terrain-lit.md b/Packages/com.unity.render-pipelines.universal/Documentation~/shader-terrain-lit.md index 15c55112b5a..4122ccff889 100644 --- a/Packages/com.unity.render-pipelines.universal/Documentation~/shader-terrain-lit.md +++ b/Packages/com.unity.render-pipelines.universal/Documentation~/shader-terrain-lit.md @@ -1,6 +1,8 @@ # Terrain Lit shader -URP uses the Terrain Lit shader for Unity Terrain. This shader is a simpler version of the [Lit shader](lit-shader.md). A Terrain can use a Terrain Lit Material with up to eight [Terrain Layers](https://docs.unity3d.com/Manual/class-TerrainLayer.html). +URP uses the Terrain Lit shader for Unity Terrain. This shader is a simpler version of the [Lit shader](lit-shader). + +For more information about Terrain Layers, refer to [Terrain Layers](../class-TerrainLayer.md). ![A Terrain GameObject rendered with the Terrain Lit shader.](Images/terrain/terrain-rendered-with-terrain-lit.png)
*A Terrain GameObject rendered with the Terrain Lit shader.* From b44eb42b45d6c0ff0d311bc61b581a56e9b46ced Mon Sep 17 00:00:00 2001 From: Mark Green Date: Mon, 28 Jul 2025 11:29:10 +0000 Subject: [PATCH 2/3] [Port] [2022.3] DOCG-6833 Add missing landing pages to VFX Graph manual --- .../Documentation~/Arithmetic.md | 31 +++++ .../Documentation~/Attribute.md | 15 +++ .../Documentation~/Bitwise.md | 18 +++ .../Block-Collision-LandingPage.md | 17 +++ .../Block-SetPositionShape-LandingPage.md | 25 ++++ .../Documentation~/Block-UpdatePosition.md | 4 +- .../Documentation~/Block-UpdateRotation.md | 4 +- .../Documentation~/Block.md | 26 ++++ .../Documentation~/Builtin.md | 18 +++ .../Documentation~/Camera.md | 15 +++ .../Documentation~/Clamp.md | 14 +++ .../Documentation~/Color.md | 18 +++ .../Documentation~/Constants.md | 14 +++ .../Context-OutputLitSettings.md | 2 +- .../Context-OutputSharedSettings.md | 2 +- .../Documentation~/Context.md | 26 ++++ .../Documentation~/Coordinates.md | 17 +++ .../Documentation~/CustomSpawn.md | 16 +++ .../Documentation~/Force.md | 20 ++++ .../Documentation~/GPUEventLandingPage.md | 14 +++ .../Documentation~/Geometry.md | 29 +++++ .../Documentation~/Implicit.md | 14 +++ .../Documentation~/Inline.md | 47 ++++++++ .../Documentation~/Kill.md | 12 ++ .../Documentation~/Logic.md | 20 ++++ .../Documentation~/Math.md | 22 ++++ .../Documentation~/Noise.md | 18 +++ .../Documentation~/Operator.md | 28 +++++ .../Documentation~/OperatorAttribute.md | 41 +++++++ .../Documentation~/Orientation.md | 14 +++ .../Documentation~/Output.md | 14 +++ .../Documentation~/PipelineTools.md | 17 +++ .../Documentation~/Reference.md | 15 +++ .../Documentation~/Remap.md | 9 ++ .../Documentation~/Sampling.md | 38 ++++++ .../Documentation~/ShaderGraphIntegration.md | 13 ++ .../Documentation~/SharedOutputSettings.md | 14 +++ .../Documentation~/Spawn.md | 18 +++ .../Documentation~/TableOfContents.md | 111 ++++++++---------- .../Documentation~/Trigonometry.md | 18 +++ .../Documentation~/Vector.md | 25 ++++ .../Documentation~/Velocity.md | 16 +++ .../Documentation~/Wave.md | 18 +++ 43 files changed, 823 insertions(+), 64 deletions(-) create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Arithmetic.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Attribute.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Bitwise.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Block-Collision-LandingPage.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Block-SetPositionShape-LandingPage.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Block.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Builtin.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Camera.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Clamp.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Color.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Constants.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Context.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Coordinates.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/CustomSpawn.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Force.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/GPUEventLandingPage.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Geometry.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Implicit.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Inline.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Kill.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Logic.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Math.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Noise.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Operator.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/OperatorAttribute.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Orientation.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Output.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/PipelineTools.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Reference.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Remap.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Sampling.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/ShaderGraphIntegration.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/SharedOutputSettings.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Spawn.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Trigonometry.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Vector.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Velocity.md create mode 100644 Packages/com.unity.visualeffectgraph/Documentation~/Wave.md diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Arithmetic.md b/Packages/com.unity.visualeffectgraph/Documentation~/Arithmetic.md new file mode 100644 index 00000000000..3399a069ef4 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Arithmetic.md @@ -0,0 +1,31 @@ +# Arithmetic Operators + +Perform mathematical calculations on input data. + +| **Page** | **Description** | +| --- | --- | +| [Absolute](Operator-Absolute.md) | Calculate the absolute value of an input. | +| [Add](Operator-Add.md) | Calculate the sum of all inputs. | +| [Divide](Operator-Divide.md) | Divide the first input sequentially by all other inputs. | +| [Fractional](Operator-Fractional.md) | Extract the fractional part of an input. | +| [Inverse Lerp](Operator-InverseLerp.md) | Calculate the fraction representing how far a value is between two values. | +| [Lerp](Operator-Lerp.md) | Calculate a linear interpolation between two values. | +| [Modulo](Operator-Modulo.md) | Calculate the remainder of dividing of one value by another. | +| [Multiply](Operator-Multiply.md) | Multiply all inputs together. | +| [Negate](Operator-Negate.md) | Multiply an input value by -1 to invert its sign. | +| [One Minus](Operator-OneMinus.md) | Subtract an input value from one. | +| [Power](Operator-Power.md) | Raise one input to the power of another input. | +| [Reciprocal](Operator-Reciprocal.md) | Calculate the result of dividing 1 by an input value. | +| [Sign](Operator-Sign.md) | Return whether an input is positive, negative, or 0. | +| [Smoothstep](Operator-Smoothstep.md) | Calculate smooth Hermite interpolation between two values. | +| [Square Root](Operator-SquareRoot.md) | Calculate the square root of an input. | +| [Step](Operator-Step.md) | Compare an input value to a threshold and return whether an input is above or below the threshold | +| [Subtract](Operator-Subtract.md) | Subtract one or more inputs from another input. | + +## Additional resources + +- [Clamp](Clamp.md) +- [Remap](Remap.md) +- [Math](Math.md) + + diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Attribute.md b/Packages/com.unity.visualeffectgraph/Documentation~/Attribute.md new file mode 100644 index 00000000000..109c928122d --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Attribute.md @@ -0,0 +1,15 @@ +# Attribute Blocks + +Write values to the [Attributes](Attributes.md) of particles. + +| **Page** | **Description** | +| --- | --- | +| [Curve](Block-SetAttributeFromCurve.md) | Write values to an attribute based on a sample from an Animation Curve or Gradient. | +| [Derived > Calculate Mass from Volume](Block-CalculateMassFromVolume.md) | Set the mass of a particle based on its scale and density. | +| [Map](Block-SetAttributeFromMap.md) | Sample data from textures and store them in attributes. | +| [Set](Block-SetAttribute.md) | Write values to an attribute directly, or use random modes to set attributes to random values. | + +## Additional resources + +- [Attributes](Attributes.md) +- [Standard Attribute Reference](Reference-Attributes.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Bitwise.md b/Packages/com.unity.visualeffectgraph/Documentation~/Bitwise.md new file mode 100644 index 00000000000..7a300d257ea --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Bitwise.md @@ -0,0 +1,18 @@ +# Bitwise Operators + +Perform bitwise logical operations on inputs. + +| **Page** | **Description** | +| --- | --- | +| [And](Operator-BitwiseAnd.md) | Perform a bitwise AND operation, which outputs 1 if both bits are 1. | +| [Complement](Operator-BitwiseComplement.md) | Perform a bitwise NOT operation to invert each bit. | +| [Left Shift](Operator-BitwiseLeftShift.md) | Shift an input value left by a specified number of bits. | +| [Or](Operator-BitwiseOr.md) | Perform a bitwise OR operation, which outputs 1 if either bit is 1. | +| [Right Shift](Operator-BitwiseRightShift.md) | Shift an input value right by a specified number of bits. | +| [Xor](Operator-BitwiseXor.md) | Perform a bitwise XOR operation, which outputs 1 if only one bit is 1. | + +## Additional resources + +- [Logic Operators](Logic.md) +- [Math Operators](Math.md) + diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Block-Collision-LandingPage.md b/Packages/com.unity.visualeffectgraph/Documentation~/Block-Collision-LandingPage.md new file mode 100644 index 00000000000..3b2d4cd6dc9 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Block-Collision-LandingPage.md @@ -0,0 +1,17 @@ +# Collision Blocks reference + +Configure how particles collide with shapes or the depth buffer. + +| **Page** | **Description** | +| --- | --- | +| [Collide with AABox](Block-CollideWithAABox.md) | Define an axis-aligned box volume that particles collide with. | +| [Collide with Cone](Block-CollideWithCone.md) | Define a truncated cone volume that particles collide with. | +| [Collide with Depth Buffer](Block-CollideWithDepthBuffer.md) | Make particles collide with the depth buffer of a camera. | +| [Collide with Plane](Block-CollideWithPlane.md) | Define a flat plane with infinite extents that particles collide with. | +| [Collide with Signed Distance Field](Block-CollideWithSignedDistanceField.md) | Create a complex shape that particles collide with. | +| [Collide with Sphere](Block-CollideWithSphere.md) | Define a spherical volume that particles collide with. | + +## Additional resources + +- [Signed Distance Fields in the Visual Effect Graph](sdf-in-vfx-graph.md) +- [VFX Graph Learning Templates](https://www.youtube.com/watch?v=DKVdg8DsIVY) on the Unity YouTube channel diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Block-SetPositionShape-LandingPage.md b/Packages/com.unity.visualeffectgraph/Documentation~/Block-SetPositionShape-LandingPage.md new file mode 100644 index 00000000000..5503809ff4f --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Block-SetPositionShape-LandingPage.md @@ -0,0 +1,25 @@ +# Set Position Blocks reference + +Configure particle positions based on an input. + +| **Page** | **Description** | +|-|-| +| [Set Position (Depth)](Block-SetPosition(Depth).md) | Explore the properties of the Set Position (Depth) block. | +| [Set Position (Mesh)](Block-SetPosition(Mesh).md) | Calculate a position based on mesh vertex data. | +| [Set Position (Signed Distance Field)](Block-SetPosition(SignedDistanceField).md) | Explore the properties of the Set Position (Signed Distance Field) block. | +| [Set Position (Skinned Mesh)](Block-SetPosition(Mesh).md) | Calculate a position based on skinned mesh vertex data. | +| [Set Position (Sequential : Circle)](Block-SetPosition(Sequential).md) | Use the Set Position (Sequential) block with a circle. | +| [Set Position (Sequential : Line)](Block-SetPosition(Sequential).md) | Use the Set Position (Sequential) block with a line. | +| [Set Position (Sequential : ThreeDimensional)](Block-SetPosition(Sequential).md) | Use the Set Position (Sequential) block with a 3D shape. | +| [Set Position (Shape : AABox)](Block-SetPosition(AABox).md) | Calculate a position based on an axis-aligned box. | +| [Set Position (Shape : Circle)](Block-SetPosition(Circle).md) | Calculate a position based on a circle. | +| [Set Position (Shape : Cone)](Block-SetPosition(Cone).md) | Calculate a position based on a cone. | +| [Set Position (Shape : Line)](Block-SetPosition(Line).md) | Calculate a position based on a line. | +| [Set Position (Shape : Sphere)](Block-SetPosition(Sphere).md) | Calculate a position based on a sphere. | +| [Set Position (Sequential)](Block-SetPosition(Sequential).md) | Explore the properties of the Set Position (Sequential) block. | +| [Tile/Warp Positions](Block-TileWarpPositions.md) | Explore the properties of the Tile/Warp Positions block. | + +## Additional resources + +- [Signed Distance Fields in the Visual Effect Graph](sdf-in-vfx-graph.md) +- [VFX Graph Learning Templates](https://www.youtube.com/watch?v=DKVdg8DsIVY) on the Unity YouTube channel diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Block-UpdatePosition.md b/Packages/com.unity.visualeffectgraph/Documentation~/Block-UpdatePosition.md index ba2f0f542a1..4ab1ecccb75 100644 --- a/Packages/com.unity.visualeffectgraph/Documentation~/Block-UpdatePosition.md +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Block-UpdatePosition.md @@ -2,7 +2,9 @@ Menu Path : **Implicit > Integration : Update Position** -The **Integration : Update Position** Block updates particle positions based on their velocity. If the system uses the velocity attribute and you enable **Update Position** in the Update Context's Inspector, Unity implicitly adds this Block to the Context and hides it. +The **Integration : Update Position** Block updates particle positions based on their velocity. + +**Note:** If the system uses the velocity attribute and you enable **Update Position** in the Update Context's Inspector, Unity implicitly adds this Block to the Context and hides it. If you add your own **Integration : Update Position** Block too, Unity updates positions twice. ![](Images/Block-UpdatePositionInspector.png) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Block-UpdateRotation.md b/Packages/com.unity.visualeffectgraph/Documentation~/Block-UpdateRotation.md index daf4a87d427..c0393df24bb 100644 --- a/Packages/com.unity.visualeffectgraph/Documentation~/Block-UpdateRotation.md +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Block-UpdateRotation.md @@ -2,7 +2,9 @@ Menu Path : **Implicit > Integration : Update Rotation** -The **Integration : Update Rotation** Block updates particle orientation based on their angular velocity. If the system uses the angular velocity attribute and you enable **Update Rotation** in the Update Context's Inspector, Unity implicitly adds this Block to the Context and hides it. +The **Integration : Update Rotation** Block updates particle orientation based on their angular velocity. + +**Note:** If the system uses the angular velocity attribute and you enable **Update Rotation** in the Update Context's Inspector, Unity implicitly adds this Block to the Context and hides it. If you add your own **Integration : Update Rotation** Block too, Unity updates rotation twice. ![](Images/Block-UpdateRotationInspector.png) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Block.md b/Packages/com.unity.visualeffectgraph/Documentation~/Block.md new file mode 100644 index 00000000000..2414ebfdf93 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Block.md @@ -0,0 +1,26 @@ +# Blocks + +Control the behavior, appearance, and simulation of particles. + +| **Page** | **Description** | +| --- | --- | +| [Attribute Blocks](Attribute.md) | Write values to the attributes of particles. | +| [Collision Blocks](Block-Collision-LandingPage.md) | Configure how particles collide with shapes or the depth buffer. | +| [Flipbook Player](Block-FlipbookPlayer.md) | Create animated particles using flipbook textures. | +| [Force Blocks](Force.md) | Apply and control forces on particles, such as gravity and turbulence. | +| [GPU Event](GPUEventLandingPage.md) | Spawn new particles from Trigger Blocks in Update or Initialize Contexts. | +| [Implicit Integration Blocks](Implicit.md) | Explore the hidden Blocks that Visual Effect Graph uses to update the position and rotation of particles. | +| [Kill Blocks](Kill.md) | Destroy particles inside or outside a shape. | +| [Orientation Blocks](Orientation.md) | Change the direction that particles face. | +| [Output Blocks](Output.md) | Control particle output and rendering. | +| [Set Position Blocks](Block-SetPositionShape-LandingPage.md) | Configure particle positions based on an input shape. | +| [Size > Screen Space Size](Block-ScreenSpaceSize.md) | Calculate the scale needed for a particle to reach a specific size. | +| [Spawn Blocks](Spawn.md) | Customize behavior for spawning particles. | +| [Velocity Blocks](Velocity.md) | Dynamically adjust the velocity of particles. | + +## Additional resources + +- [Blocks](Blocks.md) +- [Graph logic and philosophy](GraphLogicAndPhilosophy.md) +- [Output event handlers](OutputEventHandlers.md) + diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Builtin.md b/Packages/com.unity.visualeffectgraph/Documentation~/Builtin.md new file mode 100644 index 00000000000..08fa076d23e --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Builtin.md @@ -0,0 +1,18 @@ +# Built-in Operators + +Operators that output time, frame indices, and coordinates. + +| **Page** | **Description** | +| --- | --- | +| [Delta Time](Operator-DeltaTime.md) | Get the time in seconds between the current and previous frames. | +| [Frame Index](Operator-FrameIndex.md) | Get the current frame index. | +| [Local to World](Operator-LocalToWorld.md) | Get a matrix that transforms a point from local space to world space. | +| [System Seed](Operator-SystemSeed.md) | Get the seed used to generate random numbers. | +| [Total Time](Operator-TotalTime.md) | Get the total time since the effect started. | +| [World to Local](Operator-WorldToLocal.md) | Get a matrix that transforms a point from world space to local space. | + +## Additional resources + +- [Math Operators](Math.md) +- [Attribute Blocks](Attribute.md) + diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Camera.md b/Packages/com.unity.visualeffectgraph/Documentation~/Camera.md new file mode 100644 index 00000000000..82d266352db --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Camera.md @@ -0,0 +1,15 @@ +# Camera Operators + +Output information about cameras, and convert between view space and world space. + +| **Page** | **Description** | +| --- | --- | +| [Main Camera](Operator-MainCamera.md) | Get information about the current main camera, including integration with the active Scriptable Render Pipeline. | +| [Viewport to World Point](Operator-ViewportToWorldPoint.md) | Transform a position from viewport space to world space | +| [World to Viewport Point](Operator-WorldToViewportPoint.md) | Transform a position from world space to view space. | + +## Additional resources + +- [Coordinates](Coordinates.md) +- [Geometry](Geometry.md) +- [Built-in Operators](Builtin.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Clamp.md b/Packages/com.unity.visualeffectgraph/Documentation~/Clamp.md new file mode 100644 index 00000000000..61dc923b2bc --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Clamp.md @@ -0,0 +1,14 @@ +# Clamp Operators + +Clamp, round, or limit values. + +| **Page** | **Description** | +| --- | --- | +| [Ceiling](Operator-Ceiling.md) | Round an input up to the nearest integer. | +| [Clamp](Operator-Clamp.md) | Limit an input value between a lower and upper bound for each axis. | +| [Discretize](Operator-Discretize.md) | Get the multiple of an input that's closest to a second input. | +| [Floor](Operator-Floor.md) | Round an input value down to the nearest integer. | +| [Maximum](Operator-Maximum.md) | Get the largest value from all input values. | +| [Minimum](Operator-Minimum.md) | Get the smallest value from all input values. | +| [Round](Operator-Round.md) | Round an input value to the nearest integer. | +| [Saturate](Operator-Saturate.md) | Clamp a value between 0 and 1. | diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Color.md b/Packages/com.unity.visualeffectgraph/Documentation~/Color.md new file mode 100644 index 00000000000..37b072347b6 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Color.md @@ -0,0 +1,18 @@ +# Color Operators + +Output and convert color values. + +| **Page** | **Description** | +| --- | --- | +| [Color Luma](Operator-ColorLuma.md) | Get the perceived brightness of an input color. | +| [HSV to RGB](Operator-HSVToRGB.md) | Convert hue, saturation, value (HSV) color values to red, green, blue (RGB) color values. | +| [RGB to HSV](Operator-RGBToHSV.md) | Convert red, green, blue (RGB) color values to hue, saturation, value (HSV) color values. | + +## Additional resources + +- [Color](Operator-InlineColor.md) +- [Sample Gradient](Operator-SampleGradient.md) +- [Saturate](Operator-Saturate.md) + + + diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Constants.md b/Packages/com.unity.visualeffectgraph/Documentation~/Constants.md new file mode 100644 index 00000000000..0d4369f97f4 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Constants.md @@ -0,0 +1,14 @@ +# Constants Operators + +Get mathematical constants. + +| **Page** | **Description** | +| --- | --- | +| [Epsilon (ε)](Operator-Epsilon.md) | Get a tiny value that you can use to avoid precision issues when you compare float values. | +| [Pi (π)](Operator-Pi.md) | Get the ratio of a circle's circumference to its diameter. | + +## Additional resources + +- [Arithmetic Operators](Arithmetic.md) +- [Clamp Operators](Clamp.md) +- [Math Operators](Math.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Context-OutputLitSettings.md b/Packages/com.unity.visualeffectgraph/Documentation~/Context-OutputLitSettings.md index b0d2f72154f..555f74e4e55 100644 --- a/Packages/com.unity.visualeffectgraph/Documentation~/Context-OutputLitSettings.md +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Context-OutputLitSettings.md @@ -1,4 +1,4 @@ -# Output Lit +# Lit Output Settings Menu Path : **Context > Output [Data Type] Lit [Type]** diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Context-OutputSharedSettings.md b/Packages/com.unity.visualeffectgraph/Documentation~/Context-OutputSharedSettings.md index 278c30289ed..ecfaa1923fa 100644 --- a/Packages/com.unity.visualeffectgraph/Documentation~/Context-OutputSharedSettings.md +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Context-OutputSharedSettings.md @@ -1,4 +1,4 @@ -# Shared Output Settings and Properties +# Shared output settings and properties All outputs share these settings and property ports. The only exception is the Shader Graph setting which most outputs support, but not all of them. diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Context.md b/Packages/com.unity.visualeffectgraph/Documentation~/Context.md new file mode 100644 index 00000000000..1773e7b5e9c --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Context.md @@ -0,0 +1,26 @@ +# Contexts + +Explore the different [Contexts](Contexts.md) you can add to a graph. + +| **Page** | **Description** | +| --- | --- | +| [Event](Context-Event.md) | Define names for events that trigger actions in a graph. | +| [GPU Event](Context-GPUEvent.md) | Spawn new particles from specific Blocks in Update or Initialize Contexts. | +| [Initialize Particle](Context-Initialize.md) | Process an event and initialize new particle elements. | +| [Output Decal](Context-OutputForwardDecal.md) | Render a particle system using a projected decal texture. | +| [Output Distortion](Context-OutputDistortion.md) | In the High Definition Render Pipeline (HDRP), use distortion to simulate effects like heat haze from fire. | +| [Output Line](Context-OutputLine.md) | Render particles as lines. | +| [Output Mesh](Context-OutputMesh.md) | Render a static mesh. | +| [Output Particle HDRP Lit Decal](Context-OutputParticleHDRPLitDecal.md) | Use a decal to render a particle system in HDRP. | +| [Output Particle Mesh](Context-OutputParticleMesh.md) | Render particles as meshes. | +| [Output Point](Context-OutputPoint.md) | Render particles as points. | +| [Output Primitive](Context-OutputPrimitive.md) | Render particles as lit quads, triangles, or octagons. | +| [Shared output settings](SharedOutputSettings.md) | Explore the settings that appear in all Contexts. | +| [Spawn](Context-Spawn.md) | Control the spawn rate of particles, or create a custom spawning behavior. | +| [Update Particle](Context-Update.md) | Manage the behavior of particles or particle strips from an Initialize Context. | + +## Additional resources + +- [Visual Effect Graph Logic](GraphLogicAndPhilosophy.md) +- [Blocks](Blocks.md) +- [Contexts (Graph Logic & Philosophy)](Contexts.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Coordinates.md b/Packages/com.unity.visualeffectgraph/Documentation~/Coordinates.md new file mode 100644 index 00000000000..ea214d4ce8c --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Coordinates.md @@ -0,0 +1,17 @@ +# Coordinate Operators + +Convert between coordinate systems. + +| **Page** | **Description** | +| --- | --- | +| [Polar to Rectangular](Operator-PolarToRectangular.md) | Convert from polar coordinates to rectangular xy coordinates. | +| [Rectangular to Polar](Operator-RectangularToPolar.md) | Convert from rectangular xy coordinates to polar coordinates. | +| [Rectangular to Spherical](Operator-RectangularToSpherical.md) | Convert from rectangular xyz coordinates to spherical coordinates. | +| [Spherical to Rectangular](Operator-SphericalToRectangular.md) | Convert from spherical coordinates to rectangular XYZ coordinates. | + +## Additional resources + +- [Change Space](Operator-ChangeSpace.md) +- [Transform (Position)](Operator-Transform(Position).md) +- [Local to World](Operator-LocalToWorld.md) + diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/CustomSpawn.md b/Packages/com.unity.visualeffectgraph/Documentation~/CustomSpawn.md new file mode 100644 index 00000000000..e1d8b3c9c31 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/CustomSpawn.md @@ -0,0 +1,16 @@ +# Custom Spawn Blocks + +Customize advanced behavior for spawning particles. + +| **Page** | **Description** | +| --- | --- | +| [Increment Strip Index On Start](Block-IncrementStripIndexOnStart.md) | Create a new group of particles each time the start event of the Spawn Context triggers. | +| [Set Spawn Time](Block-SetSpawnTime.md) | Allow Initialize Contexts to use the time since the previous play event of the Spawn Context. | +| [Spawn Over Distance](Block-SpawnOverDistance.md) | Spawn particles based on the distance moved since the previous frame. | + +## Additional resources + +- [Spawn](Context-Spawn.md) +- [Spawner Callbacks](SpawnerCallbacks.md) +- [Events](Events.md) + diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Force.md b/Packages/com.unity.visualeffectgraph/Documentation~/Force.md new file mode 100644 index 00000000000..1e89830a15f --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Force.md @@ -0,0 +1,20 @@ +# Force Blocks + +Apply and control forces on particles, such as gravity and turbulence. + +| **Page** | **Description** | +| --- | --- | +| [Conform to Signed Distance Field](Block-ConformToSignedDistanceField.md) | Pull particles towards a complex shape. | +| [Conform to Sphere](Block-ConformToSphere.md) | Pull particles towards a sphere. | +| [Force](Block-Force.md) | Apply a force to particles by changing their velocity. | +| [Gravity](Block-Gravity.md) | Apply gravity to particles by changing their velocity. | +| [Linear Drag](Block-LinearDrag.md) | Slow particles down without affecting their direction. | +| [Turbulence](Block-Turbulence.md) | Add natural-looking motion to particles. | +| [Vector Force Field](Block-VectorForceField.md) | Apply specific forces to particles using a vector field. | + +## Additional resources + +- [Velocity Blocks](Velocity.md) +- [Vector Fields / Signed Distance Fields](VectorFields.md) +- [Noise Operators](Noise.md) + diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/GPUEventLandingPage.md b/Packages/com.unity.visualeffectgraph/Documentation~/GPUEventLandingPage.md new file mode 100644 index 00000000000..48c486a9e07 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/GPUEventLandingPage.md @@ -0,0 +1,14 @@ +# GPU Event Blocks + +Spawn new particles from Trigger Blocks in Update or Initialize Contexts. + +| **Page** | **Description** | +| --- | --- | +| [Trigger Event Always](Block-TriggerEventAlways.md) | Spawns particles every frame. | +| [Trigger Event On Die](Block-TriggerEventOnDie.md) | Spawns particles when a particle dies. | +| [Trigger Event Rate](Block-TriggerEventRate.md) | Spawns particles at a specified rate. | + +## Additional resources + +- [GPU Event](Context-GPUEvent.md) +- [Collision Blocks reference](Block-Collision-LandingPage.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Geometry.md b/Packages/com.unity.visualeffectgraph/Documentation~/Geometry.md new file mode 100644 index 00000000000..8dc84da86b8 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Geometry.md @@ -0,0 +1,29 @@ +# Geometry Operators + +Perform geometric calculations and transformations. + +| **Page** | **Description** | +| --- | --- | +| [Area (Circle)](Operator-Area(Circle).md) | Calculate the area of a circle. | +| [Change Space](Operator-ChangeSpace.md) | Convert a vector from local space to world space. | +| [Distance (Line)](Operator-Distance(Line).md) | Calculate the distance between a position and the closest point on a line. | +| [Distance (Plane)](Operator-Distance(Plane).md) | Calculate the distance between a position and the closest point on a plane. | +| [Distance (Sphere)](Operator-Distance(Sphere).md) | Calculate the distance between a position and the closest point on a sphere. | +| [InvertTRS (Matrix)](Operator-InvertTRS(Matrix).md) | Invert a matrix that contains translation, rotation, and scaling. | +| [Transform (Direction)](Operator-Transform(Direction).md) | Change the position, rotation, or scale of a direction vector. | +| [Transform (Matrix)](Operator-Transform(Matrix).md) | Change the position, rotation, or scale of a matrix. | +| [Transform (Position)](Operator-Transform(Position).md) | Change the position, rotation, or scale of a position. | +| [Transform (Vector)](Operator-Transform(Vector).md) | Change the position, rotation, or scale of a vector. | +| [Transform (Vector4)](Operator-Transform(Vector4).md) | Change the position, rotation, or scale of a Vector4. | +| [Transpose (Matrix)](Operator-Transpose(Matrix).md) | Flip a matrix across its diagonal, to swap columns with rows. | +| [Volume (Axis Aligned Box)](Operator-Volume(AxisAlignedBox).md) | Calculate the volume of an axis-aligned box. | +| [Volume (Cone)](Operator-Volume(Cone).md) | Calculate the volume of a cone. | +| [Volume (Cylinder)](Operator-Volume(Cylinder).md) | Calculate the volume of a cylinder. | +| [Volume (Oriented Box)](Operator-Volume(OrientedBox).md) | Calculate the volume of an oriented box. | +| [Volume (Sphere)](Operator-Volume(Sphere).md) | Calculate the volume of a sphere. | +| [Volume (Torus)](Operator-Volume(Torus).md) | Calculate the volume of a torus. | + +## Additional resources + +- [VFX type reference](VisualEffectGraphTypeReference.md) + diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Implicit.md b/Packages/com.unity.visualeffectgraph/Documentation~/Implicit.md new file mode 100644 index 00000000000..f60a6095f58 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Implicit.md @@ -0,0 +1,14 @@ +# Implicit Integration Blocks + +Update the position and rotation of particles. + +| **Page** | **Description** | +| --- | --- | +| [Integration: Update Position](Block-UpdatePosition.md) | Update the positions of particles. | +| [Integration: Update Rotation](Block-UpdateRotation.md) | Update the rotation of particles. | + +## Additional resources + +- [Update Context](Context-Update.md) +- [Velocity Blocks](Velocity.md) +- [Force Blocks](Force.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Inline.md b/Packages/com.unity.visualeffectgraph/Documentation~/Inline.md new file mode 100644 index 00000000000..32469a03974 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Inline.md @@ -0,0 +1,47 @@ +# Inline Operators + +Store values, vectors, shapes, and textures in a graph. + +| **Page** | **Description** | +| --- | --- | +| [AABox](Operator-InlineAABox.md) | Store an axis-aligned 3D box. | +| [AnimationCurve](Operator-InlineAnimationCurve.md) | Store an animation curve. | +| [ArcCircle](Operator-InlineArcCircle.md) | Store a segment of a circle. | +| [ArcCone](Operator-InlineArcCone.md) | Store a segment of a cone. | +| [ArcSphere](Operator-InlineArcSphere.md) | Store a segment of a sphere. | +| [ArcTorus](Operator-InlineArcTorus.md) | Store a segment of a torus. | +| [bool](Operator-Inlinebool.md) | Store a Boolean. | +| [Camera](Operator-InlineCamera.md) | Store a camera. | +| [Circle](Operator-InlineCircle.md) | Store a circle. | +| [Color](Operator-InlineColor.md) | Store a color. | +| [Cone](Operator-InlineCone.md) | Store a cone. | +| [Cubemap](Operator-InlineCubemap.md) | Store a cubemap texture. | +| [CubemapArray](Operator-InlineCubemapArray.md) | Store a cubemap array. | +| [Cylinder](Operator-InlineCylinder.md) | Store a cylinder. | +| [Direction](Operator-InlineDirection.md) | Store a direction. | +| [FlipBook](Operator-InlineFlipBook.md) | Store a flipbook texture. | +| [float](Operator-Inlinefloat.md) | Store a float. | +| [Gradient](Operator-InlineGradient.md) | Store a gradient. | +| [int](Operator-Inlineint.md) | Store an integer. | +| [Line](Operator-InlineLine.md) | Store a line. | +| [Matrix4x4](Operator-InlineMatrix4x4.md) | Store a 4x4 matrix. | +| [Mesh](Operator-InlineMesh.md) | Store a mesh. | +| [OrientedBox](Operator-InlineOrientedBox.md) | Store an oriented box. | +| [Plane](Operator-InlinePlane.md) | Store a plane. | +| [Position](Operator-InlinePosition.md) | Store a position. | +| [Sphere](Operator-InlineSphere.md) | Store a sphere. | +| [TerrainType](Operator-InlineTerrainType.md) | Store a terrain type. | +| [Texture2D](Operator-InlineTexture2D.md) | Store a 2D texture. | +| [Texture2DArray](Operator-InlineTexture2DArray.md) | Store a 2D texture array. | +| [Texture3D](Operator-InlineTexture3D.md) | Store a 3D texture. | +| [Torus](Operator-InlineTorus.md) | Store a torus. | +| [Transform](Operator-InlineTransform.md) | Store position, rotation, and scale. | +| [uint](Operator-Inlineuint.md) | Store an unsigned integer. | +| [Vector](Operator-InlineVector.md) | Store a vector with one dimension. | +| [Vector2](Operator-InlineVector2.md) | Store a vector with two dimensions. | +| [Vector3](Operator-InlineVector3.md) | Store a vector with three dimensions. | +| [Vector4](Operator-InlineVector4.md) | Store a vector with four dimensions. | + +## Additional resources + +- [VFX type reference](VisualEffectGraphTypeReference.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Kill.md b/Packages/com.unity.visualeffectgraph/Documentation~/Kill.md new file mode 100644 index 00000000000..c19616de953 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Kill.md @@ -0,0 +1,12 @@ +# Kill Blocks + +Destroy particles inside or outside a shape. + +| **Page** | **Description** | +| --- | --- | +| [Kill (AABox)](Block-Kill(AABox).md) | Destroys particles inside or outside axis-aligned box shape. | +| [Kill (Sphere)](Block-Kill(Sphere).md) | Destroys particles inside or outside a spherical shape. | + +## Additional resources + +- [Collision Blocks reference](Block-Collision-LandingPage.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Logic.md b/Packages/com.unity.visualeffectgraph/Documentation~/Logic.md new file mode 100644 index 00000000000..1cf970c8ec1 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Logic.md @@ -0,0 +1,20 @@ +# Logic Operators + +Perform Boolean operations and conditional branching. + +| **Page** | **Description** | +| --- | --- | +| [And](Operator-LogicAnd.md) | Output `true` if both inputs are `true`. | +| [Branch](Operator-Branch.md) | Test a Boolean and return different values for `true` and `false`. | +| [Compare](Operator-Compare.md) | Compare two floats based on a condition and return the result as a Boolean. | +| [Nand](Operator-LogicNand.md) | Output `true` if at least one input is `false`. | +| [Nor](Operator-LogicNor.md) | Output `true` if both inputs are `false`. | +| [Not](Operator-LogicNot.md) | Output `true` if an input is `false`, and vice versa. | +| [Or](Operator-LogicOr.md) | Output `true` if either input is `true`. | +| [Probability Sampling](Operator-ProbabilitySampling.md) | Select an output at random with custom weights. | +| [Switch](Operator-Switch.md) | Compare an input to case values, and output a value depending on the case. | + +## Additional resources + +- [Bitwise Operators](Bitwise.md) + diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Math.md b/Packages/com.unity.visualeffectgraph/Documentation~/Math.md new file mode 100644 index 00000000000..735e80e7615 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Math.md @@ -0,0 +1,22 @@ +# Math Operators + +Perform calculations, conversions, and transformations. + +| **Page** | **Description** | +| --- | --- | +| [Arithmetic](Arithmetic.md) | Perform mathematical calculations on input data. | +| [Clamp](Clamp.md) | Clamp, round, or limit values. | +| [Constants](Constants.md) | Get mathematical constants. | +| [Coordinates](Coordinates.md) | Convert between coordinate systems. | +| [Exp](Operator-Exp.md) | Raise a number to a specified power. | +| [Geometry](Geometry.md) | Perform geometric calculations and transformations. | +| [Log](Operator-Log.md) | Calculate the logarithm of a number. | +| [Remap](Remap.md) | Remap values between ranges. | +| [Trigonometry](Trigonometry.md) | Perform trigonometric calculations. | +| [Vector](Vector.md) | Perform vector and matrix calculations. | +| [Wave](Wave.md) | Generate waveforms, for example to control the behavior of particles over time. | + +## Additional resources + +- [Bitwise Operators](Bitwise.md) +- [Logic Operators](Logic.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Noise.md b/Packages/com.unity.visualeffectgraph/Documentation~/Noise.md new file mode 100644 index 00000000000..18b6fca2f83 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Noise.md @@ -0,0 +1,18 @@ +# Noise Operators + +Generate procedural noise patterns, for example to control the behavior of particles over time. + +| **Page** | **Description** | +| --- | --- | +| [Cellular Noise](Operator-CellularNoise.md) | Generate noise with cell-like patterns. | +| [Perlin Noise](Operator-PerlinNoise.md) | Generate noise with a smooth, natural variation. | +| [Value Noise](Operator-ValueNoise.md) | Generate noise with simple interpolated values. | +| [Cellular Curl Noise](Operator-CellularCurlNoise.md) | Create cell-like patterns that simulate fluid or gas. | +| [Perlin Curl Noise](Operator-PerlinCurlNoise.md) | Generate noise that simulates a fluid or gas with smooth variations. | +| [Value Curl Noise](Operator-ValueCurlNoise.md) | Generate noise that simulates a fluid or gas with simple interpolated values. | + +## Additional resources + +- [Wave Operators](Wave.md) +- [Random Number](Operator-RandomNumber.md) +- [Sampling Operators](Sampling.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Operator.md b/Packages/com.unity.visualeffectgraph/Documentation~/Operator.md new file mode 100644 index 00000000000..3ab1a22701d --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Operator.md @@ -0,0 +1,28 @@ +# Operators + +Calculate, convert, and manipulate data for particles and effects. + +| **Page** | **Description** | +| --- | --- | +| [Attribute Operators](OperatorAttribute.md) | Get the data from particle attributes. | +| [Bitwise Operators](Bitwise.md) | Perform bitwise logical operations on inputs. | +| [Built-in Operators](Builtin.md) | Get time, frame indices, camera data, and coordinates. | +| [Camera Operators](Camera.md) | Convert positions between view space and world space. | +| [Color Operators](Color.md) | Output and convert color values. | +| [Inline Operators](Inline.md) | Store values, vectors, shapes, and textures. | +| [Logic Operators](Logic.md) | Perform Boolean operations and conditional branching. | +| [Math](Math.md) | Perform mathematical calculations on input data. | +| [Noise Operators](Noise.md) | Generate procedural noise patterns, for example to control the behavior of particles over time. | +| [Random > Random Number](Operator-RandomNumber.md) | Generate random values. | +| [Sampling Operators](Sampling.md) | Fetch data from buffers, meshes, and textures. | +| [Spawn State](Operator-SpawnState.md) | Get information such as the number of particles spawned in the current frame, and the duration of the spawn loop. | +| [Point Cache](Operator-PointCache.md) | Get the attribute maps and point count stored in a Point Cache. | + +## Additional resources + +- [Operators (Graph Logic & Philosophy)](Operators.md) +- [Arithmetic Operators](Arithmetic.md) +- [Vector Operators](Vector.md) + + + diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/OperatorAttribute.md b/Packages/com.unity.visualeffectgraph/Documentation~/OperatorAttribute.md new file mode 100644 index 00000000000..44325d6053e --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/OperatorAttribute.md @@ -0,0 +1,41 @@ +# Attribute Operators + +Get the data from [particle attributes](Attributes.md). + +| **Page** | **Description** | +| --- | --- | +| [Age Over Lifetime](Operator-AgeOverLifetime.md) | Get the age of a particle relative to its lifetime. | +| [Get Attribute: age](Operator-GetAttributeAge.md) | Get the time since a particle spawned. | +| [Get Attribute: alive](Operator-GetAttributeAlive.md) | Get whether a particle is alive or not. | +| [Get Attribute: alpha](Operator-GetAttributeAlpha.md) | Get the alpha value of a rendered particle. | +| [Get Attribute: angle](Operator-GetAttributeAngle.md) | Get the rotation of a particle. | +| [Get Attribute: angularVelocity](Operator-GetAttributeAngularVelocity.md) | Get the rotation speed of a particle. | +| [Get Attribute: axisX](Operator-GetAttributeAxisX.md) | Get the x-axis of a particle. | +| [Get Attribute: axisY](Operator-GetAttributeAxisY.md) | Get the y-axis of a particle. | +| [Get Attribute: axisZ](Operator-GetAttributeAxisZ.md) | Get the z-axis of a particle. | +| [Get Attribute: color](Operator-GetAttributeColor.md) | Get the color of a particle. | +| [Get Attribute: direction](Operator-GetAttributeDirection.md) | Get the direction of a particle. | +| [Get Attribute: lifetime](Operator-GetAttributeLifetime.md) | Get the amount of time a particle should live for. | +| [Get Attribute: mass](Operator-GetAttributeMass.md) | Get the mass of a particle. | +| [Get Attribute: oldPosition](Operator-GetAttributeOldPosition.md) | Get the position of a particle before velocity is added. | +| [Get Attribute: particleCountInStrip](Operator-GetAttributeParticleCountInStrip.md) | Get the number of particles in a particle strip. | +| [Get Attribute: particleId](Operator-GetAttributeParticleID.md) | Get a unique ID that identifies a particle. | +| [Get Attribute: particleIndexInStrip](Operator-GetAttributeParticleIndexInStrip.md) | Get the index of a particle in its particle strip. | +| [Get Attribute: pivot](Operator-GetAttributePivot.md) | Get the origin coordinates of a particle. | +| [Get Attribute: position](Operator-GetAttributePosition.md) | Get the position of a particle. | +| [Get Attribute: scale](Operator-GetAttributeScale.md) | Get the scale of the particle. | +| [Get Attribute: seed](Operator-GetAttributeSeed.md) | Get the random number value of a particle. | +| [Get Attribute: size](Operator-GetAttributeSize.md) | Get the size of a particle. | +| [Get Attribute: spawnIndex](Operator-GetAttributeSpawnIndex.md) | Get the index of a particle when it spawned. | +| [Get Attribute: spawnTime](Operator-GetAttributeSpawnTime.md) | Get the time that the particle spawned. | +| [Get Attribute: stripIndex](Operator-GetAttributeStripIndex.md) | Get the index of the particle strip a particle belongs to. | +| [Get Attribute: targetPosition](Operator-GetAttributeTargetPosition.md) | Get the target coordinates of a particle. | +| [Get Attribute: texIndex](Operator-GetAttributeTexIndex.md) | Get the frame number from a flipbook texture a particle uses. | +| [Get Attribute: velocity](Operator-GetAttributeVelocity.md) | Get the current velocity of a particle. | +| [Get Custom Attribute](Operator-GetCustomAttribute.md) | Get the value of a custom attribute. | + +## Additional resources + +- [Attributes](Attributes.md) +- [Standard Attribute Reference](Reference-Attributes.md) +- [Attribute Blocks](Attribute.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Orientation.md b/Packages/com.unity.visualeffectgraph/Documentation~/Orientation.md new file mode 100644 index 00000000000..d081a1a655e --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Orientation.md @@ -0,0 +1,14 @@ +# Orientation Blocks + +Change the direction that particles face. + +| **Page** | **Description** | +| --- | --- | +| [Connect Target](Block-ConnectTarget.md) | Scale and rotate particles so they connect to a specified target position. | +| [Orient: Face [Mode]](Block-Orient.md) | Rotate particles so they face a particular direction. | + +## Additional resources + +- [Implicit Integration Blocks](Implicit.md) +- [Velocity Blocks](Velocity.md) + diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Output.md b/Packages/com.unity.visualeffectgraph/Documentation~/Output.md new file mode 100644 index 00000000000..cd64badda74 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Output.md @@ -0,0 +1,14 @@ +# Output Blocks + +Control particle output and rendering. + +| **Page** | **Description** | +| --- | --- | +| [Camera Fade](Block-CameraFade.md) | Fade out particles when they're too close to the near plane of the camera. | +| [Subpixel Anti-Aliasing](Block-SubpixelAntiAliasing.md) | Enlarge particles to ensure they cover at least one pixel on-screen. | + +## Additional resources + +- [Output Mesh](Context-OutputMesh.md) +- [Output Particle Mesh](Context-OutputParticleMesh.md) +- [Output Particle Point](Context-OutputPoint.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/PipelineTools.md b/Packages/com.unity.visualeffectgraph/Documentation~/PipelineTools.md new file mode 100644 index 00000000000..66c9eb85843 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/PipelineTools.md @@ -0,0 +1,17 @@ +# Pipeline tools + +Explore tools and techniques for working with complex shapes and custom behaviors. + +| **Page** | **Description** | +| --- | --- | +| [Representing Complex Shapes](representing-complex-shapes.md) | Use Signed Distance Fields (SDFs) and Point Caches to create complex shapes. | +| [ExposedProperty Helper](ExposedPropertyHelper.md) | Store and access properties in shaders. | +| [Vector Fields](VectorFields.md) | Use 3D shapes as 3D textures to control the behavior of particles. | +| [Spawner Callbacks](SpawnerCallbacks.md) | Use a C# API to control spawning, and access the spawn count and spawn events. | + +## Additional resources +- [Point Caches in the Visual Effect Graph](point-cache-in-vfx-graph.md) +- [Point Cache Bake Tool](point-cache-bake-tool.md) +- [Signed Distance Fields in the Visual Effect Graph](sdf-in-vfx-graph.md) + + diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Reference.md b/Packages/com.unity.visualeffectgraph/Documentation~/Reference.md new file mode 100644 index 00000000000..cbf86c6fff4 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Reference.md @@ -0,0 +1,15 @@ +# Reference + +Explore the standard attributes and types in Visual Effect Graph. + +| **Type** | **Description** | +| --- | --- | +| [Standard Attributes](Reference-Attributes.md) | Explore the attributes that contain the position, direction, appearance, and lifetime of a particle. | +| [Types](VisualEffectGraphTypeReference.md) | Explore types, including standard types and advanced types. | + +## Additional resources + +- [Attributes](Attributes.md) +- [Properties](Properties.md) + + diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Remap.md b/Packages/com.unity.visualeffectgraph/Documentation~/Remap.md new file mode 100644 index 00000000000..6627793f678 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Remap.md @@ -0,0 +1,9 @@ +# Remap Operators + +Remap values to different ranges. + +| **Page** | **Description** | +| --- | --- | +| [Remap](Operator-Remap.md) | Remap input values from an old range to a new range. | +| [Remap [0..1] => [-1..1]](Operator-Remap(-11).md) | Remap input values from 0 to 1 range, to -1 to 1 range. | +| [Remap [-1..1] => [0..1]](Operator-Remap(01).md) | Remap input values from -1 to 1 range, to 0 to 1 range. | \ No newline at end of file diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Sampling.md b/Packages/com.unity.visualeffectgraph/Documentation~/Sampling.md new file mode 100644 index 00000000000..bc8d42cc5c8 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Sampling.md @@ -0,0 +1,38 @@ +# Sampling Operators + +Fetch data from buffers, meshes, and textures. + +| **Page** | **Description** | +| --- | --- | +| [Buffer Count](Operator-BufferCount.md) | Get the number of elements in a `GraphicsBuffer`. | +| [Get Texture Dimensions](Operator-GetTextureDimensions.md) | Get the dimensions of a texture. | +| [Load CameraBuffer](Operator-LoadCameraBuffer.md) | Get a `CameraBuffer` texel value for specified coordinates. | +| [Mesh Index Count](Operator-MeshIndexCount.md) | Get the number of indices in a mesh. | +| [Mesh Vertex Count](Operator-MeshVertexCount.md) | Get the number of vertices in a mesh. | +| [Load Texture2D](Operator-LoadTexture2D.md) | Sample a 2D texture. | +| [Load Texture2DArray](Operator-LoadTexture2DArray.md) | Sample a 2D texture array. | +| [Load Texture3D](Operator-LoadTexture3D.md) | Sample a 3D texture. | +| [Position (Depth)](Operator-Position(Depth).md) | Sample the depth buffer of the camera. | +| [Sample Buffer](Operator-SampleBuffer.md) | Fetch and sample a structured `GraphicsBuffer`. | +| [Sample CameraBuffer](Operator-SampleCameraBuffer.md) | Sample the camera buffer using pixel dimensions and UVs. | +| [Sample Curve](Operator-SampleCurve.md) | Sample a curve. | +| [Sample Gradient](Operator-SampleGradient.md) | Sample a gradient. | +| [Sample Mesh](Operator-SampleMesh.md) | Get the vertex data of a mesh. | +| [Sample Mesh Index](Operator-SampleMeshIndex.md) | Get the index buffer data of geometry. | +| [Sample Skinned Mesh](Operator-SampleMesh.md) | Get the vertex data of a skinned mesh. | +| [Sample Skinned Mesh Renderer Index](Operator-SampleMesh.md) | Get the index data of a skinned mesh renderer. | +| [Sample Signed Distance Field](Operator-SampleSDF.md) | Get the distance field stored in a 3D texture. | +| [Sample Texture2D](Operator-SampleTexture2D.md) | Sample a 2D texture using UV coordinates and mipmap level. | +| [Sample Texture2DArray](Operator-SampleTexture2DArray.md) | Sample a 2D texture array using a slice, UV coordinates, and mipmap level. | +| [Sample Texture3D](Operator-SampleTexture3D.md) | Sample a 3D texture using UV coordinates and mipmap level. | +| [Sample TextureCube](Operator-SampleTextureCube.md) | Sample a cubemap texture using a direction vector and mipmap level. | +| [Sample TextureCubeArray](Operator-SampleTextureCubeArray.md) | Sample a cubemap array using a slice, direction vector, and mipmap level. | +| [Skinned Mesh Index Count](Operator-MeshIndexCount.md) | Get the number of indices in a skinned mesh. | +| [Skinned Mesh Vertex Count](Operator-MeshVertexCount.md) | Get the number of vertices in a skinned mesh. | + +## Additional resources + +- [Noise Operators](Noise.md) +- [Wave Operators](Wave.md) +- [Random Number](Operator-RandomNumber.md) + diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/ShaderGraphIntegration.md b/Packages/com.unity.visualeffectgraph/Documentation~/ShaderGraphIntegration.md new file mode 100644 index 00000000000..9ef6bf5b783 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/ShaderGraphIntegration.md @@ -0,0 +1,13 @@ +# Shader Graph integration + +Use [Shader Graph](https://docs.unity3d.com/Manual/shader-graph.html) to create custom shaders for visual effects. + +| **Page** | **Description** | +| --- | --- | +| [Working with Shader Graph in Visual Effect Graph](sg-working-with.md) | Make a shader graph compatible with Visual Effect Graph, and use it to render particles. | +| [Visual Effect Target](sg-target-visual-effect.md) | Create custom lit and unlit shader graphs to use in visual effects. This feature is deprecated and will be removed in a future release. | + +## Additional resources + +- [Working with Shader Graph in Visual Effect Graph](sg-working-with.md) +- [Visual Effect Target](sg-target-visual-effect.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/SharedOutputSettings.md b/Packages/com.unity.visualeffectgraph/Documentation~/SharedOutputSettings.md new file mode 100644 index 00000000000..d0b4e59e0f2 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/SharedOutputSettings.md @@ -0,0 +1,14 @@ +# Shared Output Settings + +Explore the settings that appear in multiple outputs in Visual Effect Graph. + +| Page | Description | +|-|-| +|[Global Settings](Context-OutputSharedSettings.md)|Explore the settings and property that all outputs share. | +|[Lit Output Settings](Context-OutputLitSettings.md)|Explore outputs that receive lighting information, and support texture and material types that relate to lighting. | + +## Additional resources + +- [Output Blocks](Output.md) +- [Output Event Handlers](OutputEventHandlers.md) + diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Spawn.md b/Packages/com.unity.visualeffectgraph/Documentation~/Spawn.md new file mode 100644 index 00000000000..4d881dd1710 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Spawn.md @@ -0,0 +1,18 @@ +# Spawn Blocks + +Customize behavior for spawning particles. + +| **Page** | **Description** | +| --- | --- | +| [Constant Spawn Rate](Block-ConstantRate.md) | Spawn a specific number of particles per second. | +| [Single Burst](Block-Burst.md) | Use the Single/Periodic Burst Block to spawn particles instantly either once, or periodically using a delay. | +| [Periodic Burst](Block-Burst.md) | Use the Single/Periodic Burst Block to spawn particles at regular intervals. | +| [Variable Spawn Rate](Block-VariableRate.md) | Spawn a variable number of particles per second. | +| [Attribute > Set Spawn Event ](Block-SetSpawnEvent.md) | Modify the content of attributes stored in the Context event attribute. | +| [Custom](CustomSpawn.md) | Explore blocks that let you customize advanced behavior for spawning particles. | + +## Additional resources + +- [Spawn](Context-Spawn.md) +- [Spawner Callbacks](SpawnerCallbacks.md) +- [Events](Events.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/TableOfContents.md b/Packages/com.unity.visualeffectgraph/Documentation~/TableOfContents.md index cb405af191a..c9087d6286a 100644 --- a/Packages/com.unity.visualeffectgraph/Documentation~/TableOfContents.md +++ b/Packages/com.unity.visualeffectgraph/Documentation~/TableOfContents.md @@ -30,10 +30,10 @@ * [Property Binders](PropertyBinders.md) * [Event Binders](EventBinders.md) * [Output Event Handlers](OutputEventHandlers.md) -* Shader Graph Integration +* [Shader Graph Integration](ShaderGraphIntegration.md) * [Shader Graphs in Visual Effects](sg-working-with.md) * [Visual Effect Target](sg-target-visual-effect.md) -* Pipeline Tools +* [Pipeline Tools](PipelineTools.md) * [Representing Complex Shapes](representing-complex-shapes.md) * [Signed Distance Fields](sdf-in-vfx-graph.md) * [SDF Bake Tool](sdf-bake-tool.md) @@ -46,7 +46,7 @@ * [Vector Fields](VectorFields.md) * [Spawner Callbacks](SpawnerCallbacks.md) * [Node Library](node-library.md) - * Context + * [Context](Context.md) * [Event](Context-Event.md) * [GPU Event](Context-GPUEvent.md) * [Initialize Particle](Context-Initialize.md) @@ -58,28 +58,26 @@ * [Output Particle HDRP Lit Decal](Context-OutputParticleHDRPLitDecal.md) * [Output Point](Context-OutputPoint.md) * [Output Primitive](Context-OutputPrimitive.md) - * Shared Output Settings + * [Shared Output Settings](SharedOutputSettings.md) * [Global Settings](Context-OutputSharedSettings.md) * [Lit Output Settings](Context-OutputLitSettings.md) * [Spawn](Context-Spawn.md) * [Update Particle](Context-Update.md) - * Block - * Attribute + * [Block](Block.md) + * [Attribute](Attribute.md) * [Curve](Block-SetAttributeFromCurve.md) - * Derived - * [Calculate Mass from Volume](Block-CalculateMassFromVolume.md) + * [Derived > Calculate Mass from Volume](Block-CalculateMassFromVolume.md) * [Map](Block-SetAttributeFromMap.md) * [Set](Block-SetAttribute.md) - * Collision + * [Collision](Block-Collision-LandingPage.md) * [Collide with AABox](Block-CollideWithAABox.md) * [Collide with Cone](Block-CollideWithCone.md) * [Collide with Depth Buffer](Block-CollideWithDepthBuffer.md) * [Collide with Plane](Block-CollideWithPlane.md) * [Collide with Signed Distance Field](Block-CollideWithSignedDistanceField.md) * [Collide with Sphere](Block-CollideWithSphere.md) - * Flipbook - * [Flipbook Player](Block-FlipbookPlayer.md) - * Force + * [Flipbook > Flipbook Player](Block-FlipbookPlayer.md) + * [Force](Force.md) * [Conform to Signed Distance Field](Block-ConformToSignedDistanceField.md) * [Conform to Sphere](Block-ConformToSphere.md) * [Force](Block-Force.md) @@ -87,27 +85,27 @@ * [Linear Drag](Block-LinearDrag.md) * [Turbulence](Block-Turbulence.md) * [Vector Force Field](Block-VectorForceField.md) - * GPU Event + * [GPU Event](GPUEventLandingPage.md) * [Trigger Event Always](Block-TriggerEventAlways.md) * [Trigger Event On Die](Block-TriggerEventOnDie.md) * [Trigger Event Rate](Block-TriggerEventRate.md) - * Implicit + * [Implicit](Implicit.md) * [Integration : Update Position](Block-UpdatePosition.md) * [Integration : Update Rotation](Block-UpdateRotation.md) - * Kill + * [Kill](Kill.md) * [Kill (AABox)](Block-Kill(AABox).md) * [Kill (Sphere)](Block-Kill(Sphere).md) - * Orientation + * [Orientation](Orientation.md) * [Connect Target](Block-ConnectTarget.md) * [Orient](Block-Orient.md) - * Output + * [Output](Output.md) * [Camera Fade](Block-CameraFade.md) * [Subpixel Anti-Aliasing](Block-SubpixelAntiAliasing.md) - * Position + * [Set Position Blocks](Block-SetPositionShape-LandingPage.md) * [Set Position (Depth)](Block-SetPosition(Depth).md) - * [Position (Mesh)](Block-SetPosition(Mesh).md) - * [Position (Signed Distance Field)](Block-SetPosition(SignedDistanceField).md) - * [Position (Skinned Mesh)](Block-SetPosition(Mesh).md) + * [Set Position (Mesh)](Block-SetPosition(Mesh).md) + * [Set Position (Signed Distance Field)](Block-SetPosition(SignedDistanceField).md) + * [Set Position (Skinned Mesh)](Block-SetPosition(Mesh).md) * [Set Position (Sequential : Circle)](Block-SetPosition(Sequential).md) * [Set Position (Sequential : Line)](Block-SetPosition(Sequential).md) * [Set Position (Sequential : ThreeDimensional)](Block-SetPosition(Sequential).md) @@ -118,27 +116,25 @@ * [Set Position (Shape : Sphere)](Block-SetPosition(Sphere).md) * [Set Position (Sequential)](Block-SetPosition(Sequential).md) * [Tile/Warp Positions](Block-TileWarpPositions.md) - * Size - * [Screen Space Size](Block-ScreenSpaceSize.md) - * Spawn + * [Size > Screen Space Size](Block-ScreenSpaceSize.md) + * [Spawn](Spawn.md) * [Constant Spawn Rate](Block-ConstantRate.md) * [Periodic Burst](Block-Burst.md) * [Single Burst](Block-Burst.md) * [Variable Spawn Rate](Block-VariableRate.md) - * Attribute - * [Set Spawn Event \](Block-SetSpawnEvent.md) - * Custom + * [Attribute > Set Spawn Event \](Block-SetSpawnEvent.md) + * [Custom Spawn Blocks](CustomSpawn.md) * [Increment Strip Index On Start](Block-IncrementStripIndexOnStart.md) * [Set Spawn Time](Block-SetSpawnTime.md) * [Spawn Over Distance](Block-SpawnOverDistance.md) - * Velocity + * [Velocity](Velocity.md) * [Velocity from Direction & Speed (Change Speed)](Block-VelocityFromDirectionAndSpeed(ChangeSpeed).md) * [Velocity from Direction & Speed (New Direction)](Block-VelocityFromDirectionAndSpeed(NewDirection).md) * [Velocity from Direction & Speed (Random Direction)](Block-VelocityFromDirectionAndSpeed(RandomDirection).md) * [Velocity from Direction & Speed (Spherical)](Block-VelocityFromDirectionAndSpeed(Spherical).md) * [Velocity from Direction & Speed (Tangent)](Block-VelocityFromDirectionAndSpeed(Tangent).md) - * Operator - * Attribute + * [Operator](Operator.md) + * [Attribute](OperatorAttribute.md) * [Age Over Lifetime](Operator-AgeOverLifetime.md) * [Get Attribute: age](Operator-GetAttributeAge.md) * [Get Attribute: alive](Operator-GetAttributeAlive.md) @@ -168,29 +164,29 @@ * [Get Attribute: texIndex](Operator-GetAttributeTexIndex.md) * [Get Attribute: velocity](Operator-GetAttributeVelocity.md) * [Get Custom Attribute](Operator-GetCustomAttribute.md) - * Bitwise + * [Bitwise](Bitwise.md) * [And](Operator-BitwiseAnd.md) * [Complement](Operator-BitwiseComplement.md) * [Left Shift](Operator-BitwiseLeftShift.md) * [Or](Operator-BitwiseOr.md) * [Right Shift](Operator-BitwiseRightShift.md) * [Xor](Operator-BitwiseXor.md) - * Builtin + * [Built-in](Builtin.md) * [Delta Time](Operator-DeltaTime.md) * [Frame Index](Operator-FrameIndex.md) * [Local to World](Operator-LocalToWorld.md) - * [Main Camera](Operator-MainCamera.md) * [System Seed](Operator-SystemSeed.md) * [Total Time](Operator-TotalTime.md) * [World to Local](Operator-WorldToLocal.md) - * Camera + * [Camera](Camera.md) + * [Main Camera](Operator-MainCamera.md) * [Viewport to World Point](Operator-ViewportToWorldPoint.md) * [World to Viewport Point](Operator-WorldToViewportPoint.md) - * Color + * [Color](Color.md) * [Color Luma](Operator-ColorLuma.md) * [HSV to RGB](Operator-HSVToRGB.md) * [RBG to HSV](Operator-RGBToHSV.md) - * Inline + * [Inline](Inline.md) * [AABox](Operator-InlineAABox.md) * [AnimationCurve](Operator-InlineAnimationCurve.md) * [ArcCircle](Operator-InlineArcCircle.md) @@ -228,7 +224,7 @@ * [Vector2](Operator-InlineVector2.md) * [Vector3](Operator-InlineVector3.md) * [Vector4](Operator-InlineVector4.md) - * Logic + * [Logic](Logic.md) * [And](Operator-LogicAnd.md) * [Branch](Operator-Branch.md) * [Compare](Operator-Compare.md) @@ -238,8 +234,8 @@ * [Or](Operator-LogicOr.md) * [Probability Sampling](Operator-ProbabilitySampling.md) * [Switch](Operator-Switch.md) - * Math - * Arithmetic + * [Math](Math.md) + * [Arithmetic](Arithmetic.md) * [Absolute](Operator-Absolute.md) * [Add](Operator-Add.md) * [Divide](Operator-Divide.md) @@ -257,7 +253,7 @@ * [Square Root](Operator-SquareRoot.md) * [Step](Operator-Step.md) * [Subtract](Operator-Subtract.md) - * Clamp + * [Clamp](Clamp.md) * [Ceiling](Operator-Ceiling.md) * [Clamp](Operator-Clamp.md) * [Discretize](Operator-Discretize.md) @@ -266,17 +262,16 @@ * [Minimum](Operator-Minimum.md) * [Round](Operator-Round.md) * [Saturate](Operator-Saturate.md) - * Constants + * [Constants](Constants.md) * [Epsilon](Operator-Epsilon.md) * [Pi](Operator-Pi.md) - * Coordinates + * [Coordinates](Coordinates.md) * [Polar to Rectangular](Operator-PolarToRectangular.md) * [Rectangular to Polar](Operator-RectangularToPolar.md) * [Rectangular to Spherical](Operator-RectangularToSpherical.md) * [Spherical to Rectangular](Operator-SphericalToRectangular.md) - * Exp - * [Exp](Operator-Exp.md) - * Geometry + * [Exp](Operator-Exp.md) + * [Geometry](Geometry.md) * [Area (Circle)](Operator-Area(Circle).md) * [Change Space](Operator-ChangeSpace.md) * [Distance (Line)](Operator-Distance(Line).md) @@ -295,13 +290,12 @@ * [Volume (Oriented Box)](Operator-Volume(OrientedBox).md) * [Volume (Sphere)](Operator-Volume(Sphere).md) * [Volume (Torus)](Operator-Volume(Torus).md) - * Log - * [Log](Operator-Log.md) - * Remap + * [Log](Operator-Log.md) + * [Remap](Remap.md) * [Remap](Operator-Remap.md) * [Remap [0..1] => [-1..1]](Operator-Remap(-11).md) * [Remap [-1..1] => [0..1]](Operator-Remap(01).md) - * Trigonometry + * [Trigonometry](Trigonometry.md) * [Acos](Operator-Acos.md) * [Asin](Operator-Asin.md) * [Atan](Operator-Atan.md) @@ -309,7 +303,7 @@ * [Cosine](Operator-Cosine.md) * [Sine](Operator-Sine.md) * [Tangent](Operator-Tangent.md) - * Vector + * [Vector](Vector.md) * [Append Vector](Operator-AppendVector.md) * [Construct Matrix](Operator-ConstructMatrix.md) * [Cross Product](Operator-CrossProduct.md) @@ -324,21 +318,20 @@ * [Squared Distance](Operator-SquaredDistance.md) * [Squared Length](Operator-SquaredLength.md) * [Swizzle](Operator-Swizzle.md) - * Wave + * [Wave](Wave.md) * [Sawtooth Wave](Operator-SawtoothWave.md) * [Sine Wave](Operator-SineWave.md) * [Square Wave](Operator-SquareWave.md) * [Triangle Wave](Operator-TriangleWave.md) - * Noise + * [Noise](Noise.md) * [Cellular Curl Noise](Operator-CellularCurlNoise.md) * [Cellular Noise](Operator-CellularNoise.md) * [Perlin Curl Noise](Operator-PerlinCurlNoise.md) * [Perlin Noise](Operator-PerlinNoise.md) * [Value Curl Noise](Operator-ValueCurlNoise.md) * [Value Noise](Operator-ValueNoise.md) - * Random - * [Random Number](Operator-RandomNumber.md) - * Sampling + * [Random > Random Number](Operator-RandomNumber.md) + * [Sampling](Sampling.md) * [Buffer Count](Operator-BufferCount.md) * [Get Texture Dimensions](Operator-GetTextureDimensions.md) * [Load CameraBuffer](Operator-LoadCameraBuffer.md) @@ -364,11 +357,9 @@ * [Sample TextureCubeArray](Operator-SampleTextureCubeArray.md) * [Skinned Mesh Index Count](Operator-MeshIndexCount.md) * [Skinned Mesh Vertex Count](Operator-MeshVertexCount.md) - * Spawn - * [Spawn State](Operator-SpawnState.md) - * Utility - * [Point Cache](Operator-PointCache.md) -* Reference + * [Spawn > Spawn State](Operator-SpawnState.md) + * [Utility > Point Cache](Operator-PointCache.md) +* [Reference](Reference.md) * [Standard Attributes](Reference-Attributes.md) * [Types](VisualEffectGraphTypeReference.md) * [AABox](Type-AABox.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Trigonometry.md b/Packages/com.unity.visualeffectgraph/Documentation~/Trigonometry.md new file mode 100644 index 00000000000..0d3658633e8 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Trigonometry.md @@ -0,0 +1,18 @@ +# Trigonometric Operators + +Perform trigonometric calculations. + +| **Page** | **Description** | +| --- | --- | +| [Acos](Operator-Acos.md) | Calculate the arccosine (inverse cosine) of an input. | +| [Asin](Operator-Asin.md) | Calculate the arcsine (inverse sine) of an input. | +| [Atan](Operator-Atan.md) | Calculate the arctangent (inverse tangent) of an input. | +| [Atan2](Operator-Atan2.md) | Calculate the angle between the x-axis and a vector. | +| [Cosine](Operator-Cosine.md) | Calculate the cosine of an input. | +| [Sine](Operator-Sine.md) | Calculate the sine of an input. | +| [Tangent](Operator-Tangent.md) | Calculate the tangent of an input. | + +## Additional resources + +- [Math Operators](Math.md) + diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Vector.md b/Packages/com.unity.visualeffectgraph/Documentation~/Vector.md new file mode 100644 index 00000000000..d46a00d38b6 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Vector.md @@ -0,0 +1,25 @@ +# Vector Operators + +Perform vector and matrix calculations. + +| **Page** | **Description** | +| --- | --- | +| [Append Vector](Operator-AppendVector.md) | Combine up to four inputs into a single vector. | +| [Construct Matrix](Operator-ConstructMatrix.md) | Construct a 4x4 matrix from four `Vector4` values. | +| [Cross Product](Operator-CrossProduct.md) | Calculate the vector that's perpendicular to two input vectors | +| [Distance](Operator-Distance.md) | Calculate the distance between two points. | +| [Dot Product](Operator-DotProduct.md) | Determine whether two normalized vectors point in the same direction. | +| [Length](Operator-Length.md) | Calculate the length of a vector. | +| [Look At](Operator-LookAt.md) | Calculate the transform required to rotate a particle to look at a position. | +| [Normalize](Operator-Normalize.md) | Normalize a vector. | +| [Rotate 2D](Operator-Rotate2D.md) | Rotate a point in 2D around a center point. | +| [Rotate 3D](Operator-Rotate3D.md) | Rotate a point in 3D around a center point. | +| [Sample Bezier](Operator-SampleBezier.md) | Return information about a curve. | +| [Squared Distance](Operator-SquaredDistance.md) | Calculate the square of the distance between two points. | +| [Squared Length](Operator-SquaredLength.md) | Calculate the square of the length of a vector. | +| [Swizzle](Operator-Swizzle.md) | Rearrange the components of an input vector. | + +## Additional resources + +- [Math Operators](Math.md) +- [Geometry Operators](Geometry.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Velocity.md b/Packages/com.unity.visualeffectgraph/Documentation~/Velocity.md new file mode 100644 index 00000000000..cb14d7ffd83 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Velocity.md @@ -0,0 +1,16 @@ +# Velocity Blocks + +Dynamically adjust the velocity of particles. + +| **Page** | **Description** | +| --- | --- | +| [Velocity from Direction & Speed (Change Speed)](Block-VelocityFromDirectionAndSpeed(ChangeSpeed).md) | Calculate velocity by scaling the direction of the particle using its speed. | +| [Velocity from Direction & Speed (New Direction)](Block-VelocityFromDirectionAndSpeed(NewDirection).md) | Calculate velocity by scaling a new direction vector using the speed of the particle. | +| [Velocity from Direction & Speed (Random Direction)](Block-VelocityFromDirectionAndSpeed(RandomDirection).md) | Calculate velocity by scaling a random direction vector using the speed of the particle. | +| [Velocity from Direction & Speed (Spherical)](Block-VelocityFromDirectionAndSpeed(Spherical).md) | Calculate velocity by scaling a spherical direction vector using the speed of the particle. | +| [Velocity from Direction & Speed (Tangent)](Block-VelocityFromDirectionAndSpeed(Tangent).md) | Calculate velocity by scaling a tangent direction vector using the speed of the particle. | + +## Additional resources + +- [Force Blocks](Force.md) +- [Implicit Integration Blocks](Implicit.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Wave.md b/Packages/com.unity.visualeffectgraph/Documentation~/Wave.md new file mode 100644 index 00000000000..abe7993164e --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Wave.md @@ -0,0 +1,18 @@ +# Wave Operators + +Generate waveforms, for example to control the behavior of particles over time. + +| **Page** | **Description** | +| --- | --- | +| [Sawtooth Wave](Operator-SawtoothWave.md) | Generate a waveform that increases, then resets and repeats. | +| [Sine Wave](Operator-SineWave.md) | Generate a waveform that smoothly oscillates between two values. | +| [Square Wave](Operator-SquareWave.md) | Generate a value that alternates between two values. | +| [Triangle Wave](Operator-TriangleWave.md) | Generate a value that oscillates between two values. | + +## Additional resources + +- [Noise Operators](Noise.md) +- [Math Operators](Math.md) +- [Sampling Operators](Sampling.md) + + From 7e87392b110587d712c8f1aa3cc50e39f13a72e8 Mon Sep 17 00:00:00 2001 From: Mark Green Date: Mon, 4 Aug 2025 09:54:12 +0000 Subject: [PATCH 3/3] [Port] [2022.3] DOCG-7622 Remove UI screenshots from render objects example, make page more concise --- .../rendobj-depth-greater-see-through.png | Bin 33691 -> 15399 bytes .../how-to-custom-effect-render-objects.md | 153 +++++------------- 2 files changed, 39 insertions(+), 114 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/Documentation~/Images/how-to-render-objects/rendobj-depth-greater-see-through.png b/Packages/com.unity.render-pipelines.universal/Documentation~/Images/how-to-render-objects/rendobj-depth-greater-see-through.png index 069515f1c87bc670736b4266079867b741448662..8a563eba3823428f0dd09977560b7dbd11762b0c 100644 GIT binary patch literal 15399 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 e_3N0u=NEkGuq!B?&@fQoM@~vvvRd3U=>Gv