Unity Shader 入门精要(02) -- shader的编码基础

一、一个简单的顶点/片元着色器

Shader "Custom/Chapter 5/Simple Shader" {

    Properties {
        //属性
    }

    SubShader{
        Pass{

            //1.设置渲染状态和标签

            //2.开始CG代码片段
            CGPROGRAM

            //3.该代码片段的编译指令
            #pragma vertex vert   //顶点着色器
            #pragma fragment frag //片元着色器

            //4.cg代码
            float4 vert(float4 v:POSITION): SV_POSITION{
                return UnityObjectToClipPos (v);//把顶点坐标从模型空间转换到剪裁空间
            }

            float4 frag() : SV_Target{ //颜色值
                return fixed4(1, 1, 0.5f, 1);
            }

            ENDCG

            //5.其他设置

            //6.其他需要的pass
        }
    }

    SubShader{
        //针对不同显卡有不同的方案
    }

    //上述SubShader都失败后,用于回调的Unity Shader
    FallBack "Diffuse"
}

二、Unity Shader的分类

使用的是ShaderLab编写Unity中的Shader
1,表面着色器 Surface Shader
2,顶点/片元着色器 Vertex/Fragment Shader
3,固定函数着色器 Fixed Function Shader

三、Unityshader中属性的类型有哪些

_Color("Color",Color)=(1,1,1,1)
_Vector("Vector",Vector)=(1,2,3,4)
_Int("Int",Int)= 34234
_Float("Float",Float) = 4.5
_Range("Range",Range(1,11))=6
_2D("Texture",2D) = "red"{}
_Cube("Cube",Cube) = "white"{}
_3D("Texure",3D) = "black"{}

四、Unity支持的语义

  1. 从应用程序传递到顶点函数的语义有哪些a2v
    POSITION 顶点坐标(模型空间下的)
    NORMAL 法线( 模型空间下)
    TANGENT 切线(模型空间)
    TEXCOORD0 ~n 纹理坐标
    COLOR 顶点颜色

  2. 从顶点函数传递给片元函数的时候可以使用的语义
    SV_POSITION 剪裁空间中的顶点坐标(一般是系统直接使用)
    COLOR0 可以传递一组值 4个
    COLOR1 可以传递一组值 4个
    TEXCOORD0~7 传递纹理坐标

  3. 片元函数传递给系统
    SV_Target 颜色值,显示到屏幕上的颜色

猜你喜欢

转载自blog.csdn.net/zwg739424406/article/details/81870865