Unity3D Shader 学习笔记(一):初识Shader
第一节:图形处理器简史
GPU发展简史
GPU英文全称Graphic Procssing Unit。
T&L变换和光照流水线
可编程GPU
GPU的优点和缺点
第二节:Unity Shader
Shader和渲染管线
什么是shader
中文翻译是着色器,是一种较为短小的程序片段,用于告诉图形硬件如何计算和输出图像,过去由汇编语言来编写,现在也可以使用高级语言来编写。一句话概括:shader是可编辑图形管线的算法片段。
它主要分为两类,vertexshader和fragmentshader;
什么是渲染管线
渲染管线也称为渲染流水线,是显示芯片内部处理信号相互独立的并行处理单元。一个流水线是一序列可以并行和按照固定顺序进行的阶段。就像一个在同一时间内,不同阶段不同汽车一起制造的装配线,传统的图形硬件流水线以流水的方式处理大量的顶点、几何图元和片段。

Gpu前段模块到 →图元装配阶段
:在过去是硬件决定的,不能也不可能对其进行编程。
现阶段加入了顶点着色器就是可编程渲染管线的加入带来的好处,用户可以对输入进行控制。(片段着色器同理)

帧缓冲:framebuffer
计算机一次现实需要的数据;(深度,颜色)

图片详解!!
vertexshader:
顶点处理的阶段,也是顶点shader的工作范围
Transform:针对顶点空间集合变换。
,texgen:纹理坐标→uv
,lighting:光照
T&L:变换光照流水线。可编程shader出来之前之前是被集成的
当图形硬件有可编程能力后,固定编写的模块(T&L)就被vertexshader取代了
、、、、、、、、、、、、、、、、、、、、、、、、、
CulingDepthTest:裁剪和深度测试。
裁剪:为了减少GPU的工作量
深度测试:锥形视距的剔除。
、、、、、、、、、、、、、、、、、、、、、、、、、、、
TexturingFog:纹理采样和物化处理
光栅化处理的阶段,也是片段shader的工作范围
纹理采样:光栅化阶段判别屏幕上应该显示什么颜色,要进行采样,从纹理当中找到某一个点,绘制色彩。
雾化处理:近处清晰,远处雾化。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
AlphaTest
测试alpha,绘制半透明或者全透明的物体。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
Blending
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
混合最终图像。
在unity优化当中,重要的一点就是减少drawcall的调用。
Drawcall:图形数据通过api调用gpu的过程。(包括收集和传递图形数据)
Shader和材质贴图之间的关系
shader 实际上就是一小段程序,它负责将输入的顶点数据以指定的方式和输入的贴图或者颜色等组合起来,然后输出。绘图单元可以根据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的shader,以及对shader的特定的参数设置,将这些内容(shader以及输入参数)打包储存在一起,得到的就是一个matiarial(材质)之后我们便可以将材质赋予三维物体进行渲染输出了。
材质好比引擎最终使用的商品,shader好比生产这种商品的加工方法,贴图就是原材料。
第三节:三大主流高级编程语言
Shader language 的发展方向是设计出在便携性方面可以和c++和\java相比的高级语言,“赋予程序员灵活而方便的编程方式”,并“尽可能的控制渲染过程”同时“利用图形硬件的并行性,提高算法的效率”
HLSL:基于DrectX的High Level shding language
GLSL:基于OpenGL的OpenGL shading Language
CG:NVIDIA的C for Graphic
Shader的高级语言
Unity3D Shader 学习笔记(一):初识Shader的更多相关文章
- Shader学习笔记
Shader学习笔记 例子: Shader "SrfShader1"{ //定义显示在Inspector中的变量,并从Inspector中获取值 Properties{ _Colo ...
- 【HLSL学习笔记】WPF Shader Effect Library算法解读之[DirectionalBlur]
原文:[HLSL学习笔记]WPF Shader Effect Library算法解读之[DirectionalBlur] 方位模糊是一个按照指定角度循环位移并叠加纹理,最后平均颜色值并输出的一种特效. ...
- 【HLSL学习笔记】WPF Shader Effect Library算法解读之[Embossed]
原文:[HLSL学习笔记]WPF Shader Effect Library算法解读之[Embossed] Embossed(浮雕效果) 浮雕效果主要有两个参数:Amount和Wid ...
- 【HLSL学习笔记】WPF Shader Effect Library算法解读之[BandedSwirl]
原文:[HLSL学习笔记]WPF Shader Effect Library算法解读之[BandedSwirl] 因工作原因,需要在Silverlight中使用Pixel Shader技术,这对于我来 ...
- Storm学习笔记 - Storm初识
Storm学习笔记 - Storm初识 1. Strom是什么? Storm是一个开源免费的分布式计算框架,可以实时处理大量的数据流. 2. Storm的特点 高性能,低延迟. 分布式:可解决数据量大 ...
- LevelDB学习笔记 (1):初识LevelDB
LevelDB学习笔记 (1):初识LevelDB 1. 写在前面 1.1 什么是levelDB LevelDB就是一个由Google开源的高效的单机Key/Value存储系统,该存储系统提供了Key ...
- Unity3D学习笔记3——Unity Shader的初步使用
目录 1. 概述 2. 详论 2.1. 创建材质 2.2. 着色器 2.2.1. 名称 2.2.2. 属性 2.2.3. SubShader 2.2.3.1. 标签(Tags) 2.2.3.2. 渲染 ...
- Unity Shader学习笔记-1
本篇文章是对Unity Shader入门精要的学习笔记,插图大部分来自冯乐乐女神的github 如果有什么说的不正确的请批评指正 目录 渲染流水线 流程图 Shader作用 屏幕映射 三角形遍历 两大 ...
- Unity Shader 学习笔记(一)
_MainTex_ST (1)简单来说,TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw)主要作用是拿顶点的uv去和材质球的t ...
随机推荐
- 安全之路 —— 利用SVCHost.exe系统服务实现后门自启动
简介 在Windows系统中有一个系统服务控制器,叫做SVCHost.exe,它可以用来管理系统的多组服务.它与普通的服务控制不同的是它采用dll导出的ServiceMain主函数实现服务运行,详细原 ...
- Linux搭建kafka
一.安装Java 1.查看linux 的系统版本 root@aliyun:~# uname --m x86_64 2.安装java mkdir -p /usr/local/java tar -xf j ...
- MySQL并发相关的参数
1.max_connections 这个参数可提高并发连接数,即允许连接到MySQL数据库的最大数量. 如果实验MySQL过程中遇到too many connections等问题,可提高这个值,此外我 ...
- SQL一字段内的字符串按照特定字符串转化为多行显示
有如下数据表 需求就是将Col1,Col2按照特定的字符串分割成多行 一.利用XML解析方式 先将该字段值统一替换为逗号分割,再将逗号分割替换转为XML数据类型,再利用xml转为多个行 declare ...
- [工具]StarUML
前些日子整理文档,需要补充程序结构流程图,一直没有想到怎么样能够清晰直观描述清楚现在的解决方法,直到我知道了 UML 语言.最早对于 UML 的了解也只是停留在一本书上,他们开发使用 UML 分解任务 ...
- 在HTML中使用object和embed标签插入视频
object标签和embed标签都能给页面添加多媒体内容: 一.object 对于object,w3c上定义object为一个嵌入的对象.可以使用此元素向您的 XHTML 页面添加多媒体.此元素允许您 ...
- BZOJ4766:文艺计算姬(矩阵树定理)
Description "奋战三星期,造台计算机".小W响应号召,花了三星期造了台文艺计算姬.文艺计算姬比普通计算机有更多的艺术细胞. 普通计算机能计算一个带标号完全图的生成树个数 ...
- lua连接redis集群
连接redis集群需要用到llua-resty-redis-cluster模块 github地址:https://github.com/cuiweixie/lua-resty-redis-cluste ...
- 二,ESP8266 GPIO和SPI和定时器和串口(基于Lua脚本语言)
https://www.cnblogs.com/yangfengwu/p/7514336.html 我们写lua用这个软件 如果点击的时候提示安装,,安装就行,,如果没有提示呢可以,按照下面链接的提示 ...
- Xcode添加全局引用文件pch
Xcode6之前有PrefixHeader.pch文件在写项目的时候,大部分宏定义.头文件都导入在这个pch文件,虽然方便,但会增加Build的时间,所以Xcode6以及之后的版本去除了PrefixH ...