SS5Player for Unity(以降SS5PU)で、RenderTextureにレンダリングした際に、元データのテクスチャがPre-Multipied Alpha(乗算済アルファ)である場合、パーツの継ぎ目のピクセルが暗く沈んで、継ぎ目が見えてしまう場合があります。
この場合、SS5PUのシェーダを修正することで回避することが可能です。
対象ファイル1: Assets/SpriteStudio/Shader/Base/ShaderPixel_Sprite_SpriteStudio
//
// SpriteStudio5 Player for Unity
//
// Copyright(C) Web Technology Corp.
// All rights reserved.
//
#define LIMIT_ALPHA 0.0038
sampler2D _MainTex;
#ifdef SV_Target
fixed4 PS_main(InputPS Input) : SV_Target
#else
fixed4 PS_main(InputPS Input) : COLOR0
#endif
{
fixed4 Output;
fixed4 Pixel = tex2D(_MainTex, Input.Texture00UV.xy);
Pixel *= Input.ColorMain;
fixed4 OverlayParameter = Input.ParameterOverlay;
fixed4 ColorOverlay = Input.ColorOverlay;
fixed ColorAlpha = ColorOverlay.a;
fixed PixelAlpha = Pixel.a;
fixed4 PixelCoefficientColorOvelay = ((0.0f > OverlayParameter.z) ? fixed4(1.0f, 1.0f, 1.0f, 1.0f) : (Pixel * OverlayParameter.z));
ColorOverlay *= ColorAlpha;
Pixel = ((Pixel * (1.0f - (ColorAlpha * OverlayParameter.y))) * OverlayParameter.x) + (PixelCoefficientColorOvelay * ColorOverlay * OverlayParameter.w);
Pixel.xyz *= PixelAlpha; // ←この行を追加
Pixel.a = PixelAlpha;
Output = Pixel;
return(Output);
}
対象ファイル2: Assets/SpriteStudio/Shader/Sprite_SpriteStudio_Mix
//
// SpriteStudio5 Player for Unity
//
// Copyright(C) Web Technology Corp.
// All rights reserved.
//
Shader "Custom/SpriteStudio5/Mix" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_OverlayParameter_Non ("Parameter(Non)", Vector) = (1.0, 0.0, -1.0, 0.0)
_OverlayParameter_Mix ("Parameter(Mix)", Vector) = (1.0, 1.0, -1.0, 1.0)
_OverlayParameter_Add ("Parameter(Add)", Vector) = (1.0, 0.0, -1.0, 1.0)
_OverlayParameter_Sub ("Parameter(Sub)", Vector) = (1.0, 0.0, -1.0, -1.0)
_OverlayParameter_Mul ("Parameter(Mul)", Vector) = (1.0, 1.0, 1.0, 1.0)
}
SubShader {
Tags {
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="Transparent"
}
Pass {
Lighting Off
Fog { Mode off }
Cull Off
ZTest LEqual
ZWRITE Off
Blend One OneMinusSrcAlpha // ←元は「Blend SrcAlpha OneMinusSrcAlpha」
CGPROGRAM
#pragma vertex VS_main
#pragma fragment PS_main
#include "UnityCG.cginc"
#include "Base/ShaderVertex_Sprite_SpriteStudio.cginc"
#include "Base/ShaderPixel_Sprite_SpriteStudio.cginc"
ENDCG
SetTexture [_MainTex] {
Combine Texture, Texture
}
}
}
FallBack Off
}
この修正を行った上で、
Assets/SpriteStudio/Shader内の「Sprite_SpriteStudio_~」のシェーダを全て再コンパイルします。
ただし、元の素材のデータ群がPre-Multiplied AlphaとStraight Alpha(ストレートアルファ)が混在している場合、Straight Alphaのテクスチャを使ったデータの出力が(逆に)おかしくなる可能性があるので、その旨注意する必要があります。
プロジェクトの状況を考慮して、適用するかを選択してくださいますようお願い致します。
SS5Player for Unity(以降SS5PU)で、RenderTextureにレンダリングした際に、元データのテクスチャがPre-Multipied Alpha(乗算済アルファ)である場合、パーツの継ぎ目のピクセルが暗く沈んで、継ぎ目が見えてしまう場合があります。
この場合、SS5PUのシェーダを修正することで回避することが可能です。
対象ファイル1: Assets/SpriteStudio/Shader/Base/ShaderPixel_Sprite_SpriteStudio
対象ファイル2: Assets/SpriteStudio/Shader/Sprite_SpriteStudio_Mix
この修正を行った上で、
Assets/SpriteStudio/Shader内の「Sprite_SpriteStudio_~」のシェーダを全て再コンパイルします。
ただし、元の素材のデータ群がPre-Multiplied AlphaとStraight Alpha(ストレートアルファ)が混在している場合、Straight Alphaのテクスチャを使ったデータの出力が(逆に)おかしくなる可能性があるので、その旨注意する必要があります。
プロジェクトの状況を考慮して、適用するかを選択してくださいますようお願い致します。