Tulip Fields

Environment Breakdown

James Arkwright


James Arkwright

Principal Environment Artist


Hello! My name is James Arkwright, I’m currently a Principal 3D Environment Artist at Compulsion Games.
I have around a decade of experience as an artist in the games industry, recently shipping the Unreal Engine 5 game Immortals of Aveum, and before that working as the Lead environment artist on Chivalry 2.

Overview and Goals

This project is “Tulip Fields” a real-time environment I created in Unreal Engine 5.

I had two main goals for this project:

  • Complete the scene within a month for the Dinusty Empire October challenge.
  • Use Unreal’s PCG system as much as possible.

I failed miserably at both of these, abandoning the scene multiple times before landing on a version that I liked a few months later.


  • Unreal Engine
  • Blender
  • Substance Designer
  • Photoshop
  • ZBrush

References and Inspiration

The main inspiration was the painting “Tulip Fields With The Rijnsburg Windmill” by Claude Monet.

I was looking for inspiration to make a small scene based on traditional paintings—specifically various water lily paintings by Monet—and decided that a larger field of flowers had the potential to be interesting while keeping the scope of the project low.


I gathered lots of references to Dutch tulip fields and windmills, and specifically a lot of composition references for open fields.

It’s often tricky to turn big, empty spaces into an interesting image, so the reference was crucial to give me a good starting point.



After gathering references I began to block out the scene by placing rows of splines across a very simple base terrain, basically just a stretched cube with a solid color.

I knew the lines created by the rows would have a huge impact on the composition, and I assumed it would require many iterations to get the placement just right, so splines allowed for quick changes.


I also blocked out the windmill, some houses and a fence, and started arranging them to find a composition that worked.

I settled on something that kind of worked, but after several attempts at salvaging the initial composition, I abandoned it and started almost entirely from scratch.


Modelling and Materials

The windmill, houses, shed and fences are all straightforward, very basic geometry created in Blender.

They are all using a combination of a single wood trim sheet and a single tileable wood plank material.

After the blockouts I modelled and unwrapped a few wood planks and then populated them across the various structures, using vertex paint and a heightmap blend to paint in areas of wear along edges.

The material allowed me to tint the top layer to apply different colors to the various structures in the scene.


The tulips are the only mesh I baked for the scene. I did a very simple sculpt of a few tulip leaves and stems, and ended up texturing them with completely flat colors to fit into the stylization of the scene.

The grass in the scene derives from this texture as well, borrowing a few long, green leaves from the same texture sheet.

There are grass and dirt materials from Megascans underneath the tulip fields and around the base of the windmill, but it ended up being completely obscured so I spent no additional time on it.

If I had even a slightly higher camera angle I would have created materials from scratch to fit the style, but instead, I spent my time on other stuff!


I didn’t approach this piece with much of a style goal. Sometimes it’s fun to allow the project to grow or change over time and see where it ends up.

In this case, it started more realistically, and then after I restarted the project it became much bolder and simpler. This is largely due to the sky, lighting and color choices.

The first step into stylization occurred when I moved away from a static HDRI sky, as I wanted to dive into Unreal’s volumetric clouds and Sky Atmosphere system.

The result was a much simpler cloud shape which became more of a “main character” in the piece, as important as the tulip fields or the windmill.

It became obvious that simplifying some colors, textures and shapes would create a stronger mood and unify a lot of the loose parts of the scene.

Below is an image of the initial style, and roughly where I stopped working on the scene initially. It had some interesting parts, but the lighting felt weird and composition unbalanced, and a bit in-between styles.


And this is the new blockout and style I settled on after restarting and changing the clouds:


PCG and Clouds

Exploring Unreal’s PCG system was one of the initial goals of the scene.

Early in the scene’s creation, I created a spline actor that populates tulips along its length, with some parameters to adjust the size and density of the rows.

It also casts a ray to the underlying geometry to easily snap the tulips to the landscape, and these few simple features let me very quickly adjust the placement and general look of all of the tulips in the scene.

I also created a very simple PCG actor to automatically remove any PCG meshes within its volume, which I used to remove tulips from the base of structures.

When I restarted the scene I decided to use Unreal’s volumetric cloud system and sky atmosphere for the skybox—I wanted to explore these systems more and also add movement to the scene in general.

There are some wonderful built-in blueprints and material examples to quickly art direct the look and position of the clouds.

Specifically, I used BP_CloudMaskGenerator and BP_CloudMaskObject in the Unreal Volumetrics plugin content to create specifically positioned cloud masks that write to a render target which is used in the cloud material.

The movement and general style of the clouds are created by panning volume noise textures.



The windmill spins via the world position offset in the shader.

I chose this method to more fully explore rotation with world position offset, and also to keep as much of the scene’s animation constantly playing in the viewport while working.

This gives me a better sense of the final presentation without entering play mode or rendering video. The background windmill is the same, with the time offset slightly.


On the end of each windmill blade is a plane that displays a simple stylized wind animation as the blades cut through the air.

It fades in and out with a sine wave and uses a panning normal map to distort the UVs to make it appear as though it’s moving.

There is also a larger circle that spans the circumference of the blades that appears very subtly, using the same setup.

These types of things would look odd in a realistic scene, but in this case, help to reinforce the stylization.


The tulip wind is generated with two panning noise textures, with vertex color used to control the wind falloff along the stem.

The result is combined with the default SimpleWind node which adds very subtle additional movement.

As the tulips are very short and simple plants, the wind setup didn’t need to be very complex to achieve what I wanted.


The clothesline and clothes are very similar: a sine wave rocks the rope back and forth—with the ends masked out to lock them into position—and then a noise texture pans across the clothes to give them secondary movement.

There is also a loose plank on the roof of the shed in the foreground which moves similarly.


There are some light grass and tulip petal particles in the scene as well, emitted via the world’s most mundane Niagara setup.

The birds are, shockingly, not particles, and instead move along a spline while playing an animation. There’s no good reason, I just thought it would be fun to try.

This method did allow me to control their trajectories perfectly, but with this many birds, it’s not ideal. The bird is a free Crow model from the Unreal marketplace which I tinted white.

Colour Changing

The tulips change colours over time via a very simple setup in their material. Three colours slowly alternate over each row, sweeping across them in world space via a mask.

The red channel lerps between the first two colours, and the green channel lerps between that result and the third colour.

Each row has a different starting position offset to ensure they don’t all transition identically, as I wanted the rows to start in different colours but transition at the same time.


There is a distant background hill in the scene which also does this, through a slightly different setup.

Due to its distance, it is specifically intended to be a simple background mesh, a very basic deformed plane rather than actual rows of tulips; the rows are created via a simple texture since there is no tulip geometry to work with.

Each channel of the texture contains specific rows and none overlap. I then swizzled the channels of the texture—rearranging the channel order—and lerped between that result.

So as the mask texture pans across the hill mesh the rows are swapping positions and the color application is constant, which gives the same effect as the foreground rows but in a single mesh and material.


Lighting and Rendering

The lighting setup is incredibly simple and basic.

There are two main lights in the scene—the skylight and directional light—and three other very tiny spotlights which emphasize specific areas but are barely even noticeable.

The sky colour is derived from the Sky Atmosphere actor, and the skylight captures that result.

Exponential Height Fog is used to tie everything together and add atmospheric depth. Besides disabling auto-exposure there are no post-process settings changed at all or additional colour grading, as I felt the lighting and scene’s colours effectively captured what I wanted.



I added a few additional Megascans props to the scene just to fill some spots up. I knew the camera would never get close, so it saved some time.

The trees are also from Quixel’s Black Alder tree pack, which somehow fit in pretty well at this distance.


Thank you for reading! As you can see, most of the focus in this project was on weird little technical things and overall composition, with very little time spent on asset creation.

All of the separate parts create a nice image when combined, but each is quite simple.