【Unity Shader 】基本结构

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容