Detect feedback loop and do not bake to images detected in this loop and show
nice warning message in such cases.
It's a way which wouldn't overcomplicate code trying to duplicate images and so
without real benefit.
It is just a limitation of multires baker which doesn't deal correct with
baking to subdivision level 0. It was supposed to work with levels on which
sculpt data is affecting on mesh, so interpolation between grids works correct.
Fully accurate baking in this case will need raycasting stuff which will make
it much slower and will remove main benefit of regular baker -- speed and
low memory usage.
Another option would be to make multires apply sculpting data on level 0,
but it's not related at baking at all and has got it's own difficulties.
Issue was caused by how CCGDM handles ORIGINDEX cystom layer:
It runs cycle through all faces to fill origindex array on each
call of dm->getFaceDataArray(dm, CD_ORIGINDEX)
Solved issue by obtaining origindex array once on baker data initialization and
using this stored array when interpolating multires grid data.
- comment/remove assignments from values to themselves.
- add case break statements (no functional change but some source code checkers notice).
- fix python errors when the sculpt brush is None.
=======================
Added option to baked named "Bake From Multires" which is avaliable for
normals baking and displacement baking.
If this option is enabled, then no additional hi-res meshes and render
structures would be created . This saves plenty of memory and meshes
with millions of faces could be successfully baked in few minutes.
Baking happens from highest level against viewport subdivision level,
so workflow is following:
- Set viewport level to level at which texture would be applied
during final rendering.
- Choose Displacement/Normals baking.
- Enable "Bake From Multires" option.
- You're ready to bake.
Displacement baker had aditional option named "Low Resolution Mesh".
This option is used to set if you want texture for realtime (games)
usage.
Internally it does the following:
- If it's disabled, displacement is calculated from subdivided
viewport level, so texture looks "smooth" (it's how default
baked works).
- If it's enabled, dispalcement is calculated against unsubdivided
viewport levels. This leads to "scales". This isn;t useful for
offline renders much, but very useful for creating game textures.
Special thanks to Morten Mikkelsen (aka sparky) for all mathematics
and other work he've done fr this patch!