Shader学习笔录--Unity3D教程宝典之Shader篇:第一讲Shader总篇
来源:互联网 发布:淘宝中差评沟通技巧 编辑:程序博客网 时间:2024/04/29 23:09
Unity3D教程宝典之Shader篇:第一讲Shader总篇
引言:在Unity3D里,所有的图形绘制都必须通过Shader,即着色器,一般的使用过程中,我们用到的都是Unity自带的Shader,即bunld-in shader,学习Shader后,自己写的Shader能够做出很多你想要的特殊效果,增强游戏的画面表现,例如水的倒影,LOGO的光影闪过等等
Shader的分类
Shader按管线分类一般分为固定渲染管线与可编程渲染管线
1)固定渲染管线--这是标准的几何&光照(Tranforming&Lighting)管线,功能是固定的,它控制着世界,视,投影变换及固定光照控制和纹理混合。T&L管线可以被渲染状态控制,矩阵,光照和采制参数。功能比较有限,基本所有的显卡都能正常运行
2)可编程渲染管线--对渲染管线中的顶点运算和像素运算分别进行编程处理,而无须像固定渲染管线那样套用一些固定函数,取代设置参数来控制管线
Unity3D的三种Shader
Unity的Shader分为三种:
(1)Fixed function shader 属于固定渲染管线 Shader,基本用于高级Shader在老显卡无法显示的Pallback。使用的是ShaderLab语言,语法与微软的FX files或者NVIDIA的CgFX类似
(2)Vertex and Fragment Shader最强大的Shader类型,属于可编程渲染管线,使用的是CG/HLSL语法
(3)Surface Shader Unity3d推崇的Shader类型,使用Unity预制的光照模型来进行光照运算,使用的也是CG/HLSL语法
Unity3D三种Shader对比
三种Shader共同点:
(1)都必须从位移一个跟Shader开始
(2)Properties参数部分,作用及语法完全相同
(3)具体功能都在SubShader里(Subshader:子Shader,Shader会自上而下运行第一个硬件能支持的Subshader,主要作用是对不用硬件的支持)
(4)都可以打标签,例如Tags{“RenderType”=”Opaque”} LOD 200 以及Lighting On等
(5)都可以FallBack
(6)都可以处理基本的功能,例如光照漫反射(Diffuse)以及镜面反射(Specular),但是Vertex and Fragment和Surface都能实现Fixedfunction实现不了的高级功能,例如基于uv计算的效果等等。
三种Shader不同点:
(1) Fixed function shader以及Vertex and Fragment Shader 在subshader 下面还有pass{},但是Surface Shader,由于已经将具体内容打包在光照模型了,不能加Pass{},加了会报错
(2) Fixed function shader每一句代码之后都没有分号”;” 但是V&F shader以及Surface Shader每句代码之后都必须加分号”;”
(3) 核心结构不同:
Fixed function shader的核心是
Meterial{}以及SetTexture[_MainTexc]{}
Vertex and Fragment Shader的核心是
1.CGPROGRAM
2.#pragma vertex vert
3.#pragma fragment frag
4.#include “UnityCG.cginc”
5.ENDCG
Surface Shader的核心
(1)这套用的是Unity自带光照模型Lambert,也不做顶点处理,那么只需要一个表面处理函数surf即可
CGPROGRAM
#pragma surface surf Lambert
ENDCG
(2)这套标识使用的是自己写的光照模型lsyLightModel,并且使用了顶点处理函数vert
CGPROGRAM
//surface表面处理函数 光照模型函数 顶点处理函数
#pragma surface surf lsyLightModel vertex:vert
//执行顺序 顶点处理函数 ->表面处理函数->光照模型函数->颜色值
ENDCG
文章载自风宇冲 风宇冲Unity3D教程学院
- Shader学习笔录--Unity3D教程宝典之Shader篇:第一讲Shader总篇
- Shader学习笔录--Unity3D教程宝典之Shader篇 基本知识
- Unity3D教程之Shader篇:第一讲Shader总篇
- 【风宇冲】Unity3D教程宝典之Shader篇:第一讲Shader总篇
- Shader学习笔录--Unity3D教程宝典之Shader篇 CG函数
- 【风宇冲】Unity3D教程宝典之Shader篇:基础讲 基础知识
- 【风宇冲】Unity3D教程宝典之Shader篇:第六讲TexGen
- 【风宇冲】Unity3D教程宝典之Shader篇:第七讲流程图
- 【风宇冲】Unity3D教程宝典之Shader篇:第十讲 雾化
- 【Unity3D教程宝典之Shader篇:基础讲学习方法技巧 】
- Unity3D教程宝典之Shader篇:特别讲 CG函数
- 【风宇冲】Unity3D教程宝典之Shader篇:基础讲 基础知识
- 第一讲Shader总篇
- 【风宇冲】Unity3D教程宝典之Shader篇:第十四讲Surface Shader
- Unity3D教程宝典之Shader篇 基本知识
- 【风宇冲】Unity3D教程宝典之Shader篇:基础讲学习方法技巧
- 【风宇冲】Unity3D教程宝典之Shader篇:特别讲 常见问题解答
- 【风宇冲】Unity3D教程宝典之Shader篇:特别讲 CG函数
- SAP库存管理之ABC分类法
- 什么是低耦合和高聚合?封装原则又是什么意思?
- js 文本输入判断 及 正则表达式判断 总结
- Java并发概念汇总
- weka数据准备
- Shader学习笔录--Unity3D教程宝典之Shader篇:第一讲Shader总篇
- 【深入了解cocos2d-x 3.x】定时器(scheduler)的使用和原理探究(1)
- 音频均衡器Equalizer算法研究与实现
- Algorithms—13.Roman to Integer
- JMeter报错the target server failed to respond--JMeter的坑
- 深入理解Java虚拟机到底是什么
- 黑马程序员——java基础——异常笔记
- poj 2479 Maximum sum
- android - lint 常见错误