I’m in the proccess of building a material node-based library, and so was in need of a test scene, that also might document the process in a more interesting way. Decided to recreate one of my favourite architecture projects (found it on ofhouses.com, great archive)
Mind you, some changes are intended, but will try to also have a more accurate version in the end. Anyway, I’ll keep posting the progress:
Edit: picture order
Edit2: change post purpose, add comparison slider
Changed the “bump standard” in the library, height goes from -1 to 1 so every pattern/texture can be mix and matched — I essentially multiply the original normalized height [0-1] by a value between -1 to 1 (usually within millimetres) and add all of them. Then connect the already scaled height into the node group wrapping a bump node. This supports both positive and negative numbers for bump, mimicking how displacement works.
Just realized I have not mentioned the way I’m approaching this library, think of this as an informal design doc for myself.
For the nodes graphics I’m using this addon (still in beta) by @draberf. Had to convert to png because Discourse seems to mess with it’s contents
Guiding Ideas
Nodegroups should be moduralized just like vanilla nodes, complex nodegroups are made out of simple ones, decreasing duplicated work through reusability.
Nodegroups are separated into categories that define what is their expected purpose/interface.
Naming
Mapping.Triplanar
$category[.$namespace].$name
Categories
Float/Color/Vector: General utilities that come out of recurring node setups Coordinates: Texture mapping shenanigans. Pattern: Akin to vanilla textures (Noise, Voronoi), output either a float or sometimes a color value. To be used to drive Texture groups or compose different Height groups. Height: Encapsulated Patterns that only output a Height and Normalized Height values. Texture: Outputs Color/Roughness/Height and it’s purpose is to eventually connect to a Principled BSDF, but to be further modified before that. (eg. mixing with a Height group) PBR: Well, the last step of the material. Some are very specific (eg. PBR.Glass), others quite general PBR.Micro Roughness. Bump: [User Facing] Height group wrapped in a Bump Node to easily chain them. Material: [User Facing] self contained materials.
User Facing: Nodegroups of this kind should work out of the box. They should have a shader output, expose most of available settings underneath but still output all of it’s major components (eg. Color, Roughness).
Dev Facing: Nodegroups of this kind are to be mix and matched with other nodes and not expected to work by themselves (eg. Texture.Wood nodegroup has no default coordinate system whereas Material.Wood does).
Iterated a bit on my todo/task logging system, I feel I want to do a post on that, someone might find it useful, I sure do like to see other people’s ways of organization.
Reworked the Physical Starlight and Atmosphere to work without the addon (took a lot of rewiring and adding the math that was done on the python side).
Also got rid of the Sun Position addon, I had no need for the sun light and instead redid all the math in shader nodes! (Only the sun_position nodegroup is included, pretty sure I cannot share the modified PSA one)
I was not happy on how I could influence the wood in the previous nodegroup.
The new apporach was slicing the 3D textures to get the “wood cut” that I wanted, also added a “Core” section to emulate the exansion of the grain when it gets to the center.
Will eventually improve this further but for now it works.
Added tile split with masking (used to produce the flemish bond). Quite a bit of work figuring out how to make the tile index work again. Still got to do vertical split, but that’s for another day.