文章

UnityShade入门精要(15·其他知识回顾)

其他知识回顾

渲染流水线

图形学使用比如openGL和写普通业务逻辑最大的不同在于,它在一个相对较高的抽象层次上操作——渲染流水线(而unity引擎又对渲染流水线做了更高的封装,让程序员只关心shader部分)

渲染流水线的任务在于根据抽象的3维场景生成一张2维图像,这个工作通常是由CPU和GPU共同完成的

Real-Time Rendering一书中将一个流水线分成3个阶段:应用阶段(Application Stage)、 几何阶段(Geometry Stage)、 光栅化阶段(Rasterizer Stage),其中应用阶段属于CPU工作阶段

1735371562521

在CPU阶段结束,要与GPU通讯:

1735371636390

GPU流水线包括几何阶段和光栅化阶段,它们可以再次细分:

1735371607778

什么是图形API

它运行在CPU上,通过它提供的接口可以很容易的和底层硬件GPU的沟通(不需要和各种寄存器、显存打交道)

什么是shader

着色语言是专门用于编写着色器的,shader是渲染流水线的可编程阶段,使得我们可以控制渲染的真正效果

……略

数学知识

……略

unity shader 基础

……略

全局光照

光栅化渲染全局光照非常困难,简单的方式是用光线追踪模拟,但是光线追踪的渲染速度非常慢,往往需要大揖时间才能得到一帧,因此光线追踪不能满足实时的要求

游戏引擎利用了,预计算的光照纹理,实现实时全局光照,但这种方式是静态的(光照和物体的位置都不能改变),预计算方法来把这些关系提前计算出来,是和摄像机无关的

但是高光反射和摄像机有关,Unity 的解决方案是使用反射探针,根据摄像机临近的探针,获取全局光照,保证了高光位置正确

伽马校正

要想渲染出更符合真实光照环境的场景就需要使用线性空间,默认的空间是伽马空间(校正空间)(非线性空间),需要把伽马空间转换到线性空间,就需要进行伽马校正

人眼对这种亮度变化的感知性是非线性的,对较暗区域的变化更加敏感,通过摄影设备(手动编码)或者CRT(自动)显示器,可以做到约伽马值为2.2次幂的非线性映射,符合人眼的视觉, sRGB颜色空间标准

HDR

High Dynamic即高动态范围,动态范围指的就是最高的和最低的亮度值之间的比值,

通常在显示设备使用的颜色缓冲中每个通道的精度为 8位, 意味着我们只能用这256种不同的亮度来表示真实世界中所有的亮度,但是在映射到这个过程中一定会存在一定的精度损失(clamp限制)

HDR使用远远高于 8位的精度(如 32位)来记录亮度信息,使得我们可以表示超过o~1 内的亮度值,从而可以更加精确地反映真实的光照环境,让亮的物体可以真地非常亮,暗的物体可以真地非常暗,

使用 HDR来存储的图像被称为高动态范围图像 (HORI),尽管最后我们仍然需要把它们转换到LDR进行显示,但我们可以使用色调映射 (tonemapping) 技术来控制这个转换的过程,从而允许我们最大限度地保留需要的亮度细节

————————————-Unity Shader入门精要 完结——————————————–

本文由作者按照 CC BY 4.0 进行授权
本页总访问量