Video summary
Procedural Fish Animation in Blender 3.0 Geometrynodes!
Main summary
Key takeaways
Overview
This tutorial shows how to build a fully procedural, Geometry Nodes–based fish animation in Blender 3.0 that continues to evolve “until the end of time.” The motion is driven by time/frame math rather than manual keyframes. The author also covers practical tips for:
- Controlling movement direction
- Ensuring rotation correctness
- Adding a final wobble/wave effect for more believable swimming
The animation is primarily non-looping by default, relying on time progression rather than a looping setup.
Key Workflow / Node Ideas (Technology & Features)
1) Start with a clean setup
- Begin with a clean scene
- Use one Geometry Nodes position/position-like basis from the fish model
2) Procedural displacement via noise over time
- Use a Noise Texture (1D) setup
- Drive its movement by offsetting with time
- Increase displacement amplitude using:
- Vector Math → Scale
- Example scale around 10
- Recenter displacement so the fish doesn’t drift:
- Use Subtract
- Example subtract around 2.5
3) Time-driven animation (no manual animation)
- Use a Value/Math approach with
#frameas a temporary stand-in for a future Scene Time input - Drive progression using Math → Divide to set speed, with examples such as dividing by 24, later adjusted (e.g., 50)
- Notes on looping:
- The effect is non-looping by default
- To loop, you’d need to copy the entire node setup and add extra math (not taught in the tutorial)
4) Directional timing: head leads, fins lag
- Compute distance from origin using a Distance node
- Use that distance as a factor, experimenting with multiply/divide adjustments (e.g., dividing around 20)
- Negative scaling may be tried (example: -50) to achieve the desired timing:
- Head moves first
- Fins move later
5) Rotation alignment to movement direction
- Reuse the noise/time section to estimate a future position, so the fish can face where it’s effectively moving
- Convert computed direction into rotation using:
- Utilities → Align Euler to Vector
- Apply the rotation with Vector Rotate (Euler mode), ensuring the wiring order is correct:
- Position happens first
- Offset happens second
- Fix twisting / wonky orientation by tuning rotation parameters:
- Set pivot to Z (helps prevent upside-down twisting / wrong axis behavior)
- Optionally adjust an Add node offset (example: 0.3)
- Further tune with divide/scale changes (examples: divide 10, then 20, scale around 15)
6) Add a wave/wobble for propulsion feel
- Create a sine-based wave using:
- Time → Sine (Math/Sine node)
- Apply the wave to rotation using:
- Utilities → Rotate Euler
- Use the Z axis
- Use Object → Local so rotation behaves consistently with orientation
- Tune intensity/influence with Multiply nodes, with example values such as:
- 0.5
- stronger settings like 50
- smaller influence like 0.1
- Use reroutes to keep the node graph organized
7) Pattern variability
- If the movement doesn’t look right, change the noise/randomness parameters
- Example approach:
- Add another Add node with values like 500 to generate a new procedural pattern
Deliverables / Extras
- The author mentions a complete fish model + node file (including caustics) is available on their Gumroad account (link referenced in description/comments).
- The tutorial also includes typical promotion calls (e.g., Twitter and like/subscribe).
Main Sources / Speakers (from the subtitles)
- The primary speaker is the tutorial author, speaking throughout.
- No additional named sources appear beyond:
- the author’s Gumroad/Twitter
- the Blender Geometry Nodes feature set
Rate this summary
Your feedback will help improve summaries.
Improve this summary
Reprocess with a stronger model when the summary feels incomplete or inaccurate.
Translate summary in another language
Ask questions to this video
Chat for follow-up questions, clarifications, and source-backed answers.