Search Unity

[RELEASED] GPU Instancer

Discussion in 'Assets and Asset Store' started by LouskRad, May 3, 2018.

  1. kblood

    kblood

    Joined:
    Jun 20, 2012
    Posts:
    92
    I think I found the problem... GPU Instancer requires the camera to be set to main camera rather than just having to be the active camera? Seems strange, but if that is the only issue, its pretty easy to fix. I will begin performance testing now.
     
  2. kblood

    kblood

    Joined:
    Jun 20, 2012
    Posts:
    92
    So, got it all to work with VR. I noticed something that is probably quite a problem though. I think settings might fix it though. When I turn my head, it turns the angle of leaves, grass and more, but only when its a certain distance away. Does this mean its not instanced if its close to you? Does it have to do this when instanced? Swaying my head from side to side, and the grass sways with my head, same with leaves on trees. Guessing its not as obvious when its not used with VR.
     
  3. mgwade528

    mgwade528

    Joined:
    Apr 24, 2017
    Posts:
    8
    Hi there,i use GPUI prefab manager optimize thousands of models,and in camera rendering path ,if i use deferred path it works really well.but i use foward path ,it doesn't work well.What's the problem?What should I pay attention to?hope to get your help, thx~
     
  4. LouskRad

    LouskRad

    Joined:
    Feb 18, 2014
    Posts:
    904
    Well, the Detail Manager actually keeps partitioned data of the Terrain which is stored in GPUInstancerDetailCell objects. These objects keep their own detailMapData. It is possible to offer an API method which can combine these data and give you a similar GetDetailLayer method. This would be too slow to run each frame, but if you don't need to update it frequently, it can make sense. We will investigate if we can add a method like this.

    For now, however, you could calculate the position of the remover object and determine where it corresponds to in the splatmap to change splatmaps. This could be easier and actually a faster solution for what you have in mind as well.
     
    MTandi likes this.
  5. LouskRad

    LouskRad

    Joined:
    Feb 18, 2014
    Posts:
    904
    Hi there.

    Well, this sounds about right; in fact we experimented on doing this by threading as well. Using threading as such slightly might increase initialization time but will result in less (to no) spikes and faster updates. Looks like we came to the same solution. In fact, we are currently considering adding this to the GPUI core as an optional setting.
     
    JohnTomorrow likes this.
  6. LouskRad

    LouskRad

    Joined:
    Feb 18, 2014
    Posts:
    904
    Hi there,

    Forward/Deferred differences might be related to the amount of scene lights, the shaders you are using and specifically shadow passes of your shaders. I can't really say much more without knowing the details of your setup regarding these.
     
  7. LouskRad

    LouskRad

    Joined:
    Feb 18, 2014
    Posts:
    904
    Yes, GPUI auto detects a camera tagged with MainCamera, or you can manually select your camera by disabling Auto Select Camera. For more info on the managers, you can take a look at the Getting Started wiki.

    Prototypes are instanced when you are near them unless you specify a modification collider. As for grass swaying with your head, I'm not sure I understand what you mean. Is it like a billboarding effect? Which shader(s) are you seeing this with?
     
  8. kblood

    kblood

    Joined:
    Jun 20, 2012
    Posts:
    92
    Thanks.

    Not sure which shader it is, the trees are speed trees though and its all made with GAIA. I got to thinking that it might still have something to do with the camera setup, as its a VRTK4 setup I am using now.

    But the swaying... well it seems if I lean my head left, the grass and leaves on trees does this, then follows my head if I lean my head right. Not sure if it happens when I look up or down. If I do not find a solution I will try to make a video of it, but probably wont get time today.
     
  9. UnityRocksAlt

    UnityRocksAlt

    Joined:
    Dec 28, 2015
    Posts:
    157
    Hi using the latest version of GPU Instancer the models in Prefab Manager appear blacked. I can't see them.

    https://imgur.com/a/AUBE7s2
     
  10. castor76

    castor76

    Joined:
    Dec 5, 2011
    Posts:
    2,517
    Can I have more than one managers in the scene?

    I want to have multiple managers managing different prefabs for organization purpose and then have multiple scene additive load during run time, and they also have the managers.
     
  11. castor76

    castor76

    Joined:
    Dec 5, 2011
    Posts:
    2,517
    I was also wondering if it is possible to instance grass on mesh like how it was done with terrain? I am not saying I need to be able to paint them like in the terrain, I can do that myself, but generating grass quads like in terrain... I looked in the project and there was no mesh for grass, so I am guessing they are "generated" on the fly? It would also seem to be really bad to have thousands of game objects in the scene for the grass prefabs..
     
    Last edited: Dec 20, 2018
  12. Quique-Martinez

    Quique-Martinez

    Joined:
    Oct 1, 2013
    Posts:
    141
    Small test without/with.
    Same framerate.
    Wow


    With.png Without.png
     
    LouskRad likes this.
  13. Harekelas

    Harekelas

    Joined:
    Feb 3, 2015
    Posts:
    864
    Hi, I would like to know what's the correct way to use GPUI with asset bundles.
    I currently met an issue that unity again cannot identify my model's shader(those models and materials are in asset bundles and all related shaders are already in the bundle).
    Should I include all used GPUI shaders into resources folder(I'm trying to not use resources as unity recommended).
    Or is there a workaround?

    By the "unity cannot identify my model's shader" I meant the same issue last time I've posted here and solved by assigning all GPUI related materials to use converted shaders generated by GPUI. But this does not work when I sent all my models and materials into asset bundles.

    Edit: and another issue: I found my GPUI instanced speedtrees sometimes don't have the wind animations. And if I have some instances added through matrix ( non-gameobject workflow ) and some from gameobjects. The gameobject instances can animate with the wind, the matrix added ones are static. Any ideas what may caused this?

    Edit2: Just checked, all the shaders are already in the resources folder, and also packed into the assetbundle where they should be used. Have no idea why unity still can't recognize them.
     
    Last edited: Dec 20, 2018
    ulaph likes this.
  14. LouskRad

    LouskRad

    Joined:
    Feb 18, 2014
    Posts:
    904
    Hi there,

    Thanks for reporting this. What Unity version are you seeing this on? Also, what is your color space (linear or gamma?) and are you using any SRP (LWRP or HDRP)?

    Can you also tell us if you also see the icons like this in our demo scenes (e.g. DetailInstancingDemo)?
     
  15. LouskRad

    LouskRad

    Joined:
    Feb 18, 2014
    Posts:
    904
    Yes you can have as many managers as you like. However you should try not to have the same prototypes in different managers since they would be treated as different prototypes.

    GPUI indeed generates the quad or cross quad meshes used for the grass when instancing terrain details. We have plans to make a tool version of this which will create meshes like this:


    As for GameObjects when doing this, it is as you say not ideal to have them for grass. You can use the no-game object workflow through the GPUInstancerAPI if you wish to go that way. Please note that this is currently an API only feature; we are investigating options in which we can offer this as a "no coding required" solution as well.
     
    ftejada likes this.
  16. LouskRad

    LouskRad

    Joined:
    Feb 18, 2014
    Posts:
    904
    Hi there,

    About SpeedTree usage with Matrix4x4s; you are right that there is a missing call for the tree proxies. Thanks for reporting this; we will fix it in the next update. For now, you can modify the InitializeWithMatrix4x4Array in the GPUInstancerUtility.cs as such to fix this:

    Code (CSharp):
    1.  
    2. public static void InitializeWithMatrix4x4Array(GPUInstancerPrefabManager prefabManager, GPUInstancerPrefabPrototype prototype, Matrix4x4[] matrix4x4Array)
    3. {
    4.     ...
    5.     // release previously initialized buffers
    6.     ReleaseInstanceBuffers(prefabRuntimeData);
    7.  
    8.     if (prototype.treeType == GPUInstancerTreeType.SpeedTree || prototype.treeType == GPUInstancerTreeType.TreeCreatorTree)
    9.         GPUInstancerManager.AddTreeProxy(prototype, prefabRuntimeData);
    10.    
    11.     // initialize buffers
    12.     InitializeGPUBuffer(prefabRuntimeData);
    13. }
    14.  
    As for the shader, the problem is with the shader variants. Putting the shader itself in the resources folder does not account for the variants at build time, so Unity does not include them. What you can do is to put a dummy material in a resources folder which uses the GPUI version of the shader with the same settings (variants) you use. To see an example usage, you can take a look at the /GPUInstancer/Resources/ShaderVariants folder where you can see dummy materials for different (e.g. cutoff) variants of the Standard Shader.

    You can also take a look at the wiki on this issue.
     
    Neviah likes this.
  17. Harekelas

    Harekelas

    Joined:
    Feb 3, 2015
    Posts:
    864
    Thank you very much, will try the fix today!
    And another question: I have a tree chop function in my game, so I'll need to remove single instances for the matrix added instances, is there an API to do it?
    And I add instances to a global prefab manager when a new terrain is generated by mapmagic. But since the terrains can be destroyed in runtime for being to far away from the player and regenerated again when player returns, I'll have to remove all the instances within the terrain's area when the terrain is destroyed or there will be duplications for each tree for this terrain when it is generated again. What's the best way to remove all instances within a certain area?

    Edit: Just edited the method you mentioned, the matrix added trees still don't have animations. I checked the proxies under the GPUI Tree Manager Proxy in hierarchy, and there is no proxy for the matrix4x4 added prototypes. Maybe I used the wrong method to add them? Which method is the best for me to add instances through matrix4x4 after the prefab manager is already initialized?

    Edit2: Just tested to add shader variant dummy materials to resources folder, it does solved the cutout variant's problem, but strangely all opaque materials are still broken:
    upload_2018-12-21_12-8-30.png
    I also added opaque dummy materials to resources folder, still no help
     
    Last edited: Dec 21, 2018
  18. UnityRocksAlt

    UnityRocksAlt

    Joined:
    Dec 28, 2015
    Posts:
    157
    Version: Unity 2017.4.13f
    Color Space: Linear

    Yes it does appear blacked. here:

    https://imgur.com/a/FZZ9Agx
     
  19. zeux-n00b

    zeux-n00b

    Joined:
    Nov 4, 2017
    Posts:
    73
    Q.1 How do I get grass dry variation like this left image org.PNG instancer.PNG .I cant find it.
    Q.2 Is there occlusion culling system for procedural terrains (im my case thats MapMagic), that cuts terrain planes..
     
  20. txarly

    txarly

    Joined:
    Apr 27, 2016
    Posts:
    197
    Hey, just want to say this is an awesome tool

    Is possible to work with terrain composer 2 and GPU instancer at the same time?
    And gena 2?

    Thanks
     
    Last edited: Dec 22, 2018
  21. GurhanH

    GurhanH

    Joined:
    Apr 24, 2017
    Posts:
    538
    When using no-game object workflow you can update the instances by using UpdateVisibilityBufferWithMatrix4x4Array. You can zero-out the array member you wish to remove. Or, if you create a new array with a different size, you can set the new instances with InitializeWithMatrix4x4Array method. Or you can use RemoveInstancesInsideBounds.

    If you can email us the methods you used to implement this we might be able to point you out in the right direction.

    Standard shader uses variants for almost every setting inside it. So it would be best to add the dummy material with using exactly the same settings with the original material. Best way would be to change the original material to the GPUInstancer version, that way you will not need to create dummy materials. But if, for some reason, you are not able to change the original, the dummies should have exactly the same settings with the original.

    We are currently looking into ways to automate this process without creating materials.
     
  22. GurhanH

    GurhanH

    Joined:
    Apr 24, 2017
    Posts:
    538
    Thanks for the info. Looks like Unity's preview utility has wrong color conversions for 2017 versions on Linear color space. We made a workaround for this and will add this to the next update. You can also send us an email to get the fix beforehand.
     
  23. Rewaken

    Rewaken

    Joined:
    Mar 24, 2015
    Posts:
    128
    Hello, I am changing mesh of roughly 500 gameobjects(same prefab) continuously each gameobject contains the list of mesh to update . I am using GPUI change mesh method to change mesh runtime it works fine but mesh data consumes too much memory roughly 1.5gb. Is there any way to reduce memory consumption?
     
  24. GurhanH

    GurhanH

    Joined:
    Apr 24, 2017
    Posts:
    538
    There are options to edit the Healthy/Dry color settings under Foliage Shader Properties section of the prototype settings. You can also change the Noise Spread setting under Detail Properties.

    upload_2018-12-22_17-59-18.png

    There will be some color differences from the original terrain because GPUI uses an improved shader for grass textures. You can use the "Simulate at Scene Camera" button on the Detail Manager to see the changes in editor without entering play mode.

    The details, trees or prefabs that are on the terrain will be culled according the settings on the GPUI Managers, but
    GPUI does not implement a culling system for the terrain object itself.
    For more information on occlusion culling:
    https://wiki.gurbu.com/index.php?title=GPU_Instancer:Terminology#Occlusion_Culling
     
  25. GurhanH

    GurhanH

    Joined:
    Apr 24, 2017
    Posts:
    538
    Hi there and thank you for your kind words!

    We did not test GPUI with TerrainComposer. It would probably require some additional code to make them work together, but I can not say for sure.
     
  26. GurhanH

    GurhanH

    Joined:
    Apr 24, 2017
    Posts:
    538
    Hi there,

    Can you send us an email with detailed information about what you are trying to achieve? May be we will be able to recommend a more optimized solution.
     
  27. txarly

    txarly

    Joined:
    Apr 27, 2016
    Posts:
    197

    And GENA 2? i mean is there any tool to place prefabs,trees and grass that works with GPUI ?

    Thanks
     
  28. Harekelas

    Harekelas

    Joined:
    Feb 3, 2015
    Posts:
    864
    I'm using GPUI converted standard specular shader for all my opaque objects. And I've put a dummy material using the converted standard specular shader in the resources folder. But the dummy materials has no textures assigned, do you mean that I should also assign dummy textures to the exact channels on the dummy material as my actual usage of the shader so unity can include these variants?
     
  29. DiscoFever

    DiscoFever

    Joined:
    Nov 16, 2014
    Posts:
    286
    Hi, when I try to build for iOS I get a shader error :
    Code (CSharp):
    1.  
    2. Error building Player: Shader error in 'Hidden/GPUInstancer/HiZOcclusionDebugger': 'Texture2D' : syntax error syntax error at line 24 (on gles)
    3.  
    4. Compiling Vertex program
    5. Platform defines: UNITY_NO_DXT5nm UNITY_NO_RGBM UNITY_ENABLE_REFLECTION_BUFFERS UNITY_FRAMEBUFFER_FETCH_AVAILABLE UNITY_ENABLE_NATIVE_SHADOW_LOOKUPS UNITY_NO_CUBEMAP_ARRAY UNITY_NO_SCREENSPACE_SHADOWS UNITY_PBS_USE_BRDF2 SHADER_API_MOBILE UNITY_HARDWARE_TIER2 UNITY_COLORSPACE_GAMMA UNITY_LIGHTMAP_DLDR_ENCODING
    6.  
     
  30. Arganth

    Arganth

    Joined:
    Jul 31, 2015
    Posts:
    277
    Has someone tried this asset with dungeon architect?
    https://www.assetstore.unity3d.com/en/?stay#!/content/53895

    huge levels (created at runtime) can lead to an enourmous amount of "tiles"

    would this asset be usable for this?
    (many people using this asset are looking for a solution to this problem)
     
    hopeful likes this.
  31. PixelPounder

    PixelPounder

    Joined:
    Feb 11, 2014
    Posts:
    56
    Does this asset work with just nvidia cards or any quality and current video card? Also, does this work with most controllers such as Opsives new First Person and Third person controllers?
     
  32. GurhanH

    GurhanH

    Joined:
    Apr 24, 2017
    Posts:
    538
    You can use any tool (including Gena 2) that places prefab instances in your scenes. When you click on the "Register Instances In Scene" button, GPUI will simply use the locations of these instances to render the prefabs.
    This is also true for tools that help you distribute grass or trees on your terrain.

    However if you have a tool that makes modifications at runtime (play mode), they might require additional scripting to apply the changes to GPUI prototypes. Some of these runtime changes can also be handled automatically by GPUI (adding/removing prefab instances or changing transform data) when runtime modifications are enabled.
     
  33. GurhanH

    GurhanH

    Joined:
    Apr 24, 2017
    Posts:
    538
    There are also variants that are enabled when a texture is set to the material like NormalMap - MetallicGlossMap - DetailAlbedoMap etc. So, dummy material should also have the same setup.

    But easiest would be to set the original material's shader to GPUInstancer/Standard (Specular setup), then you won't need to deal with dummy materials.
     
  34. GurhanH

    GurhanH

    Joined:
    Apr 24, 2017
    Posts:
    538
    Hi there,
    GPU Instancer requires Metal API for iOS devices. The build shows an error for OpenGL ES. You can have a look at the Minimum Requirements for more information, and arrange your Player Settings accordingly.
     
  35. Harekelas

    Harekelas

    Joined:
    Feb 3, 2015
    Posts:
    864
    I've already set the original material's shader to GPUInstancer/Standard(Specular setup), but it doesn't work with asset bundles (tho I do see all shaders required are packed into the asset bundle I built for my game). I don't know why, if I pack my assets into the resources folder, they can be recognized, but not in asset bundles. And since my graphic assets are larger than 4gb, resources can not be used due to its limit on 4gb or there will be image corruptions in build.
    This is the real problem I'm facing here, so I'll create some small dummy textures to sign to the same channels my original materials use, and see if they can work correctly in the build.
     
  36. GurhanH

    GurhanH

    Joined:
    Apr 24, 2017
    Posts:
    538
    Hi there,
    We did not test GPUI with Dungeon Architect. It might work out of the box when you enable Auto. Add/Remove Instances setting for prototypes if this asset instantiates prefab instances at runtime, but I can not say for sure.
     
  37. GurhanH

    GurhanH

    Joined:
    Apr 24, 2017
    Posts:
    538
    You can use GPU Instancer with any GPU that fits the Minimum Requirements. Performance gain would scale for the better with higher-end GPUs.

    GPUI only uses the camera information on the controllers. You might need to set the camera manually on the controller in some cases, but other than that there is no reason why it wouldn't work.
     
  38. Sholms

    Sholms

    Joined:
    Nov 15, 2014
    Posts:
    85
    Hello, Im using gpu instancer with mapmagic, and its amazing, but I want to integrate voxeland(the asset from the mapmagic creator) to my game , but i dont know if gpu instancer will work with voxeland. Anyone here have tester that??
     
  39. Harekelas

    Harekelas

    Joined:
    Feb 3, 2015
    Posts:
    864
    Another question: will matrix4x4 added instances get colliders in future versions?
     
  40. LouskRad

    LouskRad

    Joined:
    Feb 18, 2014
    Posts:
    904
    Hi there,

    GPUI does not yet have an integration with Voxealand. However, we are in contact with Denis (the MapMagic / Voxeland author) and we have plans for an integration. I cannot give you a time for this, but it is in our roadmap.
     
  41. LouskRad

    LouskRad

    Joined:
    Feb 18, 2014
    Posts:
    904
    We are considering a collider pooling system, but It's not currently in our roadmap for the near future.
     
  42. LouskRad

    LouskRad

    Joined:
    Feb 18, 2014
    Posts:
    904
    Hi everyone,

    I just wanted to say happy holidays and to let you know that we will be in a short holiday break (until the 2nd January). We will be answering all the questions and emails after the break.

    Happy holidays to you all!
     
  43. JesterGameCraft

    JesterGameCraft

    Joined:
    Feb 26, 2013
    Posts:
    452
    Hi, will this work on iOS? The page in the asset store says it does but there is no iOS sample project? What kind of performance can I expect on iOS. I realize this depends on the scene and what objects are rendered but what I’m asking is what is the performance improvements you’ve seen on iOS that are possible. Lastly will this work with unlit and vertex shaders?

    Regards.
     
  44. namdo

    namdo

    Joined:
    Feb 23, 2015
    Posts:
    200
    Sometimes I find a prefab attaching itself to my player character that moves when im using the gpui prefab manager. Do you know why?
     
  45. Joshua_strawchildgames

    Joshua_strawchildgames

    Joined:
    May 27, 2017
    Posts:
    60
    Hello, I'm seeing a weird artifact.



    Pink dots. It's not consistent when moving around, but you can see them very clearly at times.
    This happens in play mode.
    Using HDRP, terrain prefab.
     
    Last edited: Dec 28, 2018
  46. zoltanBorbas

    zoltanBorbas

    Joined:
    Nov 12, 2016
    Posts:
    83
    Hi there!

    I have encountered an undesirable effect when using the Prefab Instancing V0.9.6, as the image bellow shows without instancing the neighbouring buildings rendered just fine however as shown in the second screenshot when instancing is used the buildings in front of another are doing this weird "Z fighting" with often flickering as if they cannot make up their mind which one to show. I am using a custom holographic like shader from QINE's Sci-Fi VFX package from the asset store. https://assetstore.unity.com/packages/vfx/particles/sci-fi-vfx-91983

    Any help would be greatly appreciated.

    Keep up the great work!

    upload_2018-12-28_17-10-0.png
    upload_2018-12-28_17-10-46.png
     
  47. lod3

    lod3

    Joined:
    Mar 21, 2012
    Posts:
    676
    Hi.

    In this tutorial video you demonstrate how Unity renders the terrain grass by default, with fluctuating tri and vert counts depending where you were looking. Then when playing the same scene again with GPUI, the vert count becomes locked at 12.1k and tri count at 7k, regardless where you were looking. What is technically going on there, or does GPUI cause the reported vert and tri counts to become invalid?
     
  48. holdingjason

    holdingjason

    Joined:
    Nov 14, 2012
    Posts:
    135
    Hi terrific asset bought it just a bit ago and already seeing some really great improvements.

    I was hoping you could shed some light on an area that I am completely ignorant about.

    In regards to the SkinnedMeshRenderer that you are working on that would work by reducing the load on the GPU similar to how your current system works (some version of instance indirect I imagine).

    This however would not effect any load being placed on the CPU because of any animations we were performing on the skinnedmeshrenderer. In order to improve that we would have to use something like Mesh Animator or some technique outlined in this forum post.

    So we would want to do both potentially to achieve maximum effect, is that a correct statement?

    I would also assume you would run into cpu performance issues with non-skinned meshes with animations that are moving the parts vs deforming the mesh but could eliminate much of the GPU performance problems using your tool.

    The only way to get rid of the CPU bottle neck would be to do all "animations" in the shader.

    Does all this sound correct or am I off base on something. Thanks for the help.

    UPDATE: looking back through the forum I noticed you had this to say earlier. So if I understand this correctly you would be baking the animations so they could be pushed in a instanced compute shader essentially off loading that work from the CPU to the GPU.

    >>>>Skinned meshes like these need a special infrastructure to instance, there are various not-so easy to implement techniques. A common technique is to bake the bone structures (rig info) and animation states to texture sheets and use compute shaders to process this info and use GPU Instancing afterwards.

    Currently such a feature like this is not available in GPU Instancer. This is one of our planned feature updates, and is scheduled to be added later on in our roadmap. Of course, when it is available, GPU Instancer will do all that complex baking and instancing compute shader stuff for you in the background and make it easy to use.
     
    Last edited: Dec 29, 2018
  49. superjayman

    superjayman

    Joined:
    May 31, 2013
    Posts:
    185
    - There is a MAJOR ISSUE with VR compatibility!. Tree billboards and grass billboards skew and rotate with your head motion? This is a great plugin but this makes it sorry to say not usable in VR, please look into this. Very easy to replicate, rotate your head around and pay attention to the billboards.
     
    LIVENDA_LABS likes this.
  50. GurhanH

    GurhanH

    Joined:
    Apr 24, 2017
    Posts:
    538
    Hi @JesterGameCraft
    More than the platform, the important part for to consider when using GPUI is the power of the GPU. Our wiki has detailed information about the techniques that GPUI uses on the terminology section and information about when to use it on the best practices section. Currently however, we have benchmark results only for PC and unfortunately, we do not have a demo for iOS because of Apple's restrictions. Also keep in mind that GPU Instancer requires Metal API for iOS devices.
    GPUI supports unlit and vertex shaders. But some vertex/fragment shaders might require editing which is explained here.

    Hi @namdo
    If you are using a custom vertex/fragment shader, it might be missing Unity's default instancing setup. You can take a look at this guide about how to add instancing setup to your shader.

    Hi @felxaga
    It might be a problem in HDRP itself, but can not say for sure. Is it possible for you to send us a sample project?

    Hi @zoltanBorbas
    Materials with transparency can result in that behavior. This is a known problem when using GPU Instancing with transparent objects. Since GPU instancing works by treating all instances as the same, the GPU draws one mesh multiple times. This will result in wrong draw orders while using transparency unless you manually implement a form of OIT approximation.

    Hi @lod3
    When using GPUI the vert and tri counts shown at the Stats window becomes obsolete for the GPUI prototypes, because it disables Unity's default renderers for these objects and uses indirect GPU instancing. And regardless of where you are looking, it sends the vert/tri info only once for each mesh, no matter how many instances there are. To render these meshes in their correct positions-sizes-rotations GPUI creates a Compute Buffer in GPU memory which stores the transform data for each instance. So, instead of sending the same mesh to the GPU hundreds of times, GPUI sends it only once and instructs the GPU to render the same mesh multiple times. Less data is sent to GPU every frame and thus the performance gain ;)

    Hi @holdingjason
    Both SkinnedMeshRenderer and Animator puts load on the CPU because of various operations applied on the meshes. And also high amount of SkinnedMeshRenderers causes bottleneck on the data transfer to GPU. So just by disabling the SkinnedMeshRenderer and using indirect instancing, you can achieve high amount of performance gain while still using the state machine in the Animator.
    This is our main target which is similar to how GPUI disables the MeshRenderers.
    For the Animator, we have plans to implement a solution later on similar to the no-gameobject workflow. Where you can supply an array of animation states which will allow you to disable the animators and handle the state machine yourself.

    On this note, we are making some changes in our previous plans about Animations, mainly because of technical and user requirements. We will make a more detailed explanation on these at a later date when our implementation decisions are finalized.

    Hi @superjayman
    We checked the billboards with VR but didn't see this. We either missed it or the latest updates caused an unexpected outcome or we didn't test the settings you are using. We will make a detailed VR test with different scenarios next week and release an update soon after. If you can send more information on your VR setup, we will make sure to include those in our tests.