I’m developing a game for android and I have a problem. On some devices I have glitches. I searched the documentation and the forum and I found a topic about the Skeleton control where I can set the type of skinning preferred. After setting the hardware skinning to true I have made some test on more then one device. On some devices the glitches were gone but on other devices, where it worked fine before, there where new glitches.
So, my question is: “Is there a way to know when to use hardware skinning instead of software skinning?”
The tests I have made:
Device: Lenovo P70-A with Android 5.1
Test with software skinning had glitches:
Test with hardware skinning had no glitches:
Device: ITab Hallo 79 with Android 4.2.2
Test with software skinning had no glitches:
Test with hardware skinning had glitches:
Device: Sony Xperia SP C5303 with Android 4.3
Both tests had NO glitches.
Device: Samsung S6 with Android 5.1
Software skinning had glitches.
Hardware skinning had no glitches.
I also have a simple project if you want to try to make some test:
I was thinking that maybe the models are not imported correctly or maybe they are to complex for an android device so I have also made the same tests with a more simpler model, with only 4 bones, and the problem persists.
So I stick to my question: Is there a way to know when to use hardware skinning instead of software skinning?
Any hint will be greatly appreciated.
If we tabulate based on GPU model instead of device we get a slightly clearer picture:
- Mali-T760MP2 - software skinning glitches
- PowerVR SGX544 - hardware skinning glitches
- Adreno 320 - no glitches
- Mali-T760MP8 - software skinning glitches
So looks like Mali GPUs have trouble with software skinning and PowerVR GPUs have trouble with hardware skinning. Adreno GPUs can handle both.
Before we proceed, just wanted to clarify a few things:
- Are you using jME 3.0 or 3.1?
- Are the models imported via the Blender importer or OgreXML?
- Are you having the same issues with models available in the jME3 examples? E.g. Jaime / Oto / Ninja / Sinbad?
I happen to have a PowerVR device so if I could actually reproduce this on jME 3.1 I would be able to fix it for hardware skinning.
I had similar problems on desktop machine, glitches were very similar to those from your Lenovo. I guess that you are using models imported directly from Blender. Try with Ogre, for me it is working fine.
- I’m using JME 3.0 so this weekend I will make a build with JME 3.1
- the models are imported with Blender importer. Some of my models can’t be exported in OgreXML from Blender but this is their bug not yours , I will make a test with a model which can be exported in OgreXML.
- I didn’t make any tests with the JME3 examples but I will
So I understand I have to read more about GPUs.
I will keep you up to date with all the tests I will make.
Thanks for your replies!
Actually you shouldn’t really decide on that.
Software skinning does the work on the CPU and Hardware skinning on the gpu.
For Desktop Devices, 3.1 made hw skinning default since it has a way better Performance whereas Software skinning is guaranteed to work everywhere.
Actually you discovered Bugs. It should be fine with both skinning methods on each Device.
Note: on Android/Intel HD graphics, where the gpu is near it’s limit, Software skinning might improve the Performance but that entirely depends on the case and is found out by benchmarking.
I had a few free hours today so I made some tests with the new version of JME (3.1 alpha 4).
The tests included software skinning and hardware skinning on 3 devices.
I made a simple model with one animation and I imported it with the Blender importer.
In the tests I have also used Jaime from JME test data and these are the results:
- Device: Lenovo P70-A with Android 5.1: Test with software skinning had glitches with both models.
- Device: ITab Hallo 79 with Android 4.2.2: No glitches detected
- Sony Xperia SP C5303 with Android 4.3: No glitches detected
It seems like in the new version of JME the hardware skinning works on android.
Anyway I will make the rest of the tests this weekend.
Hope this helps you in fixing the software skinning glitches.
I finally fixed the ogre3D bug. I didn’t have the correct version of blender.
I have made the test with the ogre importer and FrozenShade was right, it fixes the bug.
So with ogre importer there are no more glitches. I think the problem is with the blender importer not with the skinning type used.