[UnityShader基础]基本概念
来源:互联网 发布:手机免root数据恢复apk 编辑:程序博客网 时间:2024/06/08 02:20
本文片段摘自:猫都能学会的Unity3D Shader入门指南,请点击链接查看原文,尊重楼主版权。
一些基本概念
Shader和Material
如果是进行3D游戏开发的话,想必您对着两个词不会陌生。Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)。之后,我们便可以将材质赋予合适的renderer(渲染器)来进行渲染(输出)了。
所以说Shader并没有什么特别神奇的,它只是一段规定好输入(颜色,贴图等)和输出(渲染器能够读懂的点和颜色的对应关系)的程序。而Shader开发者要做的就是根据输入,进行计算变换,产生输出而已。
Shader大体上可以分为两类,简单来说
- 表面着色器(Surface Shader) - 为你做了大部分的工作,只需要简单的技巧即可实现很多不错的效果。类比卡片机,上手以后不太需要很多努力就能拍出不错的效果。
- 片段着色器(Fragment Shader) - 可以做的事情更多,但是也比较难写。使用片段着色器的主要目的是可以在比较低的层级上进行更复杂(或者针对目标设备更高效)的开发。
因为是入门文章,所以之后的介绍将主要集中在表面着色器上。
Shader程序的基本结构
因为着色器代码可以说专用性非常强,因此人为地规定了它的基本结构。一个普通的着色器的结构应该是这样的:
首先是一些属性定义,用来指定这段代码将有哪些输入。接下来是一个或者多个的子着色器,在实际运行中,哪一个子着色器被使用是由运行的平台所决定的。子着色器是代码的主体,每一个子着色器中包含一个或者多个的Pass。在计算着色时,平台先选择最优先可以使用的着色器,然后依次运行其中的Pass,然后得到输出的结果。最后指定一个回滚,用来处理所有Subshader都不能运行的情况(比如目标设备实在太老,所有Subshader中都有其不支持的特性)。
需要提前说明的是,在实际进行表面着色器的开发时,我们将直接在Subshader这个层次上写代码,系统将把我们的代码编译成若干个合适的Pass。废话到此为止,下面让我们真正实际进入Shader的世界吧。
2.Properties属性
3.Tags标签
4.LOD
5.Shader本体
- [UnityShader基础]基本概念
- UnityShader基础
- 【Unity Shader】UnityShader基础
- UnityShader基础整理
- [UnityShader基础]Properties属性
- [UnityShader基础]Tags标签
- [UnityShader基础]LOD
- [UnityShader基础]坐标系
- [UnityShader基础]简单Shader本体
- UnityShader
- [UnityShader]固定管线着色器基础
- UnityShader - 基础 - Normal Map 法线贴图
- [UnityShader基础]GPU 与 Shader Model
- [UnityShader基础]Shader土地上的语言们
- 线程基本概念(基础)
- 数据库数据基础--基本概念
- Java基础—基本概念
- JSP基础中的基本概念
- synchronized的锁对象的特点
- 队列
- 求 n!
- js实现rem布局
- 微信小程序的if标签和for循环
- [UnityShader基础]基本概念
- Generics
- Mysql总结3-mysql常用函数
- 微信小程序事件
- JAVA 面试重点知识总结
- 198. House Robber
- 设计模式之工厂模式(个人理解)
- JS实现input上传图片时显示缩略图
- Eric6与pyqt5学习笔记 3【水平/垂直,网格,窗体四大类布局】