透明通道中的预乘

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jingangxin666/article/details/80714696

NGUI的Atlas Maker视图中, 有一个选项是 PMA Shader

这里写图片描述

打开NGUI源码, 发现在UIAtlasMaker.OnGUI中有一段代码

        if (!fixedShader)
        {
            GUILayout.BeginHorizontal();
            NGUISettings.atlasPMA = EditorGUILayout.Toggle("PMA Shader", NGUISettings.atlasPMA, GUILayout.Width(100f));
            GUILayout.Label("Pre-multiplied alpha", GUILayout.MinWidth(70f));
            GUILayout.EndHorizontal();
        }

其中NGUISettings.atlasPMA影响到的是这段代码

// If the material doesn't exist, create it
if (mat == null)
{
    Shader shader = Shader.Find(NGUISettings.atlasPMA ? "Unlit/Premultiplied Colored" : "Unlit/Transparent Colored");
    mat = new Material(shader);

    // Save the material
    AssetDatabase.CreateAsset(mat, matPath);
    AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport);

    // Load the material so it's usable
    mat = AssetDatabase.LoadAssetAtPath(matPath, typeof(Material)) as Material;
}

因此, PMA Shader选项是否勾选, 影响的是在创建图集的时候, 是否使用Unlit/Premultiplied Colored这个shader, 那么它有什么用呢?

NGUI官网上有人对这个提出疑问, 有人回答说这是在旧的机型上采用的特殊的alpha通道处理模式.

处理方式即使名字所说的—-预乘

预乘和非预乘的原理是什么

所谓 premultiplynon- premultiply 就是 shader 在处理透明渲染的时候,是否从贴图里拾取 alpha 通道,把它乘在 rgb 通道上,在透明的同时作颜色上的衰减。

关于透明通道预乘, 可能会出现的问题和解决方法:

猜你喜欢

转载自blog.csdn.net/jingangxin666/article/details/80714696