- 博客(70)
- 收藏
- 关注
原创 GPU Readback Texture Streaming in Skull and Bones
摘要:《碧海黑帆》开发团队创新性地采用GPU回读式纹理流送技术,解决了开放世界海战游戏中高密度纹理资源的内存管理难题。该技术通过像素着色器采样反馈机制,在G-Buffer阶段将纹理需求信息写入UAV纹理,采用1/8分辨率稀疏采样配合64帧周期抖动策略,实现高效精准的Mipmap层级预测。系统支持每个材质4个UV变量,通过归一化处理实现跨平台一致性,最终在PS5平台上以仅0.3ms的额外开销,成功释放50-240MB纹理内存,显著提升了4K分辨率下的纹理质量。
2025-12-13 10:45:03
589
原创 Real-Time Layered Materials Compositing Using Spatial Clustering Encoding
一种流行的合成方法是将多层材质预烘焙成一套纹理(反照率、法线、粗糙度等),供游戏引擎使用。生成的纹理集主要是为特定网格设计的,不能在不同的网格之间共享。我们称这种方法为"静态材质分层" [Neubelt and Pettineo 2013, Deguy et al. 2016]。这种方法能产生良好的结果,但需要大量的 GPU 内存来存储最终的高分辨率纹理。为了突破这一限制,一些现代渲染引擎使用了一种与已被地形渲染证明有效的"纹理喷溅"技术非常相似的方法 [Bloom 2000]。
2025-11-28 23:55:23
1078
原创 Optimizing the GraphicsPipeline with Compute
本文探讨了现代GPU架构中计算与光栅化流水线协同优化策略。研究发现传统固定功能硬件存在性能瓶颈,而计算着色器可有效提升GPU资源利用率。通过AMD GCN架构案例分析,提出基于计算的三角形剔除技术,包括视锥剔除、深度剔除和小三角形过滤等优化方法。实验表明,该方法在Xbox One和PS4平台上可减少15%-30%的渲染开销,在细分场景下性能提升达40%-80%。研究还提出了去交错顶点缓冲、异步计算调度等创新架构设计,显著提升了游戏引擎的渲染效率。文章为GPU驱动渲染管线优化提供了系统性的解决方案和性能数据支
2025-10-30 07:19:43
830
原创 Resource Management with Frame Graph in Messiah Yuwen Wu
现代游戏引擎通常使用(又称帧图 Frame Graph 或渲染图 Render Graph)来管理其渲染管线,Messiah 引擎也是如此——这是网易游戏广泛使用的一款自研跨平台游戏引擎。帧图的一个关键特性是自动资源管理,即自动创建资源以及自动资源复用和别名化(aliasing),这不仅简化了管线的实现,也显著减少了内存占用。虽然在原始的 Frame Graph 讲座中并未深入讨论资源管理,但它并不像听起来那么简单,特别是在涉及多个队列时。一个带有异步计算或异步拷贝的帧图可能并非一个。
2025-09-28 10:55:36
916
原创 GPU-Driven Rendering inAssassin’s Creed Mirage
随后,[Wihlidal 17] 在 [Haar and Aaltonen 15] 的基础上,通过 完全基于计算着色器的实现 改进了三角形剔除旨在CPU端 ,而[Haar and Aaltonen 15] 则预计算了基于固定角度的静态每三角形簇的可见性掩码。从技术上讲,子网格ID就足以创建绘制调用哈希,因为它代表几何形状和材质的组合,但在我们的情况下,当启用alpha剪切时,我们在不同PSO之间切换,因此需要根据使用的着色器排列将子网格实例注册到不同绘制调用(see Section 1.4.1)。
2025-08-31 19:43:37
910
原创 用于Forza系列测试自动化的3D可视化工具
物理引擎通常依赖于由艺术家手工制作的碰撞网格。这些网格可能存在洞口、错误的法线或其他错误数据,这可能会在运行时导致奇怪的行为。手动测试这些错误行为的成本极高。一个小洞或错误的法线可能会导致角色或车辆的行为完全错误,而这些错误很少能被复现,因为它可能取决于许多变量,如引擎时间步长、角色速度和角度。在多边形网格处理领域,找到类似网格中开放边缘这样的问题并不是特例,一些3D内容创建包中已经提供了这个功能。然而,从拓扑学角度来看,对于非封闭网格,网格的边界和坏洞没有实质性的差异。因此,要可视化哪些是设计上的,哪些是
2025-07-31 22:28:12
740
原创 Shader Server System
若您的编译器符合此特性,只需在重新编译所有相关着色器前后对比着色器字节码文件的修改时间,实际被编译的着色器字节码才会生成新的文件修改时间,从而可上传至应用程序进行重载。然而,这种方法的主要缺点是:若无法优化应用程序的启动时间,那么实现此方案后,着色器开发的迭代时间很可能不会得到改善。优化后的源代码可直接传递给着色器编译器。在着色器源代码中使用运行时变量的具体性能权衡取决于游戏及其特定渲染技术,但该问题普遍存在,因此大型游戏引擎通常会实现一个通用系统——在构建时编译所有版本,运行时自动加载所需的着色器版本。
2025-06-30 17:11:08
709
原创 Fine Pruned Tiled Light Lists(精细删减的分块光照列表)
传统来说,实时延迟照明是使用 alpha 混合来一次累积一个灯光的照明贡献。它的主要优势在于能够将灯光分配和应用到代表光量内部三维空间点的像素上。另一方面,对于基本的前向光照模型,光照列表是根据网格实例和光照体之间的边界体交叉测试,在 CPU 上为每个网格实例建立的。这种方法通常会导致处理每个像素的光照数量大幅增加,尤其是对于大型网格,因为光照列表是网格实例在屏幕上占用的所有像素的共享列表。最近,随着DirectX 11的引入,基于计算的 Tile 光照成为了一种流行的延迟光照替代方案。
2025-05-31 20:28:53
855
原创 基于静态局部立方体贴图的高效软阴影
投射阴影的物体距离越远,阴影边缘越模糊,阴影的强度也越弱。然而,实际应用结果表明,尽管洞穴中不规则的几何形状在某些区域与近似的包围体(bounding volume)存在较大偏差,该技术依然能够稳定且高效地生成阴影,表现出良好的鲁棒性和实用性。通过光源位置和包围体(bounding volume)计算光线向量,求与包围体的交点,利用该交点构造向量从立方体贴图采样,采样的alpha通道决定阴影强度。然后,从该点出发,沿着六个正交方向(对应立方体的六个面)渲染场景,生成六张纹理图,合成一个完整的立方体贴图。
2025-04-30 17:53:18
1084
原创 使用自定义的RTTI属性对对象进行流操作
此系统的限制也是很显然的:在类或其父类的属性列表中,不可以同时存在两个或以上的对象具有相同的类型和名字。每个属性对应类中的一个成员变量,因此属性的大小是已知的。本文介绍了这样一种方法,通过向每个类中维护的自定义的运行时类型信息(RTTI)中添加特定的属性,而使对C++对象的编辑、载入和保存操作自动化.对象之间的链接(例如指针“也被考虑在内,且能够在载入时得以重建.在保存属性的同时也保存属性的描述,从而我们可将其与编译在当前执行文件中的元数据进行比较,干净利落地处理潜在的新旧版本文件不兼容的问题.
2025-03-31 22:58:06
1090
原创 可扩展自适应SSAO
屏幕空间环境光遮蔽(SSAO)已经成为实时渲染中产生小范围环境光和接触阴影效果的事实标准。随着GPU市场热设计功率(TDP)范围的不断扩展,以及虚拟现实(VR)实时渲染的性能缩放需求,本文提出了一个框架,以可扩展的方式实现SSAO,旨在为更广泛的硬件和使用场景提供统一的实现。自适应屏幕空间环境光遮蔽(ASSAO)是标准SSAO的实现,经过调优以实现可扩展性和灵活性,能够在质量与性能之间进行权衡,因此适用于更广泛的硬件和使用场景,具有统一的设置和视觉一致性。
2025-02-28 12:04:59
1341
原创 Writing an Efficient Vulkan Renderer
Vulkan 是一个新的显式跨平台图形 API。它引入了许多新概念,即使是经验丰富的图形程序员也可能不熟悉。Vulkan 的主要目标是性能——然而,获得良好的性能需要深入了解这些概念及其高效应用方法,以及特定驱动程序实现的实现方式。本文将探讨内存分配、描述符集管理、命令缓冲区记录、管道障碍、渲染通道等主题,并讨论如何优化当前桌面/移动 Vulkan 渲染器的 CPU 和 GPU 性能,同时展望未来的 Vulkan 渲染器可以进行哪些不同的改进。现代渲染器变得越来越复杂,必须支持许多不同的图形 API,它们具
2025-01-28 10:44:48
1534
原创 GPU实时的BC6H纹理压缩
这种编码要么分离色度和亮度,并在两个通道中存储亮度(LogLuv,YCoCg),要么存储归一化颜色和某种乘数(RGBE,RGBM,RGBD,RGBK)。J. M. P. van Waveren还通过减少计算的边界框的大小来降低编码误差,因为大多数颜色将位于新的边界框内,但这也往往会导致当块中的颜色聚集在边界框的边缘时出现明显的块状伪影。在某些应用程序需要实时的HDR压缩时,例如,当HDR数据在运行时生成或者离线压缩过慢,通常希望实时的压缩绕过CPU,并在GPU上运行压缩的算法。索引的计算与模式11相同。
2024-12-31 12:53:33
1190
原创 A Fast and High-Quality TextureAtlasing Algorithm
我们介绍了一种快速的图集生成算法,这种算法擅长填充孔洞并且可以处理高度不规则的形状。相比流行的“Tetris”方法,这种算法能够实现更紧密的排列。我们还解决了由纹理过滤引发的各种问题,包括一种在图块之间进行稳健过滤的方法。我们的算法已经实现为Maya插件,并在索尼的一些第一方游戏中成功应用。纹理映射需要为网格顶点分配(u, v)坐标(UV坐标),通常包括三个步骤:分割、参数化和打包[Lévy et al,2002]。在游戏中,分割通常是一个劳动密集的手动过程,涉及在接缝处展开网格。
2024-11-30 13:16:36
945
1
原创 游戏引擎中的颜色科学
游戏引擎中的渲染组件的作用是生成一个二维图片,在特定的时间从给定的视点观察的方向看到的一个三维空间的状态。他们的生成每一张图片都会被称为帧,他们生成的速度称为帧率。像素在每一帧中,游戏引擎的视觉输出基本上是一大堆彩色像素,像素(Pixel)是图像基本的单元,图像尺寸通常是像素的长宽。常见的显示器由数百万个像素,每个像素都会以一个比例发出红蓝绿三种颜色的光,一种通用制作颜色的系统称为RGB系统,他是游戏引擎通过计算颜色信息并发送给GPU最终显示给用户的方式。图像的RGB颜色数据存储在一个称
2024-10-30 00:43:50
1726
原创 跨游戏引擎的H5渲染解决方案(腾讯)
在H5中实际使用会用到一些特殊的图元,例如圆角头像,圆角边框等。UE4绘制接口可以称为 Immediate Mode接口,Unity UI系统提供了Immediate Mode接口的GUI系统,,由于效率,此系统只使用在编辑器模式下,在游戏环境中,使用UGUI,这样需要考虑将创建对象的接口转换为Immediate mode接口,同时也要考虑 C#和C++交互。图元绘制接口和对象接口的差别是,图元绘制接口每帧都有需要调用,无状态,而对象接口构造调用一次,析构调用一次,有状态,需要自行管理生命周期。
2024-09-21 21:28:38
2340
原创 彩色成像的基础和应用 原理 Principles (论文引用目录)
[1] E. Aas and J. Bogen. “Colors of Glacier Water.” Water Resources Research 24:4 (1988), 561–565.[2] P. M. Acosta-Serafini, I. Masaki, and C. G. Sodini. “A 1/3” VGA Linear Wide Dynamic Range CMOS Image Sensor Implementing a Predictive Multiple Sampling Al
2024-09-07 11:50:33
2757
原创 彩色成像的基础和应用 原理 Principles(四)人类视觉 修订版
由于此书覆盖的领域之巨大, 翻译此书是非常具有挑战性的工作,如有过错请谅解和指正。【注:彩色成像的基础(二)讨论光的传播 (三)光与物质的相互作用 暂时未翻译完成】前面几章讨论了光及其与物质的相互作用。当光线进入人眼时,会发生一种特别重要的相互作用。光落在视网膜上,会引发一连串最引人注目的事件。在本章和下一章中,我们将根据目前的知识水平,重点讨论这一系列事件。需要注意的是,色彩的神经基础仍是一个活跃的研究领域,因此关于人脑中更高层次色彩处理的知识仍然相对匮乏[496]。
2024-09-07 11:49:04
1950
原创 一个最基本的多线程3D渲染器方案
到目前为止,我们已经讨论了一些有助于提高整体性能的技术,但我们还可以更进一步,让不同的处理单元并行工作,以创建一帧的最终图像。近年来,GPU 处理能力与内存延迟之间的性能差距越来越大,由于系统内存中昂贵的数据访问速度,GPU 的工作变得更加困难,如图 3 所示。如图 5 所示,这种模式提供了一种高效的并行范式,每个任务都可以排队,并由可用的处理单元处理。这也避免了更标准的多线程方法的一些问题,因为任务提供了更精细的细分,可以更轻松地应对不均衡的计算,而多线程架构可能最终会等待某个特定子系统完成任务。
2024-08-31 01:16:26
1168
1
原创 Rasterized Voxel-Based Dynamic Global Illumination(基于光栅化体素的动态全局照明)
简介对于现代游戏来说,提供逼真的环境变得越来越重要,而逼真的照明则是其中的核心。因此,不仅要考虑直接光照,还要考虑间接光照。同时,现代游戏越来越多地为玩家提供了与游戏世界互动的可能性,即移动物体、破坏建筑物或动态改变照明。这就是动态全局照明发挥作用的地方;与静态的预计算解决方案相比,动态全局照明能够考虑到高度动态的环境。基于栅格化体素的动态全局照明考虑到了场景,尤其是室内场景,可能包含大量不同类型的光源(如点光源、聚光灯和定向光源)。同时,它在保持高交互帧率的同时,还能产生视觉效果良好且稳定的结果。
2024-07-30 09:36:44
1317
原创 游戏引擎的资产管道处理
对于游戏引擎的资源处理,引擎有着一种复杂的机制,我对于其中的理解是 它作为一种将艺术家所作的产品连接到游戏引擎中,再由游戏开发者去引用,是一种特别重要的工具。一个好的引擎资产管道,它能够使艺术家更专注于其领域相关的艺术作品,程序员也不需要在关注于其资产的兼容性。接下来我将涵盖如下内容:1 资产管道是什么? Asset Pipeline Overview 资产管道的概述2 资产管道如何设计,设计资产管道的主要目标和挑战是什么?3 推或拉管道模型:从不同的角度解决问题,以实现更好
2024-07-22 16:55:30
1500
1
原创 distance delayed sound
在本章中,我们将讨论在游戏音频中使用距离延迟的重要性。我们将首先通过一个常见的例子——闪电和雷鸣,来展示这种重要性并解释距离延迟音频的基础知识。我们将讨论计算速度、距离和时间的数学和方程式,以确定距离延迟。这将最终给我们一个以秒为单位的距离延迟值,用于确定延迟声音的时间长度以创建逼真的声音距离效果。然后,我们将进入几个代码示例,以演示一个示例声音调度器,并基于虚幻引擎4创建一个实际的游戏引擎项目。让我们开始吧!
2024-06-30 22:52:43
1168
原创 Scheduling Game Event
虚拟时间调度器将时间划分为若干帧,任务在帧与帧之间分批执行,在 "虚拟时间 "中运行,然后在渲染每一帧时与实时时间同步。然而,帧与帧之间几十毫秒的时间对计算机来说是非常宝贵的,尤其是在有效管理的情况下。例如,一个事件可以被安排在每个帧开始后的10毫秒发生,或者它可以在每个帧中执行五次,这在模拟时间中是均匀分布的。更新帧计数后,执行所有时间事件,将模拟时间提前到帧结束时间,执行所有帧事件,最后执行渲染任务(在示例调度程序中,渲染任务是一个特殊的帧任务,没有起始时间、周期或持续时间--它总是每帧执行一次)。
2024-05-31 12:36:30
1008
原创 What to Look for When Evaluating Middleware for Integration
Game Engine Gem
2024-02-28 21:02:25
931
原创 后处理的体积光散射
在我们的方法中,我们应用逐像素后处理操作,不需要预处理或其他场景设置,并且允许在任意复杂的动画场景中提供详细的光轴。在这里,我们引入密度来允许控制样本之间的分离,在这种情况下,我们希望减少样本迭代的总数,同时保留足够的无混叠采样密度。在适当的条件下,当空间中含有足够密集的光散射介质混合物(如气体分子和气溶胶)时,被光线遮挡的物体会投射出大量阴影,并似乎形成从光源辐射出来的光线。在本章中,我们将介绍一种简单的后处理方法,它可以产生由于大气中的阴影而产生的体积光散射效果。然后对遮挡的场景对象进行无模板位渲染。
2024-01-09 13:06:32
1300
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅