Snap to empty?

I have modeled quite a large number of 3D objects in my days, in many different pieces of software, (many I’m sure you yourself have seen in movies and on TV) and I am slowly getting deeper and deeper into Blender, but am missing some pretty basic features. I’ve spent quite a long time looking for a way to snap verts in a model I am building to the locations of empty objects (nulls).

Why would I try to do such a thing? I commonly will shoot survey photos when I am on set and track those photos in SynthEyes and generate a scene with null object locators. If I take them into just about any modeling package, I can just snap the creation of new verts to the locators and very rapidly build sets that match the live action.

When I am in edit mode in Blender, I simply can’t figure out a way to snap new verts to the locator positions (empties).

Any help here? Anyone? Anyone?

The SHIFT-S menu allows this. This is what the unusual 3D cursor (that target thing) is all about. You snap to the target but move the target with the SHIFT-S menu. So my common workflow is to select an Empty then SHIFT-S target to selection, which moves the target to the location of the Empty. Then select a vertex and choose SHIFT-S selection to target, which moves the vertex to the location of the target.

Yeesch! Really? That hardly seems easy. Take 3DS Max as a counter-example. In Max, if you turn on snapping and set the snapping type to object centers, no matter what you are doing, that action will snap to object centers and it will pick the object center closest to the cursor, in a path nearest to the viewer (you) in the 3D viewport.

You would simply turn on snapping and just click, click, click, fill. Voila! Polygon built based on three nulls in 3D space. Click, click, click, fill. Click, click, click, fill… It goes really, really fast! By the way, I don’t want to move vertices to the 3D cursor. I want to create vertices right on the snapped-to object centers. (You should also be able to snap vertex creation to other things, like the vertices in another object, or face centers of another object, or, well, pretty much anything you can select in either object or edit mode.)

I have looked into this and it would seem I am not the first person to have asked about this on the internet, nor am I the first to have observed that Blender’s is an inelegant workflow for this type of work, which is a common workflow in other 3D software when doing photogrammetry or various other tasks.

This workflow may be uncommon to Blender users, but you can’t miss what you never had (or perhaps never needed because of the type of work you do) but I have worked in feature film and TV for 20 years doing CGI and this is a common need.

Now if only I had the same relationship with the Blender developers that I once had with Newtek and later Autodesk…

2 Likes

By the way, the most exciting development in CGI and compositing these days is happening in Blender. My “complaints” are only meant to point out what people coming from other software packages might be missing and some reasons why Blender won’t be adopted by bigger VFX companies who would be happy to donate to Blender’s development.

I’m not trying to start any kind of feature-envy war here. I’d just like to completely ditch Nuke, After Effects and the various 3D tools I find myself having to use and replace it all with Blender which is so close (despite a few show stoppers) and getting closer every day.

2 Likes

Everyone wants Blender to be like something else when they switch over. I came from 3DSMax years ago, and hated the 3D cursor, now I just use it second nature. You can also watch tutorials by the master Blender modelers. Perhaps there are other shortcuts.

If for some reason you have input data represented by not the smallest available modeling units - vertices, but Objects - Empties, that looks like darn inefficient way to do the job. Any Object is a bunch of data, even the Empty should have a name e.g.
And, please, do not call me fanboy because of this statement.
If you had a Mesh where each vertice would represent coordinate information (and which easily allows to snap other mesh vertices in Blender) you would have had more efficient thing at hands.
I easily could imagine quite a simple python script where vertices would be created on the centres of Empties. Just a matter of finding someone with some interest and programming skillz.

But generally you’re right, there are things to reconsider in Blender.
Good luck in your endeavor with it.

I tend to agree with the op: it is quite silly that we cannot snap to empties without resorting to the 3d cursor as a in-between step. Any other object can be snapped to, so why are empties the odd one out?

A enhanced cursor control add-on is available, but it will not snap to the center point of an empty.

1 Like

a workaround could be generating a point cloud from empties…


import bpy
sce = bpy.context.scene
sel = bpy.context.selected_objects
verts = [o.location for o in sel if o.type=='EMPTY']
mes = bpy.data.meshes.new('Empties')
mes.from_pydata(verts, [], [])
ref = bpy.data.objects.new('Empties', mes)
sce.objects.link(ref)

Thanks liero. That is a great workaround.

And Atom, I actually like the 3D cursor. It is just ill suited to this task. Having to jump in and out of edit mode alone adds so many extra keyboard presses that it is just not suited to this particular workflow. (There may be hundreds of locators to which I want to click vertex creation.) Not to mention, “Well it just doesn’t work that way, so get used to it” seems like a pretty weak counter argument to my observation that this functionality is better implemented in various other 3D packages.

Or as I always say, “Some of my best ideas were someone else’s first.” Or as Pablo Picasso famously, and more eloquently, said, “Good artists borrow. Great artists steal.”

1 Like

Hey Mattmerk,

I completely agree. This is a big shortcoming of the current snapping system. I’ve tossed an email to the modeling mailing list to see if we might be able to get something added.

I thought it was still impossible to snap to an empty but it seems some hidden object was in the way, when i zoomed out it worked.

This workaround sounds amazing! Help a noob out? I tried copy and pasting the above code into the script section of blender and when I hit run it fails. I’m missing something super obvious…and I know this is like 10years ago haha…

hi matthew, maybe there is some other way now…? maybe geometry nodes?
but you can still try that snippet with a few changes to the code

import bpy
coll = bpy.context.view_layer.active_layer_collection.collection
sel = bpy.context.selected_objects
verts = [o.location for o in sel if o.type=='EMPTY']
mes = bpy.data.meshes.new('Empties')
mes.from_pydata(verts, [], [])
ref = bpy.data.objects.new('Empties', mes)
coll.objects.link(ref)