| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> TA入门笔记(二十二) -> 正文阅读 |
|
[数据结构与算法]TA入门笔记(二十二) |
图形4.2 SSAO算法SSAO介绍AO(环境光遮蔽)环境光遮蔽,全程Ambient Occlusion,是计算机图形学中的一种着色和渲染技术,模拟光线达到物体的能力的粗略的全局方法,描述光线到达物体表面的能力,消耗很高 AO的计算公式如下: A O ( p , n p ) = 1 π ∫ Ω V ( p , ω ) m a x ( n p ? ω , 0 ) d ω AO(p,n_p)=\frac{1}{\pi}\int_\Omega V(p,\omega)max(n_p*\omega,0) d\omega AO(p,np?)=π1?∫Ω?V(p,ω)max(np??ω,0)dω n p n_p np?代表点 p p p的法线, ω \omega ω代表点 p p p切平面正方向的任意单位向量, V ( p , ω ) V(p,\omega) V(p,ω)是可见函数, 如果点 p p p在 ω \omega ω方向被遮挡则为1, 否则为0 SSAO(屏幕空间环境光遮蔽)屏幕空间环境光遮蔽,全称Screen Space Ambient Occlusion,一种用于计算机图形中实时实现近似环境光遮蔽的渲染技术。通过获取像素的深度缓冲、法线缓冲,通过计算来近似表现物体在间接光下产生的阴影 历史
SSAO原理流程
样本缓冲深度缓冲:深度缓冲中的depth值用于当前视点下的场景每一个像素与相机距离的粗略表达,用于重构相机空间中的坐标(Z)来近似重构该视点下的三维场景 法向半球为计算AO,核心问题在于如何取采样点并判断这些采样点是否被遮蔽。 为解决第一个问题,使用法向半球——一种指向法线方向的半球形采样块,并在采样快中生成采样点。**距离原点越远的点AO贡献越小
将采样点全部投影到View Plane上, 相当于获取采样点的UV坐标, 并同时获取Depth Buffer中该UV坐标处的深度值。 随后比较采样点的深度和场景中该点的深度。 如果采样点的深度更大, 说明其被场景遮蔽。 最终将所有采样点的AO贡献求和, 即是该点的AO值。 公式如下: 函数
V
V
V是可见函数, 如果点
p
p
p在
ω
\omega
ω方向被遮挡则为1, 否则为0; 最初的SSAO使用的采样核心是完整的球体,由于核心中一半的样本都在几何体内部,这会导致平整的墙面变得灰蒙蒙的。使用半球进行采样可以消除这种影响,产生更真实的结果。 SSAO算法实现Buffer获取深度&法线缓冲数据 C#:获取相机组件,调整相机的深度纹理生成模式(Depth、DepthNormals、MotionVectors) 在shader中声明变量来获取当前屏幕的深度法线图
重建相机空间坐标参考本文,使用其中的“从NDC空间中重建”方法得到样本在相机空间中的坐标,乘以深度值后得到样本坐标 1. 计算样本屏幕坐标 2. 转换至NDC空间中 将屏幕像素对应在摄像机远平面的点转换到裁剪空间。因为在NDC空间中远平面上的点的z分量为1,所以可以直接乘摄像机的far值来将其转换到裁剪空间(反向透视除法) 5. 重建相机空间中的样本坐标 在相机空间中通过样本相对相机的方向和深度来拟合重构坐标,获得了基于相机的3D场景 构筑法向量正交基
AO采样核心1. 传入给定的随机采样向量,并通过法向量正交基转化至法线半球中的向量
2. 随机获取坐标点
3. 转换至屏幕空间
SSAO效果改进随机正交基(增加随机性)通过引入随机变量或者采样噪音贴图来使得法向半球的正交基不一致 此处使用了一张4×4的Noise贴图 AO累加平滑优化范围判定样本采样时可能会采集到深度差非常大的随机点,导致边界出现AO
加入样本深度和随机点的深度值的范围判定 自身判定如果随机点深度值和自身一样或者非常接近,可能会导致虽然在同一平面也会出现AO
判断深度值大小时增加一个变量来改善这个问题 AO权重AO的深度判断非0即1比较生硬 模糊采用基于法线的双边滤波 对比模型烘焙AO三维建模软件烘焙AO方式通过三维软件(如3DMax),设定好渲染参数,对单一模型,烘焙AO到纹理 优点:
缺点:
游戏引擎烘焙AO方式通过Unity的Lighting功能(主菜单/Window/Rendering/Lighting Settings)进行整体场景的烘焙,包括了GI(global illumination,全局光照)、天空盒、AO等信息 优点:
缺点:
SSAO优缺点优点:
缺点:
SSAO性能消耗性能消耗的主要方面AO法向半球的随机采样
双边滤波的多重采样 下图中白色部分为实际输出的AO,黑色部分为1减之后的效果,能更清晰地对比出模糊的效果
AO核心采样消耗说明本案例SSAO算法中,主要核心为计算AO随机法向量半球的采用点,并加以半段计算AO权值
滤波采样消耗说明为保证边缘不被模糊,本案例使用的是基于法线的双边滤波(Bilateral Filter)
作业实现SSAO效果基础SSAO效果 消除自阴影 增加范围判定 增加AO权重,双边滤波模糊 与其他算法比较(待补充)(其他算法的实现待补充) |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/30 1:34:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |