Browse Source

Update particle shader format in Controlling thousands of fish (#6604)

J.M. de Jong 2 years ago
parent
commit
2147f64d08

+ 11 - 22
tutorials/performance/vertex_animation/controlling_thousands_of_fish.rst

@@ -55,30 +55,16 @@ A unique thing about particle shaders is that some built-in variables are saved
 ``TRANSFORM``, ``COLOR``, and ``CUSTOM`` can all be accessed in the shader of the mesh, and
 also in the particle shader the next time it is run.
 
-Next, setup your ``vertex`` function. Particles shaders only contain a vertex function
-and no others.
+Next, setup your ``start()`` function. Particles shaders contain a ``start()`` function and a
+``process()`` function.
 
-First we will distinguish between code that needs to be run only when the particle system starts
-and code that should always run. We want to give each fish a random position and a random animation
-offset when the system is first run. To do so, we wrap that code in an ``if`` statement that checks the
-built-in variable ``RESTART`` which becomes ``true`` for one frame when the particle system is restarted.
+The code in the ``start()`` function only runs when the particle system starts.
+The code in the ``process()`` function will always run.
 
-From a high level, this looks like:
-
-.. code-block:: glsl
-
-  void vertex() {
-    if (RESTART) {
-      //Initialization code goes here
-    } else {
-      //per-frame code goes here
-    }
-  }
-
-Next, we need to generate 4 random numbers: 3 to create a random position and one for the random
+We need to generate 4 random numbers: 3 to create a random position and one for the random
 offset of the swim cycle.
 
-First, generate 4 seeds inside the ``RESTART`` block using the ``hash`` function provided above:
+First, generate 4 seeds inside the ``start()`` function using the ``hash()`` function provided above:
 
 .. code-block:: glsl
 
@@ -103,14 +89,14 @@ the position information.
 
   TRANSFORM[3].xyz = position * 20.0;
 
-Remember, all this code so far goes inside the ``RESTART`` block.
+Remember, all this code so far goes inside the ``start()`` function.
 
 The vertex shader for your mesh can stay the exact same as it was in the previous tutorial.
 
 Now you can move each fish individually each frame, either by adding to the ``TRANSFORM`` directly
 or by writing to ``VELOCITY``.
 
-Let's transform the fish by setting their ``VELOCITY``.
+Let's transform the fish by setting their ``VELOCITY`` in the ``start()`` function.
 
 .. code-block:: glsl
 
@@ -127,6 +113,9 @@ below.
 
 This will give each fish a unique speed between ``2`` and ``10``.
 
+You can also let each fish change its velocity over time if you set the velocity in the ``process()``
+function.
+
 If you used ``CUSTOM.y`` in the last tutorial, you can also set the speed of the swim animation based
 on the ``VELOCITY``. Just use ``CUSTOM.y``.