UnityShader

【Unity Shader 】基本结构

2019-07-26  本文已影响0人  小王子称号发放NPC

1、ShaderLab

目前面向GPU的编程有三种高级图像语言:HLSL语言,GLSL语言,Cg语言。

HLSL语言:High Level Shading Language,由Microsoft公司提供,通过Direct3D图形软件库来编写的着色器语言。
GLSL语言:OpenGL Shading Language,由OpenGL安委会提供,在OpenGL中进行着色器编程的语言。
Cg语言:C for Graphics,由NVIDIA公司和Microsoft公司合作提供,有自己的一套关键字和函数库,独立于三维编程接口,在Direct3D和OpenGL上都可工作。
ShaderLab: Unity 自己又封装了一层CG/HLSL/GLSL的接口,但为了实现跨平台,Unity重点支持Cg着色器语言。所以我们使用的是ShaderLab

2、渲染流程

见【Unity Shader入门精要】概念基础

3、Shader的基本结构

看一下基本的Shader程序结构

Shader "Unlit_Tutorial_Shader"{ 
    Properties{             //这个是告诉暴露给editor的属性,可以再编辑器中编辑
        _Color("Total Color",Color) = (1,1,1,1)  //告诉编辑器我有一个属性为Color的数据需要编辑
    }

    SubShader{  //每一个Shader都至少有一个SubShader
        Pass{ //每个SubShader至少有一个Pass
            CGPROGRAM
            #pragma vertex vertexFunction   //相当于声明顶点着色器的函数入口
            #pragma fragment fragmentFunction //相当于申明片元着色器的函数入口
            #include "UnityCG.cginc"  //有一些常用函数和常量在这个文件中

            struct a2v { //顶点数据结构
                float4 vertex:POSITION;  //顶点位置,应该是在模型坐标系下的
                float2 uv:TEXCOORD0;//第一套纹理坐标
                float3 normal:NORMAL;//顶点法线,应该也是在模型坐标系下的
            };
            struct v2f { //传入片元的数据结构
                float4 position:SV_POSITION;//裁剪坐标系下的顶点坐标
                float2 uv:TEXCOORD0;//第一套纹理UV坐标
            };
            
            float4 _Color;  //在Properties声明的_Color,可以再编辑器中修改

            v2f vertexFunction(a2v inValue) {//顶点着色器函数入口,要与声明的一致
                v2f o; 

                return o;
            }
                  //输出值将会存储到渲染目标(render target)中
            fixed4 fragmentFunction(v2f inValue) :SV_TARGET{ //片元着色器函数入口,要与声明一致
                return  _Color;
            }

            ENDCG
        }
    }
}

3、Properties支持类型

image.png

4、SubShader

上一篇 下一篇

猜你喜欢

热点阅读