UE5源码阅读
吴俊荣
我是一个非常非常懒的人
展开
-
UE5——源码阅读——168——将数据延迟和立即提交到GPU
是否是阴影贴图,是否存在虚拟阴影贴图缓存。这个容器管理渲染中失效的动态的基元实例。立即更新统一BUFF缓冲区。代表立即执行GPU写入操作。获取上传的基元数据的数量。收集延迟写入的具体信息。原创 2024-03-13 08:06:48 · 128 阅读 · 0 评论 -
UE5——源码阅读——167——GPU数据上传结构
基元数据存储动态渲染原始的数据。会返回一个基元ID的范围。实例自定义数据浮点的数量。代理将数据写入到GPU。GPU动态数据的上下文。管理给定视图动态基元。写入GPU的Pass。GPU写入的原始数据。原创 2024-03-13 07:47:33 · 117 阅读 · 0 评论 -
UE5——源码阅读——166——GPUScene
PostOpaqueRendering:在渲染不透明物体之后GPU写入操作。提高场景原始物体上传到数据的适配器,不支持Nanite材质表面上传的。在指定场景渲染过程中可以写入GPU场景的时机。判断每帧是否上传GPU的数据或者所有的图元。清除一组实例的范围数据,并把范围记录下来。场景数据上传到GPU,为后面渲染提供准备。是否开启GPUScene Undate。判断平台是否支持Nanite。创建Shader资源视图。填充包围盒的层次结构。对GPU场景可读可写。验证分组计数的有效性。是否进入外部访问模式。原创 2024-03-13 07:25:48 · 159 阅读 · 0 评论 -
UE5——源码阅读——165——GPU排序管理器
更新排序缓冲区,更新分配缓冲区和释放不在使用的缓冲区。完成排序批次的最终化,包含清理和准备的工作。GPU排序管理器,主要处理GPU排序任务。原创 2024-03-12 08:02:55 · 93 阅读 · 0 评论 -
UE5——源码阅读——164——粒子绘制
是否在渲染过程中,和确保在渲染过程中不会开始一个新的渲染过程。处于不是平面反射,不是场景捕获,不是反射捕捉。设置渲染目标,包含粒子模拟纹理和渲染纹理。创建一个渲染对象用于执行开始渲染过程。判断有多少遮挡查询并执行遮挡查询。通知特效系统场景即将被渲染。获取渲染目标和设置渲染目标。获取粒子注入的顶点着色器。缓存当前活动的渲染目标。从管道顶部开始遮挡查询。检测当前渲染是否被暂停。绑定顶点着色和像素着色。判断粒子是不是支持碰撞。原创 2024-03-12 07:50:38 · 118 阅读 · 0 评论 -
UE5——源码阅读——163——Nanite光线追踪管理更新
StagingAuxiliaryDataOffset:散层辅助数据的偏移量。RayTracingGeometryRHI:光线追踪的几何体。BaseMeshDateOffset:基于网格数据的偏移量。AuxiliaryDataOffset:辅助数据的偏移量。表示图形管线中标志的着色器频率数量 不包含计算着色器。AuxiliaryDataSize:辅助数据的大小。是否开启光线追踪,是否支持光线追踪的Shader。SegmentsMapping::段的映射。NumClusters:集群的数量。原创 2024-03-11 23:28:30 · 358 阅读 · 1 评论 -
UE5——源码阅读——162——光线追踪贴花
多少个贴花数据,准备上传到GPU。贴花代理在给定的视图中是否可见。创建BUFF描述和场景BUFF。用于单个Draw ,是临时的。准备shader添加Pass。是否为光线追踪贴花准备数据。用于多个的但只能用于当前帧。启用光线追踪的调试数据。创建光线追踪的贴花数据。获取绑定的Shader。用于多个的但可以跨帧。原创 2024-03-11 22:43:17 · 327 阅读 · 0 评论 -
UE5——源码阅读——161——提交管线状态
是否允许在给定的场景或视图中Lumen全局光照的功能。当前场景是否允许使用Lumen的功能。是否Lumen通过渲染环境遮罩。是否使用硬件光线追踪屏幕探测。是否使用光线追踪的全局照明。是否跳过全局追踪数据检测。是否使用自定义的光照模式。是否用光线追踪的环境遮挡。判断是否使用Lumen。是否支持屏幕空间反射。将值设置到管线里面去。扩展 给用户自定义的。原创 2024-03-11 21:44:43 · 211 阅读 · 0 评论 -
UE5——源码阅读——160——Nanite原理与家族管线
DiffuseIndirectDenoiser:漫反射间接光照的去躁的方法。DiffuseIndirectMethod:漫反射间接光照的计算方法。bFurthestHZB :是否需要从深度缓冲中生成最远的那个HZB。bClosestHZB:是否需要从深度缓冲中生成最近的那个HZB。屏幕空间的全局光照,在屏幕空间中采样计算模拟全局光照。ReflectionsMethod:反射的计算方法。屏幕空间全局光照,产生环境遮罩的缓冲。最新的全局光照,使用光线追踪的方法。禁用漫反射间接光照的计算方法。原创 2024-03-11 21:19:40 · 141 阅读 · 0 评论 -
UE5——源码阅读——159——特效光照遮蔽大气
在渲染Niagara着色器之前初始化RHI资源。根据场景中的天空光更新GPU的缓存。创建当前光源的基本交互任务完成。是不是渲染天空大气的效果。绘制Lumen可视化。初始化天空大气的资源。原创 2024-03-09 15:16:13 · 124 阅读 · 0 评论 -
UE5——源码阅读——158——Nanite遮挡剔除前注册视口
将你的屏幕上空间的位置转换到已经被转换过的世界空间的位置。是不是需要调试实例GPU场景的缓冲区。注册视图,注册到实例视图管理器中。获取Nanite最大边缘像素。获取Nanite最小边缘像素。构建平面,主要处理裁剪平面。判断有没有启用光线追踪。初始化光线追踪视图平移。设置全局的抖动淡入淡出。创建抖动统一着色器参数。创建淡出的统一BUFF。创建淡入的统一BUFF。是否覆盖绘制距离的原点。构建Nanite参数。转换后的全局裁剪平面。原创 2024-03-09 14:49:14 · 155 阅读 · 0 评论 -
UE5——源码阅读——157——运动模糊的时间缩放算法
把上一帧的视图信息保存到上一次的视图信息里。判断摄像机是否切换和摄像机重置路径追踪。当前世界没有被暂停和处于离线渲染。判断视图状态是不是需要遮挡查询。跟VR相关的动态遮挡查询的方法。拿到上一个遮挡查询的矩阵和原点。是不是需要重置路径追踪的累积。判断第一帧时间是不是被重置了。用于清除时域去躁的历史记录。判断投影矩阵是没有采样的。拿到运动模糊目标的FPS。是否强制摄像机的可见性。更新运动模糊的时间尺度。是不是重置当前摄像机。是不是小于真实的时间。相机是不是有大的移动。更新临时的LOD过度。原创 2024-03-09 14:11:10 · 174 阅读 · 0 评论 -
UE5——源码阅读——156——UE5是如何判断视口有大移动
计算当前帧与上一帧时间之间的差值。计算第一帧时间是否被重置。判断相机是否有大的移动。判断是不是要重置摄像机。保存上一帧的视图信息。检测视图偏移是否为0。原创 2024-03-09 13:47:47 · 128 阅读 · 0 评论 -
UE5——源码阅读——155——UE5是如何使用MASS和TAA算法
CVarTemporalAASamplesValue 都不等于的算法。保证当前像素是个恒定的时间采样密度,避免有对齐的收敛问题。将抗锯齿采样坐标转换为视图投影矩阵的偏移量。细分的算法,获取材质纹理的Mip的偏移。判断抗锯齿是不是以时间累计的方式。计算有效的主分辨率的比例。计算时间累积的抗锯齿数量。Box-muller变换。是否使用时间累积的方式。2xMSAA 采样算法。3xMSAA 采样算法。4xMSAA 采样算法。原创 2024-03-09 13:28:10 · 186 阅读 · 0 评论 -
UE5——源码阅读——154——运动模糊参数前期准备
RawOutput:只适用于VR渲染线程中动态分辨率和多重采样的抗锯齿,它会输出一个较小的矩形。SpatiaUpscale:在后处理过程中增加空间采样的步骤,来增加图像的分辨率。获取资源表的缓存,场景帧计数器赋值到资源表帧计数器。这个系数是向下采样的因子,根据分辨率的范围进行分割。检测成员变量是否使用了基于时间累计的抗锯齿方法。判断是不是立即执行的和是不是运行在渲染线程。遍历视图,主要设置运动模糊,检测移动的预值。根据是否降低采样的遮挡查询来计算遮挡像素的。准备加载场景路径追踪失效的计时器的值。原创 2024-03-09 12:42:38 · 173 阅读 · 0 评论 -
UE5——源码阅读——153——光照追踪环境准备
间接光的缓存,可以储存和重用间接光的数据结构,在渲染过程中记录间接光照,并储存在缓存中,在下一帧可以读取已经计算好的结果。GPU场景辅助,可以做GPU实例的剔除,在默认情况下移动平台禁用GPU场景实例化和剔除操作。设置最终要绘制的矩形框,根据是不是支持屏幕百分比来计算视图的矩形。根据当前引擎的ShowFlags,来确定光线追踪的网格命令模式。Nanite是否是活跃的 是的存在可视化标志。光线追踪模式是动态的,并且光线追踪能被改变。更新所有的基元场景信息的异步操作。指定当前视图的GPU的掩码。原创 2024-03-09 11:09:03 · 348 阅读 · 0 评论 -
UE5——源码阅读——152——渲染ViewFamilies
是否启用工具着色器 一个在桌面 一个在WINDOWS。是否启用发束 要启用插件 和渲染头发有关。判断平台是否支持窗口模式。判断是不是支持头发几何。获取GPU帧的时间统计。重置和收缩修改的边界。原创 2024-03-07 22:23:40 · 179 阅读 · 0 评论 -
UE5——源码阅读——151——GPU-Skin缓存视图
四边形过度绘制的着色器复杂度以像素着色器指令的计数来缩放。可视化,主要用于纹理流式传输和基元距离的精准性。主要用于纹理流式传输网格的UV密度的精准性。表示是否更新GPU的蒙皮缓存可视化的数据。主要用于纹理流式传输材质纹理缩放的精准性。是否允许GPU蒙皮缓存的可视化。拿到GPU蒙皮缓存可视化的数据。是否强制使用四边形的过度绘制。可视化流式纹理分辨率的精准性。是否强制使用纹理流式的构建。是否使用多个GPU的渲染。表示是否启用视图的模式。执行相关的视图扩展工作。是否强制使用流式的精度。是否支持跨GPU的复制。原创 2024-03-07 22:00:51 · 456 阅读 · 0 评论 -
UE5——源码阅读——150——渲染线程开始
DeferredAndAsync:延迟或异步清理场景渲染。Immediate:立即清理场景渲染。Deferred:延迟清理场景渲染。渲染ViewFamilies。等待所有的阴影网格绘制完成。刷新任务分配给RHI线程。刷新RHI线程在刷新资源。是不是需要等待任务完成。原创 2024-03-07 21:08:56 · 118 阅读 · 0 评论 -
UE5——源码阅读——149——批渲染Mesh元素
创建BUFF遍历 绘制元素准备Shader设置流源绘制。原创 2024-03-06 23:42:17 · 168 阅读 · 0 评论 -
UE5——源码阅读——148——批渲染绘制精灵
排序 根据混合模式的过滤器排序。拿到纹理和遮罩透明度。原创 2024-03-06 23:34:22 · 184 阅读 · 0 评论 -
UE5——源码阅读——147——批渲染绘制网格三角形
深度偏移不一样才绘制。原创 2024-03-06 23:16:10 · 218 阅读 · 0 评论 -
UE5——源码阅读——146——批渲染绘制粗线条
线的Index 作为计数的。每次批处理线条的最大数量。相机对应位置的开始和结束。开始粗细 和结束粗细。原创 2024-03-06 23:07:19 · 116 阅读 · 0 评论 -
UE5——源码阅读——145——批渲染绘制点
计算三角形个数,一个点是由两个三角形构成的。记录到命令队列里面然后提交给GPU。创建BUFF和锁住BUFF。以视口的X轴作为参考的标准。计算原点基础世界的偏移。原创 2024-03-06 22:50:21 · 137 阅读 · 0 评论 -
UE5——源码阅读——144——批渲染CPU值传递到GPS
设置编辑器合成参数和其他参数。设置编辑器合成参数和其他参数。获取标准的遮罩像素着色。获取线性的遮罩像素着色。指定像素着色的RHI。指定像素着色的RHI。原创 2024-03-06 22:30:44 · 203 阅读 · 0 评论 -
UE5——源码阅读——143——批渲染BindShader到PSO
InTransform:世界坐标转视口坐标。设置顶点Shader和像素Shader参数。InFeatureLevel:功能级别。获取顶点Shader和像素Shader。ColorWeights:颜色权重。RHICmdList :命令列表。InGamma:Gamma值。Texture:纹理。原创 2024-03-06 21:52:28 · 108 阅读 · 0 评论 -
UE5——源码阅读——142——批渲染处理渲染
用于图层中根据一些透明通道遮挡,或保留其他图像的元素。调整亮度,对比度,饱和度 影响图层的显示效果。设置三角形列表 和设置管线状态。透明 Alpha可以用于写入。判断混合模式大于开始小于结束。缓存同时渲染的目标数是多少。深度模版目标是否存在纹理。准备一个批处理元素的参数。准备一个Color权重。仅用透明 Alpha。原创 2024-03-06 21:19:58 · 225 阅读 · 0 评论 -
UE5——源码阅读——141——批渲染PSO
放大着色器的指针 (可以将输入的几何数据进行扩展在生成多个几何数据,比如粒子 草地)网格着色器的指针(几何处理,可以复制几何操作 曲面细分,法线变换)几何着色器的指针 (几何处理和几何生成)是否存在片段密度的附件。深度模板目标像素格式。原创 2024-03-05 23:11:03 · 325 阅读 · 0 评论 -
UE5——源码阅读——140——批渲染RDG瓦片渲染
是应用于TranslatedViewProjectionMatrix这个矩阵之前的矩阵。没有AA抖动的投影矩阵(AA抖动就是抗锯齿,投影方式是剪裁空间中的Z等于1)可以将视图原点的位置量化,可以得到相对于瓦片的位置。生成相对世界坐标系到视图坐标系的矩阵。生成视图坐标系相对于世界坐标系的矩阵。上一帧视图坐标系到相对世界坐标系矩阵。可以被覆盖的平移的视口矩阵求逆。裁剪空间到相对世界坐标系的矩阵。是头戴显示器的矩阵去除滚动的。可以被覆盖的平移的视口矩阵。包含平移的 视口矩阵求逆。包含平移的 视口矩阵。原创 2024-03-05 22:24:07 · 333 阅读 · 0 评论 -
UE5——源码阅读——139——渲染
场景中是否存在未缓存的静态光照交互,如果存在,则需要进行完整的光照重建。基于当前功能级别创建多个场景渲染器。所有视图族都必须指向同一个场景。确保延迟的组件更新已经发送到渲染线程。在所有GPU上更新渲染目标的逻辑。获取鼠标和屏幕相关信息。原创 2024-03-04 22:46:47 · 176 阅读 · 0 评论 -
UE5——源码阅读——138——渲染
分配常量缓冲区,将常量缓冲区按照数量拷贝到常量缓冲区buff。映射表的索引,获取Shader参数。添加到队列,更新BUFF。更新统一缓冲区BUFF。原创 2024-03-04 22:25:25 · 141 阅读 · 0 评论 -
UE5——源码阅读——137——渲染
创建统一BUFF,UniformBufferLayout:描述Uniform Buffer布局和结构的类,它定义了参数数据在Uniform Buffer中的排列方式和结构。如果PoolBucket中有缓冲区,则从最后一个位置取出一个缓,中区,并进行一些检查。然后,更新统计信息,将缓冲区值给UniformBufferResource.判断池子是否打开,是不是在渲染线程,是不是RHI线程。生成一个统一BUFF,准备一个本地的CPU内容。定义缓冲区BUFF ,拿到池子的桶,创建BUFF,更新统计。原创 2024-03-04 22:15:06 · 295 阅读 · 0 评论 -
UE5——源码阅读——136——渲染
执行并行操作,大概意思是:用于在多个线程中执行相同的任务。函数的参数包括调试名称,循环次数、最小批次大小、要执行的函数、在并行for循环之前在主线程上执行的工作、标志以及可选的线程上下文。函数首先确定要使用的线程数,然后根据循环次数和线程数计算出批次大小和批次数。接下来函数根据优先级和任务类型创建并启动任务,并在主线程上执行预先工作。然后,函数使用并行执行器来执行循环体中的任务并等待所有任务完成。最后,函数检查任务是否全部完成,并进行一些断言和验证。更新Transform的变化和统一BUFF的变化。原创 2024-03-04 21:36:27 · 149 阅读 · 0 评论 -
UE5——源码阅读——135——渲染
在Tick期间,对需要在帧结束时更新的组件列表进行遍历,执行每个组件的QnEndOfFrameUpdateDuringTick0函数。保证所有的ViewFamily的Scene和0号ViewFamily的Scene一致。通知静态模型发生变化 ,有父级就用父级的Bound,没有就计算一个。判断是否渲染,是否隐藏阴影,灯光是否隐藏,是否有光线追踪的。判断渲染状态脏标记是否为true。确保所有的对象都执行最后的帧。更新蒙皮并且提交到渲染列表。是否创建渲染状态删除当前的。遍历组件做结束帧的处理。原创 2024-02-28 08:52:25 · 177 阅读 · 0 评论 -
UE5——源码阅读——134——渲染
判断是不是实时的 刷新渲染命令列表。绘制关于HUD 的相关的统计。绘制静态光的Debug信息。原创 2024-02-27 23:26:49 · 152 阅读 · 0 评论 -
UE5——源码阅读——133——渲染
根据预览分辨率比例和全局分辨率比例设置视口的屏幕百分比接口,并确保接口已设置。它还处理了在编辑器视口中忽略特定的屏幕百分比设置。如果是漫反射设置为0,如果是高光设置为0。拿到没有缩放的视口矩形框,计算安全帧。绘制大的顶点就是在UI上绘制模型。绘制所有的EDmode的HUD。创建TileItem 做混合。转像素 ,世界坐标转屏幕坐标。是网格关闭漫反射和高光。判断位置是否超过矩形框。原创 2024-02-27 23:13:03 · 232 阅读 · 0 评论 -
UE5——源码阅读——132——渲染
绘制调试信息,初始化画布的大小。重置截图请求和重置追踪截图状态。绘制XR信息,目前官方没打开。不能被写入A通道设置为255。判断默认截图区域是否有效的。将结束帧加入到渲染队列里面。图片的写入队列是否为空。重置相机的切换标志位。原创 2023-11-16 10:48:55 · 52 阅读 · 0 评论 -
UE5——源码阅读——131——渲染
获取每个像素对应的单位的长度。根据背景颜色绘制成比例尺颜色。原创 2023-11-14 17:47:26 · 49 阅读 · 0 评论 -
UE5——源码阅读——130——渲染
绘制安全框架,绘制相机的安全帧和纵横比的边框。绘制Widget的HUD。原创 2023-11-14 17:26:36 · 44 阅读 · 0 评论 -
UE5——源码阅读——129——渲染
从磁盘里面读取测试材质。获取视口矩形宽的中心点。原创 2023-11-14 16:32:45 · 38 阅读 · 0 评论