2
$\begingroup$

I am making lots of product visuals with Blender. Often the same products with different colors and prints.

I have a product that has a few color variants and is composed of several elements. Each element has their own shades of the particular hue, so to keep things faithful, I need to manage a list of 3-color sets.

Each set is a general option like Yellow, Blue, or Green, but the colors within hat set need to drive different materials for different parts of the model.

The model is composed of multiple objects, with arrays, curves, modifiers and stuff. But there are only 3 materials that need color fed from the pallete.

I'm thinking of a way to have a single Integer control node (or even a helper empty to rotate) so I can quickly choose the color scheme for the model.

I will usually have only one set of the objects in a scene, But being able to do this for multiple sets would be a nice thing for the future.

My first approach would be to create a set of NodeGroups - one for getting the "Pallete Index" into the different Materials, and then each material would have a Color Ramp node that'll interpret that Pallete Index in context of each particular material.

Another idea I had would be to use Animation Nodes and Structs, but I'm new to AN and my first try using that wasn't particularly successful...

Maybe there's something else perfectly matching my use case that I am not aware of. What would you go for?

EDIT:

For now I created two NodeGroups. One with the Color Index Number node to be able to "teleport" that value across multiple materials. The second one contains multiple Color Ramp nodes (using the "Constant" mode) that are all fed with a single Index input, and deliver the corresponding color sets through multiple color output sockets.

This way I can relatively easily edit all the Color Ramps (Palettes) without jumping between NodeGroups, and also I always have all that data easily available in all materials where I put that single Node Group. Using separate Node Groups for all Color Ramps (that I tried first) needlesly increases the complexity and time needed to tweak this setup.

I don't know how to get an easily controllable range-limited Integer value to drive the color pallette. Right now I have an arbitrary Number node that give useful results between 0 and 1, but It'd be more convenient to have a node that has a Integer number that I can increment and decrement in some range (say: between 1 and 10).

$\endgroup$
1
$\begingroup$

Within a node group, use an RGB input node and multiple colour outputs with colour variation nodes to get the variations you want in a group. Each material can then use the relative variation output from the group and when the main colour in the group is changed each use of the group will change to match.

colour variation node group

For multiple colour groups in a scene, you could duplicate the group so that you have one for green, one for red...

Beyond that, you could look at drivers. Have a look at CGCookies Flexrig. The Flexrig contains custom properties to define the colour used for hair, shirt, pants and so on, with drivers reading the rigs custom properties to define the colour used.

$\endgroup$
  • $\begingroup$ That'd be a great if the color variation are always the same, in my case it's not that linear though. $\endgroup$ – unfa Jun 6 '17 at 9:04
  • $\begingroup$ Sounds like you will need a node group for each palette. You can connect for example the saturation to a group input and each material can use it's own saturation variation value from the same base colour. Similarly you could have a numeric input that connects to a ColorRamp input. $\endgroup$ – sambler Jun 6 '17 at 9:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.