Introduction: Realistic Ocean in Blender

This is an easy tutorial that shows how to make a realistic ocean in Blender using geometry nodes. It was inspired by the contest "Make it Float".

While geometry nodes might seem counterintuitive, I chose them for their customisability. Another choice would be the ocean modifier; however, I won't cover it in this tutorial.

Supplies

All you need is a computer that can run Blender, along with a mouse, keyboard and Blender itself.

Step 1: Prepare the Scene

Open the Blender and close the pop-up window, then select all objects by pressing A, and then remove them by pressing Delete.

Add a plane by pressing Shift+A and selecting mesh > plane from the dropdown menu.

Switch to edit mode by pressing Tab. Then, add 5,000 subdivisions along both X and Y axes by pressing Ctrl+R, type 5000 on your keyboard and confirm the cut on the plane by pressing Enter. Repeat this for X and Y axes.

If you did everything correctly, your plane should look like the 2nd image above, assuming you're in edit mode.

If you have a powerful computer, you can use more subdivisions to improve render quality. However, if you use more subdivisions, Blender might crash a couple of times, so make frequent backups.

Step 2: Setup Geometry Nodes

First, go into the geometry nodes workspace in Blender. The button to do so is located at the top of the window.

Then select the plane and recreate the geometry nodes to match the picture above. To add new geometry nodes, press Shift+A and search for the node you need.

Feel free to experiment with the values to achieve a look you like.

Suppose your plane doesn't look the way you like. Please make sure all the values are correct, or experiment with them. For example, you can modify the mix node to adjust the wave size.

Explanation: the geometry nodes on the left (noise & mix) are used to combine different noise textures to add fine & coarse detail, creating a more realistic look. The mix on the right is used to map the noise texture to the mesh's height by combining two vectors with a factor set to the noise texture. These vectors are then fed into a set-position node, which moves the points based on the vector.

Step 3: Add Boats

Import an object of your choice into Blender by pressing File> Import> Data Type in the top left corner of Blender. This project, however, feel free to use anything you like.

Replicate the geometry nodes as seen above. The object info can be created by dragging the object (benchie) from the scene collection into the node editor.

Some of the nodes are the same as in the previous section, such as noise, mix, set position, group input, and group output. Just ignore these, as you have already added them in the last step.

Explanation: The distributed points on the faces node randomly generate points on top of the faces. Then the instance on point pastes the object from object info onto the point. It also receives a rotation value generated by mixing the sea normal with a random value. Afterwards, the transform geometry node moves the boats down so they appear like they're in the water. Finally, they are added to the ocean surface using a join geometry node.

Step 4: Sea Texture

Go to the shading workspace, which is accessed via the button at the top of Blender. Then create a new material in the shader editor. Transfer the nodes as shown above into the shader editor. If everything is set up correctly, the water should start to look realistic; if it doesn't, ensure the roughness is set to around 0.1. Feel free to experiment with different values..

Step 5: Sky

If you want the final render to feature a sky and attractive reflections on the water, you need a skybox. I used the Belfast Sunset Skybox. After downloading the skybox, upload it to Blender by going to world properties, setting the surface to background, and changing the colour to the skybox image. To check if it works, switch to render view and ensure the skybox displays correctly.

Step 6: Grass Hill (optional)

To create a grass hill, add a plane and subdivisions as in step 1 and then repeat step 2. You can tilt the hill slightly by pressing R so that it covers roughly half of the water surface. However, make sure you don't overdo it, as a tilt that is too large will appear unrealistic. Enter edit mode and press O to enable proportional editing, then select points on the mesh and press G, followed by Z to move them along the Z axis. Aim to make the hill obstruct as little of the water's surface as possible while maintaining a natural-looking curve. Use the scroll wheel to adjust the size of proportional editing; preferably increase the size for this mesh to achieve a smoother curve. You can also press S to scale up the hill so it extends past the ocean and is visible in the render. If you follow these steps correctly, the scene should resemble the picture above.

You can tilt the hill slightly by pressing R so it covers roughly half of the water surface. However make sure you don't go overboard as a tilt too large will apear unrealistic

Then go into edit mode and press O to enable proportional editing, select points on the mesh and press G and then Z to move them along the Z axis. You should aim to make the hill obstruct as little of water's surface as posible, while maintaining a natural looking curve. You can use the Scroll wheel to adjust the size of proportional editing. preferably increase the size for this mesh to make the curve appear smoother.

Also you can use S to scale up the hill so that it extends past the ocean and can be seen in the render.

The scene should look just like in the picture above if you followed the steps correctly.

Step 7: Texture the Hill

Go into the shading workspace and create a new material in the shader editor. Then copy, add a noise texture and a colour ramp. The colour ramp uses the noise texture to map from green to yellow, creating a more natural colour variance.

If you want, you can use the same approach for the ocean. Instead of using a mix, you can use a colour ramp to create a scene with more vibrant colours.

Step 8: Finishing Touches

I added an orange sun light so its reflections could be seen in the water, creating sunset-like reflections.

I also added a light blue area light covering the entire scene to capture the sky and cloud colours and their diffuse lighting.

However, please experiment with lighting to achieve a different look.

smooth out the sea and the hill by selecting them, right clicking and pressing shade smooth

If your results don't look like what you want, try using more subdivisions, playing around with geometry nodes, lights, shading, and the skybox.

Step 9: Render

To make a render, you first need a camera. To set up a camera, press Shift+a and select a camera from the dropdown menu. To position it, go to the desired location and point it towards your ocean scene. Then press Ctrl+Alt+0 while ensuring it's the numpad 0.

If you don't want the standard 1080p resolution, go to output properties and change the resolution there.

Please make sure your render engine is set to Cycles. To check, go into the render properties and look at the dropdown box labelled' Render Engine'. Ensure Cycles is selected. You can also change the device to GPU compute to speed up render times.

If you believe you have completed all the steps correctly, you can render the image by pressing Render> Render Image in the top left corner of the Blender window. A rendered image should appear after a few seconds. This image isn't the final version, so you will need to wait a few more minutes for the final image to be generated.

Now, you should have something that resembles the render shown at the start of this instructable. If not, make sure to retrace all the steps outlined here and experiment with the settings.

Step 10: Share

Share your render with the community by pressing I made it and sharing your rendered image.