5
$\begingroup$

I just can't find the Blender way to do this.

I have two objects (cubes) at a given height above a plane. These two cubes are 5cm apart, say. How can I view the perspective projection of these cubes onto the plane below?

I tried Shrinkwrap but it gives the ortho projection only.

$\endgroup$
2
  • 1
    $\begingroup$ With your mouse over the 3D window hit the <kbd>Numpad 5</kbd> key. Keep in mind that the actual projection will be in the same 3D coordinates. How you view them is the only thing that differs. $\endgroup$
    – Rick Riggs
    Apr 7, 2017 at 17:42
  • $\begingroup$ It might be a little more approachable starting out to learn up on the compositor, and how to use render layers. Then you could do something like parent a light to your camera's origin, set your plane to one render layer with the default passes applied, set your cubes to another with only the shadow pass applied, and then output the 1st render layer (you have to render both though, because it needs all info). Anyway it's not completely an easy approach either, but another one to consider. $\endgroup$
    – Rick Riggs
    Apr 7, 2017 at 22:36

2 Answers 2

13
$\begingroup$

Not sure exactly what you want to do, or how you plan to use this information, but depending on you purpose Knife Project tool may do what you want.

If you need to generate actual geometry from this, one way to obtain a bi-dimensional projection from a shape onto another is using the Knife Project tool.

For this to work the projection receiving object must explicitly be of mesh type. Also the objects to be projected must b non manifold, or open geometries for a projection to be found. If you want to project all edges (visible and invisible) then ideally you would have only a "skeleton" composed of edges.

Proceed by entering Edit Mode on all your cubes or whatever geometries you choose, select everything and then erase all faces with X > Only Faces.

Exit edit mode, select all cutting objects, and in the end Shift-Select the plane you wish to project onto, so that all objects remain selected, but the plane is the active one.

Without deselecting enter Edit Mode on the plane objects, switch to User Perspective if desired by pressing Numpad 5, adjust the perspective as desired (the Knife Project operator is view dependent so current viewport position/aperture matters), then invoke Knife Project from the Spacebar-Menu.

Knife Project

Have in mind that this will invariably produce bad topology

$\endgroup$
9
  • $\begingroup$ That is awesome! $\endgroup$
    – Dan
    Apr 7, 2017 at 18:11
  • 1
    $\begingroup$ @Duarte Farrajota Ramos, I think it's the solution the OP wanted. He may want to do this in User Perspective Mode though (Numpad 5). Then he could 'view the perspective projection of these cubes onto the plane'. Anyway +1 from me :). $\endgroup$
    – Paul Gonet
    Apr 7, 2017 at 18:28
  • $\begingroup$ Thanks! :) I did change to user perspective in the GIF, though it is probably not very noticeable, I'll specifically mention it in the description. $\endgroup$ Apr 7, 2017 at 18:30
  • $\begingroup$ Its not Knife Tool you should be calling, its the Knife Project operator $\endgroup$ Apr 7, 2017 at 18:33
  • 1
    $\begingroup$ The selection order has changed in Blender 3 at some point. Select the object to be CUT first in edit mode, THEN shift select the object that will shape the resulting cut. $\endgroup$
    – mredig
    Oct 18, 2022 at 1:19
9
$\begingroup$

Despite what you said in the question, this is not self evident to have a flat perspective projection of meshes. What I propose here is the use of an empty has projection center which allows some kind of perspective projection of the cubes to the plane.

The green cube are projected below.

From top view:

enter image description here

From another perspective:

enter image description here

This is done using Animation Nodes.

The principle is the following:

  • The cubes to be projected belong to an object group
  • We loop over these cubes
  • And for each we project each of their vertices, using a ray cast to the plane. The projection is done along the vector in the Empty/original vertex axis

At vertex level

enter image description here

  • 1: create a BVH tree from the plane (which will allow to do the raycast)
  • 2: calculate the projection axis between each vertex and the empty
  • 3: do the ray cast and return the result

At object level

enter image description here

  • 1: get the geometry of the object
  • 2: call the subprogram described above
  • 3: collect the resulting mesh geometry

At object group level

enter image description here

  • 1: for each object, loop on the subprogram above
  • 2: collect and merge the result
  • 3: input that result into a new mesh

$\endgroup$
3
  • $\begingroup$ Well... reading the several comments (did not read them as I was writing this)... not sure I'm not totally out of the scope!! $\endgroup$
    – lemon
    Apr 7, 2017 at 18:33
  • 1
    $\begingroup$ I think this is exactly what the poster wanted, with the added benefit of discreet and precise control over the projection perspective, without relying on viewport angle. Though this may be above his skill level at the moment. +1 From me. $\endgroup$ Apr 7, 2017 at 18:38
  • $\begingroup$ Thanks guys , yes this is way above my skill level for now... lol. I though this is a simple exercise,but seems its not that simple, say two parallen line segements above a plane , project them down below and see that the lines are projected perspectively with increased distance between them due to magnification, thats all I wanted to see while learning blender. Thanks //GT $\endgroup$ Apr 7, 2017 at 18:43

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .