技术美术一百问(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的三个阶段

  1. Hull Shader(壳着色器):

    • 输入:一组控制点(通常是补丁的顶点)。
    • 功能:定义细分级别(Tessellation Level),决定几何细分的密度,控制生成多少新顶点。它还可以为每个补丁生成新的顶点数据。
  2. Tessellator(细分器):

    • 输入:Hull Shader 提供的细分级别。
    • 功能:根据细分级别对补丁进行几何细分,生成更多的顶点。它是硬件固定功能的一部分,不需要编写代码。
    • 输出:细分后的新顶点的参数化坐标(通常是三角形、四边形等顶点的UV坐标)。
  3. 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有以下几种:

  1. 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。
  2. OpenGL

    • 开发者:Khronos Group
    • 平台:跨平台(Windows、Linux、macOS等)
    • 描述:OpenGL 是一个开放标准的图形API,支持多种操作系统和硬件。它在图形开发界非常受欢迎,应用于游戏、图形工具和科学计算等领域。
    • 常用性:曾经非常常用,尤其在跨平台应用和图形工具中,但近年来被Vulkan等现代API部分取代。
    • 应用场景:OpenGL 曾是跨平台图形渲染的标准,适用于Windows、macOS、Linux等多种操作系统。它广泛应用于CAD软件、科学计算、可视化工具,以及早期的PC游戏开发。由于其跨平台特性,许多跨平台的应用程序、模拟器以及3D软件(如Blender)都依赖OpenGL。
    • 优点
      • 真正的跨平台支持,适用于多种桌面和嵌入式系统。
      • 生态系统成熟,支持的硬件广泛,拥有大量的开发文档和社区支持。
    • 缺点
      • 由于API设计较为陈旧,性能不如现代的低开销API(如Vulkan或Direct3D 12)。
      • 多线程渲染性能有限,灵活性较低,优化较为复杂。
  3. 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需要开发者管理更多的细节,学习曲线较陡。
      • 对于小型或简单项目,开发成本可能较高。
  4. Metal

    • 开发者:苹果公司(Apple)
    • 平台:iOS、macOS
    • 描述:Metal 是苹果公司为iOS和macOS开发的低开销图形API,类似于Vulkan。它旨在提供高性能图形和计算能力,广泛用于苹果平台上的应用和游戏开发。
    • 常用性:在苹果生态系统中(iOS 和 macOS)非常常用。
    • 应用场景:Metal 是苹果公司为其设备专门开发的低开销、高性能的图形API。它广泛应用于iPhone、iPad和Mac上的游戏、应用程序、虚拟现实(VR)、增强现实(AR)以及专业图形工具(如Final Cut Pro、Photoshop等)。
  5. 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渲染可能会受到浏览器环境的制约。
  6. OpenGL ES

    • 开发者:Khronos Group
    • 平台:移动设备(Android、iOS等)
    • 描述:OpenGL ES 是OpenGL的简化版,专门用于嵌入式系统,如智能手机和平板电脑。它是移动游戏和应用程序开发中常用的图形API。
    • 优点
      • 跨平台支持:兼容Android、iOS、以及许多嵌入式系统设备。
      • 在移动设备上性能较好,适合资源受限的环境。
    • 缺点
      • 随着Vulkan和Metal等更现代API的普及,OpenGL ES逐渐被取代,尽管它仍然在一些旧设备上使用。
      • 功能和灵活性不如Vulkan或Metal,尤其在多线程渲染和细粒度控制上。

总结:

  • Direct3DWindows和Xbox平台上最常用的图形API,特别是在PC游戏开发中,它几乎是行业标准。
  • OpenGL 曾经是跨平台的主要图形API,虽然如今它在桌面应用中仍然有一定的使用,但逐渐被Vulkan替代,特别是在游戏开发和高性能渲染中。
  • Vulkan 是当今跨平台图形开发的首选API之一,特别适用于高性能、复杂的应用。尽管它的学习成本较高,但它的多平台和高效特性使得它在游戏引擎和虚拟现实中越来越受欢迎。
  • Metal苹果平台上非常流行,几乎是iOS和macOS上的标准API。
  • WebGL网页端3D渲染中无可替代,非常常用,尤其在跨平台的应用场景下。
  • OpenGL ES 在移动设备和嵌入式系统上仍然常用,尽管现代的API(如Vulkan)正在逐渐取代它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/426969.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Rust直接编译单个的Solidity合约

这里写自定义目录标题 使用Rust直接编译单个的Solidity合约前言预备知识准备工作示例 使用Rust直接编译单个的Solidity合约 前言 我们知道,我们平常开发Solidity智能合约时一般使用Hardhat框架,但是如果你是一个Rustacean (这是由 “Rust” 和 “crust…

2024年【中级消防设施操作员(考前冲刺)】及中级消防设施操作员(考前冲刺)模拟考试题库

题库来源:安全生产模拟考试一点通公众号小程序 中级消防设施操作员(考前冲刺)根据新中级消防设施操作员(考前冲刺)考试大纲要求,安全生产模拟考试一点通将中级消防设施操作员(考前冲刺&#xf…

设计模式之建造者模式(通俗易懂--代码辅助理解【Java版】)

文章目录 设计模式概述1、建造者模式2、建造者模式使用场景3、优点4、缺点5、主要角色6、代码示例:1)实现要求2)UML图3)实现步骤:1)创建一个表示食物条目和食物包装的接口2)创建实现Packing接口的实体类3&a…

golang 字符串浅析

go的字符串是只读的 测试源代码 package mainimport ("fmt""unsafe" )func swap(x, y string) (string, string) {return y, x }func print_string(obj *string, msg string) {string_ptr : (*[2]uintptr)(unsafe.Pointer(obj))first_obj_addr : string_…

MySQL系列—13.事务

1、事务 事务是逻辑上的一组操作,要么都执行,要么都不执行。 事务控制语法 - 事务开始 begin; - 事务提交,提交后就会写入物理磁盘中去 commit; - 事务回滚,事务提交后,无法回滚 rollback;事务的四大特性&#xff0…

基于51单片机的温度电流电压检测系统(压力、电压、温度、电流、LCD1602)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,通过DS18B20检测温度,滑动变阻器连接数模转换器模拟电流、电压,通过LCD1602显示,程序里设置温度阈值为40,电流阈值为60&am…

六西格玛咨询:石油机械制造企业的成本控制与优化专家

一、石油机械制造行业现状及主要困扰 随着全球能源需求的日益增长,石油开采和生产设备需求不断增加,石油机械制造行业在过去数十年里得到了迅猛发展。然而,石油机械制造作为一个高度复杂且技术密集的行业,也面临着多重挑战。首先…

【Vue】- 路由及传参

文章目录 知识回顾前言源码分析1. 声明式导航2. 路由传参3. 可选符4. 重定向5. 4046. 跳转及传参7. 路由懒加载拓展知识总结router-link静态传参和动态路由的对比知识回顾 前言 什么是单页面应用程序? ● 所有功能在一个html页面上实现 单页面应用优缺点? ● 优点:按需更新…

大模型时代的 AI 产品经理何去何从?

每天 LLM 相关的资讯都让人过载。作为 AI 产品经理,你是更兴奋呢,还是更担忧呢?整理了一下个人近期的思考,欢迎感兴趣的朋友一起交流。不管答案如何,相信我们都不应置身事外。 1 关于大模型‍‍ 大模型的各种原理讲…

OpenAI O1热度己过-如此快速的冷场带来的是人们更多对现今“AI”的思考

引入o1的瞬间辉煌 o1如耀眼的新星,闪耀于科技天空。发布时,因其思考能力而备受瞩目。它能在回答问题之前进行更多的思考,尤其擅长复杂推理。这种能力引发了众多用户的好奇与热情。诸如“9.8和9.11哪个大?”的简单问题被广泛地验证…

上海人工智能实验室开源视频生成模型Vchitect 2.0 可生成20秒高清视频

上海人工智能实验室日前推出的Vchitect2.0视频生成模型正在悄然改变视频创作的游戏规则。这款尖端AI工具不仅简化了视频制作流程,还为创作者提供了前所未有的灵活性和高质量输出。 Vchitect2.0的核心优势在于其强大的生成能力和高度的可定制性。用户只需输入文字描…

Java获取随机数

在Java中获取随机数通常会使用java.util.Random类或者Math.random()方法 1.java.util.Random java.util.Random类用于生成伪随机数。 // 使用无参构造方法创建Random对象Random rand new Random();// 生成一个[0, 100)范围内的随机整数int randomInt rand.nextInt(100);Sys…

算法练习题26——多项式输出(模拟)

输入格式 输入共有 2 行 第一行 1 个整数,n,表示一元多项式的次数。 第二行有 n1 个整数,其中第 i 个整数表示第 n−i1 次项的系数,每两个整数之间用空格隔开。 输出格式 输出共 1 行,按题目所述格式输出多项式。…

【ARM】中断的处理

ARM的异常向量表 如果发生异常后并没有exception level切换,并且发生异常之 前使用的栈指针是SP_EL0,那么使用第一组异常向量表。如果发生异常后并没有exception level切换,并且发生异常之 前使用的栈指针是SP_EL1/2/3,那么使用第…

雷朋太阳镜和AEG的制胜法宝是:音乐节以及数据驱动的品牌推广

图片来源:Photo by Ethan Robertson on Unsplash 几十年来,我们见证了流行文化偶像对大众的影响。雷朋一直是一个深受偶像和大众喜爱的品牌。借助这股浪潮,雷朋与全球最大的娱乐公司之一AEG合作,吸引消费者,并以沉浸式…

JAVA-集合相关

HashMap如何解决哈希冲突的? 计算hash值,基于hashCode计算冲突之后,先是使用链式寻址法当链表长度大于8,且hash表的容量大于60的时候,再添加元素则转化成红黑树 为什么计算hash值是,是将hash地址的值右移1…

推荐10款最佳的电脑监控软件,知名电脑监控软件推荐

随着互联网和科技的飞速发展,电脑监控软件成为企业和个人用户管理和保护信息安全的必备工具。这些软件可以帮助你实时了解电脑的使用情况、保护隐私、优化工作效率,甚至防止潜在的安全威胁。在这篇文章中,我们将为你推荐10款最佳的电脑监控软…

k8s的搭建

一、安装环境 准备三台主机: 192.168.1.66 k8s-master 192.168.1.77 k8s-node01 192.168.1.88 k8s-node02 网段: Pod ⽹段 172.16.0.0/16 Service ⽹段 10.96.0.0/16 注:宿主机⽹段、Pod…

乱弹篇(52)旁观者说

众所周知,地球人都晓得“股市是经济的晴雨表”这个定律,那么中秋节后的中国内地股市,为何在节后的9月18日首个交易日,上证指数仍继续下行,盘中还一度跌破2700点创7个多月以来新低,整体市场数千个股下跌呢&a…

c#进度条实现方法

在使用c#做WinFrom开发时,经常会用到进度条(ProgressBar)。那么如何才能实现winfrom进度条及进度信息提示呢? 方法一:多线程 使用c#做WinFrom开发,要实现进度条效果就需要用到多线程,如果不采…