Skip to content

v1.5.17/v1.6.0 テクスチャにレンダリングした時にパーツの継ぎ目が黒く出てしまう #211

@MasamiYitsuse

Description

@MasamiYitsuse

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のテクスチャを使ったデータの出力が(逆に)おかしくなる可能性があるので、その旨注意する必要があります。

プロジェクトの状況を考慮して、適用するかを選択してくださいますようお願い致します。

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions