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
“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
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.
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
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
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).
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).
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
(you can hide, delete the proxy afterwards if you want)
The tab in Properties>Scene == more advance toggling batch tools and behavior options
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.
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
Hey BD3D,
I tested proxify a bit today and so far so good.
My workflow to create proxies is this:
I got a high poly object that I want to proxy
I create duplicate of that high poly and use decimate modifier on that to reduce it to like 0,05 ratio
apply modifier
rename this decimated object to proxy
Use this decimated object as a proxy for original high poly object
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.
Hey BD3D,
I tested proxify a bit today and so far so good.
My workflow to created proxies is this:
I got a high poly object that I want to proxy
I create duplicate of that high poly and use decimate modifier on that to reduce it to like 0,05 ratio
apply modifier
rename this decimated object to proxy
Use this decimated object as a proxy for original high poly object
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
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
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
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
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 ?
I need to create a tutorial on that.
Basically it’s like the non animation method
select proxy object with the pointer
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
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