Scriptable Object that contains configuration for waves shape.
You can have as many profiles as you want, but it's strongly recommended to resuse them between different surfaces as much as possible.
Each actively used profile on scene adds extra processing pass for every frame.
In most cases you will want to stick with one or two reusable profiles per scene.
This is basic waves generator.
I suggest experimenting with it for a while.
If need more advanced tool or want to import waves from external source, you can do it via public WaterProfile
functions or rewriting DragonWater.Utils.GerstnerWavesGenerator
class.
Waves are projected from camera's origin.
Here you can configure visibility distance and how detailed they should be.
It only affects visual, not physics which is indpendent via Water Sampler.
Hillness is an additional parameter for every point on wave, just like it's level offset or normal.
In theory, higher hillness mean point is higher from base water level. This value is used e.g. to draw foam on wave tips.
This value is usually in range 0-1, but it's not always the case and depending on configuration - it can be negative on deep areas of waves, which can be important for some Material Profile configurations.
Hillness is calculated with the following formula:
float height_param = yOffset / avgAmplitude; // offset from base water level, can be both - positive or negative float normal_param = 1.0 - dot(up, normal); // usually, the higher point is, the normal vector is more horizontal hillness = (height_parm * HillnessOffsetFactor) + (normal_param ^ HillnessNormalPower);
Simulation parameters for ripple when it's use on surface with this wave profile.
Read more: Ripple Effect
By default, Wave Profile uses world origin at 0,0 with 0 degree rotation as origin to calculate waves.
It means that waves are always same at position x,y no matter what is your transform of water surface.
This makes wave profile nicely reusable between surfaces but it does not always look correctly on moving surface.
To solve this issue, you can change Wave Profile origin (both, position and its rotation) at runtime, so waves will properly move and rotate with surface transform.
Although, this will limit profile reusability between surfaces in some cases - if you want multiple moving surfaces at the same time, you will most likely need to create separate profile for each.
You can change profile waves origin in two ways:
WorldOriginPosition
and WorldOriginRotation
properties, or