A collection of my commonly used blender node groups (shading nodes, geometry nodes, ...)
 
 
Go to file
Frank Firsching 481cb00b23 ShapeGrammar icon got a default white background on export to png. 2024-02-06 22:18:56 +01:00
.vscode Initial commit. 2022-02-22 23:21:12 +01:00
assets A lot of new geo nodes: 2023-05-06 23:06:09 +02:00
geoNodes ShapeGrammar icon got a default white background on export to png. 2024-02-06 22:18:56 +01:00
icons Added localEnvUV world node. 2022-11-05 23:25:15 +01:00
scripts Added localEnvUV world node. 2022-11-05 23:25:15 +01:00
shadingNodes A lot of new geo nodes: 2023-05-06 23:06:09 +02:00
worldNodes Added localEnvUV world node. 2022-11-05 23:25:15 +01:00
.gitignore Added localEnvUV world node. 2022-11-05 23:25:15 +01:00
LICENSE Add LICENSE 2022-02-22 22:32:11 +00:00
README.md Added the ShapeGrammar geometry node. 2024-02-06 22:17:35 +01:00
blender_assets.cats.txt Added localEnvUV world node. 2022-11-05 23:25:15 +01:00

README.md

nodes_xyz

A collection of my commonly used blender node groups (shading nodes, geometry nodes, ...)

All the content is prepared to be used with blender's asset browser. Just add the root directory of this repository to the asset libraries in the preferences and enjoy all the content.

Getting started

To get the nodes either download the respecive blend file directly or download the full repository as a zip file using this button (download-icon) above.

To easily get access to the provided nodes, activate the Node Presets add-on and configure it to parse one of the subdirectories (e.g. shadingNodes).

As soon as the asset browser supports node groups in an official release, this organization might change a bit to support the asset workflow.

List of nodes

Shading utility nodes

HSV_Object_Variation

This node can be integated whenever a whole set of instances is being shaded (e.g. a bunch of rocks). It allows to vary each instance in hue, saturation and value.

If

Switches between 2 vector values based on a boolean input.

Object Size

A node, that can be used when shading multiple instances, that are scaled in size. Through this node, it's possible to get a factor of the size differences between the instances and align texture coordinates based on this factor.

Spherical Coords

A node, that takes e.g. a shading position and calculates the angles of spherical coordinates.

Voronoi Based Noise

A kind of noise node, that is based on a voronoi pattern

InteriorMapping

This is a shading node, that computes texture coordinates to make an image of a rendered room, like above, having depth. It can handle generating UVs for multiple rooms organized with UDIMs. The folder shadingNodes/rooms/ contains 4 example rooms with 2 different sizes. The example scene demonstrates how to use them and also how to set up the UVs of the quads representing the windows into the rooms.

Full materials

Water

A volumetric water material.

World shader nodes

LocalEnvUV

A node, that calculates environment map UVs for realizing a flat ground on an HDRI based world environment. Just connect this node to your environment image and adjust the size, camera height and the orientation angle to setup the HDRI.

Geometry nodes

BBoxField (Blender 3.1)

Contained within the deformObjectsToCurve.blend file, this node provides a field output, that defines the bounding box of each instance being provided through the Instances parameter.

BoxDeform (Blender 3.1)

Also contained within the deformObjectsToCurve.blend file, this node takes a normalized geometry (e.g. contained within the [0..1] cube) and interpolates the point positions to a box provided by the 8 corner input parameters.

Bricker (Blender 3.4)

This group takes a set of polygons lying flat on the xy plane. It then subdivides all of them along the principal x- and y-axes. Options are whether the quads of the grid are kept only if lying completely within the original polygon or if a partial overlap is okay. For partial overlap it's also possible, to align the outside points to the original geometry. In that case, the boundary layer wil not be squares anymore, but the geometry is aligning much closer to the original one.

Center Instance Locations (Blender 4.0)

This node group takes a geometry with a couple of instances and centers their location/origin.

Clustered Random (Blender 3.5)

This is a set of 2 geometry nodes. One to take a collection and arrange all instances in a set of clustered circles. Clusters are built based on the position of the instances. The second node takes these rearranged instances to sample a random element from one of the clusters. This can e.g. be used for building creation: Clusters would be the story of the building, the length of the element (1 unit, 2 units, ...).

Attributes:

  • Separate on x-Axis : If the collection forms something like walls, we can layout the wall panels along the x-axis and not use it for clustering criteria. This allows to model good continuity between the panels.
  • Cluster Geometry: The output of the CircleClustersCreate node into the sampling node.
  • Criteria X,Y,Z: These 3 inputs of the random sample node are fields, that will be evaluated to determine the right cluster to sample from.
  • Seed: Randomize the sampling

CurvePointInfo (Blender 3.4)

This is a small utility node within the cutSharpCorners node. It provides extended information about a point in a curve. Information is the previous and next point positions, the directions to those points and the angle between these 2 edges.

CutSharpCorners (Blender 3.4)

This geometry node analyzes the given input curves and cuts away those corners, that are sharper than a given threshold.

Deform Objects to curve (Blender 3.1)

This node group aligns a set of objects on a curve and additionally allows deforming them along the curve itself.

Fracture (Blender 4.0)

This node group divides an object into a certain amount of individual pieces. The idea is to be able to feed these instances at some point in time into a rigid body simulation. Until simulation nodes are up to that capability, thee's still the possibility to bake the geometry node and separate the individual pieces into their own objects. This can then be simulated with the existing RBD engine.

IslandCenterField (Blender 3.1)

A field node, that returns the center point of each mesh island.

Lerp (Blender 3.1)

Deprecated: Starting from Blender 3.4 one can use the float version of the mix node.

Contained within the deformObjectsToCurve.blend file, this is a simple node, that interpolates between 2 vector values based on a numeric input t, which is given in the range of [0..1].

Normalized Blur (Blender 4.0)

A node, that computes a soft selection. Feeding in a selection through a boolean field, it blurs the field, but it also ensures, that the originally selected points will still be selected 100%.

OffsetCurve (Blender 3.4)

This group generates a curve, that is a specified distance apart from the input curve. It works also on non-planar curves and concave ones.

PatternResample (Blender 3.5)

This group can resample a curve into segments, following a length pattern. For example a segment of length 2 followed by two segments of length 1. If the curve is longer than the sum of the provided segments, the pattern is repeated.

Plastic Deform (Blender 4.0)

This group is a simulation group. It deforms an object based on the intersections of another object.

ResetInstances(Blender 3.5)

This group takes a set of instances and resets their position and orientation back to the origin. This is similarly to checking the flag "Reset Children" on the "Collection Info" node.

SelectVectorAxis (Blender 3.5)

A node, that extracts a specific component of a vector. Similar to the built-in SeparateXYZ node, but determination of which component to use is done dynamically through an axis attribute on the node.

SetUpAxisTilt (Blender 3.1)

A node, that mimics blender's native z-Up curve orientation by calculating the corresponding tilt angles.

ShapeGrammar (Blender 4.0)

A geometry node, that takes a grammar rule as input (e.g. "AB?(CB)*A") together with a collection and a curve instances respective elements from the collection onto the curve. Rules are the following:

  • A-Z : references a geometry from the collection (A=first geometry, B=second, C=third, ...)
  • (...): groups elements together
  • ?: Marks a geometry or group as optional
  • *: Marks a geometry or group as repeatable

For example the grammar from above ("AB?(CB)*A") can be expanded to a length of 9 in the following way: ABCBCBCBA

So the resulting geometry is framed by instances of A, while inside instances of B and C alternate.

StringToField (Blender 3.5)

This node takes a string of up to 10 characters and generates an integer field from it.

Tissue (Blender 3.1)

This is a geo node group, that mimicks what the Tissue addon provided with blender is doing.

VisualizeInt (Blender 3.1)

Three nodes to debug node trees. They take a geometry and an integer field to display the field numbers at the respective geometrical elements. Available implementations:

  • VisualizePointInt
  • VisualizeEdgeInt
  • VisualizeFaceInt

Screenshot above shows the edge visualizer.

VisualizeVector (Blender 3.1)

Four nodes to debug node trees. They take a geometry and a vector field. It evaluates the field at each respective geometrical element and places an arrow which represents the vector of the field visually with its direction and magnitude. Available implementations:

  • VisualizePointVector
  • VisualizeEdgeVector
  • VisualizeFaceVector
  • VisualizeFaceCornerVector

Assets

The repository also will contain a list of small assets, that can be reused in multiple projects.

Coordinate System

Eye

UFO

A procedural UFO, that utilizes geometry nodes to build the spaceship from a cross section curve. This model additionally is rigged and has a laser mounted at the bottom.

Scripts

The scripts directory contains some little utility scripts, that are useful for asset handling.

  • createAssetCatalogsFromFileTree.py takes a directory structure and creates/updates a catalog file for blender's asset browser.
  • mark_scene_entities_as_asset.sh is a little script, that takes a scene file and marks the content as assets. It looks into the scene file and if there's only a single object, this objects gets marked as an asset, otherwise all top level collections will be assets. Additionally is finds the right catalog to sort the assets into, ensures there's a preview image and if needed even renders one.