Hello, as a thesis assignment I created a tarock game. Tarock is a card game played in Europe. First I used JSONLoader for my playing card model. The card object consisted of a single mesh with three materials. I then made a new object and exported it as gltf. Now when I import it using the new gltf loader, the object is a group of three meshes, each with its own material. However, the performance was better using the old model.
I need 3 materials because I use a separate texture for the front and back. I use the third material for the edge that lights up at a certain action.
Anyway I need advice on how to make perfomance better.
There are some screen shots at https://pagat.si/, site is in Slovenian language.
If you wana try the game, It uses google sign-in and registration … For registration just check and click Google or Facebook. Then Igraj Tarok.
Is the game itself a 3D game? Why would you use models instead of a simple sprite, export cards as textures (ideally compress them using the appropriate ktx format) and map textures onto sprites instead?
Given that approach you can even get away with a single texture atlas (in that case you can use instancing to render all the cards with a single call)
Based on screenshots, the cards are always facing towards the camera, so IMO sprites would be a better way to render cards.
I tried to create sort of realistic environment, 3D room with cards and nice animation. It works ok. I just need some advice, how to make game better on slower machines …
Rounded edges on cards = More vertices = Takes more time to render them. Instead just render a simple quad with baked texture which already has rounded corners on a transparent background. That’d be my suggestion. Good luck!
Three materials per single (and quite simple) object is a recipe for disaster. If you start showing many cards simultanously, you’ll get tons of unnecessary draw calls.
I would recomend you to work on your card model and ‘merge’ the materials into just one
For backside and frontside textures, you can make a texture atlas or simply put both the front and back images into one image (which I think will be closer to a squarish shape so less texture space wasted)
I didnt see the edge light-up effect, but if its a simple edge highlight or something along those lines, then it can be achieved in a shader with usage of uvs or you can add an emission map to your model and then animate the material’s emissive factor/color for activating the highlight.
Once your card is a single material object, you life will become much easier, not only because the draw calls will be reduced to 1/3 (which is already really good by itself), but you’ll also be able to use Instancing to render all cards in just one draw call.
In general, the more cards you have in your game displayed at the same time, the more beneficial the instancing will be, but be warned that implementing different textures per each instance might take some work
With the current info that you’ve presented us with, I believe thats the best direction to go to.
You can do that with Blender. You can read on how to do that on blender-related places.
Basically it’s just a UV layout. This is not something complex, you might have to do a bit of reading to grasp basics though. It’s just modelling knowledge, nothing related to programming specifically.