ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-10-01 02:32:14  阅读:204  来源: 互联网

标签:Color Shader color Unity 参数 pass Main 管线


一.简介

  固定功能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
            }
        }
    }
}

 

标签:Color,Shader,color,Unity,参数,pass,Main,管线
来源: https://www.cnblogs.com/movin2333/p/15345851.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有