text:
Animation nodes for geometry line art?
I am trying to see if Animation Nodes can be used to create geometry line art, similar to the various Line Set options in Freestyle. I am not very familiar with animation nodes, so I don't know if the functionality is there, or if it is feasible. So I'm not looking for a detailed explanation, just a simple yes or no of it it works, and perhaps a rough explanation of where to start.
Specifically, here's what it would need to be able to do:
1) Create a spline/curve/vertex strand on marked edges, similar to freestyle's Edge Mark features
2) Create spline/curve/vertex strand on edges based on face angles, similar to Crease.
3) Create them based on contour/external contour, probably based on normal facing on external faces of the mesh.
4) Merge the above together and add modifiers, materials, etc.
Are any of these possible?
UPDATE: Picture examples as requested.

1 and 2 were made as noted, by manually duplicating a selection, separating the object, and converting to a curve. 3 was made by copying the object, fattening it, and moving it back behind the first object. This works for the example of the look, but what I really want to do is draw an outline curve around it based on the view angle.

It would be better if you add images for the results you want to achieve, a lot of us are not familiar with freestyle, so directly showing desired results will help your question get answered.

@OmarAhmad I have added an example picture.

FreeStyle Edge Mark
Animation Nodes have a node Splines From Edges that takes a list of edges and vertices an returns splines that represents those edges. All we have to do is filter the edges by whether they are marked as freestyle or not. The blender API provide access to this data through the edge.use_freestyle_mark where it returns True if the edge is marked as a freestyle and False otherwise. To generate a boolean list of this property, we can use such list comprehension:
[e.use_freestyle_mark for e in object.data.edges]

Animation Nodes have a node Mask List which returns a filtered version of the input list if for each element its corresponding element in the input boolean List is True. So we can use the Mask List node to filter our edges based on the boolean list we generated before using such a node tree:

Edge Crease
The same workflow can be used, however, the boolean list used in filtering will change to be based on an angle threshold. Let us define the angle of the edge as the angle between the normals of the two faces the edge is part of, that, of course, fails for boundary edge that is part of only a single polygon. The problem reduces to finding the indices of the two polygons that each edge is part of. The internal structure of meshes in Blender stores loops which are vertices of polygons, something that you may remember from our study in this answer. A loop also corresponds to an edge that is part of the polygon as well as share the vertex that the loop represents in the polygon, you can study this from the Design Document of the Bmesh structure. So, loops can be used to identify which edges are in each polygon, but we want the inverse of that, we want a function that takes the edge and returns the polygons, this is something that we can solve by using a simple look up table. We can get the indices of the loops through polygon.loop_indices and we can get the index of the loop edge through loop.edge_index, you can study those form the API.The implementation is nested and not direct, so take your time to understand it.
We crate a list of n empty lists where n is the number of edges in the mesh, this can be done by the list comprehension [[] for _ in range(n)]. We will append the index of the polygon to those lists indicating that the polygon is composed of that edge. We will create two loops, the first loop iterates over the polygons and gets the indices of the loops it contains through polygon.loop_indices, that loop in turn hands the indices to another loop which gets the small initially empty list at each of the loop indices and append the polygon index to it, set the new list to the generic list and reassign the generic list. Notice that the polygon index is the loop (iterator) index of the upper loop. Also notice that to get the list after we appended it, we have to enable Output option for the input list:

Now that we have computed the look up table, we can loop over it, get the polygons, compute the angle between them using the dot product or the axis quaternion, if the angle is smaller than a threshold, append True and false otherwise, note that we have to check of the edge is a boundary or not as well. the implementation is simple, if the list contains two elements (It is not boundary) AND if the dot product between the two polygon normals at the two list indices is less than cosine some angle, return True and false otherwise:

Which if we used in filtering the edges, yields:

Blend file for study and practice:

Layering Filters
Layering filters is as easy as combing the boolean lists using what ever logic you want to use, for instance, if I want to use the edge mark OR the Crease, we can add the two boolean lists (Addition is OR in boolean algebra):

Sky is the limit when it comes to Animation Nodes.
External Contour
As for External Contour, a screen space processing might be your best option. For instance, construct a signed distance field in screen space and them march a spline starting from a known edges point, or use marching squares algorithm to polygonize it, project point on the surface and convert it into a spline. I don't have enough time to research the topic further, so i will leave it to you.

Thank you for the very detailed answer! I'm working on recreating the Edge Crease section, but my lack of knowledge of animation nodes is tripping me up. I am having trouble telling what the List Type is for some of the Loop inputs/outputs as you seem to have renamed them. Specifically, Lopp Indices, Edges of Polygons, and Polygon Index. Can you clarify what these inputs/outputs are?

@Drudge Loop Indices and Polygon Index are integer lists. Edges Of Polygons are Generic Lists. A generic list can hold any type of data including lists. Notice that in order to convert between a generic and a non generic type, Convert Node should be used.

I am still having trouble getting it to work. Append to List in the Loops loop is giving a 'does not work' error. I am also getting convert nodes popping up that are not in your screenshots. Is the Polygon Index input of Loops supposed to be an Integer List or Integer? Is the Append to List node in Loops supposed to be a Generic list or something else? Is append to list supposed to output to anything? Thanks.

Not entirely sure what is happening with Append Node, it should never return that. It is ok for convert nodes to pop up, AN is trying to fix something with them, however, avoid automatic addition by adding them manually, choosing the type, and locking it using the lock button. Polygon Index is an Integer. The appended to list should be generic. The append node not not suppose to output to anything.

@Drudge I added the blend file and extra information to understand the implementation better.

I have never seen this before. You are always a genius, Omar.

Thank you Omar for the very helpful and detailed answers on Animation Nodes, here and on other questions.
I've been working on the "external contour" problem (I call it a silhouette) for a while now, and have developed a good general solution using Animation Nodes. Hope it helps!

To see the external contour, the viewing angle matters, as the visible edges and vectors change depending on your viewing location.
For this example, I'm using an object which is several cubes combined into a single object mesh, and which has a complex silhouette depending on the viewing angle.

Solving for the silhouette is really two problems:
1) Find all vertices / edges which are on the "outside edge" of the object.  That is, vertices/edges which are visible from the vantage point, and have nothing in front of or behind them.
2) If an outside edge is partially obscured, (i.e. one vertex is visible, but the other is hidden or in front of something else,) recreate that edge to show only the visible portion.
In this image, the small square stands alone, so the silhouette for the small square in the back is simple to draw, because all of the vertices are already known.  The vertices 12 and 10 are excluded, because 10 is obscured and 12, while visible to the camera, has something behind it and would thus be hidden in the silhouette.
The silhouette for the two larger squares is harder to determine, because they overlap.  Most of the vertices for the 'external edge' are already known, but what about the 16-17 edge?  Because the front square partially covers the edge, we need a new vertex for that edge instead of 17.  Same problem for edge 21-17.
With more objects, and animation, this problem gets even more complicated.

The outline of my solution is:

Create a BVH tree from the original object mesh
(separately,) build a list of all of the edges in the object
Subdivide the edges into smaller sub-edge segments
Using the BVH tree from 1, test all of the sub-edges to see if they're part of the silhouette
Recombine just the silhouette sub-edges into longer edges, to simplify the final object
Hide the original object, display the silhouette edges

Here are the Nodes:

MAIN - The main routine has two inputs (an object and a camera) and one output (a target object which will contain the silhouette edges.  The object is used to create a list of edges to be subdivided, as well as a BVH tree for raycast hit testing.

Subdivide Edges: This loop iterates through the object's original edges, subdividing them into shorter edge segments.  The "scale" variable is the desired sub-edge length, but the subdividing is limited to a max of 20 vertices (19 segments) for performance.  These two variables can be tuned depending on the model.
The resulting list of vertices and edge indices is a new mesh, which will be used for silhouette testing.

Find Silhouette - This loop has two sections. The first is just a loop that iterates through all the edges created in the subdivision step above.  For each edge, it tests the beginning and ending vertex to see if it meets the silhouette criteria.  If both the beginning and end vertex are part of the silhouette, it flags that edge with a boolean "yes" for later.
The second section is Silhouette Detection, which is run on each vertex.  In order for a vertex to be part of the silhouette, it needs to meet two criteria:

a ray cast from the vertex to the camera location does NOT hit any other objects in the BVH tree.  It can be seen by the camera.
a ray cast from the vertex AWAY FROM the camera location (the inverted vector) does NOT hit any other objects in the BVH tree. The camera can look through that vertex into empty space.

In the example image from above, vertex 16 WOULD be part of the silhouette, but 7 would not.  7 passes the first test for silhouette, but not the second.  Vertex 17 also fails, because it is hidden behind the foreground square.
Because we subdivided Edge 16-17, there are a number of vertices between 16 and 17, so some of the sub-edge segments will be visible.
The output of this loop is a boolean list, with YES for only those edges that are part of the silhouette.

Recombine Edges - The final step is to recombine the silhouette sub segments into longer edges.  It does this by testing whether the "start" vertex of one edge is the same as the "end" of the previous edge.  If so, it just combines the two into a single edge.  The output is a new mesh, with all of the original vertices, but just a few edge indices.
Recombining the small edges is not strictly necessary, as the shorter line segments will draw the same lines.  For my purposes, I needed a simpler mesh.
Also note that this final mesh is just vertices and edges, and has NO faces.  Thus you may need to tweak further w/ modifiers or whatever to make it useful for you.
Last, the precision of the line segment lengths is a function of the scale and segment limit variables. Tweak to taste.

BONUS: This same set of nodes can also be used to display a wireframe of the model, excluding the hidden edges. Just disable the second silhouette test (the raycast AWAY from the camera) as shown above, and the node system will only test for visible line segments.

Blend file was created in Blender 2.79, using Animation Nodes 2.0.4.  I'm sure there are more efficient approaches, and I'm open to any suggestions.  HTH

Excellent! I am planning to put all these together into a useable mesh lineart generator when I have a break on some other projects, and this was the big missing piece I was stuck on to start doing that.

Glad to help! I've learned a lot around here, time to pay it forward a bit...
I'm interested to see your line art mesh generator when it's done.  I use blender to make Oscilloscope Music, which can only use simple wireframes.
I like the vibe and simplicity of the freestyle options, but can't use any rendered blender output. Would be cool to have some similar tools for wireframes.

Very Nice! I will experiment with this as soon as I get my computer back.

Hello again, I've been experimenting with this again recently. Do you know if there's a way to fix the frequent line breaks, especially on more complex objects? I've also run into a wall trying to port this to 2.1. Although it's probably best to revisit it after animation nodes gets updated for 2.8

After recombining the edges, I suppose one could take the resulting silhouette edges and somehow reorder them to find edges with common end/begin vertices, then put those in a sequence to reduce discontinuities.    I'm not a coder, however, so that feels a little beyond what I could accomplish w/ AN.
Not really sure it's possible to avoid frequent line breaks on really complex objects, as the little line segments bridge overlaps / gaps, etc.
HTH

After much ado, I took the plunge and I made a python add-on (incl. 2.79 and 2.8x versions) which has most of the features discussed on this post:
Silhouette generation, hidden line removal, freestyle-marked edge detection, freestyle angle-crease detection.
Free, grab a copy if you're interested:  https://github.com/zippy731/vamp


text:
How to know whether vertex array is clockwise or unclockwise
I referenced python code to change vertex array with clockwise from
How can I sort vertex positions sequentially indices in a closed area?
Most plane change with clockwise very well, but some plane change with unclockwise!
I want to align array of planes, so is it possible to check whether vertex array is clockwise or unclockwise, and if its array is unclockwise, then use the python code again.

I wonder the same, I use bpy.ops.object.convert(target='CURVE', keep_original= False)
bpy.ops.object.convert(target='MESH', keep_original= False) but most plane change with clockwise very well, but some plane change with unclockwise and I wonder how to determine this.

source: Stack Exchange

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

sort: votes


text:
StringProperty specific key operator
I'm making a StringProperty, and I want to make specific key(e.g. Enter-Key, or others) to do some operator.
For example, if I type Enter-Key, the strings are changed by upper words.

I found there is 'options=' in StringProperty, and I think using it will be key, but still not find. Many Thanks!
prop = StringProperty(name="Test", options={'TEXTEDIT_UPDATE'})

English might be a secondary language for you?   Do you mean that you want keys like Enter to trigger a script like "ToUpper( input_text )"?   Perhaps here: https://blender.stackexchange.com/questions/143975/how-to-edit-a-custom-property-in-a-python-script

Exactly, I'm not good at English :(
Yes. But the link is not relevant to my question..

I don't think the options parameter is meant for that. You'll have to define custom operators, and create custom keymap entries for them

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


text:
Hide adjust last operator panel

hello, I want to hide this Adjust Last Operator Panel.
Is it possible?
Many thanks

You can make it collapse by pressing that arrow next to "Move". It doesn't make it disappear but it gets relatively small you won't notice it anymore.

To disable it completely simply uncheck View > Adjust last Operation

@JachymMichal OMG How dare I see this now? Thank you very much!


text:
list of scene UI
I want to make list of scenes, and found blender list ui using template_list from How to compile template_list with some object in scene 2.8.
I think it would be possible writing like..
col.template_list("CUSTOM_UL_List","",bpy.data,"scenes",bpy.data,"...")

I don't know how to use "active_..._index" from that UIList panel.
Many Thanks

To make a list of all the scenes in your .blend file (assuming that is what you actually meant in your question, which is a little vague)
scenes = []
for scene in bpy.data.scenes:
    scenes.append(scene)

well, I want to make UI displaying scenes in my .blend file, not just python console :(


text:
Extruding 4 cube faces along normals not consistent?
I'm, quite new to modelling in Blender and I was experimenting with the extrusion of faces command using the starting cube. These are the steps I followed and lead to my confusion (also see accompanying image showing steps).

Select four faces that are the "walls" of the cube (not the roof or the floor) in the standard view orientation (i.e. Z axis facing "up").

Use ALT E and select "Extrude Faces Along Normals" and drag the mouse out. I see that the faces move outwards and the space between the extrude faces is "filled in" so a larger box is created.

Press the ESC key to abandon the command and press ALT E again and select "Extrude Individual Faces" and drag the mouse out. This time I get a "cross" with space between the four boxes that are created.

Press the ESC key to abandon the command and press ALT E again and select "Extrude Faces Along Normals" and drag the mouse out. This time I get a result identical to that as in step 3 and not the result I expected as in Step 2

It seems that by using the "Extrude Individual Faces" changes the behaviour of the "Extrude Faces Along Normals" when used after this.
I wouldn't be at all surprised if I'm missing something basic in Blender and exposing my "newbieness" but I thought I'd ask to see what that something is?
Thanks.

Thanks for a really nicely constructed and illustrated question. :)

Extruding is unique in blender in that simply pressing ESC does not "cancel" the operation as one might expect (as it does with other things such as scaling). When you press ESC to "cancel" an extrude operation, all it does is snap the extrusion back to as if you extruded by 0 (it duplicates the "extruded" faces, and leaves them in their "starting place"). Thus, you will end up with duplicate faces. To avoid this, you must undo (Ctrl + Z) to fully cancel out of an extrusion. I think you will see the cube behaves more consistently if you do it this way.

ok, now i am a bit smarter again ;) thanks for clarifying!

For the record, it's not a bug - it's so you can do things like (extrude+esc) > scale > extrude again (as opposed to extruding then selecting all the "new" faces, then scaling along normals).

It's one of those gotchas that stumps most of the beginners at one point, and also the reason why there are so many questions where the answer is "Your mesh contains duplicate geometry", but it's also a great time saver once you know how it works. I think it could benefit from being executed differently, because it's the only instance (I think ?) where a single keystroke performs two actions at once (duplicate > Translate), and only one of them is cancelled when pressing ESC

yes, that's why i wrote - i am not sure if it is a bug ;)

Thanks for the responses. I've used quite a few different solid modelling programs over the years and it's much "harder" to create duplicate geometry since most of the operations are boolean. So overlapping or intersecting geometry is removed by the boolean operation. Just a different mindset for the way Blender works (and many other similar programs I suspect!)

@Gorgious It's not easy to think of a change to this behaviour which would keep the interface minimal, and quick. Perhaps a better signal to the user that they have created new faces would be nice. Color-coding, or something.

@RobinBetts Seems simple enough to me: make ESC cancel the operation, and if you want the current behaviour, you type 0 ENTER

@user253751 You're right. That seems very reasonable, and is the existing behaviour of E0. I'm stuck in my ways :)

@ChristopherBennett I don't know if I'd completely agree that it is "unique". It's similar to the loop cut, in that after you've set the orientation of the cut (something you have to do prior to selecting extrude), if you hit escape when setting the position the default (0) is used. I've found thinking of it that way helps make the extrude behavior more intuitive.

The "Thing You're Missing" is one of the most common causes of confusion in the modelling interface, so don't worry, you're not alone.
If you "abandon the command" with Esc or a right-click, on a generative operation, (i.e. an extrusion or an inset,) you are not abandoning the generation of new faces. You are just abandoning the subsequent movement of new edges. You are dropping the new faces in place.
The next use of AltE > Extrude along normals extrudes the newly generated faces, which are automatically selected, and not a contiguous group. Each single-face island is an 'individual', extruded along its own normal.
To truly abandon all of an extrusion or inset, including the generation of new faces, you must CtrlZ undo the whole operation.
While this is confusing to the unprepared/unwary, it does make for fast modelling in many situations. It is often useful to make an extrusion, drop it in place, and then decide how to transform the new faces. So, personally, I would not like to see it 'corrected'.

Thanks for answering my question. It makes perfect sense but it is a bit of the old "trap for new players" situation. I've been using various "CAD" and solid modelling programs way back before Solidworks was a thing. ESC is used in a lot of programs to "abandon" or "cancel" a command. Like most things it's MUCH easier when you understand how it works.


text:
Low quality textures being baked to high poly mesh in cycles
I want to bake a high poly spaceship to a low poly one in cycles. I do know the procedure(uv map the 2 objects, bake AO on the high poly mesh, select the high poly first, low poly later, then select 'Selected To Active' and press bake.) I have used a Ray distance of .02. But the problem is the low resolution texture I'm getting on the low poly mesh
Notice the jagged edges on the left ship?
The meshes were overlapping, I just seperated them after the bake to take a screenshot. Here is another image of the settings.

My question  is, how do I generate an even finer high res bake? Is there anything I'm missing out? Or any way to get Anti-aliasing done?(Not even sure if it applies here!)

What you are experiencing is not low resolution, but bad (non-existent) anti-aliasing. I have struggled with this problem as well. It seems to be a bug in Cycles, as Blender Internal will handle a similar scenario very well (so in case of a low-res map, it will generate smooth output, despite low resolution).
If you need to use Cycles, I suppose you could double the res and then downsample the texture in an image-processing program. Otherwise stick to BI...
This is discussed here https://developer.blender.org/T43388 - apparently there is a fix you can apply if you feel like compiling Blender by yourself...
Update: sharing my Blender build for Win64 with the patch applied. It's based on 2.76rc1 if I remember right, so it can be a little behind the official release already in terms of bug fixes and such. Use at own risk, no warranty etc :) http://www.filedropper.com/blendercyclesbakingpatchbuildwin64

So I better bake it in blender internal. Thanks for the reply. As for the link posted above, it seems that there is some problem with lighting , like it produces artifacts and stuff. Anyway, thanks for the reply!

Since I wrote this, I have compiled my own Blender with the patch in the link. I'd say the baked textures are about 40% the quality of BI baked textures, which for my particular application was enough.

Oh and the artifacts problem is partially resolved. The devs insist this is not a full fix, but for practical purposes it's good enough.

Thanks for following me up! But I neither have the time nor the knowledge to compile my own blender. Anyplace where we can get these compiled builds?

Not to my knowledge. I can share my build if you run Win64, although it's a few sub-revisions behind already relative to the official releases. I'll update my answer with a link if you want to give it a try.

Yup! Would definitely like to have a try!

Thanks for the link, but I think it has expired. I don't get anything to download.

When you baking something, you have to create new Image in Blender. There is no way to change existing image resolution in Blender, so you should create new one, bigger, put it in appropriate Image Texture node and bake again into new image.

I will try that

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


text:
How can I bake vertex animation into keyframes, but make sure that there aren't any duplicate keyframes
I've seen a sweet technique for baking vertex animation to keyframes by means of creating a shape key for every frame and keying the shape key to come on at the right time. An awesome user on this site (shoutout to Jerryno) wrote a script to take care of this process in one shot. I'm going to go ahead and include that script in my question in case that link ever dies; here it is:
import bpy

obj = bpy.context.active_object
start = bpy.context.scene.frame_start
end = bpy.context.scene.frame_end

def insert_keyframe(sk, f):
    sk.keyframe_insert("value", frame=f-1)
    sk.keyframe_insert("value", frame=f+1)
    sk.value = 1.0
    sk.keyframe_insert("value", frame=f)

meshes = []
for f in range(start, end+1):
    bpy.context.scene.frame_set(f)
    meshes.append(obj.to_mesh(scene=bpy.context.scene, apply_modifiers=True, settings='PREVIEW'))

obj.shape_key_add(name="Basis", from_mix=False)
for i in range(0, end-start+1):
    key = obj.shape_key_add(name=str(i+start), from_mix=False)
    insert_keyframe(key, i+start)
    for vert_id in range(len(obj.data.vertices)):
        key.data[vert_id].co = meshes[i].vertices[vert_id].co

for mesh in meshes:
    bpy.data.meshes.remove(mesh)

I've run in to some cases, however, where my vertex animation periodically pauses for a bunch of frames, then resumes, then pauses for a bunch of frames, resumes, etc. It seems needless to have all of those duplicate keyframes/shapes during the time when my animation is paused--and since performance is alright not the best on meshes with tons of shape keys I'd love to optimize the script so that it only creates a shape key/keyframe if the vertex data has changed from the previous frame.
I understand that in the code I'd need to do some kind of comparison between the vertices in each frame, but I don't even begin to have an idea how that would be done. Could someone point me in the right direction?

Here is the improved script without duplicate shapekeys:
import bpy
import sys

def update_progress(job_title, progress):
    block = int(round(20*progress))
    msg = "\r{0}: [{1}] {2}%".format(job_title,
                                     "#"*block + "-"*(20-block),
                                     round(progress*100, 2))
    if progress >= 1: msg += " DONE\r\n"
    sys.stdout.write(msg)
    sys.stdout.flush()

obj = bpy.context.active_object
start = bpy.context.scene.frame_start
end = bpy.context.scene.frame_end

# generate unique meshes from animation
meshes_at_frames = []
for f in range(start, end+1):
    update_progress("Generating unique meshes from animation", (f-start)/(end-start+1))
    bpy.context.scene.frame_set(f)
    curr_mesh = obj.to_mesh(scene=bpy.context.scene,
                            apply_modifiers=True,
                            settings='PREVIEW')
    if meshes_at_frames:
        prev_mesh = meshes_at_frames[-1][0]
        new_mesh = False
        for curr_vert, prev_vert in zip(curr_mesh.vertices, prev_mesh.vertices):
            if curr_vert.co != prev_vert.co:
                meshes_at_frames.append((curr_mesh,f))
                new_mesh = True
                break
        # cleanup
        if not new_mesh:
            bpy.data.meshes.remove(curr_mesh)
    else:
        meshes_at_frames.append((curr_mesh,f))
update_progress("Generating unique meshes from animation", 1)

# add unique keyframed shape keys to reconstruct animation
obj.shape_key_add(name="Basis", from_mix=False)
prev_skey = None
for mesh, f in meshes_at_frames:
    update_progress("Adding shapekeys", f/(end+1))
    curr_skey = obj.shape_key_add(name=str(f), from_mix=False)
    for vert_id in range(len(obj.data.vertices)):
        curr_skey.data[vert_id].co = mesh.vertices[vert_id].co

    # cleanup
    bpy.data.meshes.remove(mesh)

    # keyframe start of current
    curr_skey.keyframe_insert("value", frame=f-1)
    curr_skey.value = 1.0
    curr_skey.keyframe_insert("value", frame=f)

    # keyframe end of previous
    if prev_skey:
        prev_skey.keyframe_insert("value", frame=f-1)
        prev_skey.value = 0.0
        prev_skey.keyframe_insert("value", frame=f)
    prev_skey = curr_skey
update_progress("Adding shapekeys", 1)

Same as with previous version: deform modifiers after running script need to be turned off or deleted.
It performs slower than previous one due to comparing mesh vertices if they differ. Worst case is when the mesh is the same across many frames, best case is when mesh changes every frame on first vertex (or every vertex).
For 1M poly meshes and hundreds of frames this comparing can take couple of minutes, so I also added a progress reporting to the system console.

Great script Jerryno, thanks for sharing. Isn't it possible to simplify this algorithm by using using Absolute shape keys? Then you just need to keyframe the Evaluation Time of the object, with all keys being one frame time apart.

@R.Navega Yes, that's how it could also be done. I pulled chunks of code from something I had that had a bit different usage, so that's why it is how it is. Both approaches have weaknesses, for example relative shape keys export better to and from other apps. Absolute shape keys are not really shape keys, some apps might have problems with that.

Hm, I've just seen that the 'frame time' for absolute shape keys is read-only, so doing something like setting them one frame apart isn't possible. You can still use them for like, 'reset the timings' (so all keys are in steps of 10), and then keyframe 'evaluation time' in 10 unit steps each frame. It's less stuff to have to keyframe.
I understand your point about exporting, thanks for the warning.

For Blender 2.91:
I rewrote sambler's script to work for 2.91. At some point the API changed, not sure at what version. The to_mesh() function works differently now, and stores its results in a temporary object that gets reused every time to_mesh() is called, so I ditched the mesh datatype and stored vertex information as an array of Vectors.
Thanks for Somebody285 for describing the new way to get the modified mesh.
import bpy
import sys

def update_progress(job_title, progress):
    block = int(round(20*progress))
    msg = "\r{0}: [{1}] {2}%".format(job_title,
                                     "#"*block + "-"*(20-block),
                                     round(progress*100, 2))
    if progress >= 1: msg += " DONE\r\n"
    sys.stdout.write(msg)
    sys.stdout.flush()

def convert_mesh_to_vector_array(curr_mesh):
    list = []
    for v in curr_mesh.vertices:
        list.append(v.co.copy())
    return list

start = bpy.context.scene.frame_start
end = bpy.context.scene.frame_end

#We only have to do this once:
ob = bpy.context.active_object #getting the object we want.
dg = bpy.context.evaluated_depsgraph_get() #getting the dependency graph

# generate unique meshes from animation
arrays_at_frames = []
prev_arr = None
for f in range(start, end+1):
    bpy.context.scene.frame_set(f)
    #This has to be done every time the object updates:
    ob = ob.evaluated_get(dg) #this gives us the evaluated version of the object. Aka with all modifiers and deformations applied.
    curr_mesh = ob.to_mesh() #turn it into the mesh data block we want.

    curr_arr = convert_mesh_to_vector_array(curr_mesh)

    if arrays_at_frames:
        new_mesh = False
        for curr_vert, prev_vert in zip(curr_arr, prev_arr):
            if curr_vert != prev_vert:
                arrays_at_frames.append((curr_arr,f))
                new_mesh = True
                break
        if new_mesh:
            prev_arr = curr_arr

    else:
        arrays_at_frames.append((curr_arr,f))
        prev_arr = curr_arr

update_progress("Generating unique meshes from animation", 1)

ob = bpy.context.active_object
# add unique keyframed shape keys to reconstruct animation
ob.shape_key_add(name="Basis", from_mix=False)
prev_skey = None
for arr, f in arrays_at_frames:
    update_progress("Adding shapekeys", f/(end+1))
    curr_skey = ob.shape_key_add(name=str(f), from_mix=False)
    for vert_id in range(len(ob.data.vertices)):
        curr_skey.data[vert_id].co = arr[vert_id]

    # keyframe start of current
    curr_skey.keyframe_insert("value", frame=f-1)
    curr_skey.value = 1.0
    curr_skey.keyframe_insert("value", frame=f)

    # keyframe end of previous
    if prev_skey:
        prev_skey.keyframe_insert("value", frame=f-1)
        prev_skey.value = 0.0
        prev_skey.keyframe_insert("value", frame=f)
    prev_skey = curr_skey
update_progress("Adding shapekeys", 1)

The line key.data[vert_id].co = meshes[i].vertices[vert_id].co assigns the simulated mesh location to the shapekey. You will want to test the locations of meshes[i].vertices with the previous locations to decide if you want to add a shapekey.
My first untested idea to try would be -
import bpy

obj = bpy.context.active_object
start = bpy.context.scene.frame_start
end = bpy.context.scene.frame_end

def insert_keyframe(sk, f):
    sk.keyframe_insert("value", frame=f-1)
    sk.keyframe_insert("value", frame=f+1)
    sk.value = 1.0
    sk.keyframe_insert("value", frame=f)

def verts_moved(mesh1,mesh2):
    changed = False
    for v in range(len(mesh1.vertices)):
        if mesh1.vertices[v].co != mesh2.vertices[v].co:
            changed = True
            break
    return changed

meshes = []
for f in range(start, end+1):
    bpy.context.scene.frame_set(f)
    meshes.append(obj.to_mesh(scene=bpy.context.scene, apply_modifiers=True, settings='PREVIEW'))

obj.shape_key_add(name="Basis", from_mix=False)
for i in range(1, end-start+1):
    if verts_moved(meshes[i-1],meshes[i]):
        key = obj.shape_key_add(name=str(i+start), from_mix=False)
        insert_keyframe(key, i+start)
        for vert_id in range(len(obj.data.vertices)):
            key.data[vert_id].co = meshes[i].vertices[vert_id].co

for mesh in meshes:
    bpy.data.meshes.remove(mesh)

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


text:
How to blend(gradient effect) two different 3D materials, in cycles blender
How to create a gradient texture from two different 3D materials, for example this post:
(How to create a gradient texture from one material to another (opaque to clear)?)
 shows how to do this exactly but WITHOUT a 3D texture, my question is how to do this with a 3D texture, where each of the two textures has a different normal map, how would you combine them using a gradient(or fade or merging effect) of two different 3D textures, is this even possible?
I ask this because I'm trying to make a beach using two different textures with each there own different bump map and normal map, here is an example of what i have thus far:

Final result:

Overview:
You can use Gradient Texture as a mask for your textures.
Prepare you textures as usual with needed normals/bumps and mix them trough Gradient Texture or which ever you need.

Edit:
If you are using Image Textures don't forget you need proper Texture Coordinates no matter if they are form UV mapping or using Generated/Object texture space.
Blend file:

Thank you for your time, but must admit, quite a noob, i tried the above, and the bump maps worked, but no color textures appeared, perhaps if i show you the node setup i have:

okay, just noticed your comments! give me a sec...


text:
Why does Edit Mode show a different number of vertices than Object Mode?
When I look at my object in Object Mode it says 110k vertices. The problem is, when I select my model it says 13k vertices. I have no clue where the extra vertices are, or how to delete them. I'm trying to use UMA (for unity) and I need to have less than 65k vertices in total.
I have no clue as to where to find the missing vertices.

The object level vertex count includes vertices generated by modifiers. In this case it's probably your subdivision surface modifier.

When you are in object mode, Blender counts all the objects in the scene's vertices.
Blender also counts modifiers in object mode. For example, the subdivision surface modifier would make the object mode vertex count higher than the edit mode vertex count.


text:
Is there a quick way to orient the 3D cursor to geometry in Edit Mode?
Blender 2.8 introduced the nice feature that the 3D cursor can be automatically aligned to geometry when clicking on a surface in Object Mode, if 3D Cursor > Active Tool "Surface Project" and "Orientation: Geometry" is activated.

To place the 3D cursor aligned to the surface normals in the center of a surface I currently need two steps: I first place the cursor in Object Mode somewhere on the surface of interest, then switch to Edit Mode, select the surface and move the cursor with Shift-S "(2) Cursor to Selected" in the center of the surface.
Is there a way to place the 3D cursor aligned a face normal in Edit Mode without leaving Edit Mode?
Although 3D cursors in Object Mode and Edit Mode are independent, as stated here, fortunately, the 3D cursor does not change its rotation, when switching from Object Mode to Edit Mode.

I wish. I really think Shift-S should respect the settings in the Cursor Tool. IMO, it badly needs fixing.It would speed things up a lot.

I found that using the tool version (T panel) of the 3D cursor instead of Shift+RMB` works if you set the orientation to Geometry. I'm not sure if I'm using standard keybinds, but for me it's Shift+Space, Space.
Works like a charm. To move along those new axis you just set the Transform Orientation to Cursor and you're good to go.

If someone needs i found that booleans make 3d cursor works properly. I really don't know how but here's the example. Sorry for my english by the way https://youtu.be/-4E6Xx9nayc


text:
How can I add a subdivision surface modifier to smooth the rounding of an object?
I have a simple object with two rounded corners. The following screenshot shows the magnification of one of these corners. The corners were created with the bevel function.

Adding a subdivision surface modifier destroys the whole object.
Should I use more bevel segments from the beginning?
The object can be downloaded here: https://www.dropbox.com/t/JjbxccUV4YgI6zrG

If you want the surfaces to look smooth, right click > Shade Smooth, then play with the Auto Smooth angle value (10° works fine). If you want the edges to be smoother I guess you need to add Subdivision Surface but you'll need to change the topology (or sharp the edges with some modifiers or other tricks).

Christopher's answer did not work for me, even if I added supporting edge loops on both sides of the groove. But adding a "Weighted Normal" modifier to the stack finally did the job.

You can solve this by using supporting geometry. In the case of your object, adding edge loops at the places I've highlighted will give a clean look with a subdivision surface. Be careful positioning the large rectangle loop, because It seemed to cause artifacts in the bottom left area if not placed just right.

Hope this helps.


text:
Boolean modifiers do not work, when boolean objects are in certain positions
I have 3 simple objects: one cube and two cylinders. For some reason, I cannot get simple boolean operations to work.
Example:

One issue seems to be the fact that the union object has the same width as the target object. If I decrease the width of the union object slightly or move the cylinders a little bit out of their perfect position it works. Unfortunately, this is not what I want.

Finally, there is another issue. I cannot bevel the combined object, even if I apply the boolean modifiers first.
This is a link to the test file: https://www.dropbox.com/t/0YCbtRBy4TgEtHA4
or here:

Boolean doesn't work when faces are overlapping, at least until the recent versions, maybe they will fix that, so you need to find another method for the union one, maybe simply do it manually.

About the Bevel modifier, you've choosen None mode, so it will bevel every edge, and you've enabled Clamp Overlap option, that won't allow you to do any overlapping. With the given topology you won't be able to bevel anything without overlapping. So what you should choose is the Angle mode, or perhaps Weight if you want various bevel strengths depending on the edges, and disable Clamp Overlap. But even with those options I'm not sure it will be easy to manage your topology.


text:
Fill with Quads in Geometry Nodes
I am trying to make a ring of quads between two Bezier curves in Geometry Nodes, like so:

What I've managed so far is a ring of triangles using the Fill Curve node:

... which is not ideal since the body that will result from this will be beveled, which doesn't work with the triangles.
I have two ideas how to go about this, but my geonodes-fu is not good enough yet ;-):

Do the triangles thing and try to figure out which of the edges to dissolve.
Do not use the Fill Curve node at all, but produce the ring of quads some other way.

The Bezier curves will have the same resolution, so in principle it should be pretty easy to turn each into a list of vertices and take corresponding pairs of two vertices from each list and turn those four into a quad, but I haven't figured out how to do that "foreach set of two vertices" thing yet.
Any idea would be appreciated. Thanks!
Lapjoint

It looks like you want to connect two shapes with the same number of points, point by point, so that you get a uniform mesh consisting of quads instead of triangles.
You can solve this as follows:

Convert the curves into a mesh (maybe use the node Resample Curve before, if you need a higher resolution of the mesh).
Capture the positions of the second mesh with Capture Attribute.
Extrude the mesh (here you can use arbitrary values).
Change the positions of the extruded edges (Selection Top) with Set Position and use the positions captured before.

The only important thing is that both shapes have the same number of points!
(Blender 3.2)

Thanks a lot! That was exactly what I was looking for.

@LapJoint You're welcome!

@quellenform In case I have the same scenario but create both my curves inside the same Geometry Node, what would I have to change to make this work? I was trying around, but somehow I can't get the two circular curves to connect into a band of quads like in the above solution.


text:
Can't import characters and animations from mixamo
I'm new to blender and I can't seem to understand where I'm going wrong with this. So I made a landscape, and wanted to import a character from mixamo. I downloaded the character with a simple animation and it comes out iether without a body and only its bone structure in Collada (.dae) , or in FBX it comes out all deformed.
collade: This is how the character looks like when imported as a .dae

This is how it looks when imported as fbx:

and this is how it looks when I try to rotate the fbx-imported character.

It is extremely frustrating. I hope some one can help me with this. Thank you all in advance.

The Fbx is ok, but the mesh is controlled by its armature, so if you want to rotate it you have to rotate the armature, not the object.

yes, I realized that afterwards, thank you for your reply. However with regards to the .dae file, it simply does not import as a full character, only its bone structure is.


text:
When in weight paint, armature is outlined in red rather than selecting a bone?
Why is it that, when I open a rig that has the limbs separate and the bones don't move the mesh yet, I select the armature and go to pose mode, then open the rig of the body in weight paint mode and try to select a bone, the whole armature is outlined in red rather than outlining a single bone in blue?

Did you parent the armature to the rig, and if so, did you assign e.g. automatic weights?
Did you try to select one bone of the armature (right klick in Blender < 2.80) while in weight paint mode of your rig?

The red bone in the weight paint mean that the vertex group of this bones are locked

First check that your armature is in Pose Mode. Switch it to Pose Mode (Ctrl+Tab) and then select your mesh and paint.
If it doesn's help, you probably didn't assign Armature Modifier to your mesh. In this case select your mesh, then holding Shift select your armature and press Ctrl+P and then choose Armature deform.


text:
I made a mistake and moved a surface texture
Now some of the triangles are messed up and the back of one arm shows through a transparent inside to the front of the arm's texture in reverse.
From the popular voxel based game ROBLOX, here is my .blend file. Either tell me how to fix it, or fix it for me, thanks in advance.

(source: ezimba.com)

I think you have just moved down a tris of vertices. Select them and grab it on the Z axis with snap to vertex active as in the following pictures:

Moving faces in the 3D view don't interfere with their UV data, so the texture should come back to his initial state (not streched) without further operations.

Thanks alot! I have another question though, do you know how I could add extra joints to make elbows and knees without altering the textures?

Maybe is better that you post this as another question, there is not much space here in the comments and you'll not get enough visibility. Don't forget to pack texture in the file before uploading it.


text:
Boolean within the same object?
The boolean modifier works on separate objects. But is there a way to boolean together multiple pieces of mesh within the same object?
Intersect faces leaves too much messy geometry.

Not non-destructively no. But if you just want a one-off operation, then yes. See http://blender.stackexchange.com/a/15688/599, in particular the Face Intersect tool.

It may work, depending on how it works. I'm trying to find better options than the Intersect tool under Faces, as that leaves messy internal geometry.

Applying Boolean Union to all islands within an object's mesh in a non-destructive way is very easy since the introduction of Geometry Nodes. Just apply Mesh Boolean node to the geometry.

Here's what I would try.
In object mode, make one copy of your original object for each separate part of the original object you want to use as a boolean operator with the original. If the object you want to boolean with itself has more than one mesh sub object, switch to edit mode, select each individual sub-object  containing portions you want to use as boolean operators, use the duplicate tool (SHFT-D) to make a copy of the sub-object, and then separate the duplicate of the sub-object into a new object using the P key, choosing the "Selection" option.
You will now have an original and one or more copies of the original, or portions of it. On one of the copies, select the parts of the mesh you want to use to operate on the original, perform the boolean operation, and then delete the copy. Repeat this for each part of the object that you want to use in a boolean operation. When completed you will have effectively used the object to perform the boolean with itself, and yet Blender will be satisfied that you are doing the operation between different objects.


text:
Why doesn't Cycles have shader compile times like Eevee?
Eevee compile times can get extremely long if you have multiple complex materials, such as procedural textures. I've had files with over 5 minute compile times. Cycles appears to have 0 compile time even on huge scenes. Both are using the GPU. I know these engines are different types (Cycles being a pathtracer), but what is the difference that causes this?

In my case it is because the version of compute I am using is new enough for the one, but not the other. Blender updates to take advantage of new hardware features, which is why sometimes computer works on older versions but not newer versions.  Cycles is far more woven into hardware because it has been around longer, so it is to be expected that it would perform better.

Cycles has been around much longer than Eevee, so most of the material nodes are set to function with Cycles. It's possible that the GPU doesn't like the specific material setup being used with Eevee.

I know its an engine difference. Eevee and game engines do an upfront compile. Cycles and other path/raytracers don't. But I don't get how they are getting the material info onto the GPU if they aren't. Or if there's some way to do it fast, why aren't Eevee/game engines doing that too.

As far as I understand it (and I could be wrong):
Ray tracing engines like Cycles compute shaders on the fly as they are needed during ray tracing. The time spend by the engine precomputing stuff is more in the realms of scene analyzing (like BHV building) and optimizing ray tracing algorithms, which aren't shader precomputing.
Rasterized engines like Eevee precompute shaders and other data, compiling them to low level code and formats faster to execute by the GPU (GLSL for Eevee), optimizing (like eliminating dead code, folding constants, ...), and maybe other things. But at the cost of accuracy and overhead performance, static effects (reflection probes, shadow maps, baked global illumination, ...) and lots of manual work to do in order to set these up in a way that looks good.
Overall, the differences in approaches come from differences of needs. One prioritize accuracy over render time, another prioritize render time over everything.

That's my general impression too. But I'm looking at cases where Cycles will build a BVH in a couple seconds, then render several hundred samples up to full quality in 10-20 seconds (I have a fast GPU and this is a low geo scene but with high material complexity). The same scene in Eevee has a 3+ minute compile time! So even if Cycles is doing the compiling as it goes, its still doing it so much faster.

Well, yes depending on your hardware and the scene, that can happen. On a complex scene where it takes hours for a small fHD frame on Cycles you could make several frames with Eevee.


text:
Get Loc/Rot/Scale of object in material using Object Texture Coords?
Sometimes you want to get an object's Loc/Rot/Scale in the material for fancy vector stuff or controlling procedural textures. This is usually done by creating a bunch of Values driven by the appropriate parameters. I am wondering if it is possible to do it using 2 Empty objects and comparing their coordinates.
Object Texture Coords give us the location of an object. If we have one object that moves and another that doesn't, the difference tells us the relative position of the object, like a Local Space movement. That part is simple. But how can we figure out rotation and scale? I don't understand vector math enough to figure it out. Is it possible? How could it be done?

I do not understand if you were simply trying to get the location, rotation, and scale of the object itself, or as relative to another object.

Get it for one object, by getting the offset from another object.

Why not just use the objects global location?

Is there a way to get its Global Location? I guess the Object Coords gives that, but not rot or scale. What I'm really after there is something like Local Loc/Rot/Scale. I want the change in each from the base position.

I don’t think this is possible, but you might try object based texture coordinates as an input.

Yes, Object Coords are what the question was about.

I mean the Texture Coordinate node, set to Object.

Yes, that is also what I am talking about in the question. I am updating it to make this more clear.

You can get effective access to the shaded object's entire transformation matrix by using the Vector Transform node to find what the Object space's bases, (its [1,0,0], [0,1,0] and [0,0,1]) become, when they are measured in World coordinates.
Location:
(We know we can already get this from the Object Info node, but just for completeness...) Set a Vector Transform node to 'Point', from: 'Object' to: 'World'. Enter [0,0,0] as the point to be transformed, and you have the location of the shaded object in the World.
Scale:

These arrows point along the Y of their Object's spaces, and the objects have been scaled in Y, by between 1 and 2.5 . By transforming the Object-space vector [0,1,0] to World space, and taking its length, you get how much the object has been scaled in Y. Here, the scales are mapped to colors. Of course, you can do the same in X and Z, and, if you like, encode all 3 scales, XYZ -> RGB.
Rotation:
Well,  by taking the Object -> World transforms of [1,0,0], [0,1,0], and [0,0,1], we have the columns of the object's transformation matrix. We know the orientation of all the object axes. But how those orientations are expressed as rotations is another question. If you wanted to express the orientation as Euler rotations, you're into this territory. Even if you fix the order of rotations, (e.g. X, then Y, then Z), there is still no unique set that will arrive at the object's  orientation. So even if you make a node-group to make the Matrix to Euler conversion, and find a set of rotations that take you to the orientation, they won't necessarily be the rotations shown in the object's transform panel.

However, you can still do some useful things. This tree, for example, gets the angle of the projection of the object's Y axis  down onto the World XY plane, around Z. The angle comes out of the Arctan 2 node between -pi and pi. The other nodes just map that range to 0..1.
Although you can get the location of a shading-point as measured in another object's coordinates, that doesn't tell you anything about the scale or orientation of the other object's space, you still need something like drivers there, unless something comes up in Geometry Nodes? And I don't think you can deduce the absolute dimensions of your own, shaded object, unless you cheat by knowing the location of the object's origin in the object's Generated texture space, which always measures 0-1 along the sides of the object's bounding box, oriented with the object axes.

Oh... just remembered. Check our @Rich Sedman's excellent discussion of the Vector Transform node  here


text:
3 part mechanical joint following 1 bone?
I am making a 3 part mechanical joint, with the different axis of rotation being in 3 different places. This is fairly easy to make a basic rig for:

The problem is that i'd like to control this with a single bone. In this setup, each of the deform bones is using copy rotation to copy the corresponding local axis of the big control bone. It works if I'm only rotating one axis at a time, but once I already have rotation on one, it stops working correctly as the axis become desynched.

What is the proper way to make this work?
I have seen some IK setups for similar joints. I have tried that, but they don't seem to work with this join order. I have the order Z, Y, X. With an IK setup, I can't control the Y roll. If I had the order Z, X, Y, then i'd be able to by putting a copy rotation or something on the final bone. But you can't influence the rotation of a bone in the middle of an IK chain without problems.
UPDATE:
Some answers have used 1 less joint, but the 3rd is necessary. The cylinder was a stand-in for a 2 part joint. The cylinder can't be allowed to rotate on X. Here's a picture showing what the desired joint is like.

File:

@Edgel3D That looks good from what I see. What is the setup?

Dissolve the middle bone (you just need two bones for your rig). the first bone's constraint wouldn't be changed. for the second bone set world space to world space.

if you want the hinge to be oriented as you wish do above works and add another bone called hinge and make it child of your z bone. assign a locked track constraint to it and set either tail of ctrl or last deforming tail as the target and also set y as the locked axis and -z as the following axis. the result is like below.

Thanks, please see the update in the question.

see the update in answer

This was done in vers 2.77a but should work in 2.8+

...UPDATE 13th Dec 2020

as per your updated pic...

The cube is parented to the orange bearing. (child=cube)
The bearing is parented to the torus.
If the torus is to remain stationary and not rotate, an empty can be placed at it's origin point, the empty instead becoming the parent of the bearing and a child of the torus. The empty would then be rotated, not the torus.
The same would apply if the bearing mesh wasn't to rotate.
The torus could be parented to a machine chassis (or whatever) to keep the whole thing in place or both could share a common parent to do the same thing.

Thanks, please see the update in the question.

From what your update says, it appears you want to place some sort of constraint, i.e. the cylinder is not to rotate on the x axis. With this setup there are no constraints but why rotate an axis your not wanting in the first place?  If you're wanting to drag the arm around as you would a rig with IK etc, then at a guess, I'd say you're back with your bones problem. I animate an excavator I d/loaded ages ago and the parenting system has worked well over several Blender versions.


text:
How can I make a realistic cement shader with old/cracks/crumbling/paint chipping on top of a texture?
a link to an example of the desired cement can be found here:
How to create and animate the water reflection (Caustics) on an object?
Note the cement next to the water....looks realistic, faded, warn, paint chipped,
Also this "cement shader" would of course be added ontop of an image texture(shown below
Above the desired cement...
Below, the result I have so far with just the image texture(yellow+black caution) and basic shader(gloss)

black/yellow caution cement just looks to fake, any ideas for a more belivable look to the cement would be great....thanks

Use a grunge/rust image texture (it's generally easier to get more realistic/believable results with an image texture) to mix in darker spots and lighter spots, simulating places where the paint has chipped a little (lighter spots) or is missing entirely, showing the dark cement underneath. You also might want to use a mask to make sure such nicks and scrapes appear in likely places, such as along edges and corners.

Sounds good (but noob here) how exactly is a mask made or created?

Run a noise texture with a high detail (at least 5) through an is greater than node for a mask to mix your paint and cement shaders.  I don't have time now but I'll add an answer in the morning.  This is the technique I used to create the chipped paint in this post.  The linked BA thread has a .blend you can download and look at until I get my answer up.

I've been doing some experimenting and it seems that the bump mapping is the biggest key.  I've tried several different types of bump to get a good concrete look, so far the best looks like a mixture of image texture and two sizes of voronoi.

related: http://blender.stackexchange.com/questions/31196/how-to-texture-a-rooftop

Here is what I have been able to come up with:

Here are the nodes:

Click to enlarge.
The shaders:

The bare cement shader is just a mix of diffuse/glossy with a cement image texture controlling the diffuse color and the glossy roughness (after going through a color ramp for fine tuning).
The paint shader is a straight mix of glossy/diffuse with a light, desaturated yellow color on the diffuse shader.  On the paint I also use a high contrast grunge texture, sent through a multiply node, to mix in some grunge.  For the grunge just send a grunge texture through a color ramp with some grimy colors on a diffuse shader.
The mask:

When paint wares off in real life it doesn't fade out and slowly reveal what's underneath of it, it chips off; it is either there or it isn't.  to simulate this I send a noise texture sent through a math > greater than node.  The greater than node gets rid of any grey in-between areas.
The bump-mapping:

One of the biggest selling points for realism I have found is bump.  The biggest thing to keep in mind is that in real life the paint will conform to the surface it is on.  So in your material you want it to use the same bump mapping as the underlying surface (the bare concrete).  However it will slightly fill in the crevices and the bumps will not be quite as distinct.  To simulate this I use the same bump map for both shaders, but I use a smaller strength on the paint shader.  In terms of the bump itself I am using part image texture (same as the one for the bare concrete color), and mix it with two different sizes of voronoi (inverted with color ramps) using two bump map nodes.
Further reference:

Here's the .blend file:

Unfortunately due to license issues I can't include the image textures in the .blend so you will have to use your own.
See my answer here for a more detailed look at levels of grunge.
Check out this post on BA where I have a very similar shader for chipped paint on wood.


text:
Vertex Groups Density working in opposite way
I'm learning how to add hair with this tutorial https://www.youtube.com/watch?v=-Bo3wmQ5qLU
I've followed the path slowly and I got to the point of assigning density = my group of selected area almost the same way it is explained here
However, the result I get is the opposite of what I want.

you have clicked the inverse ( the double headed arrow on the right of the density ) just click it again

@Chebhou Should be an answer, not a comment.

@RayMairlot I'm writing just a minute

This is embarrasing I didn't even knew that there was a button right there, just lost 2 hours of my life trying to solve it...Please post an answer so I can mark it as correct

You have clicked the inverse button , just click it again and it will go back to normal :


text:
Render layers not appearing in the compositor
I am trying to follow the Kenan Proffitt tutorial on YouTube for two point motion tracking but the Foreground and Background layers are not appearing in the compositor.
When I add the video input node and select the video I get a small square in the node with the video.
When I add the two Render Layer nodes (for my two layers) and select my scene I don't get that small preview square - and there is nothing from these layers in my final render.  I also get nothing if I plug the Render Layer node(s) directly into the viewer or composite node.
Picture of nodes without little window:

Blend file

have you rendered your scene?

I think so - I hit F12 and have the Rendered view in the bottom right.  That does not have the layers on it.  I also hit the "Animate" button but that did not have any of the information from render layers in the final video either (it was simply a newly rendered version of my original video).

Delete the movie from the video editor and then hit F12. Then the render will be visible.

Delete the movie from the video editor and then hit F12. Then the render will be visible.

Thank you so much for taking the time to answer.  I would never have found this on my own.  Now working perfectly.

@BlenderJames Welcome to the site :) If this answer has satisfactorily answered your question, then consider marking it as accepted.

unchecking "sequencer" in render tab can do the trick too

For me it was the Use Nodes checkbox not being checked. It's at the top left of the screen.

Go to compositor screen, press ⇧ Shift + A and type rendering layer in search


text:
Material change appear to change shading quality
I assigned a simple principled bsdf shader to a model of a cup and set the transmission value to 1 and roughness value to 0 to simulate glass. The mesh is set to smooth shading as can be seen in image 3. Also, the image shows the way the mesh is divided up.
I then assigned a new material to the mesh which is defined by the nodes shown in image 2 (hopefully clear enough to read).
The model was re-rendered and it appears not to be smooth shaded as the mesh divisions can be seen. It has a flat shaded look rather than smooth shaded. I don't understand why this would change. Does anyone have any clues as to what would be causing this?

When you rename nodes and hide the contents it makes it hard to figure out what's happening.  Anyway, use a Bump node with a very low (.001) distance value.

Not sure of what is hidden as I got this material out of a blend file that I downloaded and appended into my file. I'm clearly not familiar with the use of shader nodes. But I now understand how this question would be particularly hard to answer. But something is going on with the material.

As Allen mentioned, it's hard to tell with collapsed nodes (I know it's downloaded and not your fault), however, If I had to guess, I would say the "flat shaded look" is intentional (provided by the Wave Texture), and is meant to replicate those old-fashioned style glasses. That being said, the reason for the "loop cut" look is due to a Normal Map node being used instead of a Bump Node as Allen suggested as well.
Normal Map nodes expect normal data (usually in the form of the purple-ish normal maps most of us are used to). The nodes leading up to the "normal stage" in your graph, only provide B&W values, and therefore cannot facilitate the demands of a Normal Map node. Luckily, this is exactly why the Bump Node exists - to fashion Normal data from a B&W input. Because I don't have access to the "internals" of your node graph, much of my setup is guesswork, and therefore doesn't look exactly the same as yours, however I think you'll agree there's a difference between the results with A Bump Node vs a Normal Map Node:
BUMP NODE (correct):

NORMAL MAP NODE (incorrect):


text:
Blender Export to X3D Texture/Material Capability
I'm using Blender as a primary part of a workflow that ends with an X3D model.
So far, for geometry and basic (very basic) materials applied to faces, I'm having no issues getting the X3D I expect.
When getting models off of Blend Swap or wherever, they often have very sweet texturing which, to this point, I have been unable to get out to X3D. I understand that Blender's capability ceiling is much higher than what X3D can do, but I'm looking for the lowest common denominator in this aspect.
The Blender manual is incomplete, with a whole lot of "TODO"s, on this matter. The one thing that seemed potentially helpful was the mention of a "Path Mode" for embedded images. Unfortunately, there is no such option in the actual software (2.9) (not on the X3D export dialog anyway). I also read something about "baking" textures, not sure if that's a thing though.
Potential pathing issues aside, I need to find guidelines for what I can and can't get to X3D in the way of texturing and materials, then I can focus my learning efforts appropriately.
I've tried texturing and exporting in every way I can find within Blender. Obviously, there are thousands of options for the several texturing techniques, and trial and error, other than some very basic examples, is not ideal.
Further, I've exported models using every potentially relevant combination of the export options (to x3d). I can look at the x3d that comes out and even edit it, which I do for each one (Note to anyone at Blender, please include options in the x3d export for not including the background and NavInfo nodes you put in there by default).

https://blender.stackexchange.com/questions/57531/fbx-export-why-there-are-no-materials-or-textures/57541

Thanks for the information, unfortunately for me, it's the worst possible news.


text:
Do I need to uninstall my current version prior to 3.0 install?
I'm currently running v2.93.5.  I don't want to just install 3.0 without knowing what will happen with my current install.
Will the 2 versions run alongside each other so I can try 3.0 before I fully migrate or do I need to (or should I) uninstall 2.93.5 before even installing 3.0?

(Windows) Each version's installer creates a unique directory

and will have their own entries in Add or Remove Programs

Your system will maintain one 'default' application that opens when you double click a .blend file and that will most likely be the version most recently installed.  Blender has a button in Preferences -> System to assign the currently opened version as the default.

You can always open the specific version you need manually and browse to the file you need.
Be aware, however, that backwards compatibility is never guaranteed.  IMO, a file saved in 3.0 should only be opened in 3.0 from then on.

Blender is specifically designed to keep its versions separate from each other.  Any time you do a standard install of a blender version N.MM.x it is installed in various directories that have N.MM in their paths, so your 2.93 version will install its files in directories like .../Blender/2.93/... and your 3.0 version will install in directories like .../Blender/3.0/....  This includes both Blender's own files and any Add-Ons.  You can find out more at Blender's Directory Layout which describes in more details, including the paths that I used ... to represent, for Linux, MacOS, and Windows.
One downside of this is that if you install 3.0 you'll also have to reinstall any add-ons that you've downloaded and installed.  Be sure to check the add-on's site and download the version for 3.0.  Blenderkit, for example has different versions for 2.9 and earlier than for 3.0.  Because Python compatibility was broken in 3.0 this will be true for many add-ons.
Note that Blender makes a strong effort to be backward compatible: Blend files from earlier versions are likely to be useable with later versions, so you should mostly be able to read your 2.93 files with 3.0 Blender.  There are known issues with this update, since it is the first major release of Blender in 21 years.  Geometry nodes, for example changed a lot from 2.93 to 3.0 and many geometry node setups simply won't work.
The most frequently reported compatibility problem is that 3.0 uses Cycles X, a rewrite of Cycles.  If you render using Cycles, many settings have changed and you may have to fiddle with settings to get equivalent renders.  EEVEE doesn't seem to have similar problems.
Blender does not (and cannot) maintain forward compatibility.  If you read a 2.93 file with 3.0 save it with a different file name, or don't save it.  Once it has been saved as a 3.0 Blend file it may not be usable with 2.93
You can read a lot more details about what changed in the Release Notes. (or the friendly version.)
There are also a lot of tutorials on what has changed.  I can't list them all here, but you should look for ones that matter most to you.


text:
What will happen when Metal is a supported render device?
Currently, render devices include of none (CPU), OptiX (NVIDIA RTX), CUDA (NVIDIA), and OpenCL (AMD/Intel Iris/Iris Xe). when Apple Metal is officially released (blender announced partnership), will it show up as a render device to use?

One thing that's been made clear by watching the Blender youtube channel livestreams is that it's heavily dependent on the level of support and assistance offered by the company.
For example, cycles rendering on nvidia gpus is almost always not a problem because nvidia has people on their payroll who make sure that's the case.
Here's the devtalk thread, created years ago and active as of the past few hours. ;)


text:
Denoising depth purpose?
What is the point of the "Denoising Depth" pass when using the denoise node in the compositor? When you select "Denoising Data" from the Blender view layer properties, it gives 3 additional things for the render layer. Among those 3 are Denoising Depth. However, in the denoising node in the compositor, there are only spots for image, normal, and albedo. What is the purpose of the depth pass if it won't even be used with the denoising node?

Hi :). There used to be even more denoise outputs, usually only useful for developers. I don't think there's even any documentation ;)


text:
A good GPU based de-noiser for AMD?
Is there any decent de-noiser for AMD GPU's on macOS via Metal? I've been using my new AMD eGPU for Cycles X since support was released a few weeks ago, but one of the problems were that the openimagedenoiser is really slow (my CPU) is slow.
So, Is there a decent,quick GPU Based de-noiser for AMD GPU's on macOS for at least viewport rendering? (I can use openimagedenoise for final renders)

There is none that I'm aware of, yet.
Intel has demo'd OpenImageDenoise running on GPU (not public atm) so maybe soon.

Is this a beta? Is there a way I can download this?

@SkylineX I'm not aware of this being available to the public yet. Just screenshots. I really want this too


text:
Grease pencil objects render green (windows)
I've been following a grease pencil tutorial on youtube as I'm new to the feature and haven't touched blender since 2019. https://www.youtube.com/watch?v=c57qq2nE3B0
I finished the first part of the tutorial and went to go see what my model looked like rendered. But It all can out green. The main box changes shade with light, but nothing else is affected.

I've searched for solutions, there is no tints on the objects, I don't believe its onion skinning cause I've scrolled through the timeline. There are no modifiers either.
I believe a solution for mac users was to change a viewport preference to no multisampling, but I don't have that option.

Any advice? Thanks!

Can you post your .blend file? https://blend-exchange.com

Link to the .blend file:


text:
Proportional editing not working
I am having an issue where no matter where i click on the sphere while using proportional editing it will grab onto the entire sphere and ot the vertex i have selected that i want to eddit. I just want to grab into the vertex i have selected.
I have one vertex selected i want to use the sphere on connected geometry.
But the entire sphere moves.
Please help.

Maybe proportional size is too big, use mousewheel to control it

Thank you so much!!!!!!!  I was really lost my mind for about a good ten minutes. That was exactly the issue.


text:
How to rename an object's mesh data with Python?
I know how to rename the transform node.
But I don't know how to access the object data node.
import bpy

obj = bpy.data.objects['Cube']
obj.name = "test"

A
What should I do?

that one is called mesh BTW, not shape. Shape is another thing.

It is data in a mesh object: obj.data

Maybe you should consider to use interactive python console provided in Blender. With Ctrl+space, it will list all possible candidate complete word in current sentence. It will help you guess the desired command that you want. No need to ask at here and wait.

And the answer: object.data.shape_keys.key_blocks is a list of shape key for object.

The accepted answer is helpful, but not correct for this need. To rename the mesh for an object you need to set the .data.name. For example:
# set the name for specific mesh
bpy.data.objects['test'].data.name = 'test_mesh'

# set the name of all meshes to be the same as the object
for name, obj in bpy.data.objects.items():
   obj.data.name = name


text:
Color / materials missing in Octane Render?
Just downloaded Octane yesterday to check it out; it seems pretty good, but I can't figure out how to get materials to show up without actually re-making them.
Any help appreciated.
thanks

Octane and other third-party render engine have their own material system. You likely won't be able to use existing nodes from Cycles, unless the add-on implements that feature.

Hi Robert - I was able to create a cycles material and apply it & it rendered fine. Hmm....

Sounds like the problem is solved then? I'm not using Octane myself, hence I wasn't sure if they support using Cycles materials.

No, not really... though I think there is a material converter. I haven't had time to get back to it yet.


text:
How to update Blender 2.8?
Haven't used blender for a while. Do I still have to delete my current blender and download new one from the webiste?

You do not need to delete the old Blender version.

You do not need to delete the old Blender version, but as Hikariztw said you should probably backup the files in %APPDATA%/Blender Foundation/Blender/2.80/ in case some beta built accidentally break them.

Thanks! Just to be clear, I already have blender 2.8 version (but from 2019.01.07) and if I want to update to the latest blender 2.8 version I need to manually install it, right?

My bad I read that wrong. Yes, you need to manually install it through the same download page.

They do interfere with each other when dealing with user specified context like key map and startup file in folder %APPDATA%/Blender Foundation/Blender/2.80/ in Windows (sharing the data). You probably want to manually backup these file when you put effort in these files in case some beta built accidentally break them.

That is correct. I was saying 2.79 and 2.8 shouldn’t interfere with each other because I read the question wrongly.


text:
Why can't I loop cut all the way around the object?
How to make a loop cuts all around the object? I can select just one side and I need them all at the same time.

Here is what I need.

maybe my answer here will help: https://blender.stackexchange.com/questions/129731/beveling-with-different-adjecent-faces/129734?noredirect=1#comment223824_129734

If the mesh already is triangulated you could use the Knife tool (K) in Cut Through (Z) and Angle Constraint (C) Mode when you are in a side orthographical view. This will let you add edges regardless of the topology.
But most of the time it's better to just un-triangulate it manually by Dissolve edge or with Tris to Quads (Alt-J) in the face menu (CTRL-F).
If you have ngons you can find them with the Select All by Trait/Faces by Sides and set the number of vertices to Grater than 4.
You will find it much easier to work with quads.


text:
How do I set up freestyle to exclude outer lines?
I have a question about the freestyle tool.
What can I do so I can only see the inner lines, and not the outer lines.
Inner lines means when there is an interaction with a different object. But in a way that there won’t be any outer lines showing.

Check out this answer, among others ..

Here is how you do it...
The logic is: "Crease" AND NOT "External Contour"
You get the NOT by using the X on the side.
Do you need more explanations about this please tell.

Thank you very much! this is exactly what I needed!

Is your example a single object?

Yes, it's single object. I merged two cubes with a Boolean Union modifier.


text:
animation nodes error: node editor red outline and render error
im trying to use animation nodes addon. here is an image of my nodes. I am trying to make the animation nodes control the colour of the cube but when I eye-drop the cube i get a red outline around my nodes and the render result isn't right. (see picture) can someone please explain what im doing wrong? im new to this addon
 I eye-drop


text:
How do I open an obj file?
I tried to open an .obj file using import but all I got was the workstation with the block. Yes, I'm a total beginner.

If you do your import and then look in the Outliner (topmost item in the rightmost column, by default, IIRC), what items do you see listed?  You should probably see a scene, renderlayers, world, camera, cube, and lamp -- if you see another entry then it's possible your OBJ imported correctly but isn't visible (e.g. it's really far away, very tiny, etc)

@AC pretty sure you can post this as an answer as it happens a lot because of the scale difference between the source and blender's workspace

Only .blend files can be opened by Blender. Other file formats can be only imported.
Obj Import
Go to File ‣ Import ‣ Wavefront (.obj) and choose the file.
Remember to save the Blender file as a .blend file. If you wish to export the obj file go to the menu item File ‣ Export ‣ Wavefront (.obj).

The link was not found (404).

File > Import , select the file you want to import but don't click Ok
On the right menu, before you import there is a list of options, choose a number , don't leave it at 0.0.,m then clik Ok. A black square will show click  Enter.


text:
How do I pan in Blender using a Wacom 3D Pen?
I've just got a Wacom 3D pen for sculpting in blender and in the video Wacom released for the pen it shows you can navigate without using the keyboard:
https://www.youtube.com/watch?v=tcIVpiK3TXw
The first button is rotating the view like the middle mouse button and the second one in set for pan/zoom. Now, it is zooming when you click the button and move your hand while hovering over the screen, and the dragging, as the video suggests, is supposed to happen when clicking that button and tapping the screen with the pen tip.
The problem is that it is not dragging (or panning). (I cant find anywhere in the Wacom settings to control the hover and click/touch and click gestures)
Also, it is not a special feature for the 3D pen, it should work like this with all pens (it is working as shown in the video in Solidworks with the default settings).

You just have to emulate a 3 button mouse. Here's how to do it:

Go to the User Preferences.
Go to the Input tab.
Check Emulate 3 button mouse.
Hit Save User Settings.

From here on out you can rotate the view using Alt + click and dragging, zoom using Alt+Ctrl + click and finally navigate using Ctrl+Shift + click.

l'm not sure you understood me, it didn't solve the problem . I need to navigate using only the buttons and the feature i'm missing is panning,which supposed to be clicking and tapping with the stylus, like the video..or maybe I misunderstood you and if so, what did I get wrong? do I need to change blender pan shortkeys somehow?

The last combo for panning should be ALT+SHIFT+click (stylus down). Basically ALT is used to emulate the middle mouse button, then all the commands are the same as with the mouse. Nothing = orbit, CTRL = zoom, SHIFT = pan.

you might have changed your shortcuts for 3d navigation in blender and that is screwing up sculpting part, to resolve these you can see your 3d navigation shortcuts in blender and map those functions on wacom .
I have setup my navigation close to 3ds max , which are
Pan         - Middle mouse
rotate view - Alt + Middle mouse
zoom        - Track pad / Ctrl + Alt + Middle Mouse
after emulate a 3 mouse button for sculpting , you can map these functions into your wacom . For me these works
Pan          - Alt + Click
Rotate View  - Alt + (pen first button - mapped as middle mouse )
Zoom         - Ctrl + Alt +Shift + Click / Ctrl + Alt + Middle Mouse(pen button)

By default on my simple wacom tablet with blender 2.91 I have:

Shift + Pen click + Drag = pan
Ctrl + Pen click + Drag up/down = zoom
Pen click = rotate view.


text:
How do I make groups in 2.8?
In the Blender Guru Donut tutorial he made a sprinkle for a donut. He copied that sprinkle and made a smaller version of it. He Shift selected both and made a group with the shortcut Ctrl+G. When I do the same it assigns both sprinkles into a collection. I have read that the layer system is redone completely. So when I make a group out of the two objects, is it the same as a group and where can I see that group?

Groups and Layers in 2.80 were scrapped and merged into the same thing now for 2.8.
These things are called Collections.
Open an Outliner Editor. Click the "Display Mode" button in the header and select "View Layer" from the dropdown menu.
You can make a new collection by right-clicking and pressing "New".

Then you can rename your new Collection.

Then in the Properties Editor, you assign your collection to be simulated in a particle system.

You mean "groups and layers were scrapped in Blender 2.80". Blender 2.79 still has them.

Thanks for that

@metaphor_set It means they have been messed up into a single thing


text:
Snap Viewport Camera?
There's a navigation option in 3Dcoat where you can just hold the Shift button while rotating  your view and it will snap to nearest elevation (front back side etc).
This renders the need for switching views null. I know there is something similar in Blender but would love to remap what ever that option is to Shift in the keymap menu.
Any ideas folks?

You can hold down Alt while dragging your view angle around. This will snap the angle to the default numpad angles.

I never knew that. Thanks, I must try that.

Thanks for the reply. Yes thats what I am currently using which is not ideal as I want to do my keys layout slightly differently. Ideally I would know the name of this function so I can find it in the key custom menu in prefs but cant for the life of me find it :S


text:
Bypass recursion limits in python
I had a large issue where I needed thousands of layers of recursion, but python wouldn't let me. As I'm building this on a windows system, it also proved difficult to try and find the solution. In essence the recursion runs on the stack, and in non UNIX based systems it's hard to mess with the stack.
If you're looking for the most simple solution which works on UNIX:
import sys
sys.setrecursionlimit(20000)

However, as I mentioned, this did not work for me on windows. I needed to come up with solution or switch operating systems.

I’m voting to close this question because it is a general Python question which is unrelated to Blender.

Hi. Please don't add 'solved' to the title. Questions are marked as solved when an answer is accepted. However, the point is slightly moot as this doesn't seem to be about Blender, which is what this site is focused on.

should be closed, didnt realize i was posting to blender and not stackoverflow

To solve this, I had the wild idea of using multithreading to give me multiple stacks. I didn't honestly know if this would work before I tried it. I hate multithreading generally, but this is a very basic version of that. I'm sure others can improve on it. In my final product I implement multithreading into my backtracking algorithm.
import threading

def recurThread(x,y,z):
    if x <= 1:
        y.append(x)
        if z[0] != 1:
            new_y = []
            z[0] -= 1
            new_t = threading.Thread(target=recurThread, args=(900, new_y, z))
            new_t.start()
            new_t.join()

            y += new_y
        else:
            return

    y.append(x)
    return recurThread(x-1, y, z)

y = []
z = [50]
x = threading.Thread(target=recurThread, args=(900, y, z))
x.start()
x.join()
total = 0
print(len(y))
for i in y:
    total += i

print(total)

This is the basic idea. Things to note are that if you want to get values back from the threads, you need to store them (and pass them) as mutable objects like lists.
The other thing to note if you're unfamiliar with threads (like I was) is that you need to .start() your thread. More importantly, .join() will wait for the thread to finish before continuing. This allows for the program to be run normally, just with this instance of a thread allowing you to cheat the stack limit.


text:
Enable addon error in user preferences

Hey guys, just a quick one. I'm trying to enable this addon in Blender 2.8 (which it's designed for) and I'm getting this call back error. I have no idea what it means or how to fix it.
My addon paths are located in /2.80/scripts/addons/Arnold & /2.80/scripts/addons/brnold.
I enabled the environemnt variables in windows 10 too as required the instructions: https://github.com/tyler-furby/Arnold-For-Blender
Anyone know what's wrong?

seems to be a known issue https://github.com/tyler-furby/Arnold-For-Blender/issues/16


text:
Driver that accesses a relative path?
I want to drive a value in a shader node with a Custom Property defined on the World, and have it work when linking the Material into a new file. The first part of that is simple to create:

This is accessing the World in the file the material was made in. But if I now Link this into a new file, I want it to access world_prop for the World in that file. But it will continue to access it for the World in the original file. Is there a way to achieve this?
I am aware of the Use Self option when using a scripted expression. This allows you to access data from the python object the driver is on. In this case, that is a value node though. So even though that is technically relative, it doesn't let me get the World of the current scene/file.
Is there another option? Like if instead the driver was triggering a script that gets info from the current scene?


text:
How to have UV edge loop spacing match actual mesh spacing?
I am UV unwrapping a mesh that is roughly a square, but the loops of the mesh aren't evenly spaced. I want to maintain this uneven spacing in the UV map. It starts out looking like this with a default unwrap:

There are various tools that let me turn this into an even grid, such as Rectify from the TexTools addon or To Square Grid from the UVSquares addon, and also various commands from MagicUV (which comes with blender). These give an even distribution, which is not what I need. Snap with Equal Distance from UV squares lets you get an even distribution on only the selected loop.

To Grid By Shape from UV Squares does give spacing that matches the original topology distribution. This is the correct thing. However, this only works for square shapes, and it does not easily let me restore the topology spacing for just a section of the UV map.

What I am looking for is a command or other method to get this sort of spacing, but only on one selected loop at a time. I have found mention of this existing in some old UV unwrapping addons from like Blender 2.6 days, but it does not seem to exist in any of the current UV addons, or as a base feature. Maybe I've just missed it somewhere?
Does anyone know if there is a way to do this, or an addon that can do it?
UPDATE: Here is the Snap to Axis and Snap with Equal Distance commands from UV squares. This is the sort of thing I'm after, but I want an option to snap with the same relative lengths between vertices as on the actual mesh.

UV unwrapping tries to match the mesh spacing exactly. The problem is, usually it can't, because the mesh isn't flat. Flattening the mesh usually requires either cutting it (seams), or stretching some polygons.

It sounds like you're looking for a "follow active quads" unwrap on "length" mode, rather than the default "length average" mode.
With a follow active quads unwrap, I'll generally start by resetting the UV on one face (the most square in 3D) and then using that reset face as the "active quad" for the unwrap.  Here, I'll then select a cross of faces from that active quad and then use a "follow active quads" unwrap (from the 'u' unwrap menu) but change the edge length mode to "length":

From here, we can select subsequent edge loops and follow active quads from the unwrapped quad, again, on "length" mode:

After unwrapping all loops individually like this, we can see how our 3D maps onto our UV:

We can follow this up with a "pack islands" operation in the UV editor to fit it into the 0,1 UV space if we want.
"This only works for square shapes"
Follow active quads only works on quads.  However, those quads do not have to be in a square shape.  It will work on 3-poles.  But how it works on 3-poles is unlikely to be what you want: it will create UV overlap.  And working on triangles or ngons is right out.  The characteristic of this kind of unwrap is that all edges lay entirely horizontally or vertically on the UV map, and that's just not something that would be possible with triangles or ngons.  If you're having trouble figuring out some kind of shape involving poles or non-quads and can show us your desired output, we can probably figure out the system you need to explore to get that output.

Ah, I did not realize Follow Active Quads could be used this way. It seems to be the root of some of the tools that turn things into grids of sorts. Good summary of how to use it! However, it isn't quite what I'm looking for with this question. It can operate on Face Loops, but not a single Edge Loop which is what I'm after. Doing so gives more options for getting around the various Triangle and Ngon issues.

@Ascalon Single edge loops don't really have UV-- UV is a property only of face-corners, it doesn't exist without respect to faces.  If you can give an image of what exactly it is you're looking for, we might be able to provide a procedure to get that.

I understand that it works that way under the hood, but in the actual UV editor you are able to work on edge loops. I've updated the question with a GIF showing some current tools that do this.


text:
Blender character mesh is moving more than it should?
I have a problem with my Created Mesh and my Armature. When I slightly move my bone, almost the whole mesh moves with it..
I created my Mesh using UV Spheres and the Mirror in Editing mode. The bones I also mirrored with Symmetrize (_L at the end of the name).
At the end I checked for the scale and the rotation, I think this shouldn't be the problem, but idk.
It's my first Blender model without any help.
Now, how can I get the stuff right, so that the pose mode works?
https://pasteall.org/blend/2705930f8ac84e82a0be980fce02cd59

You need to apply the scale in Object mode. Once done, go in Edit mode, select all and recalculate the normals.

Update: Well, it worked perfectly for me. I just needed to unparent the Body from the armature and then parent it again. Thanks man!


text:
How do I bend half of a pane to match slope of adjacent pane?
I am trying to bend half of a pane so that it matches the Pane adjacent to it.

I've tried multiple ways and have so far failed to match the required shape.
It must also be python scriptable.

What I did end up doing was rotating it about the centre and using trigonometry to find how much the shape was displaced due to the rotation. I then moved the shape up that same amount.


text:
Animate Extrusion
I would like to animate the building of a House, similar to The Sims gameplay if you are familiar with that. That means I need to animate the extrusion of the wall(s). Is there a way to accomplish that in blender?
My plan was to use a plane in combination with a solidify modifier, and animate the extrusions along a grid, but as far as I know you can't keyframe extrusions, or add new vertices during an animation.
https://www.youtube.com/watch?v=2OYr-uAzZb4&t=193s <---- some reference. The first minute is the only important content.
Thanks in advance

https://blender.stackexchange.com/questions/123073/how-can-i-make-a-buildings-walls-grow-as-if-its-being-constructed

Depending on the effect, you can also use the Build modifier or the Mask modifier (with vertex group)

Shape keys can be used to animate the vertices of a mesh. You will need a shape key for each step of the animation, so I'm going to use 2 shape keys to animate an L shaped room. A square room would only need 1 shape key. I'm using a solidify modifier here to reduce vertices needed to animate.

In Object Mode, under Object Data properties > Shape Keys, add the number of shape keys needed, as I previously mentioned, I'll be adding 2 to animate this in 2 steps. Make sure each shape key is Relative To the previous one to make animating simpler.

Select the first shape key and go into Edit Mode. Move your vertices to the first step of animation. Go back into Object Mode, select the second shape key, then go back into Edit Mode to make the next step of animation.

Now you can animate the shape keys to adjust the extrusion of the walls.

It's the same technique I described earlier; but you did a much better job of answering the question, so I upvoted your answer.  Nice example and deomstration.

I use shapekeys for this.
Create your object and do the extrusions so that you have all of the vertices.  Shapekeys don't work if you add vertices.
In Object mode add two shapekeys.  The first one will be your fully extruded wall.  Select the second one and enter edit mode,.
Now move all of the extruded vertices so that they are exactly aligned to the vertices they were extruded from.  This will give the appearance that you haven't done the extrusion.
You can animate the second shapekey's Value setting.  By starting at 1 and going to 0, you effective animate the extrusion.

One solution could be to use a Boolean modifier.
Add a large enough cube to your scene to envelope the walls and add a Boolean modifier to the walls, then set it to subtract the cube (I believe it's Difference but can't check right this second.)
Then, animate your cube moving up slowly.
This may create graphical glitches as your topology will be interrupted, but it could be a good starting block. If your walls are made of simple geometry, this may not even be an issue. Hope that helps!