常见两种Shader讲解

来源:互联网 发布:淘宝客服账号实名认证 编辑:程序博客网 时间:2024/06/17 15:59

说明:

Unity的Shader分为三类:

  • Fixed function shader——属于固定渲染管线Shader, 基本用于高级Shader在老显卡无法显示时的Fallback。
  • Vertex and Fragment Shader——属于Unity常见Shder之一,可编程渲染管线.。
  • Surface Shade——属于Unity常见Shader之一,使用Unity预制的光照模型来进行光照运算。
主要说明一下Vertex and Fragment Shader与Surface Shade的一些常见性质,对总搞不清这两种常见可编程Shader的童鞋们科普一下。

Vertex and Fragment Shader与Surface Shade的共同点:

  • 必须从唯一一个根Shader开始
  • 可以设置Properties参数部分,作用及语法完全相同
  • 具体功能都在SubShader里(Subshader: 子Shader,Shader会自上而下运行第一个硬件能支持的Subshader,主要作用是对不用硬件的支持。)
  • 都可以打标签,例如Tags { "RenderType" = "Opaque" }    LOD100 等
  • 都可以设置Fallback,如“Fallback "Legacy Shaders/Transparent/VertexLit"”
  • 都可以处理基本的功能,例如光照漫反射(Diffuse)以及镜面反射(Specular)。

Vertex and Fragment Shader与Surface Shade的差异:

  • Vertex and Fragment Shader在subshader下面还有pass{}
  • Surface Shader,由于已经将具体内容打包在光照模型了,不能加pass{},加了会报错。
  • Vertex and Fragment Shader的核心是:
  • CGPROGRAM#pragma vertex vert#pragma fragment frag          #include "UnityCG.cginc"ENDCG
  • Surface Shader的核心:
  • <pre name="code" class="html">CGPROGRAM#pragma surface surf LambertENDCG
  • Surface Shader是Unity3d自带光照模型Lambert,也不做顶点处理,那么只需要一个表面处理函数surf即可

Surface Shade标准的输出结构的三种:

SurfaceOutput


struct SurfaceOutput {    <span style="white-space:pre"></span>fixed3 Albedo;  // 漫反射颜色   <span style="white-space:pre"></span>fixed3 Normal;  // 切线空间法线,如果赋值的话   <span style="white-space:pre"></span>fixed3 Emission;    <span style="white-space:pre"></span>half Specular;  // 高光强度,范围是0-1    <span style="white-space:pre"></span>fixed Gloss;    // specular intensity    <span style="white-space:pre"></span>fixed Alpha;    // 透明度};

SurfaceOutputStandard

struct SurfaceOutputStandard{fixed3 Albedo;  // 基础 (漫反射或镜面反射) 颜色fixed3 Normal;  // 切线空间法线,如果赋值的话half3 Emission;half Metallic;  // 0=非金属, 1=金属half Smoothness;// 0=粗糙, 1=光滑half Occlusion; // 遮挡(默认1)fixed Alpha;// 透明度};

SurfaceOutputStandardSpecular

struct SurfaceOutputStandardSpecular{fixed3 Albedo;  // 漫反射颜色fixed3 Specular;// 镜面反射颜色fixed3 Normal;  // 切线空间法线,如果赋值的话half3 Emission;half Smoothness;// 0=粗糙, 1=光滑half Occlusion; // 遮挡(默认1)fixed Alpha;// 透明度};



0 0
原创粉丝点击