text:
How could a loft object be closed?
In this answer you can use two or more curves to generate a loft mesh with geometry nodes, but answers in this thread work for an open surface.
What could be a good approach to close the loop?

Dang! I knew I should have finished this one up.  Until I get to it, you could perhaps trim all curves 0-1 to split them, work with the split curves, weld back at the end? Haven't fully checked it out for reliability.

what about simply putting the first and last "column" on same position and then merge by distance?

If you want to just close it, can't you spawn a cylinder with matching vertices/edge loops numbers and sample positions by index?

Hi @vklidu This is the quick-fix.. but not chuffed to bits with it: On mixed cyclic and acyclic profiles, UV's can mismatch on cyclic sections, because of length difference at the seam. It relies purely on proximity for re-welding cyclic profiles.. can fail, rarely. However, if you think, too,  it is an improvement on previous, so may edit into the other answer.

@RobinBetts Thanks ... I tried to split curves, but it messed up ... I checked your file, but my Mac at home is too old, 3.4 crashes with your file and last official 3.31LTS (where I had to replace two nodes to Transfer Attribute node) didn't work either, so there is probably something more missing, but I'm not in a hurry. ... Sure, improve your original answer as you like :) I dont think it is a Q to me :) I just created this thread since I guess it can be achieved in several ways and could be used in other scenarios, so I wanted to keep this topic separate.

@Chris ... isn't it that in this case it destroys the rectangle corner? My GN knowledge is too low, answer with example is appreciated :)

Hi, @vklidu Hmmmm.. shame. Maybe that's because I generated that file with 3.61. Will make another with 3.4. Maybe the whole thing could do with a tidy-up. I, too, look forward to clean, reliable ideas from GN specialists ;)   .. if there are better ways out there.

@MarkusvonBroady ... yes sounds like the way ... I'm not sure if will be able to match indexes ... so an Answer will be appreciated :)

@RobinBetts ... yes I think it is version reason ... but like I wrote it is not a necessary to make it for old version (even 3.6 becomes old early :) ) for me is this more a study case that I would like to know how to handle it in a future (it is not a project that has to be done yesterday :) but thank you for a quick response :) what a Saturday morning :)

@vklidu: i would try it with an answer if you provide the GN node tree, how you created that geometry ;) or maybe a blend file? ;)

@Chris ... Sure Edit ... it's the RobinBett's blend in the mentioned thread.

@RobinBetts ... I got to v3.6 ... works great :) ... just a Trim Curve node ... hm ...

Duplicate the first spline as the last:

Increase the $x$ resolution of the Grid, to add this one missing column (could be done without step 1, but then you would need index remapping, and this way indices match again):

Change the UV domain to Face Corner, since now you have a column of vertices that are supposed to be both the beginning and the end:

Merge by Distance (if you don't want to, you also don't need p. 3.):

Result:

Thanks ... it works great ... just curriouse the Cylinder way didnt work for you? BTW Face Corner want set before already? If Robin is going to post answer here it would be a dilema :)

Thanks, Markus.. I've got a stinking cold / man-flu at the moment, so haven't been able to put the time in. Much appreciated. @vklidu, only difference between this and the trim method is that supposedly the trim will handle mixed  cyclic and acyclic? But that has other UV problems of its own.

OK will test it ... if it will be reasonable to create answer later for others ... mainly get well soon :) ... man-flu is serious thing, I know that ...

@vklidu I didn't use the cylinder option, because in 3.3 it doesn't generate UV Map. It would look this way: https://i.imgur.com/XGQJm1Y.png unfortunately you can't increase top/bottom fill segments.

@RobinBetts my terrible man-flus ended when I started supplementing iron, apparently most of the population have a deficiency (I've seen a research on magnesium, a carrot today has 10-20% of a carrot a century ago, I imagine it's very similar for many other elements), but obviously one needs to avoid overdosing iron.


text:
Raycast node: How to only register rays that hit inside
I have set a Raycast node to shoot rays in Normal positive direction.
I want to target Sphere object (for height map). It works perfectly for convex shapes, but issued for concave surface. Rays hit Sphere from sides and generates faked (unwanted) height.
How can I limit rays only for those that hit negative Normal of target object?
(marked red in screen)

Grey ray - isn't hit
Blue ray - hits positive normal of target (to be seen as "isn't hit")
Red ray - hits negative normal of target

In this example with Monkey - visible on ear.

Instead of using the Hit socket from Raycast, you could do a separate Is Inside? check for the spheres, and use that as your multiplier, automatically eliminating hit distances that's coming from outside the target mesh:

The Is Inside? node group is down below. For every point of a sphere, it gets a vector that reaches from the vertex to the closest point on the target surface, then calculates the Dot Product of that vector and the Normal of the hit surface; meaning, it checks to see if these two vectors are pointing in the same direction―when the dot product is positive, the vertex is inside the target mesh.

It seems you are answer for everything for me :) Thanks for quick response ... "Sample Nearest Surface" node ... Undefined? Blender 3.5?

Yeah I'm using 3.5. Sample Nearest Surface is one of the new nodes that replaced the Transfer Attribute node (you can still use that for now if you want): https://blender.stackexchange.com/questions/276087/where-is-transfer-attribute-in-3-4

Oh ... thanks ... and btw nice solution :) Proximity should cover most of the cases. Speaking to Monkey example I guess there is not a solution for sphere on top oh monkey's head, like seen from top (cage) so height map will represent this sphere seen from outside (means in its max diameter) ... now it takes into account only middle part. I'm just currious, if you think there is an solution I will ask a new Q.

It's hard to understand just by words. Sphere on top of the monkey's head looks like this in my setup: https://i.imgur.com/HcTbvsF.jpg What do you mean by "only middle part"? Can you draw on this image to explain the problem perhaps?

Imagine mushroom shape (instead of sphere) on head. Rays can pass through mushroom leg and hit a top of hat, but rays cant reach whole hat seen from top ... but leave it ... it is Pandora's box :) I'm satisfied here :) Thanks again.

I played around with the setup more and indeed it does fail in some cases, though I have to admit I don't understand why exactly--I didn't get your "pass through mushroom leg but can't reach whole hat" comment haha. Anyways, luckily there are smarter people with more robust "Is Inside" setups out there. I tried Bradley Animation's and it seems to work. It's called "G_Is Inside Volume". You can download it free: https://bradley-animations.gumroad.com/l/jSyDM?layout=profile&recommended_by=library

source: Stack Exchange

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

sort: votes


text:
How to replace an orphaned external file by an existing one? (all instances)
I used a video file in the VSE which is cut into many parts.
When the project grew, I needed to reorganize the linked files. I renamed this video file. Now Blender doesn't see this file anymore.

In Motion5, there is a function "Replace Media" that lets you replace external files used in many strips by new ones for the whole project.
Does something similar exist in Blender by default or does anybody know a script that can do this?

Have you tried File->External Data->Find Missing Files? It should work on vse files.

"Find Missing Files" function searches for files with the original file name. I need to replace the original file by file with different name. If it would be only one strip I can change only path to the file with changed name, but there are many strips using the same source file.

It maybe really outdated answer, but I think a described problem a pretty wide for everyone who works in Blender VSE. So I modified a script from @Samoth, so it only process Image Strips and Movie strips, be able to replace parts of the paths, work not only with filepaths abut also with directory paths. Tested on Blender 3.1.2
import bpy
old_name = 'old_path_frament'
new_name = 'new_path_fragment'
for seq in bpy.data.scenes['VSE'].sequence_editor.sequences_all:
    if type(seq) is bpy.types.ImageSequence:
        if seq.elements[0].filename.find(old_name) >= 0:
            seq.elements[0].filename = seq.elements[0].filename.replace(old_name, new_name)
        if seq.directory.find(old_name) >= 0:
            seq.directory = seq.directory.replace(old_name, new_name)
    if type(seq) is bpy.types.MovieSequence:
        if seq.filepath.find(old_name) >= 0:
            seq.filepath = seq.filepath.replace(old_name, new_name)

Thanks for enhanced script version :) At the same time - it is sad we still need to work this way 7 years later yet. BTW a path can be changed by File > External Data > Find Missing Files ... but yes if they are not missing (or instead moving them for such purpose) script could be better way. Also blender has an addon Batch Rename, but sadly it handles only data blocks.

Thanks for reviewing my script version. I tested it on my project, but it can have errors, despite its simplicity. My case is exactly like you described. I have long video with about 15 channels, holding many small parts, linked to several folders with images and movie clips, so after i changed project directory structure, it was really difficult to fix all the paths manually. So i found this thread, and started to modify script, because I have not only images and movies, but also effects strips, color strips and other types. This is the reason I added strip type filters.

You can set the filepath attribute on your sequences with python:
import bpy
for seq in bpy.data.scenes['Scene'].sequence_editor.sequences_all:
    if 'image_a' in seq.elements[0].filename:
        seq.elements[0].filename = "image_b.png"

You can optionally change the files location setting seq.directory if needed.

Script fails in both cases, can you be more descriptive? Thank you for help. blend: https://dl.dropboxusercontent.com/u/55113627/%3E%20Blender/test-VSE-changepath.zip screen: https://dl.dropboxusercontent.com/u/55113627/%3E%20Blender/test-VSE-changepath.png

Well, that's much better - providing a "test" file with your problem always helps so much more - great job! I updated the answer, it's working now with your blend file. Btw: you can use http://blend-exchange.giantcowfilms.com/ to upload a blend-file and use the insert image function here on stackexchange. Would be good if you'd update your question with your image - as good images always help for a better understanding of what you want to achieve.

Yeah, thank you very much :) now it works. Would be great to have a button for that :) But I will definitely save your script. And sorry if it wasn't enough clear from question. BTW what is zero in your script?

You mean the indices [0]? That's the first (zero based) element in a list of many. A sequence may consist of more than one file (e.g. a image sequence) with different names, but in your case as you use a video source only one file is used per sequence, so only this single one has to be altered.

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

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


text:
Why is the "jiggle bone" turned the wrong way?
I am practicing rigging on a test molecule character.  I am attempting to install "jiggle bones" to create a wobble effect in the tummy and rump.  When I add the SplineIK constraint and select the appropriate curve, the bone turns around and deforms the mesh.  How can I remedy this problem?
Deformed mesh:

Edit mode:

Object and Pose mode:

Here is the .Blend file:

Thank you!

I re-situated the jiggle bone so it faces the outside, by facing the bezier curve diagonals so they are pointing toward the tummy and not pointing inward.  I just deleted the original inward-pointing bezier and replaced it with an outward-pointing one.  However, the jiggle bone is now jiggling   from the wrong side, with the hinge being on the side nearest the outside of the model.

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


text:
Is it possible to make a "jiggle bone" respond to a shape key? Is there a better way to create "bounce" with shape keys?
I am testing animation techniques on a simple character.  I have an armature with "jiggle bones" set up, and the "jiggle bones" are effective in creating a wobble in the plump parts of my character, but only when I am animating using the armature.  Is it possible to allow shape keys to affect the jiggle bones?  Or is there a way to get a similar jiggle effect with softbody/cloth physics?  What is the best way to get a jigglebone-type effect while animating with shape keys?
When I have tried to use softbody physics, the result is always, so far, a "rippling sheet" effect, and what I want is a realistic "belly-laugh" jiggle.
Rippling sheet effect when animating the character with shape keys and softbody physics:

I also want the character to be able to fly through the air without becoming an empty pillowcase, but rather maintain a slight bounce.  Even a steady, slight ripple would be ok.  Here is the pillowcase effect that i cannot seem to escape:

Thank you for any advice!

Did you tried Jiggle Armature Addon?
Preview https://www.youtube.com/watch?v=nwkNO93XBH4
Download https://github.com/cheece/JiggleArmature


text:
Character motion moving script
Im making a script for replace all my logic bricks used for moving, runing and jumping.
I using "Character" Physics type for my player, and i using "Character motion" motion type:

Here is my script, i encounter some problems for making the motion correctly:
import bge
from bge import logic, events

def mouvements():

cont = bge.logic.getCurrentController()
own = cont.owner

keyboard = cont.sensors["Keyboard"]

VitesseMarche = 0.2 #Walking speed
VitesseCourrir = 0.5 #Runing speed

for key,status in keyboard.events:

    if status == logic.KX_INPUT_ACTIVE:

        # Avancer
        if key == events.UPARROWKEY:
            #Go forward
            print("Avancer")

        # Reculer
        if key == events.DOWNARROWKEY:
            #Go backward
            print("Reculer")

        # Gauche
        if key == events.LEFTARROWKEY:
            #Go left
            print("Gauche")

        # Droite
        if key == events.RIGHTARROWKEY:
            #Go right
            print("Droite")

    if status == logic.KX_INPUT_JUST_ACTIVATED:

        # Sauter
        if key == events.RIGHTCTRLKEY:
            #Jump
            print("Sauter")

mouvements()

The script need also Run and Diagonals functions (and mid-air moving if possible).
I have already tested some things, but there is always a problem.
-Or the movement still continue after the key no longer pressed.
-Or the moving are not local.
-Or the diagonals not working...
I have tried this:
own.orientation*Vector((0, 0.2, 0))

Found at: How to use KX_CharacterWrapper.walkDirection. But i may be bad.
This script must be the lighter as possible.
I have a last thing, it is possible to make the inputs (UPARROW, DOWNARROW, LEFTARROW...) changeable, easyly, and in-game?
Thank you and have a nice day (I will include the name of the guy who help me in the credits of the script)!

I still working on this script, all the directions are working (Up, Down, Left, Right,Diagonals...), the Run fonction work too. i just have to finish the header, add the Character Jump function, the jump hight, and make the Keyboard key editable in-game (easyly). All is customisable. All the instructions will be include inside the script (In French and English). I will post it here as Answer when it working correctly, but i think many improvements can be done.

I finished the script (the only function that doesnt work is to set in-game the jump hight). Here the functions of it: All the parameters are customisable in-game, the keyboard inputs, the movement speed (Walking and runing), the number of jump, the diagonals are working perfectly. The script is smart, and if you dont add the property, it will automatically use default values. I will add many improvements thereafter.

[FR-EN] Advanced Moving Script for the BGE V2.0 by Hack0re.
Warning, this script only work with Character Physics Type.
It does not work with Dynamic Physics Type.
The script include 95% of the instructions, in French and in English (142 Lines Header).
I will add more improvements in the near future...
Its my first real script, i just started in python, please be indulgent.
Features:
-Perfect for a FPS game.
-5 minutes needed to set in place (and even then).
-Moving in all directions, Diagonals and Running working perfectly.
-No pass through Walls or Sliding on ground.
-Walk speed and Running speed can be easyly edited in-game (Properties).
-Jump function with number of jumps can be changed in real time (You just unlocked the double jump).
/The jump hight not working for in-game, im sorry (if someone know how to do...).
-If the properties are not added, the script automatically use the default values.
-All the keyboard inputs can be "easyly" changed in-game , for making all the players happy .
-All the necessary instructions are include in the script (in French and English).
Downloads:
V2 (17/09/2015): https://mega.nz/#!m1cRlDIC!wrD1ovEznhxLGssZY26sndRUFv9amtsu_wVg_8VZ60Y
Please dont remove the Top Header.
Original link:
http://blenderartists.org/forum/showthread.php?381505-FR-EN-Advanced-Moving-Script-for-the-BGE-V2-0


text:
How do I avoid this weird pixelated effect when creating a grunge texture?
So I was informed by one of the moderators that my post's title was not specific enough. So I decided to just create another one that aligned more with my problem and deleted the last post. Hope that's alright.
So I am trying to create the same kind of grungy type texture of this chair (the one that the girl is sitting on),
and I am having some trouble. This is what I have so far in Blender:

Unfortunately, I keep getting these spots that are weirdly pixelated like this:

Does anyone know how I can get rid of that weird pixelated effect on my grunge texture???
Also, in what ways can I get my material to more closely resemble the texture of the chair in the first image?
I want to create this texture completely procedurally, and I do not want to use an image texture. Here is a copy of my blend file, and down below are a few screenshots of my node setup.

Hello and welcome. Please don't post the same question more than once. If your previous question was put on hold, address raised the issues by editing it so it can be reopened rather than post a new one, otherwise see What should I do if no one answers my question?

@DuarteFarrajotaRamos Sorry about that! I will keep that in mind and edit next time instead of reposting. I'm not sure if my last question was put on hold or not.

It was not on hold, I just requested a clearer title, which you already provided here. Your "pixelated" effect most likely originates from poor UV map coordinates

Okay, right on.
Well, I actually UV unwrapped it and used the project from view (bounds) option. So there isn't really any weird defects with the UV island. So I don't think it's that.

@SMH The problem was your Voronoi vector which was causing the problem. Check my answer.

EDIT, Problem Solved:
Your Voronoi and White Noise texture destroys it. The white noise is noise, and the Voronoi vector makes it blocky. Use another mapping node or a new mapping node as a vector, and it solves the problem. I would have shown that it fixed the problem, but I changed too much of the texture, and the scale is gone all wrong :)
After using a bump node, you don't connect it to a normal map to use it as a normal output, it already has a vector output. Delete the normal map node and connect the bump node directly to the normal, and it will fix the issue.

I think your issue is that your plugging the colour output of your noise, Voronoi and white noise textures into the colour ramps and math nodes in image 2 of your node trees this can give weird results. instead you should use the outputs with the grey colour such as distance, value, fac
here is my take on the fabric using you node tree

Nah, the Voronoi's position he used as a vector destroyed the white noise. Anyways, nice attempt at an answer :)

I meant more for the noises as you can see above when plugged into the colour the result is pixelated but thanks

You are to some extent right, but the problem you are addressing in your answer is also caused by the normal map attache between the bum node. Anyways, yes, the colour makes the shading vary in procedural textures, and it has different bump values. + 1 :)

yep i see. thank you


text:
Importing Images as Planes
I am attempting to create an image transition that appears like a "morphing" effect to use for an age progression video of my granddaughter. I found a video tutorial online that shows exactly what I am trying to do, however one aspect of his instruction does not work in my Blender (v.2.79).  He is using v.2.77.
He first imported the first image as plane (shadeless, in top perspective orthographic view). Then he added the second image in the same manner.
Next he sets the material transparency to check and Z-transparency.
In the next step, he sets the alpha to 0.5 to make the top image partially transparent so that he can see what he is doing when using shape keys to transform the image.
This is where I have the problem.  The alpha transparency does not work on my images.  I have tried png, tiff, and jpg images.  I have also changed the plane shading from texture to GLSL and enabled X-ray but nothing has worked.
I did find a work around by adding mesh planes and then using the image as a material and texture but it takes a lot longer to get to the end result. Does anyone know why my images do not respond to the change in alpha setting?

The original instructions found here enter link description here says not to check the transparency on the object panel, however if I do, it still doesn't help'

1) make sure that you are in material viewport shading mode:

2) Maybe you create material with transparency drived by texture. So goto texture tab and make sure that Influence -> Alpha is turned Off.

Thank you for responding so quickly..I checked both of the settings you suggested but it did not solve the issue.  I also installed the latest version (279b). Then I tried using the work around and it didn't work the way it is supposed to.  Obviously I am doing something wrong but I don't know what.  The gentleman who did the video tutorial tried to help as well but was unable to figure the answer.

Post screenshots in question body.

Screen shots added to original question. When using the planes with image as texture, the transparency shows in the preview but not in the viewport.

Hm, I changed recommendations

OMG!  That's it!  Thank you so much.  How do I add to your reputation?

@Omagoodness You don't have enough reputation for vote up, but you can accept the answer:  https://blender.stackexchange.com/help/someone-answers


text:
Eevee shadow problem

Recently I downloaded blender 2.8 for the new real-time render engine, but then I found out that the shadow in the eevee is really unexpected. Just like shown above, the quality of the shadow is bad and the movement of the shadow is also strange when I move the object.
The lamp is a sunlight, and the sphere and the plane are just preset meshes.
Could you tell me what adjustment do I need to create a normal shadow?

I'm voting to close this question as off-topic because it is about unfinished experimental development software

is it from view port only or when you render also. if it's from viewport only, then you can't complain;
A) it's still in alpha version
B) we never had shadows on viewport shading, so give them time, or there's a setting some where, to increase the sampling or anti-aliasing of the shadows.

Look at that ! i had the exact same issue, and i found you can play with the softness of your light here...

Thats what I was looking for! (I do wonder how much it taxes performance though, but obviously thats impossible to avoid).


text:
Need Technique for Projecting Countries onto the Earth
I've got a project I'm on where I must project some shapefile generated country surfaces onto a globe. Here's where I am currently...

Now, the shapefiles I used have excellent vertex resolution about the edges of the countries, but has only 5-10 vertices within the boundaries of any country. This is because the shapefiles were not meant to be curved at all, they're meant to stay flat (or were designed for that purpose, at least). That's why off to the left we can see the gray background between pink and blue -- the Americas are floating.
If we move the countries toward the globe any closer, large countries clip through the globe as seen below.

Shrinkwrap
My plan for country projection was to shrinkwrap the countries to the globe, but that results in the same clipping as above due to the low interior vertex count.
Subsurf
I tried increasing the count using subsurface-division, and that crashes blender. I believe the issue is the HIGH vertex count at the edges -- Russia has 24,000 vertices. So when I subsurf Russia, it just stalls and crashes after half an hour of crunching on it.
Decimate
To decrease the vertex count, I tried decimate. However, it spawned two problems:

Some countries are 1 face & thus cannot use decimate which needs 3 faces minimum.
Even decimating Russia until it's unrecognizable (~1000 verts) still leaves a crash-worthy vertex count.

Question
All I need is to project these countries onto the globe. I don't know where to go from here. Maybe increasing the vertex count a very slight amount for each country with some other modifier or program... or by hand. Then shrinkwrapping.
I feel like there must be some to that just does projection on a surface based on tris instead of verts.
Anyways, any ideas for different approaches or improvements on this approach are very welcome. :)
EDIT -- Adding blend file

In there we have the countries all parented to an empty called "Core". I've been scaling the core up and down to get the countries where they are now.
EDIT 2 -- I didn't consider there actually is another constraint. The country vertices need to be mapped to the nearest point on the globe.

could you please share your file (or at least a part of)? https://blend-exchange.giantcowfilms.com/

Of course! I just had to pare it down a lot. I didn't take anything I mentioned in the file away.

Related: https://blender.stackexchange.com/questions/24043/how-to-animate-morphing-a-rectangular-plane-into-a-sphere/24053#24053 and https://blender.stackexchange.com/questions/52904/wrap-curve-around-sphere?noredirect=1&lq=1

You could:

Select all you countries and join them with CtrlJ
Create 2 grids (delete faces only, keep the edges), one for the front, the other for the side view:

Select one grid, shift select the pink object, go in Front view, go in Edit mode and in the header menu, choose Mesh > Knife Project. In the Operator box, enable the Cut Through option. Do the same for the second grid (side view), here is what it gives:

You could as well use a sphere as a grid:

Give your pink object a Shrinkwrap modifier, increase slightly the Offset so that the sphere and the pink object don't cross each other:

You can give it a bit of thickness with the Solidify modifier.

This seems like a great approach! I'm still hitting stalling issues, though. I tried joining the countries & knifing, but got a very long wait. To decrease the computation, I tried just knifing with a single country and still got a long stall with no response.
Did you also have a long wait time for the computation to complete?

Blender 2.91 introduces a new Exact solver for the Boolean modifier, which allows this to be done entirely with modifiers.
Add a solidify modifier, followed by a boolean modifier to the country.
Set the solidify modifier so that it fully intersects above and below the Earth's surface (see my settings below).
Set the boolean modifier to intersect, exact mode, and with self turned on, and set the modifier target to Earth.

Here I've done this with China and Russia, which have the most distortion.
You should be able to copy the modifiers to every country, but it took a while for just one country, so you might not want to do all countries in one go. Also you might want to apply the modifiers when done.

Shoot, I've been trying to replicate your process, but I'm not seeing the solver options in Blender 2.9. I just downloaded it, opened my file, and only see the old options for the boolean modifier.

@Qfwfq The feature is new in 2.91 beta - you need to get it from https://builder.blender.org/download/

Thanks! I didn't realize there was a 2.9 beta and another 2.9 version.

I have to work on a couple things first, but I will try this tonight and accept whatever answer works. :)

2.91 has now been released, so it's no longer beta!


text:
Visibility Driver Help
I'm having trouble with a driver. I have the driver using a single property linked to a custom property. I want the driver to turn the visibility on when the custom property's value is "1", but turn the visibility off when the value is "0" or "2". What's the best expression to achieve this?

false if value == 1 else true ....or did i understand that wrong?

Hi Please use a title that reflects the content of the question. It should be descriptive but succinct, unique and identifying, summarizing the issue so that users can at a glance understand what your post is about. Use the [edit] link below your post and avoid anything not strictly essential to the post. Remember, your title is the first thing potential visitors will see, and makes your question findable for future users. See "What is the problem with posting an image or link and asking “How do I do this?""

Visibility is a boolean value of True or False that can be represented by 0 and 1 as well. You can write a statement that would evaluate to True or False as an expression when driving it.
In your case you need an expression that would evaluate as False only when your custom property is 1. This is confusing since it's False for the object to be visible and True to hide. You are actually driving object.hide_viewport or object.hide_render properties even though in the UI you usually disable a checkbox to hide and enable to show.
So var != 1 will only return false when var is 1:

There are convenient "copy as a new driver" and "paste driver" options under context menu (right-click).


text:
Problems with bone roll on rigify paw
The legs on a model I'm working with is messed up by the rig, and I'm pretty sure the culprit is the rolls on some of the leg bones. My problem is I'm not sure how to orient it and which bones to fix. I've tried multiple methods but to no avail.

I wonder if your problem is not that all these bones...

...should not be in Local Space in their Copy Transform constraint (instead of World Space):

Looks like that worked. Not sure why rigify didn't fix it automatically.

I can't tell, I don't know Rigify ;)


text:
Remove all custom properties from bones
I have an armature that has some bones with custom properties that I don't need. The fact that the armature has a lot of bones and that there a separate properties for edit and pose mode, it would be very difficult to do this manually. Is there any way I can delete all these custom properties all at once?

With a Python script, you should be able to get rid of the custom properties. You just need to store the properties in a variable before you delete them in a loop, Have a look here: https://blender.stackexchange.com/a/253047/107598

Sorry, but I'm gonna need a bit more of a walkthrough for this. I have no idea how to work with python.

Try the following script. It removes all custom properties that you can define in Edit and in Pose mode of all bones of the selected armature.
How to run a script is described here.
import bpy

def ShowMessageBox(message = "", title = "Message Box", icon = 'INFO'):

    def draw(self, context):
        self.layout.label(text=message)

    bpy.context.window_manager.popup_menu(draw, title = title, icon = icon)

arm = bpy.context.active_object

if arm.type == 'ARMATURE':
    n = 0
    for bone in arm.data.bones:  # Iterate over all bones
        props = [*bone.keys()]  # Retrieve custom props names
        for prop in props:
            print(f"deleting BONE property {prop}")
            n += 1
            del bone[prop]

    for bone in arm.pose.bones:  # Iterate over all bones
        props = [*bone.keys()]  # Retrieve custom props names
        for prop in props:
            print(f"deleting POSE BONE property {prop}")
            n += 1
            del bone[prop]
    ShowMessageBox(f"deleted {n} custom properties", "INFO", 'INFO')

else:
    ShowMessageBox("Please select an armature!", "ERROR", 'ERROR')


text:
Add menu entry to generic right-click menu?
I can't find a way to append/prepend an operator to blenders generic "right-click" menu. When looking into the source of interface_handlers.c it seems the operators of the menu itself are hard coded, furthermore I can not find any draw method in /scripts/startup/bl_ui/ folder so I guess the menu is not exposed to the API, correct?

Q: Is there any way to add an entry to the menu and ideally assign a custom value to the active property under the mouse cursor?

I was trying to do this a while ago, I was told by a developer in #blendercoders that this was not possible. as you have stated, the menu is hard coded in C, and not accessible by python.

We could try to move this menu to Python. Another alternative would be to append a Python menu to the C menu (that needs to be done from C though).

Talked with Campbell about it, patched Blender locally already and it works great...am preparing a patch for 2.79 and will submit it soon.

As of this commit, thanks to @p2or and @brecht, the bpy.ops.ui.copy_data_path_button() operator now allows to copy the full data-path of the active property under the mouse cursor to the clipboard  which can be used to assign custom values to the active property (only available in latest versions).

Simplified version of the provided example in the patch (integers only):
import bpy

class MouseCursorPropertyOperator(bpy.types.Operator):
    bl_idname = "screen.active_int_property_add"
    bl_label = "Adjust active mouse cursor integer property"
    bl_options = {'REGISTER', 'UNDO'}

    my_int = bpy.props.IntProperty(default=100)

    @classmethod
    def poll(cls, context):
        return bpy.ops.ui.copy_data_path_button.poll()

    def execute(self, context):

        # get the data path
        bpy.ops.ui.copy_data_path_button()
        path = context.window_manager.clipboard

        # get full data path
        bpy.ops.ui.copy_data_path_button(full_path=True)
        full_path = context.window_manager.clipboard

        # split path in class and property
        rna, prop = context.window_manager.clipboard.rsplit('.', 1)

        # set attribute if type is integer
        if type(eval(full_path)) is int:
            rna_eval = (eval(rna))
            value = getattr(rna_eval, prop)
            setattr(rna_eval, prop, value + self.my_int)
            self.report({"INFO"}, "{} set to {}".format(prop, value + self.my_int))
        else:
            print (type(eval(full_path)))
            self.report({"INFO"}, "{} is not an integer property".format(prop))

        return {'FINISHED'}

addon_keymaps = []

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

    # handle the keymap
    wm = bpy.context.window_manager
    kc = wm.keyconfigs.addon
    if kc:
        km = wm.keyconfigs.addon.keymaps.new(name='Screen')
        kmi = km.keymap_items.new(MouseCursorPropertyOperator.bl_idname, type='Q', value='PRESS', shift=True)
        addon_keymaps.append((km, kmi))

def unregister():

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

    bpy.utils.unregister_class(MouseCursorPropertyOperator)

if __name__ == "__main__":
    register()

And as of this commit, thanks to @plasmasolutions you can now add an operator to the menu:

Provided example of the patch:
import bpy
from bpy.types import Header, Menu, Panel

def dump(obj, text):
    print('-'*40, text, '-'*40)
    for attr in dir(obj):
        if hasattr( obj, attr ):
            print( "obj.%s = %s" % (attr, getattr(obj, attr)))

class TestOp(bpy.types.Operator):
    """Tooltip"""
    bl_idname = "object.test_op"
    bl_label = "Execute a custom action"

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

    def execute(self, context):
        if hasattr(context, 'button_pointer'):
            btn = context.button_pointer
            dump(btn, 'button_pointer')

        if hasattr(context, 'button_prop'):
            prop = context.button_prop
            dump(prop, 'button_prop')

        if hasattr(context, 'button_operator'):
            op = context.button_operator
            dump(op, 'button_operator')

        return {'FINISHED'}

# This class has to be exactly named like that to insert an entry in the right click menu
class WM_MT_button_context(Menu):
    bl_label = "Add Viddyoze Tag"

    def draw(self, context):
        pass

def menu_func(self, context):
    layout = self.layout
    layout.separator()
    layout.operator(TestOp.bl_idname)

def register():
    bpy.types.WM_MT_button_context.append(menu_func)

def unregister():
    bpy.types.WM_MT_button_context.remove(menu_func)

classes = (
    TestOp,
    WM_MT_button_context,
)

if __name__ == "__main__":
    from bpy.utils import register_class
    for cls in classes:
        register_class(cls)
    register()

(Note: In Blender versions 3.3 and above, WM_MT_button_context must be changed to UI_MT_button_context_menu).

I'm really glad that you posted this example here as I didn't have a clue that that's already working ...  but it's not the answer to the question. The question is not only targeted at changing a value under the cursor but also at having one / several own items in the menu... and this is currently not possible. I'll patch Blender soon to allow that though.

@plasmasolutions Now that Blender 2.79 is released and has this functionality, could you add an example of how to do it?


text:
Default cube not displayed
When I start Blender, the default cube is not displayed. Instead, only the center point of it is shown. When I add other meshes, I also see only the center point. How do I exit this strange mode?

EDIT:
I just found out, my other models now look crazy:

This one has a problem in user perspective:

Please add a screenshot to illustrate the problem.

@RayMairlot ok, done :)

weird, that seems when you remove all geometry to an object, or you scale it down to zero. Which Blender version? Do you see the vertices count?

about your update: other models in the same file? did you try a fresh .zip of blender?

@m.ardito I think I have much worse problem, all my old blends now look somewhat like huge intersecting polygons. These are from different file. I use the same Blender 2.77a from the official website, as I was using before.

can u attach a normal cube added file

@atek I attached the file! But I'm rather sure it will be fine.

Your file opens fine here and nothing looks out of the ordinary...

Yes, apparently something happened on my side, because all my old files now look crazy. Can it be a hardware problem or some openGL problem?

Yes your file open file with the normal cube . u can restart ur pc or laptop or uninstall and install a new fresh version 2.78a

@atek, restart didn't help, new version has exactly the same problem. Old blender 2.6 works.

I added more pictures. A few of the models seem ok. But whichever standard mesh I add, I see the central point only,  and most old meshes have these intersecting planes.

Crazy geometry problems are most likely pointing to hardware- or driver-related problems. Please edit your question and add more information about your operating system, your GPU and its driver version. I had once similar problems with another software because my GPU got a little too hot due to dust in the heatsink

@metaphor_set It is Nvidia GeForce GTX 560 Ti, driver 304.132, Ubuntu system, temperature is by 44.

Did you change something lately, before the problem appeared? Updated something? The Drivers are fairly old, according to NVIDIA's homepage...

@metaphor_set Not really, but Ubuntu has regular updates. I also got a problem with a splash screen of one program, it can be related. I'll see if new drivers work.

@metaphor_set installed a new driver and everything works fine now.

Yay, success! Sometimes Linux can be a little nasty with 3D acceleration and updates.

 may be u have done this way so the cube is invisible and only the pivot point visible

No, there's the cube (?) there, look at the pivot. And, if @Noidea adds new objects, the same happens...

This didn't help. When I add other meshes, they all are displayed as central point. Even worse,  my  old slends went crazy! I'll add a picture.

@ noidea i mean attach a blend file with a cube save in that and not a image

@atek, I was talking about the picture of my old blends.

look the image i have attached


text:
Subsurface black edge
I have a surface with a Subdivision Surface modifier, and when I render it in Cycles, there is a black edge at the edge of the surface:

If I render it without Subdivision Surface it looks like this:

What could be the reason and how can I stop this?
EDIT:
After adding the Edge Split modifier as suggested by Shady Puck, the result looks as expected:

Can you upload the .blend file?

I believe that you can minimize this by increasing the Subsurf levels and eliminate it with an Edge Split modifier. A clever combination of both may suit you.
Sorry for low quality:

Thanks a lot! Adding  Edge Split modifier solved it for me.

That's because you have smooth normals.  Either set those faces to flat shading or enable Auto Smooth under Mesh Data.

could you explain a little bit what is the difference to splitting the edges? Do you mean it is because I don't have smooth normals?

@Noidea Smooth shading your mesh can lead to this blackening of the edges...something I forgot to mention, but Xtremity remembered.


text:
Model does not impact the the surface to make a wave
I have a problem with making the wave after moving object which I imported, it is 'ship.obj'.
I can move object and etc. but I can not make a wave effect described here.
When I use for this an object like cube (add cube) everything works perfect but I don't know why it doesn't work with the imported model.

Have you run the animation (alt+A) ?

Yes, I did. At the same time I can observe waves around cube but no waves around ship.

unable to diagnostic that without the file. You can upload it here if you want : http://blend-exchange.giantcowfilms.com/

The wave dynamics are in relation to a Mesh Volume which is why the cube is working. The geometry of the yacht hull are only planes. If you made a mesh with volume it works just fine.
Select the 'Hull-Cube' and press "/" to go into local view. In edit mode press W to remove doubles, which will remove a lot of doubles. Select all the top vertices and press F to fill. The back vertices and fill. Now you have a Mesh Volume.
Happy sailing!

Yes, that's it. Now it works. Good lesson for me, I owe you a beer ;).


text:
How can I make conformal thin layers on existing geometry, i.e. coatings with volume?
I am very new to Blender and modelling in general, but there's a pretty specific type of model I'd like to make and play with in different forms- thin films coating different geometries (which I can slice and render from different directions).
For example, I'd like to replicate something like this image:

Where the underlying geometry is a block with trenches in it, and they've added colored conformal layers on top.
I understand how to make the basic shape, but finding a good way to make the coating layers eludes me. Extruding just makes the basic shape bigger, and I need different regions to which I can assign different colors/materials.
For example, if I've made something like this:

and I'd like to add a conformal layer to the top and inside walls of the depression (to be arrayed afterward), how can I best do this?

Have you looked into the Solidify modifier? It allows you to add a constant thickness to an existing shape or geometry. If you already have a base object you can do it non destructively allowing you to dynamically edit it without having to do it all over again.

authors: فائزه مرجانی


text:
Fix color of normal map
I have some normal maps that are white/gray in color instead of the normal blue/purple color. I know this isn't completely Blender related since I'll probably use something like Photoshop to fix the textures, but how can I fix the color to make it the right color?
Here is an example of a map:

In my opinion it will be faster to convert in an app like Photoshop, or Krita, or a dedicated app, or do it online

If you don't have to convert it:
You could just pop it into a Bump-Node and connect the Normal output to your BSDF. Try playing with the values, sometimes the result gets better if you additionally plug the Normal Output of the Bump-Node into a Normal Map Node. (For me) Too high Values in the Bump- or Normal Map-Node will make your Roughness look shinier than it should be so be careful with that.

If you have to convert it:
Use the same setup as above. Instead of a cube, use a plane and apply the texture with no stretching or just activate the "Import Images as Planes" addon and import the image.
Your UV bounds should match the image. Go to Render Properties, make sure you are in Cycles Render, scroll down to Bake and open the menu. Once you opened it, (if activated) deactivate Selected to Active. Now add an image texture in your material but do not connect it to your material.
Call it the name of the normal map, make it the needed resolution and change Color Space to Non-Color (only Base Color-textures should be sRGB). Now select that texture and hit Bake. This may take some time, depending on your hardware.
Your Image Texture should now contain the normal map. Go to Image Editor, find the Texture  and save it locally as it gets lost if you don't. Now go back to Shader Editor, plug your new texture into the color socket of a Normal Map Node and plug it into the Normal input of the BSDF to see if it worked.

I hope that helps you archieve your goal!
PS: I think "Convert a Bump Map / BW-Texture into a Normal Map inside Blender" might be a more accurate title, if i understood your question correctly


text:
Color shader driver help
I want to make a driver that changes the color in a mix color node from one color to another color using a custom property on a rig. What is the best way to go about this?

Without any further detail what you exactly want to do: create a custom property on the armature object, right-click on it and choose Copy as New Driver, go to the Mix Color node, right-click on the mix factor and choose Paste Driver. Then right-click on it again and choose Edit Driver and create a formula or some kind of relation how you want the property to affect the mix factor.

I have two set colors that I want to switch between with a custom property.


text:
Vertex group names don't change along with renamed bones
Usually when I change the name of a bone on an armature, the name of the corresponding vertex group changes to match the bone name. However, I've run into some instances where this automatic change doesn't happen. I checked the mesh and it was parented to the armature and has the armature modifier set up. The only thing I could think of that caused the issue would be that I renamed the armature. Is that the issue or is something else the culprit?

Hello could you please share an object and its armature you have the problem with?

I would check for any duplicate vertex group names.  It may be renaming one VG but not the other.  Renaming bones can create these duplicate VG names; it's a current issue on the tracker.


text:
Surface Deform "target contains invalid polygons"
I am trying to use the surface deform modifier but I keep getting errors. I initially got the error" target has edges with more than two polygons" but was able to fix it by selecting edges with multiple faces by selecting by trait - non-manifold and deleting the selected edges. Now the error says the target has "invalid polygons" and I have no idea how to fix it.
I've tried triangulating the mesh, but that doesn't work.

Hello could you please share your file?


text:
Syncing audio without frame dropping
I am working on an animation and want to add audio to it, however it seems the only way to get the audio to sync up correctly is to change from playing every frame to frame dropping via sync to audio. While the audio works correctly under this option, my animation looks worse with the frame dropping. Is there a way to get audio to sync up correctly without having to resort to frame dropping?

Well, optimize your scene, so that Blender is able to draw more frames in a second.

That's pretty much it. Blender will drop frames it can't render in time for the audio, so either you play every frame but it will not play audio correctly, or you drop frames, or you make it so that your scene can playback at the right frame rate without significant frame dropping.


text:
How to scale an object with particles
I'm wanting to scale down an object that has a particle system, but the particles do not scale proportionally with the object, making the particles bigger in comparison when scaled down. Is there a setting in the particles that can fix this?

Scale the object you are rendering as a particle simultaneously. For example, if your particles were icospheres, then you would scale the particular icosphere as you scale your emitter.

I'm not sure if the particle system is using an object. Is there a way to find it?

If it is using one scroll down to the Render section, 'Render as' will say 'Object' and there will be an Object section below it. The Object Instance is the object it's using and you can scale it there (or scale the Object itself in Edit mode.) There doesn't seem to be a way of scaling if it's set to Halo as far as I'm aware but I'm not that familiar with the particle system.

I checked. It's not an object system, but a path system.


text:
How to see the users of an image
I am trying to clear up textures to clear up space on my computer. For a blend file, there are some images that I can't find being used by an materials, yet the images don't end up in orphan data. Is there a way I can see what is using the image so that I can know for sure it's okay to delete it?

I don't know how you can find what material use an image, but, but if you've deleted some materials, they will be removed when you'll close the file but their image texture will remain the next time you'll open the file because they are a level down in the hierarchy, close the file again and the image will be deleted for good.


text:
Controlling which texture is displayed in textured viewport shading
Since it uses up less data, I like to use the viewport shading with texture as the color option most often. An issue I commonly come across is that it will display the normal map of the material instead of the diffuse texture. Is there a way to make it so that Blender always shows the diffuse texture (base color) when textured viewport shading is on?


text:
Copy rest position pose to another armature
I have multiple armatures, all with the same amount of bones and bone names, but different bone positions that I want to combine into a pose library. The issue is that I can't apply the bone positions given all the armatures have their own rest positions. What I'm trying to do is something similar to how the join as shapes tool works for shape keys, but is applied to armatures.


text:
Make a single object transparent in viewport shading
I have two meshes, with one I want to use as a reference. I think it would be easier if I would be able to see through one of the meshes, but the closest I can get is x-ray mode where all of the meshes are transparent. Is there a way for only one mesh to be transparent?

There are several different ways to make an object transparent.
First is to tell Blender to only use a wireframe to preview the object:

I've set properties/object/viewport display/display as to "wire".  Now I can see through the object.  It will still render.  If I disable overlays, it will not be displayed on the viewport at all.  I typically use this for "cage" style meshes, like mesh deformers.  To prevent these kinds of objects from being rendered, I'll usually assign them to a collection-- maybe a sub-collection-- with rendering disabled.
The next option is to set a color for that object, and use "object" coloring in the render dropdown:

I've given this object a color in the same viewport display sub-panel as before, which allows me to specify some alpha.  (I've also specified a different color.)  Now, in solid mode view only (Workbench), that object is halfway transparent.  It won't affect its display in material or render previews.
Personally, I never really use this option, but it might be the closest to what you're looking for.
We can do something similar with materials:

Here, I've specified viewport display settings for a particular material, and set the rendering dropdown to use material settings.  Again, I can specify a color and an alpha, but only the faces assigned to that material will be made transparent.  For good or ill-- good, as long as you're prepared for it-- any other objects with that same material will also be transparent.  Again, this is solid mode only.
I actually do use this option sometimes, like when I have a character combined into a single object, and there are parts of it that obscure details important to animation.  Like, an eyeshadow sphere surrounding the eyes, where I still want the animators to be able to animate in solid view and see where the eyes are actually pointing.
If we want to set transparency for material or rendered views, we can use the shader editor to do so, mixing materials into transparency BSDFs as desired.

in object properties, choose "wire" for display as


text:
Add automatic weights to specific bones
I have a model that has already been rigged, but is missing weights for a few bones. I would like to be able to use the automatic weight system to add in the weights for these bones. However, since the model has vertex groups already, parenting with automatic weights would mess up the already made weights. How can I add automatic weights to the missing bones while preserving the already made weights?

Select your armature, shift select the mesh object, switch to Weight Paint mode, select the bone you want with left click, select more bones with shift left click, go into the top bar > Weights > Assign Automatic from Bones:


text:
How to set origin of object to the lowest point
The origin of my object is at the middle, and I want it at the bottom. My model is not located at the right location for setting it to world origin to work. Is there a way to do this?

You can go to Preferences( F4  ->  P ), Add-ons tab and search for 3D Viewport Pie Menus add-on that comes with Blender, once you enable it and get more options, you can disable the ones you don't need(they might interfare with the way you are used to hotkeys to work), but make sure you have Origin Pie enabled:

Once you have that  Ctrl  +  Alt  +  X  hotkey will call the menu

Origin to Bottom does what you need.
You can also use native functionality of simply moving the origin point if you enable Affect Only: Origins:

With that enabled you can use all regular transform operators:  G ,  R ,  S  to transform the origin any way you want and you can also use snap functionality.

2 separate problems.
First, in edit mode, select lowest part of mesh and pick cursor to selection. Then in object mode select origin to 3d cursor.
Next, shift C to put cursor to world origin. Then select your mesh and pick object to 3d cursor. Your mesh should now be at center of world.


text:
Move model directly above -Z axis?
I have a model that is located in the negative x-axis. Is there an automatic method to move it directly to the 0 axis? Location is already applied so that doesn't work.

You can only do it if you put the origin at the bottom of the armature, as suggested by Chris, if you don't want that there is no way (that I know) to automatically put it above the axis

you can select both bottom bones in edit mode -> shift-s -> cursor to selected, then object mode, select the armature > object-> set origin to cursor, then shift-s -> cursor to world origin -> then shift-s -> selection to cursor


text:
Preserving symmetry while sculpting
Whenever I try to edit a model in sculpt mode, the symmetry is messed up. The model is perfectly symmetrical before hand, but after sculpting (even when using the x-mirror), the symmetry is gone. Is there a setting that preserves the symmetry?

Make sure that the rotation is applied (Ctrl A in Object mode), and that the origin is at the center (right click >Set Origin > Origin to Geometry), the symmetry should work, or please share your object so that we can give a try


text:
Applying symmetry to mesh with shape keys
I added a shape key to a mesh via surface deform, but the shape key did not turn out to be symmetrical. Is there a way to make the shape key symmetrical without having to manually fix all the wrongly assorted vertices? I know the symmetry function doesn't work with shape keyed meshes, so I'm wondering if there is some sort of work around.

Hi Ethan. Is your Mesh Object symmetrical? Along which axis do you want to apply symmetry? Edit your question and post a screenshot if possible.

Yes, my mesh object is symmetrical, but the added shape key removes symmetry. I want to apply symmetry along the X axis with the +X axis values being retained.

The simplest solution is hidden in the Shape Key Panel menus. Set the shape  key value you want to symmetrize to 1.
Duplicate your shape key using New Shape From Mix

In the same menu choose Mirror Shape Key for the duplicated shape. You can also try the Mirror Shape Key (Topology), just select the one that gives best result.

Set the Value of the mirrored shape to 1 and you will see the two deformations on both sides.

Create a new shape from the mix

Now you can delete the two shape keys and keep the symmetrical one.
Inspect the mesh for some stray vertices as it may not work perfect in more complex meshes.

Set the Value to 1 to see the effect.
For more information about the mirroring of shape keys you can visit Blender's Manual here.
If you want to apply the symmetry only to specific vertices.
Select them in Edit mode and from the menu Vertex => Blend from Shape select the mirrored shape and apply the desired amount of blending.


text:
How to attach several rigs to an armature without it slowing down
A model I'm working with has several accessories that can be added to the model. Each accessory has its own rig and needs to be attached to the main rig to work properly. I thought simply using a "child of" for each accessory armature would work, but this has caused the rig to be incredibly slow. Is there an alternative solution that could work for this?

since nobody reacted at all to your question, i would recommend providing a blend file to your question, which makes it much more attractive to work on. Because you didn't show us any technical settings you made, we have no idea how your model looks like and no idea how complex your rig is.

Thanks for the tip. I didn't upload a file because it's over half a GB. I do have a link to it though: https://open3dlab.com/project/8e4b16d1-8750-46b7-94a7-c7d2e054e5be/


text:
Correctly removing double vertices
A lot of times I come across models with double vertices. The best method I've tried is selecting non-manifold vertices and then merging by distance. However, this method sometimes merges boundaries that are supposed to be there. Is there a more effective method for this?

I think we have to have some  clue about what would discriminate between the doubles you do want to remove and the doubles you don't want to remove, before we can answer this. Could you provide an illustration of a typical failing case?

In addition to @RobinBetts comment: Do you know that you can set the Merge Distance in the panel that appears in the bottom left of the screen after you have done the Merge? You might get the result you want by lowering the value until the parts you don't want to merge, don't merge.


text:
Controlling a shape key with multiple custom properties
A model I'm working with has multiple shape keys that change the shape of the body. What I'm trying to do is set up a custom property to make a "preset" for some of these shape keys. (i.e. the property, when turned on, will set 1 shape key to a given value and another to a given value). However, I still want to be able to edit the shape keys individually even with the presets. Is there a way to achieve this in Blender?


text:
Blender for SPH Simulation of Multiphase Flow
Hi I'm a Blender newb and I've been looking to do some fluid simulations of a multi-phase flow, I was wondering if this is something that can be done in Blender?
Basically I want to do a Smooth Particle Hydrodynamics simulation of a sphere falling and splashing on the free surface of a liquid body with specified viscosity and surface tension, but I also want (if possible) to include the surrounding air into the picture. So the idea is to dip the sphere in the liquid very fast so that it splashes and liquid goes up and around the sphere to form a ''splash crown''.

Please show your work, if possible, as a Blender screen capture.  Of course Blender offers fluid simulation .. and so do other addons.  If you have a visual reference that can be included in your question that may help.  Some BUs have very specific needs and other BUs have wide latitude.  Consider forces and all the other features of your fluid simulation.

Liquid cannot currently influence rigid bodies, if that’s what you mean. Such scenarios have to be faked.

It's the other way around, so the rigid body hits the liquid and makes it splash and go up around the solid.


text:
How to have a driver control a custom property, but still have it work independently
I'm trying to set up a driver that turns on and off different eyelid meshes. I want to have a "master" driver that controls both eyelids, but also separate drivers for the left and right sides.
My original strategy was to make a custom property for each side, then use a driver to have the "master" custom property control the values, but I can't change the values of each side independently.

A driver is not something that sits on a property to read it, and based on it modify other properties. A driver is, instead, something that sits on a property to set it, based on other properties it is able to read. So a driver can't directly control 2 things. What you can do is e.g. create a scene property, where you can set a driver if needs be, and have both eyelid drivers read this property in order to decide if the lids should be open or not.


text:
Dilate/expand vertex color mask?
I'd like to use vertex colors in order to apply different shaders on a single object, instead of going through the whole process and drawing a 'black and white' texture (for 1000+ objects).

Obviously, the only limitation is that the mask shape depends on the topology of the object, so I'd like to know if there is a simple way to shift the edge in- or outwards (green shape in the picture).
Q: Is there any mechanism to dilate the shape?

Vertex color is held in the geometry - so limited geometry means you are stuck unless you add a new edge loop to help add to the vertex color range.

I'd like to avoid painting. The question is how to expand the shape within the shader tree for basically this purpose. Thanks anyway @MrZak

You could of course convert paint to vertex group with WeightToVertexColors addon, and in Edit mode select that group and press Ctrl+Numpad+ to increase selection, but that's highly unefficient workflow for mixing materials as it will heavily depend on topology; vertex paint can't be called as efficient paint tool as well.

If it was possible to do some kind of "boolean painting" can that be a solution?

Following the several comments, and as I imagine most of the keycaps are similar, do you know that you can transfer vcol from active to selected (so a batch transfer)?

Yep, there is a nice answer over here, can't find it at the moment... thanks @lemon

@brockmann, but this last idea does not fit with the question!

This cannot be done in shader nodes, because to Dilate (paint) a point on surface one must know the color of surrounding area of that point. The node that samples Vertex Color does not allow for mapping vectors input to sample surrounding area:

That said, dilation/erosion on procedural or image textures would be possible using a dilation/erosion morphology kernel - similar to this edge detection:
Voronoi Cracks Fac?
So to do this on Vertex Colors, it has to be done on vertex/mesh level. I wrote you a little plugin that will work on all selected objects:
bl_info = {
    "name": "Vertex Color Expand",
    "author": "Jerryno",
    "version": (1, 0),
    "blender": (2, 78, 0),
    "location": "View3D > Toolshelf > Vertex Color Expand",
    "description": "Dilate/Expand a vertex color",
    "warning": "",
    "wiki_url": "",
    "category": "Mesh",
    }

import bpy

def dilate(mesh, layer_name, color):
    if layer_name not in mesh.vertex_colors:
        return

    polys_to_be_painted = [False] * len(mesh.polygons)
    verts_to_be_painted = [False] * len(mesh.vertices)

    for poly_id in range(len(mesh.polygons)):
        for id, loop_id in enumerate(mesh.polygons[poly_id].loop_indices):
            vert_id = mesh.polygons[poly_id].vertices[id]
            if mesh.vertex_colors[layer_name].data[loop_id].color == color:
                polys_to_be_painted[poly_id] = True
                verts_to_be_painted[vert_id] = True

    for poly_id in range(len(mesh.polygons)):
        for id, loop_id in enumerate(mesh.polygons[poly_id].loop_indices):
            vert_id = mesh.polygons[poly_id].vertices[id]
            if polys_to_be_painted[poly_id] or verts_to_be_painted[vert_id]:
                mesh.vertex_colors[layer_name].data[loop_id].color = color
    return

class VCDilate(bpy.types.Operator):
    bl_idname = "vertex_colors_dilate.dilate"
    bl_label = "Dilate/Expand"
    bl_description = ""

    def execute(self, context):
        for ob in context.selected_objects:
            dilate(ob.data,
                   context.scene.vertex_colors_dilate.layer_name,
                   context.scene.vertex_colors_dilate.color)
        return{'FINISHED'}

class VCDilateUI(bpy.types.Panel):
    """Vertex Color Dilate/Expand UI Panel"""
    bl_label = "Dilate/Expand"
    bl_space_type = "VIEW_3D"
    bl_region_type = "TOOLS"
    bl_category = "Vertex Colors"

    def draw(self, context):
        layout = self.layout
        col = layout.column()
        col.label(text="Target Layer:")
        col.prop(context.scene.vertex_colors_dilate, "layer_name", text="")
        col = layout.column()
        col.label(text="Target Color:")
        col.prop(context.scene.vertex_colors_dilate, "color", text="")
        col = layout.column(align = True)
        col.label(text="For All Selected Objects:")
        col.operator("vertex_colors_dilate.dilate")

class VCDilateProps(bpy.types.PropertyGroup):
    layer_name = bpy.props.StringProperty(default="Col")
    color = bpy.props.FloatVectorProperty(default=(1.0, 1.0, 1.0), subtype='COLOR', soft_min=0, soft_max=1)

def register():
    bpy.utils.register_class(VCDilateUI)
    bpy.utils.register_class(VCDilateProps)
    bpy.utils.register_class(VCDilate)
    bpy.types.Scene.vertex_colors_dilate = bpy.props.PointerProperty(type=VCDilateProps)

def unregister():
    bpy.utils.unregister_class(VCDilateUI)
    bpy.utils.unregister_class(VCDilateProps)
    bpy.utils.unregister_class(VCDilate)
    del bpy.types.Scene.vertex_colors_dilate

if __name__ == "__main__":
    register()

Edit: does not work in 2.8
I propose another approach which is not vertex colors based, mainly because vertex colors influence is limited by the inner geometry of the mesh.
Instead, we can use some kind of "cut mask", which allow to do the following:

It can be used also with more complex shapes, as soon as a boolean intersect (same as the operation in edit mode) can be applied:

bl_info = {
    "name": "Generate a mask on a texture using boolean operation",
    "author": "lemon",
    "version": (1, 0),
    "blender": (2, 78, 0),
    "location": "3D View > Scene properties > Cut masks",
    "description": "",
    "warning": "",
    "wiki_url": "",
    "category": "Mesh"}

import bpy, bmesh, bgl
from mathutils import Color

def Find( l, name ):
    index = l.find( name )
    if index == -1:
        return None
    return l[index]

def GetSelection():
    return bpy.context.active_object, bpy.context.selected_objects

def RestoreSelection( active, selected ):
    active.select = True
    for o in selected: o.select = True
    bpy.context.scene.objects.active = active

def BGLInit( imageWidth, imageHeight ):
    bgl.glDisable( bgl.GL_SCISSOR_TEST )
    bgl.glViewport( 0, 0, imageWidth, imageHeight )

    bgl.glMatrixMode( bgl.GL_PROJECTION )
    bgl.glLoadIdentity()
    bgl.gluOrtho2D( 0, imageWidth, 0, imageHeight )
    bgl.glEnable( bgl.GL_TEXTURE_2D )

def BGLToDefault():
    bgl.glEnable( bgl.GL_SCISSOR_TEST )
    bgl.glLineWidth( 1 )
    bgl.glDisable( bgl.GL_BLEND )
    bgl.glColor4f( 0.0, 0.0, 0.0, 1.0 )

def PaintMask( cutObjects, colors, defaultColor, uvMapName, imageName, borderSize ):

    image = Find( bpy.data.images, imageName )

    if image is None:
        return { 'INCORRECT' }

    imageWidth = image.size[0]
    imageHeight = image.size[1]

    BGLInit( imageWidth, imageHeight )

    try:
        buffer = bgl.Buffer( bgl.GL_FLOAT, imageWidth * imageHeight * 4 )

        bgl.glClearColor( *defaultColor, 0 )
        bgl.glClear( bgl.GL_COLOR_BUFFER_BIT | bgl.GL_DEPTH_BUFFER_BIT )

        bgl.glLineWidth( 2 * borderSize )

        for obj, color in zip( cutObjects, colors ):

            uvMap = Find( obj.data.uv_layers, uvMapName )

            if uvMap:

                bgl.glColor3f( *color )

                for polygon in obj.data.polygons:

                    bgl.glBegin( bgl.GL_POLYGON )

                    for x, y in [uvMap.data[vIndex].uv for vIndex in polygon.loop_indices]:
                        bgl.glVertex2f( x * imageWidth, y * imageHeight )

                    bgl.glEnd()

                    if borderSize > 0:
                        bgl.glBegin( bgl.GL_LINE_LOOP )

                        for x, y in [uvMap.data[vIndex].uv for vIndex in polygon.loop_indices]:
                            bgl.glVertex2f( x * imageWidth, y * imageHeight )

                        bgl.glEnd()

        bgl.glFinish()

        bgl.glReadPixels( 0, 0, imageWidth, imageHeight, bgl.GL_RGBA, bgl.GL_FLOAT, buffer )
        image.pixels = buffer[:]
        del buffer

    finally:
        BGLToDefault()

    return {'DONE'}

def MakeCopy( obj ):
    newObj = obj.copy()
    newObj.data = obj.data.copy()
    bpy.context.scene.objects.link( newObj )
    return newObj

def SelectVertices( obj, mode ):
    bpy.ops.object.mode_set( mode = 'OBJECT' )
    bpy.context.scene.objects.active = obj
    bpy.ops.object.mode_set( mode = 'EDIT' )
    bpy.ops.mesh.select_all( action = mode )

def TriangulateMesh( obj ):
    bpy.ops.object.mode_set( mode = 'OBJECT' )
    bm = bmesh.new()
    bm.from_mesh( obj.data )
    bmesh.ops.triangulate( bm, faces=bm.faces[:] )
    bm.to_mesh( obj.data )
    bm.free()
    del bm

def MakeCut( obj, cutter ):
    bpy.context.scene.objects.active = obj
    bpy.ops.object.mode_set( mode = 'OBJECT' )
    bpy.ops.object.select_all(action='DESELECT')

    SelectVertices( cutter, 'SELECT' )
    SelectVertices( obj, 'DESELECT' )

    bpy.ops.object.mode_set( mode = 'OBJECT' )
    cutter.select = True
    obj.select = True
    bpy.context.scene.objects.active = obj
    bpy.ops.object.join()

    try:
        bpy.ops.object.mode_set( mode = 'EDIT' )
        bpy.ops.mesh.intersect_boolean( operation = 'INTERSECT' )
        TriangulateMesh( obj )
        bpy.ops.object.mode_set( mode = 'OBJECT' )
        return obj
    except:
        DeleteObjects( [obj, cutter] )
        return None

def MakeCuts( obj, cutters ):
    newObjects = [MakeCopy( o ) for o in [obj]*len(cutters)]
    newCutters = [MakeCopy( o ) for o in cutters]
    return [MakeCut( o, cutter ) for o, cutter in zip(newObjects, newCutters)]

def DeleteObjects( objects ):
    try:
        bpy.ops.object.mode_set( mode = 'OBJECT' )
        for o in [o for o in objects if o]:
            o.select = True
            bpy.context.scene.objects.active = o
            bpy.ops.object.delete()
    except:
        pass

def CreateMasks( obj, selectedObjects, colors, defaultColor, uvMapName, imageName, borderSize ):

    cutObjects = MakeCuts( obj, selectedObjects )

    PaintMask( cutObjects, colors, defaultColor, uvMapName, imageName, borderSize )

    DeleteObjects( cutObjects )

def GetTargetFromScene( scn ):
    obj = None
    try:
        if scn.cutMaskUseActive:
            obj = scn.objects.active
        else:
            obj = scn.objects[scn.cutMaskObject]
    except:
        pass
    return obj

class CutMaskApply( bpy.types.Operator ):
    bl_idname = "cutmask.apply"
    bl_label = ""
    bl_options = {'REGISTER'}

    @classmethod
    def poll(self, context):

        scn = context.scene

        if not context.mode == 'OBJECT':
            #scn.cutMaskError = "Must be in object mode"
            return False

        obj = GetTargetFromScene( scn )

        if not obj or obj.type != 'MESH' or scn.cutMaskObjectUVMap not in obj.data.uv_layers:
            #CutMaskApply(context).report({'INFO'}, "No mesh target object")
            return False

        if scn.cutMaskObjectUVMap not in obj.data.uv_layers:
            #scn.cutMaskError = "Uv map undefined in target"
            return False

        if scn.cutMaskImage not in bpy.data.images:
            #scn.cutMaskError = "Image mask undefined"
            return False

        cutterNames = [elt.name for elt in scn.cutMasks]

        if obj.name in cutterNames:
            #scn.cutMaskError = "Target object cannot cut itself"
            return False

        for name in cutterNames:
            if name not in scn.objects:
                #scn.cutMaskError = name + " is undefined"
                return False
            elif scn.objects[name].type != 'MESH':
                #scn.cutMaskError = name + " is not a mesh"
                return False
            elif scn.objects[name].data.uv_layers:
                #scn.cutMaskError = "Warning: " + name + " has a UV layer"
                pass

        return True

    def invoke(self, context, event):

        wasActive, wereSelected = GetSelection()

        scn = context.scene

        objName = scn.cutMaskObject
        distance = scn.cutMaskDistance
        uvMapName = scn.cutMaskObjectUVMap
        imageName = scn.cutMaskImage

        cutterNames = [elt.name for elt in scn.cutMasks]
        cutterColors = [elt.color for elt in scn.cutMasks]
        defaultColor = scn.cutMaskDefaultColor

        try:
            obj = GetTargetFromScene( scn )
            cutters = [scn.objects[c] for c in cutterNames]

            if obj.type == 'MESH' and all( o.type == 'MESH' for o in cutters ):
                CreateMasks( obj, cutters, cutterColors, defaultColor, uvMapName, imageName, distance )
#        except:
#            print( "error level 1" )
        finally:
            RestoreSelection( wasActive, wereSelected )

        return { 'FINISHED' }

class CutMaskListActions( bpy.types.Operator ):
    bl_idname = "cutmask.list_action"
    bl_label = ""

    action = bpy.props.EnumProperty( items = ( ('UP', "Up", ""), ('DOWN', "Down", ""), ('REMOVE', "Remove", ""), ('ADD', "Add", ""), ) )

    def invoke(self, context, event):

        scn = context.scene
        idx = scn.cutMaskIndex

        if self.action == 'DOWN' and idx < len(scn.cutMasks) - 1:
            scn.cutMasks.move( idx, idx + 1 )
            scn.cutMaskIndex += 1

        elif self.action == 'UP' and idx > 0:
            scn.cutMasks.move( idx, idx - 1 )
            scn.cutMaskIndex -= 1

        elif self.action == 'REMOVE':
            scn.cutMasks.remove(scn.cutMaskIndex)
            scn.cutMaskIndex -= 1

        elif self.action == 'ADD':
            for o in [o for o in bpy.context.selected_objects if o.name not in [cm.name for cm in scn.cutMasks]]:
                item = scn.cutMasks.add()
                item.name = o.name
            scn.cutMaskIndex = len(scn.cutMasks) - 1

        return {"FINISHED"}

class CutMaskItems( bpy.types.UIList ):

    def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
        split = layout.split(0.6)
        split.prop( item, "name", text="", emboss=False, translate=False )
        split.prop( item, "color", text="" )

    def invoke(self, context, event):
        pass

class CutMaskPanel( bpy.types.Panel ):
    bl_idname = 'OBJECT_PT_my_panel'
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"
    bl_label = "Cut masks"

    def draw(self, context):
        layout = self.layout
        scn = bpy.context.scene

        row = layout.row()
        row.template_list( "CutMaskItems", "", scn, "cutMasks", scn, "cutMaskIndex", rows=3 )

        col = row.column( align = True )
        col.operator( "cutmask.list_action", icon='ZOOMIN', text="" ).action = 'ADD'
        col.operator( "cutmask.list_action", icon='ZOOMOUT', text="" ).action = 'REMOVE'
        col.separator()
        col.operator( "cutmask.list_action", icon='TRIA_UP', text="" ).action = 'UP'
        col.operator( "cutmask.list_action", icon='TRIA_DOWN', text="" ).action = 'DOWN'

        layout.row().prop( scn, "cutMaskDefaultColor", text="Default color" )

        layout.row().prop( scn, "cutMaskUseActive", text="Active object as target" )
        if not scn.cutMaskUseActive:
            layout.row().prop_search( scn, "cutMaskObject", scn, "objects", text="Target" )

        obj = None
        try:
            obj = scn.objects[scn.cutMaskObject]
        except:
            pass
        if obj:
            layout.row().prop_search( scn, "cutMaskObjectUVMap", obj.data, "uv_layers", text="UV map" )
        else:
            layout.row().prop( scn, "cutMaskObjectUVMap", text="UV map" )

        layout.row().prop_search( scn, "cutMaskImage", bpy.data, "images", text="Mask" )

        layout.row().prop( scn, "cutMaskDistance", text="UV margin" )

        layout.row().operator( "cutmask.apply", text="Apply" )

        if len( scn.cutMaskError ) > 0:
            pass

class CutMaskListProp( bpy.types.PropertyGroup ):
    name = bpy.props.StringProperty()
    color = bpy.props.FloatVectorProperty( subtype = 'COLOR', default = (1.0, 1.0, 1.0), min = 0.0, max = 1.0, description = "color picker" )

def register():
    bpy.utils.register_module(__name__)
    bpy.types.Scene.cutMaskUseActive = bpy.props.BoolProperty()
    bpy.types.Scene.cutMaskObject = bpy.props.StringProperty()
    bpy.types.Scene.cutMaskObjectUVMap = bpy.props.StringProperty()
    bpy.types.Scene.cutMaskImage = bpy.props.StringProperty()
    bpy.types.Scene.cutMasks = bpy.props.CollectionProperty( type = CutMaskListProp )
    bpy.types.Scene.cutMaskIndex = bpy.props.IntProperty()
    bpy.types.Scene.cutMaskDistance = bpy.props.IntProperty( default = 1, min = 0 )
    bpy.types.Scene.cutMaskDefaultColor = bpy.props.FloatVectorProperty( subtype = 'COLOR', default = (1.0, 1.0, 1.0), min = 0.0, max = 1.0, description = "color picker" )
    bpy.types.Scene.cutMaskError = bpy.props.StringProperty()

def unregister():
    bpy.utils.unregister_module(__name__)
    del bpy.types.Scene.cutMaskObject
    del bpy.types.Scene.cutMaskObjectUVMap
    del bpy.types.Scene.cutMaskImage
    del bpy.types.Scene.cutMasks
    del bpy.types.Scene.cutMaskIndex
    del bpy.types.Scene.cutMaskDistance
    del bpy.types.Scene.cutMaskDefaultColor

if __name__ == "__main__":
    register()

That's a really clever and especially fast approach, but typically you want a nice transition between the shaders (fading out the color). Is there any chance fading out the mask or blur the image at least, with e.g. some slider? If not, I'm sure this approach drastically improves the workflow of other users however, using this as a base for further paint work so much thanks for your effort, it's a sweet addon @lemon.

@brockmann, this is the object of http://blender.stackexchange.com/questions/76890/how-to-activate-smoothing-in-bgl-opengl... so if I get an answer, I will update this one! But for a progressive or falloff fading... this is another story!!

@brockmann it would be best to ask the question a bit generally/differently, you might get more creative solutions like lemons, rather than exact answers like mine. For example I have no idea what you are trying to do, there might be some even more elegant way;) You can Gaussian_smooth any texture in Cycles like this: http://blender.stackexchange.com/a/10544/7777

@Jerryno I agree. My answer was a guess. And as often we don't have a real overview of the real need. But the question is interesting. Please @ brockman don't hesitate to complete your question

Thanks guys! In general I'm interested in the most generic way adding different shaders to different parts of an object without painting. To provide an example, my actual goal is shading hundreds of keycaps for several close-ups @Jerryno. Their topology is nearly the same for all caps, regardless of whether it's tab, backspace or something. However the top surface is quite bumpy, more rough than the rest of the surface with a nice soft transition. I did some research before and using vertex colors seems ideal for that job, since no additional maps are requiered.

@brockmann, so which part of the keycaps are to be shaded using this technics? The transition between the bumpy part and the others?

Yeah, I'm using vertex colors as 'black and white mask' via attribute node and plug the color output into the fac input of a mix shader @lemon

@brockmann... so I am wondering if using the same principle as in my answer but to assign vertex color (not to make a mask)... what do you think about it?

@brockmann if those key-caps are all same height you could also use the object's Z mapping coord (scaled down to 0..1 range) as input into ColorRamp for the mask. Then you would avoid any vert_colors or textures. With a bit of math it could be upgraded to mask the same absolute height from the top of the key-cap regardless how tall it is. But if you need to mask the center also, that would not work like this.

That's a great idea too, but I don't want to waste your time - if that's ok for you I'll try to implement that for you/us next week or something... Again, thanks for your answer @lemon

Thanks @Jerryno, that sounds interesting ;) They have different heights per row on the keyboard but if we could avoid all additional maps with that, would great indeed. I have to work in the next days, but after that I'll try it and let you know... Thanks again, It's awesome to have you here guys.


text:
How to get all types of nodes dynamically?
The node editor is constantly changing due to cycles. There are new nodes in every release of blender so I'd like to know whether there is a way to get all available node types in a list. I remembered that Node Wrangler has this beautiful "switch my node to something else" thing, which I thought already implements that functionality. However, all nodes are hard coded like that:
shaders_output_nodes_props = (
    ('ShaderNodeOutputMaterial', 'OUTPUT_MATERIAL', 'Material Output'),
    ('ShaderNodeOutputLamp', 'OUTPUT_LAMP', 'Lamp Output'),
    ('ShaderNodeOutputWorld', 'OUTPUT_WORLD', 'World Output'),
)

Q: Is there a way to get a complete list of all available node types by category and ideally all custom groups as well with bpy.types or something similar?

This addresses the second part of your question. How to auto generate all this.
Node Category (cycles) and each registered node.bl_idname in the category
import bpy

ddir = lambda data, filter_str: [i for i in dir(data) if i.startswith(filter_str)]
get_nodes = lambda cat: [i for i in getattr(bpy.types, cat).category.items(None)]

cycles_categories = ddir(bpy.types, "NODE_MT_category_SH_NEW")
for cat in cycles_categories:
    print(cat)
    for node in get_nodes(cat):
        print('bl_idname: {node.nodetype}, type: {node.label}'.format(node=node))

Output is (snipped):
NODE_MT_category_SH_NEW_CONVERTOR
bl_idname: ShaderNodeBlackbody, type: Blackbody
bl_idname: ShaderNodeValToRGB, type: ColorRamp
bl_idname: ShaderNodeCombineHSV, type: Combine HSV
bl_idname: ShaderNodeCombineRGB, type: Combine RGB
bl_idname: ShaderNodeCombineXYZ, type: Combine XYZ
bl_idname: ShaderNodeMath, type: Math
bl_idname: ShaderNodeRGBToBW, type: RGB to BW

Custom Node Groups of type ShaderNodeTree
[ng for ng in bpy.data.node_groups if ng.bl_idname == 'ShaderNodeTree']

I can't tell if I should just delete my answer now that you have answered it far better.

What a mess... Thanks @zeffii. Is there a way get all custom groups in this way too?

@RayMairlot keep your answer, someone might invest time in making a "prettier" answer than this silly example of mine :).

@brockmann custom groups ? ill add that..

I don't like to call something a mess when it can be achieved in just a few lines of python. Hardcoding all of those mapping lists just doesn't seem right.

Right, didn't meant your code. I meant that the majority of blender's API is well designed (far better than in many other DCC's). However when it comes to the node editor it feels mad sometimes. In this case that's a heavy iteration to get 30 node types (IMHO). Nevermind, many many thanks for posting that @zeffii

I agree, some of parts of the API are a little lacking. Iterate once, and then cache it in a dict.

Yes, this is possible in a similar way to Best way to get a list of modifiers in Python?
You can use bpy.types.ShaderNode.__subclasses__() to see everything which uses ShaderNode as its base, e.g. the Cycles nodes.
This returns a list of all the nodes, from which you can extract information. Below, I collect the identifier of each node and then print them out:
import bpy

nodes = [node.bl_rna.identifier for node in bpy.types.ShaderNode.__subclasses__()]

for node in nodes:
    print(node)

Result:
ShaderNodeLightFalloff
ShaderNodeBsdfVelvet
ShaderNodeCombineXYZ
ShaderNodeBackground
ShaderNodeHoldout
ShaderNodeTexPointDensity
ShaderNodeMaterial
etc...
etc..
etc.

Using node.bl_rna.name instead of node.bl_rna.identifier would result in:
Light Falloff
Velvet BSDF
Combine XYZ
Background
Holdout
Point Density
Material
etc...
etc..
etc.

To explore the available properties, e.g. identifier, name etc. you can enter this in the Python Console:
nodes = bpy.types.ShaderNode.__subclasses__()

Then to access a single node type this and press Ctrl+Space to autocomplete and show the available options:
nodes[0].bl_rna.

Thanks. Is there any way to get the categories too?

What do you mean by categories? If you mean the 'Add' menu, I presume that's defined manually. If there is a property on the node that does that, I haven't found it yet.

If this answer has helped you, please consider accepting it. See: http://stackoverflow.com/help/accepted-answer

Yes, Shader, Texture, Color and so on. Populating a complete list would be awesome, furthermore your solution not work for custom groups... (upvoted already)

I think as far as the current question goes, I have answered it, but in regards to your additional comments you should probably add those details into your original question.

@brockmann Node groups are accessible with bpy.data.node_groups. Is that what you mean?

Yeah, I think we can combine both worlds... Thanks, I'll give it a try @RayMairlot.

In blender 4.0, the first answer here doesn't seem to work anymore (prints an empty list) and the second answer only prints a few nodes, not all of them. I'm actually trying to print a list of all Geometry Nodes. Any help appreciated.

import bpy

def GetAllNodes(target):
    set_result = set()
    for li in bpy.types.__dir__():
        type = getattr(bpy.types, li)
        if hasattr(type,'bl_rna'):
            base = type.bl_rna.base
            while base:
                if base.identifier==target:
                    set_result.add(type.bl_rna.identifier)
                    break
                base = base.bl_rna.base
    return set_result

print(len(GetAllNodes('Node')), "All")
print(len(GetAllNodes('ShaderNode')), "Shader")
print(len(GetAllNodes('GeometryNode')), "Geometry")
print(len(GetAllNodes('CompositorNode')), "Compositor")
print(len(GetAllNodes('TextureNode')), "Texture")


text:
How to re-register a built-in operator?
An existing operator can be overridden by assigning bl_idname of an existing operator to a new one. This can be used to extend and even limit the functionality of original operators.
As an example, the following operator is using the bl_idname of the original save operator (wm.save_mainfile), allowing the self.filepath to be manipulated before saving:
import bpy

from bpy_extras.io_utils import ExportHelper
from bpy.props import StringProperty
from bpy.types import Operator

class ExportSomeData(Operator, ExportHelper):
    """This appears in the tooltip of the operator and in the generated docs"""
    bl_idname = "wm.save_mainfile"  #
    bl_label = "Save..."

    # ExportHelper mixin class uses this
    filename_ext = ".blend"

    filter_glob: StringProperty(
        default="*.blend",
        options={'HIDDEN'},
        maxlen=255,
    )

    def execute(self, context):
        print(f"Call save as, rejig {self.filepath}")
        #bpy.ops.wm.save_as_mainfile(filepath=self.filepath)
        return {'FINISHED'}

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

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

if __name__ == "__main__":
    register()

However, when converting this into an add-on we would have to re-register the old operator to get the original operator functionality back in order to prevent the user having to restart blender or reload all the scripts each time.
Q: What's a reliable way of re-registering the old operator when the add-on gets disabled?

AFAICT Reload scripts doesn't revive it either.

Hi. Seeing as overriding an operator isn't common, I think it would be good to give some context in the question (aside from the code) as to what is meant by 'overriding' in this case. (Also, might be good to quote anything relevant from that other question, just in case it disappears at some point.)

@brockmann This question sounds like an antipattern.

How about just adding the operator as a separate one, but instead changing the keyboards shortcuts and menu items to your addon. Them you can restore.

Not sure what you mean by "Did not say anything like that"? I'm not saying anything is wrong with the question at all. But you linked to another question, so I'm saying to include any information that is relevant in the question body itself and to give context to what 'override' means here.

I hadn't heard of 'overriding an operator' in this context before so I've made a few edits to clarify what it means and what that code does. Feel free to rollback if you disagree with them. Cheers.

As mentioned  if the operator has a python class then it is easy to import and reregister.  IMO  The implied question here is how to reregister a builtin operator.. or even for that matter can they be. @Leander re shortcuts and menus... how to replace the Save menu item  becomes an issue.  Overriding is a "one fell swoop" approach

Many thanks @RayMairlot. Only minor corrections (technical details)...


text:
After merging objects: how to get rid of double faces?
I have 2 objects. They have some edges and faces in common (but also some differences of course). I can merge these with ctrl+J. I can then do 'remove doubles' to remove the double vertices.
However, this way I end up with double faces and edges.
For example, I have a face of model A and an edge of model B. The edge of model B is in the same plane as the face of A and the edge of B also goes through the edges of the face of A.
I would like that the edge of B cuts the face of A and its edges, so that the edge of B becomes a part of the edges of the faces of A.
That way I can do further editing on the model.
A 'manual' fix is possible but then I'll have to it over 150 times which is a bit much.
So, is there a simpler automated way to do this in Blender? I've searched a bit around but I don't even know how it's supposed to be named, so all tips are welcome.
The end result will be a 3D-printed lens adapter for a vintage lens so the accuracy of the model is rather important.
Thanks in advance!
Update:
My goal is to merge the light and the dark blue parts.
The boolean operator seems to work fine with basic cubes, but it fails when using it with my more complex model. Depending on whether I set the normal of the dark blue ring on inside/outside it either doesn't work (throws error) or it gives a weird results with only around half of the faces shown. Looks a bit like This recent problem. I've applied scale and normals with ctrl+A and ctrl+N.

ok I just had a look at the blend file : is merging them manually acceptable for you (without loose the vertices positions) ?

As I cannot obtain any good result with the boolean (starting from Blue Fox's file), I propose this editing approach.
The steps below are in the layer #15 of the blend file :

The objects are still separated. Open the faces to be merged.
Relocate the upper mesh and merge the two
Select the upper opposite edges and CtrlE and "bridge edge loops"
The same for the lower opposite edges
And the same for the last opened part, but without the extremities, because of the needed ngones at these extremities
Make faces for the extremities (select manually the vertices and face F)
Remove doubles

This is not a real answer of the question (more or less "how to make the boolean work"), but the job is done. No vertices were moved.
I have noticed these here :

Face centers with no face (maybe construction points ?), surrounded by O
A plane, is that printable (1) ?
And in (2), the inner faces overlap

This approach did the job! Thank you very, very much for your effort! It makes working with Blender a lot more doable for a beginner like me. Also thanks for the suggestions for 3D printing.

You can try to union your meshes with the boolean modifier.
Here is the principle :

Select the big cube in the center
Add it a boolean modifier
Select another cube (this one shares a face with the previous one, but they are not merged for now) as the object in the modifier
Select the operation type : "union"
Click apply

Same thing for the shares edges :

Depending on the complexity of your models, this may work or not.
Note : the bad thing is boolean modifier does not keep quads. So for instance, if you want to do other operations after that (for instance Bevel, subsurf, ...) it will not work very well..

Thanks! This seems the way to go. I tried this with some simple cubes and it does what I want it to to. But I get some weird results with the boolean modifier and my (rather complex) model. It removes part of the model and in the terminal I get errors like 'groud 0xa86214c8 is unclassified!'. It also seems I'm not the only one with this problem, so I'm searching for a solution. I already tried scaling (and apply scale) 100 times but this didn't solve the issue.

@BlueFox, eventually try to see if it is a normals problem (edit mode, select all, ctrl+N). But as I said in the answer "Depending on the complexity of your models, this may work or not."

To remove doubles:

go to edit mode on youre mesh
press space on youre keyboard
type: remove doubles
click on it
you're done

Thank you for your comment but sadly this doesn't fix the issue. I expected this to work and tried this a few times but it didn't, as was written in my original post.


text:
Problem with screw modifier: oval
I'm having a problem with the srew modifier in Blender.
Instead of a nice circle, it produces an oval!
I have the problem with both 2.76 and 2.76b, and I run Ubuntu 15.10. I've probably done something wrong, but what?
Update: here's the blend file:
(as the problem is solved, I removed the link).
The problem is regarding the red object (it's selected in the image below).
(I had to remove one screenshot to add the link...)
Here is a screenshots:

The circle object has scale unapplied.
Press Ctrl+A > Scale and red circle will be screwed correctly.

Read more:

Why is it important to apply transformation
Apply Object transformations - wiki

The Screw modifier uses the individual origin of the object that it is applied to, so make sure that the origin is right in the middle of your object. If not, the Screw modifier will use the wrong Origin-Point.

Should I put the origin point in the middle of the object the modifier is applied to? That doesn't seem to work (the object rotates around itself). Currently, the origing point is were the arrow axes are shown, together with the cursor. I did a small test in the same file and made a simple spring and this seemed to work...

The 3D cursor may not me in the middle of your object too. Go to Edit Mode and select the Circle. Press Shift+S -> "Cursor to selected" and leave Edit-Mode. Now set the Origin to 3D-Cursor. This might help. If it still doesn't work please upload the .blend-file.

Sadly that doesn't work, as that way an object 'around' the triangle is created instead of a much bigger circle (or I'm still doing something wrong). I've uploaded the .blend file, it's in the original post now.