本文由@唐三十胖子出品,转载请注明出处。
文章链接:https://blog.csdn.net/iceSony/article/details/84259046
这篇文章将总结和提炼《Unity Shader入门精要》的第三章“ShaderLab基础”的内容。
通过这篇文章,你可以知道
1)SurfaceShader表面着色器介绍
2)Vertex/Fragment Shader顶点/片元着色器介绍
3)Fixed Function Shader固定功能着色器介绍
4)三种着色器对比&使用场景优劣对比
一.表面着色器Surface Shader:平庸的嫡长子
Unity自创,本质还是顶点/片元着色器
优点:代码少 缺点:渲染代价大
定义在CGPROGRAM和ENDCG之间
是什么我们不管我们只需要知道卸载SubShader上和Pass同层级就行
二.顶点/片元着色器Vertex/Fragment Shader:能力出众的二皇子
CG/HLSL语言
优点:灵活 缺点:看起来复杂
和表面着色器比,同样写在CGPROGRAM-ENDCG中
但是处在Pass内
三.固定函数着色器Fixed Function Shader:废弃的太子
本来由于设备性能关系
只需要简单的渲染效果
优点:最简单的书写 缺点:最简单的渲染效果
四.着色器使用场景介绍&优劣对比
想和很多光打交道 点光源 平行光等等使用嫡长子
光照不多,如仅有平行光(事实上手游中很多没有光照),使用二皇子
事实上很多炫酷的渲染效果都是使用Vertex/Fragment Shader
不需要性能表现,用废弃的太子
接下来我们当然是侧重学习顶点/片元着色器
五.Unity中的Shader优劣
传统shader开发,每个着色器是一个文件,而在u3d中,一个shader中包含多种着色器
传统的shader中无法进行RenderSetup;传统shader代码复杂,比如获取模型信息,U3d中直接通过属性获取
相信你也能看出缺点
曲面细分,几何着色器我们没有介绍;为什么?因为u3d没怎么支持
U3d在DirectX 11平台提供支持,而在OPENGL下没有
另外一些Shader高级语法Unity也没有支持
事实上你也可以通过GLSL 开发写在GLSLPROGRAM-ENDGLSL中
但是问题就是这样子你的shader只能是Mac 或者Linux,不可以在微软大家族中使用
本篇不涉及:)