text:
Multiple simulation zone bug in geometry nodes?
Simple case. I've a scene with a complex geometry nodes on a mesh but i simplified it for the post.
Goal
I need to use 2 simulation zones in my geometry node modifier but...
Problem
...the last simulation zone always "cuts" all the previous simulation zones job after the first frame. Do you know why?

Detail
I read all the docs about the simulation zone and the baking work behind but i didn't find anything that says i can't use multiple simulation zones in one geometry node modifier or use one simulation zone in multi geometry nodes modifier in the stack modifier of a mesh.
I didn't even find a check to tick in the program preferences.
Tests
If i use only one simulation zone all goes well but with 2 or more the system executes only the first frame (so in the image above only one shifting of the mesh by 0.1 on the X) and executes all the frames for the last simulazione zone.
I also tried to bake each Simulation Output node in a different custom path and if you do the same you see that for the first simulation node the baked frames go from 1 to 1...

...while for the second go from 1 to 250.

The same behavior if i use one simulation zone in one geometry node modifier and next adding another geometry node modifier with another simulation zone.
Bug or standard behavior?
Update 9 april 2024:
It doesn't work even with Blender 4.1
Thank you in advance for the help!
Andrea.

from my experience, this is not possible. But I've found nothing which confirms that on the doc or other.

Thank you Lemon, I hope someone can find a solution or a confirm for this behavior.

Did anyone find why the behavior of this system? Thank you so much!


text:
cloth simulation render
when I play the simulation on a pillow it runs fine in blender but when I render it comes out as follows:

has anyone run into this before?
The blend file can be found here:

the blend file can be found here:

as a general rule: you should bake the cloth sim before rendering....

Do you mean when you preview the simulation it looks fine, but when you render it looks messed up?  I haven't dug into your cloth settings to find out why it doesn't work at higher subdivisions, which is I'm sure ultimately what you're after, but I did notice right off the bat that the answer to your question lies in the Subdivision modifier:

You have the number of subdivisions set to 2 in the viewport and 4 on render.  It seems that higher subdivisions are not playing well with your cloth settings, but that should probably be addressed in a new post.

i tried resolution of 4 and it works fine and smoother look, i just start the simulation again from frame 1 :)

source: Stack Exchange

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

sort: votes


text:
Hair randomly disappeared partially from the top of my character's head
I've been working on this character for a few weeks now. I had the hair all set up and working great. But for whatever reason the hair on the top of his head disappeared and I can't get it back. To make this weirder, I was editing a completely separate part of the model (the armor) when it happened. Resetting the edit of the hair doesn't work, and it looks completely fine in the particle edit mode. I also checked the vertex group and that looks the same as well. It does look like the hair is still there when I zoom out really far, but I'm not sure if its the same length and style.

On further inspection it seems as though the hair is there, but it is below the scalp/ I have no idea how to fix this.

Welcome to SE. Check normals of faces. If some face have inverted normals then hairs will be inside scalp.

Good suggestion but I did already check that. They are correct.

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


text:
Array - Object offset keep object rotation
I'm making a 3 legged stool similar to this

I have positioned on leg and I want to position the next 2 using Array - Object offset. I have successfully achieved correct position of the legs however the rotation of the leg is incorrect.

The picture above shows bottom view of the stool. You can see that each leg is rotated differently. The correct one is the bottom leg. Is there an option how to "keep" the rotation of an object while using array?
Thank you.

this is weird because by default your legs should rotate around that empty as well, can you share your file to see your options?

Naming your legs left, right and bottom based on the positions on the picture, my guess is you applied the modifier to the vertical leg (otherwise unlikely to get exactly vertical), and rotated an empty so the bottom leg has correct transformation. This will never position the left (starting) leg correctly, and stacked transformations like on right leg will be incorrect. Try a setup with 5 or more legs to see it more clearly. You should instead have a simple setup, where you only rotate the empty by 120° around Z axis.

How you can do it - this way it works.
So you have something like this:

Note: the pivot point is at 0/0/0
No you can rotate the leg in object mode in x-axis like this:

Important: now press ctrl-a and apply rotation.

Then add an empty.

add an array modifier to your leg like this:

now select your empty and rotate by z-axis as you like.

you now still can correct the distance by selecting the leg again, press TAB to enter edit mode and press A to select all, then type G -> Y and move it as you like it.


text:
How do i make a gaping hole?
I'm trying to simulate something being stabbed and the sword leaving a gaping hole.

But I don't want to change the geometry of the actual thing. I wanted to try and use a transparent plane, so how would I go about making a gaping hole in someone's torso, but without affecting their geometry?

https://blender.stackexchange.com/questions/124595/how-to-make-an-open-object-behave-like-rubber-when-penetrated-by-another/124598#124598

Um, how does that help? I wanted to make a hole, not have something penetrate the already made hole

How would i create this?

Masking doesn't touch the mesh, just makes it appear a hole, tunnel, or pit is in the impaled object. Note that this form of masking only works when rendered with OpenGL.  Blender Internal can also do this but with more imagination and work.  I have no experience with Cycles but imagine it could also be possible.

In this example a 3D mask is used to give the hole depth. It is turned off in the Outliner until the sword is ready to be withdrawn. The sword's removal reveals the hole.  The camera can actually travel through the hole and out the other side, spin around and peer through from the rear with a little Outliner trickery.
If 3D masking is a little too much for the inexperienced, a plane shaped as the hole can be used instead, but you'll be seeing straight through the torso and without depth, as though a hole had been cut into a photograph.
The details -
Make a duplicate of the actor and store it in say Layer 10 for safekeeping.
Impale the char with the sword and select the char, use a Boolean modifier on it, choose the "intersect"  option and name the sword as the impaling object.  What should be left is the actual hole the sword makes but shaped as a solid 'lump'.  It's front and rear surfaces will match precisely the torso's geometry.

APPLY the modifier so the geometry remains solid.
Blender is still seeing this 'lump' as the character, so rename it as a mask and move it to layer 2.
Go back to layer 10. duplicate the character or torso and move that to Layer 1. (replace what the Boolean modifier has destroyed)
Select the mask in Layer 2 again and give it two material slots.  One for it's sides (coloured red) and another for it's front and rear surfaces. (transparent)
We use the 'old Inviso trick' here and refer you to this link for detailed info about this form of masking.
How to put a mask into 3d space
The two important steps being - the Transparency tab's "Opacity" slider is to be set at 0.008, and both Specular sliders set to zero to avoid ghosting.  The diffuse's colour wheel slider should be set to about half brightness.
Once done and viewing in 'Material" mode the mask should now have invisible ends and you should be able to peer through it and see it's sides.  If the sides aren't visible, get into the mask's material tab and make sure the 'Mask' material is underneath the 'Sides' material. (use the triangular arrows to move each up or down)
With both layers active, expand the mask in the X or Y direction only and just a whisker so it's ends are barely outside the torso's surfaces.  This is so we will be seeing the mask's ends, not the torso's material where the mask sits.   When the ends are working properly as masks, a hole will appear 'through' the torso.  Viewing from the rear will be the same.  If it's not working you will need to read through the link
properly and apply that info.
Shape the hole's ends as you wish to make it appear as a wound, bearing in mind that it's surfaces once deformed, may slip back under the torso's and lose the masking effect in those regions.  It's no big deal but it may appear a little strange.
If the character is going to be moving about, a 'Navigation Empty" will be necessary.  Create an Empty at the char's origin point, then parent the mask to it.  Do that first.  Next, parent the character or it's armature to it.
This maintains the 'creation hierarchy' necessary for this form of masking.  We would be in effect, parenting the torso to the mask but not directly.
Full details can be seen at the info link above.
The character's selection arrow in the Outliner should be grayed out so it cannot be moved about directly.  Instead animate the Navigation empty.  That will keep both the 'hole' and the torso together.


text:
Ball with soft body and collision falls through plane
I am beginner in Blender. When I try to make a bouncing ball (UV sphere marked as "soft body") on the Plane (mark as collision), sometimes the ball falls through the plane.
Or when it works correctly and then I try to extrude or modify somehow the plane, the ball falls always through the plane, even though the plane is marked still as "collision". What am I doing wrong? Thanks

The most likely problems are either due to flipped normals, fast moving soft body (moving so fast as to jump through the plane before collision can be detected), or inappropriate Collision settings.
The first thing to point out is that the collision is an approximation. The soft body solver steps the soft body vertices through a 'step' and compares the positions to any collision surfaces. If the new vertex position is within one of the collision 'zones' (ie, the 'Outer' and 'Inner' settings on the Collision panel) then it will be repelled by the surface on the next 'step'. If the step size is too large for a fast moving vertex to be detected then it can pass straight through a surface unnoticed. To resolve this issue you can tweak the Soft Body Solver settings - drastically increase the Min Step setting and the steps will be considerably shorter, resulting in the fast moving vertices being more frequently sampled and, hopefully, hitting the collision zones.
The next problem is with flipped normals. If a vertex approaches the opposite side of a surface then instead of hitting the surface it will be drawn through the surface to the other side. The normals should (almost) always point to the "outside" of the object so as to repel collisions to the exterior.
The final problem is setting the Internal collision bounds larger than the depth of the object. The collision settings are in scene units (so, by default, Blender Units). The default 'Inner' collision settings of 0.2 are only appropriate for objects that are more than 0.4 units in depth. For example, a cube with 0.4 units per side. This would mean that down to 0.2 units below the surface would be considered for repulsion from that closest surface but anything below that would be repelled out of the other side. If you set collision 'Inner' greater than half the depth of the surface then you start to get strange results where the top surface collision zone interferes with the opposite surface collision zone. IF the Inner is set to more that the total thickness of the object then you can end up with a situation where vertices close to the surface are drawn through the surface as they are within the collision zone of the far side of the object!

So, follow the following rules :

Keep Normals pointing 'out' of the object
Set Min Step high enough to ensure any vertex motion is not too great per step - faster objects require more steps but more steps take longer to calculate
Carefully select collision depths to avoid overlapping zones - avoid Inner being more than half the minimum thickness of the mesh.

Hello, thank you very  much, your answer is great. The problem was with flipped normals. I changed the direction and it works as it should :) I am really brand new in blender, it would take me years to work it out without your help. Thanks

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


text:
My Apple Is Stuck!
I am a beginner and am following a CGBoost tutorial. I have gotten to where I am to move the vertices, but they don't move. Here is the outline I am following:

Add mesh, UV Sphere, change to smaller on the form in left bottom, but increase the size of the sphere.
Vertex button on top left selected; edit mode selected, proportional editing button pressed
Grab gizmo on top of the apple (by the point on the arrow)and hold down left-click
Apple moves up and down. Does not distort.

What am I doing wrong?
Here is a screenshot.

Might be that the radius of the proportional editing is too big, making the whole object move. When dragging vertices with left click, use the mouse wheel to reduce or enlarge the proportional edit radius.

can you show us a screenshot from what you are doing?

Turn Off Proportional Editing.  You see that blue button at the top-center when you are in edit mode?  Click it to turn it off.  It should work then.


text:
Automatic Image Texture mapping (Scale and size) on surfaces (no UV maps)
This problem may be very straight forward to solve, but since I'm new to Blender (but not to 3D, CGI), and I already saw ton of tutorials on YouTube trying to find a solution but found none, so here it goes:
In Lightwave, I can automatically project a planar image (png, jpeg...) or movie (mp4, avi...) on any surface (polygon) without define (use) an UVmap.
Lightwave offers an automatic fit (scale /size) projection of the image to a defined surface (like I said, no UVmap used).
See attached image "Lw.png" for better understand.

I've tried to do the same in Blender but with no success.
I tried every "Texture Coordinate" options and "Mapping Type" to no avail.
See attached image "Blender.png".

Maybe I'm doing something wrong but shouldn't the "Mapping" node offer an "Automatic" image texture fit (scale /size) option?
Does Blender offers any way to achieve this result without forcing the user to "eyeball" all the "Mapping" Scale /Rotation /Location" values?

Can someone please point me to a solution (if there is one) to project a texture image or movie on a surface, without using UVmaps?
Much appreciated.

Maybe try "Project from view (Bounds)" this option is in edit mode UV menu > Project from view (Bounds), if you are projecting the image on a plane use the "Images as planes" addon included in Blender

Never-mind, I found the solution.
It is not the most obvious /intuitive thing but hey, Blender never was an intuitive software.
The solution is:
Name each polygon (that is going to be a display surface), with a unique Material name.
Then, enter EDIT mode and select all such display polygon and add an UVmap.
(see attached image for clarification).
From that point, it becomes already possible to "automatically" apply images or movie as textures to each "Display" (polygon surface).

You can work with the UV Project modifier. This modifier works with an empty object which helps you to project the image onto the mesh faces. First you need to add a new UVMap to mesh

Then with mesh selected add UV Project Modifier

In the modifier, in "UV Map" input select the new UVMap we add earlier

In "Object" input select an Empty object that we help us project the image.

In the material add "UV Map" node

In the UV Map node select the new UVMap and conect to image node

Now the fun part, rotate the empty object to align with the face, also you can rotate and scale the empty to fit the image.

Optionally, to finish, you can apply the UVProject modifier to not rely on the empty object in the future if you wish.


text:
how to access bpy.data.objects thru bpy.context.scene.objects
I'm trying to run this script in a Blender text editor:
import bpy

object_dir = "/somedir"

object_all = bpy.context.scene.objects

for ob in object_all:

    if ob.hide == True:

        object_name = ob.name

        #print(object_name)
        #data_blocks = set(bpy.data.objects[object_name])

        data_blocks = set(ob)

but when I do I get "TypeError: 'Object' object is not iterable".
What's the correct way to access a bpy.data.object thru a bpy.context?
Thanks in advance.

Alright, I was a bit vague. Here's the code:
import bpy

object_dir = "/Users/max/Developer/Content/3D/objects/"

object_all = bpy.context.scene.objects

for ob in object_all:
    if ob.hide == True:
        object_name = ob.name
        print(object_name)

        data_blocks = set(bpy.data.objects[object_name])

        bpy.data.libraries.write(
            object_dir + "_" + object_name + ".blend",
            data_blocks,
            relative_remap = True
        )

        bpy.ops.export_scene.obj(
            filepath = object_dir + "_" + object_name + ".obj",
            use_selection = True,
            use_mesh_modifiers = True,
            use_materials = False
        )

what I want to do is simply write to a library and export to obj every hidden object I have. The error:

line 12, in  TypeError: 'Object' object is not iterable Error: Python script fail, look in the console for now...

error is referred to this line:

data_blocks = set(bpy.data.objects[object_name])

Thanks again.

The TypeError will also indicate which line is at fault.
What is the purpose of your script? It doesn't seem to do anything except assigning to some unused variables.

That line of code is overly complex. ob is already a datablock, so you don't have to go through the hoop of getting its name and then looking it up somewhere else. Furthermore, this approach will break when you have linked datablocks from other blend files (then names aren't necessarily unique).
To create a set, you have to either use a set literal like {'abc', 'def'}, or pass an iterable to set(). This is why you get the error message that Object is not iterable. Use either data_blocks = {ob} or data_blocks = set([ob]). I would say the first method is easier to read. It's probably also faster, because you don't have to create an intermediary list first.

Please accept this answer, so that your question is marked as "answered".

A suggestion on how to "write to a library and export to obj every hidden object".   Note I've assumed also you only want to export mesh objects.
Creates a dummy scene, appends each object, writes to lib and exports scene to obj. Then removes the scene.
import bpy
from os import path
file_path = "/tmp" # some file path.
context = bpy.context
scene = context.scene
# all hidden mesh obs in context scene
mesh_objects = (o for o in scene.objects if o.type == 'MESH' and o.hide)
# all hidden mesh obs in file
#mesh_objects = (o for o in bpy.data.objects if o.type == 'MESH' and o.hide)
# all  mesh obs in file
#mesh_objects = (o for o in bpy.data.objects if o.type == 'MESH')
# add a dummy scene
dummy = bpy.data.scenes.new("dummy")
# make it context
context.screen.scene = dummy

for o in mesh_objects:
    #link to dummy scene
    dummy.objects.link(o)

    bpy.data.libraries.write(
        path.join(file_path, "%s.blend" % o.name),
        {o},
        relative_remap = True
    )

    bpy.ops.export_scene.obj(
        filepath=path.join(file_path, "%s.obj" % o.name),
        use_selection = False, # only one obj in scene
        use_mesh_modifiers = True,
        use_materials = False
        )
    #unlink o
    dummy.objects.unlink(o)

# remove dummy scene
bpy.data.scenes.remove(dummy)

You may want to make mesh_objects a generator expression instead of a list comprehension. That'll save a bit of memory :)

@dr.Sybren great suggestion thankyou.

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


text:
How to find if geometry linked to an edge is coplanar
I have this mesh:

I need to find all faces linked to the selected edges. How can I find that using BMesh? I know this way:
for e in edges:
    for f in e.link_faces:
        print("Link Faces:", f)
        normals.append(f.normal.copy())

but for some reason this isn't good for me. Is there any other? Thank you.
EDIT: I need to be more specific, so to highlight the problem.
The object I need to check:

Now I need to know if the edges from a selection lies on the same plane. So I check for those edges face normals. The script:
me = ob.data

if me.is_editmode:
    # Gain direct access to the mesh
    bm = bmesh.from_edit_mesh(me)
else:
    # Create a bmesh from mesh
    # (won't affect mesh, unless explicitly written back)
    bm = bmesh.new()
    bm.from_mesh(me)

# get all selected edges
edges = [e for e in bm.edges if e.select]

# check if all connected face normals are
# on the same plane. the check is strict
faces=[]
normals=[]
for e in edges:
    for f in e.link_faces:
        faces.append(f)
        print("Link Faces:", f)
        print("Normal: ",f.normal)
        print("Normal copy: ",f.normal.copy())
        normals.append(f.normal.copy())

# check they're all the same vector
coplanarity = all(x==normals[0] for x in normals)

print("Coplanar: ", coplanarity)

First selection:

results:
Link Faces: <BMFace(0x11f892818), index=311, totverts=4>
Normal:  <Vector (0.0000, -0.0000, 1.0000)>
Normal copy:  <Vector (0.0000, -0.0000, 1.0000)>
Link Faces: <BMFace(0x11f8927e0), index=310, totverts=4>
Normal:  <Vector (0.0000, -0.0000, 1.0000)>
Normal copy:  <Vector (0.0000, -0.0000, 1.0000)>
Coplanar:  True

Second selection:

Results:
Link Faces: <BMFace(0x109d47b80), index=226, totverts=4>
Normal:  <Vector (0.0000, 0.0000, 0.0000)>
Normal copy:  <Vector (0.0000, 0.0000, 0.0000)>
Coplanar:  True

The two edges are selected to be on the same face; as you can see, the normals result being different while they're obviously the same. Looks like a non-manifold kind-of bug. So I need to take another route...
EDIT2:
No it's not a bug. I did more tests, there's st. I don't get here...
the blend

what do you mean this isn't good.  Is that not working or is there some reason you do not want to use the .link_faces method?

calling it to do f.normal.copy yields always a zero vector. But that face has a normal; so it must be s.t. related to the way the data is accessed. Hence the search for a different path

Bmesh is cross-referenced, no matter how you access a particular vert/edge/face it's going to point to the same instance in memory. Remember that when you modify data you might need to re-calculate normals before accessing them.

I think you are on the correct path.  I use link_faces for many many calculations.  Also your image above looks like a wireframe

Got the question more clear to show what the problem really is.

My mistake. Forgot the math. What I need is calc_face_angle, but because that won't work with one face only edges, I think calc_edge_angle on vertices is more appropriate

Checking if all selected geometry is coplanar.
Similarly to this answer I find using the convex hull bmesh operator, and calculate volume on result a quick and dirty (and somewhat bulletproof) way to calculate if all geometry lies on the same plane.  Doesn't need to calculate face normals at a all.
Here is a test script to run in edit mode, that will report if all selected edges are coplanar.
import bpy
import bmesh
from mathutils import Vector

def coplanar(geom, TOL=0.0001):
    verts = []
    for g in geom:
        if hasattr(g, "verts"):
            verts.extend(v.co for v in g.verts)
        else:
            verts.append(g.co)
    if len(verts) < 3:
        return True
    o = sum(verts, Vector((0,0,0))) / len(verts)
    bm2 = bmesh.new()
    for v in verts:
        bm2.verts.new(v - o)
    bmesh.ops.convex_hull(bm2, input=bm2.verts)
    vol = bm2.calc_volume()
    bm2.free()
    return vol <= TOL

context = bpy.context
ob = context.edit_object
me = ob.data
bm = bmesh.from_edit_mesh(me)
edges = [e for e in bm.edges if e.select]

print("Coplanar:", coplanar(edges))

As mentioned by @kheetor if you are seeing zero normals, you most likely need to update them bm.normal_update() or on a per face basis with face.normal_update().
Also suggest using a tolerance rather than equality when comparing float values.  For example in your script above.
# check they're all the same vector
coplanarity = all((normals[0]).angle(x) < 0.0001 for x in normals)

would IMO be a better test than normals[0] == x.


text:
how to bake texture from multiple overlayed uv Islands to individual uv islands
I wanted to ask, how you could quickly bake/transfer the texture from overlaying UV islands to individual UV islands?
the "Selected to Active" option in the baking menu was activated while baking the hair texture to the newly unwrapped mesh with a new assigned texture  but that gave out a white result.

Create a second UV map on your object in Properties > Object Data and unwrap it so it has individual islands (or however you want)

Blender Internal

Add your existing texture to the object and select the appropriate UV map in Properties > Textures > Mapping > Map:

Create a new image in the UV/Image editor by pressing AltN or Header > Image > New

Select the new UV map in Properties > Object Data and then select the new image in the image editor, so that the individual islands UV map is displayed over the new image.

Press Bake in Properties > Render > Bake:

Cycles
To do the same in cycles, you can use attribute nodes:

Add two attribute nodes and enter the names of your UV maps. You can now use the Vector output of these as those UV coordinates.

Create a new image in the image editor and add it to the node setup with a texture node. Plug the mapping you want into that texture node and select it.

With that texture node selected, press Bake in Render settings > Bake.

gandalf3: We also now have a dedicated UV map node which is available for newer builds.  It's in the 'Input' list.


text:
Rigging a Stethoscope
I’m trying to rig a Stethoscope and have come to this issue…

I have Hooks attached to a Bezier Curve but when i move a hook the end of the curve bends so it looks like it’s breaking the tube, is there any way to stop the end hooks from moving or rotating the end of the Curve?
Hope that makes sense.

[Couldn't reproduce], upload your file or show more of your Hook and Curve settings. Are your curve control points set to Aligned mode?

Thanks,
looks like in the end all I had to do was shorten the left hand handle of the left bezier curve vertex and it worked but ill look at Aligned too.

Post your solution as an answer so others can benefit from it, please.


text:
2.8 setting up different viewport shading options for different viewport windows?
hopefully this makes sense.
But can you set up different viewport shading options for different viewport windows?
ie if I'm using the Quad window viewports (see image) can I have X-Ray shading in all viewports except for the ortho viewport, because in the ortho viewport I just want a wireframe shading (or even hiding the blueprint objects).

If you split the areas manually, then yes it's possibly. Unfortunately that doesn't seem to work for the quad view, because all settings are applied to all areas.

Thanks guys, so looks like what I'm after is...
1) Setup 4 viewports (don't use Quad View),
2) Make all of them Ortho viewports except the top right viewport (ie make it Perspective)
3) Then in the perspective viewport  select the blueprint Empty object and in Object Data turn off Display Perspective
Giving me wireframes against the blueprints, but a solid view of the tank in a perspective view without the distraction of the blueprints, ie...

Thanks again.


text:
Round beveled text
Is there easy way of having a rounded bevel on text… ie like so…

It was painful to model this on the text and when I added a bevel I got all sorts of bad geometry and had to rebuild it etc, like so…

so just wondering if there was an easy way I was missing?
Thanks in advance.

yeah no worries,
I've converted to a mesh like so...
https://i.imgur.com/W8yf6aX.jpg
then added a middle bunch of edges...
https://i.imgur.com/p7fEsk4.jpg
raised them up..
https://i.imgur.com/2dHp5gU.jpg
and beveled but it gets all messed up...
https://i.imgur.com/6o83DBs.jpg
so just wondering if theres an easier way to do this?

Related https://blender.stackexchange.com/questions/72662/trying-to-make-glossy-volume-shapes/ https://blender.stackexchange.com/questions/315370/chiseled-text-how-to-go-from-2d-quads-to-raised-center https://blender.stackexchange.com/questions/134971/round-beveled-text https://blender.stackexchange.com/questions/58457/how-to-make-a-bevel-on-text https://blender.stackexchange.com/questions/64980/how-to-make-a-metal-emboss

I would personally go with Skin modifier. It can be a bit tricky sometimes but after you will "feel" it, you'll have fun.
Mesh.

Simple extrusion from one vertex. No faces.
Modifiers.

First Subdivision for smoothing base mesh.
Skin for creating mesh.
Second Subdivision to smooth Skin results.
Most important thing here is that you will need to manually set Vertex Data radius by selecting vertex and scaling it using Ctrl+A.


text:
Curve modifier on an already curved model?
Hey there I have a brain neuron model which is already modeled in a curved shape.

then I create a Bezier Curve in the same shape and place the Origin to the start of the curve

and place the Origin at the same spot for the mesh I want to affect

but when I place a Curve Modifier on the mesh and choose the Bezier Curve it distorts the mesh like so...

but the weird thing is if I scale all the Bezier Curve points to 0 in the x-axis it fixes the mesh but then the curve isn't in the desired pose I want.

Can anyone help me with how I have a curved Bezier Curve affect a curved mesh?
Otherwise do I have to model the mesh in a straight line?

As soon as your curve is not flat, it will deform the shape! The curve will deform the shape as much as the curve is itself deformed compared to a flat curve.
So, "do I have to model the mesh in a straight line", I would say yes.
Note that you need to put the origin of the curve at its beginning and make sure that its normals go in the good direction.

Does it answer your question?

Exactly.. The mesh doesn't 'know' it's curved.... but it's a question I've wanted to ask myself .. is there some way to 'apply' the deformation, so a controlling curve is aligned with the current state of the mesh?

I don't think so but there must be some way to find a simple solution when you need to do this kind of thing, perhaps you should ask the question with a practical case?

I think I've just found an answer, first test looks good ... negative shape keys ...  no time to write up / test exhaustively atm.. see if you get there first! :D

Oh yes ok, wow... maybe put the method here when you'll have time?

Nope, it wasn't there.. :( the inverse funcion is more complicated than that..

Thanks guys,
I ended up following this tutorial
https://youtu.be/JS8V4_Ncn0w?fbclid=IwAR1C7Nu6KBUih5b4_dXfOOma701EUGuFvDQl_QDiOwVRDIHZmHtYIjRqpQI
just a shame there's no easy way to just use a curve on a curved mesh


text:
How to get the orthographic scaling of the camera to be exact in conjunction with the grid in isometric view?
Is there an exact orthographic scaling that accurately reaches the top of the grid angle?
I use "1.4142" in ortographic scale. But I'm not sure it's accurate enough.
I use a resolution of 1024x1024.

There is always an approximation, but with that parameters you should get something pretty close. Can you show the discrepancy? In my test file seems aligned enough...https://i.sstatic.net/d8b60.png

The discrepancy is not noticeable in resolutions of 2048x2048 (literal, the same pixels in terms of similar orthographic scaling), which is enough, I still wanted to share the data, and also ask if anyone had the exact calculation haha, thanks for commenting

One way to approach this is to use the 1x1 plane centered at the origin as a guide (as you've already done visually here), and to programmatically fit the parameters of the orthographic camera to just-barely contain that plane. Assuming no shape keys or other complications to the vertex data are present, and that you have the reference 1x1 plane chosen as the Active Object currently, and that the only camera in the scene is called "Camera" and is the orthographic camera of interest, here's some Python code for doing this, using the location of the 1x1 plane's vertices in Camera Space as a way of determining how close the Orthographic Camera is to containing them:
from bpy_extras.object_utils import world_to_camera_view
vxMax = max([world_to_camera_view(bpy.context.scene, bpy.data.objects['Camera'], bpy.context.object.matrix_world @ v.co).x for v in bpy.context.object.data.vertices])
vxMin = min([world_to_camera_view(bpy.context.scene, bpy.data.objects['Camera'], bpy.context.object.matrix_world @ v.co).x for v in bpy.context.object.data.vertices])
vyMax = max([world_to_camera_view(bpy.context.scene, bpy.data.objects['Camera'], bpy.context.object.matrix_world @ v.co).y for v in bpy.context.object.data.vertices])
vyMin = min([world_to_camera_view(bpy.context.scene, bpy.data.objects['Camera'], bpy.context.object.matrix_world @ v.co).y for v in bpy.context.object.data.vertices])

xDiam = vxMax - vxMin
yDiam = vyMax - vyMin
diam = max(xDiam, yDiam)

bpy.data.objects['Camera'].data.ortho_scale = bpy.data.objects['Camera'].data.ortho_scale * diam

Notes:

this simple code works nicely with a scene containing just the default camera (but switched to Orthographic) and with the Default Cube replaced by a Plane. It needs to be generalized a bit if the camera may be 'off-center' initially, in order to re-center the camera as well as adjust the orthographic scale
this only 'exactly' fits to whichever of the two dimensions is most constraining, given the target object and the orthographic camera's resolution (changing the ratio of the x, y resolutions of the orthographic camera changes the shape of its "view box", which can change which dimension is the most constraining one). I think it's also not very hard to generalize this a bit further to set the ratio of x, y resolutions so that the resulting orthographic camera is an exact fit to the target object in both dimensions, though, if that's needed.
this isn't really "exact", in the sense that I haven't explicitly worked out the mathematics of the basis transformations needed to compute the orthographic camera parameter settings needed to exactly fit to Blender's overlay grid. But, I think this is very close to that; the 1x1 plane centered at the World Origin seems to fit the overlay grid exactly, and working out the specifics of the basis transformations would I suspect ultimately end up with an implementation that looks basically like this code, since that is exactly the kind of mathematical transformation built-ins like world_to_camera_view are responsible for providing

Incredible, you solved it! and the camera was already centered if you add a camera with this:
bpy.ops.object.camera_add(location=(30.60861, -30.60861, 30.60861))
object = bpy.context.scene.objects.active
object.rotation_euler = (0.955324, 0, 0.785398)
object.data.type = 'ORTHO'
object.data.ortho_scale = 14.123
object.name = "Camera"
bpy.ops.view3d.object_as_camera()
For those who use Blender 2.79b and the code does not work(The @NeverConvex code) , they have to change the "@" to "*".
Thanks!


text:
In proportional editing is posible to move the sphere / circle of influence?
What determines the position of the sphere of influence? It doesn't seems to follow my selection or the origin of my object.
It's possible to move it?
When you activate proportional editing and use the "G" key a white circle / sphere appears (the one that determines the reach of proportional editing). My questions are related to it. You can change their size with the scroll wheel, but it's possible to move it?

We would like to help, but this question is vague and unspecific. Could you please work on it to make it more understandable?

Done, I made my question more specific.

Like, what do you mean? Usually you select a vertex and that becomes the
"center of the circle". Do you want the center to be offset? Like do you want the selected vertex to no longer be the center of the circle?

Yes, something like just moving the circle freely, it's that possible?

To the best of my knowledge, no. the circle representing the influence of a proportional edit is always at the median of the vertices, edges, or faces selected before you activate the edit.

Apparently it's not possible in blender 2.93 to change the position of the circle of influence in proportional editing. But I found a solution: Just extrude one of the faces in the direction you want the circle to move, that will make the center of the selection moves and the circle will move with it. After editing your model just delete the extra face.
Basically if you want the circle to move to the left extrude a face of your selection to the left, you can use the axis keys (X, Y and Z) to extrude the face parallel to one axis, so the circle moves only in that axis. The more you want the circle to move to the left the more your extrude the extra face.
This is useful if you want the circle to be of certain size but at the same time you don't want it to affect one side of your model, then you move the circle with this method.

While in Edit Mode, you can hide a portion of the model with H.  This will exclude the hidden portion from being affected by Proportional Edit.
Use Alt + H to restore hidden vertices.

Note that when multiple elements are selected, only one proportional edit circle will be displayed in the center of the selection, but the actual areas of influence are around each individual element.

I had my falloff set to constant for visual clarity.


text:
How to select a mesh peaks and troughs
I have this mesh:

With a python script, I'd like to select the peak and / or the hole. I put them together because it looks like the solution is the same...
More exactly I'm looking for a way to tell those features apart from the rest of the mesh...
Blue selected edges show the (hypothetical) boundaries. Feels like it's something related to curvature, but not sure...
EDIT: result by selecting edges at angles (50°):

faces selection (vector (0,0,1)):

(I don't understand this)
EDIT: now I got it. It requires a more precisely oriented vector to tell faces by angles. Gotta look for this better.

Face normals, Edge angles, and link edges count.
In your screenshot the peaks and troughs are extrusions which have a vertex edge count of 5, which is a simple test.
Can also look at the signed edge angle to find peaks and troughs. I've used 50 degrees.
And also look at face normals vs an up vector. (A simple z axis to test)
Test script run in edit mode.
import bpy
import bmesh
from math import radians
from mathutils import Vector

ob = bpy.context.object
me = ob.data
bm = bmesh.from_edit_mesh(me)

up = Vector((0, 0, 1))

#  because its an extrusion select on link edges
for v in bm.verts:
    v.select = len(v.link_edges) == 5

test_angle = radians(50)
# select edges on face angle
for e in bm.edges:
    if e.is_boundary:
        continue
    # hills
    e.select = ( e.calc_face_angle_signed() > test_angle
    # troughs
    or e.calc_face_angle_signed() < test_angle

for f in bm.faces:
    f.select =  f.normal.angle(up) > test_angle

Some combination of any or all of the tests above should cover most cases.

f.normal.angle(up) > radians(testangle) -> this gives the angle between the normal and the "up" vector... I don't understand what value to give to "up" for the test to work...

just a couple of typos... too many radians and testangle

@Kabu Thanks, edited. Changed from hard coding 50 3 times as an afterthought when posting.


text:
how to find a mesh tips
I have this mesh:

How can I get the object tips position with a python script?
Consider I don't want the bounding box tips, but the mesh geometry cusp positions
As dr. Sybren pointed out, there are many ways of defining "tips":

The most extreme points on the axis of the first principal component
The points that touch the bounding sphere/box
The vertices where the curvature of the mesh is over a certain threshold
The points where the highest intensity rays cast from the object center meet the object shape (a generalization of 1.?)
The points where the shape-aligned cutting planes have zero area (similar to 3.?)

(I've added a couple myself).
To avoid complicating matter further I'd stick with 2., points that touch the bounding sphere/box.

There are many ways in which to think about your question. How do you define "tips", in a mathematical sense? Are they the most extreme points on the axis of the first principal component? Are they the points that touch the bounding sphere? Or are they defined as vertices where the curvature of the mesh is over a certain threshold?

Or the point where the shape-aligned cutting plane has a zero area? Got to think about it

Or the highest intensity rays cast from the object center to the object shape in a spherical space...

Use the convex hull.
The routine to find the minimum volume bounding box involves the creation of the convex hull. It occurs that the extreme points will be vertices on the convex hull.
Test script. Uses BMesh.ops.convex_hull(...) to create a convex hull mesh where the extreme points will coincide with vertex locations. The two furthest from the origin are chosen and an empty added at those locations. (Assumes the origin is already at center of geometry)
import bpy
import bmesh

context = bpy.context
ob = context.object
me = ob.data
bm = bmesh.new()
bm.from_mesh(me)
ret = bmesh.ops.convex_hull(bm, input=bm.verts)

verts = sorted([v for v in ret["geom"]
        if isinstance(v, bmesh.types.BMVert)],
        key = lambda v : v.co.length)

for v in verts[-2:]:
    loc = ob.matrix_world * v.co
    bpy.ops.object.empty_add(location=loc)

Notes: simple example above grabs two furthest from origin verts in convex hull. To find the 2nd furthest would find the furthest from the first furthest.  Will be arbitrary for something symmetrical like the sphere, where each point is radius from origin.

Simple test result on oblong

Works perfectly, thank you. I didn't know convex hulls have this use.


text:
how to find a side total length
I have this simple setup:

I'd like to walk this perimeter and find the total length of every side, so as to find which side is longer:

How can I do that with a python script? Thank you
EDIT: added a clearer picture

Co linear Edges
below is a script that returns all co linear edges from a set of input edges. Two edges are colinear if they share a vertex and the edge vectors are parallel (dot product of normalized vectors is one)
The method edge_line_segments(...) takes as its arguments, the bmesh, a list of edges from that bmesh and a tolerance angle for how far from parallel the edges can be.
The return dictionary has a key "segments" which is a list of edges in each line segment.
import bpy
import bmesh
from math import sin, radians

def tag(iterable, value):
    for x in iterable:
        x.tag = value

def vec(e):
    v0, v1 = e.verts
    return (v1.co - v0.co).normalized()

def parallel(e1, e2, tol_angle=0):
    return abs(vec(e1).dot(vec(e2)) - 1) <= sin(tol_angle)

def line_select_extend(edge, v, tol_angle=0):
    edges = []
    while v:
        segments = [e for e in v.link_edges
                if not e is edge
                and e.tag
                and parallel(e, edge, tol_angle)]
        if segments:
            edge = segments[0]
            edges.extend(segments)
            v = edge.other_vert(v)
        else:
            v = None
    return edges

def select_segment(edge, tol_angle=0):
    v0, v1 = edge.verts
    edges = line_select_extend(edge, v0, tol_angle)
    edges.reverse()
    edges.append(edge)
    edges.extend(line_select_extend(edge, v1, tol_angle))
    return edges

def edge_line_segments(bm, edges=[], tol_angle=0):
    ret = {"segments" : []}
    tag(bm.edges, False)
    tag(edges, True)
    edges = set(edges)
    while edges:
        segments = select_segment(next(iter(edges)))
        ret["segments"].append(segments)
        edges -= set(segments)
    tag(bm.edges, False)
    return ret

To use.
Test script below to run in edit mode.  Calls method with  boundary (perimeter edges), sorts the segments by length, selects the edges of the longest segment and writes a report to system console.
context = bpy.context
ob = context.object
me = ob.data

bm = bmesh.from_edit_mesh(me)
perimeter = [e for e in bm.edges if e.is_boundary]
ret = edge_line_segments(bm, edges=perimeter, tol_angle=radians(5))
segments = [(sum(e.calc_length() for e in s), s)
        for s in ret["segments"]]
segments.sort(key=lambda s: s[0])

for i, (length, edges) in enumerate(segments):
    print("linked segment %d edges length %.3f" % (len(edges), length))

    for e in edges:
        e.select = i == len(segments) - 1
        print("\t edge %d len %.2f" % (e.index, e.calc_length()))

This puts me on the right way, thank you very much.

With the following script you're able to find the indexnumber of the corner vertices. Just put the object in editmode and select all corner vertices. The script will print a list for the second script.
import bpy
import bmesh

obj = bpy.context.active_object

mesh = obj.data

bm = bmesh.from_edit_mesh(mesh)

bm.faces.ensure_lookup_table()
vertices = bm.faces[0].verts

corner_verts =[]
for v in vertices:
    if v.select:
        corner_verts.append(v.index)

print(corner_verts)

bm.free()
bpy.ops.object.mode_set(mode='OBJECT')

Replace the corner_verts array with the output from the first script.
import bpy
import bmesh

obj = bpy.context.active_object

mesh = obj.data

bpy.ops.object.mode_set(mode='EDIT')

bm = bmesh.from_edit_mesh(mesh)
bm.verts.ensure_lookup_table()

corner_verts = [3, 11, 10, 1, 6, 5, 0, 15, 14, 2, 13, 12]
len_corner_verts = len(corner_verts)

for i in range(0, len_corner_verts):
    v1 = bm.verts[corner_verts[i % len_corner_verts]].co
    v2 = bm.verts[corner_verts[(i + 1) % len_corner_verts]].co
    dv = v2 -v1
    print('from {0} to {1}, length: {2}'.format(v1, v2, dv.length))

print('---')

bm.free()
bpy.ops.object.mode_set(mode='OBJECT')


text:
How to find non manifold edges
I have this mesh:

With a python script, I'd like to select edge loops in the upper part first:

And the ones in the lower part:

So I can close them some way (by a face, or by adding more loops).
How can I do that with Blender SDK? Thank you.
EDIT: I mean, find the edges by starting from the object data, and not by using the editor...

In the above example, you can find manifold edges by finding edges that only connect to one face. Then you can filter edges for example by checking whether their vertices' coordinates are between some values. Look into the bmesh module if you haven't already https://docs.blender.org/api/2.79/bmesh.html You can fill faces either by using operators (similar to pressing f) while right geometry is selected or generate the needed mesh data yourself.

Select 1 edge of that type
Shift+G >> Amount of Faces Around an Edge.

When you do this, Blender posts the following action it took in python.

As for the raw bmesh method of detecting this:
You can find the Reference in this Link

For getting the Horizontal & Vertical sets in two separate passes, I would inspect the verts like so:
Horizontal Case:

All Edges Have the Same Z values for the start and end vertices.

Vertical Case:

All Edges Have different Z values for the start and end vertices.


text:
How do I randomly add points across geometry nodes
I was making a geometry node tree and I was wondering how I can use the point distribute an Icophere across my mesh?

do you mean the Point Distribute node?

Yes but when I tried to use this node it just makes the entire model disappear. I added some images to help.

Just change the order of the nodes then it will work as expected:
Point Distribute -> Point Scale -> Point Instance
The Random mode distributes the points in random order. Overlapping and intersections can occur.
The Poisson Disk avoids overlapping and intersections. You need to adjust the Distance Min value to the instance object's size.

Which order do I have to do the nodes in?

The image can be enlarged by clicking it, can't it? The order is Point Distribute -> Point Scale -> Point Instance.

Thanks, I just didn't set the density high enough, I didn't realize it had to be such a high value


text:
Why are the normals on my curve path not at each control point?
I am new to Blender and trying to develop a path that will be used to make a curved section of road. When I add the curve path and try to edit it, the normals are not at each of the control points but rather bunched up at the end of the path. I have tried resetting normals, still to no avail. Any advice? Picture of what I mean attached below:

Edit:
I have attached my blend file. I am trying to make a curved road and all of the tutorials I saw online explained to use a Nurbs path that will be used as a modifier for a plane. Here, all I have done is add a curve and I am trying to edit its control points, but the normals for the curve are not along the curve, but rather bunched at the end. I have made no changes to the curve except add it to the scene and show normals from the overlays menu.

Please clarify your specific problem or provide additional details to highlight exactly what you need. As it's currently written, it's hard to tell exactly what you're asking.

Hi Boogieman, so you are new to this forum. This is not a problem. But your question is. Why? because we don't know what you mean and it isn't clear what you mean. So if you are a beginner and have no idea, it is always a good idea to describe exactly and each step what you did to get your result. e.g. i added a curve, subdivided it 2 times and grabbed the first handle and rotated it by 90 degrees. And/or provide your blend file. So you should tap the edit button and improve your question so that it won't be closed soon.

I don't see your problem when opening your file. Make sure you download the latest version from https://www.blender.org/download/


text:
Baking of a hair cap doesn't work
So I was trying to bake a hair cap for my character as base for yet another try to make good realtime hair.
My current setup:

I made a hair cap object, unwrapped it, put a hair particle system on and groomed it.
I duplicated the hair cap, removed the particle system and used 'shrink/flatten' in edit mode so it lays over the hair from the other object.
I converted the particle system to curves, put bevel with caps on it in the curve settings and converted to mesh.
The duplicate got a material with a texture node and new texture for baking.
Cycles, Selected to Active.

Now I stumbled upon something new for me:

(why, what's up with those holes and squares)
Before this I tried:

with and without light
Cages, Extrusion/Max Ray Distance with several different values
the baking target as big as the hair particle object
baking directly on the hair particle object
using UV as mesh
baking hair directly as particles
having not so many crashes
bake with alpha and not just plain black or white
pulling my own hair out
taking a break
comprehending what went wrong
coming up with new ideas
reevaluating my hair choices

So I have no idea why it isn't working and would love to have a solution for this problem.
(Please help me)
File:

I think there is a misunderstanding about the baking process and the desired result.
Particle hair only works in Blender and is resource-hungry. you need to use a different technique for game engines.
One technique for game engines is to fake the required geometry with so-called hair cards. They are low-poly planes that use transparency and normal maps to looks like hair strands. To cover the head you need about rougly 250 of them. To speed up the grooming process you can use the particle system and the Particle Instance modifier to lay them out.
=> blender.org: Creating real-time hair in Blender (there is also a video linked)
Another video of Daniel Bystedt: Creating Realtime Hair in Blender (Stockholm Blender Meetup, February 2020)
What you tried does not really work. When you convert the particles to a mesh (or curve) the result is really high-poly - 4 million verts for your hairstyle! You can bake this high-poly mesh to a low-poly haircap (normal map+diffuse) but the result looks very bad.
Here's the bad result. As you can see even with 4 million verts you have not enough hair to cover the skin of the head beause there are no particle children. These would boost the number of vertices even more.
Converted hair particles (mesh) joined with the haircap, 2 different materials:

Baked normal map + diffuse:

This is exactly the result and baking procedure I was looking for! Thank you!

I just wanted to bake hairs onto the cap, but I guess I was too unprecise with my question. My bad. I knew of the hair card stuff and actually did a lot of that, but I was trying something different and was too dumb for basic baking apparently.

Ah, ok! If this baking is what you want, then you just need to convert the Mesh object (=the converted particles which is actually a curve object) into a mesh. Duplicate the haircap and join them. This is finally the high-poly object that you can use bake to bake with the low-poly haircap. This technique is good for beards :-)


text:
How to smoothly connect Python-generated double-cone meshes to an energy landscape Plane mesh for scientific illustration
My system

MacOS Version 10.15.7 (19H1323)
Blender Version 2.93.4 (2.93.4 2021-09-01)

Background
I am working on an idea I have for a scientific illustration within the field of theoretical chemistry. I will not go into the details, but give a short overview for some context.
Figure 1 shows two potential energy surfaces that mostly are separated by a gap except for in a single point where they meet and eventually intersect. Interesting stuff regarding chemical dynamics take place near so-called conical intersections.

Figure 1. Conical intersection of two potential energy surfaces.
The energies of the two surfaces close to the intersection point can be approximated by a relatively simple model (in polar coordinates):
$$
E_{\mathrm{lower}}(r,\theta) = E^\times + r\left[ \sigma \cos(\theta_s - \theta)
 - \sqrt{1 + \Delta  \cos 2\theta} \right] \\
E_{\mathrm{upper}}(r,\theta) = E^\times + r\left[ \sigma \cos(\theta_s - \theta)
 + \sqrt{1 + \Delta  \cos 2\theta} \right]
$$
with
$$
\sigma \in [] \\
\theta_s \in [0, 2\pi] \\
\Delta \in [0, 1]
$$
where
$r$ and $\theta$ are the radial and angular coordinates, respectively. The model contains some parameters that define the topography of the conical intersection: $\sigma$ describes the amount of tilt, $\theta_s$ defines the direction of tilt, and $\Delta$ is an asymmetry parameter.
The functions above can be plotted in order to visualize the conical intersections.
Python code for plotting:
import matplotlib.pyplot as plt
import numpy as np

class ConicalIntersection:
    def __init__(self, size=1, nfaces=5, origo=0, asym=0, tilt=0, angle=0):
        self.nfaces = nfaces
        self.nverts = nfaces + 1
        self.asym = asym
        self.tilt = tilt
        self.angle = angle
        self.o = origo

        # Set up mesh
        _t = np.linspace(0, 2*np.pi, self.nverts)
        _r = np.linspace(0, size, 2)
        _r, _t = np.meshgrid(_r, _t)

        self.x = (_r * np.sin(_t))
        self.y = (_r * np.cos(_t))
        self.zlower = (self.o +_r * (self.tilt * np.cos(_t - self.angle) - np.sqrt(1 + self.asym * np.cos(2*_t))))
        self.zupper = (self.o + _r * (self.tilt * np.cos(_t - self.angle) + np.sqrt(1 + self.asym * np.cos(2*_t))))

ci = ConicalIntersection(nfaces=50, asym=0.6, angle=np.pi/3, tilt=0.5)

fig, ax = plt.subplots(dpi=200, subplot_kw={'projection': '3d'})
ax.set_axis_off()
ax.elev = 25
ax.azim = 25

ax.plot_surface(ci.x, ci.y, ci.zlower, color='crimson', edgecolor='black', lw=0.2)
ax.plot_surface(ci.x, ci.y, ci.zupper, color='teal', edgecolor='black', lw=0.2)

plt.savefig('ConicalIntersection.png')

An example of what this model looks like (slightly tilted and asymmetric):

My goal
I would like to create in Blender something that resembles the top-most figure of the crossings surfaces, using the models above to build the areas closest to the intersections. In addition, I envision having about 3-4 such conical intersections in my energy landscape, where all with different topographies as obtained by using different parameters to generate the data. The transition from the conical intersection should be smooth.
My attempted solution
I have adapted the code from above to add meshes to Blender (code below). My idea was to add a plane and apply and tweak an ocean modifier to get a smooth surface with a few hills and valleys, duplicate it and place the second one above the first one and slightly shifted in either x or y. I would then add a couple of conical intersections and place them where I wanted them.
However, I am not sure how to smoothly connect the conical intersections to the two surfaces, and would love some input on how to achieve this. The code below should work as is if you paste it into the script editor and run it, if you would like to play around with these conical intersections. It would be awesome to make a plugin where you can tweak the parameters in real-time when making these conical intersections, but that is beyond my Blender API capabilities.
Part of the difficulties is to match the topography of the surfaces to the topography of the conical intersections. This will make sense if you look at my preliminary render at the bottom. Should I sculpt the surfaces myself, or rely on some automatic mesh modification? Also, if I increase the number of faces on the cones (to make them smoother), I imagine it will be more work to actually get a smooth connection.
I would greatly appreciate some tips and guidance! If anything is confusing or unclear, let me know and I will try to make it clearer.
import os
import bpy
import numpy as np
import itertools as it

NFACES = 5
SIZE = 5
TILT = 0.6
ASYM = 0.4
ANGLE = 0

class ConicalIntersection:
    """
    Class holding parameters defining the CI,
    plus the vertices and faces that for showing
    it in Blender.
    """
    def __init__(self, size=1, nfaces=5, origo=0, asym=0, tilt=0, angle=0):
        """
        Parameters
        size     : int, radius of cone
        nfaces   : int, number of faces around the cone (resolution)
        origo    : float, z-coordinate at the intersection point
        asym     : float, asymmetry parameter (\Delta)
        tilt     : float, how much tilt (\sigma)
        angle    : angle of tilt in radians (\theta_s)
        """
        self.nfaces = nfaces
        self.nverts = nfaces + 1
        self.asym = asym
        self.tilt = tilt
        self.angle = angle
        self.o = origo

        # Set up mesh
        _t = np.linspace(0, 2*np.pi, self.nverts)
        _r = np.linspace(0, size, 2)
        _r, _t = np.meshgrid(_r, _t)

        # Get coordinates in Cartesian space
        self.x = (_r * np.sin(_t))[:,-1]
        self.y = (_r * np.cos(_t))[:,-1]
        self.zlower = (self.o +_r * (self.tilt * np.cos(_t - self.angle) - np.sqrt(1 + self.asym * np.cos(2*_t))))[:,-1]
        self.zupper = (self.o + _r * (self.tilt * np.cos(_t - self.angle) + np.sqrt(1 + self.asym * np.cos(2*_t))))[:,-1]

        # Compute the vertices and faces
        self.verts_lower = [(0.0, 0.0, 0.0)] + list(zip(self.x, self.y, self.zlower))
        self.verts_upper = [(0.0, 0.0, 0.0)] + list(zip(self.x, self.y, self.zupper))
        self.faces = self.filter_faces()

    def filter_faces(self):
        """
        I generated the faces by all possible combinations of
        the vertices. But we just want to have the 'sides' of
        the cones, and not the 'lids' or any other weird face.
        The script below uses simple logic to only keep the
        combinations that are relevant.
        """
        combos = list(it.combinations(np.arange(self.nverts), 3))
        maxval = np.max(np.asarray(combos))

        result = []
        for combo in combos:
            c1, c2, c3 = combo
            if 0 not in combo:
                continue
            elif abs(c2 - c3) != 1:
                if c1 == 0 and c2 == 1 and c3 == maxval:
                    result.append(combo)
                else:
                    continue
            else:
                result.append(combo)
        return result

if __name__ == '__main__':
    # Initialize conical intersection
    ci = ConicalIntersection(size=SIZE, asym=ASYM, nfaces=NFACES)

    # Add lower and upper meshes
    for name in ['Lower', 'Upper']:
        mesh = bpy.data.meshes.new(name)
        obj = bpy.data.objects.new(name, mesh)
        bpy.context.collection.objects.link(obj)
        mesh.from_pydata(ci.verts_lower if name == 'Lower' else ci.verts_upper,
                         [],
                         ci.faces)

Quick render after I have added the conical intersections, and a couple of planes:

Progress update
After some reading and Youtubing, I managed to make a relatively smooth connection. Here is my workflow:

Add conical intersection using the script (NFACES = 10), and join the two parts together
Add a plane mesh, and subdivide a couple of times
Sculpt plane to roughly match the lower part of the conical intersection, and move the conical intersection so that it fully overlaps with the plane
Add a sculpting mask to the entire conical intersection
Add boolean modifier to plane mesh, and union join with the conical intersection
Following the ideas here, I remove the vertices that previously belonged to the conical intersection but that now is located below the plane
Clean up the resulting mesh by deleting dangling edges, recalculating normals, and merge vertices within a certain distance.
Then smooth the mesh in sculpt mode to make the transition smooth (here the mask becomes important, because I want to retain a certain "physical correctness" by not distorting the conical intersection topography from the model).

Then I did a quick render, and here is the result:

I think I could use this method to achieve what I want. I just merge with a much larger plane that contains some topographical features of its own. Then repeat with the upper surface.
However, there are some artefacts from the merging. Also, notice that the intersection point is almost black, even though the light source should put light on those areas. Perhaps some flipped faces?
Again, any feedback would be much appreciated! I really don't know what I am doing here :)
Progress update 2
I have sculpted the energy landscapes, since I have a very specific shape in mind (to resemble published research). Screenshot:

Here is my blender file:

It looks like what you want to achieve can be done using the tools available in Blender. The image below was generated from conical intersection geometry and planes. The key approach was to use the shrinkwrap modifier to blend between the two geometries.

Details for Blender 2.93.4

Add the conical intersections. To improve the quality of the final result,

Add planes for the upper surface and lower surface.

To add some waviness, add a lattice around everything. Apply the lattice modifier to the upper plane, the lower plane, and the conical intersections. Edit the lattice to get the desired effects.

At this point, the geometry can be used. However, a single mesh is preferable. So the shrinkwrap modifier will be used to generate a single mesh that blends the surface and conical intersection. Add add a new plane to the scene.

Go to edit mode. Select all vertices. Add a vertex group and call it 'connection'.

Go to weight paint mode and highlight the areas there the conical intersections will occur. This will be used to tell the shrinkwrap modifier how strongly to apply the displacement to the mesh. Where it is red, the shrinkwrap will fit directly to the surface. Where it is blue it will not fit to the geometry.
It can also help to increase the resolution on the are around the conical intersections to get a better fit. More details on using weights are in this question - How do I use Shrinkwrap Modifer with more control?

Duplicate the 'connection' vertex group and rename as 'landscape'. Select it and invert the colors using 'Weights>Invert'

Go back to object mode. Apply the shrinkwrap modifier to the plane and wrap to the conical intersection and warped planes.

Diplicate this plane and change the mappings to the upper warped plane is shrinkwrapped.

At this point, the modified can be applied to get a final mesh.

The 2.93.4 blend file is available here -

If the connectors can not easily be edited to get near the energy surface, then the following steps can be used to connect two shapes that close, but need to be smoothly connected. (Based on the process shown in this video - https://youtu.be/l1AZybSzl8w )

Add the connector and get it close to the energy surface.

Add a flap around the bottom of the surface.

In edit mode, assign weights to the connector flaps that are equal to 1 farthest from the connector and transitions to zero at the original geometry of the connector.

Add the shrinkwrap modifier to the connector and shrinkwrap to the energy surface. Select the vertex group with the weights. Now the parts of the mesh with the a weight of 1 will touch the energy surface. The parts of the mesh with a value of zero will not be affected by the shrinkwrap. The result is a smooth mesh transition between the connector and energy surface.

Cool, thanks for the tips! I assume you made these conical intersections (CIs) "manually", not using the script. CIs are sometimes very asymmetric (see the green/pink ones in my post), and they don't "touch" the planes as nicely as the ones you made. I have a very specific shape for the energy landscapes in mind, so I thought about sculpting these. Then import my CIs. Could the shrinkwrap modifier be used in this case as well? See updated question for image of the energy landscapes.

Connectors were made from rotations of a spline. There is another step that can be added around step 2 to extend the cones, the shrinkwrap the cones to the larger surface. See this video for a short explanation - https://youtu.be/l1AZybSzl8w

@Yoda, the answer was updated to include a method to smoothly blend between the two meshes. If this answers you question, please consider making the question as answered.

Thanks a lot! The main shortcoming is that you did not use the conical intersections provided by the script. To me, the shapes that come from the script make the whole process harder, since the I cannot add a planar "flap" under/over the conical intersections.

@Yoda you can use your script to replicate all of the manual process shown. After you create the base mesh, the API supports selection, extrusion, and weighting.


text:
Remove animation glitch
I have an animation with a glitch inside it, a wrong position, which I'd like to remove, but cannot find a way to do it simply and thru. This is supposed to be easy, so probably I'm missing something:

I've marked the wrong pose at frame 26, corresponding to the body to the right which sit still, while he should be backflipping.
How do I remove this pose? The immediately previous and following ones are correct.
Thank you.
EDIT: the blend.
https://drive.google.com/open?id=1A8jLuwVmanUdaWsiUq2yyVkTclzNR3l8

There is no keyframe at frame 26. Because you seem to have imported a 30 fps animation into a 24 fps project, a lot of keys are not on full frames.
The strange movement is the result of interpolation of the root bone, the hip.
The curves of the hip bone show the sudden change.

You can take any of the adjacent keys and move them onto the interpolated frame.

Yes. I've reimported at 30 fps and everything is fine now. Thank you

It looks like there are no keyframes at the frame 26. If that's right, then the issue is not a wrong pose, but actually either a lack of pose to better define what happens between the previous and next keyframes, or it's actually the other keyframes in fault, like a gimbal lock or something.
It's complicated to tell more just from this screenshot you shared, so maybe show us your animation via a Viewport Render (or OpenGL Render in Blender v2.79 and prior), and/or give us the .blend file so we can dig in.

I added the blend. Thx


text:
How to get rid of materials showing in the viewport when in solid mode
I modeled a mesh and gave it materials. But material colors get in the way; I'd like to go on modeling and just seeing a well-contrasted, solid-light object.

I find this setup uncomfortable and I'd like it to be just solid color, for instance:

I know this is the normal, default Blender behaviour; my question is not "Why my materials doesn't show in viewport", but:
Is there a way to get rid of materials showing in viewport when in solid mode, without removing them?
EDIT: I can use matcaps, I'm using BI. Same problem with Cycles. Apparently shading is ok. I'm trying to post the blend...
blend file
EDIT2: Cycles shows the same behavior. This has been tested with an untamed Blender 2.79a just downloaded.

You can use a matcap?

What render engine are you using?

There isn't this problem in Cycles. Cycles shows default grey color in Solid shading unless you epxlicitly set viewport material options to use another color.

Actually I found that:
in edit mode, if I set show hidden wireframe, I get this:

In both object and edit mode, only matcaps work (by substituting materials, so little help).
So, afaik, unless there's some way to temporarily switch off materials, apparently there's no way.

I'm having a bit of difficulty recreating your problem, but it's possible you have a type of viewport shading activated. Check the menu to the right inside your viewport (press 'n' if you don't see it) and look under the 'Shading' option. It should be located just beneath 'Display'. See if you have something like 'Textured Solids' checked. If you don't, an alternate way to address this problem is to apply a matcap, which you will find in shading, as well. Simply click on the picture after you tick the matcap box, and select the material you want.


text:
Attach geometry to other geometry without duplicating it
I have this mesh:

I'd like to copy the highlighted vertex group to the other end of the mesh, here:

I've duplicated (shift-D) the selected vertices and moved them to the other side by grabbing, until I got what I wanted:

Anyway, the resulting object is made by 2 different objects which can be separated with separate by loose parts.
How can I attach the object to the final point so that they're only a single object and cannot be separated (one single geometry)?
Thank you
EDIT: the underling vertex geometry to both top and bottom is the same

An array with a count of 1 but with start cap and/or end cap?

Honestly I'm looking for an edit mode solution... something which welds geometry...

I found solution here: Snapping a vertex group to another.
Think this can be considered a duplicate...

You hit on the first one which is using separate.
Once you move the separated object into place (you can control this with extreme accuracy if you are using snapping methods for vertices / edges in this particular case), you can use JOIN.
To use the command:

Select the pyramid textured cross.
While holding SHIFT select the extruded cross shape.
Finally CTRL + J will perform the join operation.

To clean up the operation:

TAB To enter into Edit Mode.
A To Select all Vertices.
a. NOTE: CTRL + TAB >> V if your selection mode is NOT set to Vertex.
W >> R to remove redundant vertices.


text:
How to efficiently add approximately 30000 correctly oriented cylinders into blender via Python
I am working on an illustration for my PhD thesis that will show all interactions commonly included in the molecular quantum Hamiltonian operator.
My idea is as follows:

Add all nuclei as ico spheres
Add electrons around the nuclei as tiny spheres
Add all nuclei-nuclei (NN) interactions as cylinders
Add all electron-electron (ee) interactions as cylinders
Add all nuclei-electron (Ne) interactions as cylinders

I separate steps 3-5 so that I easily can keep track of the nature of the interactions and color them differently.
The molecule I want to show is a 54-atom transition metal complex, with 234 electrons.
The number of unique pair interactions $N$ for a set of $n$ particles is
$$
N = \frac{n(n-1)}{2}
$$
This amounts to 1431 unique NN interactions and 27261 ee interactions, and the number Ne interactions which I have not calculated.
The first couple of thousand cylinders are relatively efficient, then it becomes much slower. At around 10000 the script adds about 1 cylinder per second, and so I stopped it there. However, I would like to include all the interactions.
Is there a way to achieve this in an efficient way? Could I use an array modifier, and still be able to orient the cylinders correctly? If it is not feasible, then I can always choose a smaller molecule.
Here is the script I use:
import bpy
import numpy as np
import math
from itertools import combinations

settings = {
        'H': 1,
        'C': 6,
        'N': 7,
        'O': 8,
        'Ni': 28
    }

def fiboSphere(n=100, origo=(0, 0, 0), r=1):
    goldenRatio = (1 + 5**0.5)/2

    grid = np.arange(0, n)
    theta = np.pi * grid / goldenRatio
    phi = np.arccos(1 - 2 * (grid) / n)

    x = r * np.cos(theta) * np.sin(phi) + origo[0]
    y = r * np.sin(theta) * np.sin(phi) + origo[1]
    z = r * np.cos(phi) + origo[2]

    return zip(x, y, z)

def readCoords(f):
    with open(f) as file:
        lines = file.readlines()
        labels = [line.split()[0] for line in lines[2:]]
        coords = np.asarray([list(map(float, line.split()[1:])) for line in lines[2:]])

        masses = [settings[lab] for lab in labels]

    return labels, coords - np.average(coords, axis=0, weights=masses)

def addSphere(x, y, z, r=1):
    bpy.ops.mesh.primitive_uv_sphere_add(radius=r, location=(x, y, z))
    #bpy.ops.outliner.item_rename('Nuclei')

def addIcoSphere(x, y, z, r=1):
    bpy.ops.mesh.primitive_ico_sphere_add(subdivisions=1, radius=r, location=(x, y, z))

def cylinder_between(x1, y1, z1, x2, y2, z2, r):
    dx = x2 - x1
    dy = y2 - y1
    dz = z2 - z1
    dist = math.sqrt(dx**2 + dy**2 + dz**2)

    ob = bpy.ops.mesh.primitive_cylinder_add(
        radius = r,
        depth = dist,
        location = (dx/2 + x1, dy/2 + y1, dz/2 + z1)
      )

    phi = math.atan2(dy, dx)
    theta = math.acos(dz/dist)

    bpy.context.object.rotation_euler[1] = theta
    bpy.context.object.rotation_euler[2] = phi

if __name__ == '__main__':
    SPHERES = 0
    LINE_NUCS = 0
    LINE_ELECS = 1

    molecule = 'Ni-NHC2.xyz'

    r_elec = 0.05
    r_nuc = r_elec * 3
    r_atom = r_nuc * 3
    r_cyl = 0.0001

    atoms, coords = readCoords(molecule)

    if SPHERES == 1:
        for a, c in zip(atoms, coords):
            if a == 'Ni':
                addIcoSphere(*c, r=r_nuc * np.sqrt(settings[a]/4))
            else:
                addIcoSphere(*c, r=r_nuc * np.sqrt(settings[a]/2))

            for elec in fiboSphere(n=settings[a], origo=c, r=r_atom):
                addSphere(*elec, r=r_elec)

    if LINE_NUCS == 1:
        natoms = len(coords)
        combos = list(combinations(np.arange(natoms), 2))
        for i, combo in enumerate(combos):
            print(i, len(combos))
            i, j = combo
            xA, yA, zA = coords[i]
            xB, yB, zB = coords[j]

            cylinder_between(xA, yA, zA, xB, yB, zB, r_cyl)

    if LINE_ELECS == 1:
        nelecs = 0
        for a in atoms:
            nelecs += settings[a]

        combos = list(combinations(np.arange(nelecs), 2))
        all_elecs = []
        for a, c in zip(atoms, coords):
            for elec in fiboSphere(n=settings[a], origo=c, r=r_atom):
                all_elecs.append(elec)

        curr = 3000
        for i, combo in enumerate(combos[curr:curr+500]):
            print(i+curr, len(combos))
            i, j = combo
            xA, yA, zA = all_elecs[i]
            xB, yB, zB = all_elecs[j]
            cylinder_between(xA, yA, zA, xB, yB, zB, r_cyl)

and here are the coordinates for the molecule:
54

Ni         0.53508        2.94170       -1.19095
C          0.89172        2.78025        0.55921
C          0.13343        1.34854       -1.93501
C         -0.80330        4.11901       -1.38999
O         -0.19137        0.31584       -2.35779
O          1.09923        2.70358        1.70102
O         -1.66995        4.88913       -1.48201
H          0.51175        2.95147       -6.22064
C          1.10271        3.13388       -5.30374
H          0.84068        0.57894       -6.28354
H          1.83440        3.94105       -5.51296
H          0.41920        3.51974       -4.51700
H          0.02746        7.62618       -2.63086
H          1.69364        7.30829       -3.21356
C          0.88136        6.92729       -2.55858
C          1.51452        0.62494       -5.41305
H          1.50838       -1.80537       -6.60596
H          0.56578        5.95106       -2.97683
C          1.77035        1.87351       -4.82202
C          1.73376       -1.89724       -5.52533
H          0.13563        8.40984       -0.37790
C          2.07482       -0.56412       -4.90989
C          1.34936        6.78856       -1.13348
H          0.83330       -2.32912       -5.03778
C          2.62737        1.90396       -3.70207
C          0.87912        7.63910       -0.11886
H          2.55568       -2.62944       -5.40126
C          3.95328        4.00413       -3.41477
N          2.89355        3.16567       -3.07152
H          4.66590        3.74492       -4.20292
C          2.12853        3.69055       -2.05863
C          3.86116        5.09719       -2.59552
N          2.74966        4.88583       -1.78318
H          4.47675        5.99767       -2.51503
C          2.28833        5.79755       -0.77436
C          2.91681       -0.48577       -3.78475
H          0.54777        9.43656        1.90824
C          3.20418        0.73782       -3.15710
C          1.32300        7.52594        1.21247
C          0.75840        8.41761        2.28950
H         -0.20145        8.01023        2.67381
H          3.35077       -1.40920       -3.36894
C          2.78466        5.66588        0.53957
C          2.28179        6.54227        1.51721
C          4.03233        0.81322       -1.90217
H          3.39997        1.15882       -1.05618
H          1.44677        8.50453        3.15264
H          4.86553        1.53987       -1.99398
C          3.82449        4.62798        0.87242
H          4.80908        4.88876        0.42895
H          4.45676       -0.17386       -1.63994
H          3.54684        3.63357        0.47078
H          2.64748        6.44572        2.55195
H          3.95682        4.53377        1.96626

And a rendered image of some of the NN interactions:

Update
I was able to use bmesh to add the cylinders, and to align them correctly, in this way:
(with credit to this answer for the original idea)
def cylinder_between(x1, y1, z1, x2, y2, z2, r, id=''):
    dx = x2 - x1
    dy = y2 - y1
    dz = z2 - z1
    dist = math.sqrt(dx**2 + dy**2 + dz**2)
    loc = np.asarray((x1 + dx/2, y1 + dy/2, z1 + dz/2))

    name = f'Cylinder_{id}'
    mesh = bpy.data.meshes.new(name)
    obj = bpy.data.objects.new(name, mesh)
    bpy.context.collection.objects.link(obj)

    bm = bmesh.new()
    cone = bmesh.ops.create_cone(bm,
                                 cap_ends=True,
                                 cap_tris=False,
                                 segments=3,
                                 diameter1=r_cyl,
                                 diameter2=r_cyl,
                                 depth=dist)

    obj.location.x = loc[0]
    obj.location.y = loc[1]
    obj.location.z = loc[2]

    phi = math.atan2(dy, dx)
    theta = math.acos(dz/dist)

    obj.rotation_euler[1] = theta
    obj.rotation_euler[2] = phi

    bm.to_mesh(mesh)
    bm.free()

There's probably more you'll have to optimize than this, but one thing I think you'll want to avoid are bpy.ops.mesh calls. I believe operators induce a scene update, which walks over all scene objects, and as a result doing so N times induces N^2 run-time problems

Atomic blender is able to add tens of thousands of atoms in a few seconds, with bonds and everything. So it should be doable, I feel. I just don't know enough about the workflow and the API to know where to start. Perhaps my bonds don't need to be cylinders, but curves with a thickness..

before I dive into this, I have to ask, doesn't your department have molecule visualization software that can do this sort of thing?  Purpose built tools are usually more efficient.

I am sure I could do this with PyMOL, but the shading is a bit limited. Besides, high impact graphics in our field require Blender knowledge, so why not dive in and try to learn :)

Cool.  Your problem is probably what @NeverConvex suggested, so the trick is to use bmesh to create the meshes so that screen updates don't get called as often.  Can you live with everything in one object, if individual meshes have their own materials?

Yes, as long as I can color the different atoms differently, and color the different interactions differently, then I am happy. Thanks for looking at this! I am able to generate the cylinders with bmesh (and it seems to be much faster, but I am not able to orient them correctly...

you need to use bmesh transform operations for that this page has examples.  if you can't figure it out, post your bmesh code, it's what I was about to create and why duplicate?

Q updated. It took 600 seconds to load all the objects. Do you have additional suggestions?

Before trying to further optimize, you might consider profiling your code to identify where it is spending most of its time. In my experience, Blender's Python API is very compatible with the usual Python CProfiler; I have an example of doing so in this question, if you'd like to try: https://blender.stackexchange.com/q/229469/73773

Similar question: https://blender.stackexchange.com/questions/233755/blender-taking-too-long-to-create-an-object-with-python-code


text:
How to get a blurry sphere boundary, to imitate a delocalized electron cloud?
I have a molecule which consists of atoms, electrons, and very thin lines connecting all possible particle combinations. I would like to make the electrons appear blurry, to illustrate the idea of delocalized particles (wave-particle duality, essentially).
I am using Eevee due to the sheer number of objects in my scene. I am not able to find a solution that works with eevee. How can I make a uv-sphere appear as a blurred?

Desired effect
Something like this

Volumetric material? Animate sphere as vibrating and use motion blur? Plane with spherical gradient faced to camera?

Can you link to resources or examples?

updated question. I guess a halo effect will suffice for my needs.

In Cycles, you'll need to do post processing. In Eevee, just enable bloom and give your object a bright emission material.

So you are looking for glowing spheres exactly as your reference or black sphere with white glow rim or black sphere fade on edges?

Emission with bloom achieves the effect to some extent, but the global setting also affects other objects where I would like less bloom. Also, the overall contrast is greatly reduced due the the bloom bleeding out. So a material solution would be the way to go for me, I think.

version Bloom
With simple Emission shader you can achieve that.
To eliminate blooming any other object in your scene

set high shader Emission like 100
and under Render Properties > Bloom set high Threshold  (here 10)

... so for other lights it would be hard or even impossible to reach bloom effect.

Play with other parameters to fine desired result ...

Since Eevee does not support mesh lights, those object doesn't light your scene so other objects stay untouched (until you use Irradiance Volume object).
You can't use bloom effect to color each "object" individually, since bloom color is set as general parametr per scene. You would have to separate objects in compositor or composite several scenes together ... that is not definitely efficient way.
version Plane
In some cases you can cheat with old school method - Plane with gradient texture pointed to Camera.

add Plane with Gradient texture as Factor for mixing Emission and Transparency node (don't forget to switch under Material properties > Setting > Blend Mode > Alpha Blend).

add Constraint > Damped Track > Target - Camera ... like that Plane is pointing face-normal directly to camera. So even Plane or Camera is moving plane stay orientated to camera ... it results in illusion you are watching sphere object.

As a tip ... if you close node tree into a NodeGroup you can easily share this setup in other materials and just change a color. Any other changes in setup inside the node group will stay synced in all materials.
Example in motion ...

It can be problematic with strings ... it really depend from case to case ... probably you can use also Gradient, but Linear to "fade" ends of strings like they are disappearing into blurred "sphere".

Can the bloom color be different for different objects?

Check edit ... I also wanted to share blend file, but I used experimental 3.1 that is not recognised by this site as blend file :) and also try to Append objects into official build is impossible ... so I hope description is clear for you.

This simple setup should get you part of the way there.

You can use Color Ramps or Math -> Multiply (or lots of other) nodes to adjust the strength of these attributes.

So here you have a simple uv-sphere placed inside a cube, and the cube gets the volume material? I tried this, with exactly the same node setup, but I cannot reproduce the blur...

It works with cycles, but not eevee.

You're right, sorry.

@AlienSimpson ... why sorry in Eevee it works the same https://imgur.com/PaNF18N

...I forgot that volumetrics aren't trash in Eevee anymore :D
I do not work in Eevee that much (only one major project so far!) so I really have no idea :)

@vklidu your answer is great, though

@Yoda ... There is not a Sphere just a Cube with Volumetric material ... what makes a blur spherical thing is Gradient 3D Texture > Spherical


text:
How can I prevent colliding Cloth Objects from wrinkling each other?
I am trying to create a model of paper being blown by wind using a model with a Cloth Modifier and a Force Field of wind.
However, when I play them in animation, the Cloth objects that collide with each other end up crumpled, curled and became like a ball.
What should I change?
I'll share some screenshots of my current setup:

Update 1(something is still wrong)
-Added Self Collisions.(Distance 0.015)
-Added Solidify Modifier.(Thickness 0.01m)

you have self collisions turned off. so do you mean they collider with each other or with themselves? I think you should avoid 2d simulations by adding depth (e.g. solidify modifier) might resolve it.

It wasn't my purpose making them collider with each other nor themselves. It's just by my lack of knowledge. Thanks for telling me that.
I've try added solidify modifier to them after your advice. But in the simulation, they now became different shape, like crushed ice cube on it's edge. Is there any rule and relation between the Thickness of Cloth Objects and the Distance of Object Collision? (I added screen shot of my settings.)

For example, one of the numbers should be set larger than the other, or they should be the same, etc.?

uses softbody physic but might be helpful: https://youtu.be/F8j1K-_OlH4 and https://youtu.be/U1f6NDCttUY (texturing)

I've tried Softbody physic before, and the result looked too soft. (Hope I can do better one day...)
I'd like to try with Cloth this time. The YouTube Channel you recommended is fun and motivating. I'll check out the others as well. Thank you very much.

adding your blend file would help a lot because then we can try it out ourselves instead of guessing what might be the reason...


text:
How can I subdivide a plane with a complex contour?
I'm probably asking a very strange question, but...
I've drawn a random outline with Bezier curves and meshed it to create a plane object. How can I subdivide this into smaller pieces? Is there a way to subdivide it into a grid, like you would subdivide a simple square plane? (Like the pink line in the reference image).

Update 1 (It's solved!)

I followed Moonboots's advice.

First thing you can simplify your topology with a X > Limited Dissolve and tweak the angle parameter in the Operator box. As for your question, you can use the Knife Project tool. The process has changed a bit since the latest versions:
Create a grid (subdivided plane), delete the faces to keep the edges only (X > Only Faces), put it above your object:

Select your plane, switch to Edit mode, Ctrl left click on the grid, choose the top view, go into the Mesh panel > Knife Project:

Here is what it gives:

I did exactly what you told me to do. It worked like a magic! Thank you very much! those pictures made it so much easier to understand.


text:
How to change a flat section of a mesh into a smooth curved one
I have this mesh:

It's crossed shape; what I want is to turn the inner flat sections into smooth curved ones (white marks showing what I mean).
How can I do this?

Delete all the edges except the one on the corner. Select it, bevel it with a smooth profile and multiple segments.

Both solutions are correct but in my case the first one is better

From a similar model you already have, you can use "smooth vertex":


text:
How to find python source code for an operator preset
I'm new to python and Blender and sometimes I find strange things. My problem is I'm trying to understand an operator behavior but something's missing.
I'm in this situation:

I select a mesh outside edges then I call a grid fill operator. Then the operator runs and I'm presented with the filled mesh and the parameter window where I can change values.

I'd like to know how that value, precisely "12", is set. From tests I did, it looks like it's something related to the number of selected edges, and changes every time geometry is changed. To correctly use the operator, I need to know how it's set, hence my question: how can I find that operator preset source code?
Mind, I'm not asking about this:

I already know that. I'm asking where is the source code which sets the "12" value. Thank you.

At a first glance, I guess the value is calculated on the fly. based on the selection, there is no preset (in this case). You can find the UI code for MESH_OT_fill_grid operator in source/blender/editors/mesh and the function bm_grid_fill in source/blender/bmesh/operators/bmo_fill_grid.c. That's exposed to the python api as ...mesh.fill_grid() with a span default value of  1 as you can see in the console or here: https://docs.blender.org/api/blender_python_api_current/bpy.ops.mesh.html?highlight=fill_grid#bpy.ops.mesh.fill_grid

Thank you, your suggestion is correct. I've checked briefly but still no luck. I'll be checking it better next time or I'll debug it...

Still not sure where your "confusion" comes from. Most (interactive) operators written in C for speed reasons. However, by design we can call all operators, no matter if the operator is written in python or c, the same way bpy.ops.CATEGORY.NAME, what's actually pretty nice. Why you are out of "luck"? Blenders API is well designed compared to others IMHO.

I was referring to that preset value of "12". In the C code (mind, I'm not completely sure) I didn't found where it is calculated... most probably based on selection, that what I want to find, so I could understand how the choice is made for different kinds of objects... just this... for all the rest, your hints are right.. I think you can post the solution

following advice by brockmann, here is the code (from editmesh_tools.c in source/blender/editors/mesh)
const int clamp = em->bm->totvertsel;
int span;
int offset;

if (RNA_property_is_set(op->ptr, prop_span)) {
    span = RNA_property_int_get(op->ptr, prop_span);
    span = min_ii(span, (clamp / 2) - 1);
    calc_span = false;
}
else {
    span = clamp / 4;
    calc_span = true;
}

so it appears span is the number total vertex divided by 4. The value is then modified by another utility which extract two loops from a single one dividing geometry by angle.
Everything is done for you if you call bpy.ops.mesh.fill_grid() from a script.


text:
How to rigging the mesh with Vertex Groups
I generated rigs by using Rigify for my animal models. My model is consisted by four different meshes. One is an animal shaped mesh with hair particles added, and this mesh is settle inside of the other animal shaped mesh without hair. There are also separated meshes of ears, which also has hair, and a nose.
When I try to move the model in pose mode, only the mesh without hair, ears and the nose are all move along the bones. But the mesh with hair is left behind, and it looks just like astral projection.
What is the solution to make the two meshes move in tandem?
One thing that made the object with hair particles different from the others is that there is a Vertex Group set up for the hair.
So I've changed the armature setting "Bind To" from "Vertex Groups" to "Bone Envelopes" in the modifier preferences for the four objects that make up the animal model. Now all the objects are aligned and moving with the movement of the bones once. But in this way, movement of the model is very very stiff. Even the tail doesn't come straight up.
Is there any way I made it works well?
I am using Blender version 2.93.1. I have read past posts and tried to do the same thing, but either the versions are different or I couldn't figure out how to do the settings described here: Some meshes follow the armature and some don't -the-armature-and-some-dont
It would be helpful if you could tell me. Thanks in advance.

When actually setting the weights (Ctrl+P > With Automatic Weights), I overlooked the following warning:

Bone Heat Weighting: Failed to find solution for one or more bones.

So I "Disconnect Hair" in the particle settings for the mesh with the hairs not following the bones, then switched to Edit Mode and did a thorough clean up of this mesh.
Specifically, I subtly simplified the mesh with Mesh > Clean Up to automatically sort out any independent or duplicate vertices. After that, I triangulated all the faces with Face > Triangulate Faces.
After this, I set up Automatic Weights again and everything worked fine!
The cause was not because the hair particles were there nor the Mirror Modifier were not applied to the mesh, but simply that this mesh contained a jumbled mess that needed to be tidied up.


text:
How can I give wind and turbulence effects only to the inside of the cube object?
There is the cube-A, which is covered with a cloth, and another cube-B is placed on the top of it.
I want the paper object to fly by wind and turbulence only inside cube-B without any effect on the cloth outside cube-B.
How can I limit the area of effect of the wind and turbulence?

you can turn off wind for cloth simulation here:

result:
left: Wind:1
right: Wind:0

so what you could do is insert a driver into the wind property and set it to 1, if it is inside, else 0.
To get the "real" coordinate which is set by the cloth physics, we need a trick: we insert a helper object (sphere) which gets this object constraint:

By this, we can access the "real live" coordinate of our cloth and set the driver like this:

of course you have to adapt the if statement to your needs...!
result:

I've always seen the Field weights settings on screen, but I totally forgot about it when I actually need it! I will be able to apply this in the future when I need other settings too. Thank you again for your help.

You are welcome


text:
The problem of simple cloth objects penetrating each other
There are multiple cloth objects which are raised by two different force fields. Both cloth objects are physics-based, and the object collision of those cloth is 0.02m.
I have a problem with them penetrating each other. Where is the cause of this failure? (I'm trying to make paper with these model.)

Update 1 (failed)
-Changed Quality Steps from 5 to 80.
-Changed Distance of Object Collisions from 0.02m to 0.03m.

Update 2(gets better)
-Added Collision to all cloth objects. Changed the order of layer in Modifier Properties.
-Changed Distance of Object Collisions from 0.03m to 0.05m.

can u provide blend file?

increasing the quality steps can often solve it

thanks for your advice. I increased Quality Steps extremely to 80, but the cloth objects are still penetrating :(

Collision should be enabled as well:

I see, you have enabled object collision, but where is no object with collision in the scene

Thanks for your advice. I've added Collision to all my cloth objects. Seems it stars working after I changed the order of the Collision layer in Modifier Properties. (pls refer the added screen-shot.)
Movement isn't perfect still, but, it seems the clothe objects are trying to avoid each other as you can see in the new screen shot that I've added.

Then you set up like this, it is to difficult for blender to calculate intersections, because distance between points to big. Why don't you set subdivision at the beginning?

I once read an article where someone wrote that if you don't set the Subdivision after the Cloth , the Cloth will move strangely. But when I imagine how the calculation itself will be done, it seems you are right. I will set the subdivision first. Thanks a lot for your help :)

My problem has suddenly been solved. Sorry for asking a similar question twice, but if there are any Blender beginners who faced the same problem here's my solution.