text:
Keyframe bones that are hidden and not selected
I'm making some keyframes on a rig that has tweak bones. Most of my poses do not use the tweak bones, so I want them at rest pose. Occasionally a pose does need a tweak bone. This means that in every pose that uses the tweak bone, I need them keyframed at their needed position, and every pose that doesn't use a tweak bone, I have to keyframe them at Rest. And every time I scrub through an area where the tweak bones have a pose, they will stay in that pose even though they are hidden and accidentally get left on.
The result of all this is a lot of time spent hiding/showing tweak bone layers, and having to interact with them constantly, which is very inefficient.
I am looking for a way to keyframe them without having to show their layer and select them all. It seems my workflow would be much more efficient if it was possible to establish a group of bones, and be able to keyframe them all at once regardless of if they are showing or selected. It seems that the Whole Character option on the keyframe menu does this, but it also keyframes a ton of extra things that I don't want to keyframe.
Does anyone know a way to do this, or another solution to this problem?

What about this?

@Crantisz can't tell what/where that is I'm afraid.

It's a button, that show keyframes/channels  that currently invisible.

@Crantisz that looks like it only effects display in the Dope Sheet. Doesn't seem to have anything to do with adding keyframes to bones?

The code to the "whole character" keyingset is available at 2.79/scripts/startup/keyingsets_builtins.py   It can be pretty much copied to make a new custom keying set for your "TWEAK" bones by only iterating over bones in hidden layers, and / or by name prefix etc.   A small sample file with info on which bones and what paths to keyframe would clarify somewhat.

"Tweaking" BUILTIN_KSI_WholeCharacter class.
The class of the "whole character" keyingset, BUILTIN_KSI_WholeCharacter,  is available at 2.79/scripts/startup/keyingsets_builtins.py It can be pretty much copied to make a new custom keying set for your "TWEAK" bones by only iterating over bones in hidden layers, and / or by name prefix etc. A small sample file with info on which bones and what paths to keyframe would clarify somewhat.
Test script below, adds keyframes to bones hidden either via bone.hide or via unshown layer.  Prints "generate <bone.name>" for each keyframed bone.
This example edits the class method KeyingSetInfo.iterator to only iterate over hidden bones.  The iterator method chooses what iterable, in this case pose bones, should have keyframes generated.
import bpy
from keyingsets_builtins import KeyingSetInfo, BUILTIN_KSI_WholeCharacter

class CUSTOM_KSI_HiddenBones(KeyingSetInfo):
    """Insert a keyframe for all properties that are likely to get animated in a character rig """
    """(only selected bones)"""
    bl_idname = "HiddenBones"
    bl_label = "Whole Character (Hidden bones only)"

    # iterator - all bones regardless of selection
    def iterator(ksi, context, ks):
        # Use either the selected bones, or all of them if none are selected.
        bones = context.selected_pose_bones or context.active_object.pose.bones
        ob = context.active_object
        arm = ob.data
        def hidden(pb):
            bone = pb.bone
            # bone on these layers
            layers = [i for i, l in enumerate(bone.layers) if l]
            return bone.hide or not any(arm.layers[i] for i in layers)
        bones = [pb for pb in ob.pose.bones if hidden(pb)]
        for bone in bones:
            if bone.name.startswith(BUILTIN_KSI_WholeCharacter.badBonePrefixes):
                continue
            print("generate", bone.name)
            ksi.generate(context, ks, bone)

    # Poor man's subclassing. Blender breaks when we actually subclass BUILTIN_KSI_WholeCharacter.
    poll = BUILTIN_KSI_WholeCharacter.poll
    generate = BUILTIN_KSI_WholeCharacter.generate
    addProp = BUILTIN_KSI_WholeCharacter.addProp
    doLoc = BUILTIN_KSI_WholeCharacter.doLoc
    doRot4d = BUILTIN_KSI_WholeCharacter.doRot4d
    doRot3d = BUILTIN_KSI_WholeCharacter.doRot3d
    doScale = BUILTIN_KSI_WholeCharacter.doScale
    doBBone = BUILTIN_KSI_WholeCharacter.doBBone
    doCustomProps = BUILTIN_KSI_WholeCharacter.doCustomProps

classes = [CUSTOM_KSI_HiddenBones]

def register():
    from bpy.utils import register_class
    for cls in classes:
        register_class(cls)

def unregister():
    from bpy.utils import unregister_class
    for cls in classes:
        unregister_class(cls)

if __name__ == "__main__":
    register()

To make an iterator that selects bones in active bone group
bones = [pb for pb in ob.pose.bones
        if pb.bone_group == ob.pose.bone_groups.active]

Each pose bone has its keyframes generated using the KeyingSetInfo.generate method.  The generator keys in the desired keyframes for each iterable.  In example above that has been "poor man's subclassed" generate = BUILTIN_KSI_WholeCharacter.generate from the whole character built in.
Let's have a look at the BUILTIN_KSI_WholeCharacter.generate method
    def generate(ksi, context, ks, bone):
        # loc, rot, scale - only include unlocked ones
        if not bone.bone.use_connect:
            ksi.doLoc(ks, bone)

        if bone.rotation_mode in {'QUATERNION', 'AXIS_ANGLE'}:
            ksi.doRot4d(ks, bone)
        else:
            ksi.doRot3d(ks, bone)
        ksi.doScale(ks, bone)

        # bbone properties?
        ksi.doBBone(context, ks, bone)

        # custom props?
        ksi.doCustomProps(ks, bone)

    # ----------------

Pretty straight forward. To remove custom properties from the keying set, could define (and hence override) the generate method, and remove or comment out ksi.doCustomProps(ks, bone) to have no custom properties keyed in.
Alternatively, could reuse the generate method and  set up a dummy method and define for each of the keyframes you wish to bypass, for example do nothing for  b-bones or custom properties.
def dummy(*args, **kwargs):
    return None

class CUSTOM_KSI_HiddenBones(KeyingSetInfo):
    ...
    generate = BUILTIN_KSI_WholeCharacter.generate
    doBBone = dummy
    doCustomProps = dummy
    ...

This seems like most of what I need. What would need to change to make it 1) keyframe all bones in a bone group, hidden or not or 2) just keyframe all bones, hidden or not?

Also, I notice that when I use Whole Character in any capacity, it keyframes all my rigify properties in the N panel, like IK and FK switch. I'd like it to not do that. Any ideas?

@Drudge have edited answer to cover comments above.

I guess this would require sripting.
Each bone can be added a property.
Then select based upon property name or property value.
Here is a question and answer in that direction :
How to check if an object has a custom property with python?
For Python commands about bones (hiding unhiding):
https://docs.blender.org/api/blender_python_api_2_59_0/bpy.ops.pose.html
BTW those python commands seam to indicate can they support groups, but using a property might be more flexible, depending on what you want.


text:
Access hair child strands (animation nodes)
Animation nodes has a Hair Data node that allows you to get Splines from Particle Hair strands. However, it does not seem to output child hair strands. Is there any way to get the Child hair strands as splines or edges too?

I don't think it is possible. Children particles aren't "real" they follow the existing parent particle based on child settings. I expect they are dynamically calculated as needed so don't have any real data to read from that can be exposed in AN.

@sambler 's point does indeed seem to be true, check: https://developer.blender.org/T33287

Children splines can be generated inside Animation Nodes with similar results. Would you be interested in a workflow where one create children splines inside Animation Nodes?

@OmarAhmad yes, that would be great. I'm trying to get similar behavior to particle children in terms of offset and noise from the parent, but I want to turn it all into mesh/curves in the end.

I will get to answering the question then :). May couple of days.

Problem Definition
Animation Nodes provides a set of nodes that returns some information about particle systems, however, non of which provides any information regarding hair children, and this is a known limitation in blender.
To get around this, we shall replicate the children system in blender's particle system using Animation Nodes.
Inputs
Our input is a list of poly splines that represents the hair returned by the Hair Data Node :

Each of the following section will concern with on particular aspect about children, any section can be ignored if it has no need for you. We shall attempt to replicate all children options.
Children Generation
Given a single spline that represents a single hair, the simplest of things we can do to generate some children would be as following. We can make copies of that spline, move them around in random directions and return them. Animation Node have a particular node that does exactly that, the Replicate Spline Node:

Notice that the used transformations acts as offsets to the original spline locations, this is due to the fact that splines are described in global space, something we have defined in the Hair Data Node. So it is sufficient to use the output of the random vector node directly.
Tangent Based Offsets
The previouse simple method imposes certain effect that you might consider faulty, since the hair can move freely in any direction, it might move away from the surface and be considered detached from the mesh. A solution is to restrict the motion to the two axis that are perpendicular to the tangent. There are many ways which we can do this, the simplest of which would be to project the random vectors on the plane with normal equal to the tangent at the start of the splines:

Notice that the magnitude of the random vector may change based on the angle they make with the normal of the plane, so you might want to renormalize the random vectors accordingly. A more efficient method to do that same thing would be to compute two perpendicular vector that are perpendicular to the tangent, Animation Nodes already gives us one of those vectors, the Normal vector (Though it can still be computed by taking the cross product between the tangent and some arbitrary unit vector), if we take the cross product between the tangent and the normal, we will get a cotangent that is perpendicular to both vectors, if we define the random vectors as a linear combination between the normal and the cotangent, we will get similar results to the projection method:

Remember that a linear combination between two vectors is the sum of the vectors multiplied by some scalar, in this case, random scalars. This works because both vectors are linearly independent from the tangent, this guarantee there won't be an offset along the tangent direction.
Surface Normal Based Offsets
Using the tangent of the first bit of the hair spline may not achieve the result we are looking for, this is due to the fact that if the angle between the tangent and the surface normal at that point is high enough, the offset will still be away from the surface and subsequently it will look detached ! So a possible fix is to use the surface normal at that point instead, to get the surface normal at the tip of the hair, we can use the BVH Find Nearest Surface Point Node:

This, I think, is the method blender uses because it gives very similar if not identical results to the children hairs. It should be noted that this method is more expensive than other methods because it required BVH operations which are costly for large data sets.
Advanced Point To Point Offsets
To really get fine control over the output spline, we will take it a step deeper and edit the individual points of of the spline. We will first evaluate some points on the spline, get their locations, normals and cotangents, to get the cotangent, we use the cross product as we learned before. Then we create a loop that has two iterators which are some random values that we will use as scalars in the linear combination just as before, inside the loop, we perform the linear combination and create a poly spline from the result and return them:

Now that we have a good base children hair, we can go ahead and add some effects to it.
Clump Effect
A clump effect is making the hair closer to each other at the tip or the root of the hair, since we are actually offsetting the children's points, all we have to do is to scale down the offset factor based on the location along the hair, for instance, if we were to clump the hair at its root, will will multiply the scalars of the linear combination by some small value for points near the root and leave the scalars of the points at the tip as this, in other words, we will multiply all the scalars by values ranging from zero to one where zero is at the root and one is at the tip:

The added nodes are highlighted in blue. If I want the clumping to happen at the tip, I simply have to invert the values of the interval:

Let us take it a step further and control the clump factor using an interpolation curve, all we have to do is to evaluate the interpolation at the values we used before:

Which gives the effect:

Randomize Hair Points
Adding noise to the hair is as easy as adding the random vectors on the hair points, so I will leave this one to you.
Hair Trimming
We can trim hair using the Trim Spline Node:

We can also input random values from the trim node:

Which results:

Hair Noise
We can use Animation Node's noise functions to offset hair points and making it look a bit noisy:

Noise can be evaluated three times to construct a vector noise which can be add on the final point locations instead of the offset factor.
Curl Kink
Curl king is shaping the hair as a helix. This can be done by adding a vector defined by the parametric equation of the circle ($x = cos(t), y = \sin(t)$) where the parameter $t$ is a scalar multiple of the index of the point along each hair, this is exactly the equation of the helix except we are using the normal and contangent as the fundamental vectors of the space where is the normal helix equation is defined in terms of the $x$ and $y$ fundamental vectors:

Which results:

Notice that we can optimize the node tree by putting the interpolation and kink computations outside the loop since it is constant for all hair strands:

Radial Kink
Radial kink is making the hair oscillate as a sine wave radially around the base hair, so it is as simple as adding a sine wave by the factor we generated from the interpolation:

I have shown most of the effects achievable through hair children system in blender, there are millions of other ways to control the children, I think I have showed the workflow and you will be able to do whatever you want yourself. Finally, here is a sample blend file for a combination of effects to play with and explore:

Another amazing answer! I'm trying out your file, but the 4 Vector Math Scale nodes in the bottom loop are all giving me a 'lists have different length' error and the script doesn't seem to be generating anything. Do you know why this is? I have not changed any settings.

@Drudge Can you measure the length of each list that is going in those node and report back? using the Get List Length Node.

Upon looking closer, it looks like a lot of nodes in the whole setup are no longer connected together. This is also happening in other files. In the Skin Modifier filed you shared, NONE of the nodes are connected at all. This seems like a problem with versions or something. Can you tell me what version of Animation Nodes, and what version of blender you are using? I have 2.79 release and AN 2.0.4

@Drudge I see, I am sorry, I didn't know that this would be a problem. I am using v2.1 which isn't released yet. Will you be able to compile 2.1 yourself? If not, I will try to downgrade my version and build the node tree again.

@Drudge Found out what is wrong. Spline normals output was added in version 2.1 so the node tree will not work in your version. Let me know if you can compile it, what OS are you using?

I'm using windows 7. I'll look into compiling it myself. I was already looking into it as I want a build with python 3.6.3 so it can work with 2.79 nightly builds. Glad to know what was the issue though!

Dear Omar: FABULOUS answer! Thank you.
Just one problem: AN 2.0 and 2.1 are available for Python 3.5 and 3.6, but current Blender Foundation builds of Blender 2.79 come with Python 3.7.
Do you know of any Animation Nodes package that will work with Python 3.7 ?

@TomTelos Sorry, but I don't think there are any 3.7 builds out there. If you are on Arch Linux, Animation Nodes exist in AUR. I am on Arch, so if you need a prebuilt one I can upload one for you.

Thank you, Omar; actually, I'm on Mac OS 10.13.
The reason I was looking into Animation Nodes
was an attempt to figure out the actual length
of a hair strand being rendered by Cycles,
as I explain here:
https://blender.stackexchange.com/questions/118269/cycles-access-actual-length-of-hair-strand
Then again, perhaps it would suffice if I could read
the vertex weight (from a named vertex group)
of the vertex nearest the root of the hair strand.
The OSL manual mentions per-vertex primitive variable; do you know if there is a standard way
in OSL to refer to vertex weight?

@TomTelos Sorry, I don't have experience in OSL. But feel free to ask a question, someone might know the answer.

Wow wow wow, Omar. Great answer and wonderful screenshots of nodes. I wish you would consider writing books on Animation Nodes for beginners, intermediates and experts. You have that marvellous brain that we all want.

Omar, I like how you added blend file under your answer. :) Thank you for blend file.

source: Stack Exchange

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/3.0/

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

sort: votes


text:
Fully disable node auto-offset
The node editor's auto-offset feature can be disabled under the View menu. However, any time you open a new node editor window, it will be enabled by default in that window. I am looking for a way to have it be disabled by default when creating new node editor windows. Is this possible? There are options to control the amount of offset in Preferences -> Editing -> Miscellaneous. But not to disable it completely.

Hi :). Setting it to 0 pixels effectively disables it. Why doesn't that work for you? :)

Also opening a new node editor keeps the Auto-Offset disabled in Blender 3.1 :))

@JachymMichal The offset amount is how much space is made between nodes when it offsets. 0 means no space, but it will still position them side to side, so that doesn't work. And I am using 3.1 and this still happens :(

There's a new option for this at Preferences -> Editing -> Node Editor in Blender v4.0.  It's a global option now, meaning we don't have to set it for each Node Editor.
(Note: the option was removed from the View menu.)

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/


text:
How to find out what buttons without a python tooltip actually do?
Most things in the blender interface show info about what Python is used.

Others do not:

How do I find out what is actually happening when I click these other buttons?

First enable developer extras:

Then right click the button you want to inspect the operations for and select "Edit Source":

You'll see a prompt for the relevant source file loaded into the text editor under the scripting tab:

You can load the source file there inside the text editor:

The loaded file will have the cursor automatically placed on the line of code for the python object you selected "Edit Source" for.

In the case of the linked data block indicator for the material blocks, seems the below is the relevant code to hunt down in the source:

If you select the save as menu option, you can find the directory for the python file loaded in your text editor.

You can copy and paste this path from the save as dialogue into a different coding environment like visual studio code to have access to better code search and "go to definition" toolsets.

I will typically navigate to the container folder, and "SHIFT + Right Click" to get the "Open with Code" menu option.

You may want to open even higher directories than this for access to the operators and other relevant python. I recommend opening the Blender "3.xx" folder at the top level in code:

Now, from inside code you will now have access to definition links, and search of the entire codebase:

You can then search for the relevant keywords from the UI panel menu surrounding linking.
In the case of what the button does specifically for material linking, below is the relevant code. Found after a quick search for "slot.link"


text:
Limit Rotation to keep tip of rotating bone within a circle when rotating diagonally?

I'm rigging some eyes, and I want to limit the rotation so that the iris stays within a realistic movement range. This is easy to do for horizontal and vertical movement, but runs into a problem when the movement is a bit of both.
The .gif shows a bone with -45/+45 deg limit on X and Z. When rotated on just 1 axis, the tip of the bone stays a consistent distance from the center. But when rotated on both, it gets further away from the center. ~32deg of rotation on each axis seems to be the correct amount at diagonal angles.
Is there a proper way to solve this problem? I'd like a method that could also work for keeping the tip limited to within an oval or almond shape. Of course some sort of driver or transform constraint could be used to reduce the amount of rotation done, but I'm guessing there ought to be a better and more precise solution than that?

A limit rotation constraint is never going to be very good for this, because 1) there isn't really any such thing as 3D rotation in 2 simultaneous axes; and 2) the nature of Eulers and aliasing means that even if you're careful about your angles, the angles you input are not necessarily going to be the angles that get limited.  (Think about how 180, 0, 0 is the same orientation as 0, 180, 180 and it becomes more clear that there is more than one way to reach any particular orientation, so Blender just picks one, which isn't necessarily the one you want.)
There are other techniques for what you want here-- for example, if you damped track a marker with a floor + limit distance (inside) constraint, you can constrain the rotation to a particular circle.  Or, you could do a single-bone IK, locked in Z and limited only in X, leaving the Y free.
But for you, especially since you're interested in non-circular shapes, I'd do it with a shrinkwrap constraint setup:

We start with a "root" bone (which, for an eye, would be your head bone).  The angle limits are actually defined by a mesh-- here, a slightly edited UV sphere.  This angle-limiting mesh is parented (bone relative) to the root bone.  Obviously, you want it disabled in renders, and perhaps shuffled off to some collection full of control doodads that you don't want to always have to look at.
The control bone is parented to the root bone.  The control bone has a child bone, SW, which has a shrinkwrap constraint targeting our mesh object.  (Setting this to "target normal" mode, and our mesh object to smooth shaded, will help interpolation.)  Then finally, our deform bone, which is parented to the control bone, damped tracks the SW bone.  That lets us define our angle limits with any arbitrary mesh we want.  Where can the bone point?  Wherever there's something for the SW bone to shrinkwrap to.
Notes:

Meshes are actually made out of flat faces of course.  Your interpolation and the extent to which your mesh actually represents a circle depend on its vert density.  Feel free to give the angle-limiting mesh a few levels of subdivision.  Because it will never get any other modifiers, and is bone parented, that subdivision only ever has to be calculated once; and shrinkwrapping a single point to a target, even a very high vert count target, is fast-- I haven't been able to make enough verts to notice any slowdown from a shrinkwrap constraint :)

A sphere, centered on Control, with the same radius as the length of Control, means that SW won't ever much move closer or further than control.  But try it with a circle instead, and see how the difference in shape changes the interpolation from on edge to the other.  This can be useful, but the main thing is to just know that it exists.

Obviously, feel free to change the shape of your angle-limiting mesh any way you'd like.  Starting with a sphere, cutting it with a knife operation, and then deleting one side lets you define the angle limits with your knife operation.

An orbit curve follow path and stretch to constraint.
This is similar to projecting latitude and longitude. A circle is a line of latitude.
Our bone tracks to an object orbiting the circle via follow path.
The 0, 1 of the track to is pole to equator, or eye closed, eye open.
The 0, 1 of the follow path is akin longitude.  So now can map any point within the circle, (or any orbit)  by these two values.
Setup
Added a bone sharing same parent as bone of interest.
Added a circle, made the tip of new bone its parent.

Added an empty, given it a follow path constraint, fixed position.  Changing the offset factor moves it around the orbit. (longitude)

Added a stretch to constraint (or for constant bone length a track to)  on the bone of interest to the empty.  Gif above shows result of changing constraint influence from 0 (at orbit center) to 1 (on orbit at empty)

The orbit could also be object scaled (self or by parent) or via shapekey.


text:
Override a material on a Linked object (2.92)?
I have a character that is linked into a Scene as a collection. I want to change an input value of a nodegroup in one of the character's materials, preferably without making the whole thing local. Of course, I cannot access the materials of a linked collection in the usual way.
I am looking for the best way to Override or proxy or whatever else I need to do in order to get access to the material. And I'm going to need to be able to do this to every material in the scene, of which there are many (but I can write a script to mass apply whatever method.) I'm just trying to avoid having to make it all local because then my files will be multiple gigs in size.
Is there a way to do this?

There are several ways to do this.
Using Object color.
This is quite limited way but it's easy.
You can use object color in node editor and the tricky thing is then you make an instance of the object it will use an object color of the instancer, replacing the original object colors.
So here is the workflow. You use an object color in the node tree:

Next, then you instance the object, use object color to set color for all objects inside the instance:

For this method, no proxy or overrides required, but you are limited to one RGB+Alpha color per instance.
Using Drivers
One of the solutions is using drivers. Let say, I have a character, and I'm going to drive the color of his clothes:

So I created a bone, that will drive this color. Then I pressed RMB on Y Location of this bone and select copy as new driver:

Next, I pasted this driver in Fac field:

Now, then I move this bone color makes blue.

That's all. Then you will use your character via proxy or library override, you will always make a local copy of pose, and changes in this pose will drive color in material.

That will work well for characters that will have their rigs proxied anyway. But it won't work for other objects, unless they are all also proxied.

@Ascalon added another method

Object Color ended up being what I needed since it works on a whole character brought in as a Linked Collection. I used the Object Color's R channel as a mix fac between 2 shader trees. Now its convenient to swap the shader trees on different layers using a driver based on the layer name (can be setup getting the Layer name from the Dependency Graph.)

Wrap your entire material into a single nodegroup. Give this outermost nodegroup inputs for only the characteristics that you would like to be able to change in the linking scene.
In your linking scene, set your material slots link mode to "Object" instead of "Data". Make the material local, but keep the internal nodegroup and the object data linked. You can then make changes to the input(s) on the nodegroup or even build a new node tree around it, but the nodegroup itself and the object data stay linked.
An annotated example is below:

The nodegroup stays linked. So does the object data. Any change made to the internal nodetree or mesh geometry in the library file will be reflected here as well. The only data that's really local in this example is the "RGB" input node (which I don't think you actually need), and its connection to the linked nodegroup.
I'm not sure if you can adapt this to work on a whole collection, but it should at least solve having to localize the data and make your file multiple gigabytes.


text:
Transferring colors from my Direct/Indirect passes into Color
I'm doing some compositor effects on my Cycles passes before outputting them to Krita and recombining them. But I'm running into a problem: Cycles stores a bunch of indirect light color in the Direct and Indirect passes, which complicates some of my setup. I want my shading passes to be totally black and white, and all the color to be in the Color pass. I'd like to transfer the color from the Shading passes to my color pass.
The normal way passes are combined is (Direct+Indirect)*Color. So I want to somehow alter the Color pass based on the colors in the Direct and Indirect pass, so that when it's all combined, it looks the same as it does now. I'm not really sure where to start with this. Is this something that can be done?

Why there is color in other passes than Color
The direct and indirect stands for direct or indirect lighting so if the light has color, it will show in direct passes and if objects in the scene have color and light bounces off them, the light color will change accordingly in the indirect passes. These passes are supposed to have color. You can change the colors of your objects without changing lighting by changing the Color passes. Unfortunately this means indirect light that bounces off those objects has to be recalculated during rendering for it to change.
Separating color can be done
If for whatever artistic purposes you would like to separate all the color, you can do that in Blender or in any other software that supports 32bit image editing just by manipulating the images.
In this case you could make a copy of the image you wish to separate with a RGB to BW node and simply divide the colored image by it. You would have to multiply them together to get the colors back, so now you can multiply only the color 'passes' together and have the greyscale image for the separated monochromatic part of lighting:

Should you do it?
Obviously, you can do this separation at any moment in the compositing, even with the final image, but then passes are not needed. This can be done inside most image editing software. In many cases the purposes of rendering passes includes separation of the lighting from the colors and textures of the objects.


text:
How can I delete or shift certain sections of the Timeline?
I'm using a single Blender file to create a 2D slideshow (with animated graphs and stuff). So all the "slides" are in this file. They are of course not actual slides, but sections of the Timeline (so the entire slideshow is run by pressing alt+A). How can I make space in the Timeline to "insert" a new "slide", or how can I "delete" a "slide"?

In the Dope Sheet editor, you can select a specific keyframe, or several of them (use B to border select), and move them with G. You can delete the keys with Suppr or X.
To go further, maybe you could create an Action for each slide, that's a great way to manipulate them using the NLA editor (basically, each slide will act like a movie clip in a video editor). NLA Editor Action Editor

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/3.0/


text:
Rotating local axis to 3D cursor
When rotating an object, how do I snap one of its local axes to the 3D cursor? In other words, how do I make that axis point directly to the 3D cursor?
A practical example: I want to make the center line of a cylinder point exactly to the 3D cursor.

I'm afraid it isn't possible to set rotation directly to the 3D cursor but you can achieve a similar effect with a number of steps.
First, add an Empty to the scene - this will, by default, be added at the location of the 3D cursor.
Add a Track To constraint to the object you're trying to orient. Set the Target to the newly added Empty. Configure the constraint To and Up settings to set the required orientation.
In the 3D window press Ctrl+A to bring up the Apply menu. Select Visual Transform - this will set the object's rotation, location, etc. to the current 'visual' orientation (ie, that including any constraints).
You can now remove the constraint and delete the Empty and the object should retain its orientation, pointing at the location defined by the 3D cursor's location.


text:
Ristricting child translation to single axis
Object A is the parent of object B. How can I restrict the translation of object B to the X-axis, when object A is translated randomly (along the X-, Y- and Z-axis)?
I tried locking the Y- and Z-axis for Object B, but that doesn't seem to work.


text:
Chroma Key function
Is there a chroma key function in Blender? This would not only make an object with the chroma key color invisible (alpha = zero), but also any (part of an) object that happens to be behind the chroma key object.
I need this in a 2D set-up, to make text glide from behind an invisible wall against a zero alpha background. If there is another, simpler technique to obtain the same effect, all the better!

The surface material "holdout" does the job. Perfect!


text:
SubSurf modifier does not fill corner
The boundary edges of this tape consist of sharp edges (crease = 1), the interior edges are soft (crease = 0). Nevertheless, the SubSurf modifier does not fill up all the way to the corner. How come?

I found out why myself. The long edge that starts from the corner (yellow line) isn't a sharp edge. When I changed its crease to 1, the corner filled up nicely ...


text:
Extrude level to other element
In the picture I have extruded the left cube. How can I extrude the right cube to exactly the same height as the left cube? I could copy the coordinates of the left one to the right one, but that is far too tedious ...

Enable Snap during transform option (click the magnet icon) and change the Snap Element type to Vertex. Extrude along the desired axis (in my case I press E,Z) and move the cursor until your extruded element snaps to the other mesh's edge.


text:
How can I make a copy of a material?
I want to create a new material based on an existing material. For that a need a copy of the existing material as a starting point. How can I make such a copy?

You can copy and paste material settings from the material tab. Note that you need to add a new material before you paste copied settings into.

Blender 2.7x

When I paste into an empty material, it doesn't change that material.

Assign the 'base material' to the desired object and click Add a new material button:

This automatically creates a copy of the 'base material'.
Blender 2.7x

Given an existing material selected, that same New Material button creates a copy of the existing material. That's the answer. (Not sure why you suggest that the Base Material needs to be involved.) This comment valid as of Blender 4.1

There you, i find on the vusluis.com
you can read and app
Sometimes you want to use the same material on another object and only make a small change to it. Rather than this change affecting all linked objects, we need a new material with all the settings of the old material.
For example, in the above image I’ve used three chocolate shaders. They were all the same, except for the colour of the chocolate. I started with milk chocolate, then changed the colour for the dark and white chocolates.
There is an easy way to do this in Blender, albeit not entirely obvious at first sight. Let me show you how to copy and paste materials in this article.
Head over to the Materials panel in the Properties Palette. It’s that little red round icon next to the Texture icon. screen-shot-2016-10-20-at-14-01-31

I have a material setup already, so I’ll select it in the slot at the top (blue in the screenshot above). To copy this material, or paste another one into this slot, take a look at the little dark triangle that’s facing down, underneath the plus and minus icons. This is called the Specials Menu, and clicking it gives us exactly the options that we want.
[![enter image description here][2]][2]
Select Copy Material and you have all the settings copied to the clipboard.
To paste this material to another object, setup a new material on this object first, then select the above specials menu again and simply paste it. Note that without an existing material, this menu won’t come up.
Linking Materials
If you would like to apply the same material you’ve setup on one object to several others, there’s no need to copy you material several hundred times. That would be a waste of time and energy. Instead, we can link a material to several objects.
Select all objects that you’d like to apply your material to, then shift-select the object with the applied material last. This makes it the active object. Now hit CTRL + L to bring up the Make Links menu. You can also find it under Object – Make Links.

Select Materials and the material from the active object is applied to all other selected objects.


text:
How are UV based tangents calculated?
You can get a UV map based Tangent using the Tangent node set on UV Map, or by using the Attribute Node with the attribute 'tangent' entered (you'll get the tangent of the active UV map.) If I understand correctly, this is a tangent based on the mesh normals and a UV map. I want to get a tangent of a custom normal and a UV map, such as if you used an Object or World space normal map texture.
How are these UV tangents calculated? Can this be re-created with nodes, or is it precomputed? I can't find any data block for it.
I have looked in the source code for the Eevee tangent node and also Cycles OSL tangent node. The Eevee version just seems to be calling the tangent attribute, so whatever calculation is being done is somewhere else and I can't find it.
The Cycles OSL node is a bit harder to puzzle out. It takes an attribute named geom:tangent as its default input, but returns nothing when set to 'uv_map' direction type unless you enter an actual UV map name instead of geom:tangent. Then it works and produces something that looks like a radial tangent, but is not the same as what the Tangent node is giving. You can re-create the math from the OSL code as nodes and get the same result. Here's a GIF showing each:

What else is going on here? What am I missing?

Interesting Q.  I'm trying to understand the problem here, forgive me... :) If the mesh has a Custom Split Normals data layer, the 'Normal' output of Geometry (WSpace) and Texture Coordinate (OSpace) nodes reflect that, and so does the UV-Map-based Tangent node?

@RobinBetts Yes, but not for Object/World Normals from a texture or generated procedurally.

A UV tangent can't be created with nodes* other than with a tangent node, or techniques to reverse engineer the tangent from a node that uses it implicitly, like a normal map node sent a 1.0, 0.5, 0.5 color.  A radial tangent can be computed with nodes, but it is a per-sample radial tangent, while a radial tangent node gives per-vertex radial tangents.  A radial tangent is simply the cross-product of the surface normal and a unit-length, object-space vector.
I'm not sure how UV tangents are calculated in raytracers like Cycles.  In rasterizers like Eevee, they are calculated via screen space derivatives: the UV of a fragment immediately above/below and immediately to the right/left is compared, and a vector is created on that basis of the change in UV.  GPUs compute 2x2 blocks of samples, and said blocks of samples always exist on the same face, so this is simple to do with shader programming, but unfortunately Blender doesn't expose screen space derivatives to nodes.
*edit: at least, not out of out-of-the-box nodes.  I don't know whether OSL has tools that would allow this or not.

Hmm, that's what I figured. It looks like the root of Eevee's Tangent is using dFdx and dFdy on the UVs themselves, which is the 2x2 samples you refer to. You can do this with OSL with the dX and dY commands.


text:
Ambient Occlusion artifacts
I faced with problem while baking Ambient Occlusion map. There are a lot of artifacts in border zone between two objects. I try to change different parameters like distance/margin/samples but nothing works. The same result. Does anyone know the cure?

Bake your AO maps in higher resolution, then downscale them. AO bake won't give AA on intersecting faces.

You probably just need to use a larger target texture. In image editor you can create a new, larger texture.

@JaroslavJerrynoNovotny, thanks for respond. As far as I understand, you mean the next: scale 'problem' object to whole UV, save resulted baked AO image, then open it in any graphical redactor, decrease it's size, and then open it again in Blender, then scale down corresponding UV to decreased picture? What means "AA"?

@Danil you don't have to do anything with UVs, just bake to higher resolution image(like 4 times the resolution). Then save the image and use Gimp, Krita, Photoshop or even Blender to scale it down to original resolution. AA means anti-aliasing, what you have are aliasing artifacts.

@JaroslavJerrynoNovotny, great thanks for help! Now it looks much better. I bake texture at 10240 px, then donwscale it to normal texture size 2048 px, then upload to Blender.

@TaviKohn, thanks for advise. It is possible solution and it gives pretty fine result, but I'd plan to make one texture for joined to one object. Because it is more easy to work with one texture, than with many.


text:
Sequencer won't show the actual animation
Whenever I have sequencer on under Post Processing only the movie in the video sequence shows up while redering and not the animation. When I turn of sequencer the animation shows up but not the movie in the video sequence. Any advice?

Is it true you first want to create an image sequence and next to  compose a final movie in the Blender VSE?

If you want a scene to be used in video sequence editor, add a Scene Strip.
Add > Scene
You can add the current scene as well as other scenes.

Check the Open GL Preview and choose the Preview Shading

Create a second scene.  The first scene, has 3D geometry, and has sequencer turned off.  The second scene is new and has no 3D geometry, and has sequencer turned on, and compositor turned off.  This suits many peoples work flow.
Practice switching scenes. It will become easy.

Many people render a 3d scene as a series of images [image sequence] or movie.  Next they combine many image sequences or movies in the Blender VSE.


text:
Selection goes through objects
I am working on a kind of Voxel design. However, whenever i use box or circle select in object mode, it selects all of the objects in the path, not just the visible ones, how can i get around this so i only select the ones on the surface?

probably may help https://blender.stackexchange.com/questions/3328/selection-behavior-and-limit-selection-to-visible?rq=1

This is intended behavior, At the moment circle selection in object mode uses object centers only.

I wish it made that clear in the Blender docs.


text:
Paint Brush Offset
When I use the image editor's paint brush the color is applied at the wrong location.  Instead of painting at the cursor it paints a couple pixels up and to the right. Makes doing fine detail work frustrating.  The old version I had worked correctly,  when I updated today the problem started.  In the 3d view the brush is correctly lined up.
Any one know how to fix this?


text:
create cubemap from 6 images (with python)
I've a couple of tutorials about CubeMaps but all they show is how to render the 6 pictures.
But I already have these 6 pictures. Is there a way to create an environment map with these 6 pictures?
If possible, a way to create it with Python.

You don't need to use Python to turn 6 cubic images into a single environment map. But once you set up a .blend for handling this task you could augment that with Python to make an automated process out of it.
Create a fairly large cube, with normals flipped, in your World center. UV map and texture your images onto it. Give it a shadeless material. Place your camera at location 0,0,0 with rotation X:90 Y:0 Z:0
Set your Camera to "Panoramic" to render an environment. I recently made a post here that goes into some more detail that you may find helpful.
You'll want to make that cube spherical using a SubSurf and then Cast modifier. For the SubSurf modifier use "Simple" subdivision at 5 or 6 subdivisions. For the Cast modifier leave the type as "Sphere" and set the factor to 1.
If you want to use Python to process large quantities of such cube maps, look into how to use Python to replace the source images in the folder where Blender will be looking for them. And research how to use Python to call on Blender to load up the .blend and render out the image(s).

It's not possible to have a more abstract CubeMap? In OpenGL, you can actually have a cubemap and it's considered infinite. Like in this demo: http://alteredqualia.com/three/examples/materials_cars.html

Ah, I see. This is for some kind of interactive content, like a game or something? Your example reminded me of this Blend4Web demo: https://www.blend4web.com/en/demo/sportscar/  Since this was made using Blender it may be of some help.


text:
"Compress" a transform hierarchy
My scene consists of a Null, key-framed rotation on itself, with a cube as child. The cube is translated at (6,0,0) and has a key-framed rotation along the x-axis.
What I would like is to bake or compress (not sure of the right term here) the transform hierarchy. The end result is the cube, moving exactly like when it was the child of the Null, with the offset, but now, it's not the child of the Null any more.
And if there's a way to do it with Python, that would be a must!

Related: http://blender.stackexchange.com/q/2533/599

@gandalf3 I tried that, but when I break the Null/Cube relationship, the location of the cube doesn't have any key frames.

This is non-trivial.  For an arbitrary animation, you would basically have to evaluate the data_paths at every frame and insert a keyframe.  For a rotating cube you would have to give it both rotation and location keyframes.
For an example of how sticky this can become, consider the similar http://web.purplefrog.com/~thoth/blender/python-cookbook/snapshot-keyframes-as-mesh.html, which I do not include inline because it does not actually solve your problem, it is just an example of how things can get messy when you have to step frame by frame and coerce blender to apply (for lack of a better word:) stuff.
For the special case of rotations, you can use sinusoidal easing (on the t menu of the fcurves editor) to animate the location of the cube as long as it always rotates in 90 degree sweeps.

Another trick for the limited case would be to change the origin of the cube's mesh to be where the empty used to be and then rotate the cube.


text:
Bone rotation applied twice

In this image, the top bone is rotated by 45 degrees, but the model is deformed like there was a rotation of 90 degrees. This also happens for translation and scaling.
For each vertex, the sum of the weights is one.
What am I missing? The code for skinning is inspired by the second piece of code here: Rigged mesh
Thanks

check to make sure you don't have 2 armature modifiers

You're right! Post this as the answer so I can accept it! Now I just need to find a way to make sure it only creates one modifier instead of two.

So basically, my error was in my indentation in my python script... the modifier was created in a loop instead of just at the end.

okay, I don't know python, but i'll just say what I did before.

This is caused by multiple armature modifiers on the mesh. Delete one to get better results. Notice that for each number of armature modifiers on the mesh, it (the mesh) is bent again by the same angle.


text:
call exporter with python
I see that it's possible to call a basic exporter, like fbx, with a command like:
bpy.ops.export_scene.fbx(...)

But, what if I want to use any of the other exporting format like STL, PLY, or Babylon? Is there a way call these other exporters? Or any other exporters that could be defined in an addon?
A way to call any exporters by just specifying the name of the addon.
Thanks

You can call any export operator, but you should ensure it exists and perhaps enable the required export addon so that it does. Go to Python console, type bpy.ops.export and hit Spacebar for auto-complete and check out all the available operators. Auto-complete will also reveal the operator signature (all available options you can use). Check the operator log after an export via UI to see the arguments used.

I actually found a way to track all operations by typing
bpy.app.debug_wm = True

in the script window.
From this, you see too much information, but you can see the actually operations.
To export with

Babylon.js: bpy.ops.scene.babylon(filepath="test.babylon")
STL: bpy.ops.export_mesh.stl(filepath="untitled.stl")

Hope this will help other people.


text:
Create Object coordinates from Object's Loc/Rot/Scale?
When you use a Texture Coordinate node's Object coordinates with an empty object selected in the dropdown, the transforms of the empty effect the texture its plugged into. You get the Object's Loc/Rot/Scale even though Object Coords are only a single Vector.
How does this work? And, how could it be recreated? If you used Attributes/Drivers to get an Object's Loc/Rot/Scale in the material nodes, what node setup would give the same behavior as using Object Texture Coordinates with the same Object?


text:
Bake Displacement Map from Tangent Normal mapped object
I have a model from a game that I want to 3D print. The model is not high poly, and a good deal of its surface detail comes from a tangent space normal map. I want to apply this surface detail to the mesh itself before printing, using the Displace Modifier.
I cannot find a way to use a Tangent Normal Map with the Displace Modifier. I tried baking Object Space Normals but that doesn't seem to be an option either, as the Displace Modifier works with black and white displacement maps. So I need to somehow get one. I've found various Displacement baking tutorials out there, but they are all talking about baking a high detail model (using multires modifier) to a lower detail one.
So, I somehow need to get the displacement change of the tangent normal map as a black and white displacement map with .5 Mid Level, and then Bake it to a texture. Is there nodes that I can run a normal map through to convert it to a black and white height map? In that case, I could just plug those into an emission shader and bake that. Or is there some other option?

Maybe more or less correct result can be obtained with some generators of maps online, like shown here https://www.youtube.com/watch?v=AOdpGgqIub8. Generators aren't always very precise when converting maps, especially normal map but it could work in this case

That does seem to have done the job well enough for my current project. But I would still like to know if a similar conversion can be done in the nodes, or if there's some other approach within Blender.


text:
Custom nodes, node limits, and compile times
I am working with some very complex custom toon shaders in Eevee. This causes several problems. First, the compile times are atrocious. Second, I am in danger of hitting the node limit if I also use complex procedural textures. Third, when trying to use AOVs, I hit the GPU instruction limit. I am trying to find out if I can help any of these issues with custom nodes.
My experience with custom nodes is with this addon that adds many new procedural textures (its paid, so I can't share it directly.) I had been using a hexagon tile procedural texture from this addon, but wanted to share the file with others. Since I couldn't also share the addon, I re-created the same hexagon tile texture as a group out of regular nodes. This caused me to hit the node limit (I was using several of them). This leads me to believe that, for whatever reason, custom nodes only count as a single node against the node limit, whereas a node group doing exactly the same math counts as its full node count. Is this true?
I also noticed that my compile times when using the custom node were not too bad, but when I switched to the node group version, they became terrible. Are custom nodes somehow saving on compile time? If so, how? Could I save more by making a custom node version of my big shader group?
Are there any other options for optimizing my setup?

are you sure there was a difference, all shaders need to be compiled once, after that their  cached

@Peter No, I'm not sure about the compile time differences. Its hard to judge them because I can't tell how much its re-compiling on any given test. Often I get very different compile times on the same node tree, even when it should be compiling the whole thing such as when opening a file and rendering for the first time.


text:
Rigify: How do add a new Main Property?
Rigify's UI supports having certain Main Properties show up in its side panel depending on what bone you have selected. These are defined in the rig_ui.py, starting about line 733.
What exactly would you need to add to the rig_ui.py in order to have it recognize a new property on a new bone in the Rig Main Properties panel?


text:
Get Blender scripts path
Is there a clean way to get the absolute path to the scripts folder for the currently running version of Blender?
The following code works (on Windows) but it feels a bit hackish.
from os.path import dirname, join, normpath
from bpy.app import binary_path_python
normpath(join(dirname(binary_path_python), '..', '..', 'scripts'))

Results in C:\\Program Files\\Blender Foundation\\Blender\\2.77\\python\\scripts.

There is a few nice helper methods hidden in the bpy.utils module space. For instance, calling
bpy.utils.script_paths()

will return all current Blender paths where Python modules can be put. Even if you (like I do on my system) redirect the Scripts Folder to a custom location, so they stay around when updating Blender, using this method you'll get a valid pointer. See this output here:

But you could also use
x = bpy.utils.script_path_user()

to retrieve the current location of your user scripts. This will return a string, and as a fallback your scripts home directory if no custom path was set.

Works perfectly. This let me find the bpy.utils API docs. Thanks!


text:
Cylinder cutouts
How can I make such cutouts in the cylinder in blender? Boolean operations? Or there is an easier way to do this?
Thank you!

The image has very low quality, maybe try to upload a better one if possible. Search for bool tool, you can make a cylinder and use it to cut out those "stripes"

Related https://blender.stackexchange.com/questions/5856/cutting-a-circular-hole-in-a-hollow-cylinder-without-distorting https://blender.stackexchange.com/questions/28103/creating-a-truck-exhaust-mesh/ https://blender.stackexchange.com/questions/226729/torus-pipe-joint-3d-printing https://blender.stackexchange.com/questions/51233/perforated-plate/ https://blender.stackexchange.com/questions/65395/repetitive-carving-holes-around-sphere https://blender.stackexchange.com/questions/58811/grid-similar-to-a-manhole-cover https://blender.stackexchange.com/questions/30996/is-there-an-easy-way-to-

I change my answer because the first one was a bit tedious, beginning with knife, digging a hole then making a circle with the extrusion is much faster:

Create a cylinder, mirror it, cut an oblique edge with the knife, bevel it several times, cut a hole.

Extrude, the hole, make it a circle with ShiftAltS, use LoopTools > Space if you need the circle vertices to be regularly spaced.

Cut the top part, keep only a half circle, extrude the left and right edge and join the vertices to circle's vertices.

Extrude down, fill the bottom of the extrusion. Give a Subdivision Surface modifier to your object. Add extra edge loops to sharp the edges.

Nicely done @moonboots!


text:
How to hide all that not in camera field of view
How to show only that part of the scene that can be seen from the camera and hide everything that does not fall into its field of vision.
I accidentally found this hotkey before, but I can not find it now.

By hiding, do you mean 'not rendering'?

No, hidding in 3d view window.

H hides an object in the 3D view, but what you're talking about only exists as an add-on.

I do not use third-party add-ons. This feature exist in standard blender instalation.

Could you be more specific about what you're trying to achieve? You're question is too brief, do you want to hide the objects so their affect doesn't appear in the render (reflections..etc)? Do you want to hide them in the viewport?

Never heard of that feature other than manually selecting the objects and hiding them, or possibly camera clipping settings

Finally I found a solution. The hotkey is: Alt+B (Clipping Border)

Switch to camera view
Press Alt+B
Select camera view area by cross selection tool
Switch to 3d window
Voila!

Cant get this to work, do i need to do something else after Alt+B?

You can also go to the camera setting, and click Viewport Display, and set the Passepartout to 1.

Thanks, this is exactly what I was looking for. Feels better than having to do Alt + B


text:
Transition effect (common material to grid material)
Please tell me how i can achieve this transition effect. Only Compositing? Or can this effect be achieved in another way? Suppose I want to apply this transition effect to only one mesh in the scene.

Yes, compositing, you will have to assign the object to his own render layer, in order to treat it separately.


text:
normal map in internal and vector transform node
What exactly represent normal output of geometry node in Internal?
As I look at it in cycles, plugging it in color input, I get a correspondence between color on faces and axes (blue , red and green in their "directions").
As it comes to internal, it seems it use a camera space instead of world/object space, as stated here: Blender Internal Nodes Refactoring (WIP)
but is unclear why the blue channel is then there to be seen.

More, in internal Geometry node the output from "local" and "view" are pretty the same, and "local" seems not to represent the local "coordinates".

Use nodes Vector Transform for transformation Camera->World and Vector Curves for correction Normal ...

example blend file:

could you edit your picture? because it is so wide it is getting auto resized, which makes it almost unreadable. The crop tool is your friend. All you really need to show is one the nodes. So one image for the BI nodes, and one for cycles.


text:
No transparency on imported planes
I recently downloaded Blender to do some 2d cut-out animation, so I'm a complete newbie.
After separating my drawing into parts in Photoshop (with transparent backgrounds), and saving them as PNG's. I tried importing them into Blender as separate planes but, can't see the transparency.
I tried saving the files different ways, and the individual pieces display properly on Photoshop and Gimp.
There's probably an obvious answer but, I just don't see it
I'm using version 2.76
Any help would be greatly appreciated

Although you didn't specify, it sounds like you are using the Add Images As Planes add-on.

You'll want to pay attention to the Operator Panel options that appear while the file browser window is open.
These options are contextual and vary depending on whether you are using Blender Internal or Cycles.
For Cycles it will look like this:

Be sure to select either Diffuse & Transparent or Emission & Transparent. With the former, scene lighting will affect the image texture. With the latter it will be shadeless.
You will also have to check the Use Alpha option. You can select either Premultiplied or Straight alpha, depending on which schema your file uses for its transparency.


text:
Python Scripting: Remove Curve Object
Preferably not using selection, tried bpy.data.meshes.remove don't works for it

not a duplicate, simply using bpy.ops.delete will not remove the Curve data, until save and reopen, but my code below will.

related: http://blender.stackexchange.com/questions/27234/python-how-to-completely-remove-an-object

Something like this,

First remove the Object that uses the Curve
Then remove the Curve data

code:
curves = bpy.data.curves
objects = bpy.data.objects
scene = bpy.context.scene

# remove the object
obj = bpy.data.objects[object_name]
cu = obj.data  # the curve
scene.objects.unlink(obj)
objects.remove(obj)

# remove the associated curve, if you need to and it doesn't have other users.
curves.remove(cu)

You won't be able to remove Curve data if there are remaining Objects associated with that Curve data. cu.users will tell you how many users the Curve has, if that returns 0, the curve data can be removed with no other steps, but if it's more than 0 then other Objects are referencing the curve and you need to clear those references first.


text:
How to texture a cube so that each face has the same uv coordinates?
I would like each face of a cube to have the same texture coordinates as each face will contain the same image. Therefore there will be no wasted space from storing a 'T' shaped image, instead of a square image.
I have attempted uv unwrap the cube and layer the islands on top of each other. However, I am unable to scale and align all of the faces to the full size of my square texture (image).
How can I fix this issue or is there a better carried out this process?

Just go to edit mode, select everything, hit U and choose reset!


text:
How to get material parameter by name, and check if texture is assigned to parameter
I'm writing a exporter, and I have most of it already working, the missing piece now is to export the texture maps properly. I'm having trouble understanding how I can fetch those with python.
I have written custom nodes in c, and the export routine is currently written in python.
My current material export works fine, color \ float values and all that works, but as soon as I assign a texture into a color slot I'm having trouble accessing that texture.
So, my question is this:
How can I loop through each parameter in a material node, check the parameter by name (if I'm looking for a specific one), then check if a texture is assigned to that parameter?
Take for example the 'kd' slot here:

The kd color parameter I fetch like this:
nodes = mat.node_tree.nodes
r = nodes["Matte"].inputs[0].default_value[0]
g = nodes["Matte"].inputs[0].default_value[1]
b = nodes["Matte"].inputs[0].default_value[2]

And I know using the name 'matte' there is wrong, what I would like is to get the name of the 'class' of material - then check if the material is of type 'matte', instead of relying on the name. (only way I can explain it, I come from 16 years of 3dsmax, and that's one way of checking there when you write scripts). So a pointer on that too would be nice.
And now I have my next question - how can I check if a texture map is assigned like this on that parameter:

I would like to get that texture info (file path) if a texture is assigned to it.

I am going to link this here as intro:
Control Cycles material nodes and material properties in Python
To see what and if something is connected to your Kd socket:
kd_socket = nodes["Matte"].inputs[0]
# you can check if kd_socket.name returns "Kd"
# and kd_socket.type returns 'RGBA'

links = mat.node_tree.links
link = next(l for l in links if l.to_socket == kd_socket)
if link:
    image = link.from_node.image          # = bpy.data.images['Name']

In Blender everything is referenced by names, they are unique by design. If you don't know the name, you need to search through all items and pick what you want based on some criteria. You can recognize nodes by:

type: link.from_node.type         # 'TEX_IMAGE'
number of inputs/outputs, type of sockets, etc.
how the nodes are linked with links

You get the node class with:
mat.node_tree.nodes["Diffuse"].bl_idname
# 'ShaderNodeBsdfDiffuse'


text:
Rigify automatically link UI text file in 2.8
Rigify rigs rely on their rig_ui.py file to generate the addon's interface. If you link a character collection into a new file and proxy the rig, the UI does not generate because the rig_ui.py file is not linked. You need to append that text file as well.
In 2.79, you didn't need to do this. There was a setup using the Logic Controller that somehow made it so when you linked a group with a rigify rig, it also brought in the ui script. I don't know the details of how it worked, but it was part of the standard rigify setup, not something you needed to make yourself. This no longer works in 2.8 because the Logic Controller has been removed (it was part of the old Game Engine that has been removed.)
So, is there any way in 2.8 to get the same behavior again?

Assoc text with rig via a pointer property.
To test, in a file named "RIG.blend" have asscociated all armatures with an internal  text file "foo.py". An object using the armature is added to "Rig" collection.
Ran the script below  and saved the file.
import bpy
from bpy.props import PointerProperty
from bpy.types import Text, Armature
context = bpy.context

Armature.ui_text = PointerProperty(
        type=Text
        )

if __name__ == "__main__":
    for arm in bpy.data.armatures:
        arm.ui_text = bpy.data.texts.get("foo.py")

Result of linking collection "Rig" from "RIG.blend" to a new file includes the linked text "foo.py"

Note this is a Probable dupe of How to make a Text File dependent of an Armature object so that it appends with it to other projects?
and it is pointed out in accepted answer that this can also be done as a one off single python console code line, via a custom property.
Using a pointer property with a poll, as demonstrated here https://blender.stackexchange.com/a/193608/15543 is a quick way to make a UI.  The example is for a pointer to an object, but same principal applies for texts. eg could choose from any or all texts in blend to assoc with armature depending on poll.
Have linked the object to a bpy.types.Armature object. Could instead link to the object or the collection.

You can add a custom property referencing a text datablock  with something like this in the PyConsole:
bpy.context.object['my_script'] = bpy.data.texts['rig_ui.py']
This will add a property named 'my_script' to the selected object and assign the .py file to it. This will load it on linking and appending.

Thankyou, already noted in  question re link https://blender.stackexchange.com/questions/120700/how-to-make-a-text-file-dependent-of-an-armature-object-so-that-it-appends-with   (didn't re-parrot in answer above)  Ultimately the idea is to have a UI same as text editor select displayed in answer, but polled (contains "UI" and endswith ".py" or some such) to select text to assoc. The end result is the adding of a custom property, which as re-confirmed is enough to make the text link/append with the object without needing the pointer property to be defined.   Typing in console suits me fine too,

some like a UI.

Are we talking about an making an add-on for this that auto-checks or just a script that the user fires manually?

Open Blender and go to Preferences then the Add-ons tab.
Click Rigging then Rigify to enable the script.
How to use Rigify:
Add a meta-rig structure from the Add ‣ Armature menu.
Edit the bone positions to match the character geometry.
In the armature properties click on the Generate button to generate the rig.

The question isn't how to use the rigify addon, but how to automatically import the rig_ui.py script when linking the rig to a new file.


text:
Make bone roll match a face/vertex normal?
I am working on a script that generates bones down an edge or face loop. I have figured out how to create a bone and move its head and tail into position at the top and bottom of a face, or onto a specific vertex. The problem now is how to roll the bone so that it is flat on the face normal (or if on an edge loop, so that it based on the vertex normals.)
Is there some existing way to do this, or any existing addons/scripts that handle this problem? Or do I have to somehow derive the bone’s angle?

Construct the bone matrix

Here is a script that creates a  bone at each edge such that the bones y axis is aligned vert 0 to vert 1 and the z axis to the "edge normal" ie the average of the two linked face normals.
Select mesh object in object mode, run script creates an armature with bone on each edge.
import bpy
import bmesh
from mathutils import Vector, Matrix
context = bpy.context
vl = context.view_layer
coll = context.collection
ob = context.object # the mesh
me = ob.data
bm = bmesh.new()
bm.from_mesh(me)
arm = bpy.data.armatures.new("Foo")
arm_obj = bpy.data.objects.new("Foo", arm)
coll.objects.link(arm_obj)
vl.objects.active = arm_obj
bpy.ops.object.mode_set(mode='EDIT')

for e in bm.edges:
    eb = arm.edit_bones.new(f"edge{e.index}")
    v = e.verts[1].co - e.verts[0].co

    y = v.normalized()
    z = sum((f.normal for f in e.link_faces), Vector()).normalized()
    x = y.cross(z)
    M = Matrix((x, y, z)).transposed().to_4x4()
    M.translation = e.verts[0].co
    eb.matrix = M
    eb.tail = e.verts[1].co

bpy.ops.object.mode_set()

Yes, that looks like the right thing. By flat on the face normal, I meant that the bone has an axis perpendicular to the normal. I get the general idea of your script. Can you explain more how exactly it matches the roll to the normal?

as explained here https://blender.stackexchange.com/a/176207/15543  make a 3x3 rotation matrix.  Suppose I assume that edge vector and "edge normal" are perp. The face normals are normal to the two linked faces (assumed planes)  that intersect at the edge.. If this is True then pretty much just making edit bone x y and z axis  point where we want, which takes  care of roll.


text:
Flat material that isn't shadeless
It is standard to create shadeless materials by using the emission shader, often with a Lightpath Is Camera Ray to prevent it from casting light on other objects. This creates a flat color regardless of lighting. It does not get any shadows cast on it, and doesn't have any shading on it.
I want to create a material that will not allow any shading on it (so no shadow terminator, same flat color) but WILL allow for shadows to be cast upon it, and most importantly, somehow responds to the overall light level in the scene. In other words, it can change in brightness when in well lit areas, but remains flat.
The purpose of this is to allow for flat shading, but also allow for low light and high key scenes. Currently, the emission based shadeless material will give the same color in a dark room as on a sunny day.
For a full example, consider this material on a character's face:
1)If the light was striking it directly, the whole face would be the same color, which should be the brightness you would have in the brightest area if using a regular diffuse shader.
2) If the character's face wasn't in direct light, it should all be the brightness of the darkest area if it was a regular diffuse shader.
3) If the character's face was strongly lit on one side but not the other (hatchet lighting), it should be fully bright on the bright area, and fully dark in the dark area, which could probably be achieved with some sort of color ramp or have it based on normal.
4) If another object casts a shadow on the object, it should only darken in the area the shadow is cast on, like a regular diffuse. The cast shadow shouldn't be factored into it's shading.
Ideally this would be solved within the material, but compositor options could also work.

Is there a reason to use cycles for this? It's not a very suitable render engine for the style you want to achieve. In Blender Internal this should be way easier.

@Jerryno I'm not using this for the whole shader. It's a small part of a larger setup. Everything else needs Cycles. I'm not sure it's possible to make this in BI either. I'm mostly curious about if this sort of thing would be possible.

It's possible using internal and compositor. You will need a shadeless pass, a toon pass (for lit areas) and shadow pass. In compositor you need to combine the toon with shadows and multiply that over the shadeless pass. In internal you will get much nicer toon pass, in cycles you will get nicer shadow pass and in both you can obtain the same shadeless pass. You can also use multiple renderers in single project if you duplicate the whole scene (make it linked) and include it in compositor of the first scene.

Isn't it physically impossible to let a surface with no form of shading/reflection react with its surroundings? Isn't the reason to want something shadeless, because it should have no shades? Could you tell what this should be used for? Maybe we can find another approach?

@Reaper yeah it is physically impossible true, but there are non-physically correct ways how to shade a surface. With compositor is should be doable. The only problem is I don't know exactly what the outcome should be.

@Drudge can you post an example picture what you are after? Can be painted. How the shading should look. There is a text description in your question but it can lead to different looks. Are there only 2 shades (lit and unlit) or do you want shaded gradients etc.

Possible duplicate of http://blender.stackexchange.com/questions/64599/shadeless-mesh-thats-being-affected-by-lighting

If I understand what you want correctly, you want something the responds to light like a normal diffuse shader, except that it ignores the angle the surface is from the observer. Have you tried simply using a diffuse shader, with the roughness set all the way up, and the surface normal tied to the "Incoming" output from the Geometry node. I may have misunderstood what you want, but it sounds like something close to what you're asking for.
I hope this helps.
UPDATED:
Drudge mentioned that when he tried this technique, he seemingly got it to mostly work, but that the shadows were too harsh for his(/her?) needs. As I replied in my comments, the harshness of the shadow should be directly related to the size of the light source. To demonstrate this, I rendered each of the sample images below twice: Once with a light source similar in size to the sun (as viewed from the Earth). The second image with a light source radius 7 times bigger (I reduced the Strength by a factor of 49 to maintain the lighting intensity. You can actually see the enlarged sun in the reflection on the mirror ball I threw in the background.)
The images rendered below show (on the blue Suzanne):

A typical real world diffuse surface shader that should be close to PBR.
A raw Diffuse shader with no additional tweaking
A raw Diffuse shader with the Roughness set to 100%
The setup I suggested above, with a raw Diffuse shader, with the surface normal fed from Geometry: Incoming, and the Roughness set to 100%

If you can point out where these images differ from your expectations, I'm happy to attempt to correct the problem.

Can you explain a little more about what this is actually doing and why? Thanks.

Usually several things contribute to the color of a surface. For a surface to respond to the light around it, while being mostly a flat color, you would use a diffuse shader. You wanted your surface to  accept shadows, and pick up the lighting conditions it's in. The only thing a diffuse shader does besides that, is vary the color intensity by viewing angle, which you said you didn't want. By tying the normal to the Incoming output, the surface renders as if it is always facing the camera, so it no longer changes with angle. Increasing the roughness adds to the surface flatness too.

Here's a related question about how roughness affects the diffuse shader: http://blender.stackexchange.com/questions/5167/what-does-the-roughness-setting-on-a-diffuse-shader-do

Incoming output into normal shader input does not work. Have you tried it?

Sry, i tried this and it doesn't work. It looks weird if you use the normal

I've tested it, and it does technically work. However, it creates a very choppy terminator between lit and unlit areas, so it's not really useable.

At the time I suggested it I hadn't tested this, but I've been playing with it since seeing your comment and need help understanding what issues you're finding. The softness of your shadows, which I think you are describing, should be related to the arc length of your light source. I've been testing with a simulated sun that has an arc length of 0°32'02" but I will be experimenting with other size light sources. My simulated sun is also part of the background. I will experiment with practical light objects too.

The incoming vector output cannot be plugged directly into normal input. The math is wrong, it does not work. It also ruins smooth shading. https://i.sstatic.net/FEKDN.gif. IMHO forcing Cycles to do what you want is harder then to use compositor or internal.

Jerryno: I'm not sure if the incoming  vector is in the same coordinate space as the surface normal space, so you may be right that the math may be wrong, but disabling the correlation between surface normal direction and shading brightness was the entire point. I adapted this from a few tutorials I've seen that use the Incoming vector to get F0 from the Fresnel node. Do you happen to know what coordinate space" Incoming" is in?

My intent, if it was unclear, was to do the equivalent of video game "billboarding" the surface so it always drew as if it were facing the camera square on. If, for instance "Incoming" is in global coordinate space, and the normal input is in a surface-centric coordinate system, then I agree with you that the math is wrong. If you happen to know what coordinate system "incoming" is in, I can transform it into the proper coordinate space. (Is it possible that The Fresnel node expects normals in a different coordinate space than surface shaders?)

I just realized that all my testing had been with subdivision surface modified meshes in OpenSubDiv mode. If the artifacting you saw is an issue, removing the modifier should make it more obvious. I will investigate.

Ah, I was testing with a very small lamp, so that was part of the issue. Thanks!

As I stated above, Jerryno may have a good point about the math being wrong. I have to test it further (without an subdivision surface modifier).

Two additional questions come to mind: Is self-shadowing a concern? (Do you want shadows cast by the object geometry to cast shadows on the material?) and... You asked this question saying that this was part of something else. Could you give us a bit more context as to what you're using this for?

@Jerryno was definitely correct that the math of plugging the Incoming output into the Normal input makes no sense as Incoming is in World space and Normal expects coordinates in Tangent space. I am still investigating a good fix for this but haven't resolved this yet.

@Jerryno, @Drudge, I'm sorry I haven't followed up on this sooner. I'm still trying to verify my findings, but it appears that while normal maps are primarily stored in Tangent coordinates, all the BDSF nodes take World coordinates as Normal inputs. (I suspect some built in auto conversion that changes coordinate systems kicks in when plugging a color into a normal vector.) Becausebof this I'm somewhat confident that plugging Geometry:Incoming into normal works as intended.

@LorenOsborn I am afraid I did not realize you had still been looking at this. I am still having the problem shown in Jerryno's gif above where the terminator becomes very jagged. Large amounts of subsurf help but do not solve the problem.

@Drudge, I haven't been tracking this lately, but why don't you catch me up on where you are with it, and I can share anything relevant I've learned.

We can use compositor tricks as you proposed.
Scene
I am going to set the scene such that the shadless objects are in one layer and the others in another.
Add another render layers to catch shading information:
I am going to create a new render layer with exactly the same layers but I am going to set the Material override to a material which is just a diffuse shader. And another one which with the same setting but with excluding the layer with the non shadless objects.
Shading layer:

Shadow layer:

Matrials
The material for the object should be as you described, an emission shader with camera ray as input.
Compositing setup
Since we enabled all passes, we cal selectively apply the only shading we want.
Example 1: Shadows that other object casted:
By subtracting the shadow if the shading layer from the shadow if the shadow layer and then inverting it, I get the shadows that were only casted from other objects and not the object itself.

Example 2: Adding highlights:
I can add the diffuse direct of the shadow layer to the result to get highlights and I can use Indirect lighting.

And you can play with passes to get exactly what you want.

But now, it's still shaded..

@Reaper It is not shaded, you have control over every thing

The monkeyhead is uneven lit. Hence it's shaded.

Don't do the second step then, what else you want to achieve?


text:
Rendered Normals color getting distorted?
I am trying to render the Normal output of the geometry node, and then bring that back as a window projected texture. But when I do, the image is very different from the original socket output:

Why is my image different, when its literally just a render of the same thing? I am aware of color management distorting the render. I have tried rendering with different Display Devices, View Transforms, both .png and .exr, different color spaces on the texture node, disabling Save as Render, etc.
From my understanding, being in Display Device: sRGB, Standard view transform, and then setting the texture node to Linear or Non-Color Data ought to work, but it doesn't. What else could be going on?

What is your node setup when rendering normals? just normal plugged as surface in the material output?

Yes, nothing special to the setup.

I think the main cause of the differences is the way data is encoded when the normals were rendered initially.
If you save that in jpg or png, colors are encoded as integers. So that leads to some rounded values that cannot be converted to the exact initial normal values.
So you can save this rendered file with OpenExr format to keep things as float values:

(codec can be "none" or "zip looseless" for accuracy, if needed... give a try to the codecs depending on what you want, file size vs. accuracy).
The result can be this (not perfect though):

Instead of this using png:

Additionally, keep the image texture as "non color" or "raw", and as you said in the question, set "raw" and "non color" in the color management part.
Edit: other thing that alter the rendering is anti aliasing. If using Cycles, set the pixel filter to box in the film section. Rendered back using the image texture projected on the window should give a better result.

Sample the normal and it will become very clear why this answer suggesting to save to EXR is correct; the values will have negative components, which display referred image encodings will have extremely limited support, if any. Perhaps this can be reflected in this answer to provide more information as to why the encoding to those formats fails?

I have tried .exr and while the results were better, they were not close enough to use without getting distortions. If I bake object normals to textures, I don't get these problems, even with PNG. Why is baking fine, but rendering not?

@troy_s, effectively, but as I asked below the question I did not know if the normals where rendered directly or corrected to be positive. @ Ascalon: if normals are rendered straightly, negative values (so black). Is that the rendering you want?

@Ascalon, could you complete the question providing the exact way normals are rendered to generate the texture? and also if possible a sample mesh.

@Ascalon, have tried to bake instead of rendering and still have differences. Could you show what you have experimented editing your question? Thanks.

EXRs should work in all cases with normals. If it isn’t, it’s something to do with the colour space transform perhaps not being set to non-colour on the input? They are the only means to encoding data correctly, and I’d expect idealized 1:1 with IEEE 754 given the internal buffer and the file encoding correspond 1:1. If you are not seeing a perfect 1:1 with EXR, it is likely you are doing something wrong, or there is a bug.

@troy_s. Thanks for the comment. Have tried several things... Last significant: anti aliasing... Clearly the most different parts are along mesh edges and in particular in the outlines. Something is rounded or more probably interpolated somewhere...

Differences amplified 200x https://i.sstatic.net/crI9o.jpg @troy_s

Ah yes that is similar to the problems with Cryptomatte that make it impossible for decent work. Not sure if it is negotiable. That’s less EXR and more about how the data gets to EXR, much like Cryptomatte’s issues.


text:
Should I make sure that cloth simulated clothing is correct before I set up the movement of the character?
I have a human model that wears a robe. I want to go ahead and set up the animation of what the model will do (e.g., walking, bending, sitting, picking up items) before I set up the cloth simulation for the robe (I am still learning about cloth simulation and do not yet know how to make it work well on a model that does any action other than walking.) If I set up the movement of the model and later set up the cloth simulation for his robe, will I run into any major problems?


text:
How to make a smooth stretched grid
I'm trying to reproduce a curved space-time representation, which correspond to a stretched grid as the picture below

The grid surface should look as if it's pulled from a single point. Is there a simple way to realize this? Thanks for the help!

Start with a plane subdivide it for an uneven number e.g. 11 to have it symmetric around the center vertex.
In Edit Mode / vertex select enable propotional editing O and set the falloff.

Add a grid texture (included in attached .blend) and add a subsurf modifier to make it smooth:


text:
Script changes to driver expressions and variables
Scripting newb here.
I have thousands of unique objects named plane.001, plane.002 etc. They all unique meshes with a single shapekey apart from the basis. The shapekey has a driver on its evaluation time and the variable type of the driver is distance, with an empty as the first target.
I'm trying to write a script that changes the second target of my distance variable to the same object that contains the driver. Since I simply duplicated the original object thousands of times, they all have the original object as the second target.
I'm hoping someone will throw me a bone here, show me a viable script and explain what's going on. I do have experience with programming languages but I'm very much an amateur.
Thanks a lot lot lot!

import bpy
context = bpy.context
scene = context.scene

for obj in scene.objects:
    mesh = obj.data
    if not mesh or not hasattr(mesh, "shape_keys"):
        continue

    # shape key collection
    shapekeys = mesh.shape_keys

    # animation data
    ad = getattr(shapekeys, "animation_data", None)
    # no animtion data no drivers
    if not ad:
        continue

    #select the driver part of fcurves in drivers list
    drivers = [fc.driver for fc in ad.drivers]

    for d in drivers:
        #variables of type distance
        vars = [v for v in d.variables if v.type == 'LOC_DIFF']
        for v in vars:
            # set the target 2 to obj that has driver.
            v.targets[1].id = obj

Works perfectly. Thanks so much for the taking the time! I probably wouldn't have got here by myself.


text:
Is it possible to achieve Buffalo Plaid Texture with Checker Node?

Is it possible to achieve something like this with procedural texture nodes like Checker and/or Brick?
Regards,
Anusha

This one will allow you to change size and any of the three colors with only one node.

EDIT:
I've improved this method so it's now possible to group it and use it as just one node with all the controls:

And this is what is grouped:

What is basically doing is generating black-gray-white pattern, assign RGB values to these colors by Color Ramp than separating them and allow to change them.
Blend file:

First Answer:
I don't know if this is the simplest way, but you can make something like this using two Wave Textures.

Value node controls checker size and Color Ramp is used to change colors.

Thanks a ton! And the blend file too!! Double thanks for that!!

@UVAL If you like this answer consider accepting it and upvoteing.

Another option is to use the Checker Texture node and a bit of creative UV mapping:

Will give you this as a result:

In the multiply node, the bottom socket sets the base color. The intensities of the dark ribbons can be set by changing the grey color sockets of the checker texture. And the number of ribbons can be set in the mapping nodes (currently they are set to 10).


text:
How can a Buffalo Plaid Texture be achieved with Image Textures with Blender Internal Renderer ?

I got a couple of great answers to another question about Buffalo Plaid Texture with Cycles Render. But I am curious if it can be done with Blender Internal Renderer, and also, if instead of colors with color ramp, we could plug in images. Three images, one for the dark color, another for light, and a third one, which typically would be created by mixing the first two color via stripes or color mixing.

I want to use watercolor textures instead of solid colors to be precise.

To use it in Blender Render engine you can Bake procedural texture in Cycle and use it as Image Texture. You want to change colors to images in Cycles or BR?

For this purpose specifically, I want to avoid using cycles completely. Actually, I am going to use shadeless materials for combining images into these textures.


text:
Is my texture gone if I accidently clicked on "blank" in UV mapping?
I accidently clicked on the "blank" button in the UV editor. I had a texture I painted in texture paint mode in the last two hours and I didn't save it. Is it really gone now?

Yes, unfortunately it's gone forever. Hopefully there will be a day where you can undo that, but in the meantime you should save your images often or paint your textures in another app. There are lots of decent texture painting softwares out there: Mudbox, Mari Indie, 3D Coat, Mari, Substance Painter, Quixel Suite, Bodypaint, and so on, and most of them have better layer management than Blender and care more about keeping your data intact.
If you pick Mudbox make sure to turn up Brush Sample Area under Painting in the prefs. The other apps have sane defaults. If you stick with Blender (which is actually not a bad choice) just make sure to constantly ask yourself, If Blender crashed right now or my image disappeared, would I cry?

Haha, the last sentence is simply true! Thank you for your great answer, I will definetely check out your recommendations!


text:
Unwrapping Mesh Hair
I want to UV unwrap this hair mesh, and then texture it with a procedural Wave texture (parallel lines). I want the lines to converge to the tip of each spike of hair.

It seems that I could do something like mark seams on sharp edges (or edge split modifier, unwrap, and remove doubles) to get the main pieces of the surface separated. But I do not know how to get them oriented to match the directions of the Wave lines cleanly, or how to change their tips to get the texture to converge probably.
What workflow would let me do this?

You can unwrap individual segments, then using P button to add some pinned vertices in the UV/Image editor to control the shape to match the wave texture while using Live Unwrap.


text:
Normalize mix shader fac to .75 as midpoint instead of .5
(I'm not really sure of the proper way to title this question, so feel free to edit.)
I am mixing 4 shaders together: 1 diffuse and 3 toon diffuse, as seen in the image. By default, I want them all to have equal weight, hence the current mix factors. However, I want to use input factors on this group, such as facing or pointiness, to mix between Diffuse and Toon Diffuse. These input factors are all values of 0-1. If I plug them into the mix node between the diffuse and 3 toons, then the weighting will be skewed, as the average value is .5, not .75

I need either some math that would translate the incoming factor to have a new midpoint, or a different way to mix these shaders that will not be unbalanced at the average value of .5
If the group input value is .5, the mix factor should be .75. If the group input value is 1, it should be 1, and 0, should be 0. If it were .25, the mix fac should be .375, and .75 should be .875.
What math would give me this translation, or is there another way to setup the mix nodes that avoids needing to do this?

ColorRamp (or RGBCurve) as Value Remapping Tool
While the transformation could be certainly achieved with several math nodes, I would suggest to take advantage of the ColorRamp node:

The ColorRamp Node is used for mapping values to colors [and so to other values] with the use of a gradient.

The transformation you want to achieve is linear, with a different slope depending on which side of the range you fall into, but in any case is linear. We'll set up a Linear gradient for the node, then add a slider in corrispondece to the input value midpoint

Pos = 0,5 in this case

and then set the value you would like to be mapped to

V = 0,75

This means that we are asking Blender to make a linear remap of the incoming value from black to white (0-1) with a midpoint (0,5) with a value of 0,75.

Note how this kind of set up should be done without Color Management models transforming your scene data. After that, you should be allowed to set it up like you want and everything should works fine. It's just an easy way to avoid being confused while seetting up the remapper.
Same thing can be done, and perhaps is visually more clear, with the RGBCurve node:

Values before the 0,5 point are change "faster" than the values that comes after. The midpoint has a new value of 0.75. You can change the handle type to Vector in the menu that appears once the wrench icon is clicked.
Here's a try with the values proposed at the end of the question:

Perfect, I knew there had to be an easier solution I was missing. Can you elaborate on why the color model management matters? I understand what color models are, but I didn't realize they could interfere with this sort of math? I thought they changed how things look, not the actual numbers?

It' doesn't interfere with the math of the operation, but it change the corrispondence between RGB values and the resulting color Value in HSV. So it becomes harder to calculate the right Value for the new midpoint (in sRGB Display Device becomes 0.881 instead of 0.75).