Node Graph
The Node Graph panel lets you build materials from individual shading and texture nodes. Use it when a material needs logic beyond what the curated panel controls offer — channel mixing, procedural masks, blended layers or custom transforms.
Opening the Node Graph
Open the Node Graph panel from View ▸ Node Graph. If the entry is greyed out, choose View ▸ Unlock Advanced UI first. You can also click Open Node Editor in the Material Editor escape banner (visible when a material has been edited as nodes).
The panel docks to any edge of the workspace.
When to use node editing
The curated Material Editor controls cover the majority of physical-surface editing without any node knowledge. The Node Graph becomes the right tool when you need:
- A custom mix of two materials driven by a texture mask
- Procedural noise feeding a bump or roughness channel
- UV transform nodes applied differently per texture layer
- Colour maths (hue-shift, curves, value remap) inline in the graph
Every material edited in the Node Graph shows the Edited as nodes — curated controls disabled escape banner in the Material Editor. To return to curated controls, press Rebuild from Spec in that banner — this discards the node edits and restores the panel controls.
Toolbar
The Node Graph toolbar sits at the top of the panel:
| Control | Action |
|---|---|
| Material thumbnail | Preview of the current material |
| Assignment combo | Assign the selected part(s) to a material — picking from this combo re-points all selected parts to that material (parts share one material) |
| New material | New — create a fresh material and assign it to the selection |
| Frame all nodes | Frame all — fit all nodes in view (Home) |
| Frame selected | Frame selected — zoom to the selected node(s); frames all nodes if none (.) |
| Duplicate material | Duplicate material — give the selection a private copy of this material |
| Single-user | Single-user — give this part its own copy (only when shared) |
| Rename | Rename material — updates every part that shares it |
A live "shared by N" label beside the toolbar shows how many parts share the current material.
Navigating the graph
| Action | Gesture or key |
|---|---|
| Pan | Middle-drag |
| Zoom | Scroll wheel |
| Frame all nodes | Frame all nodes button, or Home |
| Frame selected | Frame selected button, or . (full stop) |
| Select | Left-click a node |
| Add to selection / toggle | Shift+click |
| Box select | Drag on empty canvas (Shift+drag adds to the current selection) |
| Select a wire | Click on or next to it |
| Cut wires | Ctrl+drag across wires |
| Select all | A |
| Move selected | Drag the node header |
| Delete selected node or wire | X |
| Delete and reconnect | Ctrl+X (heals the chain the deleted node was in) |
Adding and editing nodes
| Action | Gesture or key |
|---|---|
| Add node | Shift+A — opens the Add popup at the cursor; or drag from an output socket onto empty canvas |
| Duplicate | Shift+D |
| Mute | M |
| Tidy layout | T |
| Align selected left | Shift+X |
| Find | Ctrl+F |
| End the current gesture | Esc — see the value-editing notes below |
To copy nodes within the current graph, select them and press Shift+D. With the Node Graph docked in the main window, Ctrl+C runs Render ▸ Copy Image even while the Node Graph is focused, so it does not copy nodes in the current build.
Note: With the Node Graph focused, Delete runs Edit ▸ Delete Selected on the scene parts — not on graph nodes. Use X or Ctrl+X to delete nodes. F frames the viewport selection. Space plays and pauses the timeline. These keys are claimed by the application even when the graph is focused.
Editing values
An unconnected input shows its local value where that type supports an inline control. Once you connect a wire, the incoming connection supplies the value and the local control is hidden.
- Numbers: drag the value horizontally, or double-click it to type a value. For a vector, edit the X, Y or Z component separately.
- On / off values: click to toggle.
- Choices: click the value and choose an item from the menu.
- Colours: click the swatch to open the colour picker.
- Files: click the file value to choose a file.
Esc stops a numeric scrub or node drag where it is; it does not restore the starting value or position, and it does not finish the edit. Release the mouse normally to finish an edit. To go back, type the starting value back in. When you drag the input end of an existing connection, the wire is disconnected as soon as you pick it up; if you press Esc, or release anywhere other than a compatible input, it stays disconnected. Reconnect it if needed.
Finding a node in a large graph
With the graph canvas focused, press Ctrl+F and type part of a node name. Enter steps forward through matches; Shift+Enter steps backward. Each result becomes selected and centred without changing the zoom. Esc closes the search field.
Ramps, curves and optical layers
Click a node's preview strip to open its ramp, curve or layer editor. The nodes that open an editor are: Color Ramp, RGB Curves, Float Curve, Vector Curves and Multi-Layer Optics BSDF. Changes update the node as you work. Done closes the editor and keeps the changes; Esc also closes it and keeps them. Opening another node's editor while one is open closes the first one; press Done first so its changes are finished as their own edit.
For Multi-Layer Optics BSDF, the layer editor pairs each layer's IOR with its thickness in nm. Add Layer adds a row with IOR 1.5 and thickness 550 nm. Edit IOR from 1.0 to 3.0 and thickness from 1 to 5000 nm, or use the row's × button to remove it. The editor allows up to eight layers.
Nodes
Each node is a box with a title row, input sockets on the left and output sockets on the right. Drag from an output socket to an input socket to connect. An existing connection can be rerouted by dragging from the destination socket.
Node categories
Nodes are organised into these categories in the Add popup (Shift+A):
| Category | What it provides |
|---|---|
| Shader | Surface, emission and other closure nodes |
| Texture | Image, noise, procedural and other texture nodes |
| Color | Colour mixing, hue/saturation, curves, invert and related |
| Vector | Bump, normal map, mapping transforms, vector maths |
| Geometry | Geometry FX nodes — not shown in the Add popup in the standard configuration of this release |
| Converter | Value conversion and utility nodes |
| Input | Constant values, texture coordinates and scene attributes |
| Output | Material Output, the node the material renders from |
| Layout | Reroute dots for organising connections |
Use the Add popup (Shift+A) to browse all available nodes.
Click the triangle at the left of a node header to collapse or expand it. A collapsed node hides its values and preview strip; expand it to edit them. Collapsed nodes keep their connection pins available.
Type in Search nodes… to filter the list; the first match is highlighted. Press Enter to add the highlighted node, or click any node in the list. Esc closes the popup. When you open it by dragging from an output socket into empty space, the list is filtered to nodes that can accept that connection. Dragging from an input socket opens the full list. Use Shift+A to browse without any connection filter.
Material Output node
Connect the final surface shader to Surface, a volume shader to Volume, a displacement vector to Displacement, the Style output of Outline Style or Toon Ink to Outline, and the output of Ground Receiver to Ground on Material Output, as needed for the material. The first output node in the graph is protected from deletion; the Add popup can create additional output nodes.
Organising connections with Reroute
Double-click an existing wire to insert a Reroute dot. The original connection is split through the dot, which becomes selected. You can also add a Reroute from the Layout category and connect it yourself. With a dot selected, Ctrl+X removes it and reconnects the chain; X removes it with its connections.
Working with texture nodes
- Press Shift+A to open the Add popup, then select a node from the Texture category.
- For an image texture node, locate the file row in the node and load or browse for an image.
- Connect the node's output to the desired input on a shader node.
- To tile or offset the texture, insert a Mapping node between a coordinate node and the texture's vector input.
Shader nodes
The Shader category contains nodes that expose the same physical parameters found on the Material Editor Surface tab — Base Color, Metallic, Roughness, IOR, Transmission Weight and more — as sockets that accept either inline values or connected signals.
Keyframing in node graphs
Node inputs carry key buttons. Click a key button to add a keyframe; Alt-click to remove it; right-click to open the key menu: Add Keyframe (or Add Step Key on held channels), or Remove Keyframe when the playhead is on a key; then Jump to Previous Key, Jump to Next Key and Clear All Keys on This Channel (enabled when animated); jump items show the target frame when there is one. On vector and colour inputs the menu works per component: Key This Component, Remove Key on This Component, Key All Components, Remove Keys on All Components and Clear All Keys on These Channels. For a node-edited material, key values on the node inputs; the Keyframes tab lists only the material assignment.
Node reference
The tables below describe the registered nodes, grouped by category. Entries marked deferred are not offered in the Add popup. Nodes marked "Not shown in the Add popup in the standard configuration of this release" cannot be added from the Add popup in this release; documents that already contain them keep them.
Shader
| Node label | xmlName | Purpose | Notes |
|---|---|---|---|
| Principled BSDF | principled_bsdf | Full-physics surface — base colour, metallic, roughness, IOR, transmission, subsurface, coat, sheen | — |
| Mix Shader | mix_closure | Blend two shader closures by a factor | — |
| Emission | emission | Self-illuminating surface | — |
| Diffuse BSDF | diffuse_bsdf | Lambertian diffuse surface | — |
| Glossy BSDF | glossy_bsdf | Mirror-glossy reflection surface | — |
| Metallic BSDF | metallic_bsdf | Metallic surface with conductor Fresnel | — |
| Glass BSDF | glass_bsdf | Glass with refraction and reflection | — |
| Refraction BSDF | refraction_bsdf | Refraction-only surface | — |
| Toon BSDF | toon_bsdf | Toon-shaded diffuse surface | — |
| Sheen BSDF | sheen_bsdf | Cloth sheen (microfibre) surface | — |
| Cloth BSDF | cloth_bsdf | Woven cloth (Irawan–Marschner model) | — |
| Dispersion BSDF | dispersion_bsdf | Spectral glass dispersion (Cauchy model) | — |
| Multi-Layer Optics BSDF | mlo_bsdf | Multi-layer optical stack (lacquer, coatings) | Layer editor |
| Translucent BSDF | translucent_bsdf | Diffuse light transmission | — |
| Transparent BSDF | transparent_bsdf | Pure transparent pass-through | — |
| Subsurface Scattering | subsurface_scattering | Sub-surface light transport | — |
| Holdout | holdout | Cuts a compositing hole in the render | — |
| Ambient Occlusion | ambient_occlusion | Baked proximity shadowing | — |
| Add Shader | add_closure | Add two shader closures | — |
| Background | background | Background / sky emission | — |
| Principled Volume | principled_volume | Physical volumetric material | — |
| Scatter Volume | scatter_volume | Volume scattering | — |
| Absorption Volume | absorption_volume | Volume absorption | — |
| Dirt Layer | vizid_dirt_layer | Layer dirt / grime over a base shader | VIZid stylized |
| X-ray Surface | vizid_xray_surface | Renders a see-through X-ray silhouette | VIZid stylized |
| Outline Style | vizid_outline_style | Sets outline render style for this material | VIZid stylized |
| Ground Receiver | vizid_ground_style | Marks surface as a ground shadow receiver | VIZid stylized |
| Toon Ink | vizid_toon_ink | Ink-line / cel outline surface shader | VIZid stylized |
| Wood BSDF | wood_bsdf | Physical wood surface — integrates with Wood Texture | VIZid procedural wood |
| Principled Hair BSDF | principled_hair_bsdf | Full-physics hair closure | Not shown in the Add popup in the standard configuration of this release |
| Hair BSDF | hair_bsdf | Simple hair closure | Not shown in the Add popup in the standard configuration of this release |
Deferred (not in Add popup): mix_closure_weight, aov_output.
Texture
| Node label | xmlName | Purpose | Notes |
|---|---|---|---|
| Image Texture | image_texture | Load an image file and sample it as a texture | File input |
| Noise Texture | noise_texture | 3D Perlin noise — good for bump and roughness variation | — |
| Voronoi Texture | voronoi_texture | Cell-based noise for organic patterns | — |
| Sky Texture | sky_texture | Procedural physical sky | — |
| Gradient Texture | gradient_texture | Linear or radial colour gradient | — |
| Gabor Texture | gabor_texture | Anisotropic wave-based noise | — |
| White Noise Texture | white_noise_texture | Random white noise | — |
| Wave Texture | wave_texture | Sinusoidal wave bands | — |
| Magic Texture | magic_texture | Psychedelic multi-colour noise | — |
| Checker Texture | checker_texture | Two-colour checkerboard | — |
| Brick Texture | brick_texture | Procedural brick / tile pattern | — |
| Environment Texture | environment_texture | Load a lat-long HDR environment image | File input |
| Wood Texture | wood_texture | Procedural wood grain, rings and figure (196 inputs) | VIZid procedural wood |
| Dirt Mask | vizid_dirt_mask | Procedural dirt / occlusion mask for layering | VIZid stylized |
Color
| Node label | xmlName | Purpose | Notes |
|---|---|---|---|
| Mix | mix | Mix two colours by a factor | — |
| Color Ramp | rgb_ramp | Map a value to a colour along a gradient strip | Complex UI |
| RGB to BW | rgb_to_bw | Convert colour to greyscale luminance | — |
| Invert Color | invert | Invert colour values | — |
| Mix Color | mix_color | Blend two colours using a blending mode | — |
| Gamma | gamma | Apply a gamma curve to a colour | — |
| Bright/Contrast | brightness_contrast | Adjust brightness and contrast | — |
| Hue/Saturation/Value | hsv | Shift hue, saturation and value | — |
| RGB Curves | rgb_curves | Per-channel and combined curve editor | Complex UI |
| Float Curve | float_curve | Single-channel curve for float values | Complex UI |
Vector
| Node label | xmlName | Purpose | Notes |
|---|---|---|---|
| Mapping | mapping | Translate, rotate and scale UV or other coordinate inputs | — |
| Bump | bump | Convert a height map to a surface normal offset | — |
| Normal | normal | Explicit normal vector input with a dot-product output | — |
| Vector Math | vector_math | Vector arithmetic (add, subtract, dot, cross, normalise, …) | — |
| Vector Rotate | vector_rotate | Rotate a vector around an axis | — |
| Vector Transform | vector_transform | Transform a vector between world, object and camera space | — |
| Vector Curves | vector_curves | Per-component curve for a vector | Complex UI |
| Normal Map | normal_map | Decode a tangent-space normal map image | — |
| Displacement | displacement | Drive geometry displacement from a height or vector | — |
| Set Normal | set_normal | Override the surface normal with a connected vector | — |
Geometry
These nodes are not shown in the Add popup in the standard configuration of this release.
| Node label | xmlName | Purpose |
|---|---|---|
| Fuzz | vizid_geo_fuzz | Micro-fibre surface coverage (velvet, felt) |
| Flakes | vizid_geo_flakes | Reflective metallic flake particles |
| Water Droplets | vizid_geo_droplets | Surface water droplets |
| Bubbles | vizid_geo_bubbles | Sub-surface bubble effect |
| Foam | vizid_geo_foam | Foam cell geometry and surface appearance |
| Displace | vizid_geo_displace | Per-vertex surface displacement |
| Fur | vizid_geo_fur | Fur fibre generation |
| Hair | vizid_geo_hair | Hair / fibre generation |
Converter
| Node label | xmlName | Purpose | Notes |
|---|---|---|---|
| Math | math | Scalar arithmetic (add, multiply, power, sin, …) | — |
| Mix Float | mix_float | Blend two float values | — |
| Mix Vector | mix_vector | Blend two vectors | — |
| Mix Vector (Non-Uniform) | mix_vector_non_uniform | Blend two vectors with per-component factors | — |
| Combine Color | combine_color | Combine three floats into a colour in RGB, HSV or HSL mode | — |
| Combine XYZ | combine_xyz | Combine X, Y, Z floats into a vector | — |
| Separate Color | separate_color | Split a colour into three floats in RGB, HSV or HSL mode | — |
| Separate XYZ | separate_xyz | Split a vector into X, Y, Z floats | — |
| Wavelength | wavelength | Convert a wavelength in nm to a colour | — |
| Blackbody | blackbody | Convert a colour temperature (K) to a colour | — |
| Map Range | map_range | Remap a float from one range to another | — |
| Vector Map Range | vector_map_range | Remap each component of a vector | — |
| Clamp | clamp | Clamp a float to a min/max range | — |
Deferred (not in the Add popup): radial_tiling, raycast.
Input
| Node label | xmlName | Purpose | Notes |
|---|---|---|---|
| Texture Coordinate | texture_coordinate | Generated, UV, object, camera, normal, window and reflection coordinate sources | — |
| Fresnel | fresnel | View-angle Fresnel factor | — |
| Layer Weight | layer_weight | Facing and blend weight for layered shaders | — |
| Geometry | geometry | Surface position, normal, tangent, true normal, incoming, parametric, backfacing, pointiness and random per island | — |
| UV Map | uvmap | Named UV map from the mesh | — |
| Light Path | light_path | Ray type and bounce count (is-camera-ray, is-shadow-ray, …) | — |
| Light Falloff | light_falloff | Quadratic, linear and constant light falloff | — |
| Object Info | object_info | Per-object location, colour, alpha, object index, material index and random value | — |
| Camera Data | camera_info | View distance, view Z depth, view vector | — |
| Value | value | Constant float value | — |
| Color | color | Constant colour value | — |
| Attribute | attribute | Named scene or object attribute | — |
| Wireframe | wireframe | Wireframe edge detection factor | — |
| Tangent | tangent | Tangent direction for anisotropy | — |
| Bevel | bevel | Edge bevel shading (ray-based) | — |
| Color Attribute | vertex_color | Per-vertex or per-face colour attribute | — |
| Curves Info | hair_info | Hair curve attributes | Not shown in the Add popup in the standard configuration of this release |
Deferred (not in the Add popup): particle_info, point_info, volume_info.
Output
| Node label | xmlName | Purpose | Notes |
|---|---|---|---|
| Material Output | output | Graph root — accepts surface, volume, displacement, outline style and ground style | First output node protected from deletion |
Layout
| Node label | xmlName | Purpose | Notes |
|---|---|---|---|
| Reroute | reroute | Split a wire through a dot to organise connections | Double-click a wire to insert one |
Related
- Shader nodes, Texture nodes, and Colour nodes — surface, image and colour processing reference
- Vector nodes, Converter nodes, and Input nodes — coordinates, conversion and scene inputs
- Geometry nodes, Output nodes, and Layout nodes — geometry effects, graph outputs and reroutes
- Materials — curated surface controls and the escape banner
- Textures and Labels — image textures in the curated panel
- Surface Effects — FX tab effects
- Procedural Wood — the Wood material type