text:
Imported obj distort when selection to cursor
I am currently working on terrain modeling, and i am importing a rhino file as obj to blender. I do the importing, set origin to geometry and then when trying to selection to cursor, the contour lines become distorted and twisted. Why is this happening?

It seems you import multiple objects as curves. Each of them has a separate origin point and Snap Selection to Cursor snaps each object's origin point to the 3D Cursor individually. If you want to keep object locations relative to each other, you should chose Selection to Cursor(Keep Offset):

This will use your Transform Pivot Point setting to snap the group of object to the 3D Cursor and will keep the location of each object relative to other selected objects.

Thank you for the help, it worked!

If an answer is useful on Blender Stack Exchange, consider up-voting or accepting it as the answer.


text:
Moving Pivit Point
im new to blender but learning quite quick...
I have a model of a car, im trying to display it in a html page as a .glb (that part is sorted)
I ultimately want to display the model and click to open doors, bonnet, boot while being able to zoom in /out and rotate.
The problem im having atm is, when im in Object Mode, everything is fine, press R and X and the boot opens as i want. When i go into Edit Mode and press R and X it open from the middle point if item. I have tried Shift S, move curser to where it should be but always goes back to middle point in edit mode.
Next Step...
Data icon add new Basic and Key1 so i can flick between movements. What do i do next, after that just save or is there more to it?
Thanks Phill.

After using Shift S to move your 3D cursor also press the DOT key to switch to 3D Cursor Pivot Point.
"Next Step" - ask one question per post on Stack Exchange, otherwise "it needs more focus".

At top is an icon Transform Pivot Point, I needed to change from Median Point to 3D Cursor, all fine now.

source: Stack Exchange

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

sort: votes


text:
Blender file not opening
I encountered an issue with a Blender project I was working on, where attempting to open it resulted in a gray screen with the Blender logo in the top left corner, followed by an eventual crash. I suspect the file's size may be the problem, as my PC struggled with its laggy performance during editing. I'm quite concerned that I may not be able to access the project again.
What are some possible solutions?

open a new blender. Then go to File > Append and from there, you could extract the meshes, shaders, collections and so

Omg it actually helped me TYSM!!

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


text:
Bezier curve bevel is not round
I am totally new to blender so sorry if asking something obvious but I am trying to model a tennis ball but not the easy way apparently... Meaning that I want to preserve the original shape of cover.
See some math papers if interested
But when I try to duplicate the seam, then convert to curve, then bevel the curve (selected) I do not get circular shape but elliptical and cannot find the culprit.
The selected curve is (2D) part of the whole curve (3D) because I wanted to test it on 2D curve.
My goal was to then subtract the beveled curve from ball to create that white rubber seam on tennis ball. So if you have a better approach or any other tips I would appreciate that.

Select the curve, press Ctrl+A > Apply > Scale.

Wow, it worked! Thanks!


text:
Normal map vector
Recently while working with normal maps i discovered something interesting:
Normal map that I baked using Blender cycles:

Length of the normal vectors contained in the normal map:

Length of the normal vectors contained in the normal map divided by 2:

As it happens, the normal vectors in normal maps are not normalized but instead have a specific length depending on which direction it is facing.
I do have vague knowledge of how normal maps roughly work, e.g. RGB represent XYZ coordinates with 0.5;0.5;1 being neutral, but  apart from that I don't know anything about the actual calculations of when the normal map is created and used.
Can somebody please explain how tangent space normals are calculated?
Why are the resulting normal vectors not normalized?

What exactly is shown in the second two pictures?

Btw, source code for normal mapping (easy to read).

Edit: The answer turns out to be a combination of 3 and 5 below.  (5 was added in this edit.)  As made plain by excellent conversation with @scurest, Blender does not orthonormalize its tangent space, and we shouldn't expect unit vectors out of its normal map bakes.  They are often very close to unit vectors; it depends on the rate of change of the normal across the face.  Blender's treatment of this is not by-the-book, and creates problems for which I've submitted a bug report, but it is not unique either (I tested on xnormal, and it doesn't use orthonormal tangent space either; I've posted some questions regarding how other software handles it, but have no replies as of yet, and it's esoteric enough that basic internet research isn't any use.)
Let's try it out.  We'll bake a simple normal map, from a cube to an enclosing UV sphere, and see what our normals look like:

To a reasonable precision, it looks good.  None of my normals are shorter than 0.99 and none of them are longer than 1.01.  We shouldn't expect much more precision from 8 bit-per-channel color than that.
This image was generated with a single sample bake, but repeating the bake with 64 samples shows no difference.
So what am I doing different from you?  I can't say, because I don't have access to all of the details of your bake or your analysis material.  Here are some potential differences:

You weren't doing a selected to active bake, but instead baking from normals on a single object, which themselves weren't normalized.

You weren't baking and reading your normal map as non-color data.

You weren't remapping your normal map from the 0,1 range (which is necessary for almost all image formats) to the -1,1 range (which is the space necessary to represent the full range of normalized vectors.)

You were using texture filtering, by using "Linear" instead of "Closest" in your image texture node, which means that the actual color you were reading from the normal map wasn't a single texel, but was instead a box-blurred combination of several texels.

You're using different meshes, and something about the meshes I chose happens to minimize the issue.

You can't in general expect the RGB values to be a unit length vector (after remapping) though, that only happens if the (N, T, B) vectors are orthonormal. That should be true at the corners of a tri, but in the middle when interpolating it isn't guaranteed anymore. That's also why the normal mapping node normalizes its output.

@scurest Normal mapping techniques I've seen set the tangent to be at right angles to the normal, and then generate the binormal from the cross-product, guaranteeing orthonormality.  Blender doesn't do that?

It does, but It it only computes them at poly corners. On the poly interior, the normal and tangent are linearly interpolated from the corners, just like UVs, vertex colors, etc. and there's no guarantee they will be orthonormal just because they were at the corners. (B is computed at each point from the cross product of the interpolated N and T.)

@scurest So, normalized interpolated normal, normalized interpolated per-face tangent, normalized interpolated per-face binormal?  Doesn't seem smart to me, but I think it may explain some issues with normal maps that I've seen (and so maybe allow me to make some bug reports.)  Do you happen to know that this is true for both bake and rendering?  I believe there are differences between the two, as seen most easily by giving Suzanne a 0.5,0.5,1 normal map and then baking normals, giving differences apparent both in the baked image and in the render.

The interpolated N and T aren't normalized (so B isn't either), AFAICT. There's no reason to since it normalizes after linearly combining them. Why is that not smart, how else would you do it? I don't know how the baking works. My whole understanding is based off the source code I linked above.

@scurest You don't have to normalize early, just eventually.  But unit length is of little help if you don't have valid (orthogonal) basis vectors.  I'd do this from sample normal, b = normalize(cross(n, t)); t = cross(n, b).  Or whatever order for the cross, I always screw that up.  There's just so little you can do with invalid (not orthogonal) basis vecs-- you have vecs that are potentially impossible to represent in float range, and most of your library is built around the assumption of orthogonal basis vecs.

I don't see why that's better. Using the interpolated non-orthogonal vectors is cheaper at run time at the cost of being more expensive at bake time (finding coordinates in non-orthogonal basis is solving a linear system), which is the tradeoff you generally want to be making. What do you mean "vecs that are potentially impossible to represent in float range"?

Let us continue this discussion in chat.

Sorry to interrupt your discussion but I do have a few questions: Firstly you said, that I need to remap the color channels of the normal map from a 0,1 range to a -1,1. I assume that I need to do that for the R and G channels (X and Y as coordinates). Now have read that there are two kinds of normal maps: The first kind of normal map uses a 0,1 range in the B channel to represent the Z coordinate (which I think is what Blender uses), while the other kind uses a 0,0.5 range in the B channel to represent the Z coordinate (which is stated in Wikipedia).

Secondly you said that remapping the normal map is necessary for most image formats. Are there image formats where Blender it isn't necessary? Aren't all normal maps created equally no matter the image format?

Lastly after I have remapped the RGB channels to their correct range is that it? Are those then the vectors, which when converted from tangent space to global space are my shading normals?

Blender remaps even Blue channel from 0,1 to -1,1.  I've never heard of mapping B from 0,1 to 0,1, and WP offers in https://en.wikipedia.org/wiki/Normal_mapping : "Z:  0 to -1 :  Blue:  128 to 255" so I'm not sure what you're reading (although WP isn't great source, I myself have corrected a lot of bad info on that exact page, it gets drowned with beginning modders.)  Some image formats (.exr, certain .png formats) can represent negative numbers, and it would be possible to set things up to use those straight, but it's never done; it's always remapped.

"Are those then the vectors, which when converted from tangent space to global space are my shading normals?"  They are usually normalized afterwards (because you do want filtering, and because 8 bit color doesn't have precision to guarantee normality like floats do.)  But the idea is, yes, those remapped colors are your exact, tangent-space, rendering normals.  (Engines agreeing on exactly how to figure out what tangent space is for a particular sample is another matter.)

I am moving to the discussion chat cause Stackexchange tells me to do so...

Let us continue this discussion in chat.

Note that there is room for individual developers to iterate on this.  B 0,1 -> 0,1 is not unreasonable, I've just never heard of it done.  I have read about some developers modifying their normal maps to take advantage of the characteristics of filtering with different miplevels to create effects that they liked, so their normal colors were not intended to represent their literal tangent space normals-- filtering expectations were built into their images.

@scurest I tested, then made a bug report at https://developer.blender.org/T98175 .  I realized orthogonality is important for the same reason: constant shear is not a problem, but shear that varies with deformation is (and deformation is why we use tangent space.)  Thank you very much for your conversation; without it, I probably would never have developed my thoughts beyond "I've got a bad feeling about this Chewie."

Ok so to put everything straight: If I want to create a normal map using unit normal vectors that are already in tangent space I just remap from -1,1 to 0,1 and when I want to get the normal vectors in tangent space from a normal map I just remap from 0,1 to -1,1?

Yup, that's right.  Although be aware that "tangent space" is something different in different applications; the bug report I mentioned in my comment to scurest might make it more clear how different applications can calculate tangent space differently.  Blender's tangent space does not necessarily have unit length (or uniformly scaled) basis vectors, so if you normalize(1,0,1) you're not usually going to end up with a 45 degree angle from the normal.


text:
Is there a W axis in UV space?
Lately I found out that apparently there is a W axis in UV-space, which acts just like the Z axis in e.g. global space. Is that true? And if it is the case are there any applications of the W axis when it comes to uses of the UV-space?
Apart from that why is the UV space called UV space then called UV space and not UVW-space?
Blender also uses the X and Y hotkeys as axis locking instead of U and V so shouldn't it really be called XY-space?

I don't think W axis exists. Didn't you confused by the quaternions? https://docs.blender.org/manual/en/latest/advanced/appendices/rotations.html?highlight=quaternion#quaternion-mode

No I am not talking about quaternions.

W is also used in the Noise Texture for example, if you choose the 4D mode, but it's not an axis per se, it's just used to change the noise shape through time

'W' doesn't mean anything in a universal sense; it's just "Not X, Y, Z, U, or V."
When we're dealing with XYZ coords, like position, there's also a hidden fourth coordinate that is used, which is referred to as 'W'; this coordinate is useful for the transformations needed to put a vertex into perspective space, and especially for getting perspective-correct interpolation of vertex data.  The object-space value of this coordinate is 1 for all vertices.  There's no reason to expose this coordinate to users, because there is nothing they'd want to do with it.
As with W, XYZ doesn't mean anything in particular.  They're symbols, and their meaning is context dependent.  We regularly use X to mean position along the width axis in object space, or world space, or time in the graph editor, or U in the UV editor.
UV is usually used to refer to a position along the horizontal and vertical axes of an image.  These might be more easily considered X or Y positions.  Why do we call it UV and not XY?  Because we were already using X and Y to designate other information.  U and V, like W, just mean, "Not X Y Z or W."  (Because W, in the use described above, actually predated UV.  We picked 'W' because it was the last letter not already in use, and then we picked 'UV' because they were the next two letters not already in use.)
You can have 2D texture coords or 3D texture coords or 15D texture coords if you want, but Blender supports only 2D texture coords. It is not necessary to have a 3rd coordinate to support typical use; in almost all actual shaders, if you read the code, UV will be a 2D value.  Internally, your graphics card will need to do some careful manipulations of these values, including the W component calculated from the transformations of vertices, but there is no special W component for the UV.
When we rotate UV in the UV editor, we're doing an operation where it's not really clear what to call the third orthogonal axis.  We can call that W if we want, we can call it Z, it doesn't matter unless we have to describe it to someone and there are conflicting uses of those letters in the conversation, at which point we should probably make up a new name for it.  Saying that we are rotating it in 'W' would probably be even more confusing than saying we were rotating it in 'Z'; neither is literally true, the only thing that is literally true is that we're rotating it in an axis orthogonal to the two we see on the screen.
Texture coordinates with more than 2 dimensions are sometimes useful.  For example, many of Blender's procedural textures can use 3 or 4 "spatial" dimensions-- and really, what constitutes a spatial dimension is arbitrary at that point, we could plug a 5th texture coordinate into some other socket.  Texture coordinates with more than 2 dimensions can be emulated in Blender via the use of multiple UV channels.  As a real-life example of this, we can make pseudo-generated coordinates by creating a frontal projection from view (bounds) and a profile projection from view (bounds) in different channels, and combining our X + Y from our frontal with our X from the profile into 3D coords.  This is occasionally useful, not merely a stupid UV trick (we can get "rest pose position" coordinates this way, without worrying about how future modifiers are going to change our generated coords.)
When we use texture coordinates with more than 2 dimensions, it's not clear what we should call them.  We could call them UVW coordinates.  'W' follows 'V' just like 'V' follows 'U'.  Of course, that just raises the question, what if we use 4D coords?  Any choice of name for these coordinates is arbitrary-- but a rose by any other name would smell as sweet.

Some applications do call it UVW space (like 3DS Max), though in Blender that terminology is not frequently used.
When talking about the common case of unwrapping meshes with the purpose of creating a UV layout and using image based textures the W axis is indeed redundant and often omitted because it has little use.
The W axis gains relevance when one talks about procedural textures (like Noise, Musgrave or Waves, among others) that by default expand infinitely in three-dimensional space, or volumetric textures.
These are often but not exclusively used with automatic texture coordinates like Generated or Object, which allow the texture to cover an arbitrary shape seamlessly regardless of crevices or discontinuities, and can also be used in volumetric materials defining density or color throughout all its thickness.
For those situations, the texture space is for all intents and purposes a 3D space, much like a 3D scene of the local coordinates of a geometry which can be manipulated like any one would a mesh.
In these cases the W coordinate is very much real and useful, and is actually present in Blender, though the nodes you can manipulate them with always call it XYZ, like the Separate XYZ node, making it less obvious. In other software it is some time referred to as W coordinate.
Sadly in Blender it is not easy to combine unwrapped UV coordinates with a W axis, but it can be achieved with some node trickery, using the U and V component from the UV layout and combining it with the W coordinate of one of the generated coordinates using a Combine XYZ node.

When the vectors in tangent space get converted to global space would the z axis then point in the direction of the shading vector?

As far as I know W axis for generated coordinates always points in local Z axis of the object, unless manipulated not to

I miswrote. I was actually asking about the Z axis of the UV space.

W should be the Normal vector with respect to uv-space, if I'm thinking properly


text:
Light path node ray depth counting direction
According to the Blender docs https://docs.blender.org/manual/en/latest/render/shader_nodes/input/light_path.html ray depth gives the Number of times the ray has been reflected or transmitted on interaction with a surface.
Where do you start to count? So is the number of bounces the bounces going outward from the camera or going outward from the light source?

Rays start from the camera.  For the first object a camera ray hits, the ray depth is evaluated as 0:

Here, a camera ray strikes the actively selected cube, which evaluates the ray depth as 0, returning full emission.  Another camera ray strikes the mirror behind it, incrementing the ray depth, then reflects onto cube, which now evaluates the ray depth as 1.


text:
What is the equation for the layer weight node?
The layer weight node has two outputs: Fresnel and Facing.
Does anyone know the equations to both outputs?

There isn't one, or to be more precise, there are several, and some of them are GPU kernels that depend on the GPU's implementation of Fresnel.
Here's the code for the C version, embedded in a header file so it can be inlined: svm_node_layer_weight.  It makes a call to fresnel_dielectric_cos to calculate the Fresnel value. It calculates layer weight inline.

Ok kind of overwhelmed by the code. Anways thanks I'm just going to accept the answer as is.


text:
How to achieve plasma effect

I want to make this plasma orb with possibility to use it in animation.
Please give some ideas

I would first try a mess of fabric simulations and turbulence fields, coupled with some emissive / transparent materials.

Looks a bit like 3D Nebulae (https://youtu.be/4w8_SBxCOxo) with volumetrics. Or maybe like this which was made by particles that emit particles, fluid force field, and textures to colorize the particles (https://youtu.be/kkUC0GQ2SS4). The project files are available for free in the video description.


text:
Video textures in GLTF/GLB export
been searching the web for a couple hours.
all I can find is that GLTB/GLB supports video textures and so do most of the sdks that support it.
BUT I cant find a way to export this out of blender, maybe there is a way to export without and then use an external tool to add the video texture, but im not sure about how to do that.
would be awesome if there was a branch of the gltf exporter\importer addon that supported video textures, if not the main plug in itself!!

Have a look at this https://github.com/MozillaReality/hubs-blender-exporter not sure it will help you but it might guide you to the right place

Currently no, core glTF/GLB does not include video texture support.  It could be added by means of an extension, but most existing tools don't support any such extension currently.

@ebi , thanks for this I'll check it out.

@emackey from what I have read and found it is a supported feature, maybe your right and it's not a core feature. But from what I can tell some sites do support it.


text:
How insert vertex in face?
how to insert vertex in a face? and that the face is divided forming other faces

https://blender.stackexchange.com/questions/124856/how-would-you-model-a-pyramid-pattern/124876#124876

In Edit Mode, select only the Face you want to divide.
Click Subdivide.
This divides only the selected face rather than the entire object.
The difference between this and the Poke Faces method is that instead of dividing the face into a triangle fan, it divides the edges rather than dividing at the vertices.


text:
Project texture from one object to another

I want to project the ring with red texture to the monkey, the ring surrounds the monkey, I want the color or texture of the ring to be reflected in the monkey.

are you talking about a reflection (like a mirror) or a texture with a red stripe? If you're talking about reflection and if you're using Eevee you need to use Light Probe > Reflection Cubemap

I mean a texture, I chose red to better draw the example, but it can be any texture.
the texture is in the ring, the ring is a mesh. but it can be any mesh.

You could use 'Transfer Mesh Data' with a very big 'Ray Radius'

Select Monkey first, then Shift select the ring
Search for 'Transfer Mesh Data'
Select 'UVs' (I used Vertex colors for this test, UV's should work the same)
Set 'Ray Radius' to a very high value (bigger than bounding box of your scene,I think will cover it)
Experiment with different'Face Corner Mapping' options.

Too many options ... please be more specific :)


text:
Modifying a .blend file using python script(s) need to edit text inside a scene
I want to render a batch of short videos in blender. They are all based on the same .blend file, a simple scene with a text object in front of a background.
Now, the task is that each of the videos I need to render from that scene has a different text object, or simply: I need to change the text-object in every iteration of the rendering. Everything else in the scene stays the same.
So, (as an example) here is MyText.py
import bpy

context = bpy.context
scene = context.scene

# delete all default objects
bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete(use_global=False)

# ADD TEXT HERE

bpy.ops.object.text_add(view_align=False, enter_editmode=False, location=(0, 0, 0), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))

# EDIT TEXT HERE

bpy.ops.object.editmode_toggle()
bpy.ops.font.delete(type='PREVIOUS_OR_SELECTION')
bpy.ops.font.delete(type='PREVIOUS_OR_SELECTION')
bpy.ops.font.delete(type='PREVIOUS_OR_SELECTION')
bpy.ops.font.delete(type='PREVIOUS_OR_SELECTION')
bpy.ops.font.text_insert(text="M", accent=False)
bpy.ops.font.text_insert(text="Y", accent=False)
bpy.ops.font.text_insert(text=" ", accent=False)
bpy.ops.font.text_insert(text="T", accent=False)
bpy.ops.font.text_insert(text="E", accent=False)
bpy.ops.font.text_insert(text="X", accent=False)
bpy.ops.font.text_insert(text="T", accent=False)

bpy.ops.object.editmode_toggle()

bpy.ops.transform.rotate(value=1.5708, axis=(1, 0, 0), constraint_axis=(True, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1, snap=False, snap_target='CLOSEST', snap_point=(0, 0, 0), snap_align=False, snap_normal=(0, 0, 0), release_confirm=False)

bpy.context.object.data.extrude = 0.05

bpy.context.object.data.size = 1.0

I want to accept user input to change the text (edit the copy) with a limit of up to 20 characters. The input will eventually come from an HTML form that uses php to update the MyText.py script with the USER TEXT all within the .blend file
import bpy

context = bpy.context
scene = context.scene

# delete all default objects
bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete(use_global=False)

# ADD TEXT HERE

bpy.ops.object.text_add(view_align=False, enter_editmode=False, location=(0, 0, 0), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))

# EDIT TEXT HERE

bpy.ops.object.editmode_toggle()
bpy.ops.font.delete(type='PREVIOUS_OR_SELECTION')
bpy.ops.font.delete(type='PREVIOUS_OR_SELECTION')
bpy.ops.font.delete(type='PREVIOUS_OR_SELECTION')
bpy.ops.font.delete(type='PREVIOUS_OR_SELECTION')
bpy.ops.font.text_insert(text="U", accent=False)
bpy.ops.font.text_insert(text="S", accent=False)
bpy.ops.font.text_insert(text="E", accent=False)
bpy.ops.font.text_insert(text="R", accent=False)
bpy.ops.font.text_insert(text=" ", accent=False)
bpy.ops.font.text_insert(text="T", accent=False)
bpy.ops.font.text_insert(text="E", accent=False)
bpy.ops.font.text_insert(text="X", accent=False)
bpy.ops.font.text_insert(text="T", accent=False)

bpy.ops.object.editmode_toggle()

bpy.ops.transform.rotate(value=1.5708, axis=(1, 0, 0), constraint_axis=(True, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1, snap=False, snap_target='CLOSEST', snap_point=(0, 0, 0), snap_align=False, snap_normal=(0, 0, 0), release_confirm=False)

bpy.context.object.data.extrude = 0.05

bpy.context.object.data.size = 1.0

Is it possible to manipulate a .blend file in this manner? Do I need to call (execute) several python scripts to accomplish this, or can it be accomplished in one python script where (1) it loads the initial MyText.py, (2) accepts user input and changes the text accordingly (a new python script e.g. UserText.py?) and (3) renders the updated .blend file
I am using Terminal (Mac OS) to call the .blend file which has the initial (saved) python script MyText.py and output the file with formatting options to a specific output folder. I am using Blender 2.79
I am new to python and so any code examples would be extremely helpful and appreciated. Thank you in advance for any help you may provide.

First of all, that's an inefficient script: to change the content of a text object you just need to change his body property.
As for the importing bit, I'm not sure how do you want to do it with html, but looking around I think it's an hard think to do with php. I usually do it with text files: in php you create a .txt file with your text (and if you need other variables) in the folder with the .py file, then your script becomes something like:
import bpy

# delete all default objects bpy.ops.object.select_all(action="SELECT") bpy.ops.object.delete(use_global=False)

#READ FILE

filename = 'yourfile.txt'
directory = '/home/username/Desktop'  #just an example, put it where you want
fullpath = os.path.join(directory, filename)

if os.path.exists(fullpath):

    with open(fullpath,'r') as file:
        text = file.readline()
    file.close()
else:
     text = "MY TEXT"

# ADD TEXT HERE

bpy.ops.object.text_add(view_align=False, enter_editmode=False, location=(0, 0, 0), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))

# EDIT TEXT HERE

bpy.context.active_object.data.body = text

bpy.ops.transform.rotate(value=1.5708, axis=(1, 0, 0), constraint_axis=(True, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1, snap=False, snap_target='CLOSEST', snap_point=(0, 0, 0), snap_align=False, snap_normal=(0, 0, 0), release_confirm=False)

bpy.context.object.data.extrude = 0.05

bpy.context.object.data.size = 1.0

(I didn't test this script, so there could be some little errors)


text:
I made a reflecting texure but the objects are not reflecting in the texture. How can i fix that?

I made a reflecting texure but the objects are not reflecting in the texture. How can i fix that?

https://blender.stackexchange.com/questions/128162/how-do-the-new-light-probes-in-eevee-work/128164#128164 https://blender.stackexchange.com/questions/123164/what-is-lookdev-mode-for-in-2-8/123168#123168 https://blender.stackexchange.com/questions/132945/eevee-ignores-light-emission-outside-of-the-camera-frame/133060#133060

In blender 2.80 the default render engine is EEVEE (instead of cycles). So that is why you need the links posted by the previous commenter.

Please mind the terminology. It is important in this area, words that are synonyms in natural language might mean different things in CG jargon and it sometimes might get really hard to communicate really quickly if you don't put effort into it. Textures cannot be reflective. Materials or shaders can be reflective and materials can have textures that define their properties. Textures or texture maps or image maps can define things like the amount of reflections or the sharpness/roughness of them  or even what is reflected, but do not reflect anything themselves as shaders or materials do.

sorry material.


text:
There is any way to use the same file from 2 PCs?
I want to "host" a blender file. I mean if antoher pc edit it I can see it from my PC. Is there any way to do that?

Use some cloud. I have files on cloud and every time i make some changes it uploads to cloud and then it download the changes to the file on my other computer.

Thanks. Its cool but not perfect.

Please add more to your question, what do you expect and why this answer e.g. is not perfect instead @ÁdámKara (funny enough that my comment is longer than your question body)...

The proble is I want to make this blend file to be like a server

So you want to have a file that is open for a number of people who are working on it at the same time? Kind of google document

Maybe the best way is to have a master file, and split your scene into multiple assets (save as dedicated .blend), then use File > Link to show them into the master file.
The assets files can be directly saved on your local network (shared folder on your computer or shared network drive folder, can be slow), or cloud folder like Fowl suggest, or even better, using a versionning system like SVN.
Note that linked libraries have some limitations, but Blender users can hope for changes soon, with overrides.


text:
Creating blender objects with matrix of 3D coordinates?
I have a matrix of 3D coordinates for about 10,000 points. Is there a way to import this matrix into blender in such a way that it creates a simple sphere of the same size at each point in the matrix or can anyone point me in the right direction of some documentation on how to do this?
Example:
[1,]-2.0256547 -3.0332452 -1.596550 -1.662259 -1.633215
[2,]  2.4796049 2.4291108  3.102889  3.030494  3.049240
[3,]  0.5200771  0.8193005 -1.868664 -1.890152 -1.896593
Thanks!

You will need to use simple python scripting to achieve this. See questions such as https://blender.stackexchange.com/questions/34946/add-object-at-specific-location-with-python for more info.

Thanks, ill check that out!


text:
Unwrap a simple cylinder in 2.8
I am trying to unwrap a basic cylinder to a picture wich has a size of 4096x1080px.

The UV map is supposed to look like the 64 faces side by side within the boundaries of the image.
Whatever I try - it never comes to that point. I tried to reset first and than unwrap, to reset and to follow active faces, to pack islands, etc.
There is one weird (I guess) thing: In pretty much every case the faces are rotated by 90° in the UV map. I don't know if this is related to something...
This is the standard map when I start from scratch and hit 2xU (All 64 faces are vertically squeezed into the boundaries) - I want exactly this - just horizontally:

Any help is appreciated!
Thanks and best.
Stefan

Can't reproduce, I get the expected result, try again on a clean file after factory reset, please.

Try to apply scale for the object (Object mode > object selected > Ctrl+A), then unwrap. Try also in Edit mode unpin all vertices on UV map and then unwrap again (though looks like they aren't pinned)

Thanks to the both of you. I did all that. I even tried to start from scratch (with default settings) - always with the same result. I also modified my cylinder (less faces, e.g.) - always the same: vertically aligned faces squeezed into boundaries of my picture.
Is there an option to give one quad a pixel size? That could be a workaround: define the size (pixel perfect!) of one and than "follow quads"...


text:
Overlapping objects can't be selected individually
I'm just starting out. I'm as green as it gets...and I'm stymied. I'm trying to build a biped with primitives with the intention to use Sculpt Mode to smooth it out. I've got a sphere for the head, another overlaps it for the hair. But the two shapes insist on moving as one. I can't select one and move it without moving the other. How to handle this?

Hello :). You probably have both meshes inside one object. In Edit mode go Mesh > Separate > By Loose Parts. That will make them separate objects.


text:
Is it possible to remove standard Menu Drawers from bpy.types.TOPBAR_MT_editor_menus.remove?
I want to know how to remove standard menu drawers from the  bpy.types.TOPBAR_MT_editor_menus.remove(drawer_function).
I want to remove File|Edit|Render|Window|Help and replace the entire menu stack.
I know how to remove custom menu drawers.
Just cant seem to find a reference to the existing ones.

You want to do it dynamically with an add-on or to remove it "forever" ?

dynamically with add-on..


text:
Render VSE frame and 3D scene seperately in script background mode?
Does anyone how to render VSE seperate and and 3D scene seperately in the background mode?  is it even possible? In UI render bpy.ops.render renders whatever SpaceType was last active.
Is it the same bpy.ops.render operator with using an active SpaceType?
I tried bpy.ops.render.opengl aswel because thats python tool tip for VSE render image menu item, but it's write_still=True  doesn't seem to work.
I want to:
render frames on the 3Dscene

Render frames on the 3Dscene.
Push them to different Channel Strips in VSE.
Export the VSE preview/output at a certain frame to disk or a texture

And I want to do this recursively, dynamically via script in background mode.
Help is much appreciated.

It is possible if you run script to change settings inside Blender scene https://stackoverflow.com/questions/10667314/python-script-with-arguments-for-command-line-blender

yh. I understand the render code. but which setting seperates the VSE from 3DScene?

scene.render.use_sequencer

Noice!!! Thank you vm!!

It is not depending on active space. If scene.render.use_sequencer is true, Blender will render from sequencer (VSE) but only if it has image strips.
In UI you can find it here:


text:
how to attach texture created with bpy.data.textures.new to use in ShaderNodes? (texture_slots.add() deprecated)
Does any one know how to attach texture created with,
tex = bpy.data.textures.new('Flag', type = 'WOOD')
to be used in a ShaderNode ?
tex does not have tex.image and the issue is reference code is using
texture_slots.add() which is deprecated from 2.8. help is greatly appreciated.
this is the function I'm writing. obviously it doesn't work when a texture is passed .

    def textured(material_name, texture=None, image=None):
        mat = bpy.data.materials.new(material_name)
        mat.use_nodes = True
        nodes = mat.node_tree.nodes # Get the nodes
        nodes.clear()
        node_principled = nodes.new(type='ShaderNodeBsdfPrincipled') # Add the Principled Shader node
        node_principled.location = 0,0
        node_output = nodes.new(type='ShaderNodeOutputMaterial')    # Add the Output node
        node_output.location = 400,0
        node_tex = nodes.new('ShaderNodeTexImage') # Add the Image Texture node
        node_tex.location = -400,0
        links = mat.node_tree.links # Link all nodes
        link = links.new(node_tex.outputs["Color"], node_principled.inputs["Base Color"])
        link = links.new(node_principled.outputs["BSDF"], node_output.inputs["Surface"])
        if texture:
            node_tex.image = texture.image
        elif image:
            img = bpy.data.images.get(image) # Get the image and assign it to the Node.image
            if img: node_tex.image = img
            else: node_tex.image = bpy.data.images.load(image) # Assign the image
        return mat
```

I don't think you can.

AFAIK the Texture system can't be linked to the shader system. You're better off using procedural shader texture nodes directly in the shader editor

scurest , Gorgious understood. thanx!

You can retrieve the pixels from your texture, and place them on a new image
then use this image instead of the texture.
import bpy

def texture_pixels(texture=None, x=32, y=32):
    pixels = []
    final_pixels = []
    for rangex in range(x):
        for rangey in range(y):
            pixels.append(texture.evaluate(value=(rangex, rangey, 0)))
    for p in pixels:
        for fl in p:
            final_pixels.append(fl)
    return final_pixels

def textured(material_name, texture=None, image=None):
    mat = bpy.data.materials.new(material_name)
    mat.use_nodes = True
    nodes = mat.node_tree.nodes # Get the nodes
    nodes.clear()
    node_principled = nodes.new(type='ShaderNodeBsdfPrincipled') # Add the Principled Shader node
    node_principled.location = 0,0
    node_output = nodes.new(type='ShaderNodeOutputMaterial')    # Add the Output node
    node_output.location = 400,0
    node_tex = nodes.new('ShaderNodeTexImage') # Add the Image Texture node
    node_tex.location = -400,0
    links = mat.node_tree.links # Link all nodes
    link = links.new(node_tex.outputs["Color"], node_principled.inputs["Base Color"])
    link = links.new(node_principled.outputs["BSDF"], node_output.inputs["Surface"])

    if texture:
        node_tex.image = bpy.data.images.new(material_name, 32, 32, alpha=True)
        node_tex.image.pixels = texture_pixels(texture, x=32, y=32)

    elif image:
        img = bpy.data.images.get(image) # Get the image and assign it to the Node.image
        if img: node_tex.image = img
        else: node_tex.image = bpy.data.images.load(image) # Assign the image
    return mat

tex = bpy.data.textures.new("name", type="WOOD")
tex.use_color_ramp = True
textured("new_mat", tex)

textures doesnt seem to have 'pixels' anymore. AttributeError:  'WoodTexture'/ (even)'ImageTexture' object has no attribute 'pixels'

i updated my answer, it has a function i just wrote, it should help you. the key thing here is that now we must call "evaluate" on each pixel of a texture, to get the rgb values of that coord, we convert the vectors to a float list that the image expects. here is a link for more info
https://docs.blender.org/api/current/bpy.types.Texture.html#bpy.types.Texture

Perfect! (evaluate.. ofcoz). Thanx a bunch!!!


text:
How can I "stretch" the time for timeline markers
Ok this is somethign very specific, and kinda dumb
Many know they thing if going to the first key on the dope sheet and streteching/ extending / scaling all the frames to the desired lenght
BUT
Is there any way to make it for the markers too?
I used various camera angles using the markers(bind camera to marker), these are not affected by the scaling of the keyframes
Of course i could simply use time stretch , but this would affect the time the VBD volumes work
Or the only solution is moving them manually?

⚠ This post is created with the help of an artificial intelligence.

This script is written by ChatGPT. Addon's were edited by me. I tested them and they work for me as intended, but I can't guaranty a quality (or a danger) of those scripts. I'm not experienced coder.

This script assumes that you want to scale the frame positions of all timeline markers in the current scene:
import bpy

def scale_markers(factor):
    # Get the current scene
    scene = bpy.context.scene

    # Check if there are any markers in the scene
    if scene.timeline_markers:
        # Loop through all markers in the scene
        for marker in scene.timeline_markers:
            # Scale marker's frame by the specified factor
            marker.frame = round(marker.frame * factor)

# Set the scaling factor (adjust as needed)
scaling_factor = 2.0

# Call the function to scale markers
scale_markers(scaling_factor)

Here's how to use the script:

Open Blender.
Switch to the "Scripting" workspace.
Create a new Text Editor and paste the script.
Adjust the scaling_factor variable to the desired scaling factor.
Run the script by pressing the "Run Script" button or using the "Alt + P" shortcut.

Addon - location Sidepanel ... copy paste into some text editor and save with .py extension. Install as usual.
bl_info = {
    "name": "Timeline Marker Scaler",
    "blender": (4, 00, 0),
    "category": "Animation",
    "author": "ChatGPT 3.5",
    "version": (5, 0, 0),
    "location": "Timeline > Sidepanel > Scale Markers",
    "description": "Stretch Markers on Timeline to sync position for stretched elements on timeline.",
}

import bpy

class SCENE_PT_scale_markers(bpy.types.Panel):
    bl_label = "Scale Markers"
    bl_idname = "SCENE_PT_scale_markers"
    bl_space_type = 'DOPESHEET_EDITOR'
    bl_region_type = 'UI'
    bl_category = 'Tools'

    def draw(self, context):
        layout = self.layout

        row = layout.row()
        row.prop(context.scene, "scaling_factor")
        row = layout.row()
        row.operator("scene.scale_markers", text="Scale Markers")

class SCENE_OT_scale_markers(bpy.types.Operator):
    bl_idname = "scene.scale_markers"
    bl_label = "Scale Markers"
    bl_options = {'REGISTER', 'UNDO'}

    def execute(self, context):
        # Get the current scene
        scene = context.scene

        factor = context.scene.scaling_factor

        # Check if there are any markers in the scene
        if context.scene.timeline_markers:
            # Loop through all markers in the scene
            for marker in context.scene.timeline_markers:
                # Scale marker's frame by the specified factor
                marker.frame = round(marker.frame * factor)

        return {'FINISHED'}

def register():
    bpy.utils.register_class(SCENE_PT_scale_markers)
    bpy.utils.register_class(SCENE_OT_scale_markers)
    bpy.types.Scene.scaling_factor = bpy.props.FloatProperty(name="Scaling Factor", default=2.0, min=0.1)

def unregister():
    bpy.utils.unregister_class(SCENE_PT_scale_markers)
    bpy.utils.unregister_class(SCENE_OT_scale_markers)
    del bpy.types.Scene.scaling_factor

if __name__ == "__main__":
    register()

Addon - location Menu ... or maybe better from editor's header menu > Marker > Scale Markers. Like that you can change value in Adjust Last Operation panel and see result realtime.
bl_info = {
    "name": "Dope Sheet Marker Scaler",
    "blender": (4, 00, 0),
    "category": "Animation",
    "author": "ChatGPT 3.5",
    "version": (2, 0, 0),
    "location": "Dope Sheet > Menu > Marker > Scale Markers",
    "description": "Stretch Markers on Timeline to sync position for stretched elements on timeline.",
}

import bpy

class OT_marker_scaler(bpy.types.Operator):
    bl_idname = "object.scale_markers"
    bl_label = "Scale Markers"
    bl_options = {'REGISTER', 'UNDO'}

    scaling_factor: bpy.props.FloatProperty(name="Scaling Factor", default=2.0, min=0.1)

    @classmethod
    def poll(cls, context):
        return context.scene.timeline_markers is not None

    def execute(self, context):
        scale_markers(context.scene, self.scaling_factor)
        return {'FINISHED'}

def scale_markers(scene, factor):
    # Check if there are any markers in the scene
    if scene.timeline_markers:
        # Loop through all markers in the scene
        for marker in scene.timeline_markers:
            # Scale marker's frame by the specified factor
            marker.frame = round(marker.frame * factor)

def menu_func(self, context):
    self.layout.operator(OT_marker_scaler.bl_idname)

def register():
    bpy.utils.register_class(OT_marker_scaler)
    bpy.types.DOPESHEET_MT_marker.append(menu_func)

def unregister():
    bpy.utils.unregister_class(OT_marker_scaler)
    bpy.types.DOPESHEET_MT_marker.remove(menu_func)

if __name__ == "__main__":
    register()

Seriously, it did it with no bug or adjustments?

@lemon The first script - surprisingly, yes :) Addon versions - it was a few hours of errors :) I have zero knowledge, so it was hard for me to identify issue... it seems I was lucky, than anything else :) ... but now I know things like blender version has to be in bl_info specified :)

@duartefarrajotaramos ... Does it really necessary to introduce this post by such a scary paragraph?

Hi vklidu as discussed with other moderators in a meta post we refrain from removing or downvoting any posts suspected to be AI generated content, but we agreed to mark and keep track of them in said posts. If you reviwed the code yourself and ensured it works, you may just omit the fact that it was generated with ChatGPT completely, and  we may just overlook that fact and you can edit out the message from the post ;)

@duartefarrajotaramos OK ... Yes I tested if it works, I tried to check the code and structured explanation, but I'm not a coder to be sure the code is completely correct. So it seems to me right to inform followers how ai participated on this answer. And as described in related articles ... The warning link should direct you to some relevant page explaining more in details potentional risks of ai in general.

To add to our meta conversation, here's my review of the first code - found just one problem: int will work like trunc: it will convert the float to an integer by removing the fractional part. It means a number like 13.99 will become 13, while you may want the nearest int (14) instead, so probably you want to use round(). Other potential criticisms would be nitpicking, the biggest would be: if scene.timeline_markers: is not needed there. It's idiomatic to just iterate over a possibly empty collection. if it's empty, then the body of the loop will never execute.

As for fighting with GPT for hours... I have a feeling it would take you less without chatGPT? You could look into the code examples available from the Blender interface, and just repurpose one of them.

@MarkusvonBroady ... thanks for revision, round() make sense :) ... and about GPT - I wouldn't even know where to start, the first success encourage me to dive into it a bit, especially explanations of individual parts helped me, but yes when I saw my self in circle process of resending blender's errors to GPT I  started to checking blender's templates to try found a fix (and no, it wasn't faster, but I ended up with something :)


text:
Node group asset, all paras work fine apart from the colour ramp
I am creating an asset node group (metal generator) in one file and want to import it as an asset into another file. This all works fine apart from the color ramp para.
Here is the setup I have in the file where I am creating the node group asset. Now, this does work correctly. When I adjust the ColorRampRoughnessAdjustor, it works as expected. I have marked this as an asset. I created a para for the color ramp, set from 0 to 1 as a float. Copied it as New driver and pasted it in the Pos of the colour ramp.

Okay, now in another file, I have created a new material, opened up my asset browser and dropped in my node asset. It is worth mentioning, in the asset browser, I have the dropdown set to link. As for my metal generator asset, all values are the same but the color ramp para does not work. When I adjust the slider, it does not change the value.

Any ideas on the potential issue?

Hello ! The simple answer is that AFAIK drivers don't get copied over with assets. If you're using a color ramp for 0 to 1 mapping, you can replace it with a Map Range node and directly plug the values into the inputs. Please add a screenshot of the content of the node group for further information

@Gorgious Makes complete sense and I got it working as wanted, thank you Gorgious. ευχαριστώ φίλε


text:
Can I edit a symmetry threshold? Or is that not the issue here?
I'm sorry to ask a very simple question, I come from Maya so my blender knowledge isn't great. I'm trying to edit a mesh with proportional editing- not sculpt mode as I need to edit multiple objects at once. I'm also trying to do it with symmetry enabled. WITHOUT a symmetry modifier, as I am editing a pre-existing mesh. I've ensured the model is perfectly symmetrical using the mirror tool etc and individually, all vertices look just about fine. But as soon as I begin using the proportional editing tool, it's like vertices get "left behind". I included a GIF to hopefully show what I mean. It's only ever on the opposite side of the mesh ie. the mirrored side. I've messed around with topology mirror vs non, and the strange thing is, in sculpt mode it works perfectly, but again I can't use sculpt mode as I want to edit the lashes at the same time as the tearline etc. I apologise for being such a beginner and asking a question that is probably very simple!
Also: I've noticed this on a lot of meshes I've worked with in the past, not just this project.
I was hoping there would be some way to somewhat alter the symmetry threshold or something. Like a way to define what vertices are symmetrical if within a distance of 0.001 instead of exact? Sorry, my wording isn't great!
any solutions would be greatly appreciated as I've struggled with this for so long that I had previously settled on just, suffering with it.

Is there a specific reason for you to not use the mirror modifier? Coz else you can just delete one side and then use the mirror modifier. I don't know about why they are being left out like that though.

Maybe there shape keys on those eyelids? Without seeing your Blend file it's purely guesswork. If possible just save a Blend file with the head aand eyelashes in it and share it via https://blend-exchange.com/ following the instructions there to copy the link to it and then edit your question and paste the link into it.


text:
KeyMaps for TEXT_EDITOR doesnt wor'k for 3.5?
Answer from here works great. But when I try it with Script Editor no combinations work.
I changed
IMAGE_EDITOR

to
TEXT_EDITOR

Am I missing something?
import bpy

class SimpleOperator(bpy.types.Operator):
    """Tooltip"""
    bl_idname = "image.simple_operator"
    bl_label = "Simple Image Operator"

    def execute(self, context):
        print(SimpleOperator.bl_idname, "called")
        return {'FINISHED'}

addon_keymaps = []
def register():
    bpy.utils.register_class(SimpleOperator)
    addon_keymaps.clear()

    wm = bpy.context.window_manager # handle the keymap
    kc = wm.keyconfigs.addon
    if kc:
        km = wm.keyconfigs.addon.keymaps.new(name='Image', space_type='TEXT_EDITOR')
        kmi = km.keymap_items.new(
            SimpleOperator.bl_idname, type='Y', value='PRESS', ctrl=True)
        addon_keymaps.append((km, kmi))

def unregister():
    bpy.utils.unregister_class(SimpleOperator)

    for km, kmi in addon_keymaps:
        km.keymap_items.remove(kmi)
    addon_keymaps.clear()

if __name__ == "__main__":
    register()

Apparently name has to be changed to "Text" too:
km = wm.keyconfigs.addon.keymaps.new(name='Text', space_type='TEXT_EDITOR')


text:
HELP! I made a mistake when sculpting and when trying to fix it, it lead to a bigger problem
(Pictures included to help get my point across :) )
I was sculpting this character that I've been working on

and I made a classic blunder. When I was sculpting the ear i accidentally forgot to turn the symmetry on. Because it was almost finished and I hated sculpting ears, I decided to try to work around it
I used the Boolean Modifier to cut the sculpt in half and then mirrored it. Everything seemed fine until I realized that because of this, there was now a face/mesh in the middle inside of the sculpt

Now whenever i sculpt this happens.

I tried manually deleting the mesh inside using edit mode but because of the bad topology from 'dynamic topology', its nearly impossible.

I really need help! I want to finish this sculpt.
Here's the blender file: blender file
Thanks a lot guys!

It might be better to work from beginning with mirroring the ear. If you have save with unbooleaned mesh it should be doable with Symmetrize command in Dyntopo settings

There seems to be an easy fix for your particular mesh problem: (because it is a nice flat internal surface)

Go into front view and turn off perspective (press 1 and then 5 on Numpad, ... or tick emulate numpad in the preferences menu if you don't have one, in that case also 1, 5)
Its always very important to see what is going wrong without all the rest blocking the view, so then use Alt+B to box-restrict the visible mesh around the center:
Then select one of the internal faces and select "linked flat faces" (shortcut: shift+ctrl+alt+F)
then delete those with ->delete->Faces and check if this solved the problem. As you can see in the right picture in your particular case the mesh is already clean after this.

Now you can use Alt+B again to return to the normal unrestricted view.

That should have done it! Happy blending! :)


text:
Vector output from instance on points
I need some help with the following problem. I want to create a rope between two points. This works perfect when I use two objects. I want a static end point (Empty) and a point on a mesh as start point. For example, a cube with 8 vertices that creates 8 ropes to a point. See picture. It must be procedural with use of geometry nodes. How do I create a location output from point of a mesh?
What I get:

What I want:

Problem:

Anyone?
Dave

i have simplified your question, so i just created "straight" lines from empty to each vertex of the cube:

of course you can do this with a more complicated curve as well. I just wanted to show you a way to do it.

In addition this video lays the concept of simulating gravity with curves using a trick on the control point handles https://www.youtube.com/watch?v=k65ofSRnxfs


text:
Brushed metal material: not straight
New to Blender, and my first question on Stack Exchange.
I'm trying to create a brushed metal effect on a ring. However, my brushed effect is appearing in a circular shape, rather than in straight lines around the ring as I would like.
Images show the effect I'm getting, and the shader setup I'm using.

How can I make the brushed effect appear in straight lines around the circumference of the object?

Then you need to scale it on the vertical axis, which is Z. Try changing Y back to scale 1 and Z to 100.

You need to increase the Mapping > Scale on Z:

Thank you! It was an easy fix in the end.


text:
Piston pushing mesh to make it rotate

I need to make the piston rod push the selected mesh into a rotation around its origin. My problem or issue is that I don't know how to place the armature correctly and how the piston rod stays in contact with the mesh when it's rotating. I could really use some help with this.

hello could you make a drawing of position A and position B? Maybe you could use a Transformation constraint?

Usually it would be easier to have the rotation drive the piston (look-at).. is that acceptable?

is this what you want? [1]: https://i.sstatic.net/uLule.gif

As ususal there are a lot of possibilities how you can rig something. I don't claim that my solution is the easiest or most elegant, but it works:

root node:
no parent, can just rotate on x axis, which is pointing to the viewers eye

big cylinder:
has track to IK, parent is root

Stretchy
has no parent, copy loc from big cylinder and stretch to ik

small cylinder:
parent is stretchy, damped track to root

IK
parent is bone, has IK

bone
has no parent
controller
has no parent
result:

parent your cylinders according to their names.


text:
how do I make the hook modifier still work if the object moves location?
I have assigned a hook modifier to an object with an empty but when the object moves the modifier's influence stays at the location it was created even if I move the empty with the object

Hello could you please show some pictures?

What do you mean by saying "the modifier's influence stays at the location"? An influence is nothing that can stay in a location. The object, parts of it like vertices or the empty can stay in a location. If you hooked the object's mesh or a vertex of it to an empty, then the vertex stays where the empty is, no matter where you move the object. It is not supposed to be the empty following the vertex. Or was your goal to parent the object to the empty or vice versa instead of using a Hook modifier?

You can parent the Hook to the modified object, so the Hook follows the object wherever it goes...


text:
I can't "smart UV Project"
I'm a noob in Blender, and I was following a tutorial (https://www.youtube.com/watch?v=pJaF7NBJudk). Around 1:27, he used Ctrl + Numpad, and from that point onward, I couldn't enter edit mode in that area. This is problematic because now I want to texture paint my object, but I can't paint the area where I used Ctrl + Numpad.
I attempted to resolve this issue, and now I can visualize that area in edit mode. However, only the points are visible, and there are no faces between them (refer to the picture for more details).
Could someone please help me?

If you slow the tutorial right down, he's using Ctrl-Numpad + (plus) which extends the selection one loop to the right and then 'H' to hide the selected section. That's so that he can add a loop cut round the remaining part and move it up to square off the upper corners of the hammer head. I've not looked at the rest of the video, but to unhide that section use Alt-H (in Edit mode).

I'm sorry but the title seems completely unrelated to the question. I mean of course, if you cannot see and select the faces you cannot unwrap them... but you mention unwrapping nowhere else, just painting. Anyway, I agree with @JohnEason - the selected mesh gets hidden with H, unfortunately it is not shown how to unhide it again with Alt+H. To be honest, I don't think those very quick timelapse videos without any explanations are not very suitable for beginners when you don't even know yet how to hide and unhide parts of the mesh. I would do more beginner tutorials at first.

This didn't work, that was the first thing I tried but nothing changed. I just recreated the object in a different way. Sorry for the badly chosen title. Thank you very much for your help.


text:
Is there a way to incorporate a PNG with stroke layers using Grease Pencil
I am animating a hand holding a crayon. The hand is a 2-D grease pencil stroke layer with a full layer and the crayon is a PNG imported as a plane. I was able to animate the crayon to move around with the hand but my trouble comes with layering as I am not able to get the crayon to layer properly with the hand to look like it is holding it. I am having trouble finding any help with this through a Google search so any help is appreciated.

Hello ! A screenshot would help a lot visualizing the problem but if I understand correctly, you need to use a mask to manually hide the grease pencil when it should be hidden by the crayon.

Thank you so much! I’ll try it out.


text:
How can I make these channels bigger to fit my wire?
I am recreating Malt Whiskey's LED cube and using slightly bigger wire than he used (.8mm vs the .65mm he used). He has a 3d printed jig to solder the LEDs and there are "channels" for the wire to sit in. How do I make these channels bigger to accomodate my wire? I've tried selecting each channel individually but I'm not able to specify the depth and width. I'd imagine it would be faster to select all channels at the same time and adjust the size rather than individually. Thanks!

Which bits are the channels? The round holes? It would help us a lot if you made a couple of screen-grabs of the whole set-up, and the features you want to alter, and paste them into your question. Then we wouldn't have to go somewhere else, and guess.

The round holes are the LEDs. There are 8 channels that run the entire length of the jig and those are what I want to make bigger. Thanks!

You're going to have to illustrate with a screen-grab, pointing out the channels, and share your .blend on https://blend-exchange.com/ so we can be sure solutions will work with your topology.


text:
Transforming an entire animation to match the location of another
I am making an animation of a tennis player, and I am trying to combine 2 animations: an idle state (the player stationary, bobbing up and down) and a hit, blending them together using the NLA.
The issue is that both animations face a slightly different way, and neither take place at the origin of the armature (as the figure moves around). Here is view of the figure showing the origin point (hit animation):

and here are the two armatures viewed from above, overlayed, to show way i mean about them facing different directions (with second, idle animation selected):
I want to be able to rotate and slightly move the idle animation so that it aligns with the hit, so that when they are blended the figure doesn't slide around or rotate. Is there a way of doing this, essentially applying a coherent transform to every bone in every keyframe of the animation, so that it can be applied to the same model? (This is what i mean in the NLA):

(I have tried moving the hip bone (the parent of the armature) and replacing its rotation and location through blending in the NLA, but this pins the animation in the middle and destroys the bobbing motion unfortunately)
Many thanks

Ok I have found a solution that may be helpful to to others (though I welcome any other solutions).
In order to position the animations to be blended together on the same model, with the complete animation cycle being IDLE -> HIT -> IDLE, I needed to key in the Delta Transform and Delta Rotation for each action.
First I made an 'idle-start' action from the idle action I had and manually changed the Delta transform & rotation to align it with the first frame of the hit animation, by adjusting in the Object Properties tab, and made a single keyframe for each of these properties (press I > Delta Transform / Delta Rotation).
I then did the same with an 'idle-end' animation (copied from the original idle animation), and aligned this with the last frame of the 'hit' animation and keyed it.
Finally I went to the 'hit' action and reset these properties to 0 and keyed in there.
These three actions can then be pushed down to NLA strips and blended together using 'Combine' blend modes and fade in/out on the clips.
The final result should show the model seamlessly moving in place, but the origin point will animate as the actions/clips change.


text:
Collecting attributes from vertices based on area and using in geometry nodes (for 3D graphs)
I have a high-level challenge I'm trying to work out, and feel I'm very close but missing some Geometry Nodes knowledge to get what I want out of it, and would really appreciate some help or direction.
The goal is to take an object consisting of a 'cloud' of unconnected vertices, each with a custom attribute value on them, and create a 3D graph that groups the points into a grid and assigns height based on this custom attribute, summed for each point in the grid square.
For some background I'm using this script to convert a csv file into the vertex cloud: https://blender.stackexchange.com/a/241870/76672
This is my starting point, with the custom attribute being 'scaleVec':

I can easily turn this into a bar chart by instancing cubes on each point and moving the bottom face, but the issue is the bars will often overlap, so I want to have a grid underneath that groups points near each other and shows the amount by summing the number of points, or the combined value of the attributes.
This is a top-down view showing an example point distribution over a small grid (3 points over the green square, 1 over the blue, 1 over the red, and none over the yellow):

and the expected result:

I have been trying to use Raycasting from the points downwards onto a grid in Geometry nodes, as well as the Attribute Statistic node to sum attributes, but I'm getting a bit stuck, and if anyone is up for giving me some pointers for this challenge (im using Blender 3.1) Id really appreciate :-)

Here is my solution (for demo reason, I distribute random points and weight is 1 everywhere):

How it works:
To sum all weights, I use accumulate field node. Coordinates of each point is rounded and x is multiplied by 10, so that I can get a unique ID of each square:

When I just set position to rounded one and instance cubes

Last step - remove duplicated points:

Thanks, thats great, I have tried adding a value to control the resolution of the underlying grid, that has to affect the floor, positioning, cube size etc, I was wondering what is the value for the 'Multiply' node based on? is it 10 mainly because of the grid size that you set up to test or is it relative to the cube size, floor etc?

It is just to give a unique number for each bar group. Each line contains 10 bars.

Following, I will explain two different solutions.
Solution 1: Instantiate bars on points based on proximity to the instantiation point
This one is similar to the one of Crantisz, but works a litte different. Instead of calculating grid squares, it creates a grid and uses proximity functions:

It starts with setting the ID of each point in the cloud to the index of the nearest point in the target grid.

Next it sets the position of every point in the cloud to the nearest raster point and stores the count of points at this position directly at those points.

Finally it merges the points by distance and creates the bars in the appropriate size:

Dynamic Version
And here is a dynamic version of solution 1:

Solution 2: Extrude Faces based on proximity to face
This solution starts with some points on some faces. It then counts the points per face by proximity and extrudes the faces based on this count. You may plug in any object.

How does it work?
It starts with creating points on the faces of the object, defined by the input parameters. Then it iterates over those points and calculates the number points per face index. This value is stored at every point by the Capture Attribute node together with the related face index in the ID of the point. Now every point knows, to which face it belongs and how many points belong to this face.

Finally, we would like to iterate over all faces and read the number of points from one of these points. We can do this by reading the captured attribute from the nearest point to the current face. But this will not work, if there is no point. In this case, we would get a foreign point instead of none.
To get around this, we place the points on the origin of their faces and merge them by distance:

Now we have zero or one point on the origin of every face. And the point knows, how many points belong to the face. This allows us to iterate over all faces and grab the point count from the nearest point to each face. If the distance to this point is greater than 0, this means, that there is no point. To prevent issues in some cases, we will have to check for > 0.001.
We use this value to define the scale of the extrusion of the related face.

Thank you, I will try this one out too... would this technique work better (with modification) with an irregular sectioned plane (ie one split into quadrants, or triangles) instead of a grid? I had experimented with raycast in order to use this on such a shape as mathematical functions wouldn't work as well on it, perhaps i should formulate it into another question if its a large modification

It depends on the shapes and on their regularity, because the points are assigned to the bars by their distance to the instantiation points. Anyway, I could imagine a similar solution, that could work. If I find some time, I will try tomorrow.

@awnine, I added another solution to my description, that should work with every type of plane.


text:
Saving or creating an environment or reflection cube map
Im just starting to use the reflection maps that are generated by the 'Indirect lighting' tab of the Eevee render settings.
I know these are saved to a cache and then sort of applied to the object, but i wanted to know:

are these maps available to export (as an image file)?
is there any way to see (or recreate) the shader-like settup that happens behind the scenes to apply these maps to the object?

I imagine recreating this effect would involve a shader that takes the view position into account, so would be cool to see how this is created. Also I would like to know if there is a workflow for baking these reflection maps in Blender and reusing in other applications/frameworks (like Babylon JS)

They're not available as export.  You can set up a way to make them manually, but it's a bit of work.
You can see exactly how they work by reading code.  Either Blender's code (which I haven't read), or by getting an idea from reading other shader code, which is probably very similar to Blender's implementation.
A reflection cube map is created by rendering the scene six times, from six cameras at the center of the cube but at right angles to each other, each with a 90 degree field of view, which corresponds to the faces of a cube.  I believe that a reflection plane is created similarly, but from a single, orthographic camera.
Usually, reflection cube maps or planes are accessed by the reflection vector-- the reflection of the view vector over the surface normal, such that the surface normal bisects the angle created by the view vector and the reflection vector.  We can then run this reflection vector through the perspective matrices for our cubemap or plane and get "screen-space" coordinates for a look-up on those renders.


text:
Importing a texture that appears to have alpha but Blender's image preview shows detail. How can I import this image with the details?
I downloaded some files from PokeMiners regarding their ripped 3D models from Pokemon GO. But when I downloaded Bulbasaur, I discovered that the eye image only included the sclera, pupils, and irises.

I didn't think much of it at first, but when I brought the model into Blender and added the textures, this occurred:

No matter what I tried, I always got two results: either the alpha was see-through, or the alpha was rendered black.
Eventually, by complete accident, I stumbled upon this peculiar detail:

It turned out that the 'alpha' had some metadata that did render the material that goes around Bulbasaur's eyes (see the red circle for full texture and highlighted text for which one in particular). And using the 'Add Alpha' brush, replace the alpha with texture, resulting in:

Bulbasaur no longer looks out of place, so, technically, the problem is solved. But I do have a question that still hangs over my head: Is there a way to import an image of this caliber without the alpha being rendered as alpha and instead with the material that is missing? For example: if the original image is the first picture, how to import it with the details of the last picture below?

(Bulbasaur's Original Files Here: https://github.com/PokeMiners/pogo_assets/tree/master/3D%20Assets/Addressable%20Assets/pm0001/pm0001_00_Rig%20%2345)

Use Channel Packed Alpha
Change the Alpha setting on the Image Texture Node for the eyes to Channel Packed

Worked like a charm! Thank you very much!


text:
Blender 2.8 - When I rotate a bone, the entire mesh deforms
I just made the switch to Blender 2.8, but I have encountered a problem. I followed CG Geek's tutorial on how to make a low poly human mesh, but I encounter a problem when I rig the mesh.

But when I try to move the hip bone, this happens.

Can someone help me?

It looks like a weighting problem. Did you use automatic weights? You might need to tidy them up by hand, or add the rest of the Bones so Blender knows what it's doing.

I managed to solve it. Thank you.


text:
How do I adjust my jig so that it can accept larger diameter wire?
I am building Malt Whiskey's LED cube and need to adjust his jigs he created to solder the LEDs. He is using .65mm wire and I am using .8mm. The large holes in the model below are for the LEDs and there are 8 vertical channels for the wire. There are also a couple of rows to solder the wire horizontally. How do I select all of the channels and then make them bigger to accept larger diameter wire?
My blend file:
Thanks!

Hello could you please show a screenshot of the object and highlight the parts that you want to scale?

Switch to transparency with AltZ, select the 8 series of slots, in the Transform Pivot Point panel choose the Individual Origins option, scale 1.231 on X (SX1.231):

I'm looking to increase the diameter of the channels for the wire. The LEDs seem to be fine.

The wire channels run parallel to the LEDs and run the full length of the jig. There are eight channels - two for each LED.

I've edited, does it answer?


text:
Why won't my boolean difference modifier work?
I have a cube that I am cutting two holes into. I put in a cylinder and duplicated the cylinder. I then made a boolean modifier of the first one and it worked. The second one doesn't. I've recalculated normals and not sure where to go from here. (2nd day of blender newb).
My blend file:

Look at the object you're using as boolean object, there are 2 separate cylinders, you need to bridge them otherwise it won't boolean the cube:


text:
Keep material strength while scaling
I'm having a little trouble with something.
I have let's say a hollowed cylinder (or pipe) with an outer diameter of 50mm and an inner diameter of 40mm. So the wall strength is about 5mm. If i scale up the diameter (x+y), it also scales up the wall strength. Is there any way to prevent that?

Hello, what "strength" are your referring to?

i am pretty sure he means the wall thickness

Oh OK so he could also use a Solidify modifier I guess

if you don't mind using geometry nodes, you could use this node setup:

to get this:

i think an even better solution is this (because of much better performance):


text:
Fluid Simulation Low Quality When Dropping on Object
The gold fluid when drops on the object creates meshes (or weird bumps) at point of contact. Even when I bump up the resolution to 700 the edges of the fluid are still not completely smooth. Smoothing and subdivisions are applied which help a bit but not a lot. What can produce smooth flow of liquid when it flows on the object without creating those meshes and rough edges?

First it would be great to not only show the settings of the domain, but all fluid objects that take part in the simulation. And the effector object on which the liquid is flowing - what are the settings of that? How did you create it, is it a high density mesh, is it using a Subdivision Surface and Displacement modifier etc.? And what is the order of the modifiers?

what most people don't understand: the resolution value alone says nothing about the quality of the simulation. It's like you say my plane is 2x2 miles big so my volume has to be big. Nope. It depends on the height as well. And the same is true for resolution + domain size. so pls provide blend file so we can check it out. I just can assume that you have a ridiculous big domain.

I completely understand your concern about the domain size being too big. Although i had figured that the size may be causing the issue, I'm still finding it hard to get to the core issue. What I hope to achieve is gold-like viscous fluid flowing inside the cracks of the collider object.

Now there are no modifiers applied to the effector object but the fluid seemingly reacts as if it's colliding with a low mesh object. For you to examine the settings, I'm attaching download links to the blend file and simulation cache (if you need to see the baked simulation).
Blend File: https://we.tl/t-4HlPF4NuSW
Simulation Cache: https://drive.google.com/drive/folders/1UnCH5BIAymMm3deLQ8sedkiU6FwNHmfc?usp=sharing


text:
Visual artefact in viewport
Pretty new to blender, but i've tried to find a solution and came up blank (lots of other types of artifacting obscuring search results).
Below is my view of just a default cube. It's very annoying to see what i'm doing when getting more complex objects involved...
How can I clean this up? AA just 'smoothes' the edges of the artefacting :p I'm on Desktop 3600X + 1080Ti, so performance should be there.
Kind regards and thanks in advance!

Can you please share your blend file?

In the N panel > View, try to change the Clip Start and End values

Looks like some kind of OpenGL error. Try enabling "High Quality Normals" under Render Properties > Performance. Also make sure your graphics drivers are up to date.


text:
Is it possible to use single pointer to assign on multiple modifers' Pointer Properties at once?
Bear with me, I am still new to python in blender, I apologize, I am not very good with words or is capable of explaining the issues I am having or solutions I am looking for. So instead of struggling with words, I'll use illustration at most of time.
I started off with creating Panel that displays two pointerPropteries coming from Array and Curve modifier.

...and the script.
class PROJECTX(bpy.types.Panel):
    """Creates a Panel in the Object properties window"""
    bl_label = "PANEL"
    bl_idname = "POINTERTEST"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = "PJTX"

    def draw(self, context):
        layout = self.layout
        scene = context.scene
        col = layout.column()

        col.prop(bpy.context.active_object.modifiers[r"Array"],'curve', text=r"Curve")
        col.prop(bpy.context.active_object.modifiers[r"Curve"], 'object', text=r"Curve Object")

Now, Instead of two PointerProperies inside UI panel, I was hoping I could use single pointer. I was wondering if its possible to add operation that can have single pointer from Panel to assign direct to both modifiers' (array and curve) pointer at once whenever it pick curve in the scene? If so, how could I write a script for it?

I was looking at layout.prop_search() which I picked up from https://blender.stackexchange.com/a/101301/142719 and https://docs.blender.org/api/current/bpy.types.UILayout.html and thought maybe this can be used in Panel and assign directly to pointers in both modifiers whenever it pick curve in scene. Unfortunately I must admit I don't have better insight on .prop_Search() or PointerProperites since there aren't sufficent information on this. I was hoping I could collect some information to get me started. Any suggestions? Thanks in advance

Try to create a update() function in your Properties. It will run the function when the Properties value changed.

I am not sure I get you... can you elaborate?

Sync Data:
import bpy
from bpy.app.handlers import persistent

@persistent
def upd_fn(dummy):
    try:
        print("-- update --")
        mds = bpy.context.active_object.modifiers
        mds[r"Curve"].object = mds[r"Array"].curve
    except:
        pass

class PROJECTX(bpy.types.Panel):
    """Creates a Panel in the Object properties window"""
    bl_label = "PANEL"
    bl_idname = "POINTERTEST"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = "PJTX"

    def draw(self, context):
        layout = self.layout
        scene = bpy.context.scene
        col = layout.column()
        col.prop(bpy.context.active_object.modifiers[r"Array"],'curve', text=r"Curve")

bpy.app.handlers.depsgraph_update_post.append(upd_fn)

def register():
    bpy.utils.register_class(PROJECTX)

def unregister():
    bpy.utils.unregister_class(PROJECTX)

if __name__ == "__main__":
    register()

yes, it is updated.

Thank you for sharing... Very interesting, Sync data is something that I'd look into.

You can add a custom property to bpy.types.Object that holds a pointer to a curve, and use the update method to dynamically update the object's modifiers.
import bpy

def update_my_curve(self, context):
    array = self.modifiers.get("Array")
    if array:
        array.curve = self.my_curve
    curve =  self.modifiers.get("Curve")
    if curve:
        curve.object = self.my_curve

class MOD_PT_Curve(bpy.types.Panel):
    """Creates a Panel in the Object properties window"""
    bl_label = "PANEL"
    bl_idname = "POINTERTEST"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = "PJTX"

    def draw(self, context):
        self.layout.prop(context.active_object, "my_curve")

def register():
    bpy.utils.register_class(MOD_PT_Curve)
    bpy.types.Object.my_curve = bpy.props.PointerProperty(
        type=bpy.types.Object,
        update=update_my_curve,
        name="My Curve",
        poll=lambda self, object: object.type == "CURVE",  # Filter only curve objects
        )

if __name__ == "__main__":
    register()

Very insightful and interesting!  That's something I've always want to look into for a long time. Thank you for taking time to share with me.


text:
Align Active Object to Curve based on Eyedropper
FYI, this is based on my old question in previous post Is it possible to use single pointer to assign on multiple modifers' Pointer Properties at once?. Now, for my learning and experiement purpose, I wanted to continue to use same script except adding few new string inside. I've encountered some issues and strugging find solution.
The goal was to get active object (Sphere) simultaneously aligned to curve's origin location after picked up curve with eyedropper.

With this single string that pasted inside blender editor and run test...
bpy.context.view_layer.objects.active.location = bpy.context.view_layer.objects.active.my_curve.location

...It was succesful, the sphere got aligned to curve's origin location.
After adding almost exacly same string inside Panel class (class MOD_PT_Curve(bpy.types.Panel) , It didn't work. I am getting error...
import bpy

def update_my_curve(self, context):
    array = self.modifiers.get("Array")
    if array:
        array.curve = self.my_curve
    curve =  self.modifiers.get("Curve")
    if curve:
        curve.object = self.my_curve

class MOD_PT_Curve(bpy.types.Panel):
    """Creates a Panel in the Object properties window"""
    bl_label = "PANEL"
    bl_idname = "POINTERTEST"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = "PJTX"

    def draw(self, context):
        self.layout.prop(context.active_object, "my_curve")

        ## NEWLY ADDED STRING -------------------------------------
        active_obj = bpy.context.view_layer.objects.active
        picked_curve = bpy.context.view_layer.objects.active.my_curve

        active_obj.location = picked_curve.location
        ## -------------------------------------------------------

def register():
    bpy.utils.register_class(MOD_PT_Curve)
    bpy.types.Object.my_curve = bpy.props.PointerProperty(
        type=bpy.types.Object,
        update=update_my_curve,
        name="My Curve",
        poll=lambda self, object: object.type == "CURVE",  # Filter only curve objects
        )

if __name__ == "__main__":
    register()

...And the error from console show
AttributeError: Writing to ID classes in this context is not allowed: Sphere, Object datablock, error setting Object.location

Yes, I know and I believe it was incorrect way to do this, since I am still learning blender-python. I wasn't sure what other methods I could use to solve this. I need help and your help would be greatly appreciated.

Avoid placing heavy loads code in draw()
The code in draw() function will excuite Frequently.
import bpy

def ret_first_curve_md(mds):
    for md in mds:
        if md.type == "CURVE":  return md
    return None

def update_my_curve(self, context):
    print("-- update --")
    if self.my_curve is None:           return   # can't get None.location
    if self.my_curve.type != "CURVE":   return   # can't pick a non "CURVE" object for curve modifier

    obj     = bpy.context.object        # get active object
    mds     = obj.modifiers             # object's modifiers store here
    md      = ret_first_curve_md(mds)   # get first curve modifier

    if md is not None:
        md.object       = self.my_curve
        obj.location    = self.my_curve.location
        print("-- success --")

class MOD_PT_Curve(bpy.types.Panel):
    """Creates a Panel in the Object properties window"""
    bl_label = "PANEL"
    bl_idname = "POINTERTEST"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = "PJTX"

    def draw(self, context):
        self.layout.prop(context.active_object, "my_curve")

def register():
    bpy.utils.register_class(MOD_PT_Curve)
    bpy.types.Object.my_curve = bpy.props.PointerProperty(
        type=bpy.types.Object,
        update=update_my_curve,
        name="My Curve",
        poll=lambda self, object: object.type == "CURVE",  # Filter only curve objects
        )

if __name__ == "__main__":
    register()

Wow! this is so clean and clear.  Everything is in order, I can now understand how this work. Thank you very much for this. For me to get better understanding or improve in for loop, function, how to avoid heavy loads in draw() or anything that I need to know how exactly you did, where would you recommend me to learn better? It was hard me to find good steps on blender-python. Once again, thank you for help.

If you want to learn python better, there are a lot of tutorial in the internet, even the video.

Oh yes, I am sure there are a lot of Python tutorials out there. but not the python-blender  tutorial together.

I think the common way to learn blender api is see the blender API Documentation. https://docs.blender.org/api/current/index.html

Thank you... That's something I will look into.


text:
how do i get rid of this "ridge" completely, without really changing the shape of the mesh?

how do i get rid of this "ridge" completely, without really changing the shape of the mesh?

Hello please share your file: https://blend-exchange.com/

Make sure there isn't an internal face down the centre of the mirror modifier.


text:
How to split vertices by vertex color
I'm using vertex colors, since that's what my minimal game engine understands, but it only understands them on a per-triangle basis, and cannot interpolate across a triangle.  Blender internally seems to store vertex colors per-face, but when exporting to OBJ or PLY, it seems to merge vertices with their colors.
I don't see any option to make OBJ export with duplicated vertices for different colors, and I don't see any way to make it export the vertex colors as a vc flag instead of v.
Also, PLYs don't seem much better.
I have an idea for a work-around.  Is there any way to duplicate vertices in-place, so there is a unique vertex per color?

This was far simpler than I expected.  I just have to select all in edit mode, then Mesh > Split (Alt M) > Faces by Edge
Then when exporting it exports each each vertex uniquely.


text:
A way to pass a global value to all geometry nodes modifiers in a file?
Let's imagine that many objects in a Blender file / project are using a resolution/density/whatever value.
For example, the 'count' parameter in the 'Fillet curve' node. It would be useful to control that value globally somewhere.
This would make working iteratively on the scene quicker by setting this global value to a low number and then raising it when one wants to render with full details.
Is this something that is possible, and if so, how can it be achieved?

Right now there are no nodes to pull a property from the current scene and pass it to a geometry node tree. But you should be able to use a driver to the same effect : create a new custom property on the scene (Scene Properties-> Custom Properties), give it the name, type and range you want, right-click on it, copy as new driver, then right-click on the property you want to control and paste driver. Use the drivers editor to change the mapping if necessary.
You'll have to copy and paste the driver on any new object.

Just tried, it works, thanks

Another method is to use a node group:

Just click on Fillet Curve and make a node group out of it. Unplug the radius and give it whatever radius you like.
Then replace all fillet curve nodes by this node group.
This might be the quicker way if you are adding new fillet curve/node group to your tree because you don't have to add the driver for every node you add.

This also works, thanks


text:
How to get correct curves from Mesh to Curve node?
In the example file below, we have a simple profile created with a bunch of vertices forming a continuous edge.
Using the help of geometry nodes, I want to apply a fillet to smooth out the shape, make an offset extrusion, and then extrude vertically.
All of this works correctly if I switch the "Resample Curve" node from "evaluated" to "count." Otherwise, the extrusion becomes distorted, as you can see in the model at the center. There are indentations and spikes protruding below. So, resampling is a quick fix.
However, resampling a curve and maintaining good details require creating many more polygons, which are not really needed. Ideally, the "Resample Curve" node should not be necessary.
How can we address this issue for the sake of elegance, beauty, and performance?

Example file

When filleting the curve you generate points on top of each other which causes the spiky effect.
To resolve it you need to temporarily convert the Curve to Mesh and Merge by Distance the overlapping points with some minimal distance value, then convert back the Mesh to Curve and proceed with the next steps.
Note: You don't need the Resample Curve Node with Evaluated option as it is of type Poly (it is muted on the screenshot to show it is not required)

That worked perfectly, thanks

You're welcome.

Use this method if you, for some reason, do not want to convert the curve to mesh to merge by distance, and then convert back to curve
$\hspace{15pt}$These distortions arise from sequences of two or more points sharing the same position. In the file you provided, they are created by the Fillet Curve node when the rounding of two points touch:

$\hspace{15pt}$Or when a point has no curvature:

$\hspace{15pt}$To solve no curvature points, simply remove them from the base mesh.
$\hspace{15pt}$To solve rounding touch, after the Fillet Curve, you will need to delete at least one of the points that share a position. To do that, check if the next point is at the same position of the current to delete it:

Result:

Hi, your solution is ingenious, thanks for taking the time to provide such an elaborate answer. I have adopted the simpler one, but please can you explain me in what situations this is the way to go? What are the potential reasons to "not wanting to convert the curve to mesh to merge by distance, and then convert back to curve"?

@crucchi in your case I see no necessity for preserving the curve, but preserving the curve would be prefered if, further in the node chain, one would use attributes like Radius, Handle Positions, Tilt or other spline attributes that would otherwise be lost in the conversion or need to be captured and re-set after converting back to curve.

@crucchi It is also faster to compute, but unless someone has splines with hundreds of thousands of points, there's no big difference in time.

I understand, thanks


text:
How to calculate the distance between vertices couples and show it as text
I wish to create a function using geometry nodes that calculates the distance between consecutive vertices of a mesh, and adds text depicting the calculated distance between each pair of vertices, exactly at the center of the segment they form. I imagine I need to convert the mesh into a curve first, use the 'Geometry Proximity' node somehow, and also use the 'Value to String' and 'String to Curve' nodes... But this should be done in a loop, probably using fields, for every pair of vertex. I'm not sure how to proceed, normally I would include an example file, but I haven't been able to put together anything that makes sense. How should I go about this?

That can be optimised a bit if we only use the 11 needed base instances (meaning number from 0 to 9 and the dot).
The principle is the same:
Calculate edge lengths.
Iterate over the edges and sample lengths and positions.
Place instances calculated from the length at the edge position.

Now instances are first made from the "0123456789." text.
Its an iteration again, over the given text so that we create one text curve per character.

Then, another iteration from the length converted to text in order to associate the length text from the instances created above.

Result on a subdivided Suzanne:

 (Blender 4.0)

+1 really nicer solution!

Thank you, I really appreciated the feature that makes the text size proportional to the edge lengths, moreover, it was my intention to include it from the beginning but I did not specify it to avoid unnecessarily complicating the question and to get straight to the point. This was exactly what I needed. I was surprised to see how using more nodes makes the node tree more efficient; I would have expected the opposite, although I understand that this approach in the algorithm allows for saving on processing

with this node setup:

you get this:

Note: Try this out with a simple geometry. It is for sure not the
fastest solution, so for suzanne it can take a while

Note2: I recommend using a vertex group or another limiting factor so
that you show only "a few" distances for performance reasons.

Thanks, I manually recreated your node tree to learn and to better understand @lemon modifications. It worked perfectly, but when I tried the optimized solution from lemon I saw how much faster it is on my computer, and I am going to accept his answer because of this. Thanks very much for your time and for what you teached me and everyone