Water Normal Map Generator
This water normal map generator builds periodic waves and ripples from parameters, with no upload required. Inspect a repeated tile, watch two scrolling samples under light, and export a static tangent-space texture for your material.
How to Get Started with Procedural Water
Start in Generate Water and choose Gentle Ripples, Pool Water, Lake Surface, Small Waves, Ocean Waves, Wind Ripples, or Stylized Water. Each preset changes the wave layers and normal strength rather than loading a baked texture. Adjust the primary and secondary directions, add fine ripples, and inspect the 3×3 view. Choose an output resolution and Y convention before downloading PNG. Reset restores the default preset, resolution, speed, and texture interpretation settings.
What Is a Water Normal Map?
A water normal texture stores local surface directions for a renderer to use when calculating lighting. It can make a flat water plane reflect or shade as though many small waves exist. It does not move vertices or change the horizon silhouette. Larger waves that must affect the outline need geometry, displacement, or another shader technique. This generator authors a scalar height interpretation and derives normalized tangent-space vectors; the values are material inputs rather than measured ocean data.
Why Seamless Water Normals Matter
A repeating material samples beyond the borders of its texture many times. A discontinuity can become a bright line that travels across a pool or lake. The procedural mode uses integer periodic harmonics in both texture axes and samples opposite borders when calculating gradients. Angled directions are snapped to a compatible integer wave vector; small angle changes can therefore leave the pattern unchanged. This deliberate constraint keeps the scalar field and its derivative periodic instead of hiding a mismatch with a seamless badge.
Directional Waves and Fine Ripples
Macro Wave establishes the broad rhythm, while Secondary Wave crosses or follows it to break up uniform bands. Frequency controls cycles across a tile; amplitude controls the scalar contribution before normal strength is applied. Each directional layer includes weaker harmonics that shape the crest profile. Fine Ripples mixes several seeded periodic directions around its chosen angle. Change the seed to alter phase relationships while preserving repeatability. The same seed, parameters, and resolution produce the same output.
Using Two Scrolling Normal Layers
The animated preview samples this one normal texture twice at different UV offsets and speeds. It decodes the normals and combines them with reoriented normal mapping in vector space before lighting a flat surface. This illustrates a common way to reduce obvious motion repetition without generating a fluid simulation. The downloaded PNG remains a single static texture. In your own shader, use two samples of that file, matching its Y convention, and animate their UV coordinates with independent velocities.
OpenGL vs. DirectX Normal Direction
G Y+ and G Y− differ in the sign assigned to tangent Y. Changing the convention negates green while preserving the normalized direction under the correct decoder. The animated preview compensates for the selected format. Verify your material with a light moving vertically and a recognizable crest; import tools can expose a green-channel correction regardless of engine name. Treat the PNG as normal-vector data and avoid an sRGB color transform when sampling its components.
Water Normal Map Generator for Real-Time Materials
Use the export as one part of a water material in Unity, Unreal Engine, or a custom renderer. Match the normal input, UV scale, tangent basis, and texture import settings to the shader you actually use. Reflection, refraction, depth color, roughness, lighting, and mesh geometry strongly influence the result. The illustrative blue preview does not predict an engine's final appearance. Consult the linked engine guides and current vendor documentation because renderer packages and import interfaces vary by version.
Pool, Lake, Ocean, and Stylized Use Cases
Pool Water uses crossing waves for a compact repeating surface; it does not generate underwater caustics. Lake Surface keeps broad movement restrained. Ocean Waves starts with larger amplitude and stronger slopes, but it cannot create breaking crests, foam, or shoreline interactions. Wind Ripples aligns the layers more closely for a directional pattern. Stylized Water suppresses fine detail and emphasizes a readable rhythm. Modify every preset to fit the scale and visual language of your scene.
Performance and Texture Resolution
Choose 256 or 512 for fast iteration and small materials. Inspect 1024 or 2048 when close views need extra texels. A 2048-square RGBA texture alone occupies about 16 MiB before height fields, preview buffers, and encoding; compressed file size is not working memory. Generation runs in a worker and slider updates are debounced so stale jobs can be cancelled. Derivative strength is scaled with resolution to keep the wave interpretation comparable, although low resolutions cannot retain unlimited high-frequency detail.
From Texture: An Estimated Surface
The secondary mode accepts a local ripple, wave, or dedicated height-like image through the existing image pipeline. Choose a luminance or channel source, set levels, and use denoising or detail recovery where appropriate. Wrap-aware processing reads opposite image edges during filtering and gradients. It does not make an arbitrary photograph seamless, remove reflections, or recover physically measured shape from moving water. Use the general seamless tool if the source needs border repair, and inspect the repeated result before export.
Animation, Motion Preferences, and Inspection
Pause the preview to compare the texture with its moving material response. Animation Speed changes only UV movement in the preview, never the exported pixels. Reduced-motion preferences start playback paused; an explicit Play action can enable it. The animation also stops when the page is hidden or the preview is offscreen. The 3×3 card repeats the same file nine times and is useful for inspecting borders, while larger in-engine repetitions reveal motifs that remain visible even in a mathematically periodic texture.
What the Tool Does Not Simulate
This workflow is for game developers, shader authors, environment artists, and technical artists who need controllable procedural material detail. It does not solve fluid dynamics, conserve water volume, calculate buoyancy, or provide physical wave forecasts. Save the settings JSON and lossless PNG with the material, then evaluate animation at the intended camera distance and platform quality. Lower ripple amplitude if fine highlights shimmer after mipmapping, and preserve the full source settings when passing the asset to another artist.
Frequently asked questions
Is the procedural water texture really tileable?
Yes. Integer wave harmonics make the procedural scalar field periodic in U and V, and wrap-aware gradients preserve that behavior. Imported images have no equivalent guarantee.
Does PNG contain the animated water?
No. PNG is a static normal texture. The preview moves and combines two UV samples; reproduce that technique in your shader to animate the material.
Can I change a preset after selecting it?
Yes. Presets set editable parameters. All wave amplitudes, frequencies, directions, seed, strength, resolution, and Y convention remain adjustable.
Can a water photo recover the actual wave geometry?
No. From Texture estimates a scalar field from image brightness or a selected channel. Reflections and lighting can become false relief, and wrapping cannot repair mismatched borders.