shader搬运学习(一)


首先贴上最主要的学习资料链接,作者是浅墨,感觉受益匪浅
shader学习资料

Shader "Shader真好玩/真TM好玩/MyFirstShader" //在选择菜单里面显示的值
{
    Properties
    {
        //显示在面板中的值,可以在面板上自行调整
        // 在脚本中引用名称("编辑器中显示名称",类型)=初值
        // name ("display name", Range (min, max)) =number
        // 定义浮点数属性,在检视器中可通过一个标注最大最小值的滑条来修改。
        // name ("display name", Color) =(number,number,number,number)
        // 定义颜色属性
        // name ("display name", 2D) = "name" {options }
        // 定义2D纹理属性
        // name ("display name", Rect) = "name"{ options }
        // 定义长方形(非2次方)纹理属性
        // name ("display name", Cube) = "name"{ options }
        // 定义立方贴图纹理属性
        // name ("display name", Float) = number
        // 定义浮点数属性
        // name ("display name", Vector) =(number,number,number,number)
        // 定义一个四元素的容器(相当于Vector4)属性


          _Color ("主颜色", Color) = (1,1,1,0)
        _SpecColor ("高光颜色", Color) = (1,1,1,1)
        _Emission ("自发光颜色", Color) = (0,0,0,0)
        _Shininess ("光泽度", Range (0.01, 1)) = 0.7
        _MainTex ("基本纹理", 2D) = "white" {}
    }
    SubShader
    {
        
    
        Pass
		{
        // 这些代码一般是写在Pass{ }中的,细节如下:
        // Color Color
        // 设定对象的纯色。颜色即可以是括号中的四值(RGBA),也可以是被方框包围的颜色属性名。
        // Material { Material Block }
        // 材质块被用于定义对象的材质属性。
        // Lighting On | Off
        // 开启光照,也就是定义材质块中的设定是否有效。想要有效的话必须使用Lighting On命令开启光照,而颜色则通过Color命令直接给出。
        // SeparateSpecular On | Off
        // 开启独立镜面反射。这个命令会添加高光光照到着色器通道的末尾,因此贴图对高光没有影响。只在光照开启时有效。
        // ColorMaterial AmbientAndDiffuse | Emission
        // 使用每顶点的颜色替代材质中的颜色集。AmbientAndDiffuse 替代材质的阴影光和漫反射值;Emission 替代 材质中的光发射值。


			//-----------材质------------
            Material
			{
            // 如下这些代码的使用的地方是在SubShader中的一个Pass{ }中新开一个Material{ }块,在这个Material{ }块中进行这些语句的书写。这些代码包含了包含材质如何和光线产生作用的一些设置。这些属性默认为值都被设定为黑色(也就是说不产生作用),也就是说他们一般情况下可以被忽略。当然,还是有很多时候需要使用到他们的。
            // Diffuse Color(R,G,B,A)
            // 漫反射颜色构成。这是对象的基本颜色。
            // Ambient Color(R,G,B,A)
            // 环境色颜色构成.这是当对象被RenderSettings.中设定的环境色所照射时对象所表现的颜色。
            // Specular Color(R,G,B,A)
            // 对象反射高光的颜色。(R,G,B,A)四个分量分别代表红绿蓝和Alpha,取值为0到1之间。
            // Shininess Number
            // 加亮时的光泽度,在0和1之间。0的时候你会发现更大的高亮也看起来像漫反射光照,1的时候你会获得一个细微的亮斑。
            // Emission Color
            // 自发光颜色,也就是当不被任何光照所照到时,对象的颜色。(R,G,B,A)四个分量分别代表红绿蓝和Alpha,取值为0到1之间。
            // 而打在对象上的完整光照颜色最终是:
            //  FinalColor=
            //  Ambient * RenderSettings ambientsetting + (Light Color * Diffuse + Light Color *Specular) + Emission
            // 翻译过来的中文式子便是:
            // 最终颜色=环境光反射颜色* 渲染设置环境设置 *(灯光颜色*漫反射颜色+灯光颜色*镜面反射颜色)+自发光
            // 知道了这个式子,我们就知道了,在各种光的综合作用下,我们材质最终的颜色是怎么来的了。
            // 需要注意的是:方程式的灯光部分(也就是带括号的部分)对所有打在对象上的光线都是重复使用的。而我们在写Shader的时候常常会将漫反射和环境光光保持一致(所有内置Unity着色器都是如此)。


				//可调节的漫反射光和环境光反射颜色
                Diffuse [_Color]
                Ambient [_Color]
				//光泽度
                Shininess [_Shininess]
				//高光颜色
                Specular [_SpecColor]
				//自发光颜色
                Emission [_Emission]
            }
			//开启光照
            Lighting On
			//开启独立镜面反射
            SeparateSpecular On
			//设置纹理并进行纹理混合
            SetTexture [_MainTex] 
			{
                Combine texture * primary DOUBLE, texture * primary
            }
        }
    }
}

几个碎碎的知识点:

一.三种着色器:

1.固定功能着色器(Fixed Function Shader)
2.表面着色器(Surface Shader)
3.顶点着色器&片段着色器 (Vertex Shader & Fragment Shader)
区分:没有嵌套CG语言,也就是代码段中没有CGPROGARAM和ENDCG关键字的,就是固定功能着色器。
嵌套了CG语言,代码段中有surf函数的,就是表面着色器。
嵌套了CG语言,代码段中有#pragma vertex name和 #pragma fragment frag声明的,就是顶点着色器&片段着色器

二.贴图、纹理和材质

在这里插入图片描述
大致上的层级关系是:
材质 Material包含贴图 Map,贴图包含纹理 Texture。

三.光照和材质

Material Block 材质块:

主要包含材质如何和灯光产生作用,以下属性就是对于灯光色彩的反应属性:

1、Diffuse (R, G, B, A)/[变量名(一定是颜色变量)]
    表示材质块中漫反射的颜色,也是物体的基础色彩;
2、Specular (R, G, B, A)/[变量名(一定是颜色变量)]
    表示在漫反射的基础上叠加上高光色彩;
3、Shininess Number/[变量(一定是一个float类型的)]
    表示对高光的光泽度的改变,范围在0.0 - 1.0之间,0的时候会出现更大的高光反射,1的时候会获得一个细微的亮斑;
4、Amibent (R, G, B, A)/[变量名(一定是颜色变量)]
    表示环境光色彩的影响;
5、Emission (R, G, B, A)/[变量名(一定是颜色变量)]
    自发光色彩,当不被任何光照照射的时候的一种颜色;
材质块中颜色的影响关系:
    Emission颜色是最高等级的颜色,他可以覆盖掉漫反射颜色,如果没有Emission的存在,漫反射才是主要颜色:

最终色彩的生成公式:

    Amibent Color * Render Setting菜单下的环境光颜色 + (Light Color * Diffuse Color + Light Color * Specular Color) + Emission;

后面还有啥琐碎知识点就在这里进行补充~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值