2
$\begingroup$

I have models that are different sizes, and I am using the Remesh modifier with block mode selected.

How can I keep the block size at a very specific size (1m in my case), regardless of the size of the model?

So for example; 2 separate spheres, one that is scaled down. Remesh applied separately to both with block mode enabled. They now have different sized blocks.

One way I found was to join them and then add the remesh modifier to them. But I want to make sure they are always 1m sized blocks, and not have to rely on joining lots of models each time.

So in this first image they are separate objects with the modifier added. Even though the remesh settings are the same, the block size compared to each object is different.

enter image description here

In this image below, I join them together then add the modifier. This keeps all the blocks the same for both objects, but not at the size I want (1m blocks). Plus I would need to join all my models I guess?

enter image description here

I read that drivers might be able to do this, but I couldn't understand how to set it up.

Here is a link to the images I found, but I don't quite understand what I am looking at: https://imgur.com/a/h5lBV

$\endgroup$
  • 1
    $\begingroup$ If you want to make the driver in my answer more flexible, so it can be more conveniently copied between objects (which I got stuck with).. @batFINGER's answer here.. will help. $\endgroup$ – Robin Betts Jan 9 at 11:23
  • $\begingroup$ Oh nice. After implementing your solution, I went searching how to copy the driver stuff to other objects and couldn't find anything (poor search terms on my part). Thanks for your solution and the link. $\endgroup$ – JacketPotatoeFan Jan 9 at 11:27
  • $\begingroup$ You will probably wind up writing it into a driver_namespace function, but that's kind of a different answer.. $\endgroup$ – Robin Betts Jan 9 at 11:30
2
$\begingroup$

Your illustrations are of a scripted expression driver, driving the 'Scale' property of a Remesh modifier with a function of the dimensions of the object to which it is assigned.

A complete description and examples of setting up drivers can be found here, but as a rough start:

  • Right-Click the 'Scale' field of your Remesh modifier, and select 'Add Driver' > 'Manually Create Later'
  • Make the object active, and open a Graph Editor window.
  • In its header, set the Graph Editor window to display 'Drivers'
  • You should see the 'Scale' driver in the left region; select it .. use N to open the property region on the right of the graph youmay have to fiddle with the graph region's width to get it to appear.

enter image description here

Now as a start, you could fill the panel as shown above. This is a tweak of the setup you illustrated, adjusted so the cubes will be 1 unit in width, whatever the size of your model, or octree depth.

Select 'Scripted Expression'. You may have to give it explicit permission to run in user prefs.. see here.

In this example,the model is called 'Suzanne'. (you can pick yours with the eyedropper). Here I've added 4 variables, using the driver UI: naming them dx,dy, and dz referring to the dimensions of the unmodified object, and od referring to the Octree Depth in the modifier, which I've named 'RM' in its own panel, to keep everything short.

In the modifier, the 'Scale' is (object size)/(modifier base cube size) where the object size is measured by its maximum dimension, and you can implicitly vary the base cube size. 'Octree Depth' is the number of times the base cube is subdivided to give your blocks. So this expression will yield blocks with one-unit sides: max(dx,dy,dz)/(2**od)

This is the result as Suzanne is scaled up: the blocks stay at 1 unit on the side, (the view is tracking back)

enter image description here

$\endgroup$

Your Answer

By clicking "Post Your Answer", you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.