Proxify a Proxy system for Blender

*Update:

Hello, Proxify is now deprecated, now that there’s a better solution, say welcome to Lodify, a free LOD system that also can also act as a Proxy system. Check out Lodify in the devtalk thread Hopefully the blenderfoundation will officially implement a LOD/Proxy system one day, better than a simple python script.


Proxify Post

In my quest of having better performances when using Scatter (my particle distribution addon for environment and archviz artists) i tried to experiment with a “proxy” system in blender (with python).
By proxy i mean an approximative low resolution geometry used in viewport only, a necessity for archviz and environment artists,as our only options right now with demanding scenes are bounding boxes and not displaying the assets/particles at all (which is far from ideal).

still don't get what are proxies ? see examples below

cf0a29e694b63e9b8b9550ce4807319fd000849f

532A9292-10AF-4A53-9CF6-17B7607EED9A

“Proxify” is my 2nd attempt with proxies, and it uses an universal concept of meshdata-exchange (basically changing the mesh data automatically if toggle/render/rendered view).

Right now Proxify can:

  • Individually assign proxies in Properties>Object>viewport display>Proxify with a pointer.
  • Toggle proxies at will.
  • Toggle proxies automatically on rendered view (if allowed)
  • Toggle proxies automatically on final render (if allowed)
  • Support particles systems
  • Support instancing/duplications
  • Support animation (if vgroups assigned for proxy mesh)
  • Batch toggle proxies (on/off/toggle to scene/selection). (all batch action are available in Properties>Scene>Proxify )
  • Batch assign proxies with a naming system.
  • Batch remove proxies.
  • Batch hide/unhide/store proxies to collection.
  • Protect the data, as the pointer object can be deleted and everything will still work fine.
  • Individual data/options if you’d like to freeze the proxy toggle on rendered view, final render ect…
  • Support for external api, operators are thinked with override args in mind, so that other addon can access Proxify operators easely

5f3b64aae837d99fc13fbe9ab36fffe1e4eaa73e

ezgif-7-eb01c2c4ced1

691a41132bb432b680588bba033fd952a4c41fa0
for more cool rigs check out blender pirate on the market, thanks for letting me play with your rigs !

you will find a new tab in viewport Properties>Object>viewport display>Proxify, where you can choose your proxy object
and another tab in Properties>Scene>Proxify for (batch)toggling everything and other ops.


Download Latest Version below

All versions

v1 : Proxify V1.py (original)
v2 :Proxify V2.py (added ALT and CTRL click support see gif)
v3: Proxify V3.py (added more ALT&CTRL support, and UI overhault see here)
v4: Proxify_V4.py (added compatibility for 2.81 or above, all desp_post handlers broke)
v5: Proxify_V5.py (73.8 KB) (added automatic proxy generation)


The code is free and open source, and it will be shipped and well-integrated within Scatter next update. I hope that other addons will also ship with proxify they can let me know if there is some specific api needed, or explanations with some unclear operators or args.

i really think that proxies are too important to not be shared with everyone, hopefully it can also convince the institute to give us more viewport display options this stuff is way too important. Bounding boxes is old stuff from the 90’s. it’s time for something better, Proxies is a minimum, display as point cloud should also be considerated


Tutorial

https://www.youtube.com/watch?v=72JWIyRnSZ8&feature=youtu.be

53 Likes

Also, feedback is welcome, Proxify code will need to freeze really soon so i can continue Scatter S1 + Proxify integration, now is the time to try it out :slight_smile:

1 Like

Proxify looks great and I am loving Scatter!

2 Likes

:open_mouth:

Hey BD3D,
this is some serious stuff…Have you tested memory usage etc.? If this works the way it works in other render engines (e.g. V-ray, Corona,…) that it would be INSANE. I am terribly short on time but I’ll try to test it durning weekend.

But if this work then I am speechless (hell even atempt is amazing).

1 Like

But if this work then I am speechless (hell even atempt is amazing).

Thanks

Have you tested memory usage etc.?

why would memory usage be any different ? the proxies switch back to full res assets on final render (if allowed) anyway

I’ll try to test it durning weekend.

yes please, i didn’t thestthe addon on other machines, but i don’t think anyone will have any problems, if so please tell me

why would memory usage be any different ? the proxies switch back to full res assets on final render (if allowed) anyway

Well V-ray proxies work in a way that they are loaded in in a different way that results in a lower memory usage:

Proxies

  • The geometry is loaded/unloaded from disk dynamically, only when it is required by the current rendering bucket. This optimizes the use of the memory, but usually is slower.*

Proxies save memory and allow V-Ray to load pieces of the geometry as they are needed during the rendering; they tend to be slower than regular instances.

Well I am not sure that this is the way your proxify works but just to explain it I post this examples. Even the fact that you can display meshes in reduced polycount in viewport is extremely important (and not just display as bounds).

As I said - simply awsome and keep it up… :slight_smile:

1 Like

I am using blender-2.83-b59adcaa3683-windows64 and if I correctly installed the addon (I can see the Proxify options in the Scene Properties tab), I have no clue how to make it work. After selecting a high poly mesh (subdivided several times), I clicked on the Proxify buttons (in this Scene Properties tab), but nothing happened in the viewport. Maybe you could you make a short video tutorial ?

Yeah sure, i’ll make a Full youtube tutorial when Scatter S1 is out, in the meanwhile, i said that there’s a new tab in Object>Viewport Display, where you expect this to be at the first place

test

(you can hide, delete the proxy afterwards if you want)

The tab in Properties>Scene == more advance toggling batch tools and behavior options

4 Likes

Oops, I guess I got confused by this sentence : Individually assign proxies in object > viewport display > Proxify with a pointer.
I was searching in the Object menu. Sorry.

1 Like

Fair enough

Looks good. I’ll try this. Thanks

1 Like

Update Proxify V2

ALT support for batch the selection in Properties>Object
(alt is always supposed to batch change/execute the selection for those who don’t know)

test

edit:
also added CTRL for scene toggle, so now the need of changing panels is fairly limited. way more handy and fast now.

7 Likes

what if i move everything is in Properties>Object>Viewport Display and try to add more batch selection/whole scene operation with CTRL and ALT ?

(moving thoses two panel below from scene to object)

Annotation 2020-02-01 181523

it would look like this

it does not make a lot of sense, as the object panel is supposed to be per object dependent, byt maybe having everything in one place is just better? instead of “general actions” in properties>scene and object data in properties>object

  • Yes, everything in Properties>Object
  • No, keep blender object panel for object operation and general operations in Properties>Scene
  • No ideas
0 voters

Hey BD3D,
I tested proxify a bit today and so far so good.

My workflow to create proxies is this:

  1. I got a high poly object that I want to proxy
  2. I create duplicate of that high poly and use decimate modifier on that to reduce it to like 0,05 ratio
  3. apply modifier
  4. rename this decimated object to proxy
  5. Use this decimated object as a proxy for original high poly object

ezgif.com-resize
Problem is that my workflow is generally linking collections from external blend file to my main project file or linking object from same external blend file and then convert it to proxy(make proxy) to further use for things like particles. And in that case it is not possible to use proxify. Or is it possible to link proxified object?

But generally use of profixy is great and works like a charm.

4 Likes

Hello

Hey BD3D,
I tested proxify a bit today and so far so good.

My workflow to created proxies is this:

  1. I got a high poly object that I want to proxy
  2. I create duplicate of that high poly and use decimate modifier on that to reduce it to like 0,05 ratio
  3. apply modifier
  4. rename this decimated object to proxy
  5. Use this decimated object as a proxy for original high poly object

ezgif.com-resize

indeed, you may even create custom lower geometry

And in that case it is not possible to use proxify. Or is it possible to link proxified object?

Linked object are frozen, there’s not much things i can do unfortunately
but the code is open source, if someone want to try and add link support, please go ahead

2 Likes

Yep I am decimating it to be able to know what is the original source object but I tried to proxify random simple geometry aswell. Well about linking that would be great but even without it is really solid way to proxy and make your viewport way lighter. Good job :slight_smile:

2 Likes

well in theory, using the decimate modifier would act the exact same as what you just did. but i think there’s some huge workflow flaws with modifiers, as the modifiers seem to be constantly re-evaluating the modified mesh instead of making a cache and using the cache in the viewport

idk need to do some testing to check if this is true

2 Likes

Update Proxify V3

  • now “resurrect proxy” (restore deleted proxy back to the viewport) operator aslo support CTRL&ALT
  • new remove operator in proxy-data UI, that also support CTRL&ALT
  • new interface, forget Properties>Scene, now everything is in Viewport Display
  • “new” active is proxy for all selection operator
  • changed a bit the api, and also added more override options for hide, and resurrect operators

Annotation 2020-02-01 204402

Annotation 2020-02-01 204517

note that the newt ALT for batch selection and CTRL for whole scene support allow functionalities that are also available within “General Operations” but i think that overall, choice is a good thing for the user

Proxify V3.py (57.8 KB)

2 Likes

Hi, that is a very interesting addon.
What is the work-around making a proxy for an animated character?

Is it like: wait with animation of high poly > make a low poly version > parent low poly to same armature of high poly (automated weights) > Animate High poly
Then in the addon: Select high poly > set proxify target to low poly > Set status: on ?

1 Like

Hi thanks

I need to create a tutorial on that.
Basically it’s like the non animation method

  1. select proxy object with the pointer
  2. toggle proxy

But there’s a nuance with the modifier stack (by default it’s automatically turning off the modifiers while on proxy mode, you don’t want this with armature modifiers of course) so there’s another step which is

  1. uncheck « disable modifiers when proxy is called »

And of course to drive the modifiers we need valable Vgroups, so either you can re assign the vgroup to the new proxy mesh data, or the proxy itself was a decimation, which will keep the vgroup mesh data intact