技术美术一百问(02)
问题
前向渲染和延迟渲染的流程
前向渲染和延迟渲染的区别
G-Buffer是什么
前向渲染和延迟渲染各自擅长的方向总结
GPU pipeline是怎么样的
Tessellation的三个阶段
什么是图形渲染API?
常见的图形渲染API有哪些?
答案
1.前向渲染和延迟渲染的流程
【例图转自知乎】
前向渲染和延迟渲染都是图形管线(graphics pipeline)中的渲染技术,它们涉及的步骤不完全相同。
在前向渲染中,光照计算通常是在像素着色器(pixel shader)阶段进行的,因此光照计算被包含在了图形管线的像素处理阶段。
而在延迟渲染中,光照计算通常是在后期阶段进行的,因此光照计算不在图形管线的常规步骤中,而是在后处理阶段。
2.前向渲染和延迟渲染的优缺点
【例图转载自Cambridge Computer Science Talks】
结论先赏:
Forward rendering的优缺点:
DEFERRED Rendering的优缺点:
上图2可以看出:DEFERRED Rendering彻底把mesh部分和light部分(fragment shader中的)分开。分离了mesh和light的依赖关系。
3.G-Buffer是什么
G-buffer(几何缓冲区)是在计算机图形学中的一个重要概念,用于在渲染管线中存储与几何相关的信息。它通常是一个包含多个纹理或缓冲区的帧缓冲对象,每个纹理或缓冲区存储不同类型的信息。G-buffer 的内容可以因渲染管线的实现方式而异,但通常包括以下一些常见的信息: 1. 位置信息 (Position): 存储每个像素或片段在世界空间或相机空间中的位置坐标。这对于后续的光照计算、阴影计算等操作非常有用。 2. 法线信息 (Normal): 存储每个像素或片段的法线向量。法线向量通常被用来进行光照计算、阴影计算以及各种表面效果的计算,如凹凸映射、法线贴图等。 3. 颜色信息 (Albedo): 存储每个像素或片段的基本颜色信息,即表面的固有颜色,不包含光照效果。这对于渲染后处理、图像效果等非光照相关的操作非常有用。 4. 材质信息 (Material): 存储每个像素或片段的材质属性,如反射率、折射率、粗糙度等。这对于实现更复杂的材质效果、光照模型以及渲染效果非常重要。 5. 深度信息 (Depth): 存储每个像素或片段到相机的距离或深度值。深度信息在进行像素遮挡、深度测试以及后期景深效果等方面非常关键。 这些信息一起构成了 G-buffer,通过在渲染管线的不同阶段捕获和存储这些信息,可以使得后续的渲染操作更加灵活、高效,并且能够实现更高质量的图形效果。
Deferred rendering完成G-buffer之后
we have to draw the entire scene using the same BRDF,
what we can do is assign IDs to each material (e.g. 8-bi number), branch to different ID
Luckily, pixels that are spatially local together are very likely to use the same material, so we actually make
very strong use of spacial locality
4.前向渲染和延迟渲染各自擅长的方向总结
Forward rendering
优点:抗锯齿,适合半透明、透明
(前向渲染的抗锯齿效果通常会更好,这是因为前向渲染在处理像素时,会考虑到场景中每个像素的光照和材质属性。由于它在渲染过程中直接计算光照和材质属性,因此可以更准确地确定像素的颜色和亮度。这种准确性有助于减少锯齿现象的出现,使得图像边缘更加平滑和真实。相比之下,延迟渲染通常会导致锯齿效果更明显,因为它将光照和材质属性的计算延迟到后期处理阶段,可能会导致图像边缘的像素信息不够精确,从而产生锯齿现象。)
Deferred rendering(将光照延迟到后期进行,减少计算量)
优点:适合复杂光照,固体
无法直接支持半透明物体,和抗锯齿效果。
结论和现状:
目前,AAA游戏中的主流渲染方式通常是延迟渲染(deferred rendering)。延迟渲染通过将场景中的几何体信息和光照信息分开处理,可以更有效地处理大量的光源和复杂的材质效果,从而提高了渲染效率和图形质量。虽然前向渲染(forward rendering)在某些情况下仍然有其优势,但延迟渲染已经成为许多大型游戏开发项目的首选渲染技术。
2007/08引入deferred rendering之后,它成为AAA游戏的标准,但Doom又用了Forward rendering,因为以前的成本来自于draw call因为当时还在使用GPU,现在的成本来自于memory
GTA V先用deferred rendering,再把透明区域单独拿出来forward rendering
5.GPU pipeline
【本回答转载自Cambridge Computer Science Talks】
"input assembler”接收原始的顶点数据,例如顶点坐标、法线、纹理坐标
6.Tessellation的三个阶段
-
Hull Shader(壳着色器):
- 输入:一组控制点(通常是补丁的顶点)。
- 功能:定义细分级别(Tessellation Level),决定几何细分的密度,控制生成多少新顶点。它还可以为每个补丁生成新的顶点数据。
-
Tessellator(细分器):
- 输入:Hull Shader 提供的细分级别。
- 功能:根据细分级别对补丁进行几何细分,生成更多的顶点。它是硬件固定功能的一部分,不需要编写代码。
- 输出:细分后的新顶点的参数化坐标(通常是三角形、四边形等顶点的UV坐标)。
-
Domain Shader(域着色器):
- 输入:Tessellator 生成的细分后的参数化坐标。
- 功能:通过这些参数化坐标计算每个新顶点的最终位置,并可以进行其他操作(如计算光照、法线等)。它负责将参数化空间的细分点转换为最终的三维坐标。
hull shader defines the pattern for the output triangles,
tesselator create those triangles based on that pattern,
domain shader will then position the triangles based on some formulas.
A potential use case for tessellation is taking in a lowpoly model and acting a highpoly model by introducing more triangles
7.什么是图形渲染API?
图形渲染API(Graphics Rendering API)是一组允许程序与图形硬件(如GPU)进行交互的编程接口。它为开发者提供了访问底层图形硬件的功能,使得程序能够绘制图像、处理几何体、应用纹理、执行光照计算等任务,而不需要直接控制硬件细节。
图形渲染API的作用:
- 抽象硬件细节:API封装了底层硬件操作,开发者通过API调用即可利用GPU的强大计算能力,而不必直接操作硬件。
- 跨平台支持:通过使用标准化的API,开发者可以编写适用于多个操作系统或设备的代码,而不需要为每个平台编写不同的代码。
- 高效渲染:API提供了各种优化手段,使得复杂的3D图形渲染任务能够以高效的方式执行。
8.常见的图形渲染API有哪些?
常见的图形渲染API有以下几种:
-
Direct3D:
- 开发者:微软(Microsoft)
- 平台:Windows
- 描述:这是微软Windows平台上使用最广泛的图形API,广泛应用于Windows游戏和应用程序开发。它是DirectX的一部分,包含了渲染2D和3D图形的功能,支持硬件加速。
- 应用场景:Direct3D 是微软的专有图形API,几乎是Windows平台上开发3D图形应用(尤其是PC游戏)的标准。它还广泛用于Xbox游戏开发、虚拟现实(VR)以及Windows的图形应用程序中。
- 优点:
- 深度集成到Windows操作系统中,优化良好,适合Windows和Xbox平台的高性能应用。
- 与微软的DirectX工具链(包括音频、输入等)高度集成。
- 支持最新的图形硬件和技术(如光线追踪、着色器模型等)。
- 缺点:
- 仅限于Windows和Xbox平台,不是跨平台解决方案。
- 开发者需要为其他平台(如macOS或Linux)选择其他API。
-
OpenGL:
- 开发者:Khronos Group
- 平台:跨平台(Windows、Linux、macOS等)
- 描述:OpenGL 是一个开放标准的图形API,支持多种操作系统和硬件。它在图形开发界非常受欢迎,应用于游戏、图形工具和科学计算等领域。
- 常用性:曾经非常常用,尤其在跨平台应用和图形工具中,但近年来被Vulkan等现代API部分取代。
- 应用场景:OpenGL 曾是跨平台图形渲染的标准,适用于Windows、macOS、Linux等多种操作系统。它广泛应用于CAD软件、科学计算、可视化工具,以及早期的PC游戏开发。由于其跨平台特性,许多跨平台的应用程序、模拟器以及3D软件(如Blender)都依赖OpenGL。
- 优点:
- 真正的跨平台支持,适用于多种桌面和嵌入式系统。
- 生态系统成熟,支持的硬件广泛,拥有大量的开发文档和社区支持。
- 缺点:
- 由于API设计较为陈旧,性能不如现代的低开销API(如Vulkan或Direct3D 12)。
- 多线程渲染性能有限,灵活性较低,优化较为复杂。
-
Vulkan:
- 开发者:Khronos Group
- 平台:跨平台(Windows、Linux、Android等)
- 描述:Vulkan 是一个现代的、低开销的图形API,旨在替代OpenGL。它提供了更直接的硬件访问和更高效的多线程渲染,适合高性能应用(如游戏引擎、虚拟现实)。Vulkan 在细粒度控制和性能优化方面优于传统的OpenGL。
- 常用性:越来越常用,特别是在高性能游戏和多平台项目中。
- 应用场景:Vulkan 是一个低开销、跨平台的图形API,旨在替代OpenGL,提供更高效的硬件访问。它广泛用于跨平台游戏开发、虚拟现实(VR)、增强现实(AR)和图形密集型应用。特别是对于需要多线程渲染的高性能应用(如AAA级游戏),Vulkan 提供了卓越的性能和灵活性。它在Android、Windows、Linux等平台上都有广泛应用,很多现代游戏引擎(如Unreal Engine、Unity)都支持Vulkan。
- 优点:
- 更加现代化的设计,低开销,允许开发者直接管理GPU资源,提高渲染性能。
- 支持跨平台,适用于Windows、Linux、Android等多种操作系统。
- 优化多线程渲染,提供更高效的硬件控制,适合大型和复杂的图形项目。
- 缺点:
- 编程复杂度较高,相比Direct3D或OpenGL,Vulkan需要开发者管理更多的细节,学习曲线较陡。
- 对于小型或简单项目,开发成本可能较高。
-
Metal:
- 开发者:苹果公司(Apple)
- 平台:iOS、macOS
- 描述:Metal 是苹果公司为iOS和macOS开发的低开销图形API,类似于Vulkan。它旨在提供高性能图形和计算能力,广泛用于苹果平台上的应用和游戏开发。
- 常用性:在苹果生态系统中(iOS 和 macOS)非常常用。
- 应用场景:Metal 是苹果公司为其设备专门开发的低开销、高性能的图形API。它广泛应用于iPhone、iPad和Mac上的游戏、应用程序、虚拟现实(VR)、增强现实(AR)以及专业图形工具(如Final Cut Pro、Photoshop等)。
-
WebGL:
- 开发者:Khronos Group
- 平台:浏览器(跨平台)
- 描述:WebGL 是基于OpenGL ES的API,专门用于在网页中渲染3D图形。它可以通过JavaScript来调用,在浏览器中无需安装额外插件即可显示复杂的3D图形。
- 常用性:非常常用,尤其是在网页上的3D图形渲染方面。
- 应用场景:WebGL 允许开发者在浏览器中直接渲染3D图形,而无需用户安装额外的插件或软件。它被广泛应用于在线游戏、互动3D模型、数据可视化和增强现实(AR)应用中。例如,Google Maps的3D视图和各种在线3D模型展示平台都使用WebGL。
- 优点:
- 跨平台支持:适用于大多数现代浏览器(如Chrome、Firefox、Safari、Edge等)。
- 开发门槛低,可以使用JavaScript直接调用API。
- 缺点:
- 受限于浏览器的性能和安全沙箱,性能不如本地图形API(如Metal、Vulkan等)。
- 复杂的3D渲染可能会受到浏览器环境的制约。
-
OpenGL ES:
- 开发者:Khronos Group
- 平台:移动设备(Android、iOS等)
- 描述:OpenGL ES 是OpenGL的简化版,专门用于嵌入式系统,如智能手机和平板电脑。它是移动游戏和应用程序开发中常用的图形API。
- 优点:
- 跨平台支持:兼容Android、iOS、以及许多嵌入式系统设备。
- 在移动设备上性能较好,适合资源受限的环境。
- 缺点:
- 随着Vulkan和Metal等更现代API的普及,OpenGL ES逐渐被取代,尽管它仍然在一些旧设备上使用。
- 功能和灵活性不如Vulkan或Metal,尤其在多线程渲染和细粒度控制上。
总结:
- Direct3D 是Windows和Xbox平台上最常用的图形API,特别是在PC游戏开发中,它几乎是行业标准。
- OpenGL 曾经是跨平台的主要图形API,虽然如今它在桌面应用中仍然有一定的使用,但逐渐被Vulkan替代,特别是在游戏开发和高性能渲染中。
- Vulkan 是当今跨平台图形开发的首选API之一,特别适用于高性能、复杂的应用。尽管它的学习成本较高,但它的多平台和高效特性使得它在游戏引擎和虚拟现实中越来越受欢迎。
- Metal 在苹果平台上非常流行,几乎是iOS和macOS上的标准API。
- WebGL 在网页端3D渲染中无可替代,非常常用,尤其在跨平台的应用场景下。
- OpenGL ES 在移动设备和嵌入式系统上仍然常用,尽管现代的API(如Vulkan)正在逐渐取代它。
原文地址:https://blog.csdn.net/charon8778/article/details/142335590
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!