I’d like to get some input on strategies for crowd animations. Namely without current support for vertex animation data what options do we have for mass populating crowds without seriousely damaging performance.
When running crowds in other engines, I’ve worked with referencing source meshes with vertex anims preloaded onto them. Then taking frames of that data and looping it on each crowd character, giving good performance and no bones.
However that’s not possible in Unreal yet, so my thoughts are … a VERY simple rig, heavy LODing perhaps resulting in billboards after a short distance, where animation stops, or bones are culled also at a certain distance.
any help appreciated
A crowd simulation is a no brainier addition for UE4 but the question is as to what extent?
Strategy wise bones has less resource requirements as well as a much higher performance curve over vertex animation of at “least” 10-1.
Traditionally vertex based animation has been CPU bound and is not ideal as to hardware rendering requirements. As to how vertex animation will preform is yet to be determined but it can’t be hardware rendered that’s a deal breaker.
Skeletal on the other hand is hardware rendered as well supports full body morphs so as far as the need for unique NPC’s goes you could make tens and thousands of different characters using the same rigs and same base Alpha model and since technically each character is a instanced copy then the performance is much lower as to memory footprints.
Strategy wise going this route also helps create a single channel solution where additional layers can be easily added such characters expressing or even speaking dialogue, acting, in real time.
So are you saying that by default skeletal animations are already instanced as long as we use the same model and rig? or is there a way of marking it as instanced (e.g. like you can use InstancedStaticMesh instead of StaticMesh).
it is an interesting question, probably only the developers could answer it really well…
in the old game engine I use/used, in case of an RTS game with 400-500 bone animated human units, it resulted in significant performance boost not using separate “Tick” functions provided by the engine for all characters, but setting them in one custom loop in one main Tick function, and also using similar animation positions for as many units as possible (being in similar anim state, like idle/move). It can be very different with UE4 (e.g. currently my GPU seems to be the main bottleneck in my PC), so I will spend some time with it in the following weeks (and with the performance tools)…
The first time you import a skeletal rig you are asked if you want to use a skeletal set up already in UE4. If you leave it set to none then the rig is imported as the rig that player model will be using. You always land up with two separate components and the mesh contains the skin weighing.
The second character to be imported, that uses the same rig, you are given the same option but this time if you tell UE4 to use the rig you just imported then the rig is not imported and the mesh is weighted to the previous rig.
You can have “thousands” of player model meshes, which is a nothing hit as to performance, and use the identical resources through a single channel all of them using the one rig to rule them all.
It is by design an instanced system as every character will use the same animation pool as well controlled by a single animation blueprint.