游戏开发52课 渲染路径

news2024/11/14 21:40:31

4.6 渲染路径(Rendering Path)

4.6.1 经典顶点光(Legacy Vertex Lit)

严格来说,它也是前向渲染的一种,但有些引擎(如Unity)将它单独抽离出来。由于光照计算在顶点,所以效果和消耗跟4.5.2 Gouraud Shading类似,是早期GPU使用较多的一种渲染方式。

4.6.2 前向渲染(Forward Rendering)

前向渲染是传统的一种渲染方式,受到广泛的硬件支持。它渲染的思路就是按照渲染管线的流程一步步渲染,最终将颜色绘制到Render Target(下图)。

它的消耗跟物体数量和灯光数量有关,是O(Nobject∗Nlight)O(Nobject∗Nlight)的关系,对于灯光数量较多的场景,显得力不从心。光照计算伪代码:

Color color = Color.black;
for each(light in lights)
{
    for each(object in objectsEffectedByLight)
    {
        color += object.color * light.color;
    }
}

有些引擎(如Unity)在灯光数量多的情况下,会做一些优化:对所有灯光按亮度进行排序,将最亮的那部分灯光做逐像素计算,中间的一部分做逐顶点计算,排在后面的用球谐函数(SH,Spherical Harmonics)模拟。(见下图)

4.6.3 延迟渲染(Deferred Shading)

延迟渲染的精髓在于将灯光计算延后,与场景物体数量解耦。具体做法是:先将所有物体渲染一遍,但不计算光照,将物体渲染后的像素数据(Position/Normal/DiffuseColor和其他参数)存于各自的GBuffer;然后,利用这些数据采用后处理方式做光照计算。(下图)

实现伪代码:

// 第一遍:渲染物体不带光照的数据,存于各自GBuffer。
for each(object in objects)
{
    RenderObjectDataToGBuffers(object);
}

// 第二遍:将所有光照对所有像素做计算。
for each(light in lights)
{
    Color color = Color.black;
    for each(pixel in pixels)
    {
        color += CalculateLightColor(light, pixelDatas);
    }
    WriteColorToFinalRenderTarget(color);
}

由于最耗时的光照计算延迟到后处理阶段,所以跟场景的物体数量解耦,只跟Render Targe尺寸相关,复杂度是O(Nlight∗Wrendertarget∗Hrendertarget)O(Nlight∗Wrendertarget∗Hrendertarget)。延迟渲染并没有在低端设备支持,要求OpenGL ES 3.0以上,多渲染纹理以及更多的显存和带宽。

4.6.4 基于瓦片的延迟渲染(Tile-Based Deferred Rendering,TBDR)

针对Deferred Shading的缺点,出现了一种改进方案,它就是Tile-Based Deferred Rendering。此种渲染方式已广泛应用于GPU图形渲染架构中。实现思路:

  • 将渲染纹理分成一个个小块(Tile),通常是32x32。
  • 根据Tile内的Depth计算出其Bounding Box。
  • 判断Tile的Bounding Box和Light是否求交。
  • 摒弃不相交的Light,得到对Tile有作用的Light列表。
  • 遍历所有Tile,计算每个Tile有作用的Llight列表的光照。

4.6.5 渲染路径总结

前面已经描述了各个方式的优缺点,下面详细列出它们的性能消耗及平台要求。

此外,还有Forward+,Physically Based Rendering(PBR),Legacy Deferred Rendering(Unity)等渲染方式,这里不详细描述,有兴趣的可以找资料了解。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务架构系列(一)之虚拟平台、分布式存储、高可用k8s集群环境搭建

一、物理机虚拟平台搭建 1、由实向需架构转换图(每台物理机要求两块硬盘用来做分布式存储和系统盘,我的是10年前的老机器没啥大的要求): 2、系统安装去官网下载 Proxmox VE 7.x ISO Installer (按需求选择版本&#x…

sublime text 4的安装/配置中文/更换配色方案

效果 安装 参考文章:Sublime Text v4.0(4143)安装方法 Sublime Text v4.0(4143)下载地址:https://www.sublimetext.com/download_thanks?targetwin-x64 安装软件找到软件安装位置,找到sublime_text.exe将sublime_text.exe 拖入16进制编辑…

[附源码]计算机毕业设计基于协同过滤的资讯推送平台Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

安卓玩机搞机技巧综合资源-----手机蝰蛇音效 杜比安装步骤 多种方式【九】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

编程小白想转行互联网,想以python为入口,究竟可不可行?

前言 最近有些朋友私信过我这个问题,很多编程小白想从事或转行互联网,想以Python为切入口,究竟可不可行? 以我看到的一些小伙伴的学习经历来说,虽说学会Python不能够马上胜任一些工作,但这可能是你离互联…

一例Trickbot家族js下载器的分析

样本信息 MD5: e36380d824811bc28fbc26ea84c1a868 SHA1: 19d5fc16cfabae3b3c26bbb4f5798da42733a2fa SHA256: 16429e95922c9521f7a40fa8f4c866444a060122448b243444dd2358a96a344c SHA512: 6c6f323893870536822a2aa2aebe783379906081fcf004dd04cb40cc1109c3452d39b548ac8b2a654…

安卓APP源码和设计报告——导航系统

演示答辩发言稿&#xff1a; 注意&#xff1a;1.在mainfest.xml文档中添加访问权限即一系列<uses-permission>元素使用Android中提供的权限。比如百度地图的使用联网的情况下需要网络功能权限。 2.在Stings.xml中添加一些字符串数组&#xff0c;离线数据管理、简体繁体…

python---数据容器

目录 环境安装 python语法 打印语句 注释 变量 变量声明 变量类型 boolean类型 占位符 控制数据精度 输入输出 条件控制 循环语句 while循环 for循环 函数 None类型 数据容器 列表 元组 字符串 序列 集合 字典 环境安装 1、安装python运行环境 Welcome t…

swiftui 中的app和 Scenes有什么,他们是什么关系

app和 Scenes有什么,他们是什么关系 SwiftUI 中的 app 和 Scenes 是两个相关的概念,它们都与应用程序的用户界面有关。 app 是指使用 SwiftUI 框架开发的应用程序,它包含了用户界面的所有内容和逻辑。在 SwiftUI 中,app 的界面通常由多个视图组成,每个视图都可以显示不同…

使用声网 SDK 构建 Piloteer 助盲服务平台的最佳实践

前言 在今年声网主办的「RTE2022 编程挑战赛」中&#xff0c;数支队伍经过一个多月的努力开发&#xff0c;很多优秀的作品最终突出重围&#xff0c;斩获大奖。本文由RTE2022编程挑战赛获奖者之一李新春撰写&#xff0c;他主要围绕获奖作品「Piloteer助盲服务平台」分享了开发的…

用HarmonyOS ArkUI实现点赞美女翻牌动效

本文演示如果用HarmonyOS的ArkUI来实现一个点赞的动画效果。体验HarmonyOS 3最新的API 9&#xff0c;欢迎大家一起参与构建这个万物互联的时代&#xff01; 活动主页 HarmonyOS线上Codelabs挑战赛已经开启&#xff0c;该系列挑战赛将围绕HarmonyOS的基础组件和容器组件、三方…

用Clash解决Python安装模块慢的问题

已经开了代理了&#xff0c;但如果没有使用全局模式的话&#xff0c;Python模块下载速度依然非常慢&#xff0c;只有几十K。使用全局模式是可以解决这个问题&#xff0c;但同时访问国内的一些网站又会速度特别慢&#xff0c;甚至打不开。 比如我们亲爱的知乎就会显示&#xff…

Vue项目初始化

1.创建脚手架&#xff1a; cmd控制台切换到指定的目录命令&#xff1a; vue create 项目名 然后cd到项目里运行&#xff1a; npm run serve 生成目录 2.配置&#xff1a; &#xff08;1&#xff09;关闭eslint 防止定义没用带来的报错 在vue.config.js中&#xff1a; 配置&…

Codeforces Global Round 19 D. Yet Another Minimization Problem

翻译&#xff1a; 给定两个数组&#x1d44e;和&#x1d44f;&#xff0c;长度都为&#x1d45b;。 选择索引&#x1d456;(1≤&#x1d456;≤&#x1d45b;)&#xff0c;将&#x1d44e;&#x1d456;和&#x1d44f;&#x1d456;交换。 让我们来定义数组的成本&#x1d…

Java连接SQL Server数据库的详细操作流程

Java连接SQL Server数据库的详细操作流程 一.明确JDK版本和下载驱动 1.1 JDK版本查看 win r输入cmd,命令窗口输入java --version 1.2 SQL Server官网下载驱动 SQL Server驱动下载直达地址 下载完成后解压到自己熟悉的目录&#xff0c;不出意外的话你会看到以下文件 1.3 …

IO流~字符流

字符流 为什么会出现字符流 由于字节流操作中文不是特别的方便&#xff0c;所以Java就提供字符流 字符流 字节流 编码表 用字节流复制文本文件时&#xff0c;文本文件也会有中文&#xff0c;但是没有问题&#xff0c;原因是最终底层操作会自动进行字节拼接成中文&#xf…

基于Java的学生竞赛管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

数据库面试题1-数据库基本概念、常用SQL语言

题1&#xff1a;什么是数据库 数据库&#xff08;Database&#xff09; 是保存有组织的数据的容器&#xff08;通常是一个文件或一组文件&#xff09;&#xff0c;是通过 数据库管理系统&#xff08;DataBase- Management System&#xff0c;DBMS&#xff09; 创建和操纵的容器…

Chat GPT原理

ChatGPT一经发布就在科技圈火得不行&#xff0c;这两天也是被传得神乎其神&#xff0c;听说它写得了代码、改得了 Bug&#xff0c;小说、段子统统不再话下&#xff01;那他到底是怎么训练成现在这样的呢&#xff1f;本文介绍李宏毅老师的分析。 那么接下来我们就来介绍Chat GPT…

学习在UE中为截屏工具(SceneCapture)添加一种新的源(Source)

SceneCapture 创建一个SceneCapture2D类型的Actor&#xff0c;再新建一个RenderTarget资源交给它。随后&#xff0c;就能看到截屏的数据出现在RenderTarget中。通过修改 Capture Source &#xff0c;可以改变截取的数据源&#xff0c;比如法线、基础色等等。 目标 本篇的目…