text:
How to move selected object exactly towards/away from the camera origin?
TLDR: Given an object that's within my camera view, I want to move the object exactly towards / away from the camera's "origin" such that the object will appear to remain in the same position from the camera's perspective. How can I do this?

I'm new to Blender and dabbling with camera-matching techniques to manually reconstruct a 3D mesh by matching up several static images (from an old game I love). As a first step, I'm trying to figure out how Blender's "Align to view" feature works, and having trouble.
First I added a Camera and entered "Camera view", and used shift + right click to place a 3D cursor somewhere in front of the camera. See screenshot - the left pane is the camera view and the right pane is another view from the side:

Then I clicked Add -> Empty -> Plain axes (the simplest movable object I can think of) and selected "Align to view":

As expected, the new object's local axes are aligned to the camera view. In a second viewport, I can look at the object from a different angle, and click and drag the (blue) Z axis to move the object towards and away from the camera view. But what I did not expect is that the Z axis is perpendicular to the camera "lens plane", it's not pointing directly at the center of the viewport. As a result, moving the object along the Z axis causes it to change position from the camera's perspective:

I also tried setting the 3D cursor to the camera (ie. the very back point of the camera) and then aligning the object to the cursor, but this seemed to have the same result: the object's Z axis was perpendicular to the camera "lens plane", rather than pointing at the cursor itself.
What I want is to align an object's axis to point exactly to the back tip of the camera (or to the 3D cursor), so that I can move the object along the Z axis without it changing position from the camera's perspective. How can I accomplish this?
I remember playing around with this on an older version of Blender in 2016, and got it to work without trouble, but Blender's UI has changed a lot since then. Note: I'm now on Blender 2.91.2 on a Mac, if it matters.

Found a solution here: Move vertices towards/away from camera?
That solution is basically to snap the cursor to the camera, set pivot point to cursor, and then scale the object up/down rather than moving it. I'm still unclear how I would move an object towards/away from the cursor, but this scaling solution meets my needs.

if i understood you right, you want to change the axis from global to local.

Then select your camera and press G and Z. Now you can move the camera by moving your mouse and it is just zooming in and out now.
UPDATED ANSWER:
ok, now you have an object and your camera in the right position and rotation so that you see your object perfectly through your camera.
Now select your camera and tap on "local"

then tap on "+"
then you got this

then tap on your object and with G -> Z you can move your object as you wanted.
Viel Erfolg! ;)

Thanks @chris, but that doesn't seem to do much. Adding a fresh object and selecting Align to transform orientation -> Local doesn't seem to have any effect (it looks the same as global orientation). Pressing G then Z is a great shortcut (thanks) but again, the Z axis (or any axis) isn't pointing directly to the camera's "center", rather it goes off to the edge of the camera viewport.

Also it's very likely that I'm using the wrong words to describe what I'm trying to accomplish; I'd be grateful for any tips on how to rephrase the question.

what do you mean with "align to view" ? do you mean "align active camera to selected"? align view to active?

My end goal @chris is to move an object precisely towards / away from the camera origin, such that when viewed from the camera's perspective, the object appears to get bigger or smaller but does not change position. Does that make more sense? Thanks for helping me figure out how to articulate this

ok, that's clear ;)

i updated the answer

Thanks again @Chris, I didn't know I could do that! But it doesn't have the desired effect. Selecting the transform orientation "Camera" still aligns the axis perpendicular to the camera's "lens plane", same as before, and the Z axis does not go through the camera origin itself.

ok, then can you please upload a video @yt, so that i can see what you are doing? Because if you do it that way, it works.


text:
Setting Scale Z of object to zero for complete movie?
I am using Blender for research purposes, analyzing eye movements of participants watching a movie. This can be done with blender and DynAOI: Add an object as Area of Interest in Blender (setting the movie as background image, then modeling an object over the person you're interested in) and then DynAOI matches weather participants were looking at or away the AOI.
The problem is that we need a 3D-object to match eye movements to, but it should actually only have 2 Dimensions - that is, eye movements were recorded along x and y axis, but not z (unfortunately it is not possible to match eye movements to a circle, because the program needs a 3D object).
Is there a way to do this? I tried setting scale of object Z to 0, but it does not seem possible to set Scale Z of object to 0 for the duration of the complete film scene. And it would take hours to set it to 0 for the duration of the complete scene we're interested in.

How are you setting the scale to zero, could you provide some screenshots? When you scale an object to zero it should stick for the whole duration of an animation, unless the scale is key-framed, and has other values

Thank you for responding so quickly! yes I needed to set keyframes for the movement of the object throughout the film scene.

Try editing the f-curves for the animation.

It looks like you have set a lot of key frames for location, rotation and scale. Your problem is that you have keys for the Z scale that you probably don't need.
While the object is selected, hover over the Z scale in the properties (Transform panel) and rightclick it. Use the menu item: Clear Single Keyframes. That will leave the x and y values intact (if you need them) and delete all the rest. The yellow or green color indicating keyframes should be gone.
Then fill in 0 into the Z scale and you should be done.
It's usually preferable to only key the aspects of your mesh that you need, like location and maybe rotation.

You could try to go in edit mode, and then select the vertices you don't mind (press C and then use the circle to select them) and then delete them by pressing X and the option "vertices". Otherwise I think that for make the eye moving you need key-frames. If you selected the option LocRotScale every time you reach the key-frame, it set the location (Loc), the rotation (Rot), and the scale (Scale) of the object to the value it had when you have set the key-frames. So basically you have to delete them, set the Z scale of the object to zero, and re-set the key-frames. To delete the key-frames, select the object, go on the frame on which there is the key-frame, and press Alt-I. Hope helps.

Thank you! The problem is that it took a lot of hours to set the key-frames, can I copy them somewhere and paste them after setting Z scale of the object to zero?

Well you can save a copy of your file and so you have a copy of the key frames, but it will result veeery long to past... @user29246

The numpad plus key lets you add a number to your filename or increases an existing one when you save. Having a bit of backup is always a good thing. But chances are your z scale is just x keyframes the same value.

source: Stack Exchange

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

sort: votes


text:
Rigging makehuman character in Blender 2.79
I  used makehuman to make a character, but rigging it in blender 2.79 failed.what could be the problem because whenever i go to pose mode the bones dont move with the character's body
I use blender 2.79
I use makehuman 1.1.1

This sounds like a basic armature mis-configuration. If the armature was not provided with the model, check the following:

Vertex groups in the model are not only existent but are assigned to the right areas (use weight paint mode to check).
The model has an Armature modifier on it, and the modifier’s target is the correct armature object. What’s more, the modifier is turned on (visible in both viewport and render).
Further modifiers on the model would not be interfering with the Armature modifier results. Shrink wrap would fall into this category, while corrective smooth would not.

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


text:
where can I find the edit menu in blender 2.9
I want to edit objects in the edit menu, but the edit menu can't be found in blender 2.9

This is the Tool Shelf, and has been replaced in the 2.80+ default interface by a more condensed Tool Shelf that uses gizmos, the various menus at the top of the 3D View, and the operations search engine. Check out The Blender Documentation page for advanced details, or comment below.
If you are opening an old blend file with a newer version of blender, try turning off “load UI“ in the file browser, so you will get the new default interface set up. You would want this, because many editors are quite different in 2.80 then they were in 2.79.

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


text:
Need to fix the dark shaded polygon

Need to fix the dark shaded polygon. All the plates are clear  but only one is not fixed. Any quick solution for this. tried to fix by applying smooth

maybe right click > Shade Flat?

This appears to be a normals issue. Turn on auto-smooth, clear custom split normals data, or shade flat (tried in that order) and see if it helps.


text:
MDD particles instances
I have been shifting from Lightwave to Blender I made some particles and dynamics which is not adaptable to blender. so few works I've done in Lightwave 3D and export it as MDD with help of plugin. (https://dpont.pagesperso-orange.fr/plugins/MDD_Pointer.html) Now I got the MDD particle showing in blender. But I'm trying to convert it as instances.. texture smoke..etc But I just hold on how to proceed further. As usual in Blender creating known things is a big challenge and nightmare every time for a longtime Blender Beginner. Can anyone help to fix it.
Attached the MDD imported Blender scene.

Welcome, please place given code into your question ... bellow your description is "Edit" link to adjust your Q. Thanks keep this site organised. :)

I'm not sure what I'm looking at your file ... usually for MMD import a "Mesh Cache" modifier is used ... but in your file is just a static point cloud without any dynamics. Does it what you want? Did you apply the modifier? In the current file with static point cloud - do you need instance a plane with texture or some volumetric procedural shader? Would be great to share some reference or sketch of desired result. How did you try to instance it?


text:
Particles emitter and dynamics

Dear Folks.
Im trying to do some dynamics which is coarse particles entering into the grinding table and then crushed by the three rollers and fine particles extracted upwards at the outlet by help of fan.
Is it possible to accomplish this by a single particle or we need add one or more particles with different geometry and wind dynamics.
As im stick to the basic of Lightwave 3d particles.
I cannot add different groups for wind or curve unaffected by other.(Blender)
Even in add in separate collection a wind dynamics affecting all particles.
Please kindly resolve and give me a solution to achieve this in blender if possible..
please Download the concept blender file attached in the link:
https://we.tl/t-jnYuTkLN52
Thanks

To start to think about some fake, it depends how final result should look like ... what all will be seen by viewer ... if crushed pieces ends like a dust (smoke) sucked by ventilator or still visible particles ... if you are looking for photo-realistic render or some schematic (principle) look. BTW your shared file expired ... to share file properly here (to be permanent) use https://blend-exchange.com

Agreed with above... bearing in mind: 'the final product is pixels',  I think it's important, here, to give us some indication of what you'd like the viewer to see, in the end. (Shots, style).

Sorry Dear Vklidu, I uploaded the file now. Kind check this file, there roller and grinding table will be rotating. Yes crushed pieces end like a dust or separate pixels with some generated while grinding. And all will be extracted or suction by a fan. well some of the particles which is coarse will hit above the fins of separator and drop down gets grind and extracted..

HI Robin Betts!  I will show the viewers in a single shot with a top camera view little tilted to some degree. so viewers can see the 1. grinding table rotating, 2. particles grinding on a roller,   3.fine products or dust  extracted upwards.  Shot duration: 15 seconds  including opening and closing the enclosure. Thanks

it will be helpful if some manipulated smoke that will be generated by grinding.

And one of the big issue is here is The model is  detailed one so I cannot handle it for showing the grinding operation so I will complete the dynamics with dummy objects say: only the outer shape with simple geometry and save the file and import. I tried for the first time baking but it failed to save and import. Any error ir mistake that im making? Blender version above 3.5.0

To affect specific particle system just by specific group of forces stored in a Collection ... go to Particle System Properties > Field Weights and set desired collection with Wind force object.
For your other questions it sounds like some illusion of final would be better way than try to simulate something with Rigid Body.

To start to think about some fake, it depends how final result should look like ... what all will be seen by viewer ... if crushed pieces ends like a dust (smoke) sucked by ventilator or still visible particles ... if you are looking for photo-realistic render or some schematic (principle) look.
BTW your shared file expired ... to share file properly here (to be permanent) use https://blend-exchange.com


text:
Animation Transform by assembling all at center
Could you help me to arrange and modify or group objects at center without scaling but in a horizontal plane. All the objects are placed in a collection

What exactly do you want? As it seems now, the best way would be to set a location keyframe for each object when they are in their start location, then move forward on the timeline, move the objects in the end location and set location keyframes again.

It might be helpful to people trying to help you if you uploaded an example blend file to the site https://blend-exchange.com and add that link in the question.

Yes. True we can do that for 4 objects in all direction. But multiples of 100 of objects it is not possible to add keyframe for every action. For instance assembling multiple bolts/hardware manipulating away to its origin- better I ask here for any method in animation nodes or geometry nodes or traditionally method.


text:
Equirectangular world-map UV layout
My first time posting, but I've already learned a lot from lurking around here over the last week, so thanks all.
For my first project I wanted to model the earth 100 million years from now based on the youtube linked: https://www.youtube.com/watch?v=uGcDed4xVD4
I started by projecting an equirectangular displacement map (white continents, black oceans) onto a globe, and then extruding the continents with a displacement modifier. I then sectioned the continents from the globe using a boolean difference modifier with a second globe just-about the same size, leaving me with a loose continent "skin". I seperated the continents into individual objects, rigged them and moved the continents, and voila:

And that's where I'm stuck. I want to unwrap this new earth and create a new equirectangular world-map from it, but for the life of me I can't figure out how. Straight unwrapping it isn't working. I suspect the combined geometry of the raised continents and globe and everything is just too complex. I've tried simplifying things using decimate, I've tried dissolving and otherwise cleaning up, I've even tried shrink-wrapping another globe over the model and using THAT instead, but I can't seem to get rid of the shrinkwrap "stretch lines" around the raised areas.
I'd appreciate any advice. I'm new to blender and to 3d in general, so my understanding of modelling is limited to what I could glean from forum posts and youtube tutorials - I expect there are much better ways to solve this problem than how I went about it.
Here is a .blend containing the model as far as I've managed to take it:

Note: Each face on the sphere is 10 degrees by 10 degrees, but I've added a cylinder each at 0 latitude and 0 longitude for convenience. I left them out of the model I tried to unwrap.
Thanks lots.

Set camera to side view, press "u" and select "Sphere Projection".

If you want PRECISE equirectangular projection, you'll need to write a script that generates uv coords based on vertex position. Shouldn't be too difficult, seeing that your geometry is normal sphere.

For some reason I'm not having any joy on my side following your instructions. Is it possible that the UV/Image Editor window to be set to not show the unwrap even though it has done it? If I could get it to this point I'd be happy, 'cause then I can just fiddle with the sphere's top and bottom vertices to get a proper equirectangular unwrap.

When I open the UV/Image Window, instead of getting the standard square grid the unwrapped faces usually appear on, I get something that looks like it's terribly zoomed in, then when I zoom out what's displayed is a plane with a single lateral and vertical line bisecting it. Don't know if that helps. I tried unwrapping a plain cube and sphere in a different project file and those work just fine. #confused

Looks like it IS a blender setting of some sort that was tripping me up - I copied the entire model out into a new project file and now it's projecting. I'm still not sure what might have caused this so if anybody knows I'd appreciate a heads-up for next time. THANKS SigTerm. :-)

Basically, you normally might want to create blank texture image in image editor (it should work without that), and unwrap only shows up when you're in vertex/face edit mode and have things selected. I don't know what could've been causing trouble, because I used your file to make this screen. Please note that I have no idea which spherical projection is used in spherical unwrap (It might not be "equirectangular" one), so if you need something specific/precise, research writing python scripts to generate uv coordinates.

Yeah I think you're right that this is going to require scripting. The unwrapping/sphere projection works, but for the life of me I can't get a useable map from it. The distortion is just too much no matter what I do. I suspect it's mostly because the continents are really seperate objects (which I joined previously) floating on top of the sphere, and blender is trying to compensate. A single object with just rectangles on it would probably unwrap better, but after trying shrinkwrap, remesh, decimate etc I'm still stuck, so scripting it is I guess. Thanks again for the feedback SigTerm

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


text:
Particle's material color only changes in Material View mode, and not when rendered
I've set up a plane with a material that changes color from red to grey over the life of a particle. I also set up a particle emitter that's particles are duplicates of the plane. The color of the particles change in my material viewmode, but when rendering or in the rendering viewmode it just stays the first color. I've attached a screenshot and a .blend.
https://drive.google.com/open?id=0B01VEy3y5m1kTDIweWxvaEFueG8

Please upload blends with BSE's tool...

The problem you are facing is mentioned on the manual page for the particle info node:

This node currently only supports parent particles, info from child
  particles is not available.

Because you are only rendering child particles rather than the parents, you encounter this issue. If you Shift+Ctrl click this node to see all of its outputs, you will see that they all show up black in the rendered mode of the viewport. IDK why exactly it is showing up correctly in the viewport in material mode...
To fix it, you obviously just switch to only using parent particles in the particle system, or find some alternate way to achieve the effect you are seeking.


text:
Is it possible to have a particle randomly rotate around a single axis?
I'm creating a particle system with particles set to display as a plane with an image on it. I'm trying to get the particles to rotate randomly, as in some rotate clockwise and some rotate counterclockwise, while still being able to face the camera, as they are duplicating a plane. All my attempts to understand the rotation system are in vain, I can get them to rotate to a single direction, but both "Random" sliders aren't constrained to the axis I want. They don't seem to obey the initial orientation I set. Any ideas?

It it possible to modify certain properties of particles with Python.
I only managed to modify particles that are alive as their properties seem to be overwritten as they are born. But if the properties are set after a frame change, i.e. as soon as new particles are born, this method works.
The following script registers a handler that inverts the angular velocity of half of the new particles after every frame change. I'm not familiar with a way to trigger the handler during baking, but caching the animation and using “Current Cache to Bake” works.
import bpy
from math import floor
from random import random

ps = bpy.data.objects['Cube'].particle_systems['ParticleSystem']

def refreshNow(val):
    current_frame = bpy.context.scene.frame_current
    for p in ps.particles:
        if current_frame == floor(p.birth_time) and random() < .5:
            p.angular_velocity *= -1
            p.prev_angular_velocity *= -1
    bpy.context.scene.update()
    return val

def my_handler(scene):
    refreshNow(0)

def register():
    bpy.app.handlers.frame_change_post.append(my_handler)

if __name__ == "__main__":
    register()


text:
Bake transparent textures onto plane
I'm trying to bake a branch made from a cut out atlas onto a single plane for a tree to be used in a game engine.

(Branch mesh with applied textures)

(Branch ready to bake onto a flat plane)
However, when I bake, the transparency on the textures does not go through to the bake. Instead, the transparency is replaced with a black fill.

(Bake result, replaces texture transparency with black fill)
I'm in the middle of creating another quite complex pine tree and I need to bake the branches onto single planes, very much like the SpeedTree Leaf Map Makers tool (aka "Clustering") as seen in this video demonstration.
I've wondered if there was a way to cutout transparency like what shaders can do in Unity and Unreal, using the transparency to cut out the geometry, making a very high poly mesh, then transparency won't be an issue. And I don't want to have to manually cut around every single leaf there.
I've done a lot of searching and have not found a way to do this without SpeedTree. Surely SpeedTree isn't the only program that can do this... right?
Thanks.
EDIT: Here is my material setup just in case anyone is wondering:

not sure if this will help but.. the way I do this, is by baking a Diffuse Color only, from the mask that I'm using as the factor in the mix shader with the transparency node.. thus having a mask image to use.
you can also you the emission shader with the emit bake.. probably a better choice.

Thanks for the reply!
The main problem is that the higher planes are blocking out the lower planes. Where it is transparent on the higher planes, it turns black and blocks out any lower branches that would be seen, like in picture 2 (top down view before baking).
So the bake is not looking through the transparency to the lower branches, it simply stops when it hits the mesh and ignores the transparency, unlike a camera render. That's my problem :/

And it should be noted that the Diffuse Bake Type is the one I'm using.

as far as I am aware you cannot bake transparency.. if is that what you mean. you can instead bake a mask image to use later on as factor between what you see and what you don't see. the problem you describe as higher planes are blocking out lower planes, is affected by the transparency samples in the render tab under light paths.. but that affects only the viewport/render.

Okay, I was hoping someone would say that it is possible, regardless of which program lol. Thanks.

So I've been racking my brain with this problem for half a year now. I've wanted to be able to make texture painted hair cards that I apply to flat meshes but then build up more complex clumps that I can bake out to get moss or do shells and fins techniques.
I finally cracked it playing around in Blender today. At least as long as I'm baking it to a flat plane and not to a new plane curving with the shapes that I'm baking.
The solution is to simply render it to a camera. This also works for normal maps, which is what I had issues with. Just place your objects in relation to the camera instead of a plane, connect whatever channel you want to render to the emission slot, set the color management to none in the render tab, and set the diffuse to 50% gray.

That makes a ton of sense! And seems so simple. I will try this out myself sometime and report back


text:
Python script - apply only to selected

Is there a way to tell the script to only apply the changes (moving keyframes in this case) to selected object(s)?
Here is the specific code I'm trying to modify:
for action in bpy.data.actions:
    for fcurve in action.fcurves:
        for point in fcurve.keyframe_points:
            point.co.x **=2

To aid people wanting to help it would be better if you could write the code in the question instead of just having an image of it.

You are right, but i don't thing that my code is really related to the answer - it is just a specific example...

but here's the code' if its can help anybody to help me -     for action in bpy.data.actions:
for fcurve in action.fcurves:
for point in fcurve.keyframe_points:
point.co.x **=2

Use the [edit] link to add it into your question.

Blender stores a list of the currently selected objects in bpy.context.selected_objects. It's not always as easy as this, to only effect the selected objects, but for your example you would access the current action of the selected object with the animation_data.action property:
import bpy

for object in bpy.context.selected_objects:

    for fcurve in object.animation_data.action.fcurves:

        for point in fcurve.keyframe_points:

            point.co.x **=2

thnx very much!

Actually, as i haven't been answered this question - link  - I'm trying to write my own script... Hope it will help someone.

The only reason I thought having the code was relevant is that depending on what properties you want to change the code could be far more complex. For example, if you wanted to effect the textures of the selected objects you would have to loop through the object's materials (doing various checks to make sure they exist) and then loop through the material's textures.

Ok, I see. The problem that's I'm not a programmer but a graphic designer, so I didn't thought to look deeper into the problem... Feeling a need to start learning Python... Thank you very much for help.


text:
Render the depth map in grayscale
I need to feed in an image processing software an image where the color of a pixel means the model's surface distance from the camera. 100% white would mean the closest distance, black - the furthest. Of course, I'd need to control this min and max distance to find the most appropriate values for every particular 3d model.
If I could get those values in HDR range, that would be much better than just 256 levels.
I noticed there's an option to select Z-Buffer in the channels in render result view, but I am not sure I can get the color levels work as I need.
Please suggest the most appropriate method how to get access to the depth data.

What is your question?


text:
Emission Problems in Blender Render
So I'm trying to make an intro for my youtube channel, and I made a shockwave effect for the background. It looks great, and as expected, my username without a material is pitch black in the render since it has no emissions on the material. But, when I do use even a fraction of an emission to help the colors pop out, the whole thing is blindingly bright. It doesn't even have to be an emission material! A lamp shining on the object is enough to recreate the same problem.

As you can see, the object is too bright, but it also doesn't show the true colors. I'm using a blue material and, get this, an orange material. I'm assuming the shockwave is providing light that is reflecting its own hue on the text. How do I make the true colors of my text pop out? (I also hope to give it some reflective lighting effects with a point lamp, but thats for another time.)

Could you upload your blend file. I would have a better idea why it would be doing this.

Since I can't yet comment, I have to reply as an "awnser."
You could maybe try rendering the username on a different scene with less light sources.


text:
How do I make an object cast shadows but be invisible in the render?
I want an object to affect light (cast shadows) but I don't want it to be visible in the image. There should be a way to do this?

Hello and welcome to BSE! Which rendering engine and Blender version are you using?

In Cycles or Eevee, that can be:

It uses the light path, testing if it is a ray from the object to the camera: if yes, the transparent shader is used.
For Eevee, you need to set the blend mode to alpha blend:

Great! Thank you!

@RobinBetts, yes you may be right... I propose you add another answer. That could interest people anyway. As you wish.

@Lemon's answer makes the object invisible to the camera, but still visible to shadows.
It also leaves the object visible to all other influences it might have on the scene .. in
glossy and diffuse reflections, if seen through refractive objects, and so forth. That may be what you want.
But if you want the shaded object to be invisible to everything but shadows, this is an alternative arrangement:

Thanks Robin! This works perfect. I should note that in EEVEE, depending on the distance of the light source(s) to the object you are trying to occlude with your shadow caster, having "Soft Shadows" enabled may prevent the shadow caster from providing 100% shadow coverage.

Interestingly, this still works even without the light path node, just by plugging the transparent shader directly into the Material Output (providing the material Blend Mode is set to Alpha Blend and Shadow Mode is set to Opaque). However, the node setup you included is the superior method, since it guarantees compatibility when switching between Cycles and EEVEE.

@Copperplate Ah! So you can make use of EEVEE's shadow-mapping mech.. Okydoky.. that's handy!

One final note: to control shadow intensity (make shadows lighter or "semi-opaque"), such as the shadow cast from an illuminated lampshade, simply insert a math node between the shadow ray output and the Mix Shader's fac input in the node setup above. Set it to "Multiply", and adjust the math node's value input to be any positive number less than 1 (ie. for half strength shadows, set to 0.5). This technique works great in both Cycles and EEVEE, but to work in EEVEE, you must set the Shadow Mode to "Alpha Hashed".

@Copperplate feel free to improve this answer, if you like, or add one of your own? This looks like a useful addition to the archive.

The simplest of them all would be a single glass BSDF shader with an IOR of 1. Does the job 100%


text:
Is it possible to see Vertex Weights in Edit Mode in the 3D View?
Is this documentation simply out of date? Is it possible to manipulate vertex weights in Edit Mode in Blender 2.8?

It looks like you have the exact same thing in 2.8, but to see the weight for the selected vertex you first need to assign it some weight, either in Weight Paint mode or with the Assign button under the Properties panel > Object Data > Vertex Groups list. As Robin says: The panel is displayed only when you have a vertex which has been assigned to a vertex group selected, even with a 0 weight value.

To see both the wireframe and the weight you can enable Vertex Group Weights in the Viewport Overlays.

Thank you!  Maybe this comment can supplement your answer with the detail that had me goofed. The panel is displayed only when you have a vertex which has been assigned to a vertex group selected. The difference between 'assigned to group x with value 0' and 'not assigned to group x' is not always clear: they're both blue in the painting system. The distinction isn't very consistent with Bevel Weight, etc.. I can't see a motive for it, except to save storage/lookup... but you could get around those, internally. I don't remember this in 3DS, XSI, etc..

Yes it makes no sense to me... Also note that, in the Viewport Overlays again, if you enable the Zero Weight > Active option under the Vertex Group Weights option, it displays black when the weight is 0, which should be the display setting by default.

Ahhh! More is revealed! At least you can tell them apart now. I guess (naturally) the system is geared to bone deformations, trying to avoid massive lists of groups appearing in the UI, which a vertex has nothing to do with. If I'm working on the left hand, I don't want to know (this vertex) is not weighted by the right ankle-bone.. but I still think there are better ways,,

A solution could be that when you select a vertex that is not affected to any group it would however be displayed in the panel, with the last selected vertex group displayed in grey (on the left of its weight value). Also as I said it would be logical that when you choose to display the Weight the black would be displayed by default, the question is often asked why it is blue yet it is part of a group. I don't know if there's any reason for these 2 solutions not to be implemented.

It's gratifying, though, how often I've thought 'This could be better' ... and then later, Blender has turned out to be right. Keeping a UI minimal, as well as complete, is a tough job, and expects the user to acquire some skills. The user is still the most sophisticated machine at the desk, after all. IMO, a lot of commercial packages fail at this .. 3DS, Photoshop..

mmh yes but sometimes I think we are right   ;)   Blender is so big that the Blender developers can't take care of everything, plus when you're used to a tool you sometimes lose sight of the obvious... it might also be some coding difficulties...


text:
How do you specify the name of a primitive created via the Python API?
For example, the command to create a cube is:
bpy.ops.mesh.primitive_cube_add(view_align=False,
                                enter_editmode=False,
                                location=(0.0, 0.0, 0.0),
                                rotation=(0, 0, 0),
                                layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))

But how do you specify its name so it's not automatically determined (e.g. Cube.001)?

After some  more searching I found the solution here Adding Named Objects in Blender with Python API
The following example creates five cubes with names 'LittleCube000', 'LittleCube001', 'LittleCube002', 'LittleCube003' and 'LittleCube004'
for i in range(5):
   add_cube(location = (i*2, 0, 0))
   bpy.context.active_object.name = 'LittleCube{:03}'.format(i)

You can also find an object named 'OldName', and updated to 'NewName':
object = bpy.data.objects.get('OldName')
if object:
    object.name = 'NewName'

However, if 'NewName' is already in use, then a numerical suffix will be automatically added to it.


text:
Can I render on both CUDA and OpenCL?
I have a vega 56 and a gtx 1060 both render just fine on their own but i would love to use them in unison if at all possible otherwise i will have to figure out how to sell my 1060 and buy an RX 590. Im willing to try 3rd party programs and plugins. Im using Blender 2.8 Beta ATM.


text:
Where is the 'holdout' option for collections in 2.8
I want to ask about the holdout option for collections. In view layer menu I only have 2 options - set exclude and clear exclude, but nowhere I can find a holdout option. Maybe someone knows something about whether it was removed or maybe they changed its place?

Hi, welcome to Blender Stack Exchange! What did holdout do, exactly? And what do you mean by collections? Blender 2.8 has them, but as far as I know there wasn't anything called that before.

On many tutorials I see option called holdout - it work like mask in previous blender - for ex we have 2 collections with 2 boxes crossing each other(one for collection) and when we set one collection to holdout, it will work like mask layer in 2.7 where holdout will be transparent and everything hide by it to camera will be transparent. I see this option in tutorials but I dont have it in blender.

What render engine is the tutorial using? I know in Cycles there's a holdout material node, but it seems to just be black (unless it only shows up black in the viewport).

I've been facing the problem too, the explanation is that holdout is only working with Cycles !

https://youtu.be/JpdmneLtlXQ
This video shows how to enable the holdout option and a few others.

While this link may answer the question, it is better to include the essential parts of the answer here and provide the link for reference.  Link-only answers can become invalid if the linked page changes. - From Review


text:
Little change in PY script Octane
I want to ask if someone could help me with Octane plugin. There is conversion plugin changing material from Cycles Mat to Octane Mat but problem is that instead of changing nodes it creates new material with .001 so in scene where I have right now about 400 materials and 20 instances in different buildings extend a lot conversion process. If someone would help me with that I will be very grateful. If may ask to avoid deleting other textures(right now its leaving only color map and delete other maps) that it would change whole texture nodes do Octane ones and leave disconnected I will be even more grateful.
Thank you for all your support.
    import bpy
import math
import functools

NORMAL_TYPE_TAG = '[NORMAL]'
IMAGE_TYPE_TAG = '[IMAGE]'

CONVERTERS_NODE_MAPPER = {
    'BSDF_PRINCIPLED':
    (
        'ShaderNodeOctUniversalMat',
        {
            'Base Color': 'Albedo color',
            'Metallic': 'Metallic',
            'Specular': 'Specular',
            'Roughness': 'Roughness',
            'Anisotropic': 'Anisotropy',
            'Anisotropic Rotation': 'Rotation',
            'Sheen': 'Sheen',
            'IOR': 'Dielectric IOR',
            NORMAL_TYPE_TAG + 'Normal': 'Normal',
        }
    ),
    'TEX_IMAGE':
    (
        'ShaderNodeOctImageTex',
        {
            IMAGE_TYPE_TAG + 'image': IMAGE_TYPE_TAG + 'image',
        }
    ),
}

CONVERTERS_OUTPUT_MAPPER = {
    'OUTPUT_MATERIAL': 'ShaderNodeOutputMaterial',
}

def is_converter_applicable(material):
    if material and material.node_tree:
        for node in material.node_tree.nodes:
            if node.type in CONVERTERS_NODE_MAPPER:
                return True
    return False

def find_output_node(node_tree, output_type):
    output_node = None
    if node_tree:
        for node in node_tree.nodes:
            if node.type == output_type:
                output_node = node
                break
    return output_node

def find_input_socket(node, input_name):
    input_socket = None
    if node:
        for socket in node.inputs:
            if socket.name == input_name:
                input_socket = socket
                break
    return input_socket

def find_node_to_target_input(node_tree, node, input_name):
    node_to_target_input = None
    input_socket = find_input_socket(node, input_name)
    if node_tree:
        for link in node_tree.links:
            if link.to_socket == input_socket:
                node_to_target_input = link.from_node
                break
    return node_to_target_input

def _convert_attribute(cur_node, octane_node, cur_attribute_name, octane_attribute_name):
    setattr(octane_node, octane_attribute_name, getattr(cur_node, cur_attribute_name, None))

def _convert_socket(cur_node, octane_node, cur_node_tree, octane_node_tree, cur_name, octane_name):
    octane_linked_nodes = []
    cur_links = cur_node_tree.links
    cur_input = cur_node.inputs[cur_name]
    octane_links = octane_node_tree.links
    octane_input = octane_node.inputs[octane_name]
    if hasattr(cur_input, 'default_value') and hasattr(octane_input, 'default_value'):
        if octane_input.type == cur_input.type:
            octane_input.default_value = cur_input.default_value
        elif cur_input.type == 'VALUE' and octane_input.type == 'RGBA':
            octane_input.default_value[0] = cur_input.default_value
            octane_input.default_value[1] = cur_input.default_value
            octane_input.default_value[2] = cur_input.default_value
            octane_input.default_value[3] = cur_input.default_value
    for cur_link in cur_input.links:
        octane_from_node = convert_to_octane_node(cur_link.from_node, cur_node_tree, octane_node_tree)
        if octane_from_node:
            octane_links.new(octane_from_node.outputs[0], octane_input)
            octane_linked_nodes.append(octane_from_node)
    return octane_linked_nodes

def _convert_cycles_normal_to_octane_node(cur_node, octane_node, cur_node_tree, octane_node_tree, cur_name, octane_name):
    _convert_socket(cur_node, octane_node, cur_node_tree, octane_node_tree, cur_name, octane_name)
    cur_links = cur_node_tree.links
    cur_input = cur_node.inputs[cur_name]
    octane_links = octane_node_tree.links
    octane_input = octane_node.inputs[octane_name]
    for cur_link in cur_input.links:
        if cur_link.from_node.type == 'NORMAL_MAP':
            color_input = cur_link.from_node.inputs['Color']
            for cur_color_link in color_input.links:
                octane_from_node = convert_to_octane_node(cur_color_link.from_node, cur_node_tree, octane_node_tree)
                if octane_from_node:
                    octane_links.new(octane_from_node.outputs[0], octane_input)
                    if octane_from_node.type == 'OCT_IMAGE_TEX':
                        _convert_socket(cur_link.from_node, octane_from_node, cur_node_tree, octane_node_tree, 'Strength', 'Power')

def _convert_to_octane_node(cur_node, octane_node, cur_node_tree, octane_node_tree, cur_name, octane_name):
    # try:
    if cur_name.startswith(NORMAL_TYPE_TAG):
        cur_normal_name = cur_name[len(NORMAL_TYPE_TAG):]
        _convert_cycles_normal_to_octane_node(cur_node, octane_node, cur_node_tree, octane_node_tree, cur_normal_name, octane_name)
    elif cur_name.startswith(IMAGE_TYPE_TAG) or octane_name.startswith(IMAGE_TYPE_TAG):
        assert cur_name.startswith(IMAGE_TYPE_TAG) and octane_name.startswith(IMAGE_TYPE_TAG)
        cur_attribute_name = cur_name[len(IMAGE_TYPE_TAG):]
        octane_attribute_name = octane_name[len(IMAGE_TYPE_TAG):]
        _convert_attribute(cur_node, octane_node, cur_attribute_name, octane_attribute_name)
    else:
        _convert_socket(cur_node, octane_node, cur_node_tree, octane_node_tree, cur_name, octane_name)
    # except Exception as e:
    #     pass

def convert_to_octane_node(cur_node, cur_node_tree, octane_node_tree):
    octane_node = None
    if cur_node.type in CONVERTERS_OUTPUT_MAPPER:
        octane_node = octane_node_tree.nodes.new(CONVERTERS_OUTPUT_MAPPER[cur_node.type])
        octane_node.location = cur_node.location
        for input_socket in octane_node.inputs:
            _convert_to_octane_node(cur_node, octane_node, cur_node_tree, octane_node_tree, input_socket.name, input_socket.name)
    if cur_node.type in CONVERTERS_NODE_MAPPER:
        octane_node = octane_node_tree.nodes.new(CONVERTERS_NODE_MAPPER[cur_node.type][0])
        octane_node.location = cur_node.location
        for cur_name, octane_name in CONVERTERS_NODE_MAPPER[cur_node.type][1].items():
            _convert_to_octane_node(cur_node, octane_node, cur_node_tree, octane_node_tree, cur_name, octane_name)
    return octane_node

def convert_to_octane_material(cur_material, converted_material):
    if not cur_material or not cur_material.node_tree:
        return
    if not converted_material or not converted_material.node_tree:
        return
    cur_node_tree = cur_material.node_tree
    octane_node_tree = converted_material.node_tree
    octane_node_tree.nodes.clear()
    output = find_output_node(cur_node_tree, 'OUTPUT_MATERIAL')
    if not output:
        return
    convert_to_octane_node(output, cur_node_tree, octane_node_tree)

I haven't looked at the details, but assuming that this works similar to LuxCore and other third party engines, they likely implement their own custom nodes and shader tree. Therefore you can't simply re-use the Cycles materials / node tree, which is why the script performs the conversion.

Remove as Orphans?
If octane materials are orphans, ie have no users as indicated by 0 in materials menu then remove them using outliner in "Orphan Data" mode
How can I remove all unused materials from a .blend file?
Delete all materials that aren't assigned to a face?
Only materials with numeric suffix
If octane materials are the only ones with the suffix
import bpy
copy_mats = [m for m in bpy.data.materials
        if m.name[-3:].isnumeric()]

while copy_mats:
    bpy.data.materials.remove(copy_mats.pop())

How to merge around 300+ duplicate materials?
Edit Script and tag as "Octane" material.
The script posted has the definition of convert_to_octane_material(cur_material, converted_material) method but not the call.
If that method is slightly altered to tag a converted material as being for Octane
def convert_to_octane_material(cur_material, converted_material):
    if not cur_material or not cur_material.node_tree:
        return
    if not converted_material or not converted_material.node_tree:
        return
    converted_material["octane"] = True #<== This line inserted
    cur_node_tree = cur_material.node_tree
    ...

can remove all later by looking for that key.
import bpy
octane_mats = [m for m in bpy.data.materials
        if m.get("octane", False)]

while octane_mats:
    bpy.data.materials.remove(octane_mats.pop())


text:
How can I exclude a collection from rendering with Python?
Can anybody help me write a script that excludes certain collections (for rendering)?
In the outliner the tooltip says: Layer.Collection.exclude and bpy.data.scenes["Scene"].exclude, so I've tried things like:
bpy.ops.outliner.LayerCollection('Structure').exclude
bpy.data.scenes["Scene"].LayerCollection('Structure').exclude

The online Python link is here: https://docs.blender.org/api/master/bpy.types.LayerCollection.html#bpy.types.LayerCollection.exclude but I don't know what to do with that information.

Use the View Layer

From the context view layer
>>> C.view_layer.active_layer_collection
bpy.data.scenes['Scene']...LayerCollection

>>> C.view_layer.active_layer_collection.name
'My Leaf 0.0'

>>> C.view_layer.active_layer_collection.exclude
False

Alternatively from scene
>>> C.scene.view_layers['View Layer'].active_layer_collection
bpy.data.scenes['Scene']...LayerCollection

>>> C.scene.view_layers['View Layer'].active_layer_collection.name
'My Leaf 0.0'

>>> C.scene.view_layers['View Layer'].active_layer_collection.exclude = True

Related: Change active collection

Today I struggled with the same question. I found out I could just use this in 2.83:
bpy.context.layer_collection.children['My Collection'].exclude = True
bpy.context.layer_collection.children['My Collection'].exclude = False
Edit: tested in 2.90.1
bpy.data.collections['My Collection'].hide_render = True;
bpy.data.collections['My Collection'].hide_render = False;

Thanks, the python tool tips seem to be incredibly hard to infer what the Python API is. I'm sure it was a lot easier to infer in <=2.79

This doesn't seem to work in 2.9. It's incredibly annoying having an API that constantly changes

Great, thanks. My script now looks like this and works well:
def CollControlAll (context, CollList, CollLen):
    layer_collection = bpy.context.view_layer.layer_collection

    for lay in range(0,CollLen):
        layerColl = recurLayerCollection(layer_collection, CollList[lay])
        bpy.context.view_layer.active_layer_collection = layerColl
        layerColl.exclude = False
        layerColl.hide_viewport = False


text:
Why is this black line appearing on my mesh when I render?

I am new in Blender and  I can't understand why rendering goes wrong?

I just had to check normals with Ctrl+N in Edit mode


text:
Moving textured pipe along path
i need to animate a cable being moved trough a machine, ive tested ways to do this with the curve/bevel and playing with the start/stop of this, problem comes when i have a texture on it as this ends up deforming when moved around a bend, which it needs to do, not to mention moving the start/stop of the curve doesnt actually give the illusion of moving unless you see the ends of it, so close ups just end up looking like a stationary tube.

Can you post screenshots of your current setup and the texture distortion? It does sound like a problem with reality, like, in real life it's sometime hard to tell if something smooth is moving unless there's irregularities on it. Maybe adding ring/stripes to the cable would help?

i have rings on it, just with the current setup i had it showed a lot of distortion on the rings when it came to a bend, it seems ive gotten my answer now though thanks! (also no photos because of an NDA of sorts)

This is a (straight) pipe modelled as a curve, using its native Bevel, mapped in its own UV space, deformed along its X by another spiral curve, using a Curve modifier. Translating the pipe along X with respect to the spiral's origin moves it around the spiral.

That's a lot of curves :) the straight pipe could have been a mesh.

wow this really seems like what i was after! I still consider myself very much a newbie still in blender so this is awesome to learn, thank you!

The "Master of illustration" strikes again.

@ batFINGER Thank you. Yes, I like this one. I should go back and read my Edward R. Tufte .. especially The Visual Display of Quantitative Information. Give it a look, somehow, if you haven't, before. I like his rule of thumb for factual illustration.. you should imagine that ink is very, very expensive.


text:
Animation of two videos in Blender
I am attempting to run one video over the top of another.  In the base video, I have a guy running down a street.  This video is on a plane.  I have a second video that I created with some pain to render a cheetah running with an alpha layer using WebM codec. I have inserted this video on a smaller plane and constrained the plane to the street of the first video using keyframes so that it appears that the cheetah is chasing the guy.  I am unable to get rid of the black background on the cheetah video. Any help would be grateful.  Running Blender 2.91

https://youtu.be/wBZsD2obR5o?t=140

Check the alpha blend method on the cheetah clip material settings. I recommend “hashed.” If that is correct, check that in the material the alpha of the image is connected to the shader’s alpha somehow (using a mix shader node with the alpha connected to the factor, and a transparent shader node on one input, works good).


text:
Make Soft Body more rigid in one direction
I want to make a soft body simulation that is very stretchy along Y and Z axis, but almost doesn't deform along the X axis - doesn't bend when pushed or doesn't squish. Think of a tube or a ring that stretches to accommodate the ball passing through it, but it's length remains fixed, and the ball doesn't cause it to squish and shorten.
Is it possible to make?
I'm quite new to Blender, so excuse me if it's obvious.
One idea I had is to add additional invisible vertexes and edges to the soft body face that I don't want to deform that act as kind of ropes, and set them as goal. The problem is that they also limit the sideways movements of the verts along that face, and I would like it to be very elastic.
Thank you!


text:
How to cut a piece off a mesh using another mesh/edge as the cut shape
I want to cut off the bezier curve mesh so it has the same shape as the circle on which it is placed but i can't figure out what tool to use. I tried the boolean modifier but this didn't work. I need to keep vertices on top so i can fill the face later.
Any help is much appreciated.

https://blender.stackexchange.com/questions/50538/how-to-cut-an-object-along-a-curve/50560#50560

I’ve run into this type of problem before. I recommend extruding the circular background, and then using the resulting edge-to-faces to cut the wave tube. You may have to move the circular background a bit to make it offset, so it doesn’t just cut half the tube.
Use Boolean or the Boolean modifier for cutting. Selecting the mesh to be cut (I think, maybe it’s the other way around and you select only the mesh that’s DOING the cutting)


text:
How could I get the distance of a point to its nearest point?
Say I got some points distribut on a sphere, how could I get the distance of each point to its nearest point, for example, in pic 1, there is a point A, and its nearest point is B, and what I want is the distance r_A, and for each point X, I need an r_X.

The Geometry Proximity node do provide a distance value, but for each point, the value is 0, if I use a Map Range node to invert the values, the values I got for the points is the maximum setted in Map Range node.

Could I make this in GN?

unfortunately AFAIK this isn't possible with geometry nodes at the moment. But hopefully will be possible in the future. If you can't wait and want to do it anyway and you are willing to learn something new you should have a look to animation nodes. This amazing add-on can do such things.

Since the nodes have evolved a lot over time, there are now more solutions available:

For Blender 3.6+ ...just follow this guide
For Blender 3.4+ check out @Patter's answer below
For Blender 3.1+ use "The shortest edge trick"

...and if you want to get an overview of which node is available in which Blender version, follow this answer:
Can't find the node! Which node is available in which Blender version?

Find Nearest Point (Blender 3.6+)
With Blender version 3.6 a new node is available that makes this task a lot easier: Index of Nearest.
In this case, the node simply returns the index of the nearest element, which makes it just as easy to query its position with Sample Index:

(Blender 3.6+)
"The shortest edge trick" (Blender 3.1+)
...that's what I call this technique now.
In contrast to the quadratic complexity approach, this technique offers the advantage that only a fraction of the vertices necessary for the calculation is created, since only a triangulated mesh is used as a basis.
So this approach has a clear advantage in terms of speed, especially when the number of points to be calculated is high (500+).
How does it work?
The basic idea here is to shorten all edges between the points proportionally, and thus find the closest point. This method saves a lot of calculations and complexity and is basically applicable to any shape (grid, sphere, cube, etc.):
In the case of a grid with slightly offset points, the principle of operation is simplified as follows:

If the points are now moved, the edge length changes, which always takes the shortest path due to triangulation:

The only necessary basis is therefore to always have an optimally triangulated mesh as a starting point.
Depending on the type of mesh, this can be achieved in different ways.

In the case of a sphere you can simply use the node Convex Hull.
If you are using a grid with the Distribute Points on Faces node, you can achieve the triangulated mesh with the example I outlined in this answer: Selectively join points using geometry nodes
And for other shapes you can use various other tricks.

The rule is simply: if the points are connected at least once over the shortest distance by an edge, then you already have the necessary information.
What is the result?
In this concrete example, the solution applied to a sphere looks like this in the final result:

Step by step to the solution

First create your points with Distribute Points on Faces.

In the case of a sphere, the Convex Hull node makes it easy to obtain the required triangulated mesh without missing a point. For other shapes, it is best to create the mesh using the Triangulate (Shortest Diagonal) node.

Using the nodes Extrude Mesh, Split Edges and Separate Geometry you get the isolated edges of this mesh.

Then reduce the scale of each edge by half.

Now that the edges are reduced in proportion to their length, you can reliably find the nearest point with the node Geometry Proximity. If you then calculate the direction vector between your originally created points and the position results of Geometry Proximity, you will know in which direction the shortest vector points.

In the last step you only have to correct the length. Since you have shortened the edges by 50% before, you simply scale the direction vector by $4$, which is exactly the point you were looking for (Apart from a few minor rounding errors).

The final result is this (Each previously created point is here connected to the nearest point):

...and with animated Seed/Density it looks like this:

Here is an overview of the node group:

Here is the blend file (I added an additional view for debugging):
(Blender 3.1+)
...and as a bonus I added the animation to the blend file too, because it's so nice to see the thing in motion (even though I won't win any beauty contests with the node tree, but it's meant as a little animation example).

Useful Hints

This solution works best by converting a mesh into triangles with the shortest edge length! Quads are less suitable here, because they may produce false positives.
If you do not use a sphere, it is best to create the mesh using the Triangulate (Shortest Diagonal) node.
If you use a sphere, this works best with a sphere of the type Ico Sphere in a higher resolution.
Remember: If you use a sphere like in this example, the calculated distance is of course also the shortest straight path between the points. The real distance on a sphere would actually be the angle between the points multiplied by the radius of the sphere. The angle is obtained with the formula: $\alpha = 2 \ast \arcsin (\frac {s}{r \ast 2})$
If you get false positive results with this method due to closely spaced points or highly stretched triangles, simply change the scaling. For example, instead of first reducing the length with a factor of $0.5$ and then multiplying by $4$, you can reduce by a factor of $0.8$ and then multiply by $10$.

You second animated image is like a magnetic solar flare effect; nice!

this is genius, though it seems doesn't work for volume distributed points

@Daedra You're right, and if you find a (slim and easy) solution for volume distributed points, I'd be happy too ;-) Anyway, in relation to your question and the representation therein (distributed points on a sphere), I would still consider my answer as a solution, wouldn't I?

Yes, this is the better answer for my question, I will mark this

Brilliant solution. You can skip steps 3 and 4 using a Mesh to Points (Edges) node. This gives a new point cloud whose position is the midpoint of the edges. Then use the Geometry Proximity node to compare the original point cloud with this new one, giving half the distance between points to its nearest neighbour.

@Kenny Thanks for your feedback! The center of an edge only works if the points are evenly distributed. Hence this technique with shortening the individual edges. In extreme cases, this factor must even be reduced (see notes/hints).

Nice! For points distributed on a (non-convex) surface (i.e. where Convex Hull doesn't work): Use the original surface (maybe subdivide to get enough points), then move every vertex of that mesh to the nearest distributed point (using Sample Nearest, Sample Index and Set Position nowadays). Then use Merge by Distance (with a very small threshold). Finally Triangulate could be used (as already suggested by @quellenform).

It is technicality possible, but I would recommend searching for a different solution. The idea is to create as many copies of an object as the number of points that are in said object (or produced on object). Then we move this copies far away, so that the distance between object copies is grater than any distance between points of one object. Then we selectively separate one vertex of each object and make it source position "geometry proximity node" the rest we use as target geometry. This will give us closest distances between points.

(I am working on a laptop so the picture quality is bad look at the pictures below)

I recommend you look at the geometry before all the delete nodes to make sure that the copies are spaced far enough. If they are not, then increase the mesh line offset.

Basically raise the geometry to the power of 2 and modulo by the original number of verts, that's smart :) I think we need more nodes which have the "2nd best match" output, just like the "2nd cell distance" in voronoi texture node.

@MarkusvonBroady this can be done by delete the nearest point then recalculate the nearest distance

I don't think that is why MarkusvonBroady wants this functionality. If 2nd best match was included in the proximity node the (n^2 complexity) is not needed since you can just plug the same object as Target and Source Positon. The 1st closest will give you a field of zeros and 2nd closest will give the field of distances between points.

For Blender version 3.4.1 I found another solution using newer nodes (which didn't exist at the time of the other answers):

Edge Vertices
Edges of Vertex
Sample Index

It's several times faster than the older (still very nice) solution of @quellenform (depends on the number of points but I saw improvements of > 100x). Another advantage is that there is no problem with "false positives".
Idea:

Find the index of the shortest edge for each vertex by Edges of Vertex sorting by the edge length (given by Edge Vertices)
For each vertex find the other end of that shortest edge (sample the vertex indices of both ends of the shortest edge by Sample Index and then find out which is the one with another index than the current vertex).

Blend file:

It just creates cones pointing to the nearest other point (cone length = 1/2 distance).
For comparison it also contains the solution of @quellenform (Find Nearest 1) and a group making a triangulated mesh from points distributed on a surface (and that original surface) (Surface Points to Mesh).
Find Nearest 2 node group:

Simple example:

Also works with non-convex meshes:
(this is not a feature of the Find Nearest 2 node but of the helper node Surface Points to Mesh)


text:
How do I get object names to appear in the render?
In my scene I have multiple objects (30+). In the viewport I have the handy control of selecting (in the Properties Editor) Object> Display> Name and copying to selected.
This is beautiful for diagrams etc. as wherever my view is at whatever distance these labels have been placed instantly, always face me and are always the same size.
How can you get these to display in a rendered view?
Is the ONLY option to manually create a label for each object, get them to track to your camera (Probably have to track to an empty miles behind your camera rotation otherwise they offset if your camera isn't facing exactly front on to an object) and add some sort of scaling property to change depending on how far away you are?

One option would be to develop a python script to iterate through all objects in the scene and create and position a text object at the appropriate location and scale, replacing them when re-run. To get this to dynamically update you would probably need to invoke it from the ‘frame change’ handler so that they were repositioned on each frame. There may even be an addon for something similar.

I'm pretty basic on VB.net so wouldn't know where to start with this. I have a feeling though from peoples answers on different forums that the only way is a python script. Could be a good thing as it'd get me started on the programming

For the labels to be visible in the render they must be created as objects within the scene. The following script will process each object in turn and automatically create a Text object set to the object's name and position the Text in front of the camera so that it is in line with the object (1.0 blender unit infront of the camera) :
# Script to automatically generate labels for all objects in the scene and position them in the camera view
# Generated labels are prefixed with '_generated.' and replaced each time the script is run.
# Note that any objects with name that happens to start with '_generated.' will be automatically deleted!
#
# This script will automatically create a material named '_generated.Label' and assign it to all generated labels.
# The generated material can be modified to affect the appearance of the labels.

import bpy
from bpy_extras.object_utils import world_to_camera_view

scn = bpy.context.scene
cam = scn.camera

# Pickup the label material if it exists
mat = bpy.data.materials.get("_generated.Label")

if mat is None:
    # Material doesn't exist, create it
    mat = bpy.data.materials.new(name="_generated.Label")

# Get each object in turn
for obj in scn.objects:
    if obj.name.startswith('_generated.'):
        # Delete the old label
        scn.objects.unlink(obj)
        bpy.data.objects.remove(obj)
    else:
        # Create a new label
        bpy.ops.object.text_add()
        tobj = bpy.context.object

        # Set the name of the label to include the prefix so we can identify them and set the text
        tobj.name = '_generated.'+obj.name
        tobj.data.body = obj.name

        # Position the label between the camera and the object
        diffloc = obj.location - cam.location
        dist = (diffloc[0]**2 + diffloc[1]**2 + diffloc[2]**2)**0.5
        if dist == 0:
            tobj.location = cam.location
        else:
            tobj.location = cam.location + (diffloc / dist * 1.0)  #1.0 blender unit from the camera

        # Set the rotation the same as the camera and scale it appropriate to the distance
        tobj.rotation_euler = cam.rotation_euler
        tobj.scale = (0.03,0.03,0.03)

        # Assign material to object
        if tobj.data.materials:
            # assign to 1st material slot
            tobj.data.materials[0] = mat
        else:
            # no slots
            tobj.data.materials.append(mat)

Open a Text Editor window and click 'New' and name it 'objectnames.py'. Paste the above text into the window and click Run Script to run it.
The script examines each object in turn and calculates a position in line with the object where a label needs to be positioned for it to overlay the object. A new Text object is created at that location, orientated to face the camera, and assigned a material.

Once the script is run, switching to Camera view should show the labels positioned over each object in the scene. Changing the generated material '_generated.Label' will affect the appearance of all labels in the render.
The line :
tobj.location = cam.location + (diffloc / dist * 1.0)

affects the location of the labels - with the '1.0' indicating how far from the camera the labels should be positioned - amend it and re-run the script to position them closer or further from the camera.
Similarly, the line setting 'tobj.scale = (....)' sets the scale of the labels - again, amend that line to change the scale if desired (larger values give larger labels).
Amend the '_generated.Label' material to affect how the labels are rendered. For example, to give them an emission colour without the emission affecting the rest of the scene you may have something like the following :

This can produce the following result :

For animated scenes you will need to run the script for each frame of the animation to reposition the labels. This can be achieved via a "handler" which can be registered to execute each time the frame changes. This can be achieved with the following code :
# Script to automatically generate labels for all objects in the scene and position them in the camera view
# Generated labels are prefixed with '_generated.' and replaced each time the script is run.
# Note that any objects with name that happens to start with '_generated.' will be automatically deleted!
#
# This script will automatically create a material named '_generated.Label' and assign it to all generated labels.
# The generated material can be modified to affect the appearance of the labels.
#
# Scene Custom Property '_generated_label_scale' can be set to a numeric to set the scale of the labels.
# Create an object group named 'Labels' and place any objects within it to only render labels for those specific objects.

import bpy

def handler_object_labels(scn):

    cam = scn.camera

    labelscale = scn["_generated_label_scale"]

    # Pickup the label material if it exists
    mat = bpy.data.materials.get("_generated.Label")

    if mat is None:
        # Material doesn't exist, create it
        mat = bpy.data.materials.new(name="_generated.Label")

    # Get each object in turn
    for obj in scn.objects:
        if obj.name.startswith('_generated.'):
            # Delete the old label
            curve = obj.data
            scn.objects.unlink(obj)
            bpy.data.objects.remove(obj)
            bpy.data.curves.remove(curve)
        else:
            # Check if group 'Labels' exists and if object within that group
            if bpy.data.groups.get("Labels") != None:
                if (bpy.data.groups["Labels"].objects.get(obj.name) == None):
                    continue

            # Create a new label
            curve = bpy.data.curves.new(type="FONT",name="_generated."+obj.name)
            tobj = bpy.data.objects.new("_generated."+obj.name,curve)
            bpy.context.scene.objects.link(tobj)

            # Set the name of the label to include the prefix so we can identify them and set the text
            tobj.name = '_generated.'+obj.name
            tobj.data.body = obj.name

            camloc = cam.matrix_world.to_translation()

            # Position the label between the camera and the object
            diffloc = obj.location - camloc
            dist = (diffloc[0]**2 + diffloc[1]**2 + diffloc[2]**2)**0.5
            if dist == 0:
                tobj.location = camloc
            else:
                tobj.location = camloc + (diffloc / dist * 1.0)  #1.0 blender unit from the camera

            # Set the rotation the same as the camera and scale it appropriate to the distance
            tobj.rotation_euler = cam.matrix_world.to_euler()
            tobj.scale = (labelscale, labelscale, labelscale)

            # Assign material to object
            if tobj.data.materials:
                # assign to 1st material slot
                tobj.data.materials[0] = mat
            else:
                # no slots
                tobj.data.materials.append(mat)

    bpy.context.scene.update()

if not '_generated_label_scale' in bpy.context.scene.keys():
    bpy.context.scene["_generated_label_scale"] = 0.06

if handler_object_labels in bpy.app.handlers.frame_change_post:
    bpy.app.handlers.remove(handler_object_labels)
bpy.app.handlers.frame_change_post.append(handler_object_labels)

Note that this script uses a Scene Custom Property (_generated_label_scale) to control the scale of the labels (defaults to 0.06). By default, labels will be created for all objects in the scene. However, if a group named 'Labels' is found then only those objects within the group are given labels (so select all the objects you want to have labels, select Object/Group/Create New Group from the menu, then on the Objects propert panel rename the group to 'Labels').
Note that the labels are only refreshed on change of frame - so if you move objects or the camera you'll need to swap frame before the labels re-arrange.
This can produce the following result :

Blend file included

This is GENIUS!! Does exactly what I want!!!! Thank you so much. What do I do if I want just labels for certain layers, for example just everything in layer 2 and 3 is labelled and everything else is ignored

@SeanKilburn No problem - glad to help. It would be fairly straightforward to check which layers each object is in and affect the label based on that - I believe there are easy to access flags for the layer on object.data. I’m in the process of making a change to automatically trigger the labels on change of frame using a handler - just a couple of issues with tidying up as it’s eating memory a bit as I noticed it isn’t freeing the label text objects properly. I’ll see if I can include selection based on layer when I update it for that.

Thanks again, I hope you post your updated script when it's ready

@SeanKilburn I've updated the answer to include the updated script. This includes changes to improve efficiency (as the old one didn't clean up after itself properly) and to run automatically on change of frame (so it can be used for animations). Also, it provides a scene custom property to affect the scale and also objects can be placed in a group (Labels) to control which objects have the labels added. Hope this helps.

Thank you so much for this you've made me look like the man at my job!!

Great! Well done Rich‼‼

Update for Python API changes since 2.8
Sorry, it's not a handler, but i have done some debugging and browsing for errors to make it work with the new Blender versions.
# Script to automatically generate labels for all objects in the scene and position them in the camera view
# Generated labels are prefixed with '_generated.' and replaced each time the script is run.
# Note that any objects with name that happens to start with '_generated.' will be automatically deleted!
#
# This script will automatically create a material named '_generated.Label' and assign it to all generated labels.
# The generated material can be modified to affect the appearance of the labels.
#
# Scene Custom Property '_generated_label_scale' can be set to a numeric to set the scale of the labels.
# Create an object group named 'Labels' and place any objects within it to only render labels for those specific objects.

import bpy

if not '_generated_label_scale' in bpy.context.scene.keys():
    bpy.context.scene["_generated_label_scale"] = 0.06

scn = bpy.context.collection
cam = bpy.data.objects['Camera']

labelscale = bpy.data.scenes['Scene']["_generated_label_scale"]

# Pickup the label material if it exists
mat = bpy.data.materials.get("_generated.Label")

if mat is None:
    # Material doesn't exist, create it
    mat = bpy.data.materials.new(name="_generated.Label")

# Get each object in turn
for obj in scn.objects:
    print(obj.name)
    if obj.name.startswith('_generated.'):
        # Delete the old label
        curve = obj.data
        scn.objects.unlink(obj)
        bpy.data.objects.remove(obj)
        bpy.data.curves.remove(curve)
    else:
        # Check if group 'Labels' exists and if object within that group
        if bpy.data.collections.get("Labeled") != None:
            if (bpy.data.collections["Labeled"].objects.get(obj.name) == None):
                continue

        # Create a new label
        curve = bpy.data.curves.new(type="FONT", name="_generated."+obj.name)
        tobj = bpy.data.objects.new("_generated."+obj.name, curve)
        tobj.name = '_generated.'+obj.name
        tobj.data.body = obj.name
        bpy.data.scenes['Scene'].collection.objects.link(tobj)
        #        bpy.context.collection.objects.link(tobj)

        # Set the name of the label to include the prefix so we can identify them and set the text

        camloc = cam.matrix_world.to_translation()

        # Position the label between the camera and the object
        # tobj.location = obj.location
        diffloc = obj.location - camloc
        dist = (diffloc[0]**2 + diffloc[1]**2 + diffloc[2]**2)**0.5
        if dist == 0:
            tobj.location = camloc
        else:
            # 1.0 blender unit from the camera
            tobj.location = camloc + (diffloc / dist * 1.0)

        # Set the rotation the same as the camera and scale it appropriate to the distance
        tobj.rotation_euler = cam.matrix_world.to_euler()
        tobj.scale = (labelscale, labelscale, labelscale)

        # Assign material to object
        if tobj.data.materials:
            # assign to 1st material slot
            tobj.data.materials[0] = mat
        else:
            # no slots
            tobj.data.materials.append(mat)

```

As far as I was able to test the answer is yes Sean.
Look at my screenshots below (Blender v2.77, default scene and cube)

Look at Outliner, red square: It only shows the Cubes mesh symbol underneath the Cube_Object_Name. Nothing "extra" (like the visually render-able labels you want) are being added by turning on/off the (Viewport / Display only) settings in the Object -> Properties -> Display settings.

It's not quite what I'm after, because they don't display when the image is rendered. They're only there in the view port

So I guess there is nothing else left to do for you - to manually and/or Python-scriptwise add separate object labels as different objects to your Blender scene and use a [Track-To] Object constraint to force the labels to keep looking at the camera in the scene - like you already had suggested yourself.


text:
'Limit selection to visible' button missing in Edit Mode
If you see the image, the icon to enable 'Limit selection to visible' is not there.
Am I missing something?

You're in Wireframe shading mode, where the Limit Selection to Visible button would have no effect (as all vertices are visible all the time, so there is nothing to limit to). Change to one of the solid shading modes and it will return:

THANK YOU!! I was loading my file without UI and trying (over and over) to bring it back that icon.  I was even about to file a bug report about icons that disappear when I searched for "limit selection icon disappearing" and this answer came up.

I am also new to Blender.
For me I found that the icon came back when I went into edit mode from object mode.
It was not visible in shaded object mode - This could help clarify the above response (as I could not see this in the shaded mode). I spend a long time trying to find this icon or a way to enable it through text input.
I am surprised that this does not come up as a searchable command in the text input box (brought up with the space bar) even when in edit mode.


text:
How do I colour a fluid simulation in Cycles based on velocity?
I want to assign a gradient to the water simulations I have. I want to do this by the velocity in the current voxel, so the fastest moving areas will be red and the slowest blue.
How would this be accomplished using blender cycles nodes?

This feature is not possible using the current fluid-simulation, download a mantaflow-build. You have more chance to access the particle velocity there...

What kind of simulation do you have: Particle, external import, or Blender Fluid sim?

@ScottMilner Blenders fluid sim, I was think the attribute node could be used in a way to get the fluids velocity and colour that against a gradient but I cannot see a way of doing it

I've edited my answer to simplify the setup for particle velocity and particle speed. See the second answer below.

In Blender 2.82 and later, the fluid simulation engine used in previous versions has been replaced with Mantaflow. When Mantaflow simulates the fluid it provides a particle system that can be used to determine the velocity of the fluid in that region of the simulation.
To achieve this, use a Point Density node set to the Liquid Domain object with the Liquid particle system with a material similar to the following :

This takes the Object coordinates and converts into World coordinates - this is required as the particle system is always defined with respect to world coordinates. The Point Density defined the Object (the domain) and the particle system (Liquid) using World Space. Set the Radius to a suitable value such that the influence of each particle is large enough to prevent gaps and select Particle Velocity for the Color Space. The Color output will now represent the velocity of that section of fluid (with RGB representing X,Y,Z velocities.
In my example I used Separate, Absolute, Combine nodes to avoid negative values for use to colour the mesh for demonstration purposes. You can use a Vector Math 'Distance' node to convert the Color directly into a 'speed' instead, if desired.
Note that the Point Density can only be used with Cycles (ie, not Eevee).

The answer by @RichSedman is perfect but you can get the same result with a much easier setup:
First of all, you don't need a Texture Coordinate node and no Vector Transform node unless you want to modify the texture coordinates. And you can get rid of all those Separate, Absolute and Combine nodes as well.
The only thing you need is the Point Density node where you choose your domain as Object and Liquid as the Particle System and Space > World Space. For the Interpolation you can choose whatever you like, while Linear and Cubic result in smooher color transitions than Closest. Then choose Color Source > Particle Velocity. Plug the Color output into a Vector Math node set to Absolute to avoid negative values. The result you can either use as color for Principled, Diffuse, Emission etc.
If you just want to colorize the speed of the particles set the Color Source  to Particle Speed instead of Particle Velocity. You'll then get greyscale values where the speed is mapped from 0 to 1 which you can plug directly into a Color Ramp and give them the colors you want, with a color for the slowest speed on the left and the highest speed on the right. Add as many colors inbetween as you like.
If your fluid particles are too slow for your taste, so that the color from most of the mesh stays on the right side, you might consider to increase the speed values with a Math node set to either Multiply or Add between the Point Density and Color Ramp nodes.

Particle velocity:

Particle speed:

Could you adapt this answer to get the doppler-effect requested in this question, by taking the  dot-product of the velocity with the normalized vector from the particle's position to a defined viewing-point? I'm tempted, but inexperienced with fluids.

I have no knowledge of the things illustrated there, but the thing I get out of that is red symbolizes upward movement and blue downward movement. In the first answer the color is separated into XYZ values, I guess there it would be possible to get the Z velocity from -1 (down) to 1 (up). Making those values absolute would get rid of negative values resulting in black, and  some Greater Than math node could switch between red and blue. Or instead of Absolute you could use a Map Range node mapping -1 to 1 values to 0 to 1. Combining these informations could produce desired results.

The color-coding is 'Towards Probe', and 'Away From Probe', so it would be the dot-product as described.. fully Away  -> -1, fully Towards -> 1, map range ( -1 to 1 ) --> (0 to 1), put through a color-ramp. The vector to the probe is [(fixed) probe position] - [particle position], normalised. The velocity could be normalised, too, so only the direction is coded, not the speed-in-that-direction.

You have definitely more technical background on what is happening there than me. The Vector Math node has a Dot Product function so it should be no problem to enter to vectors there. But I'm not sure if it functions as expected since the particle velocities are all given in relation to world coordinates. But as I said, I'm lacking the technological background to understand what there is to do.

I'll give it a shot when I have time, but will probably get tangled up in the weeds of the sim :D

Reading the other question again I cannot get the information you are talking about, there is no mentioning of fully towards and fully away or the probe vector and a dot product. There is only red upwards, blue downwards and brighter color means faster. This should really be easy with the Z velocity (or X or Y, depending on which direction should be taken as upwards). So without your explanation I would have never known what the goal there is.

@Gordon You need a Shader node between your output and the Material Output node - as it stands this won’t render in Cycles as you’ve connected a vector/colour directly to Material Output’s Surface node. Also, the “optional” Multiply node is going to create some strange results if one or more of the channels is negative - since it will convert the vector into a scalar value.

@RichSedman You need a Shader node or it won't render in Cycles? I've shown the render in my images... If you plug colors, vectors etc. directly into the Material Output, it works like using a Viewer node: basically an Emission Shader Strength = 1. And for the negative values: in the first setup I used an Absolute node to avoid them - but actually that's not even necessary. The Point Density node has only 2 outputs, Color and Density. None of them are negative. Particle Age/Speed are mapped to 0-1, Particle Velocity is XYZ velocity mapped to RGB (from Blender manual).

@GordonBrinkmann it's certainly the case at earlier versions that this wasn't permitted as the colour couldn't be automatically converted to a BSDF. I've not got access to suitable versions to test this so don't know at what version this is apparently no longer the case. For the negatives, for 'Speed' you aren't going to get negatives,true, but for Velocity you will. Also, conversion won't be correct for 'speed' anyway.... consider a particle going at 0.5 in each of the x,y,z directions. Using a straight maths node will give a speed of 0.5 whereas it should actually be 0.866 (by pythagoras).

Maths node effectively averages all channels (0.5+0.5+0.5)/3 = 0.5 whereas actual speed would be sqrt(0.5**2 + 0.5**2 + 0.5**2) = 0.866

On using a BSDF: I've clearly stated in my answer the solution works with 2.82 and above because the Point Density node uses Mantaflow's fluid particle system for the particle info. So 1. it works and 2. he might as well use it for diffuse, glass, emission... I just wanted to show the resulting color. Again on negatives and resulting values: for negatives, I've put an Absolute node. For calculating the values: the original question asks for a gradient relative to the velocity, the fastest red and the slowest blue. No need for exact values since they should somehow be normalized anyway.

Ha - yeah - no worries. I was so in the habit of always connecting shader I didn't realise that had changed - and still did it by habit. Going back through the versions I actually had to go all the way back to 2.79b before Cycles would fail to render as a colour. Back then, connecting anything but a Shader node to Material Output would result in the shader working in 'material' mode but black when rendered. It was a common error back in the day. Looks like 2.80 and Eevee revamped all that and made it more tolerant. It's really strange going back to 2.7. It's changed a lot since then.

BTW, I wasn't criticising your answer - just trying to help.

@RichSedman Don't worry, it's all fine - as I said in my answer, yours is perfect. Mine is more like "if you want to have an easy way and don't care for perfection"


text:
Subdivision Surface modifier is not visible in rendered shading mode

Subdivision Surface modifier is not worked in render view when render is set to 6 and view is set to 0. What is meant by the 'view' and 'render' options here?

Your Subdivision Surface modifier is disabled

You should put more than 0 in the View parameter of your modifier, typically 2. View is for the Object or Rendered mode of the 3D view, Render is for a definitive render when you click the Render button in the Render menu of the Properties (6 is a lot though).

Rendered viewing mode, while it technically is rendering out your scene, still qualifies as a viewport shading mode. Therefore, your settings for what will appear in the viewport will affect this shading mode.

I had solved this problem later when i am click render button in properties editor

It doesn't really solve your problem, you've just launched a real Render, so it took account of the ratio you've chosen for Render, which is 6... If you want to see the effect of your modifier when you're working on your object in Object or Rendered mode you have to increase the Subsurf > Subdivisions > View from 0 to 2 for example.

The Rendered mode is a preview mode made to have a quick preview of the render, not a real Render, you can set the quality of both the Render and the Rendered mode in Render > Sampling > Samples > Render & Preview. Of course you can increase the Preview ratio up to the Render ratio, but it will slow down your preview. I guess you make a little confusion between Render and Rendered mode.


text:
Can I start panning after orbiting without re-pressing the middle mouse button?
Is there an addon or setting, that allows for smooth transition between zoom/pan/orbit?
What I mean is that if you push the middle mouse button you can orbit, but in order to pan you have to let loose of the middle mousebutton, press shift and press middle mouse button again, same for ctrl to zoom.
Is there an addon or setting that detects a shift keypress while in orbit mode and allows you to switch to pan without you having to let go of the middle mousebutton and goes back to orbit if you let loose of the shift key or switch to the ctrl key for zoom?
I am new to blender, and this would go a long way of healing my nose after the crash against the rightclicking edit mode wall.
Thanks!

Have you tried the flight mode Shift-F? Moving around in 3D viewport is something that takes a bit time but you'll learn to do well eventually :)

Yeah fly mode is great in object and edit mode :) But sadly it is not available in sculpt or texture paint and probably for a reason ... flying with a graphics tablet is not that great ;)

The only reason is the keybind is being overridden by brush radial control. If you disable or rebind the key to something else you can use fly mode in these modes as well. I just don't think it's very practical and would recommend you to try to assume control of panning and orbiting even if it feels awkward at first.

yes you are right :) the point of the question was not how to activate flymode, but rather on if there is a setting / addon that allows you to fluently switch between orbit/pan/zoom withour having to repress the middle mousebutton ... perhaps there is perhaps there is not ;) i do not know ... but if there is it would be great :D

It is very probably possible by setting the keyboard shortcuts right. I just have no idea how. Blender's possibilities of layering shortcuts is as powerful as it seems to be obscure. At least to me atm. I'm happy with switching shift mmb with mmb since I pan a lot more than I orbit.

Sorry for necro-ing an old post. But it came up top in my google search of "blender pan mid orbit" so I thought I would share for others.
I come from Sketchup and is very used to not releasing the middle mouse button while switching between pan and orbit.
@Gerald's answer pointed me towards the right direction.

In rotate view, add a shortcut to switch to move on left shift
In pan view, add a shortcut to switch to rotate on release of left shift

Nice :) so its possible to do in blender > 2.80 to assign modifier keys for the switch to move / switch to rotate. Marking this as answer then.

Brilliant! Thank you. Odd that you can't use "Shift" on it's own, unless you popup the details bit of "Switch to Rotate"; regardless, super helpful, feels much more comfortable now thanks!

I did some digging, and I am answering my own question ... I will not mark it as answer, because its a workaround. Perhaps someone can suggest an addon, that allows modifier keys to be used in keybinding without an additional key.
It is indeed possible to switch between orbit/move(pan)/zoom without releasing the middle mousebutton, but it is not possible at the moment to do it with pressing or releasing a modifier key like shift or alt, since modifier keys cannot be used in the keybinding without an aditional key.
When in orbit, move or zoom mode you can add a keybinding to switch between those three modes. Here are my settings that use mouse button4 to switch between orbit and move. When orbiting i hold mouse4 to pan and when i release mouse4 it goes back to orbit.

I wanted to post a solution to this (may only be possible in blender 2.80, not sure). It sounds like OP wanted it to function like 3ds Max (or other software). Just setup the keys exactly like this, and for Rotate View, under "modal" make sure you delete (with the X) any other "Alt" keys, there were 2 on mine that were for Axis lock and Axis lock (off)

I did everything as you described, and everything works as I wanted (as in 3dmax), but there is a problem. When I release the middle mouse button when I want to end panning, it does not stop, I can just move the mouse on the table and it will pan, without pressing any buttons or keys, to stop panning I need to press Escape. What could be the problem?
I want the controls to be like in 3dmax.

Hi Vladimir. If you want to react to a solutions proposed, it is best to do it as a comment. It can be misleading for future readers to understand whether you're reacting or proposing a new solution.
If you can modify your post accordingly, that would be great.

This does not provide an answer to the question. Once you have sufficient reputation you will be able to comment on any post; instead, provide answers that don't require clarification from the asker. - From Review

This is a setup that works great in Blender 3.6.5 and solves the problem of not getting stuck moving when you release the middle mouse.
Go to Blender Preferences > Keymap > 3D View > 3D View (Global)
And add these four items as the picture shows.

Basically:

Add a Switch to Move on Left Shift Press and a Confirm on Middle Mouse Release to your Rotate View Modal.
Add a Switch to Rotate on Left Shift Release and a Confirm on Shift + Middle Mouse Release to your Pan View Modal.


text:
Archimesh is not displayed in the Tool shelf
I've enabled Archimesh and just started using it. The problem is I can't find it among the tools in the Tool shelf. How can it be fixed?

In toolshelf -> create -> Archimesh -> Room tools

Thanks for the quick answer! I'm looking for the Room tools and other settings: https://youtu.be/p5q_P8WQegQ?t=1124

Find the new answer is edited

I experienced the same after built the house that I couldn't find the "archimesh" tool in the left shelf beacuse I left the project but I didn't save the the "User Preferece" windows when I accept the add on for the first time

I had the same problem doing that tutorial. I found that panel under Create -> Archimesh.
Cheers :)


text:
How do I assign a material to an Archipack object?
I use Blender 2.79 and am still pretty much a beginner.
I tried both Archipack and Archimesh. Archipack seems a bit more comfortable but I don't know how to assign a Material to it or change it from the default grey to something different. In Archimesh that is easy. I would like to use the Principle BSDF Shader and Cycles.
I cannot find documentation on either of those addons either... just a long thread in a forum.

Archipack can take advantage of a predefined material library.
If the default material library is missing, you get dumb white materials assigned.
Please take a look at https://github.com/s-leger/archipack/wiki/Materials in order to setup your default material library.
The aswer of @light-pankakes remains still valid when it comes to setup new materials.


text:
Blender partially rendering my scene
I'm trying to render a donut but when I render it in both Blender Render and Cycles Render I only get a grey/black portion of my scene rendered. By the way, I already checked if some of my objects are visible for rendering.
Result of rendering in both Rendering modes:

My scene:

Where is your camera?

http://imgur.com/B8oBXxp - here it is

@JOHNNYT If you need to add more information to your question please use the [edit] link below your question.

Your camera object is not set as active camera for the scene. Make it so either from the scene tab in the properties window or by selecting the camera and pressing Ctrl + 0

Thank you so much for your help ! i'm new to Blender and i'm pretty confused with some options here .