Real Rendering

图片压缩算法:
Png:无损压缩 ,采用差分编码的过滤方法和高效的无损数据压缩算法。
JPEG:有损压缩,国际标准组织为静态图像所建立的第一个国际数字图像压缩标准.
ETC:采用将图像中的chromatic和luminance分开存储的方式,而在解码时使用luminance对chromatic进行调制进而重现原始图像信息。颜色和亮度分开存储。
ETC2:比etc1更好且支持alpha。


纹理贴图
凹凸贴图Bump mapping:计算光照时,在原始法线的基础上加一个扰动(来自贴图)来修改法向量,产生凹凸不平的感觉。 普通水上用。
移位贴图Displacement Mapping 计算光照前,对顶点进行法线方向的移位偏移(移动量来自贴图)。水上海浪效果用,海浪效果偏移也可来自正弦函数。
法线贴图Normal mapping  计算光照的法向量直接由该贴图代替。标准常用方式。
视差贴图Parallax mapping 计算光照时 以视线方向和贴图参与计算,陡峭的视角给更多的offser,平滑的视角给较少的offset,可以带来更好的细节效果。!!!
浮雕贴图Relief mapping 可以产生更大的凹凸效果,根据光线跟踪原理计算。!!
-----------------------
BRDF数学基础
立体角:球面坐标系中,立体角等于球面对应的区域面积,单位球的立体角是表面积4PI。
辐射通量/光通量:单位时间通过截面的光能
辐射强度/光强度:每单位立体角的辐射通量,也就是单位时间通过单位立体角的光能。
辐射率/光亮度:表面沿某一方向的明亮程度,等于某方向上每单位投影面积和单位立体角的辐射通量,也就是光强度在某方向上的投影。
辐照度/辉度:单位时间内到达单位面积的辐射通量


双向反射分布函数BRDF:定义为出射辐射率的微分和入射辐照度的微分之比。描述了入射光线经过某个表面反射后如何在各个出射方向上分布。
BRDF需要满足能量守恒定律和双向反射(交换入射出射光方向结果相同)原理




BRDF模型分类
经验模型:Lambert漫反射模型 ,Phong模型,Blinn-Phong模型等等
数据模型:根据数据总结的模型,游戏中不适用。
基于物理的模型:Cook-Torrance BRDF模型,Ward BRDF模型!!!!!!!!!!!!!!!!!!!!!!!!!
------------------------
传统延迟渲染优化方法
延迟光照Deferred Lighting
分块延迟渲染 Tile-BasedDeferred Rendering
-----------------------
全局光照GI
光线投射:思路是从每一个像素射出一条射线,然后找到最接近的物体挡住射线的路径,而视平面上每个像素的颜色取决于从可见光表面产生的亮度。


光线追踪:主要思想是从视点向成像平面(nearclip)上的像素发射光线(视点到obj),找到与该光线相交的最近物体的交点,如果该点处的表面是散射面,则计算光源直接照射该点产生的颜色;
如果该点处表面是镜面或折射面,则继续向反射或折射方向跟踪另一条光线,如此递归下去,直到光线逃逸出场景或达到设定的最大递归深度。主要用于计算反射折射效果,比如玻璃会反射和折射周围的物体。性能差。


路径追踪:基本思想是从视点发出一条光线,光线与物体表面相交时根据表面的材质属性继续采样一个方向,发出另一条光线,如此迭代,直到光线打到光源上(或逃逸出场景),然后用蒙特卡洛的方法,计算其贡献,作为像素的颜色值。主要用于计算路径上的其他点对该点的影响值,比如靠近红色区域的物体 表面会出现微红色效果。
双向路径追踪 :同时从视点、光源打出射线,经过若干次反弹后,将视点子路径( eye path) 和光源子路径( light path) 上的顶点连接起来(连接时需要测试可见性),以快速产生很多路径。这种方法能够产生一些传统路径追踪难以采样到的光路,所以能够很有效地降低噪声。简单来说,路径追踪 = 光线追踪+ 蒙特卡洛方法(计算光线的贡献,作为像素的颜色值)。
AO 全局光照的替代效果
------------------------
固定视角的渲染:对于复杂的几何和着色模型,每帧去重新渲染整个场景很可能是昂贵的。通过将复杂几何模型转换为可以在多帧中重复使用的一组简单的buffer来节省大量渲染时间与性能。
比如降低渲染频率隔着渲染或者分多个相机去渲染不同的层次,对于不变层的物体 渲染一次后缓存下来 后帧直接用,然后定时刷新渲染。还有可以用checkboard去隔像素渲染。
------------------------
轮廓线渲染
基于视线方向的轮廓线:视线与法线垂直的点视为轮廓边缘点给予绘制。
基于过程几何方法的描边:分pass 先渲染正面 再渲染背面,渲染背面的时候适当往法线方向扩张。顺序也可以反过来。
基于法线或深度的描边:可以对比相邻像素点的深度值或者法线值得差异来决定是否处于边缘点。可以在后处理做,也可以在渲染阶段做。
基于轮廓边缘检测的描边:用sobel算法检测图像的边缘。


------------
空间数据结构
层次包围盒BVH;是最常使用的一种空间数据结构,核心思想是用体积略大而几何特征简单的包围盒来近似地描述复杂的几何对象,从而只需对包围盒重叠的对象进行进一步的<相交测试>。数中的每一个节点,都有一个包围体可以将其子树中的所有几何体包围起来。也说明了根节点有一个包含整个场景的包围体。
二叉空间分割树BSP:是一种常用于判别对象<可见性>的空间数据结构。二叉树将当前空间划分为前向(front)和背向(back)两个子空间.分别对应当前节点的左子树和右子树。
八叉树:是一种用于描述三维空间的树状数据结构,把一个立方体分割为八个同样大小的小立方体,然后递归地分割出更的小立方体。
场景图:是组织和管理三维虚拟场景的一种数据结构,是一个有向无环图


裁剪技术
背面裁剪(Backface Culling),
视锥裁剪(View  Frustum Culling),
遮挡裁剪((最好CPU)阶段就把被遮挡的物体给剔除掉):
HardwareOcclusion Queries 硬件遮挡查询:GPU
HierarchicalZ-Buffering 层次Z缓冲
OcclusionHorizons 遮挡地平线
OccluderShrinking 遮挡物收缩
FrustumGrowing视锥扩张
Virtualoccluder 虚拟遮挡物算法
ShaftOcclusion Culling 轴遮挡裁剪
TheHOM algorithm 层次遮挡映射算法
RaySpace Occlusion Culling 射线空间遮挡剔除


------------------------------
优化
1.设置一系列测试,其中每个测试减少特定阶段执行的工作量。如果其中一个测试导致每秒帧数增加,则已经找到瓶颈阶段。
2.测试光栅化操作是否是瓶颈的最简单方法是将颜色输出的位深度从32(或24)位减少到16位。如果帧速率大幅度增加,那么此阶段瓶颈。
3.像素着色器程序的是否是瓶颈所在可以通过改变屏幕分辨率来测试。如果较低的屏幕分辨率导致帧速率明显上升,像素着色器则是瓶颈,至少在某些时候会是这样。
4.测试帧缓冲带宽是否是瓶颈所在,比较好的办法是改变颜色缓冲的位深度,或深度缓冲的位深度(也可以同时改变两者)。如果此操作(比如将颜色缓冲或深度缓冲的深度位从32位减少到16位)明显地提高了性能,那么帧缓冲带宽必然是瓶颈所在。
5.比较推荐使用大量正等级mipamap细节层次(LOD)的偏差,让纹理获取访问非常粗糙的mipmap金字塔级别,来有效地减小纹理尺寸。同样,如果此修改显著地改善性能,则意味着纹理带宽是瓶颈限制。
6.如果调整分辨率使得性能改变,片元着色就可能是瓶颈所在
7.对于可编程的顶点变换,只要简单地改变顶点程序的长度,就能确定顶点处理是否是瓶颈。对于固定功能的顶点变换,判定瓶颈则有点麻烦。试着通过改变顶点的工作,例如修改镜面光照或纹理坐标生成的状态来修改负载。
8.某些系统中,默认的内存分配和删除功能可能比较慢,因此,在启动时最好为相同大小的对象分配一个大的内存池,然后使用自己分配或空闲部分来处理该池的内存。尽量尝试去避免在渲染循环中分配或释放内存。
9.条件分支会有一定的开销,Shader中的条件分支开销尤甚。
10.尽可能使用低精度数据,让发送到图形管线的数据量更少。
11.避免过度归一化(Normalization)
12.优化天空盒的渲染。天空盒经常是帧缓冲带宽的瓶颈,因此必须决定如何对其进行优化,以下有两种策略:
(1)最后渲染天空盒,读取深度,但不写入深度,而且允许和一般的深度缓冲一起进行早期early-z优化,以节省带宽。适合大部分的天空盒被遮挡.
(2)首先渲染天空盒,而且禁用所有深度读取和写入。适合天空盒占大部分
13.尽可能使用16为的深度缓冲区.尽可能使用16位的颜色
14.渲染天空球或者类似贴图采样的时候,如果边缘无法避免会产生缝隙,可以采用对原图进行clear操作,使原图默认颜色和渲染的颜色接近。

















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值