当前位置: 首页 > news >正文

技术美术一百问(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)正在逐渐取代它。

相关文章:

技术美术一百问(02)

问题 前向渲染和延迟渲染的流程 前向渲染和延迟渲染的区别 G-Buffer是什么 前向渲染和延迟渲染各自擅长的方向总结 GPU pipeline是怎么样的 Tessellation的三个阶段 什么是图形渲染API? 常见的图形渲染API有哪些? 答案 1.前向渲染和延迟渲染的流程 【例图…...

12 函数的应用

函数的应用 一、Shell递归函数 ​ 函数优点: ​ 函数在程序设计中是一个非常重要的概念,它可以将程序划分成一个个功能相对独立的代码块,使代码的模块化更好,结构更加清晰,并可以有效地减少程序的代码量。 ​ 递归…...

鸿蒙开发(NEXT/API 12)【硬件(接入手写套件)】手写功能开发

接入手写套件后,可以在应用中创建手写功能界面。界面包括手写画布和笔刷工具栏两部分,手写画布部分支持手写笔和手指的书写效果绘制,笔刷工具栏部分提供多种笔刷和编辑工具,并支持对手写功能进行设置。接入手写套件后将自动开启一…...

基于python+flask+mysql的音频信息隐藏系统

博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…...

18724 二叉树的遍历运算

### 思路 1. **递归构建树**: - 先序遍历的第一个节点是根节点。 - 在中序遍历中找到根节点的位置,左边部分是左子树,右边部分是右子树。 - 递归构建左子树和右子树。 2. **递归生成后序遍历**: - 递归生成左子树的…...

代理模式简介:静态代理VS与动态代理

代理模式:静态代理VS动态代理 1、定义2、分类2.1 静态代理2.2 动态代理 3、使用场景4、总结 💖The Begin💖点点关注,收藏不迷路💖 1、定义 代理模式是一种设计模式,通过代理对象控制对目标对象的访问。简而…...

使用 Dockerfile 和启动脚本注册 XXL-Job 执行器的正确 IP 地址

解决方案:使用 Dockerfile 和启动脚本注册 XXL-Job 执行器的正确 IP 地址 在使用容器化方式注册 XXL-Job 执行器时,由于容器的 IP 地址是动态分配的,可能会导致调度中心无法访问执行器。为了解决这个问题,可以使用 Dockerfile 和…...

Python连接Kafka收发数据等操作

目录 一、Kafka 二、发送端(生产者) 三、接收端(消费者) 四、其他操作 一、Kafka Apache Kafka 是一个开源流处理平台,由 LinkedIn 开发,并于 2011 年成为 Apache 软件基金会的一部分。Kafka 广泛用于构…...

MySql在更新操作时引入“两阶段提交”的必要性

日志模块有两个redo log和binlog,redo log 是引擎层的日志(负责存储相关的事),binlog是在Server层,主要做MySQL共嗯那个层面的事情。redo log就像一个缓冲区,可以让当更新操作的时候先放redo log中&#xf…...

充气模块方案——无刷充气泵pcba方案

在方案开发中,充气效率是无刷充气泵PCBA方案开发中的关键问题。一般通过优化电路设计和控制算法,可以实现高效的气体压缩和快速的充气效果。另外,选择合理的电机驱动器和传感器等元器件能够提高打气泵的功率和效率,减少充气时间&a…...

[sql-03] 求阅读至少两章的人数

准备数据 CREATE TABLE book_read (bookid varchar(150) NOT NULL COMMENT 书籍ID,username varchar(150) DEFAULT NULL COMMENT 用户名,seq varchar(150) comment 章节ID ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT 用户阅读表insert into book_read values(《太子日子》…...

Linux如何通过链接下载文件

在Linux系统中,你可以通过多种方式通过链接下载文件。这些方式包括使用命令行工具(如wget、curl、axel等)和图形界面程序(如浏览器或文件管理器)。以下是几种常用的命令行方法: 1. 使用wget wget是一个非交…...

seL4 IPC(五)

官网链接:link 求解 代码中的很多方法例如这一个教程里面的seL4_GetMR(0),我在官方给的手册和API中都搜不到,想问一下大家这些大家都是在哪里搜的!! IPC seL4中的IPC和一般OS中讲的IPC概念相差比较大,根…...

【Java】多线程基础操作

多线程基础操作 Thread类回顾Thread类观察线程运行线程的休眠常用方法构造方法属性获取方法 中断线程线程状态线程等待 初识synchronized问题引入初步使用初步了解可重入锁死锁 volatile问题引入初步使用volatile 与 synchronized 线程顺序控制初步了解wait()notify()防止线程饿…...

基于Hive和Hadoop的病例分析系统

本项目是一个基于大数据技术的医疗病历分析系统,旨在为用户提供全面的病历信息和深入的医疗数据分析。系统采用 Hadoop 平台进行大规模数据存储和处理,利用 MapReduce 进行数据分析和处理,通过 Sqoop 实现数据的导入导出,以 Spark…...

数据结构编程实践20讲(Python版)—03栈

本文目录 03 栈 StackS1 说明S2 示例基于列表的实现基于链表的实现 S3 问题:复杂嵌套结构的括号匹配问题求解思路Python3程序 S4 问题:基于栈的阶乘计算VS递归实现求解思路Python3程序 S5 问题:逆波兰表示法(后缀表达式)求值求解思路Python3程…...

【注册/登录安全分析报告:孔夫子旧书网】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...

PMP--二模--解题--141-150

文章目录 14.敏捷--创建敏捷环境--团队构成--混合项目环境,通常是自组织团队,即团队成员自己决定谁做什么,而不是项目经理决定。易混--常见场景--一个新人加入141、 [单选] 在一个混合项目的执行过程中,不得不更换一个开发人员。新…...

我的领域-关怀三次元成长的二次元虚拟陪伴 | OPENAIGC开发者大赛高校组AI创作力奖

在第二届拯救者杯OPENAIGC开发者大赛中,涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到,我们特意开设了优秀作品报道专栏,旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者,希望能带给…...

个人账号(学校+个人)申请专利过程中遇见的问题

一、请指定一位申请人作为代表人 因为是拿个人账号申请的专利,同时要求学校是第一申请人,所以可以再添加一个第二申请人,然后勾选第二申请人为代表人就可以提交申请了(注意:两个申请人只能减免75%,也就是要…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

Android屏幕刷新率与FPS(Frames Per Second) 120hz

Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数,单位是赫兹(Hz)。 60Hz 屏幕:每秒刷新 60 次,每次刷新间隔约 16.67ms 90Hz 屏幕:每秒刷新 90 次,…...