Crest Water 5 - Splines

About Crest Water 5 - Splines – Unity Editor Tool & Plugin

Crest Water 5 - Splines Unity Asset Overview

In my experience building open-world environments and maritime prototypes in Unity, rendering believable water that interacts correctly with geometry has always been a tough engineering challenge. Crest Water 5 - Splines takes standard FFT (Fast Fourier Transform) ocean rendering and upgrades it with a spline-based data injection workflow that drastically simplifies river routing, shoreline carving, and localized flow control.

Architecturally, Crest avoids traditional static water meshes. Instead, it generates concentric geometry clipmaps—nested rings of terrain-like grids centered dynamically around the main render camera. As the camera moves, the mesh tiles shift and scale, maintaining high vertex density near the viewpoint while scaling down geometry toward the horizon. The Splines module hooks directly into Crest's simulation buffers (Displacement, Dynamic Waves, Flow, Surface Trim, and Foam), allowing you to draw splines in the scene view that push custom velocity vectors, alter heights, or clip out ocean geometry to build seamless rivers and lakes.

Core Technical Features & Highlights

GPU-Driven Geometry Clipmaps & Compute Pipeline

Crest renders its water surface entirely through GPU compute shaders. The render loop evaluates ocean spectrum data, directional waves, dynamic wave ripples, and custom spline inputs in real time. Because ocean calculations run as a sequence of compute passes before rendering the main surface shader, performance stays consistent regardless of how complex your shoreline geometry gets.

Spline-Driven Simulation Buffers

Instead of manually tweaking flowmaps in external tools like Houdini, Crest 5 lets you drop Unity SplineContainer components directly onto the terrain. The system converts spline curves into simulation inputs:

Buoyancy & CPU/GPU Queries

Physics simulation requires accurate height and flow sampling. Crest supplies the SampleHeightHelper and SampleFlowHelper C# abstractions. These interface with compute shaders to fetch ocean displacement on the CPU with minimal latency, avoiding performance bottlenecks when tracking hundreds of floating objects.

Ideal Use Cases & Game Genres

Honestly, standard flat ocean planes fall short when your level design demands rivers running down mountains into dynamic ocean bays. Crest 5 shines in specific sub-genres:

Quick-Start Unity Setup & Integration Guide

Getting Crest running alongside Unity's modern Splines package requires a specific component stack on your ocean manager and spline nodes.

Step 1: Instantiating the Ocean System

Create an empty GameObject named Ocean and attach the OceanRenderer component. Assign your render pipeline's ocean material (URP or HDRP compute variant). Set the default sea level in the OceanRenderer inspector.

Step 2: Creating a River Path with Splines

Add a new GameObject with Unity's SplineContainer component. Draw your river curve from the mountain source down to the sea coast. Next, attach Crest's RegisterSplineInput component to the same object.

Step 3: Configuring the Spline Simulation Input

In the RegisterSplineInput inspector, set the Data Target to Flow or Displacement depending on your goal. Adjust the radius, falloff curve, and flow velocity to push water along the spline tangent.

Step 4: Sampling Water Height for Buoyancy in C#

To make a GameObject float realistically along your ocean and spline rivers, attach a custom physics script like this:

using UnityEngine;
using Crest;

public class SimpleFloatingBody : MonoBehaviour
{
    [SerializeField] private float rigidBodyDamping = 0.05f;
    [SerializeField] private float buoyancyForce = 15f;

    private Rigidbody rb;
    private SampleHeightHelper heightHelper = new SampleHeightHelper();

    private void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    private void FixedUpdate()
    {
        // Initialize sample query at object position
        heightHelper.Init(transform.position, 0.5f);

        // Fetch surface height from Crest physics queries
        if (heightHelper.Sample(out Vector3 disp))
        {
            float waterHeight = OceanRenderer.Instance.SeaLevel + disp.y;
            float depth = waterHeight - transform.position.y;

            if (depth > 0f)
            {
                // Apply upward force when submerged
                Vector3 force = Vector3.up * depth * buoyancyForce;
                rb.AddForce(force, ForceMode.Acceleration);
                rb.velocity *= (1f - rigidBodyDamping);
            }
        }
    }
}

Pros & Cons Assessment

Asset Details & Specifications

CategoryTools / Particles & Effects
Latest Versionv1.4.2 (3 tracked releases)
File Size138.55 MB
Added to PlatformFebruary 13, 2026
Views10 views
Downloads2 downloads
Favourites0 favourites
Official StoreBuy Original License on Unity Asset Store →
Issue with Package?Report Broken Link →

Developers Who Downloaded This Also Downloaded

Related Unity Tools Assets