Problem statement
If the image is exported with premultiplied alpha turned off, the multiply blend mode will not work correctly. The following example is a modification of the physics2.html spine-phaser example. The image on the right do not have premultiplied alpha, and you can see the nose and mouth are not rendered correctly.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script src="//cdn.jsdelivr.net/npm/phaser@3.60.0/dist/phaser.js"></script>
<script src="../dist/iife/spine-phaser-v3.js"></script>
<link rel="stylesheet" href="../../index.css" />
<title>Spine Phaser Example</title>
</head>
<body class="p-4 flex flex-col items-center">
<h1>Physics example 2 - Drag physics</h1>
</body>
<script>
class BasicExample extends Phaser.Scene {
preload() {
this.load.spineBinary("celestial-circus-data", "/assets/celestial-circus-pro.skel");
this.load.spineAtlas("celestial-circus-atlas", "/assets/celestial-circus-pma.atlas");
this.load.spineAtlas("celestial-circus-atlas-no-pma", "/assets/celestial-circus.atlas");
}
create() {
this.add.spine(
200,
350,
"celestial-circus-data",
"celestial-circus-atlas"
).setScale(0.3);
this.add.spine(
600,
350,
"celestial-circus-data",
"celestial-circus-atlas-no-pma"
).setScale(0.3);
}
}
new Phaser.Game({
type: Phaser.AUTO,
width: 800,
height: 600,
type: Phaser.WEBGL,
scene: [BasicExample],
plugins: {
scene: [
{
key: "spine.SpinePlugin",
plugin: spine.SpinePlugin,
mapping: "spine",
},
],
},
});
</script>
</html>
Runtime information
Phaser 3.60, 3.80, 3.90, 4.0 all have this issue