• Unity Shader学习记录三:固定管线Shader


    一.简介

      固定功能shader(Fixed function shader):针对硬件能够执行的基本命令编写的shader.

    二.编写简单的Shader

      1.pass通道

        在Unity中创建一个Surface Shader:

        

        打开Shader,删去Properties和SubShader中的内容,并添加pass通道代码:

    Shader "Custom/First"
    {
        SubShader
        {
            //使用pass编写渲染通道
            pass
            {
                color(1,0,0,1)//红色
            }
        }
    }

        可以看到,使用color指定了shader渲染的颜色为红色.在Unity中创建一个材质,并将此shader指定给这个材质,然后在游戏中创建一个物体使用此材质,就可以看到相应的效果:

        

      2.使用参数

    Shader "Custom/First"
    {
        properties{
            //指定参数_Color,其名称为"Main Color",类型为颜色color,默认值为(0,1,0,1)
            _Color("Main Color",color) = (0,1,0,1)//默认绿色
        }
        SubShader
        {
            pass
            {
                //当前颜色渲染使用_Color参数赋值
                color[_Color]
            }
        }
    }

        在Properties中添加参数(不区分大小写),指定参数的格式和使用参数的方式见代码,指定后在Unity中选中材质所在的游戏物体可以看到这个名为Main Color的参数:

        

        可以直接修改参数的值(和MonoBehaviour脚本的参数类似).

      3.光照信息

    Shader "Custom/First"
    {
        properties{
            //指定参数_Color,其名称为"Main Color",类型为颜色color,默认值为(0,1,0,1)
            _Color("Main Color",color) = (0,1,0,1)//默认绿色
            //环境光参数
            _Ambient("Ambient",color) = (0.7,0.7,0.7,1)
            //高光参数
            _Specular("Specular",color) = (1,1,1,1)
            //高光反射区域参数
            _Shininess("Shininess",range(0,8)) = 4
            //自发光参数
            _Emission("Emission",color) = (1,1,1,1)
        }
        SubShader
        {
            pass
            {
                //在材质命令块中编写光照信息
                Material{
                    //默认光照颜色
                    diffuse[_Color]
                    //环境光信息
                    ambient[_Ambient]
                    //高光信息
                    specular[_Specular]
                    //高光反射区域信息
                    shininess[_Shininess]
                    //自发光信息
                    emission[_Emission]
                }
                //使用lighting on/off开关光照
                lighting on
                //独立的镜面高光开启
                separatespecular on
            }
        }
    }

      4.setTexture命令

    Shader "Custom/First"
    {
        properties{
            //指定参数_Color,其名称为"Main Color",类型为颜色color,默认值为(0,1,0,1)
            _Color("Main Color",color) = (0,1,0,1)//默认绿色
            //环境光参数
            _Ambient("Ambient",color) = (0.7,0.7,0.7,1)
            //高光参数
            _Specular("Specular",color) = (1,1,1,1)
            //高光反射区域参数
            _Shininess("Shininess",range(0,8)) = 4
            //自发光参数
            _Emission("Emission",color) = (1,1,1,1)
            //纹理参数,值为给纹理取得名字
            _MainTex("MainTex",2d) = ""
        }
        SubShader
        {
            //标签控制渲染顺序
            Tags{"Queue" = "Transparent"}
            pass
            {
                //在通道前加入blend factor
                Blend SrcAlpha OneMinusSrcAlpha    
    
                //在材质命令块中编写光照信息
                Material{
                    //默认光照颜色
                    diffuse[_Color]
                    //环境光信息
                    ambient[_Ambient]
                    //高光信息
                    specular[_Specular]
                    //高光反射区域信息
                    shininess[_Shininess]
                    //自发光信息
                    emission[_Emission]
                }
                //使用lighting on/off开关光照
                lighting on
                //独立的镜面高光开启
                separatespecular on
    
                //设置纹理,一个settexture只能编写一张纹理
                settexture[_MainTex]
                {
                    //结合纹理(texture代表纹理,primary代表光照高光等信息,double用于提高亮度)
                    combine texture * primary double
                }
                //混合第二张纹理贴图
                settexture[_MainTex]
                {
                    //结合纹理(previous代表之前已经混合的纹理)
                    combine texture * previous double,texture * constant
                }
            }
        }
    }
  • 相关阅读:
    ssh加密访问
    protobuf java学习
    Errors occurred while updating the change sets for SVNStatusSubscriber org.apache.subversion.javahl.
    eclipse导入svn中的maven工程项目
    Archive for required library xx cannot be read or is not a valid ZIP file
    oracle9i 精简版客户端界面没有显示实例名
    mybatis3 sqlsession
    RabbitMQ学习之:(一)初识、概念及心得
    mybatis expected at least 1 bean which qualifies as autowire candidate for this dependency
    mysql 5.6.20 数据库中文乱码解决方法
  • 原文地址:https://www.cnblogs.com/movin2333/p/15345851.html
Copyright © 2020-2023  润新知