zoukankan      html  css  js  c++  java
  • [小明学Shader]8.透明,Alpha混合(alpah blend)

      透明在渲染的时候经常用,类似玻璃啊,头发啊,树叶啊之类的,必须要用到.

    • 代码
    Shader "Cutom/11.27/3"{
        Properties{
            _MainTex("Base(RGB)",2D)="white"{}
        }
        
        SubShader{
            Tags{"Queue"="Transparent"}
            LOD 200
            
            CGPROGRAM
            #pragma surface surf Lambert alpha
            
            sampler2D _MainTex;
            
            struct Input{
                float2 uv_MainTex;
            };
            
            void surf(Input In,inout SurfaceOutput o){
                half4 c=tex2D(_MainTex,In.uv_MainTex);
                o.Albedo=c.rgb;
                
                o.Alpha=c.g;
            }
            
            ENDCG
        }
        FallBack "Diffuse"
    }
    • 效果

    • 注意点
    #pragma surface surfaceFunction lightModel [optionalparams]

    1.用上#pragma XXX alpha

      上述代码中,#pragma 和surface关键字,不能改,surfaceFunction和lightModel可以自己改,[optionalparams]用中括号括起来表示可选,只有在特定情况下才写,我们写了alpha,untiy就会为我们打开alpha混合功能.如果没打开,在surf函数中设定的o.Alpha的值就无效,会被GPU忽略.

    2.设定合适的值

      设定为0的话,会让每个像素点(texel)透明.我们设定了o.Alpha的值为c.g,所以除了绿色和白色之外,其它颜色透明了,是其它像素中所提取到的g的值都是0,所以就都透明了.四个区域的像素点的值对应为红色(1,0,0),绿色(0,1,0),蓝色(0,0,1)和白色(1,1,1),除了绿色和白色外,其它像素点的g值都为0.

    3.设定合理的渲染顺序

      一定让透明的物体在不透明物体后面渲染

  • 相关阅读:
    「2013-8-5」企业基因
    HashMap和ConcurrentHashMap详解
    JVM 详解
    Dubbo 项目学习(四) 接口抽取以及依赖版本统一
    Dubbo 项目学习(三) 消费Dubbo服务
    Dubbo 项目学习(二) 发布Dubbo服务
    Spring Boot 日志问题记录
    Dubbo 项目学习(一) Admin 管理控制台
    Idea 搭建 SSM 项目框架
    Idea 搭建 SSH 项目框架
  • 原文地址:https://www.cnblogs.com/WongSiuming/p/4997434.html
Copyright © 2011-2022 走看看