首页 > 解决方案 > 将 XNA Shader 通道、混合和剔除模式移植到 Unity shaderlab

问题描述

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

Pass1使用 alpha 混合的部分,如SrcBlend,DestBlend和 set's cull to none 是我要确保我做对的唯一地方。

这是 XNA 着色器版本:

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

    VertexShader = compile vs_2_0 TheVertexShader();
    PixelShader = compile ps_2_0 ThePixelShader();
}

这是我制作的 Unity Shaderlab 端口:

Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" }
LOD 100
Blend SrcAlpha One
Blend DstAlpha OneMinusSrcAlpha
ZWrite Off
Cull Off 

它似乎在 Unity 中运行良好,但这与 Unity 中的等效通道设置完全相同吗?如果不是,则需要进行哪些更改才能获得确切的等效性。

标签: unity3dxnashadershaderlabunity3d-shaders

解决方案


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

这是正确的混合:

Blend SrcAlpha OneMinusSrcAlpha

这会导致基本的 Alpha 混合。


推荐阅读