text:
How do I properly update an application handler?
In a project I have a very simple application handler that is executed when the current frame change:
import bpy

def frame_handler(scene):
    print("Running frame handler version 1.")

if frame_handler in bpy.app.handlers.frame_change_pre:
    print("Removing handler")
    bpy.app.handlers.frame_change_pre.remove(frame_handler)

print("Adding handler")
bpy.app.handlers.frame_change_pre.append(frame_handler)

print("Number of handlers: " + str(len(bpy.app.handlers.frame_change_pre)))

Adding the handler works fine and it’s executed as expected. But let’s says I want to update my handler to version 2. If I change to the code and run it again I will now have two handlers. When the handler is executed I see that both the old and the new version was running.
In my script I have tried to detect and existing handler and remove it, but clearly that doesn’t work. How do I do that?
My best solution so far is to execute bpy.app.handlers.frame_change_pre.clear() but that feels like cheating :-)
I’m using Blender 2.80 RC3.

Look at the function names and modules
If a function added to handler has a namespace it can be removed quite simply, as shown in the register and unregister methods in and addon.
def foo():
    print("bar")

def register():
    handers.append(foo)

def unregister():
    handlers.remove(foo)

if __name__ == "__main__":
    register()

The method has that import scope., if however it is added in main thread via a test script then editing to call unregister, rather than register,
if __name__ == "__main__":
    unregister()

foo now compared to then is a totally different foo and will throw an error
Recommend looking at the functions name instead.
EDIT  the module f.__module__ tested against __name__ would be the ideal way to remove these.
# handlers added to main thread

my_handlers = [h for h in bpy.app.handlers.frame_change_pre
    if h.__module__ == "__main__"]

The old code uses a test on the functions names.
import bpy

def foo(scene):
    pass

for i in range(4):
    bpy.app.handlers.frame_change_pre.append(foo)

# handlers named "foo"

foo_handlers = [h for h in bpy.app.handlers.frame_change_pre
        if h.__name__ == "foo"]

print(foo_handlers)

for f in foo_handlers:
    bpy.app.handlers.frame_change_pre.remove(f)

foo_handlers = [h for h in bpy.app.handlers.frame_change_pre
        if h.__name__ == "foo"]

print(foo_handlers)

I often use some silly prefix like def ST_____foo(): and remove all handlers with if f.__name__.startswith("ST____")


text:
Is it possible to access an array in a custom property in a driver?
In a new project I've add a custom property to the default cube:
bpy.data.objects["Cube"]["positions"] = [4,3,2,1]

Is it possible to access this array from a driver, so that on every frame a different value is used?
If I add a driver it is possible to access a value from a fixed position:

But I'm not able to use frame to specify the index, Blender complains about the syntax:

I've also tried to use a frame handler to set a new property with the value to be used with the following Python script:
import bpy

def frame_handler(scene):
    currentposition = bpy.data.objects["Cube"]["positions"][scene.frame_current % 4]
    bpy.data.objects["Cube"]["currentposition"] = currentposition
    print(currentposition)

bpy.app.handlers.frame_change_pre.clear()
bpy.app.handlers.frame_change_pre.append(frame_handler)

The code is executed every time the frame position is changed and the value is set to the custom property successfully. I'm also able to use this value in a driver - but when the value is changed the driver isn't :-( It looks like this is a bug: https://developer.blender.org/T66392
Is there some other way to solve this? I could work around these limitations but changing objects directly in my frame handler, but I'm would prefer to use a driver.
I've using Blender 2.80 RC3.

Use self.
Assuming the driver is on the same object as property
Have set a custom property on the object
>>> C.object["xxxx"] = [4, 3, 2, 1]
>>>

Scene current frame is known to the driver namespace as "frame", and can be used in expression without setting up a scene.frame_current driver variable for it.
Set use self of the driver to true, and self is the driven object in expression.

self["xxxx"][int(frame) % 4]

Driver variables by default are floats, hence the need to typecast frame
Getting Fancy
Can add pretty much anything to the driver namespace.
A simple wrapper class with a move method using the "xxxx" custom property if defined else use a default.
import bpy

class Mover:
    def move(self, frame):
        l = self.ob.get("xxxx", [0])
        #print("debug...", ob.name, frame)
        return l[int(frame % (len(l)))]

    def __init__(self, ob):
        self.ob = ob

bpy.app.driver_namespace["Mover"] = Mover

Can now add the driver to any object
Mover(self).move(frame)

or since frame is in namespace could grab its value, with a default juuuuust in case
frame = int(bpy.app.driver_namespace.get("frame", 0))

and the driver can become
Mover(self).move()

The possibilities are endless.
Note when using self in drivers the slow expression warning is reported, for what are the simplest of expressions.
Use self and the slow python expression

So int(frame) instead of frame basically solved it. Dynamically typed languages tricks me all the time…

The solution with the Mover class is clever. But to get it to work I needed to enable Auto Run Python Scripts in the setting.

Cheers, forget about that setting.  Assigning an instanced class to namespace, instead of a class and  instancing like in example, provides a  handy way to keep tabs on driven objects and there data.

You can do it with two variables in the driver:

One to get current frame from the scene properties (f)
One to get the positions array of the cube (var)

Then the driver formula can be var[f%4].
Note that if the expression fails once for some reasons, you'll need to click on "update dependencies" again.

Thanks, this work almost perfectly :-). For some reason Blender doesn’t show the animation properly if I open your file and press the Play-button. But if I step one frame at the time or rendering the animation if works fine. However, if I change the expression to var[int(frame)%4] everything is fine :-)

@batFinger answer is better and more complete anyway ; )

source: Stack Exchange

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

sort: votes


text:
BGE Animated rig freezes when rig goes off-screen... Can I make it not?
I have an animated enemy chasing the player. On the enemy's rig, I save the animation's current frame to a property. I use this property to cue sounds.
It works fine when the player is looking at the enemy. However, when the player turn's their back and the enemy goes out of view, the animation freezes. I can tell that it has frozen because the property I am saving the current frame to stops incrementing. When the player looks back at the enemy, the animation starts from the beginning.
I'm assuming that this is something Blender does intentionally for performance reasons. Can I make it stop?

Right now, I have found a hackish workaround that involves copying keyframe values from separate empties that just count. I'd rather know a way to have Blender not freeze my rig, though.

If it helps, there are numerous functions to get/set/activate actions at run-time.
KX_GameObject.playAction()

KX_GameObject.stopAction()

KX_GameObject.getActionFrame()

KX_GameObject.getActionName()

KX_GameObject.setActionFrame()

KX_GameObject.isPlayingAction()

I did try those, but the animation still freezes outside of the camera's frustum, even if I attempt to set the animation's action frame directly with setActionFrame().

Unfortunate. I don't think I have any more ideas for a solution. Sorry. :(

Any animation that is not seen by the active camera is culled, this is called frustum-culling. As for a solution for it, I am not 100% sure this is a solution, but you can disable frustum culling for a particular camera at run-time with the following code. KX_Camera.frustum_culling
Which is layman terms looks something like this.
import bge

def main(self):

  self.owner.scene.cameras["Camera_Name"].frustum_culling = False

There is also another option called KX_Scene.activity_culling. Again, I am not sure exactly if this only applies to object logic, and not also object animation. The code for it can be found below.
import bge

def main(self):

  self.owner.scene.activity_culling = False

Thank you for this! Unfortunately, it looks like the animation is culled anyway. My workaround works reasonably, though.

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


text:
BGE Mouse Look Min and Max Bounds Changing?
I have written a script in python that successfully saves and loads the position and rotation of my player cube and camera for use between scene transitions. However, something is going wrong with the minimum and maximum rotation values of the mouse look actuator. I have a feeling that I should be adjusting those values in python at the same time I change the camera rotation from the save, but I'm really hung up on this.
Here is the code I wrote:
import bge
from bge import logic as g

def save():
    s = g.getCurrentScene()
    pos = s.objects["player"].position
    rotP = s.objects["player"].worldOrientation
    rotC = s.objects["player_camera"].localOrientation

    g.globalDict["pos"] = [pos.x, pos.y, pos.z]
    g.globalDict["rotP"] = rotP.to_euler()

    g.globalDict["rotC"] = rotC.to_euler()

    print("SAVED")

def load():
    s = g.getCurrentScene()
    s.objects["player"].position = g.globalDict["pos"]
    s.objects["player"].worldOrientation = g.globalDict["rotP"]
    s.objects["player_camera"].localOrientation = g.globalDict["rotC"]

    print("LOADED")

It's as if these values are being changed by something:

Thank you for your time. I'm really stuck on this.

You should use the actuator.angle attribute, or actuator.angle[0] if only the X value is needed. Here's a example script I made and test file attached here.
import bge

from bge.logic import expandPath
from ast import literal_eval

def main(cont):

    # Objects
    own = cont.owner

    # Sensors
    S = cont.sensors['S']
    L = cont.sensors['L']

    # Actuators
    MLook = own.actuators['MLook']

    # Properties
    path = expandPath('//save.txt')

    data = {
        'pos' : list(own.worldPosition),
        'rot' : list(own.localOrientation.to_euler()),
        'mouse' : MLook.angle
        }

    ### PROCESSING ###
    # Save
    if S.positive:

        with open(path, 'w') as opened_file:
            opened_file.write(str(data))
            print('Saved data to', opened_file.name)

    # Load
    if L.positive:

        try:
            with open(path, 'r') as opened_file:
                data = literal_eval(opened_file.read())
                print('Saved data to', opened_file.name)

            # Set obj data
            own.worldPosition = data['pos']
            own.localOrientation = data['rot']
            MLook.angle = data['mouse']

        except:
            print('Cant load saved file')


text:
How to return view window back to original location
How can I return my view window back to the original location?
Specifically, I want to have options panel to the right of the view window.
Thank you!

Look here: Workspaces and use the Next button at the bottom to see more detail. Should answer your questions.


text:
Snowmobile path creation
I tried a lot of times and different ways to create my path. Its like a tank path.I didnt make it. Just tired to trying a lot of times because when i move my vehicle path deforms.Can someone help me to create a snowmobile path correctly ? the problem is this
 i can't solve this its always deforming if i move it.Can someone help?

Confess, I'm unsure of your problem, but can this help? https://blender.stackexchange.com/questions/108834/tank-tracks-treads-breaking-when-rotating-hull/110070#110070

To add to the above, the shape of the tank tracks were distorting and even breaking up when moved.  The procedure set out at the link, fixed the problem.  In your case there'd be no 'tracks' or animation around the curve.  You just have to move it with the circular Empty.  Parent the entire model's parts, including the curve to that and drag the Empty for movement.

@Edgel3D are you want to say model the path and animate the movement ?

@Edgel3D ''To add to the above, the shape of the tank tracks were distorting and even breaking up when moved'' Yes !

@Edgel3D omg looks like it solved.What a site ! its my first ask and answered very quickly. lel . I hope i will dont come back to this question.


text:
How to enable auto smooth option for unreal engine?
When i export my object into ue4 it looks awful without auto smooth option
I see auto smooth is disabled in unreal engine. Is this possible to enable auto smooth for unreal engine ?

I have solved the problem. Click here if you have the same problem.
https://forums.unrealengine.com/development-discussion/content-creation/1630503-how-to-enable-auto-smooth-option-for-unreal-engine-need-immediately-help-please

You need to set the Smoothing to Face under Geometry when you export FBX.

not this. İt's only for smoothing. İt doesn't includes auto smooth. Already tried this way

Then it's something on the import settings in unreal that is missing.

already checked :( still no solution.

Strange... it works for me every single time.

no no no it works! But it doesnt takes the auto smooth which under Normals tab.

can you show me please ??

@trolltime lol...

@MichaelBenDavid what the ?

Ok so i got a couple of solutions for that because i had the same problem, and it was really hard information about it and i want to contribute with more people using blender. So here we go. (this are aproaches for ue4 from diferent people)
Option 1. Generated Smoothing and TSpaces in Blender
In exporting settings in Geometry Tab set Smoothing to >> Face and select Tangent Spaces. Important method for this object must be Ngons free and have clean uv’s. When importing in Unreal Engine 4, select Normal Import Method to >> Import Normals and Tangents. This method let you keep Blender smoothing with calculated normals and hard edges.
Source https://www.multipainkiller-studio.one/dev-tips/export-settings-from-blender-3d-to-unreal-engine-4/
Option 2. Triangulate Before export
.."because of triangulation, different programs does it in a different way. That is why in a program where I bake it looks ok. I triangulate it before export and now it looks fine everywhere".
Source From blender to unreal smoothgroup and shading
Option 3. Mark edges Sharp (not so sure about this one but may work for someone)
Make sure auto smooth is set off, just use normal smooth, and that there are no modifiers on the mesh. Now with sharp edges of your model marked sharp, export the fbx with smoothing set to edge.
Source https://forums.unrealengine.com/development-discussion/content-creation/26005-blender-same-model-but-different-shading-quality
Option 4. With Auto Smooth
Mark Sharp edges with auto smooth enabled in the normals section of the object. Set the smooth angle to be 180°, and when exporting set to "normals only".
Option 5. Importing From Unreal
If you are importing from blender to unreal, and get the degenerate tangent base problem check this
Blender weird shading
..
(cant upload images right now, but i´ll hope to improve the answer later. Sorry if broke any rule, and of course that my english it´s not the best)

or you can also use edge split modifier on your object and export it


text:
Volume Not Visible Against World Background
I can see the volume and distant haze in the viewport, but the render the volume is not visible against the black background, and nothing visible against the objects which look in constant haze.
Additionally, why is the volume so "black" despite being lit by 3 light sources?

I was sure to check to make sure the background wasn't transparent:

have you increased the number of bounces in your Render settings?  By default the number of bounces for Volumes is set to 0. (Scene settings -> Light Paths -> Max Bounces)  EDIT: I just realized you have those settings open in your first screen shot, and indeed it's set to 0! Try increasing that.

Thanks a lot! Will give it a try. Also figured out the weird haze issues between density. The emissions somehow got nudged and was at 0.002 The preview only showed 0.0 so I didn't realize it was above 0.

I think I may have solved it. I was adding procedural stars, and was still having the same issue, until I finished the tutorial and made the background not absolute black, but a little brighter, raising V value to 0.005, and when I rendered; bam, actual density was visible and more distant haze (though that is a bit strong).

If your volumetrics are showing in the viewport but not in the render in cycles: Delete the camera you are using and re-add it, then try the render.


text:
Delete Mesh by Material
Is it possible to delete a part of a mesh by its material? And how?
For example, I have a tree that I want to add snow to. But it comes with cards for foliage. This will not work with 3DM Snow or Real Snow with any desired results.

Though on a side note, if you know how 3DM/Real Snow could work with cards and look pleasing I'd be interested too but from my logic I don't think it would ever look nice.

To delete a part of a mesh by its material, you have at least two options.
For both to work you'll have to first enter edit mode (press Tab).
First option is to select by material. Here you can see where to find this command:

After running this command, you can press Del key, and select delete faces from popup menu.
Another option is to use separate by material. You can find it here (or press P in edit mode):

When you have separated part of your mesh into another object, you can do whatever you want to it, like delete it.

Thank you. Just what I was looking for! The second bit is also needed in my workflow so you answered more than one question. Thank you again.


text:
Scale Texture in XYZ with Math Nodes
I would like to take textures and procedurally scale them with math nodes, not mapping nodes to re-use easily similar to other programs scale input nodes. I can't seem to find anything on this. I found rotation topics, but not scaling.

If you mean to do this in the material setups, you have to modify the coordinates one way or another in order to scale.  The usual way is to feed the appropriate output of a Texture Coordinate node to the mapping node, because it has all of the transforms necessary for scaling.
If you don't want to use a mapping node, you have two alternatives:

Use a vector math node to perform the scaling, for instance:

Use a Separate XYZ node to separate out each of the 3 dimensions, use a math node on each dimension to scale, and then use a Combine XYZ to recombine the coordinates:

Of course, in both cases you don't have to limit yourself to the obvious transform, and these techniques are often used to modify coordinates for various purposes.

Yeah, I'm aware of this. I am actually talking about doing the operation on a already completely texture/shader, like transform input shaders in other software, or scaling (geometry): https://en.wikipedia.org/wiki/Scaling_(geometry). Essentially transforming the 3D space of an already completed shader chain. Some shaders are getting hard to work with when doing Texture Coordinate modulation, as in the instance of one material, has 148 of them... It's far easier to do it once, at the end...

You've rather lost me.  You have to scale the texture coordinates inside the material.  Once that mapping is done by the material output node there's no changing it as a texture.  If you want to scale the object, then you do that.  Perhaps you need to scale your UV maps?

You can change it as a texture, as a texture can be supplied as a input, which is already altered via texture coordinates, and then it itself is used as texture coordinates. There must be a way to take the points of a texture and scale them as dilation. It's just not as simple as multiplying, as that would just multiply the noise values.


text:
Instances Scaled Weirdly
I am trying to add some "tank" like features to a geometry node based building. However, the tanks are being scaled weirdly despite trying to use a constant random value for X, Y, and Z inputs. To note, these tanks are instances on instances which are randomled scaled on X, Y, and Z seperately. Could this be why? Is there a way to fix this?

I have tried using the random value itself, and the combine XYZ, or none, and they are always randomly scaled independently on X, Y, and Z.

Have you applied the scale to the base object that has the GN modifier?

maybe add a 'Realize Instances' to your points before second 'Instance on Points' node, as points can carry transformations and you got them from random scaled instances...

@Blunder I did not, however, that did not resolve the specific issue.

@alambre The did the trick! Thank you.

you're welcome... see you can get rid of that combine xyz node if 3 values are the same

@WASasquatch It would be great of you to write a short answer to this and mark it as "Accepted Answer" so that this question shows up as solved. Thank you!

Wow, it's been months. Don't even have this project any more to relate the fix to the issue without just saying what was said here in the comments, which isn't much an explanation to solution. This is a topic for the archives. Also considering I don't understand exactly why it fixes the issue, it would be negligent to try and explain.


text:
Rig Soda Can Opening Tab
I need to animate a soda can opening. So far, I have used some shape keys to distort the flap on the top and etc, but it's not working very well, specially for iterations.
I am not good at rigging, so I was wondering if anyone could point me in the right direction to rig the opening tab in the can, to achieve an animation such as the following video:
https://en.wikipedia.org/wiki/File:%C3%96ffnen_einer_Getr%C3%A4nkedose.gif
Thank you very much in advance for any input!

Just a thought, the deformation of the tab will happen over a longer time, but deforming the flap and actually opening the can is very quick, possibly only a couple of frames.  It might suffice to change between two shapekeys on one manually placed intermediate frame.

@AllenSimpson You're right about the short duration and I have tried with shape keys only. The problem I'm having is that the flap deforms (shrinks &stretches again) when turning on the X-axis. Also, someone else will be working on this file later on, so I thought some form of armature would be best.

you should show us what you tried so far...

Why complicate thing? Just animate few transforms

My approach would be to use Softbody physics on the can and make the tab a Collision object (perhaps also with a softbody physics to bend the tab).  Something like (crudely modeled):

here's my example:
The can has mostly stationary vertices (as specified "stationary" in the SB "Goal" vertex group).  Or you could make the can top a separate object like a cap where the edges are stationary (Goal).

I'd be sure to define a sufficient number of vertices that have triangulated faces on the top of the can, so that the distortion is realistic, but not too many so that the simulation bake doesn't take too much CPU effort.  Then use Smooth Shading or possibly a Subdivision Surface modifier to make the rendering more realistic.


text:
Variable Solidifier Thickness
I have a honeycomb style wall and need to make some of the cells a different thickness than others. I have started by using a solidify modifier, to no avail. Is there a way to achieve this look:

I have simply added a cylinder with 6 sides, no top or bottom faces. Used a solidify modifier and two array sets to achieve the look, but all the rims still have the same thickness.

The solidify modifier has a Vertex Group input options which lets you factor the shell depth accordingly to the value. I see you're using Geometry Nodes in your project. Would you mind posting your node tree to make sure the potential answers really fit to your needs ?

does it have to be geometry nodes or would you also be satisfied with sverchok or animation nodes solution?

It does not have to be Geometry Nodes, but I suppose it would be better, considering the flexibility it will offer :) I have a solution for achieving the same visual result, but it's very manual work - i.e. create a grid of hexagons with array modifiers, then another array scaled down, then a boolean modifier...you get the drill :D

If your question has been solved, please be so kind and mark the answer that contributed to the solution as "Accepted answer" so that this question will not continue to be displayed as unsolved. Here you can find more information: What should I do if someone answers my question?. If you still haven't gotten a solution to your question, please be kind enough to address it. (...by the way, that goes for all the other questions you've asked here on BSE, which have thankfully been answered by the hardworking folks here) Thank you! ;-)

Ok, it is possible, although my "solution" is not very nice, because i use the mesh boolean node which is very slow in geometry nodes.
Basically my idea is this: i build a geometry nodes grid with cylinders with 6 vertices. Then i build another geometry nodes grid with smaller but higher cylinders, which i use a cutter objects for my first grid. By this i can scale (e.g. with proximity node) my cutter instances and so the hexagon will have different thickness.

Node setup:

+1 but your node setup is a bit too simple imho  :((

I can only do simple things…♂

This is amazing! Thank you so much for the input! I will definitely try it out :)

If my answer helped you, please click on the checkmark left of my answer. Thank you.


text:
Clear Glass on Transparent Background
What is the best setup for rendering a realistic-looking, clear glass bottle with transparent background in Cycles?
I am not getting the correct refraction, light reflections and etc and my bottle looks really flat, unrealistic and with strong white silhouettes.
Is there an optimal material setup, lighting setup or anything else that might help?
Thanks!

hello, maybe show your 3D scene, the material setup, maybe even share your file: https://pasteall.org/blend/

Hi :). Shooting glass is mostly about a lighting setup. Rendering in Cycles has many similarities to actual photography

@moonboots Unfortunately I cannot upload the file as it exceeds the size limit for that website :/ I was just wondering how to get good illumination on the bottle, without having too strong reflection rings and line on the glass...I forgot to also add that I have to render this in Orthographic front view, which def makes it harder to work with the light paths/rays..

at least show a screenshot so that we can see what kind of problem you are talking about? but you can share on another platform

you should not ask "opioned based" questions. These kind of questions will be closed soon. Maybe read https://blender.stackexchange.com/help/dont-ask

There is no optimal material setup and the lighting depends a great deal on what you want to accomplish in the scene.  as @JachymMichal says it's very much like setting up lighting in photography.  Take a look at this post to get an idea of what works and why it works.


text:
Blender keeps deleting linked libraries
I am working on a very big scene, therefore I have broken it down into smaller scenes, which then get all linked into one main file.
It works for a while. I can save, edit, re-open and no problem.
Then, all of a sudden, without me having done anything out of the ordinary to the file, next time I open it, all the linked libraries are missing.
The objects of these links still show, but the linked libraries are nowhere to be found. That means I cannot use the Edit Linked Library add-on, nor do the objects update in this main file once I save them.
Any ideas on why this happens and how to avoid it?
Thank you.

It happens to me as well with linked Character rigs.
I notice the path in which it looks for the missing files is actually a bad path that does not exist.
Do you happen to save into a different folder than the one where you originally created the first version of your file ?
Also are your save As settings set to [X] Remap Relative ? Mine are and without changing that It breaks all of a sudden, usually when I save to a new location which I thought was the whole point of remap relative.
So maybe there is a bug with the remap relative function ?


text:
Keep IK Controller Leveled
I am working with a robotic arm animation which uses an armature with an IK Solver. I need the tip of the robot (at the moment it is a polishing wheel) to always remain leveled. The default behavior when posing the controller bone is that the tip of the bone always follows the axis of movement, causing the polishing head to twist and turn. Is there any way to keep that polishing head always leveled?
Thank you.

This is a duplicate question, but it’s a duplicate of something I asked. Yes, thankfully you can easily limit how bones behave with IK. Go to the bone properties tab, and look for “IK settings.”

Thanks for the answer! Yeah, I already have that setup (albeit probably not correctly). The whole mesh is moving around as desired, except that I need the last bone/tip to remain level (in my case to the Y-axis). I just have no idea how to do that!

Oh, yes. I see. Well, have you tried enabling the rotation tracking thing in the IK constraint, or using a pole target?

I did the rotation thing within the IK solver, yeah. But the pole target situation is what is confusing me deeply! :P Perhaps that would be a solution! I have posted this same question on Reddit, with a little video: https://www.reddit.com/r/blender/comments/lt4eud/keep_ik_controller_leveled/

If I understand from the video what you're looking for, it seems that the last L shaped block is rigid, having only the wheel rotating, so it should work if you set the IK chain from its start, not from his tip: you can create a "master" bone for this whole object, lock its Z loc and X,Y Rot and use it as target of the IK chain, so that animating the master will always stay correctly on the floor, and the rest of the arm follows as IK.

That is an awesome answer! Thank you so much! It might just solve my problem :) Just a question though: Should i erase the whole IK setup I have now? And how exactly do I assigned this "Master" bone at the tip? Thank you again!

I think you can use yuor actual file until the equivalent of my IK Chain 1 bone, and set an IK constraint on it. In my example the rotor (wheel) bone is simply a child of the master bone.

Yeah, i have been tryin that and also creating one from scratch. I think it is working in principle but the problem is that my rig (robot) joints can only rotate on one axis (Y). In that way, my Rotor part keeps rotating like crazy because the IK chain cannot resolve the issue. Do you offer some freelance tutoring/coaching perhaps? i thought we could do a 1 or 2 hour tandem on this problem so i can finally solve it with some help :) Let me know if that would be a thing for you! Cheers!

Send me the .blend file to joshsanfelici@gmail.com. I think it will be a free 5 minutes problem solving. If you need some more infos we will have an agreement.


text:
Masking out Overlapping Instances in Geometry Nodes
I am an experienced Blender user but very beginner in Geometry Nodes.
I have an object onto which I am instancing small water droplets, using geo nodes. Maybe it is completely wrong but, to have more control, I have used 2 geo nodes modifiers - one for the very tiny droplets and one for the larger droplets.
Naturally, they now overlap at some points. Is there a way to call a sort of mask, where the 2nd geo nodes modifier would "mask out" the distribution in the first one?
Thanks!

You can try a vertex group to transfer data between both modifiers...
I used Geometry Proximity against first pointcloud -larger droplets- to generate the density mask, then use it to distribute smaller instances. You will need a decent resolution in your mesh, but can subdivide inside GN.
First add the vertex group to the mesh and then type its name as output / input in modifiers. It's a bit tricky though, and took me some time to get it working...

and this would be the generated weight map...

That seems like a really smart solution! Thanks for the input! I have however tried this, and it unfortunately doesn't work. The moment I apply the mask attribute to the second (small sphere) GN, it disappears and only the first one (big spheres) remains :/ Have you run into that issue as well?

you need to click the '+-' icon to switch modes and type the named attribute 'Mask', maybe that's your problem, it happened to me too... just uploaded a 3.1 blend here for you to test and see if it is an option

Awesome! That's great ;) Thanks! I've managed to get it working now. Not really sure what I did, but reconnecting some nodes did the trick. For now at least! haha Thank you very much for taking the time to help with this!!

I would love if this answer would be elaborated on. I really have no idea what to do when it comes to the vertex bit, and all you've shown is the node network for the last part of the answer.

@WASasquatch there's a blend file to download in comments... but I should improve the answer I guess, the question was about using 2 modifiers but a single one would do it too... also the vertex group is not really needed, it just helps to visualize the mask... the confusing part is after naming the attribute output, clicking on the cross icon toggle of second modifier to be able to input same name again

@alambre Oh thanks. I'll check out the blend file.


text:
How can I import an OBJ with Vertex Colors into Blender 3.2?

I've got an OBJ file with vertex colors, created by a machine learning script (PiFuHD). I want to get the mesh and colors into Blender. As far as I can tell, there's no way to change the output format of the script to include a separate MTL file. Exporting from Windows 3D Builder and MeshMixer (two programs I have that can read the vector colors) into the .ply format didn't include the color data.
Example of the format:
v -0.3317 -0.9479 -0.1019 0.3672 0.3232 0.3186
v -0.3316 -0.9479 -0.1038 0.3611 0.3151 0.3100
v -0.3316 -0.9477 -0.1019 0.3600 0.3144 0.3095

I tried to see if I could install this Addon to import them, but it's designed for Blender 2.8, and when I try to install it in Blender 3.2 nothing happens.
I want to be able to touch up the model, both mesh and textures, in Blender. I'm OK if I need to run this OBJ file through another program to get there, but I'm lost at where to go next. Everywhere seems like a dead end right now.

Can you update to Blender 3.3? The new official OBJ importer imports vertex colors by default.

@scurest Just tried that, using both the Wavefront (.obj) and Wavefront (.obj) (legacy) and I'm still not getting any color.

The new one is the one that does not say "legacy". Are you checking for a color attribute? The color attribute will be imported but the materials don't use it so you won't see anything special in Material view.

@scurest Ah, that was what I was missing! After adding a new material, I could change the Base Color to be a Color Attribute, and then the Vertex Color showed up. Although it seems that using this method locks me out of using other modifiers, like Subdivision Surface (Blender crashes), so I might need a way to convert it to another format first.

So I have two solutions now:
The first was the comment @scurest gave - upgrade to 3.3, and use the new .obj importer. In the Object Data Properties, under Attributes, you'll see "Color Vertex > Color" if it worked. Then go to Material Properties, create a new material, click the yellow dot next to "Base Color", and in the far left column choose "Color Attribute".
The second way I found was using MeshLab. Go to File > Import Mesh, then go to Render and check the Show UV Tex Param option. Nothing will show up yet, but it's vital to understand the next step. Filters > Texture > Per Wedge Texture Function. Click "Apply" with the defaults (we'll come back and change this later), which will make the UV Tex Param grid show up. Then go to Filters > Texture > Transfer: Vertex Color to Texture, and give it whatever name you want (this will be generate a .png file with the same name). Now the UV Tex Param actually has a texture. In my case that texture was too big and not lined up correctly. To fix this, we have to go back to Filters > Texture > Per Wedge Texture Function. Each function is how you want to move the x or y coordinates of the vertexes. For simplicity, I applied the same formula to all my X and Y values. Check the preview button before you move anything.
So here's my before:

And here's my after:

If you hit apply too early and get a messed up texture, don't worry about it, just focus on getting the silhouette inside the grid (the Per Wedge Texture Function box resets to it's default values each time you open it). After it's positioned correctly you can redo the Filters > Texture > Transfer: Vertex Color to Texture step to get the correct colors in the correct position.
From here, File > Export Mesh As and double check that the extension in the filename and the Save as Type match (I don't know if it matters much, but it kept trying to change it on me).
Here's the two meshes side-by-side in Blender. The Left is Meshlab, the Right is using Blender's Nodes:

Right off, I notice that the edges and faces on the Blender version are more noticeable due to the reflective nature of the material it created, while the MeshLab version had some slightly miss colored spots. I'm sure editing the Blender texture would take care of the glossy look, and I think MeshLab's issue came from not applying the same scaling to both X and Y, but it could be an issue with my texture itself that's only because the glossy shine isn't there. If it is a texture issue, Blender's Texture Paint can help fix it with the Mesh Lab approach, but won't be able to with the Vector Color.

Assuming that the linked add-on works as intended in Blender 2.8, which I have not checked, you could try the following steps:

Download and extract the portable version of Blender 2.8 (no installation required)
Install the add-on for Blender 2.8
Import the model with Blender 2.8
Export the model in a format the supports vertex colors, e.g. .ply
Import the properly exported model in your current Blender version.


text:
What's the correct context for bpy.ops.mesh.rip_move()?
I'm trying to write a script to rip and move the selected vertices of an object, but I keep getting an error that my context is incorrect. I'm writing this on Blender 3.3, but I suspect the context will be the same with newer version of Blender.

Here's my simplest test case that reproduces the error on the default cube scene. I've tried it both in Object mode and Edit mode. I have tried with bpy.ops.mesh.rip() instead of rip_move(), but still get the same error (and I need rip_move for my end project).
import bpy

# Find the default cube in the scene
my_obj = [obj for obj in bpy.context.scene.objects if obj.type == 'MESH'][0]
my_mesh = [m for m in bpy.data.meshes if m.name == my_obj.name][0]

rip_verts = [0, 1, 2]

# Select the mesh
bpy.ops.object.mode_set(mode='OBJECT')
bpy.ops.object.select_all(action='DESELECT')
bpy.context.view_layer.objects.active = my_obj
bpy.data.objects[my_obj.name].select_set(True)

# Deselect the verts (all selected by default)
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_mode(type='VERT')
bpy.ops.mesh.select_all(action='DESELECT')

# Select the verts. Counter-intuitively, you need to be in Object mode to select the verts
bpy.ops.object.mode_set(mode='OBJECT')
for index in rip_verts:
    my_mesh.vertices[index].select = True

bpy.ops.object.mode_set(mode='EDIT') # I've tried this commented out, and still have issues

# Copy/pasted rip_move command from manually doing the operation.
bpy.ops.mesh.rip_move(MESH_OT_rip={"mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "release_confirm":False, "use_accurate":False, "use_fill":False}, TRANSFORM_OT_translate={"value":(0.696373, -0.770531, -0.101068), "orient_axis_ortho":'X', "orient_type":'GLOBAL', "orient_matrix":((1, 0, 0), (0, 1, 0), (0, 0, 1)), "orient_matrix_type":'GLOBAL', "constraint_axis":(False, False, False), "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_elements":{'INCREMENT'}, "use_snap_project":False, "snap_target":'CLOSEST', "use_snap_self":False, "use_snap_edit":False, "use_snap_nonedit":False, "use_snap_selectable":False, "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "cursor_transform":False, "texture_space":False, "remove_on_cancel":False, "view2d_edge_pan":False, "release_confirm":False, "use_accurate":False, "use_automerge_and_split":False})

I wasn't able to get this simple example to work, but my full version of the code now works. I needed to add 'INVOKE_DEFAULT' as a parameter and call it from inside a class that extends bpy.types.Operator. Here's a rough approximation of what that looks like (not tested, just to give a rough idea).
class MyRipOperator(bpy.types.Operator):
    bl_idname = 'my_tools.rip_mesh'
    bl_label = 'Rip it'
    bl_options = {'REGISTER', 'UNDO'} # Enable undo

    def execute(self, context):
        # Select the verts you want to rip, just like the above example
        bpy.ops.mesh.rip_move('INVOKE_DEFAULT') # add whatever parameters you need after INVOKE_DEFAULT
        return {'FINISHED'}

```


text:
Relationship Between Rigid Body Colliisons and Animation Keyframes
I am working on an animation consisting of a pool ball being struck by
a cue stick and then picked up by a mechanical mechanism. I get can the
sequence of the collision and the animation of the crane to work. However,
when I change the LOC/ROT of the crane keyframes, the cue ball jumps up and the
collision no longer works. Not sure how they are related to fix. Thank You.

Did you make the cue stick to be a Rigid Body and did you check the Animated checkbox for the cue? I think you need to share the blend file.

When you want an object to be handled by the physics sim, you must untick Animated.
You tick Animated when you want to take care of the object's animation by yourself, like when it's lifted by the crane.
You can also bake your physics animation to keyframes and delete the keyframes from when the crane takes over.


text:
How is it possible to make a procedural snakeskin texture?
I've seen some posts like this one showing snakeskin procedural textures.
How is this possible? From what I've gleamed on reddit, a voronoi texture is used here? How would you morph that texture into a directional "scale" looking geometry?

Good question. Start by looking at his nodes: https://gumroad.com/l/sneks That particular artist (Simon Thommes) gives pretty much everything he releases away for free. Lots of good shaders to study on his gumroad.


text:
How can I use blender's python API from a Ipython terminal or Jupyter Notebook?
I would like to have a python notebook running on my localhost:8000 that i can execute bpy scripts with... and see the resulting change in my other monitor which is running blender.
Normally, I would have to import a script into the "Scripting - TextEditor" view and hit "run script".  Is there a way to bypass this interface?

This one maybe? https://blender.stackexchange.com/a/167390/73532

Updated answer
The Blender installation has a python version included. For windows version it is under the following location:

C:\Program Files\Blender Foundation\Blender {blender version}{blender version}\python\bin

Based on the pip installation method available here we can install the pip package manager as follows:
PS > curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
PS > $blenderFolder="C:\Program Files\Blender Foundation\Blender 3.5"
PS > $pythonPath="${blenderFolder}\3.5\python\bin\python.exe"
PS > $blenderPath="${blenderFolder}\blender.exe"
PS > & ${pythonPath} .\get-pip.py
PS > & ${pythonPath} -m pip install blender_notebook
...
  WARNING: The scripts blender-notebook.exe and blender_notebook.exe
   are installed in 'C:\..\AppData\Roaming\Python\Python310\
   Scripts' which is not on PATH.
...
PS > & $env:USERPROFILE\AppData\Roaming\Python\Python310\Scripts\blender_notebook.exe install --blender-exec="${blenderPath}"
PS > & $env:USERPROFILE\AppData\Roaming\Python\Python310\Scripts\jupyter-notebook.exe

See also:

Blender Notebook by cheng-chi
The Blender Notebook Tutorial
Blender Notebook Container

Previous answer
One of the most important things to be aware of is installing the correct version of the tools:
Using the current 2.91 Blender version we should use Python 3.7. We can install that using Anaconda3 2020.02 from exe, list of packages.
After that we need to install the blender kernel from here, using the following command in anaconda terminal:
python -m pip install blender_notebook
blender_notebook install --blender-exec="C:\Program Files\Blender Foundation\Blender 2.91\blender.exe"

Now, when we start Jupyter Notebook we can select blender kernel.
First, you need to import the Blender specific library bpy:
# blender related imports
import bpy

After that, we are able to use many examples, already available out there.
I've made an example Jupyter Notebook on this topic, available here
See the discussion and plans on updating blender's python version here.
Update:
Blender 2.93: Python was upgraded to version 3.9.1. link


text:
How do i select similar sides of a face loop
How do i select all faces going along the edge of this shape?
Is there an easier way than actually panning the camera around 360 degrees, and stopping intermittently to SHIFT+click another face into the selection????
This is so tedious to do when extruding faces then remapping the extrusion onto a UV.

^^^ Ideally I want a way where I can only select 1 face and it knows to 'go-along' all the connecting edges and loop back around and select them all for me to use.

Alt+Click around the edge doesn't work? (It does work from the mesh which you have created: https://imgur.com/2VwABjk)

it goes the other way... e.g it selects that big fat main face instead of the small side one

Choose the face with edge loop select Alt + LMB:

Click the side you want them to propagate, ideally on the edge (the red circle position).
Sometime it won't propagate correctly, the you might need to switch between face and edge select mode until one is working correclty. If none of them work, then their must be some topology issue that cannot treat those face as a loop (eg. got a diverse face in middle)


text:
How to take an image of text, and 'imprint' it onto a plane to create raised text?
If I have a black text on white background image... Is there a way to have a plane and then 'apply' the image to the plane, but where the black text is, have the mesh 'pop out' of plane to make it look like the text.
Kind of like "Brail" but actual text and not dots

After you have suitably divided the plane, you can

Use the image as the texture for a Displacement modifier,
Use the image as the height for a Bump map, or
Use the image as the height for a Displacement node (in Cycles)

This will give you a very sharp division between the raised and base height if the image is black and white.


text:
How to override where Save Versions (.blend1) files are saved to
I see via this question:
How do I get blender to stop creating so many files?
That we can alter how many files are saved, and can turn off the feature.
My problem is that I still want the feature, but I don't want the .blend1, blend2.... files cluttering up my immediate workspace.
Is there a way to override this autosave functionality so it puts all my .blend1 Save Versions in another directory.
Say. I'm Editing a file called MyScene.blend... every 2 minutes it saves not to immediate directory but to
~/BlendSave/MyScene.blend1
I'm sure this can be done with an external file monitoring program, but it would be nice for blender to provide this functionality out of the box. I would have expected in Preferences -> File Paths for there to be a setting for this? (Yes there is the 'Temporary Files' setting, but blend1 files still show up in immediate work directory)

At the moment there is no way to change this behavior. It's hard wired in the code.

not sure if a custom script like that could help your mission: https://superuser.com/questions/226828/how-to-monitor-a-folder-and-trigger-a-command-line-action-when-a-file-is-created

I sync the folder to Google Drive using the desktop app and rely on their file version history, then turn this feature off in Blender.  This does require you to fully upload every version of the file you want to have access to, which can become taxing.

I really don't think blender is doing anything more sophisticated than renaming your previous file before creating a new one.  E.g. If this file name already exists in the same folder, rename and create new.

I was also frustrated at there not being an option to redirect the automatic save versions to output to another path and the addon I found wasn't very customizable without manual work, so I created my own.
This addon allows setting a custom path for .blend file save versions to be moved to, with support for using environment variables and a few other variables such as the date, a UTC timestamp, the name of the current .blend file, etc.
The addon itself is pretty simple; it simply checks every time the current file is saved for the newest .blend# file with the same name, then copies it to the user-specified path, overwriting the oldest save version in the destination path if it's at the max amount of save versions (which can be set in the base Blender preferences at Edit > Preferences... > Save & Load > Save Versions). It then removes all .blend# files in the original directory to clean up.
As an example, if you have my_file.blend1 and my_file.blend2, it will copy my_file.blend2 (if it actually is the newest) to the path you set in the preferences and then remove my_file.blend1 and the original my_file.blend2.
This happens because I've witnessed a few stragglers that sometimes get left behind when a file is saved rapidly and simply checking for and moving .blend1 didn't seem to be consistent. It could be a logic error on my part, but I personally like the auto-cleanup anyway.
If you'd like to change this behavior to only remove the original .blend save version that was copied, replace the code (on lines 122-123)
for file in unmoved_save_vers:
    os.remove(file)

with
os.remove(saved_ver_file_path)

That will leave any other .blend# version files intact, though from my experience that means you'll occasionally have to manually delete some if you save too rapidly.
This is the save path I use myself (and the default), but you're free to change it to whatever you wish in the addon's preferences!
%temp%\Blender Backup Saves\{year}-{month}-{day}\{filename}\
So far I've used the addon with no problems but my python skills are rusty and I'm relatively new to using python with Blender so let me know if you spot or encounter any issues.
custom_save_versions_path_v1.0.0.zip
You can install it like most other Blender addons by going to Edit > Preferences... > Add-ons > Install... and selecting the .zip file, then enabling it. The single setting (to set the save path) is in the same panel.
Here's the entire code for the addon. You can install this manually yourself if you'd like by copy-pasting this into a file named __init__.py and putting it in a folder, then zipping that folder and installing it as an addon via the instructions above.
bl_info = {
    "name": "Custom Save Versions Path",
    "description": "Allows you to set and use a custom directory for Blender's save version files (.blend1, .blend2, etc).",
    "author": "Unordinal",
    "version": (1, 0, 0),
    "blender": (3, 6, 0),
    "location": "",
    "warning": "",
    "category": "System"
}

import bpy
from bpy.app.handlers import persistent
from bpy.types import Operator, AddonPreferences
from bpy.props import StringProperty
import os
import re
import shutil
from stat import *
import datetime
from datetime import datetime

def get_custom_save_vers_path():
    prefs = bpy.context.preferences.addons[__name__].preferences

    current_datetime = datetime.utcnow()
    epoch = datetime(1970, 1, 1)
    timestamp = (current_datetime - epoch).total_seconds()

    current_date = datetime.today()
    year = current_date.year
    month = current_date.month
    day = current_date.day

    file_path = bpy.data.filepath
    file_directory = os.path.dirname(file_path)
    file_name = os.path.splitext(bpy.path.basename(bpy.data.filepath))[0]

    final_save_path = str(os.path.expandvars(prefs.save_path)).format(
        year=str(year),
        month=str(month),
        day=str(day),
        filedir=file_directory,
        filename=file_name,
        timestamp=str(int(timestamp))
    )

    return final_save_path

def get_save_ver_num_to_use(save_vers: list[str], max_save_vers: int):
    if not save_vers:
        return '1'

    base_save_name = os.path.splitext(save_vers[0])[0]
    for n in range(1, max_save_vers + 1):
        save_ver_name = base_save_name + f".blend{n}"
        if not os.path.isfile(save_ver_name):
            return str(n)

    return get_oldest_file(save_vers)[-1]

def get_save_vers_in_directory(directory: str, blend_file_name: str=None):
    if not blend_file_name or len(blend_file_name) == 0:
        blend_file_name = ".blend"

    save_ver_regex = re.compile(r".*%s\d+" % re.escape(blend_file_name))
    return [os.path.join(directory, file) for file in os.listdir(directory) if save_ver_regex.match(file)]

def get_oldest_file(file_list: str) -> str:
    return min(file_list, key=os.path.getmtime)

def get_newest_file(file_list: str) -> str:
    return max(file_list, key=os.path.getmtime)

def clean_up_old_save_vers(save_vers: list[str], max_save_vers: int):
    if not save_vers:
        return

    save_vers_over_max = len(save_vers) - max_save_vers
    for _ in range(save_vers_over_max):
        oldest_file = get_oldest_file(save_vers)
        os.remove(oldest_file)
        save_vers.remove(oldest_file)

@persistent
def save_version_move_handler(saved_file_path):
    saved_file_name = os.path.basename(saved_file_path)

    custom_save_vers_path = get_custom_save_vers_path()
    if not os.path.exists(custom_save_vers_path):
        os.makedirs(custom_save_vers_path)

    max_save_vers = bpy.context.preferences.filepaths.save_version
    save_vers = get_save_vers_in_directory(custom_save_vers_path, saved_file_name)
    clean_up_old_save_vers(save_vers, max_save_vers)

    if max_save_vers == 0:
        return

    unmoved_save_vers = get_save_vers_in_directory(os.path.dirname(saved_file_path), saved_file_name) # C:\Users\meee\Blender\Scenes\test.blend1, [...].blend2, etc
    saved_ver_file_path = get_newest_file(unmoved_save_vers) if unmoved_save_vers else None
    if not saved_ver_file_path:
        return

    saved_ver_base_path = os.path.join(custom_save_vers_path, saved_file_name)
    saved_ver_num_to_use = get_save_ver_num_to_use(save_vers, max_save_vers)
    saved_ver_output_path = saved_ver_base_path + saved_ver_num_to_use

    # This creates a new file over the max if there's a gap in the numbering after a change by the user to the number of save versions.
    # Won't fix since the old save over the max will get cleaned up next time the file is saved anyway.

    FAIL_COPY_STR = "Failed to copy save version file '%s' to the destination '%s'" % (saved_ver_file_path, saved_ver_output_path)
    try:
        dest_save_ver = shutil.copy(saved_ver_file_path, saved_ver_output_path)
        os.utime(dest_save_ver)

        if not os.path.isfile(dest_save_ver):
            print(FAIL_COPY_STR)
            return

        # The save version file was copied successfully, remove any originals.
        for file in unmoved_save_vers:
            os.remove(file)

    except Exception as err:
        print(f"{FAIL_COPY_STR}: {err}")

class CustomSaveVersionsPathPreferences(AddonPreferences):
    bl_idname = __name__

    save_path: StringProperty(
        name="Save Path",
        subtype='DIR_PATH', #https://docs.blender.org/api/current/bpy_types_enum_items/property_subtype_items.html#rna-enum-property-subtype-items
        default="%temp%\\Blender Backup Saves\\{year}-{month}-{day}\\{filename}\\",
        description="""
            The path to move newly-created save versions to.
                Year: {year}
                Month: {month}
                Day: {day}
                UTC timestamp: {timestamp}
                .blend file directory: {filedir}
                .blend file name: {filename}
        """
    )

    def draw(self, context):
        layout = self.layout
        layout.label(text="Use 'Preferences > Save & Load > Save Versions' to set how many versions are saved.")
        layout.prop(self, "save_path")

def register():
    bpy.utils.register_class(CustomSaveVersionsPathPreferences)
    bpy.app.handlers.save_post.append(save_version_move_handler)

def unregister():
    bpy.utils.unregister_class(CustomSaveVersionsPathPreferences)
    bpy.app.handlers.save_post.remove(save_version_move_handler)

if __name__ == "__main__":
    register()

@DuarteFarrajotaRamos Apologies, you'd think after browsing StackOverflow for so long I'd know this by now! I've added the code and a (hopefully) clear explanation on what exactly it does.

Perfect thanks. Great answer


text:
Removing hair particles in specific areas
I'm using Blender 2.78c for create a bear cub - by following this tutorial.
I decide to play with the particle system in order to give the model some hair/fur, however, I'm having this issue:

I cannot remove hair particles around their eyes, nose and mouth.

I've tried:

In the particle edit mode, use the length brush and shrink in the areas (i.e. eyes, nose and mouth), also, using the comb brush.
Remove duplicates - by clicking this option.
Searched about this topic on other websites and here on Blender Stack Exchange.

However, despite all these efforts, in the rendered viewport shading, the hair is still present.
This is the result I have so far:

What I want to accomplish is to understand how to remove the hair/fur from the eyes, nose and mouth.
Here is the .blend file:

The unwanted hair comes from the Interpolated Children option. Blender places the new hair particles between the edited ones (=the parents). To define where you want to have the fur and where not, you can either 1) use a Vertex Group or 2) an Image Texture. Both options control the hair density and should work for your model. 1) VG needs enough geometry (vertices), while the 2) IT option requires a UV map and an image. (Don't forget to remove the fur from the soles & inside of the ears)

@Blunder thank you so much. You can post your comment as an answer and I'll accept it. The vertex group is the option I tested and it looks wonderful.


text:
Smooth joins are not as smooth as shown in the tutorial

Please note: I'm using Blender 2.78 in a Windows 7 - 32 bits - PC.

I add 2 cubes and for then I follow these steps:

Add a vertical loop cut at the middle of the cube.
Delete vertices.
Add "Mirror" and "Subdivision Surface" modifiers (the later with view: 2).
Shift + A, then Scale, then, Apply all modifiers.
Select the two cubes and then Ctrl + j = join the objects.
Click on "Smooth".
On "Sculpt Mode", select the "Smooth" brush (or any brush and whil holding shift), smoothing the joins of the mesh/clay, in this case.

At this point, I don't see the "smoothing" applied to the joins:
Current result - looks like the mesh is dissolver and not smoothed:

I would like to try this tutorial, but, I don't know if this can be achievable using Blender 2.78c.
In the tutorials I've found, versions of Blender 3.0 and upper are used, and also, the "Remesh" option - which I found in Blender 2.78 is a modifier and don't get the same or similar results as shown in the tutorials.
(With the current version of Blender I'm using), it is possible to achieve a similar result as is shown in the tutorial?
Desired result:

I believe I don't get the similar results due to the lack of cuts in the base mesh and the limitations of Blender 2.78 compared to newer versions, but, I would like to know what I'm missing, if can continue trying or just plain keep looking for other types of tutorials.

I'll upgrade my system once I get a better grasp on how can achieve a similar result as shown in the tutorial.

Hello, if these are 2 meshes it won't be able to smooth the joint, it needs to be one mesh, you can select one in Edit mode and Ctrl F > Boolean

Hello, I follow your reply, but, the shortcut didn't add a boolean. I searched and I found the "boolean" modifier - what I did was: add the boolean modifier and the operation "union" and the meshes did joined. Then, I smoothed the intersections and it looks fine - see image sample. Did I follow your comment correctly?. Thanks

OK great then! Actually if the Boolean modifier worked it means that the 2 pieces were 2 separate objects and not 2 separate meshes within one object


text:
Add random values to every height to a given object
I would like to add a random height to a given object . For example , a plane. ( Im looking to do a mountain later). I have written this code but I do not know how to call this function out (my print doesn't work , and i'm not sure about the "vert.co = vert.co+n " line too
def randomheight(object1,height) :
   object1 = bpy.context.active_object
   for vert in bpy.context.active_object.data.vertices:
      n=randrange(-height,height)
      vert.co = vert.co + n
print(randhomheight("Plane",4))

THank you for your help

The print function will go to the blender console window if you run the code from the text editor (but the code has nothing to print currently. See below). Use the blender Edit menu to Toggle System Console.
You can do what this code is trying to do much more easily with the displacement modifier and a noise texture, or with ANT Landscape addon, which has a readymade tool that uses noise textures to generate random terrain. However, if you really want to do it this way...
The python in this is very broken. I will try to explain.
I am assuming you are running this code in the Blender python terminal, but if you are running it from the text editor, you must add...
import bpy

...at the beginning of the script for it to work.
To otherwise fix the code regardless of text editor or terminal running:
First off, the code passes object1 and height as arguments to the function, but then the function itself creates the variable object1, so that is not needed. Python can create and delete variables on the fly, so there is no need to tell it beforehand "I am going to create these variables here." The line should be...
def randomheight(height) :

Which gets passed height as a number.
Secondly, the blender API syntax is incorrect in adding n (a number) to vert.co (a 3D vector). Since the up/down axis is Z, which is the third element of the vector, the line should be...
vert.co[2] = vert.co[2] + n

Or you can use...
vert.co[2] += n

To make things more compact.
Thirdly, the code has nothing to print: the randomheight function does not return any value, so python will just print "None." Also, the code is trying to pass the object name to the function when the function itself looks up whatever the active object is. This should be...
randhomheight(4)

Unless you want to be able to pass the function something so it can work with objects other than the active one, in which case:
You should leave in the object1 argument where you define the function and here where you call it. Then, remove where the function picks the active object and replace it with...
object1 = bpy.data.objects[object1]

...which will look the object up up by the name the function was given.
Sorry about the multiple choice bit at the end, it was just tricky to tell what the code was meant to do.
Hope this helps :-D


text:
Can't see beyond a certain point in viewport?

For some reason I can't seem to see things in my viewport beyond a certain point, as if there is an invisible wall. For reference, the photo shows a cube, but I am unable to see the rest of it. If I drag my perspective around, the line at which the objects stop showing remains constant. Please help!

Thank you so much, I didn't realize that the clipping distance was the issue :)

It looks like you might need to increase the Camera End Clip Distance. Press N in the viewport, and select the "View" tab on the right side of the menu that appears. Clip distance is near the top. See below:


text:
Animation Nodes viewshed or visibility
Is there a way of using Animation nodes to get the visibility from the camera of objects? Not the fustrum, that works great, but what in landscapes is called the viewshed. Wich objects are visible from the camera and which ones are ocluded by other objects or by themselves.
I cant find how to meke this. I have several add ons that can calculate this for weigths, but is there a way to make this with animation nodes?
thanks

Animation Nodes has a raycast function that is helpful in this regard.  Cast from camera toward object, and if object is the first thing it hits, it's visible.
However, calculating vertex/edge/face/object occlusion in a complex mesh is a non-trivial problem.  Some folks (self included) have done work in this area using Animation Nodes.  See https://blender.stackexchange.com/questions/100606/animation-nodes-for-geometry-line-art/113985 and https://blender.stackexchange.com/questions/87754/ray-cast-function-not-able-to-select-all-the-vertices-in-camera-view/111680 for more info.

Thank you @zippy , I will take a look at the links


text:
Is it possible to have particles update at half the framerate?
I'm trying to make an animated fire that plays at a 12fps but still have the camera move at 24fps. For the fire itself, i used the stepped interpolation modifier and that worked fine, but now I'm trying to do the same with the particles emitting from the fire. I've been searching for hours but haven't found anything.


text:
Why is my 2D animation grey in video editing tab?
This is how my animation actually looks like:
But when I add the scene strip in the video editing tab, it's grey, this is how it looks like:
And when I render it:
Why is this happening?

In the Properties panel of the strip, under the View tab > Scene Strip Display, you can select Shading: Material Preview or Rendered. That will show you the original colors.


text:
Strange edges on my object
I'm new to blender, and following along with an anvil tutorial. Everything was going fine, but some edges of my geometry look weird.

Any idea on how to fix it? Thanks!

Wierd in what way? - If you're talking about the visible edges on the surface you can right-click in the window and choose 'Shade Smooth from the popup menu.

@Gorgious Being the troglodyte that I am, I must have deleted my duplicate vertices, done something wrong, undo too much, and then forgot to re-delete duplicate vertices. Thank you, and sorry for wasting people's time.

Don't worry about it. As you can see many many people have had the exact same problem. :) Happy blending


text:
Export to Unreal Engine 4
Im very new to Blender. I create a Room for UE4 but when I export it to Engine Inside this room is good but when look it from outside you can not see walls and Light goes throw it to inside. Sorry for bad english. What can I do to fix this?

Have you tried the add-on I suggested? https://blender.stackexchange.com/questions/208614/blender-for-unreal-settings#comment352082_208614

Yeah i try one. I think its a problem with my asset in blender. for the floor and roof I used bridge and F. Im new to it, is that make a problem for exporting to unreal?


text:
Can I use One bone to Play an action? Need help for using action modifire
I have a bat model and I made an action that Frame 0 is Bat with open wings and On frame 24 bat is in Resting Mode and Made this with help of all the bones that bat has.
Now I want make a seprate bone / a Controll bone and I want when i rotate this bone or scale it or whatever, This action play.
For Example I want to just keyframe this bone from frame 1 to 24 and this bat animation ( action ) plays.
Thank you guys for answering. Really I need becouse my client ask me to do that.

You could try it with the Action bone constraint, but you need to give the constraint to each bone that is animated. Create your animation, create the bone that will trigger the animation (I've called it Ctrl). Give the constraint to one of your bone. Once you've set the constraint, select the other bone(s) that you want to constrain, shift select the bone that you've already constrained, and CtrlC (you need to have the Copy Attribute addon activated) > Copy Bone Constraint (or on top of the constraint, down arrow > Copy to Selected).
As for the settings, choose the controller bone as Target, under Target choose the movement of the controller that will trigger the action (X Location on Local Space for example), under Range Min and Max choose the amplitude (here how many units on X) that the controller needs to do to animate the whole action, and under Frame Start and End set the length of the action that will be played. Of course you'll need to keyframe the controller.

Result:

Just a heads up, you can copy bone constraints without any addons just by using "copy constraints to selected bones" operation.

Oh yes you're right, in the Action constraint

Thank you for replying.
This action Im talking about involved all the bones not just one bone so I can connect to that. This action is made of leg bones, Wing bones and head bone

Hello, as I said if it involves several bones, you just need to copy the constraint for the other bones as explained in my answer


text:
can you save a wireframe as a png?
i am trying for the first time to use blender to create a wireframe so i can turn an object into a 3d lamp, i have managed by tutorials to get the image to a wireframe only which is perfect for what i need, but then there is no way that i can find to save that image out of blender as a png etc with just the wireframe on its own without the model attached to it, is this at al possible please

You can go to the 3D view menu, and choose viewport render image, which will render any combination of viewport overlays you activate.


text:
Wall Bump nodes wrong colour
I want to give some detail to a wall old plaster holes etc. I added a image texture for the wallpaper added the bump nodes etc but the bump areas are the same colour as the image texture wallpaper, Q: I would like the bumps to be a different col how can I do this? cheers

I don't have your file so I had to try to replicate it with brick texture and you can actually do it like this:

Is this what you wanted? If it is not perfect you can try something different than Mix or change some values
You can also use another colorRamp to further control colors

Thx Miko I will give it a try

Unfortunately it didnt work


text:
stroke material in black is half transparent, end of stroke not trimmed
I would like to draw with the same material as the "stroke" material by default, when you add a grease pencil object, but when I draw, the stroke seems to have transparency and the end of the stroke is not trimmed, although I checked the option in the "stroke" menu.

Here is the blend file :
https://pasteall.org/blend/ec7049d9f19641e7acb60d3f6f53e4f5
Any advice would be very appreciated.
Thanks

Hello, are you using a stylus to draw ?

@Gorgious yes I do, there is a slight difference with the pressure, but not enough to have a black stroke like the one by default

You should uncheck the pressure setting for strength then https://i.sstatic.net/taJgK.png

@Gorgious thanks! yes it works better. Would you know how to get a color with its full opacity? The color is a little bit too transparent.

You are in X-Ray mode, try to go in material preview or disable X-Ray mode (either of those) https://i.sstatic.net/Onjhy.png

@Gorgious great! thank you!

If you don't mind, what behaviour would you like to see when you talk about "trim stroke ends" ?

@Gorgious like the end of the stroke object by default, but it works fine now, thanks


text:
Can't select any object in edit mode 2.9
In edit mode I can only select the object I click in "object mode". When I click on others objects nothing happening. I always have to switch in object mode if I want to select another object and then go back to edit mode for edit the object.

If you want to be able to edit more than one Object in edit mode, you must select all the objects you want to edit (In object mode) before entering edit mode.

Thank you! it was that easy! I feel kinda stupid

Don't worry, it's not stupid - Before version 2.8 you could only select and edit one object at a time. I still model this way (for the most part) out of habit.


text:
How do I make coordinates relate to global values?
I'm new to Blender, and I'm already tired of the coordinate system in the small menu at the bottom left going to 0,0,0 on translate every time I go to edit a new/different vertex. How could I make the coordinates appear as global values all of the time?
E.g. I want the vertex at coordinate 1,2,0 to appear as 1,2,0 in the transform menu at the bottom left of the screen, and if I come back to edit that vertex later, still be seen as 1,2,0 instead of resetting the coordinates to 0,0,0 as it does by default.
Note, I use the exact decimal value menu at the bottom left. I do not want to have hand drawn, or approximate meshes.

I'm not sure what you mean by "transform menu at the bottom left".
When I translate a vertex of a mesh object while in Edit Mode, the Translate Operator is invoked and its properties are editable in the lower portion of the tool panel. Because the translation moves a vertex, the translation vector displayed here is the delta (the difference between the original position and the new position; the amount the vertex was moved.)
However in the upper right is the Transform Panel which displays the location of the current vertex, and this panel can be set to display either the Global or Local coordinates of the selected vertex, which sounds like what you want.
Does that help at all?

Yes that helps quite a lot, in that I now know that I need to find out how to bring up the transform panel in the top right because it is not enabled by default. For the record, I was talking about the translate operator because that is the only thing that I could see that would allow direct manipulation of vertices.

That side panel is the Properties Region and can be shown/hidden with the 'n' key.


text:
Sculpt looks pixilated

This is a leaf to a Chinese money plant that I've been working on. I went into sculpt mode to add the veins. But, when I try to sculpt any detail, it comes out looking a bit... Chunky. Like it's pixalated or something. When I watch tutorials of other folks using Blender, the sculpts look perfect and crisp. From what I can tell, they are not doing anything different than from what I'm doing. Also, this is in smooth shading, and I can see topology of the object clearly, as if it were in flat shading. I tried to pick a nice matcap so that you all can see the odd "chunky" effect on the veins. And again, thank you all in advance!

Your model does not have enough vertices for that level of detail. Either increase the subdivision or use dynamic topology.

try setting your shading to smooth. in the left[in the transform tab[ edit[ smooth shading

Double check it really is in smooth shading - blender can set this at the per-face level in edit mode, so assign the object smooth shading again from object mode to be certain it affects all of the faces.

I double checked the smooth shading, and I did use dynamic topology. Sorry it took me forever to respond, I work at a summer camp.


text:
How to not make scaling snap to 3D Cursor?
Whenever I try to rescale the points in my cup, they always scale in the direction of the 3D cursor. How can I make it so that they are scaled independent of the position of the 3D cursor?

Sorry if this is a really easy thing to configure - I have spent almost an hour looking through stack exchange and the blender docs and could find nothing on this. Thanks in advance!

I guess you need to come back to Pivot Point > Median Point instead of 3D Cursor.

Wow I'm an idiot... Thank you so much!

You need to click here and select individual origins to fix this issue


text:
Time remapping does not work with particle info node
This was a fairly hard problem to find. I also discovered that it is not an easy one fix. The issue is that the particle info node gets messed up when you use time remapping.
I'm not going to explain, instead read this post with no answer. And if you didn't understand that one, read this one, with no answer. And why not this one, with an answer that only works if particles are your only moving objects.
I have many moving objects, rigs, particles, and cameras. The crazy particle movement is solved after baking, but the particle node, nope. 2011, 2013, 2016, and now... 2019. A solution is well deserved.
cycles - 2.79

Wound't this be considered a bug in Blender? What do you think?

I think it is, but maybe somebody has an answer.

Link to bug https://developer.blender.org/T77307


text:
Connecting eye rig to head bone
I rigged the body of my character and proceeded to the facial rig, in which the eyes (mesh) are already connected to an armature, but now I want to connect those eyes armature to a new bone I made on his head so I can control both of them at the same time.
Adding to that, I also want to connect that new head bone to my master bone so I can move it all together.
Tried bone and object constraints, and parenting, but for some reason I can't seem to get it right. Everytime I move master bone (which you can't see on the image) in "Pose mode", the head bone and eye armature won't follow.

Thanks in advance :)

You might need to adjust how you are trying to parent objects in order to solve the issue you are having.
When you want to parent an object to a bone that you plan to move with pose mode, you should try to parent it to the bone, rather than parent to the armature object.

Here is a simple workflow that should work for your situation.

Select the armature that you want to follow the bone in another armature
Now select the armature that contains the bone that you wish to parent to.
Use the parenting menu and select bone, or bone relative, depending on whether you want your child armature to retain its offset or not.

Hope that helps, happy blendering!
Note that:
If the armature containing the bone you want to parent to has multiple bones, you will need to select the proper one before doing so.
You can do that by going into pose mode prior to parenting, choose the bone that is to be the parent, then go back to object mode.

Thank you for your detailed answer! I'll try out that technique and get back to you only if it doesn't work :)


text:
How do you reuse an operator with different variables? "Object has no attribute" error when I try
I'm trying to add buttons to install/uninstall various dependencies for my add-on.

I don't want to make a new operator for each button, so I need a way to pass in the dependency.
Looking at How display and use operator properties in a Python Blender UI panel? and How to pass multiple operator properties via UI layout? the answer seems to be adding a variable to the class that extends bpy.types.operator and then calling my_op = layout.operator(my_op.bl_idname) and my_op.my_variable = 'something cool', but that's not working for me.
I'm getting AttributeError: 'CYANIC_OT_uninstall_single_dependency' object has no attribute 'dependency' when I try to run this code, and I'm not seeing any reason for it. I'm developing on Blender 4.1, but I doubt that would break this. I'm at a loss at what to try next to achieve this result.
(This isn't the entire code, just trying to include the relevant parts)
import bpy
from collections import namedtuple

Dependency = namedtuple("Dependency", ["module", "package", "name"])
dependencies = (
    Dependency(module="numpy", package="numpy==1.26.4", name='np'), # numpy 2.0 had just released, and wasn't compatible with mediapipe yet
    Dependency(module="skimage", package="scikit-image", name=None),
    Dependency(module="cv2", package="opencv-python", name=None),
    Dependency(module="mediapipe", package=None, name=None),
)

class CYANIC_OT_install_single_dependency(bpy.types.Operator):
    bl_idname = "cyanic.install_single_dependency"
    bl_label = "Install"
    bl_description = "Install a single dependency"
    bl_options = {"REGISTER", "INTERNAL"} # IDK if this is needed or not

    dependency = None

    def execute(self, context):
        if self.dependency is None:
            return {'CANCELLED'}
        try:
            install_and_import_module(module_name=self.dependency.module,
                                      package_name=self.dependency.package,
                                      global_name=self.dependency.name)
        except (subprocess.CalledProcessError, ImportError) as err:
            self.report({'ERROR'}, str(err))
            return {"CANCELLED"}
        return {'FINISHED'}

class CYANIC_OT_uninstall_single_dependency(bpy.types.Operator):
    bl_idname = "cyanic.uninstall_single_dependency"
    bl_label = "Uninstall"
    bl_description = "Uninstall a single dependency"
    bl_options = {"REGISTER", "INTERNAL"} # IDK if this is needed or not

    dependency = None

    def execute(self, context):
        if self.dependency is None:
            return {'CANCELLED'}
        try:
            uninstall_module(module_name=self.dependency.module,
                             package_name=self.dependency.package)
        except (subprocess.CalledProcessError, ImportError) as err:
            self.report({'ERROR'}, str(err))
            return {"CANCELLED"}
        return {'FINISHED'}

class CYANIC_preferences(bpy.types.AddonPreferences):
    # The preferences in Preferences > Add-ons > Cyanic Toolbox
    bl_idname = __name__

    header_names = ["Module", "Version", ""]

    def draw_dependency(self, dependency, dependency_box):
        # module name, version, install/remove button
        # Check if installed
        installed = False
        global_name = dependency.module
        if dependency.name is not None:
            global_name = dependency.name
        if global_name in globals():
            installed = True

        _d_box = dependency_box.box()
        box_split = _d_box.split()
        cols = [box_split.column(align=False) for _ in range(len(CYANIC_preferences.header_names))]
        # Module Name
        cols[0].label(text=dependency.module)

        # Version
        if installed:
            cols[1].label(text=globals()[global_name].__version__)
        else:
            cols[1].label(text='Not Installed')

#-----
# This is where the error is being triggered

        # Install/Remove button
        if installed:
            operator = cols[-1].operator(CYANIC_OT_uninstall_single_dependency.bl_idname)
            operator.dependency = dependency
        else:
            operator = cols[-1].operator(CYANIC_OT_install_single_dependency.bl_idname)
            operator.dependency = dependency
#-----

    def draw(self, context):
        layout = self.layout
        layout.operator(CYANIC_OT_install_dependencies.bl_idname, icon="CONSOLE")

        # dependency box
        dependency_box = layout.box()
        dependency_box.label(text="Add-on Dependencies")

        headers = dependency_box.split()
        for name in CYANIC_preferences.header_names:
            col = headers.column()
            col.label(text=name)
        for dependency in dependencies:
            self.draw_dependency(dependency, dependency_box)

You need to use class annotations as attributes e.g. attr: Property not attr = Property. You should also be using a built-in EnumProperty not a namedtuple (they're basically the same, the latter is just designed for Blender operators). Give this page a good lookthrough and I think you'll find what you need.

If the operator is going to be used for UI where you set the properties yourself in the code, do you really need to check if it's None?.. I mean checking for all possible errors is good, but trust yourself a little... :D

@MartynasŽiemys Most of the None checks are because not all of the dependencies have a package or global name that's different than the module name - but you're right that I could probably simplify the code a lot more by just typing the module name a few more times when defining the Dependency.

@Jakemoyo Switching to module_name : bpy.props.StringProperty('') looks like it's working for me. I had tried using StringProperty before, but I think I used = instead of :. I'm still struggling to see how I'd convert the namedtuple to an EnumProperty. It looks to me like an EnumProperty can only have an identifier, name, description, icon, and number - not custom values like 3 different strings.

Yeah, idk maybe I'm confused about how you're using that object in the script.

Here is an example:
import bpy

class CyanicDependancy(bpy.types.Operator):
    """Description"""
    bl_idname = "cyanic.install_dependency"
    bl_label = "Install Cyanic Dependancy"

    dependancy: bpy.props.StringProperty(
        name="Dependancy",
        description="Install Cyanic Dependancy",
        default="",
    )
    uninstall: bpy.props.BoolProperty(
        name="Uninstall",
        description="Uninstall",
        default = False,
        options={'SKIP_SAVE'} #for the next time operator is run
    )

    def execute(self, context):
        if self.uninstall:
            self.report({'INFO'}, "Uninstall " + self.dependancy)
        else:
            self.report({'INFO'}, "Install " + self.dependancy)
        return {'FINISHED'}

class LayoutDemoPanel(bpy.types.Panel):
    """Creates a Panel in the scene context of the properties editor"""
    bl_label = "Layout Demo"
    bl_idname = "SCENE_PT_layout"
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_context = "scene"

    def draw(self, context):
        col = self.layout.column()
        # if you need to set only one property for an operator button
        col.operator("cyanic.install_dependency", text = "Install dep" ).dependancy="dep"
        #if you have more properties
        op = col.operator("cyanic.install_dependency", text = "Uninstall dep")
        op.dependancy = "dep"
        op.uninstall = True

def register():
    bpy.utils.register_class(CyanicDependancy)
    bpy.utils.register_class(LayoutDemoPanel)

def unregister():
    bpy.utils.unregister_class(CyanicDependancy)
    bpy.utils.unregister_class(LayoutDemoPanel)

if __name__ == "__main__":
    register()

I'm going to mark this as accepted because the dependency: bpy.props.StringProperty('') part was what I was missing. With that piece of information I was able to rewrite my code to work.


text:
Subdivided means alt. lmb not connecting edges
I just subdivided the short perpendicular edges along the bottom floor of this object and now when I alt. lmb the edge along the long bottom edges (next to the red line along the sides) it only connects up to the next subdivision instead of the entire edge line. Is there a way to re- merge all the vertices along the bottom edges so I can connect the entire edge using alt. lmb? I've tried merge by distance with alternative variables to no avail. Any help most welcome!
Cheers, Dan

It should be possible to alt+click the face loop in face selection mode to select the loop of faces. Or you can use Ctrl+left clicking on different vertices to quickly select the nearest path between them

Unfortunately, with that topology, the edge loop selection will always be limited to sections between "quad-poles" (as far as I know). However, there's a good chance you can eliminate some of the tedium of selecting all the edges manually by using "Select Similar". Try with different constraints, if necessary. If there are varying sections of your edge loop (such as varying lengths, like the inner curve being shorter than the outer curve, for example), you may want to select multiple sections of different sizes (yes, this can be done), before you choose the Select Similar, to make sure you get them all.


text:
Group materials together and make transparent?
I have an object with multiple materials assigned to its various faces and want to adjust the global opacity of said object. So far I can only adjust the materials individually.
Can anyone help figure this out?
Cheers, Dan

Hello, is this for Cycles, Eevee, or in the 3D viewport ? Or all three ?

Hi, this is for Eevee

Add a driver to the alpha/transparency channels of all the materials you want to control

hi Ron thanks for your message although I'm fairly new. How do I do this?

If you want a quick fix, without a need to restructure your project, you could write a simple Python script to change given object (or multiple objects by wrapping it in another loop).
import bpy

for material_slot in bpy.data.objects['Cube'].material_slots:
    material_slot.material.blend_method = 'BLEND'
    material_slot.material.node_tree.nodes["Principled BSDF"].inputs[19].default_value = .3

You can get this specific part ["Principled BSDF"].inputs[19] by right-clicking on a property in the node editor and choosing Copy Data Path.

Here are two solutions.
Make sure each material has a blend mode set to alpha Blend or Hashed (Or clip if you don't want the material to be semi transparent before going into full transparency). These settings will only appear if Eevee if set as your render engine.

First solution (with a driver)
Create a value node and put it into a node group with Node > Make Group (CTRL G).
Rename the group and plug it into the principled BSDF of each of your materials. (To add in a material, choose Add > Group > group name )

In your object properties, on the last foldout click "add" to add a new custom property.

Now for ease of use you can access it in the N panel on the right of the viewport.

Get back into your node group by clicking on the icon on its top right. Right click in the "prop" field and choose "Copy as new Driver". Right click in the "Value" node's field and choose "Paste Driver". The field should now be purple.

Tweak the new prop to change the opacity of all the materials at once.

Second method : With the object color
The method is the same as the previous one, but you have to replace the value node by an "Object info" node and plug its "Color" output into the group output.

Go into the object properties, viewport display, and adjust the value of its viewport color to modify the opacity.

Conclusion
Use the first method if you want to control the opacity of your materials across several objects, use the second one if you want to control the opacity of your materials on a specific object.


text:
Make object follow moving path!
I need to get an empty to follow a moving path. The path is the guide for a record needle and is a rotating spiral. The empty needs to be still as I will be tracking the needle to it which will simulate it moving slowly toward the centre. I tried simply keyframing it but that doesn't work because it would need to slowly get faster and there a slight wobble in the main vinyl record which I want to keep so the empty needs to move with the path exactly.
I have tried adding a constraint to the empty to follow path and keyframing the offset every (minus) 360 degrees on each next iteration/rotation of the spiral then setting interpolation to linear. This sort of works but there still some movement along the path rather than simply tracking across from the outside to inside which is what I want. If it makes a difference, I'm working in Eevee
Can anyone help with this?

when you say that you've tried keyframing, you mean you have tried a simple movement on the Y axis? It would be the first thing to try, making sure that the speed of the movement is synchronized with the position of the curve at any moment

actually the playhead's speed towards the centre of the record is constant, it doesn't get faster (ie: it takes 1/33 of a minute to complete the first rotation as well as the last rotation, during which time the playhead moves by the width of one groove, and all grooves are the same width). For a convincing wobble you could bake the audio to a curve and copy it to the playhead

I meant that I've set a key frame at the beginning and the end which allows for a smooth transition towards the centre but the wobble means it goes off track which in the end would make the needle look like it's going through the grooves..


text:
Camera not staying on nurbs path
my camera won't stay exactly on the nurbs path (there's a small space between them) and then it randomly jumps onto it near the end. I've checked for any rogue keyframes, cleaned keyframes and made sure the camera starts exactly on the path using alt G.  Not sure what else to do..
Can anyone help with this?
Best, Dan

The camera might be under the influence of some constraint or other such as a "Track to" constraint.
Try this - Clear all animation on the camera and remove it's path constraint and any other  constraint, if there is any.
Make an empty follow the path and then parent the camera to the empty.
Your camera is then free to be rotated and moved about whilst still following the path.  It will also work smoothly with a 'Track-to'  constraint should that be required.

Further to the above... Make sure the Path and Empty share precisely the same origin point when setting them up. (use SH-S)

An example for the comments above -
https://blender.stackexchange.com/questions/71486/camera-jitter-when-circling-around-object/71518?noredirect=1#comment124472_71518

maybe share your camera + curve: https://blend-exchange.giantcowfilms.com/

thanks Edge 3d. There are various constraints on the camera and I've spent a few days settings up all the keyframes so can't really delete all that and start again although I've noticed that the bump happens where there are no keyframes. I do remember making some adjustments in the graph editor although now for some reason , I can't see any curves. Everything is flat, even though I've set most of the keyframes to bezier. I'm wondering if there's a slight alteration I made accidentally but even if so I'm unable to see/rectify it as I can't see anything but flat lines in the graph editor!

p.s. I tried taking off all the constraints and the bump still happens

p.s.s.  I just re-created the same problem in a new project where the only keyframes are beginning and ending of the path and it still jumps off near the end

If you have to use keyframes on the camera and have it follow a path at the same time, the Empty parent for the camera would be the way I'd go.  If you can't resolve this, @Moonboots' suggestion to post your Blend file up and let him (or others) look at it, would be an almost certain cure.

I wonder if this might help... - https://blender.stackexchange.com/questions/176336/how-do-i-turn-on-path-influence-while-keeping-the-objects-position/176653#176653 - Your camera could be the green cube, coming and going onto and off a path smoothly?


text:
Why do my objects look like this in solid view?
Everything seems to render fine however, in solid view all my objects have this choppy look. Am I doing something wrong?

What's your clipping range, in the viewport, compared to the size of your scene?

@RobinBetts I changed the clipping range and now everything is back to normal! Thank you

@sobe608 was right, but for another reason. The faces are 'occupying the same place' .. but not in Object space; in the View volume. And they're at 'the same Z' (depth) in that volume, because the near and far clips are too far apart, resulting in floating-point numbers not having sufficient precision to distinguish points in the range.
TL;DR...
Change the clipping range in the viewport to the minimum that reasonably encloses your scene.

Looks to me like shading issues. Run the 3d printing checks and fix everything that gets flagged, with the exception of overhanging faces, which you don't have to fix.
Also, you may have multiple objects occupying the same space, which can cause a shimmering effect.