dongju.jeong Posted April 30, 2019 Posted April 30, 2019 (edited) My model causes too many frame drop. For individual control, I did not combine models (such as buttons, instruments, and Controllers). As a result, there were many surfaces, polygons, and Marterials. test computer's spec is i7-7740x 4.30ghz, GTX 1080ti sli, 32GB ram. Triangles = 800000 materials = 170 primitives = 800000 surfaces = 4000 dips = 4000 <- a lot of child node (about cockpit's mesh) Is the gpu not used for rendering? or Is the model too heavy? I wan't to combine components of a cockpit because they must be individually controllable. I can't think of any more ways to optimize. In this case, is there an optimization method in unigine? Edited April 30, 2019 by dongju.jeong
werner.poetzelberger Posted April 30, 2019 Posted April 30, 2019 (edited) 34 minutes ago, dongju.jeong said: I can't think of any more ways to optimize. oO. There is always a possibility. ^__° 34 minutes ago, dongju.jeong said: Triangles = 800000 Can definitely be optimized. I am sure! If you need these kind of detail, build low res models and texture with normal maps. Otherwise, reduce polygons. You can build whole Cities out of 800K Polygons °__° materials = 170 Combine materials and textures, UV layouts! primitives = 800000 same as above surfaces = 4000 dips = 4000 Really, you need 4000 individual nodes? Can it be surfaces? Intersections, Interaction, Animation purposes? Combine, LODs, Occlusion, hide/show when necessary. Edited April 30, 2019 by werner.poetzelberger 1
morbid Posted April 30, 2019 Posted April 30, 2019 Hello Dongju, Werner pointed the right direction. I'll summarize some general ideas on optimization and leave a couple of links. Try to keep as less unique objects ass possible Merge meshes that be merged into one Use UV maps and texture atlases to minimize the number of materials Simplify hierarchy, there's probably a way to do this Here's our video on content optimization: https://www.youtube.com/watch?v=Iqsr3fEvnis&feature=youtu.be General article: https://developer.unigine.com/en/docs/2.7.3/content/optimization/ And this recent thread: https://developer.unigine.com/forum/topic/4746-low-fps-need-to-bring-more-fps-in-project/ Hope this helps. Thanks! 1 How to submit a good bug report --- FTP server for test scenes and user uploads: ftp://files.unigine.com user: upload password: 6xYkd6vLYWjpW6SN
ulf.schroeter Posted April 30, 2019 Posted April 30, 2019 Assuming that you want to control each individual button, indicator and switch I would expect that some GPU-based vertex-shader based animation approach will be required to get rid of your fine-grained object hierarchy. Otherwise it will be hard to significantly reduce the performance-killing draw call count/dips (as standard CPU-side node transform matrix manipulations per switch/button/indicator will force them to remain individual objects = draw calls) A GPU custom shader solution could use a single small CPU-controlled 1-2K texture for storage of numerical values of all button/switch/indicator positions. Such a state texture can easily be updated on the CPU and uploaded to the GPU on each frame or state change. All the vertices of ALL buttons/switches/ indicator then could (at least in theory, using texture atlas etc.) be put into a single big vertex array = single draw call. Each vertex additionally will have to encode its individual state texture cell index as an additional vertex attribute. Based on this dependent state texture value lookup the required trsnsformation matrix could be calculated on the fly by the GPU within the vertex shader. In a way this approach is similar to the skinned mesh implementation, where a huge amount of static buffer character vertices (bind pose) are transformed on-the-fly on the GPU using small bone transformation matrix arrays. Maybe using MeshSkinned could therefore also be a viable solution without the requirement to do all shader coding on your own. In practice there is a bone limit per mesh instance (64,128, 256,even more?), but this could be worked around by splitting the animated switch/button/indicator geometry into multiple MeshSkinned instances. Compared to your current implementation I would expect dramatic improvments with the customized vertex-shaderaporoach and significant improvements with the MeshSkinned approach (but I am just guessing here, of course you have to test it) As Werner said: There is always a possibility 1
werner.poetzelberger Posted April 30, 2019 Posted April 30, 2019 Could you use skinned mesh and bones for your interfaces? Each Button/Trigger etc is skinned and controlled by a bone. You could combine several panels to skinned meshes and maintain freedom of individual animation. Weired... how is this handled normally in flight simulators or simulators generally where you have a massive amount of interactive elements? o_o Werner 1
ulf.schroeter Posted April 30, 2019 Posted April 30, 2019 I would assume with a specialized GPU vertex shader solution using indirect texture state lookups and on-the-fly transformation matrix calculation ;-)
werner.poetzelberger Posted May 2, 2019 Posted May 2, 2019 On 4/30/2019 at 3:43 PM, ulf.schroeter said: I would assume with a specialized GPU vertex shader solution using indirect texture state lookups and on-the-fly transformation matrix calculation ;-) Rock it!!
Recommended Posts