Simple UV Nodes
Full node reference and installation guide. For what Simple UV Nodes does and why, see the product page.
Minimum Blender version: 4.5
Installation
- Download the release zip and extract it.
- Inside you will find version folders — pick the one that matches your Blender installation (e.g.
Simple_UV_Nodes_4_5orSimple_UV_Nodes_5_1). - In Blender, open Edit → Preferences → File Paths → Asset Libraries and add the version folder as a new Asset Library.
- Open the Asset Browser (e.g. in a Geometry Nodes editor header), set the library to Simple UV Nodes, and drag any node into your Geometry Nodes modifier tree.
Tip
If you update Blender to a new minor version, swap the registered folder to the matching one from the zip. Older folders continue to work but will not include features introduced in newer Blender versions.
Node Reference
UV Box Project
Box/triplanar projection onto geometry. Projects UVs from three axes simultaneously and writes the result into a named UV attribute.
![]()
| Input | Type | Default | Description |
|---|---|---|---|
| UV Map | String | UVMap |
Name of the UV attribute to write |
| Coordinates | Menu | Object | Coordinate space: Object or World |
| Tiling | Float | 1.0 |
Uniform tiling multiplier |
| X Projection | |||
| Offset | Vector | 0, 0, 0 |
Translation offset for the X-face UV |
| Rotate | Float | 0° |
Rotation for the X-face UV |
| Scale | Vector | 1, 1 |
Scale for the X-face UV |
| Y Projection | |||
| Offset | Vector | 0, 0, 0 |
Translation offset for the Y-face UV |
| Rotate | Float | 0° |
Rotation for the Y-face UV |
| Scale | Vector | 1, 1 |
Scale for the Y-face UV |
| Z Projection | |||
| Offset | Vector | 0, 0, 0 |
Translation offset for the Z-face UV |
| Rotate | Float | 0° |
Rotation for the Z-face UV |
| Scale | Vector | 1, 1 |
Scale for the Z-face UV |
UV Planar Project
Flat projection of UVs along a single chosen axis. Useful for walls, floors, or any surface that is predominantly facing one direction.
![]()
| Input | Type | Default | Description |
|---|---|---|---|
| UV Map | String | UVMap |
Name of the UV attribute to write |
| Coordinates | Menu | Object | Coordinate space: Object or World |
| Projection Plane | Menu | Z | Axis to project along: X, Y, or Z |
| Transform | |||
| Offset | Vector | 0, 0, 0 |
Translation offset applied to the UV |
| Rotate | Float | 0° |
Rotation applied to the UV |
| Tiling | Float | 1.0 |
Uniform tiling multiplier |
| Scale | Vector | 1, 1 |
Scale applied to the UV |
UV Spherical Project
Equirectangular UV projection that wraps UVs around a sphere. Use this for round objects — planets, eyeballs, fruits — where a planar or box projection would produce visible distortion. The node uses face-domain seam correction to eliminate the discontinuity where the left and right edges of the UV meet.
![]()
| Input | Type | Default | Description |
|---|---|---|---|
| UV Map | String | UVMap |
Name of the UV attribute to write |
| UV Scale | Menu | Normalized |
Normalized: maps the full sphere surface to the 0–1 UV square. Real World Scale: UV is in Blender units (arc length), centred at 0.5 |
| Axis | Menu | Z |
Pole axis of the sphere. Z places poles at top and bottom; X and Y rotate the sphere orientation |
| Tiling | Float | 1.0 |
Uniform tiling multiplier. Values above 1 repeat the texture |
| Offset | Vector | 0, 0, 0 |
UV translation offset. X shifts horizontally, Y shifts vertically |
| Rotate | Float | 0° |
UV rotation angle, pivoted at the centre of UV space |
| Scale | Vector | 1, 1 |
UV scale applied from the centre of UV space. X scales horizontally, Y scales vertically |
Tip
Real World Scale keeps UV proportions consistent with the actual surface area of the sphere. Use it when tiling at a consistent texel density matters — for example, to match a spherical projection to a neighbouring planar projection on the same object.
UV Cylindrical Project
Wraps UVs around a chosen axis. U follows the circumference, V follows the height along the axis — ideal for pipes, columns, tree trunks, bottles, and other surfaces of revolution. An optional cap mode blends in a planar projection on end faces, based on how closely a face's normal points along the axis.

| Input | Type | Default | Description |
|---|---|---|---|
| UV Map | String | UVMap |
Name of the UV attribute to write |
| UV Scale | Menu | Normalized |
Normalized: maps the full circumference/height to the 0–1 UV square. Real World Scale: UV is in Blender units |
| Axis | Menu | Z |
Cylinder axis: X, Y, or Z |
| Tiling | Float | 1.0 |
Uniform tiling multiplier |
| Offset | Vector | 0, 0 |
UV translation offset |
| Rotate | Float | 0° |
Rotation around the axis — shifts the seam position |
| Scale | Vector | 1, 1 |
Non-uniform UV scale |
| Caps | |||
| Enable Caps | Boolean | false |
Activates a blended planar projection on end faces |
| Cap Blend Angle | Float | 30° |
Face-normal angle below which a face is treated as a cap |
| Cap Scale | Vector | 1, 1 |
Scale applied to the cap planar projection |
| Cap Offset | Vector | 0, 0 |
Offset applied to the cap planar projection |
| Cap Rotate | Float | 0° |
Rotation applied to the cap planar projection |
Tip
Use Rotate to spin the seam to a hidden edge — the back of a column, the underside of a pipe — before locking in the rest of the projection.
UV Camera Project
Projects UVs from the point of view of a Camera object, the same way a real camera lens would. Focal length, sensor size, and projection type are read directly from the camera's own data-block, so the UVs always match what the camera is actually set up to see — including a proper parallel projection when the camera is set to Orthographic. Point the camera at the surface and the texture appears painted on from that angle — ideal for decals and baked projection setups.
![]()
| Input | Type | Default | Description |
|---|---|---|---|
| UV Map | String | UVMap |
Name of the UV attribute to write |
| Camera | Object | — | Camera object to project from. The projection follows this camera's perspective |
| Camera Settings | |||
| Resolution X | Integer | 1920 |
Horizontal resolution used to compute the camera aspect ratio |
| Resolution Y | Integer | 1080 |
Vertical resolution used to compute the camera aspect ratio |
| Texture Scaling | |||
| Tiling | Float | 1.0 |
Uniform tiling multiplier. Values above 1 repeat the texture; values below 1 zoom out |
| Offset | Vector | 0, 0 |
UV translation offset. X shifts horizontally, Y shifts vertically |
| Rotate | Float | 0° |
UV rotation angle, pivoted at the centre of UV space |
| Scale | Vector | 1, 1 |
UV scale applied from the centre of UV space. X scales horizontally, Y scales vertically |
Warning
Camera must reference an object with actual camera data — not an Empty, a mesh, or any other object type — and must not be left unassigned. Focal length, sensor size, and orthographic scale are read from the camera's data-block, so if Camera isn't valid, the node raises an Error in the modifier's Warnings panel and passes the incoming geometry through unchanged, leaving any existing UV map untouched instead of overwriting it with an invalid projection. If you need a movable projector that isn't your render camera, add a dedicated Camera object and hide it from the render.
Tip
Because the projection reads the camera's live transform, animating or parenting the Camera object updates the UVs in real time. Add a Copy Location/Copy Rotation constraint if you want the projection to stay fixed once placed.
UV Transform
Modifies an existing UV map non-destructively — offset, rotate, scale, tile, and mirror without re-projecting from scratch.
![]()
| Input | Type | Default | Description |
|---|---|---|---|
| UV Map | String | UVMap |
Name of the UV attribute to modify |
| Offset UV | Vector | 0, 0 |
Translation offset |
| Rotate | Float | 0° |
Rotation |
| Scale | Vector | 1, 1 |
Scale |
| Tile | Float | 1.0 |
Uniform tiling multiplier |
| Mirror U | Boolean | false |
Mirror along the U axis |
| Mirror V | Boolean | false |
Mirror along the V axis |
UV Attribute Transform
A lightweight pure-vector node that offsets, rotates, and scales a UV coordinate value. Has no Geometry socket — use it as a helper sub-node inside other projection setups or to pre-process a UV vector before feeding it into a texture.
| Input | Type | Default | Description |
|---|---|---|---|
| UV Coordinates | Vector | 0, 0, 0 |
Input UV vector to transform |
| Offset | Vector | 0, 0 |
Translation offset |
| Rotate | Float | 0° |
Rotation angle |
| Scale | Vector | 1, 1 |
Scale |
| Output | Type | Description |
|---|---|---|
| Vector | Vector | Transformed UV vector |
UV Instance Randomize
Adds per-instance UV variation to scattered geometry. Each instance receives an independent random offset, rotation, and scale value derived from its instance ID, so the variation is stable — changing only when you change the seed. Use this after a Scatter or Instance on Points node to break up texture repetition. Instances are realized as part of this process.
Both scale and rotation pivot on the center of each UV island (0.5, 0.5 in UV space), so island position stays predictable regardless of scale.
![]()
| Input | Type | Default | Description |
|---|---|---|---|
| UV Map | String | UVMap |
Name of the UV attribute to read and write |
| Seed | Integer | 0 |
Global seed — change to get a different randomization pattern |
| Offset Variation | Vector | 0, 0, 0 |
Random UV shift range per axis. U shifts by a random value in [−X/2, +X/2], V shifts in [−Y/2, +Y/2]. Z is unused |
| Rotate Variation | Float | 0° |
Max random rotation in degrees. Each instance rotates by a random value in [−Var, +Var]. Range: −180° to 180° |
| Scale Variation | Float | 1.0 |
Scale spread. Each instance scales by 1 + random([−Var/2, +Var/2]). At the default of 1.0, instances range from 0.5× to 1.5× their UV island size |
Tip
Increase Offset Variation to spread instances across the texture. Set Rotate Variation to 180 for fully random orientations. Keep Scale Variation below 2 to avoid zero-sized islands; values above 2 can produce negative scale (UV flip).
UV Island Randomize
Adds per-island UV variation across a single mesh. Reads each UV island, derives a stable random seed from it, and applies an independent random offset, rotation, and scale to every face in that island — the same mechanism as UV Instance Randomize, but scoped to UV islands instead of geometry instances. Use it to break up visible texture tiling on complex meshes such as rock piles, brick walls, or cobblestones.
![]()
| Input | Type | Default | Description |
|---|---|---|---|
| UV Map | String | UVMap |
Name of the UV attribute to read and write |
| Seed | Integer | 0 |
Global seed — change to get a different randomization pattern |
| Offset Variation | Vector | 0, 0, 0 |
Random UV shift range per axis. U shifts by a random value in [−X/2, +X/2], V shifts in [−Y/2, +Y/2]. Z is unused |
| Rotate Variation | Float | 0° |
Max random rotation in degrees. Each island rotates by a random value in [−Var, +Var]. Range: −180° to 180° |
| Scale Variation | Float | 1.0 |
Scale spread. Each island scales by 1 + random([−Var/2, +Var/2]). At the default of 1.0, islands range from 0.5× to 1.5× their original size |
Tip
UV Island Randomize and UV Instance Randomize stack. Apply Instance Randomize first (unique base offset per instance), then Island Randomize on the realized mesh for further per-island variation.
UV Mark Edges
Reads a named UV attribute and marks every edge that lies on a UV island boundary as a seam, a sharp edge, or both. Run this after any projection node to keep your seams in sync with your UV layout — no manual marking needed.
![]()
| Input | Type | Default | Description |
|---|---|---|---|
| UV Map | String | UVMap |
Name of the UV attribute to read for boundary detection |
| Mark Seam | Boolean | true |
Write island boundaries to the uv_seam edge attribute (Blender 4.1+) |
| Mark Sharp | Boolean | true |
Write island boundaries to the sharp_edge edge attribute |
| Clear Seams | Boolean | false |
When enabled, replaces all existing seam marks; when disabled, ORs with existing marks |
| Clear Sharp | Boolean | false |
When enabled, replaces all existing sharp marks; when disabled, ORs with existing marks |
| UV Split Distance | Float | 0.001 |
Distance tolerance in UV space. Edges whose shared vertices differ by less than this value are treated as continuous. Raise slightly to compensate for floating-point drift after re-importing. |
Tip
Use Clear Seams / Clear Sharp together when you want this node to be the single source of truth for seam marks. Leave them off if you are layering seams from multiple sources.
UV Pack to Channel
Packs UV islands from a source UV map into a destination UV map. Suitable for lightmap baking, ambient occlusion maps, or any workflow requiring a dedicated non-overlapping UV alongside a tiling UV.
![]()
| Input | Type | Default | Description |
|---|---|---|---|
| UV In | String | UVMap |
Name of the source UV attribute to read islands from |
| Packed UV | String | UVMap |
Name of the destination UV attribute to write the packed layout into |
| Margin | Float | 0.02 |
Gap between islands in UV space (0–1) |
| Rotate | Boolean | true |
Allow islands to be rotated for a tighter fit |
| Method | Menu | Exact Shape |
(only for 5.0+) Packing algorithm: Exact Shape traces the actual island outline; Bounding Box & Convex Hull are faster but less precisse |
Tip
Packed UV defaults to the same name as UV In, so by default the packed layout overwrites your source UV map. Set Packed UV to a different attribute name if you want to keep the original projection untouched.
General Tips
UV Map name — The UV Map string socket must match the name of the UV attribute on your mesh exactly. Blender's default is UVMap. You can check the attribute name in the Object Data Properties → UV Maps panel.
Stacking nodes — UV Planar Project, UV Box Project, UV Spherical Project, UV Cylindrical Project, and UV Camera Project write a UV attribute from scratch. Feed the result into UV Transform if you need to adjust it afterwards without losing the projection setup.
UV Attribute Transform as a sub-node — Because this node only operates on a vector, you can use it directly inside a custom node group to build composite projection setups without adding a full geometry pass.