Bugfix: very small wight values caused severe animation artifacts.
This commit is contained in:
parent
8752c42aa6
commit
a80051c1ce
@ -46,7 +46,9 @@ import com.jme3.scene.plugins.blender.objects.Properties;
|
|||||||
*/
|
*/
|
||||||
public class TemporalMesh extends Geometry {
|
public class TemporalMesh extends Geometry {
|
||||||
private static final Logger LOGGER = Logger.getLogger(TemporalMesh.class.getName());
|
private static final Logger LOGGER = Logger.getLogger(TemporalMesh.class.getName());
|
||||||
|
/** A minimum weight value. */
|
||||||
|
private static final double MINIMUM_BONE_WEIGHT = FastMath.DBL_EPSILON;
|
||||||
|
|
||||||
/** The blender context. */
|
/** The blender context. */
|
||||||
protected final BlenderContext blenderContext;
|
protected final BlenderContext blenderContext;
|
||||||
|
|
||||||
@ -530,7 +532,11 @@ public class TemporalMesh extends Geometry {
|
|||||||
for (Entry<String, Integer> entry : boneIndexes.entrySet()) {
|
for (Entry<String, Integer> entry : boneIndexes.entrySet()) {
|
||||||
if (vertexGroupsForVertex.containsKey(entry.getKey())) {
|
if (vertexGroupsForVertex.containsKey(entry.getKey())) {
|
||||||
float weight = vertexGroupsForVertex.get(entry.getKey());
|
float weight = vertexGroupsForVertex.get(entry.getKey());
|
||||||
if (weight > 0) {// no need to use such weights
|
if (weight > MINIMUM_BONE_WEIGHT) {
|
||||||
|
// only values of weight greater than MINIMUM_BONE_WEIGHT are used
|
||||||
|
// if all non zero weights were used, and they were samm enough, problems with normalisation would occur
|
||||||
|
// because adding a very small value to 1.0 will give 1.0
|
||||||
|
// so in order to avoid such errors, which can cause severe animation artifacts we need to use some minimum weight value
|
||||||
boneBuffersForVertex.put(weight, entry.getValue());
|
boneBuffersForVertex.put(weight, entry.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user