Open MasamiYitsuse opened 6 years ago
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内の「SpriteSpriteStudio~」のシェーダを全て再コンパイルします。
ただし、元の素材のデータ群が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内の「SpriteSpriteStudio~」のシェーダを全て再コンパイルします。
ただし、元の素材のデータ群がPre-Multiplied AlphaとStraight Alpha(ストレートアルファ)が混在している場合、Straight Alphaのテクスチャを使ったデータの出力が(逆に)おかしくなる可能性があるので、その旨注意する必要があります。
プロジェクトの状況を考慮して、適用するかを選択してくださいますようお願い致します。