- 博客(395)
- 收藏
- 关注
原创 UE5——源码阅读——219——提交间接光照的状态
是不是使用Lumen漫反射全局光照。当前的屏幕空间是不是支持间接漫反射。是不是渲染Lumen 反射。获取可以写的管线状态。插件光线追踪全局光照。
2024-07-11 21:56:17
183
原创 UE5——源码阅读——218——Nanite可见性查询
现在,我们将在所有视图中共享相同的可见性结果。准备Nanite可见性查询。准备Nanite可视化。计算并提交最终管线状态。
2024-07-11 21:40:09
161
原创 UE5——源码阅读——217——BeginInitView最后的部分
在构建视图全局统一缓冲区之前初始化Sky/View资源。这必须在我们开始初始化和使用视图之前发生。创建视图的GPU端表示,例如剔除。Lumen场景PDI的可视初始化。
2024-07-11 21:34:37
197
原创 UE5——源码阅读——216——设置ViewStart状态
从当前帧信息设置一个新的FPreviousViewInfo。帮助InitViews在角度和位置上检测大型摄像机的移动。如果没有viewstate,我们就假设相机没有移动。存储旧的视图矩阵并检测我们应该重置运动模糊的条件。更新以前的帧矩阵,如果世界原点是基于这个帧。摄像机是否有交互切换或是否强制路径追踪重置。上一个ViewTransform是否被设置。确定我们是在初始化还是应该重置持久状态。检测我们应该重置遮挡查询的条件。需要调试实例GPU场景的缓冲区。世界是不是被暂停或离线渲染。每个视图信息是不是可读的。
2024-07-11 21:19:48
171
原创 UE5——源码阅读——215——抗锯齿采样方式
强制AA采样的数量,以确保质量不会受到先前为第4代TAA设置的影响。在时间序列中计算新的采样索引。对视图应用子像素偏移量。计算TAA采样的个数。
2024-07-11 20:55:30
537
原创 UE5——源码阅读——214——InitViewBegin的前期准备
如果我们从场景捕捉中渲染,我们不需要再运行头发书签。通知FX系统,场景即将执行可见性检查。设置运动模糊参数(同时检查相机运动阈值)缓存投影矩阵b在应用AA之前缓存投影矩阵。绘制线条影响这个网格,如果它被选中。为光映射灯绘制蓝色,为动态灯绘制橙色。每次渲染增加遮挡帧计数器一次。可以使当前的路径无效的计数器。是否忽略最后一帧的查询。
2024-07-11 20:45:09
213
原创 UE5——源码阅读——213——基础通道之后渲染阴影和雾
是否开启Strata 这需要在虚拟阴影贴图之前运行,以便有准备好的分类sss数据。储存Lumen间接光照的异步计算输出的变量。是不是进行分层水深的预处理。调度异步Lumen间接光照。检测阴影深度是否被渲染完成。准备Nanite材质解算。复制模板到光照通道贴图。
2024-07-11 08:01:22
213
原创 UE5——源码阅读——212——光线追踪与GBuffer
应该在“WaitForRayTracingscene”之前调用。如果需要,标记GBufferA以保存到下一帧。当不在MSAA时,分配给两个目标。开始收集Lumen表面的缓存反馈。是不是需要等待光线追踪场景。没有只读的深度的基本通道。设置光线追踪的光源数据。渲染Lumen场景光照。添加解析场景的深度通道。是不是可视化的光照剔除。是不是需要天光实时捕捉。是不是有光线追踪重叠。是否使用硬件光线追踪。添加曝光度的Pass。
2024-07-11 07:30:57
212
原创 UE5——源码阅读——211——_处理胶囊体阴影和发束
如果所有深度都已在预表中写入,则应尽早启动异步计算云。使用前向阴影,我们需要在基础通道之前渲染体积雾。对于前向阴影,我们需要提前渲染阴影贴图。是不是启用异步计算半透明照明体积清除。半透明照明纹理的初始化。在多个视图中渲染头发。渲染间接胶囊体的阴影。
2024-07-10 22:10:37
231
原创 UE5——源码阅读——210——渲染LUT和环境Map
如果可用,使用SkyAtmosphere和volumetricCloud组件捕获天光。天空环境图捕获使用视图UB,它包含上面计算的LUT。Lumen更新需要访问天空大气LUT。天空大气通道是不是在基础通道的前面。生成天空/大气查找表。
2024-07-10 21:17:39
193
原创 UE5——源码阅读——207——开始遮挡测试
深度测试,没有深度写入,没有颜色写入,不透明。准备平行光的阴影遮挡查询。执行点光源阴影遮挡查询。获取阴影预览视图的转换。生成阴影截锥体的顶点。获取缩小后的视图矩形。设置视图的顶点着色器。
2024-07-10 20:42:13
180
原创 UE5——源码阅读——206——渲染遮挡剔除
用场景深度纹理的当前内容更新四分之一大小的深度缓冲区。这需要在遮挡测试之前进行,这会利用小深度缓冲。确保视图释放他们的内存,如果我们在任何时候关闭遮挡。计算环境遮罩AO的通道级别。渲染处理遮挡后的组合光照。环境光是不是可以异步计算。是否需要体积云渲染目标。是否使用采样的遮挡查询。确定全局光照的遮挡类型。获取加载渲染目标的动作。创建一个合成照明对象。是不是异步计算体积云。生成天空/大气查找表。
2024-07-10 07:58:46
166
原创 UE5——源码阅读——205——构建前向灯光资源
在我们添加一个假入口之前,先存储灯光的数量。用于正向着色多方向的光源的冲突。剔除灯光链接缓冲区的元素的数量。准备一个计算着色器 被压缩过的。灯光剔除的视图空间来构建数据。创建前向灯光的上传缓冲区。计算有多少个可索引的灯光。被链接的链表剔除不等于0。剔除灯光网格的像素格式。添加到UAV Pass。本地可见光信息的索引。
2024-07-10 07:00:15
150
原创 UE5——源码阅读——204——各类型的灯光参数处理
接下来添加所有其他灯,跟踪集群支持灯的结束索引。判断光需要单独注入体积雾中来获取不透明的阴影。如果新灯的优先级高于前一个,则重置计数。积累新的光如果也有最高的优先级值。灯光代理是不是采用了反平方的衰减。打包光源类型和阴影贴图通道的掩码。灯光向体积雾中单独注入光函数。禁用此灯向前遮阳体积散射贡献。获取方向光前向着色的优先级别。跟踪最后一个支持集群延迟的。设置定向光距离衰减的MAD。世界坐标到阴影坐标的转换。获取虚拟阴影的贴图ID。获取光源体积散射的强度。注册一个深度目标的纹理。获取灯光淡入淡出因子。
2024-07-09 23:04:17
208
原创 UE5——源码阅读——203——如何处理简单灯光
LightTangentAndIEsDataAndspecularscale:光源切线和IES和镜面比例的。LiqhtDirectionAndShadowMapChannelMask:灯光方向和阴影贴图作为掩码。简单的灯光在没有视图相关检查的情况下被复制,所以进出相同。将两个值打包到一个float中以保持float4对齐。将两个值打包到一个float中以保持float4对齐。将两个值打包到一个float中以保持float4对齐。现在使用分类的灯光,并在我们进行的过程中跟踪范围。打包射灯的角度和IES。
2024-07-09 22:03:04
329
原创 UE5——源码阅读——202——LightsGrid
如果灯光被注入到网格中,请使用’AreLightsInLightGrid()'检查。是不是任何视图都使用了前向照明。创建虚拟的前向灯光统一缓冲区。是否使用Lumen的方向光。是否使用阴影化的光源。选择的前向光的灯代理。
2024-07-09 21:40:22
202
原创 UE5——源码阅读——201——准备VRS可变速率着色器
设置标志-可以稍后允许眼动追踪,因为着色器理论上支持它。在调试模式下设置一个覆盖率。创建纹理来保持阴影率图像。检查VRS贴图大小。
2024-07-09 21:06:53
121
原创 UE5——源码阅读——200——渲染深度pass
当前纹理没有GPU 或CPU 支持的 存在于移动设备。获取功能级别Shader 平台。创建统一BUFF 缓冲区。解析场景颜色或者深度的。解析像素的Shader。
2024-07-09 20:45:04
126
原创 UE5——源码阅读——199——Nanite可见性剔除和光栅化
如果提供了外部深度缓冲区,则它必须与上下文大小匹配。早期深度是不是没有完成 是不是有两Pass的遮罩。如果没有在基础通道中写入,则释放深度速度。根据配置和平台功能设置光栅化调度。是不是使用异步的方式计算阴影贴图。是不是启用Nanite动态缩放。计算时间膨胀LOD的缩放系数。获取Nanite可视化数据。是不是两个Pass的遮罩。Nanite剔除光栅化。是不是强制硬件光栅化。是不是可编程的光栅化。添加到纹理提取链表里。
2024-07-09 08:48:28
241
原创 UE5——源码阅读——198——Nanite可见性查询
是不是在支持自定义深度渲染,是不是支持自定对象的模板写入。现在,我们将在所有视图中共享相同的可见性结果。检查NaniteBin是不是没有标记可见性。根据视口数量创建Nanite光栅化的结果。Nanite可见查询是不是有意义的。根据视图与实例的世界边界是否相交的。Nanite材质可见性不能等于0。设置光栅化二进制索引转换器。Nanite基元可见性查询。是不是需要做可见性的测试。是不是剔除着色器的Bin。
2024-07-09 07:43:10
227
原创 UE5——源码阅读——197——填充场景的深度缓冲区
DDM_AllOpaqueNovelocity的特殊通道,它使用速度通道来完成早期的深度通道写入。这两种计算方法都较早运行,因此此处跳过清除模板,只加载现有的模板。我们没有做预传,但如果有的话,我们仍然想要HMD遮罩。抖动过渡模板蒙版清除,占所有活动视窗。HMD的预通到的渲染(跟VR相关)是否启用HMD隐藏区域的遮罩。深度贴图做标记跟调试相关。渲染可移动物体的速度。是否启用光栅模板抖动。是否启用变形深度通道。等待深度通道任务完成。
2024-07-09 07:03:26
111
原创 UE5——源码阅读——196—EndInitViews最后的部分
现在间接照明缓存已经更新,我们可以更新原始的预先计算的照明缓存。现在间接照明缓存已经更新,我们可以更新原始的预先计算的照明缓存。移动平台的反射捕捉统一缓冲区和不是移动平台的反射捕捉统一缓冲区。如果我们通过任务启动间接光照缓存更新,等待并完成。如果并行间接光照缓存更新被禁用,那么就地处理它。准备捕获的数量和最远的反射距离。动态半透明的分辨率是不是启用。动态半透明百分比的Basis。设置当前场景反射捕捉的缓冲区。更新Lumen的场景任务。更新半透明物体的分辨率。设置反射捕捉统一缓冲区。遍历缓冲池中的所有索引。
2024-07-05 07:54:28
140
原创 UE5——源码阅读——195—分配阴影的深度目标
为移动平台整个场景的方向光源和聚光灯的阴影分配深度目标。更新半透明阴影贴图统一缓冲区。删除一段时间未使用的缓存项。是不是整个场景方向的阴影。分配缓存的阴影深度目标。获取多少个聚光灯的阴影。一次渲染点光源分配目标。不是打包版本的一些处理。分配级联阴影深度目标。获取预阴影的投影信息。
2024-07-05 07:08:56
136
原创 UE5——源码阅读——194—投影阴影信息
注意:由于某种原因,缓存的prehadows有CacheMode == SDCM_Uncached,所以需要在这里跳过它们。光线追踪阴影使用GPU管理的距离场对象缓冲区,不应该使用CPU剔除。如果在缓存的阴影贴图和当前阴影贴图中没有基元,则跳过阴影渲染。完全缓存的VSM不应该被跳过,因为它们需要排队进行投影。如果不支持渲染,跳过一次通过的点阴影,除非VSM或DF。在渲染阴影之前,检查阴影在至少一个视图中是可见的。同样注意这一点,以产生日志消息和屏幕警告。一个光的所有级联需要在相同的纹理中。
2024-07-04 22:42:50
192
原创 UE5——源码阅读——193—投影阴影信息
根据它们的分配需求对可见阴影进行排序,仅在此帧中使用2d阴影地图,这些阴影地图可以跨灯光进行分组。这个阴影必须在主视图中呈现,或者对于一个与视图无关的阴影为NULL。视图投影矩阵为每个立方体贴图面,使用一个通过点光影阴影。在被一个阴影矩阵变换之前应用于世界空间的一种平移。2d阴影贴图将在帧之间持续存在,不能被叠加。对阴影使用多个投影的光类型的投影索引。视图空间转为近剪空间,不包含边界。阴影是不是在预阴影缓存中被分配了。视图空间转为近剪空间,包含边界。预阴影在深度缓存中是不是最新的。
2024-07-04 22:17:05
230
原创 UE5——源码阅读——192—设置各类灯光的阴影信息
处理相关的阴影投射包含我们当前的普通阴影的贴图和虚拟阴影的贴图,会遍历整个视口计算出阴影参数,创建阴影信息。只有当灯光有可见的基元或有调制的阴影时才会检查视锥,所以我们不需要在这里再次检查。同时创建一个完整的场景阴影,为灯光预先计算的阴影未构建。仅为不预先计算阴影(可移动灯光)的灯光创建阴影。允许移动和固定的灯创建CSM,或未构建的静态灯。寻找具有动态阴影的单个基于,分别设置阴影。尝试创建一个整个场景的投影阴影。是不是创建整个场景的阴影。只考虑可能有阴影的光。是不是创建点光源的阴影。是不是投射模糊的阴影。
2024-07-04 21:48:23
219
原创 UE5——源码阅读——191—灯光基础信息
当一个可移动的阴影投射光被添加到场景中时,在正向渲染器中分配的shadowMap通道。用于将阴影投影打包到在基本通道中读取的光衰减纹理通道中。如果光不可见,但仍然需要预览,则为False,这只能在编辑器中发生。从光代理的虚拟函数中缓存的值,因为它在阴影设置期间被多次检查。指向基元交互列表中前一个交互的NextLight成员的指针。如果基元有包含光源的光映射,则为True。LightType_Point:点光。交互是不是具有透明的逐个对象阴影。是不是记录过交互阴影的原始数据。基元交互列表中的下一个交互。
2024-07-04 21:10:11
145
原创 UE5——源码阅读——190——灯光Map和BVH以及收集动态阴影
清除旧的预阴影,并尝试向缓存中添加新的预阴影。主要设置Natine剔除相关的数据结构。收集用于绘制各种阴影类型的基元列表。是否开启可移动的点光源的阴影。是否支持Lumen的直接光照。是否开启可移动的射灯的阴影。BVH上传是不是有意义的。是不是开启点光源的阴影。判断阴影质量是否大于0。计算投影阴影的可见度。添加到灯光上传数组里。判断场景仅仅是静态的。
2024-07-04 20:29:52
207
原创 UE5——源码阅读——189——实例场景的数据压缩存储
是否支持当前场景数据进行压缩变换。验证上传实例的信息是否有意义的。获取实例场景着色器数据、并构建。获取储存的命中代理的ID地址。把基元ID添加到上传器里面。获取储存材质槽的内存地址。获取上传批次里的Item。未压缩的变换数据的步长。处理实例场景的上传器。获取基元item信息。压缩的变换数据的步长。
2024-07-04 08:21:27
179
原创 UE5——源码阅读——188——GPUScene提交数据
通过当前的适配器获取我们要上传的原始物体的数据的上传信息。创建离散BufferSRV和上传BufferSRV。更新栅格bin,材质深度和命中代理ID重映射表。确保GPUScene已经启动了。是否使用Nanite材质上传器。当前是不是支持Nanite。确保在并行过程中上传数据。获取多少个要上传的数据。Nanite材质上传器。计算离散的线程数是多少。实例上传数据的偏移量。
2024-07-04 07:31:21
161
原创 UE5——源码阅读——187——GPUScene提交各类阴影动态数据
运行一个通道,清除(将ID设置为无效)任何需要它的实例。这个容易可以基元实例变的无效,主要是让我们实例缓存失效。跳过上传空的和已经上传的数据。本地实例场景的数据偏移。负载Float4的数量。GPU场景基元收集器。Mesh动态图元数据。GPU场景动态上下文。填充视口的着色器参数。
2024-07-03 22:14:05
234
原创 UE5——源码阅读——186——收集各种类型的阴影动态数据
1待办事项:VirtualShadowMapClipmap应该移动到FVisibleLightViewInfo?搜索VirtualShadowMapClipmaps,查找使用给定视图设置的那个。这些内存不是在内存堆栈上分配的,所以它们被重新计数。所有可见的投影阴影,输出阴影设置。*关于可见光的信息,它不是特定于视图的。需要特殊处理的每个特征的投影。设置网格绘制用于投影模板的命令。设置动态网格元素阴影剔除视锥。我们将覆盖的视图的备份属性。为阴影深度设置网格绘制命令。虚拟阴影贴图剪贴贴图阴影。
2024-07-03 21:30:39
129
原创 UE5——源码阅读——185——阴影信息
主题深度范围,以世界空间单位表示。SDCM_StaticPrimitivesOnly:缓存静态的图元的深度信息。这个阴影必须在主视图中呈现,或者对于一个与视图无关的阴影为NULL。阴影是否是一个点光阴影,在一次通过中渲染立方体地图的所有面。视图投影矩阵为每个立方体贴图面,使用一个通过点光影阴影。阴影的视图矩阵,在渲染时也用作覆盖主视图的视图矩阵。视图矩阵为每个立方体贴图面,使用一个通过点光影阴影。用于渲染阴影深度缓冲的矩阵。这个阴影是否应该支持半透明表面的投射阴影。阴影是否在预阴影缓存中及其深度是最新的。
2024-07-03 08:11:53
937
1
原创 UE5——源码阅读——184——准备距离场和高度场场景
主要跟虚拟化渲染技术的异步更新有关。更新全局高度场的对象Buffer。使用天光的最大距离(如果有)是否计算深度模版抖动。是否开启Nanite。准备距离场的场景数据。
2024-07-02 22:52:26
160
原创 UE5——源码阅读——183——初始化Strata视口数据
没有开启BSDF偏移只创建瓦片相关信息。获取扩展的瓦片的缓冲区的大小。分离次表面和粗糙折射纹理。创建BSDF瓦片的纹理。瓦片列表缓冲区的名字。瓦片间接绘制的缓冲区。创建可读的统一缓冲区。
2024-07-02 22:22:11
120
原创 UE5——源码阅读——182——初始化Strata每帧参数
分离后的不透明粗糙的折射的场景颜色。记录Strata分析数据的情况。是否需要渲染Lumen漫反射。是否需要渲染Lumen反射。是不是需要BSDF的偏移。创建不透明粗糙折射的纹理。更新材质缓冲区的分辨率。是否开启粗糙度的追踪。
2024-07-02 21:46:42
179
原创 UE5——源码阅读——181——使用GBuffer和体积雾的判定
体积云是不是对局部的光源进行采样。判断渲染是不是延迟的光照。是否可视化灯光的Grid。是否使用GBuffer。是否需要进行遮挡测试。是不是需要预渲染通道。
2024-07-02 21:00:21
204
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人