𝙐𝙨𝙞𝙣𝙜 𝙐𝙄 𝙩𝙤 𝙙𝙧𝙞𝙫𝙚 𝙨𝙝𝙖𝙙𝙚𝙧
This was my first approach to the project, but I reached an impasse when I was going to apply an animation and read that skeletal meshes can only have 4 UV sets in UE5.
𝙐𝙨𝙞𝙣𝙜 𝙃𝙞𝙩 𝙙𝙚𝙩𝙚𝙘𝙩𝙞𝙤𝙣
My first intention with this scene was to use render targets and project color onto the UV space of the mesh to get localized deformations. But I couldn't quite get the projection to work as intended.
I wanted to explore a more performant alternative to traditional blendshapes by storing deformations in UV sets using Houdini. My goal was to understand both the benefits and limitations of this approach compared to conventional methods.
The concept revolves around offloading deformation calculations to the GPU rather than relying on CPU-intensive blendshapes. Unlike texture-based deformation storage, this method requires fewer samples, freeing up resources for other aspects of the project.
As I developed the implementation, I discovered that splitting coordinates into three separate channels (using 1.5 UV sets per deformation instead of a single UV set) improved accuracy. This approach also simplified the shader implementation, particularly when dealing with the different coordinate systems used by Unreal, Houdini, and Maya.
During development, I encountered several engine limitations that forced me to pivot. Unreal Engine 5 can only handle 8 UV sets total, and more critically, only 4 UV sets in a shader for rigged meshes. Since my shader was already using 7 UV sets for attributes, I had to abandon my rigging and animation work, a lesson in checking engine constraints before going too deep into implementation!
While this vertex displacement method proved less than ideal for character work, I believe it could be used for other applications like dynamic vegetation growth and other dynamic environment effects.
- 𝙏𝙖𝙠𝙚𝙖𝙬𝙖𝙮𝙨 -
- GPU-based deformations can offer better real-time performance than traditional blendshapes.
- Always research engine limitations before committing to a technical approach.
- Splitting displacement coordinates across channels improves accuracy and simplifies implementation
- The technique trades some precision for performance gains.
- 𝙄𝙛 𝙄 𝙝𝙖𝙙 𝙢𝙤𝙧𝙚 𝙩𝙞𝙢𝙚 -
-The first would be to get the localized displacement I tried to implement as I was developing the implementations to work. So that each limb could grow or shrink individually.
-I'd create a version using the 4 available UV sets in UE5 with a rigged character to test the approach in a more gameplay-relevant context.