World Position Offset Material Functions

Functions for handling vertex manipulation using world position offset.

The WorldPositionOffset category contains special functions for applying manipulating vertices of a mesh by using the world position offset input. These functions can be chained together for additive effects.


The SimpleGrassWind function applies a basic wind operator to foliage, giving the ability to specify a weight map and wind strength. This is a non-directional wind that just gives a very general movement to foliage. This should be the last WPO node you add.



WindIntensity (Scalar)

Controls how much the wind affects the mesh.

WindWeight (Scalar)

This is a grayscale map that controls how much the mesh's vertices will respond to the wind.

WindSpeed (Scalar)

This controls the speed of the wind.

AdditionalWPO (Vector3)

Takes in any additional world position offset networks or functions.


This is what the effect looks like in motion.


The SplineThicken function serves as a way to make very thin polygons look thicker at render time. This is perfect for cables, hair, grass, and other such objects.

Objects using this function should be extremely thin and have a normalized UV layout. Objects should be imported with "Remove Degenerate Triangles" disabled.



WidthBase (Scalar)

This sets the width of a single polygon object at its base.

WidthTip (Scalar)

Sets the width of a polygon object at its tip.

WorldPosition (Vector3)

World Position takes in any existing world position offset functions and adds this function to them.

UVs for Projection (Vector2)

This is the texture coordinate to use in the expansion of the spline.

UVs for Thickness (Vector2)

This is the texture coordinate to use for the Thickness mapper if projecting from U, it will the Y component of the specified UV index for the thickness blending.

UVs for texturing (Vector2)

This is the UV channel for texturing. This must be the same UV channel you want to have the 3D-parallax correction.

Expand U or V UV Channel (StaticBool)

Sets whether to expand the mesh in U or V. Defaults to true, which is U.

DriveNormalZ (Boolean)

This will use DeriveNormalZ to make a perfectly round normal map.

AngleCorrectedNormal (Boolean)

Uses DerivedNormalZ to make perfectly round normal map. Requires a center tesselation vertex otherwise the value of Z will be 0 for the entire face, causing harsh lighting.

AdditionalNormal (Vector3)

This will add a texture normal to the normalmap transform.

FlattenPixelNormal (Boolean)

UVs For NormalShading (Vector2)



The outgoing normal of the adjusted geometry.


This is the output that you can add to other world position offset calculations.

UVs with Parallax

Spline Thicken


The CameraOffset function is great to assist with depth sorting, as it allows you to move an object in camera space, either toward or away from the camera.



OffsetAmount (Scalar)

Enter a negative or positive number to offset your model in the direction of the camera. Note that positive values will bring the model closer to the camera and cause rendering errors if the mesh greatly exceeds the models bounding box.

Clamp Padding (Scalar)

The amount of padding to prevent the clamped version of the offset value from clipping into the camera.

WorldPosition (Vector3)

Enter the model's vertex world position. The Default Value = World Position.


Clamped Camera Offset

The Camera offset is clamped to avoid early camera intersections. Adjust the padding to change the amount of space reserved to avoid camera intersection.

Camera Offset

Either add this value to other World Position offset code or enter it directly into the world position offset master material to offset your mesh.

Camera offset graph

When the Offset parameter in this graph is overidden in the Material Instance Editor, the sphere is moved toward or away from the camera.


The ObjectPivotPoint function returns the object's pivot point in world space. This is not compatible with the pixel shader.



Object Pivot Location

Returns the object's pivot point in world space. This only works with the vertex shader and is incompatible with the pixel shader.

Object Pivot Point

This graph uses the Object Pivot Point function and a bit of math to scale an object from its pivot point using a parameter in the Material Instance Editor. The results are shown below.


The ObjectScale function returns the object's XYZ scale together and seperately. This is not compatible with the pixel shader.



Scale XYZ

Returns a float3 value that is equal to the objects XYZ scale. This is not compatible with the pixel shader.

Scale X

Returns a scalar value that is equal to the object's X-scale. This is not compatible with the pixel shader.

Scale Y

Returns a scalar value that is equal to the object's Y-scale. This is not compatible with the pixel shader.

Scale Z

Returns a scalar value that is equal to the object's Z-scale. This is not compatible with the pixel shader.

In the video below, the ScaleXYZ output is used as a multiplier for the Emissive input. When the size of the sphere is increased, the emissive value also increases and the sphere glows brighter.


The PivotAxis function creates a common pivot location on arbitrary axes. This is helpful for creating flag motion. Instead of using a single pivot point near the top of the flag, use a shared Z point and unique X and Y location data to create a more realistic connection along the object's width.

This shader node only supports uniform scaling. Also, the rotate about axis axis and the pivot axis/pos should not coincide.



Pivot Axis/Pos (Vector3)

Enter a number to use as both your local axis line axis and position. If you would like to lock off your model, enter on its local z axis near its pivot enter (0,0,1). If you would like to lock of the top of the model, enter your model's height in as (0,0,model height).



This can be used as the pivot point in the rotate about axis node.


The RotateAboutWorldAxis_cheap function cheaply rotates objects around world axes. Input the angle you would like to use and attach the output to world position offset.



Rotation Amount (Scalar)

A value of one is equal to one full rotation.

PivotPoint (Vector3)

World space location of pivot point to rotate around. The default value is the model's pivot point.

WorldPosition (Vector3)

World space location of individual vertices. The WorldPosition node is typically used.



Cheaply rotates the object around the world X-axis.


Cheaply rotates the object around the world Y-axis.


Cheaply rotates the object around the world Z-axis.

The video below shows an example Material which rotates a cube about its own pivot point. Note how the axis of rotation changes when each of the three output pins are used.


The StaticMeshMorphTargets function unpacks morph target data that was added into a via 3ds Max's Morph Packer MAXScript.



Morph Target 1 Normals

The surface normals that are associated with Morph Target 1.

Morph Target 1 WPO

World position offset for Morph Target 1.

Morph Target 2 WPO

World position offset for Morph Target 2.



The Wind function provides separate outputs for wind strength, speed multiplied by time and a normalized wind vector.



WindActor (Vector4)

This will take in a Wind actor (in development). At this time you may use a Vector4 to designate direction and strength of the wind.


Normalized Wind Vector

The wind vector, normalized to 0-1 space.


Returns wind strength. The magnitude of the wind vector found by calculating distance from the wind vector to 0.


Wind speed multiplied by time.


Standard WindActor node.


Help shape the future of Unreal Engine documentation! Tell us how we're doing so we can serve you better.
Take our survey