将XNA Shader传递,混合和剔除模式移植到Unity shaderlab中

Pro*_*mer 5 shader xna unity-game-engine shaderlab unity3d-shaders

我不得不将XNA着色器移植到Unity的着色器中,并想验证我是否正确执行了此操作.

Pass1使用alpha混合的部分SrcBlend,DestBlend并将set的cull设置为none是我唯一想要确保正确的地方.

这是XNA着色器版本:

pass Pass1
{
    AlphaBlendEnable = true;
    SrcBlend = SRCALPHA;
    DestBlend = INVSRCALPHA;
    CullMode = None;

    VertexShader = compile vs_2_0 TheVertexShader();
    PixelShader = compile ps_2_0 ThePixelShader();
}
Run Code Online (Sandbox Code Playgroud)

这是我制作的Unity Shaderlab端口:

Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" }
LOD 100
Blend SrcAlpha One
Blend DstAlpha OneMinusSrcAlpha
ZWrite Off
Cull Off 
Run Code Online (Sandbox Code Playgroud)

它似乎在Unity中工作正常,但这是Unity中完全相同的传递设置吗?如果没有,则需要进行哪些更改以获得确切的等效性.

小智 0

您应该只放置一次“Blend”关键字:其后的两个关键字分别是用于源和目标的混合因子。您可以将其视为“Blend [SrcBlend] [DstBlend]”格式。

这是正确的混合:

Blend SrcAlpha OneMinusSrcAlpha
Run Code Online (Sandbox Code Playgroud)

这会产生基本的 Alpha 混合。