diff --git a/spine-ue4/Content/Maps/example.umap b/spine-ue4/Content/Maps/example.umap index dde85a2e4..e4fea2f13 100644 Binary files a/spine-ue4/Content/Maps/example.umap and b/spine-ue4/Content/Maps/example.umap differ diff --git a/spine-ue4/Content/Test/Textures/skeleton.uasset b/spine-ue4/Content/Test/Textures/skeleton.uasset new file mode 100644 index 000000000..17321689a Binary files /dev/null and b/spine-ue4/Content/Test/Textures/skeleton.uasset differ diff --git a/spine-ue4/Content/Test/Textures/skeleton2.uasset b/spine-ue4/Content/Test/Textures/skeleton2.uasset new file mode 100644 index 000000000..ca772d2ca Binary files /dev/null and b/spine-ue4/Content/Test/Textures/skeleton2.uasset differ diff --git a/spine-ue4/Content/Test/skeleton.uasset b/spine-ue4/Content/Test/skeleton.uasset new file mode 100644 index 000000000..e57eed34e Binary files /dev/null and b/spine-ue4/Content/Test/skeleton.uasset differ diff --git a/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitAdditiveMaterial.uasset b/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitAdditiveMaterial.uasset index 9ccd5cd5e..72db80d95 100644 Binary files a/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitAdditiveMaterial.uasset and b/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitAdditiveMaterial.uasset differ diff --git a/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitNormalMaterial.uasset b/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitNormalMaterial.uasset index b1b714b27..6923c3f89 100644 Binary files a/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitNormalMaterial.uasset and b/spine-ue4/Plugins/SpinePlugin/Content/SpineUnlitNormalMaterial.uasset differ diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonRendererComponent.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonRendererComponent.cpp index 8af6b307c..a4966bf18 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonRendererComponent.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonRendererComponent.cpp @@ -163,7 +163,25 @@ void USpineSkeletonRendererComponent::UpdateMesh(spSkeleton* Skeleton) { if (attachment->type == SP_ATTACHMENT_REGION) { spRegionAttachment* regionAttachment = (spRegionAttachment*)attachment; spAtlasRegion* region = (spAtlasRegion*)regionAttachment->rendererObject; - UMaterialInstanceDynamic* material = pageToNormalBlendMaterial[region->page]; + + UMaterialInstanceDynamic* material = nullptr; + + switch(slot->data->blendMode) { + case SP_BLEND_MODE_NORMAL: + material = pageToNormalBlendMaterial[region->page]; + break; + /*case SP_BLEND_MODE_ADDITIVE: + material = pageToAdditiveBlendMaterial[region->page]; + break; + case SP_BLEND_MODE_MULTIPLY: + material = pageToMultiplyBlendMaterial[region->page]; + break; + case SP_BLEND_MODE_SCREEN: + material = pageToScreenBlendMaterial[region->page]; + break;*/ + default: + material = pageToNormalBlendMaterial[region->page]; + } if (lastMaterial != material) { Flush(meshSection, vertices, indices, uvs, colors, lastMaterial); @@ -201,8 +219,6 @@ void USpineSkeletonRendererComponent::UpdateMesh(spSkeleton* Skeleton) { indices.Add(idx + 3); idx += 4; depthOffset += this->DepthOffset; - - SetMaterial(meshSection, material); } else if (attachment->type == SP_ATTACHMENT_MESH) { spMeshAttachment* mesh = (spMeshAttachment*)attachment; spAtlasRegion* region = (spAtlasRegion*)mesh->rendererObject; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonRendererComponent.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonRendererComponent.h index b890c49e7..c17404eec 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonRendererComponent.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonRendererComponent.h @@ -42,15 +42,20 @@ protected: void Flush (int &Idx, TArray &Vertices, TArray &Indices, TArray &Uvs, TArray &Colors, UMaterialInstanceDynamic* Material); + // Need to hold on to the dynamic instances, or the GC will kill us while updating them + UPROPERTY() TArray atlasNormalBlendMaterials; TMap pageToNormalBlendMaterial; + UPROPERTY() TArray atlasAdditiveBlendMaterials; TMap pageToAdditiveBlendMaterial; + UPROPERTY() TArray atlasMultiplyBlendMaterials; TMap pageToMultiplyBlendMaterial; + UPROPERTY() TArray atlasScreenBlendMaterials; TMap pageToScreenBlendMaterial; };