Unity3D教程宝典之Shader篇:基础讲 基础知识

转载自风宇冲Unity3D教程学院

以下内容不需要入门的时候立刻阅读和理解,建议逐渐深入学习后,不时回来看看即可。

什么是GPU?

GPU:Graphic Processing Unit,中文翻译为“图形处理器”。显卡包括(GPU,显存,显卡BIOS,显卡PCB板)。

什么是Shader?

Shader程序:GPU执行的,针对3D对象进行操作的程序。

Shader有哪几种?

CG:与DirectX 9.0以上以及OpenGL 完全兼容。运行时或事先编译成GPU汇编代码。

HLSL: 主要用于Direct3D。平台:windows。

GLSL: 主要用于OpenGL。  平台:移动平台(iOS,安卓),mac(only use when you target Mac OS X or OpenGL ES 2.0)

为什么Shader中选择CG?

因为CG/HLSL 比GLSL支持更多的平台。

Unity3d里CG输出什么?

windows平台:Direct3D, GPU汇编代码

mac:OpenGL GPU汇编代码

flash:flash GPU汇编代码

ios/android:unity会将CG转换成GLSL代码。

总结:也就是除了移动平台会把CG转换成GLSL代码,其余平台都是转换成汇编代码。

什么是缓冲?

一个像素有如下缓冲

颜色缓存color buffer/pixel buffer:储存该点即将显示的颜色,RGBA值

深度缓存depth buffer/z buffer:储存该点的深度,z

模板缓存stencil buffer:通常用作限制渲染区域。 更高级用法需结合深度缓冲,例如某像素的模板缓冲值会随着其是否通过深度缓冲测试而改变。

累积缓存Accumulation Buffer: 与颜色缓冲类似,同样储存一个RGBA值。累积缓存是为合成多幅图像而设计的,累积缓存提供了一种在保持好的颜色分辨率下实现在场景中“多重曝光(multiple exposures)”的方法。使用累积缓存可以产生许多图像效果来提高图像的真实性,其中包括:反走样、运动模糊、软阴影、深度域(景深)和卷积。要产生这些效果,必须将图像渲染多次,对场景位置(或所选的物体)进行微小的、渐增的改变,然后累积结果。

什么是图元装配(Primitive Assembly)

经过变换的顶点 被 装配成几何图元

什么是光栅化(又译作栅格化,Rasterization)

栅格化这个术语可以用于任何将矢量图形转换成栅格图像的过程。

在3D渲染中主要是指, 三角形等图元(矢量)转换成像素碎片的过程。或者说决定哪些像素几何图元覆盖的过程。光栅化的结果是像素位置的集合和片段的集合

什么是光栅操作(Raster Operation)

指在碎片fragment处理后,在更新帧缓存前最后执行的一系列操作。通过包括裁剪,深度测试,alpha测试,alpha混合等。

碎片Fragment等于像素吗?

像素点:(屏幕上能显示)的最小图像单元

像素:帧缓存中某个像素点的内容,通常即指颜色。

碎片:更新像素潜在需要的一个状态。

碎片输出的是当前的fragment函数在这个像素点的颜色,并不代表这像素点的最终颜色。最后显示的颜色是这个点的所有碎片经过叠加等运算形成的最终结果。

针对3D对象进行操作、并被GPU所执行的程序

什么是地形着色器(Geometry Shader):

几何着色器可以从多边形网格中增删顶点。它能够执行对CPU来说过于繁重的生成几何结构和增加模型细节的工作。Direct3D版本10增加了支持几何着色器的API, 成为Shader Model 4.0的组成部分。OpenGL只可通过它的一个插件来使用几何着色器,但极有可能在3.1版本中该功能将会归并。几何着色器的输出连接光栅化器的输入。但是并不实用。

什么是Tessellation?

针对DX11. 该技术需要消耗大量硬件资源,因此开发人员不会在场景中的每个地方都使用它,一般只考虑玩家视角近景和轮廓边缘。利用GPU硬件加速,将现有3D模型的三角形拆分得更细小、更细致,也就是大大增加三角形数量,使得渲染对象的表面和边缘更平滑、更精细。

坐标系

计算机3D中,3D坐标系采用的主要是,笛卡儿坐标系(Cartesian坐标系),也称直角坐标系。
当x轴朝右,y朝上,z朝屏幕里的时候,为左手坐标系。
当x轴朝右,y朝上,z朝屏幕外即面朝你的时候,为右手坐标系。
所以,Unity使用的是左手坐标系。
D3D左手 即 裁剪空间里(x,y,z,w) z= z/w   即[0,1]
OpenGL使用右手 ,即 裁剪空间里(x,y,z,w) z= (z/w + 1)/2 即[-1,1]

#pragma target 3.0    :定义Shader模型为Shader Model 3.0,
2.0, Direct3D 9 (默认缺省值)。支持32张贴图 + 64个计算
3.0, Direct3D 9。支持512张贴图 + 512个计算
4.0, 只支持DirectX 11。
5.0, 只支持DirectX 11。

时间: 2024-10-10 07:21:20

Unity3D教程宝典之Shader篇:基础讲 基础知识的相关文章

Unity3D教程宝典之Shader篇:第十六讲自定义光照模型

转载自风宇冲Unity3D教程学院   十四讲我们实现了基本的Surface Shader,十五讲讲了光照模型的基础知识.这一讲说的是如何写光照模型. 自定义光照模型主要分为4步: (0)架设框架,填写需要的参数 (1)计算漫反射强度 (2)计算镜面反射强度 (3)结合漫反射光与镜面反射光 代码配有中文注释,配合上上讲的光照公式,一步一步实现即可. //Author: 风宇冲 Shader "Custom/T_customLightModel" { Properties { _Main

Unity3D教程宝典之Shader篇:第十二讲 Alpha测试

转载自风宇冲Unity3D教程学院 引言:本讲和下一讲主要讲Alpha即透明通道有关的内容.RGBA,其中最终在屏幕上显示的只有RGB即 红绿蓝组成的颜色,Alpha并没有任何颜色显示.A只是辅助颜色运算特别是多图层运算而已.例如在单图层的情况下(1,1,1,0.8)输出的是(1,1,1)*0.8即 浅灰色(0.8,0.8,0.8),和(0.8,0.8,0.8)是等价的.但是假如不再是单图层而背景为绿色(0,1,0,1)的时候,(0.8,0.8,0.8)就不知道怎么去运算了,而(1,1,1,0.

Unity3D教程宝典之Shader篇:第十四讲Surface Shader

转载自风宇冲Unity3D教程学院 用Shader来实现光照是比较复杂的,有不同的光类型,不同的阴影选项,不同的Render Path(forward和Deferred). Unity只是把光照模型封装处理了,Shader的代码还是用CG/HLSL编写的. 例一:最简单的Surface Shader Shader "Custom/T_3_0" { Properties { _MainTex ("Base (RGB)", 2D) = "white"

Unity3D教程宝典之Shader篇:第二十讲法线贴图

转载自风宇冲Unity3D教程学院 上一讲我们讲了凹凸贴图以及生成法线贴图. 这一讲来谈谈怎么使用法线贴图. 一:法线贴图的原理 二:法线贴图的实现 三:法线贴图的使用 四:法线贴图的格式 一:法线贴图的原理 光照效果很大程度上是由垂直于物体表面的法线决定的,因为法线影响反射光的方向.均匀垂直的法线是镜面贴图.但是有时候我们会给一个平面使用砖墙贴图,砖墙应该是凹凸不平的,而如果让砖墙使用该平面的法线的话,画面就会很假,神马?一面墙像镜子一样反光=.= 而如果按真实砖墙去做模型的话,即做高精度模型

Unity3D教程宝典之Shader篇:第二十一讲视差贴图

转载自风宇冲Unity3D教程学院 视差贴图的展示 图一:注意轮胎印中的自阴影,实际上路面只是一个平地 图二:孤岛危机的成功,视差贴图功不可没 图三:视差贴图同样可用于人物,装备及道具 本讲分四个部分一:优点特性 二:基本原理 三:使用方法 四:视差计算 第一部分 视差贴图的优点及特性 上一讲讲了法线贴图.法线贴图,无论是RGB法线贴图还是DXT5nm,都有一个缺点就是.越接近面的水平视角,则画面越不真实.因为使用法线贴图后,凸起的部分只是看起来凸起而已,网格模型却并没有凸起依然是平的.正常来说

Unity3D教程宝典之Shader篇:第四讲制作一个美丽的地球

原创文章如需转载请注明:转载自风宇冲Unity3D教程学院 Vertex and Fragment Shader例子二,制作一个自动旋转的3D地球. 下载美丽的地球工程 原理是 2张贴图,一张地球图,一张云层分布图(1)通过uv.x即纹理坐标的横轴与时间相乘,产生球在移动的效果 (2)通过地球和云的颜色值叠加形成 层叠 的效果.注意:贴图的'Wrap Mode'属性一定要设置成Repeat                              关于Wrap Mode当Wrap Mode为Cl

Unity3D教程宝典之Shader篇:第二讲Fixed Function Shader

原创文章如需转载请注明:转载自风宇冲Unity3D教程学院 Fixed function shader简介:  属于固定渲染管线 Shader, 基本用于高级Shader在老显卡无法显示时的情况.使用的是ShaderLab语言,语法与微软的FX files 或者NVIDIA的 CgFX类似. 例一:显示单一颜色下面我们来看第一个例子,显示单一颜色,注释写得挺详细了,照着格式写即可. //根Shader Shader "Custom/1_1color" { // 属性 Propertie

Unity3D教程宝典之Shader篇:特别讲 CG函数

转载自风宇冲Unity3D教程学院 特别讲:CG函数 本讲不需立刻看完,遇到相关函数时来查阅即可.(本文截图来源:Cg教程_可编程实时图形权威指南) E.1  数学函数 E.2 几何函数 E.3 纹理贴图函数 E.4 导数函数 E.5 调试函数 E.1  数学函数 E.2 几何函数 E.3 纹理贴图函数 E.4 导数函数 E.5 调试函数

Unity3D教程宝典之Shader篇:第十讲 雾化

转载自风宇冲Unity3D教程学院 Fog,即雾化.本质是离屏幕越远的物体,就越趋向于某种颜色.通常是远处,即离屏幕远的地方,趋向于白色或者浅灰色. 全局雾化: 在Edit->RenderSettings里设置,具体如下 Fog: 激活或不激活Fog Color:雾的颜色,仅RGB起作用. Fog Mode: Linear线性,Exp指数,Exp2 指数2 Fog Density:雾化的强度 Linear Fog Start:开始距离 Linear Fog End:结束距离 部分雾化: 三种Sh