IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> ue5-屏幕空间反射SSR -> 正文阅读

[游戏开发]ue5-屏幕空间反射SSR

在FDeferredShadingSceneRenderer::Render中如果是bRenderDeferredLighting,也就是渲染延迟光照,则可以执行RenderDeferredReflectionsAndSkyLighting

在IndirectLightRendering.cpp的RenderDeferredReflectionsAndSkyLighting中如果ViewPipelineState.ReflectionsMethod == EReflectionsMethod::SSR会执行ScreenSpaceRayTracing::RenderScreenSpaceReflections

另外在渲染水体的FDeferredShadingSceneRenderer::RenderSingleLayerWaterReflections也会执行,这里会有tile的模式和不用tile的模式。

步进的颜色图片选择

他的做步进的图有三种,默认是用CurrentSceneColor,如果不是最高质量的模式则会用CustomSSRInput或者用TemporalAAHistory的第一个rt

?

SSRStencilPrePass是做步进前先做一个模板处理,为了输出更好的效果。

质量决定步进数量

GetSSRShaderOptionsForQuality是根据给到的质量标准设置步进的次数。

?

在不使用TAA的历史记录时,使用中灰色纹理,以避免错误地重新投影当前场景颜色,就像前一帧的TAA历史记录一样。

?

用RenderTargets[0]存放颜色,RenderTargets[1]存放步进碰撞的距离

?

只有SSRStencilPrePass才绑定深度

?

用模板来过滤ssr的信息

在SSRStencilPrePass下执行FScreenSpaceReflectionsStencilPS执行到SSRT/SSRTReflections.usf的ScreenSpaceReflectionsStencilPS

他是一种优化方式,这种优化使用模板进行测试,在像素着色器调用被打包到前线之前,修剪掉不需要计算SSR的像素。

如果有粗糙度并且gbuffer中的shader不为空则要剔除掉。因为将为这个像素计算SSR,所以我们放弃这个像素着色器调用,以不覆盖模具缓冲区,然后对这个像素执行ScreenSpaceReflectionsPS()。不然就不执行。

?

ssr的渲染模式

然后就开始组件FScreenSpaceReflectionsPS。他有两种方式渲染,一个是TiledScreenSpaceReflection的模式,一个是默认模式。

TiledScreenSpaceReflection的模式只有在RenderSingleLayerWaterReflections也就是水的反射效果才会用到。依赖于bRunTiled,是跟平台有关的,只有在shadermodel5以上才会用也就是dx11以上才能用,并且switch不会用。

如果是TiledScreenSpaceReflection模式则FPixelShaderUtils::DrawFullscreenTriangle渲染FScreenSpaceReflectionsPS。

而默认模式用RHICmdList.DrawPrimitiveIndirect也就是间接渲染的方式做渲染。而且他的顶点着色器用FScreenSpaceReflectionsTileVS。

其中之前做的SSRStencilPrePass模板设置也会在GraphicsPSOInit.DepthStencilState这里去设置他的模板的。

?

水体的ssr顶点着色

先看看FScreenSpaceReflectionsTileVS这个顶点着色SingleLayerWaterComposite.usf的WaterTileVS,里面主要是分成tile然后从tile里做一些偏移来得到他的顶点位置。

?

片元着色做碰撞及颜色输出

然后片元着色是FScreenSpaceReflectionsPS执行到SSRT/SSRTReflections.usf的ScreenSpaceReflectionsPS。

首先转到世界空间的位置

?

然后通过ModifyGGXAnisotropicNormalRoughness来获取ggx方式的各向异性的法线方向

然后如果质量比较低他是直接返回一个颜色,不做步进

?

然后根据不同质量设置步进和反射的数量

?

NumRays是用于拿到随机,然后随机的值去执行RayCast。他的index会到蒙特卡洛中获取Hammersley16的随机。然后给NumSteps去执行RayCast。

RayCast在SSRTRayCast.ush中。核心在CastScreenSpaceRay中步进来获取碰撞的位置。碰撞的原理是用z轴的步进来跟深度比较,如果SamplesZ - SampleDepth小于CompareTolerance则说明碰撞了。

?

最后输出的OutHitUVz就是碰撞的点。获取到的点在ScreenSpaceReflections中通过ReprojectHit获取uv,他是让碰撞的带你转到裁剪空间,然后直接拿xy再除以w来得到屏幕坐标。

?

屏幕坐标再做偏移得到uv

?

得到的uv采样后转颜色空间以及算brdf后得到颜色

?

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:29:43  更:2022-03-06 13:30:03 
 
开发: 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年11日历 -2024/11/27 16:48:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码