返回介绍

ShaderLab语法:纹理组合器(TextureCombiners)

发布于 2021-06-20 00:15:04 字数 3420 浏览 999 评论 0 收藏 0

混合两种纹理的 Alpha

这个小示例采用两种纹理。首先,Alpha 使第一个组合器只采用 _MainTex,然后使用 _BlendTex 的 alpha 通道淡入 _BlendTex 的 RGB 颜色

Shader "Examples/2 Alpha Blended Textures" {
    Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _BlendTex ("Alpha Blended (RGBA) ", 2D) = "white" {}
    }
    SubShader {
        Pass {
            // 应用基础纹理
            SetTexture [_MainTex] {
                combine texture
            }
            // 使用 lerp 操作符混合 alpha 纹理
            SetTexture [_BlendTex] {
                combine texture lerp (texture) previous
            }
        }
    }
} 

Alpha 控制的自发光

此着色器使用 _MainTex 的 alpha 分量来决定在何处应用光照。通过两个阶段应用纹理来实现;在第一个阶段,使用纹理的 alpha 值在顶点颜色和纯白色之间进行调和。第二个阶段,乘以纹理的 RGB 值。

Shader "Examples/Self-Illumination" {
    Properties {
        _MainTex ("Base (RGB) Self-Illumination (A)", 2D) = "white" {}
    }
    SubShader {
        Pass {
            // 设置基础白色顶点光照
            Material {
                Diffuse (1,1,1,1)
                Ambient (1,1,1,1)
            }
            Lighting On

            // 使用纹理 alpha 调和至白色(= 完全发光)
            SetTexture [_MainTex] {
                constantColor (1,1,1,1)
                combine constant lerp(texture) previous
            }
            // 乘以纹理
            SetTexture [_MainTex] {
                combine previous * texture
            }
        }
    }
} 

我们还可以在这里做点别的事情,除了混合至纯白色,我们还能添加自发光颜色然后再混合至纯白色。使用 ConstantColor 从属性获取 _SolidColor 并应用到纹理混合中时要注意。

Shader "Examples/Self-Illumination 2" {
    Properties {
        _IlluminCol ("Self-Illumination color (RGB)", Color) = (1,1,1,1)
        _MainTex ("Base (RGB) Self-Illumination (A)", 2D) = "white" {}
    }
    SubShader {
        Pass {
            // 设置基础白色顶点光照
            Material {
                Diffuse (1,1,1,1)
                Ambient (1,1,1,1)
            }
            Lighting On

            // 使用纹理 alpha 调和至白色(= 完全发光)
            SetTexture [_MainTex] {
                // 将颜色属性拉至该混合器中
                constantColor [_IlluminCol]
                // 并且使用纹理的 alpha 在纹理和
                // 顶点颜色之间混合
                combine constant lerp(texture) previous
            }
            // 乘以纹理
            SetTexture [_MainTex] {
                combine previous * texture
            }
        }
    }
} 

最后,我们采用顶点光照着色器的所有的光照属性并将其拉入:

Shader "Examples/Self-Illumination 3" {
    Properties {
        _IlluminCol ("Self-Illumination color (RGB)", Color) = (1,1,1,1)
        _Color ("Main Color", Color) = (1,1,1,0)
        _SpecColor ("Spec Color", Color) = (1,1,1,1)
        _Emission ("Emmisive Color", Color) = (0,0,0,0)
        _Shininess ("Shininess", Range (0.01, 1)) = 0.7
        _MainTex ("Base (RGB)", 2D) = "white" {}
    }

    SubShader {
        Pass {
            // 设置基础顶点光照
            Material {
                Diffuse [_Color]
                Ambient [_Color]
                Shininess [_Shininess]
                Specular [_SpecColor]
                Emission [_Emission]
            }
            Lighting On

            // 使用纹理 alpha 调和至白色(= 完全发光)
            SetTexture [_MainTex] {
                constantColor [_IlluminCol]
                combine constant lerp(texture) previous
            }
            // 乘以纹理
            SetTexture [_MainTex] {
                combine previous * texture
            }
        }
    }
} 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文