Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
3
Question by fjhamming_CleVR · Dec 07, 2018 at 06:16 PM · performanceoptimizationblendshapesmorphexpression

Performance impact of blend shapes

I am currently looking into the performance impact of blend shapes compared to bone animations for a factial rig. We are targeting to get at least 40 to possibly 100 characters each showing facial expressions in the screen. We are targeting the Oculus platform. A character typically has between 15k to 25k vertices and 20-30k triangles. There are roughly 25 bones driving the face and a character has around 100 bones.


I have a few test meshes with several setups. With bone based animations for facial expressions (Humanoid mecanim setup) the fact the bones are there has a slight constant performance impact over the mesh that has the bones removed. But triggering a single blend shape has a huge performance impact. (100% gpu time increase per character) Triggering a bone based animation in our setup has no considerable performance impact.


I then reduced the amount of vertices in the mesh that has the blend shape (to around 7k instead of 26k) by splitting the mesh in two and this reduced the fixed overhead for the first blend shape to 50% gpu time. However since an extra draw call per character is introduced this is not prefered - also a performance impact of 50% extra gpu time per character is not acceptable to us.


I've tested in a synthetic environment without v-sync or oculus on target hardware (gtx1080). I am rendering 1920*1080 in forward rendering on directX 11, linear color space, msaa4x, gpu skinning, but no graphics jobs. (GJs make debugging harder and have only a slight benefit in our case)


What worries me is that I am the only one that has these kind of results whereas the consensus of the internet seems to be that blend shapes are cheap and should only cost a slight increase in gpu memory which we still have plenty. I did some tests with gpu skinning disabled, but while the overhead introduced by enabling blend shapes is reduced, the performance in general is much worse.


Can someone help me better understand what is going on? here's my findings:


1. Adding bones to a rig has a slight performance impact
2. Displaying a single blend shape when using gpu skinning has a huge performance impact for that mesh
3. Displaying each subsequent blend shape (at least up to 100 additional blend shapes) have a super slight performance impact.
4. This is probably caused by some overhead required by the vertex shader communicating with the vertex buffer which is only required if there is at least one blend shape active.
5. The amount of inactive blend shapes on a character has no noticable influence

This leads me concluding that at least in the environment and hardware that we are running blend shapes are a very expensive solution to get facial animation. All performance tests I can find on the internet - albeit slightly aged - seem to suggest there is something wrong with my test data.


Either my test is wrong or there is something going on between gpu skinning and the newer versions of unity.

Probably making LODs is the way to reduce the amount of both vertices and draw calls.

Comment
Add comment · Show 2
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image NiallSoe · Sep 03, 2019 at 09:03 PM 0
Share

Hi @fjham$$anonymous$$g_CleVR

Did you ever get to the bottom of this?

We are currently trying to decide between blend shapes and a rig for facial animation so any info you can provide would be really helpful.

Thanks!

avatar image fjhamming_CleVR NiallSoe · Sep 04, 2019 at 07:52 AM 1
Share

Hi NialSoe,

I guess it really depends on both the amount of bones as well as the amount of vertices in your mesh. Note that the amount of bones also has a linear impact on the performance of the character and this is always, also when no blend shapes are triggered. So if you only have 25 bones in your character and add another 25 for the face the performance impact is always 100%.regarding to the situation where you dont have those bones.

For us we finalliy decided to have LODs and only have the blend shapes on LOD0. (they are corrective).

We might do another measurement in the new unity 2019.2. (we have a problem with gpu skinning and blend shapes with 2019.1).

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

121 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

How Can I Reduce Build Time for Script-Heavy Projects? 2 Answers

How to optimize with a lot of objects 0 Answers

Blend Shapes not staying at 0 between animations 0 Answers

A very simple optimization question, particle 1 Answer

Double Buffer and/or Mesh.MarkDynamic in Unity 5 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges