GAMES104:05游戏引擎中的渲染系统2:渲染中的光照、材质和shader-学习笔记

news2024/11/15 8:46:01

文章目录

  • 一、渲染方程及其挑战
  • 二、基础光照解决方案-简化版
    • 简化光源
    • 简化材质
    • 简化阴影
  • 三、基于预计算的全局光照
    • 3.1挑战和计算思路
      • 傅里叶变换
      • 球谐函数(Spherical Harmonics)
    • 3.2 SH Lightmap:预计算 GI
    • 3.3 探针 Probe:Light Probe + Refection Probe
      • Light Probe
      • Refection Probe
    • 3.4 基于图像的光照(Image-Based Lighting,IBL)
  • 四,基于物理的材质
    • 4.1 微平面理论
    • 4.2 IBL放到3.4去了,但实际理论与PBR很相近
  • 四,阴影(Shadow)
    • 4.1大世界Cascade Shadow级联阴影
    • 4.2 软阴影
    • 4.3 Virtual Shadow Maps
  • 总结
    • 5-10年前流行的3A配置:
    • 技术展望
    • 过量shader


渲染计算的三大组成部分:Lighting、Material、Shader

一、渲染方程及其挑战

参见闫令琪老师101中:BRDF和渲染方程导论 和 cook-torranceBRDF方程计算

老师认为的图形学的三个挑战:

  1. 对于任一给定方向如何获得radiance–阴影
  2. 对于光源和表面shading的积分运算(蒙特卡洛积分)
  3. 对于反射光多Bounce的无限递归计算

二、基础光照解决方案-简化版

简化光源

  1. 用平行光、聚光灯、点光源作为MainLight 来简化各种光源,用Ambient Light替代光源外的环境光
  2. 用可采样的环境贴图代替反射光线,环境贴图的mipmap代替粗糙度表现

最终结果 = MainLight + Ambient Light+Environment Map

简化材质

在这里插入图片描述

  • Blinn-Phong模型:

基于光可叠加原理(渲染方程中用体现),Blinn-Phong模型通过Ambient + Diffuse + Specular来简单粗暴的着色。

但其也有缺点:

  1. 能量不保守,使用Blinn-Phong模型的出射光照能量可能大于入射光照的能量,这在计算光线追踪时会带来很大的问题:这一过程在光线追踪中经过无限次反弹后,会使得本该暗的地方变得过于明亮。

  2. 难以表现真实的质感,Blinn-Phong模型虽然比较经典,但它却很难表现出物体在真实世界中的模样,总是有一种”塑料“感。

简化阴影

最常见的处理方式就是Shadow Map:先在光源处放置相机,以z-buffer的方式储存一张深度缓冲,第二次将相机放置在view位置,并将视锥内的点的深度和深度缓冲中的对应点(矩阵变换)的深度进行对比,若前者大于后者,则认为视锥中的点处于阴影中

缺点:
光源处的采样率和观察处的采样率不一样,有分辨率限制,同时光源角度大时会出现自阴影锯齿的问题

三、基于预计算的全局光照

3.1挑战和计算思路

空间换时间

  • 挑战
    1. indirect Light 要想去采样(整个球面)数据量非常大,需要有合适的方式压缩
    2. 并且还得便于在渲染方程中进行积分

傅里叶变换

可以把空间域信号转变为频域信号,截取频域的一小段就可以实现对频率整体的一个粗糙的表达,还可以反傅里叶计算还原会空间域。(高效压缩)

卷积定理是傅立叶变换满足的一个重要性质。卷积定理指出,函数 卷积的 傅立叶变换是函数傅立叶变换的乘积。具体分为时域卷积定理和频域卷积定理,时域卷积定理即时域内的卷积对应频域内的乘积;频域卷积定理即频域内的卷积对应时域内的乘积,两者具有对偶关系。

球谐函数(Spherical Harmonics)

SH是拉普拉斯方程的一组限制在球上的解,可以理解为一组sin\cos组成的正交基,数量越多,可以表达的精度越高;并且相互之间正交(卷积为0–简化计算的核心)且二阶导数为0(拟合表面光滑)
在这里插入图片描述
一般实时渲染只取前3阶就够了(9个),因为一般只需要低频信息(因此也无法表达更高频);有时只需要知道光从哪里来,就只需0和1阶就够了(4个),如下图。「在这种情况下,压缩后只用32bits(4Bytes)就可以存储一个像素的颜色。卷积时先投影到SH正交基上再系数相乘即可」在这里插入图片描述

3.2 SH Lightmap:预计算 GI

有了SH,我们就可以将场景参数化到一张巨大的lightmap贴图上(通常被称为地图集atlas):对所有表面点的irradiance进行离线计算并压缩为SH系数、保存进atlas

  • 计算过程:
    1. 对世界物体进行几何简化(因为要把三维空间复杂集合投影到二维空间),如下图,并且参数分配时需要尽可能在同样的面积或体积内分配的texel精度近似
      在这里插入图片描述
    2. lighting:将lightmap映射到各级LOD上,应用模型细节,用HBAO(水平基准环境光遮蔽Horizon based ambient occlusion,升级版SSAO)加上短程(short-range)增加高频的灯光细节,再加上直接光照和材质的效果----下图1是单应用lightmap的光照效果,可以看到已经有很多细节和软阴影效果了,下图2是最终应用效果
      在这里插入图片描述
      在这里插入图片描述

Lightmap优缺点和可借鉴思想:

  • 优点:
    1.实时运行效率很高;
    2.可以表现出环境中全局光照的许多细节
  • 缺点:
    1.预计算时间非常长(因此老师自己的引擎宁死不用);
    2.只能处理静态场景物体和静态光照(动态物体会有类似人物走到一小块阴影里整个人变黑的bug);
    3.空间换时间,占用内存较大(几十到几百MB)
  • 可借鉴优秀思想:
    1. 空间换时间
    2. 把整个场景参数化到二维的tex上(或三维vol上也一样),方便计算

3.3 探针 Probe:Light Probe + Refection Probe

  • 优点:运行效率高,静动态物体都可用,可以处理漫反射和镜面反射
  • 缺点:大量的光探测SH需要预计算,没办法做到像lightmap那样那么好的细节(采样太稀疏)

Light Probe

在空间中放置很多采样点,每个采样点采集对应光场信息,物体经过时寻找附近的采样点并插值计算

自动探测点生成:空间内均匀的产生采样点,再根据玩家的可到达区域和建筑物的几何结构进行延拓,相对均匀的分布采样点

Refection Probe

类似的反射probe,数量少,但采样精度很高,应用在镜面等场景

3.4 基于图像的光照(Image-Based Lighting,IBL)

主要思路还是预计算,把复杂的积分都先预计算过,以减少光照中的计算时间。我们会分别预计算漫反射项和镜面项,最终在实时渲染中只需通过简单的纹理采样即可得到结果

  • diffuse:提前将cubemap与反射光卷积的结果计算并储存在Irradiance Map中,使用时只需要取位置上的结果就可以了,见下图左
  • specular:近似为Lighting Term和BRDF Term的乘积
    1. Lighting Term:由于不同粗糙度造成的高光结果不一样,用cubemap的minmap存储多个粗糙度的结果,用minmap的精度刚好对应不同粗糙度下的不同精度,见下图右
    2. BRDF Term:直接预计算保存到了一张LUT图里,使用F和粗糙度加载即可

四,基于物理的材质

4.1 微平面理论

见闫老师相关课程笔记:
games101:Microfacet微平面理论+cook-torranceBRDF方程计算
games202:五,基于物理的材质:Microfacet、Kulla-Conty估计、LTC、NPR

  • 迪士尼材质参数的设计原则(思路相当有参考性)
    1. 物理材质参数应当直白易懂(符合艺术家的直觉,让艺术家能理解)
    2. 材质参数应当尽可能的少
    3. 参数取值范围尽量是0-1
    4. 超过合理范围时最好能产生一个make sense的结果
    5. 各种参数的组合应当合理且有意义(每一个参数组合都有意义)

4.2 IBL放到3.4去了,但实际理论与PBR很相近

四,阴影(Shadow)

4.1大世界Cascade Shadow级联阴影

对视锥体进行分层,远处的精度降低,近处提高。

  • 需要优化点:blend between Cascade Laters:在层级之间边界的地方做插值以避免出现视觉断层。
  • 优点:解决透视混叠(perspective aliasing)问题;快速生成深度图,深度写入时可提升3倍;效果不错
  • 缺点:存储空间大(空间换时间);绘制时成本昂贵;几乎不可能生成高质量的区域阴影;没有彩色阴影,半透明投射出不透明阴影
    在这里插入图片描述

4.2 软阴影

详情见闫老师的课程:games202:二,实时阴影Shadow Mapping、软阴影PCF、PCSS、VSSM、MSM、SDF

  • PCF(Percentage Closer Filter)
  • PCSS(Percentage Closer Soft Shadow)
  • VSSM(Variance Soft Shadow Map)

4.3 Virtual Shadow Maps

原理:类似Tiled Virtual Texture
现代引擎可以关注这个方向
UE5中VirtualShadowMap的简易实现原理(一)

总结

5-10年前流行的3A配置:

  • Lightmap+LightProbe
  • PBR+IBL
  • Cascade shadow + VSSM

技术展望

GPU显卡快速升级
real-time Ray-Tracing on GPU
Real-Time Global Illumination:SSGI、SDF based GI、Voxel-based GI(SVOG/VXGI)、RSM/RTX GI
更复杂的材质模型:BSSRDF、BSDF(Strand-based hair)

过量shader

  • 艺术家搞出大量shadergraph
  • 程序员给shader的各种变化都写了单独的shader(??不就是我们公司)
  • 不同平台编译语言不同

Uber Shader:每一种变化组合都写入同一个shader,通过宏定义控制分支(会产生大量变体)
优点:某个算法改进时需要更新所有相关shader,容易出错,用Uber shader就不会有这个问题

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

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

相关文章

uni-app:踩坑路---关于使用了transform导致fixed定位不生效的问题

前言: 继续记录,在上篇文章中,弹出框遮罩层在ios上没有正确的铺盖全屏,是因为机型的原因,也和我们的代码结构有相关的问题。今天再来展示另外一个奇葩的问题。 这次我使用了在本篇博客中的弹出框组件CustomDialog.vue…

Matlab进阶绘图第65期—带分组折线段的柱状图

带分组折线段的柱状图是在原始柱状图的基础上,在每组柱状图位置处分别添加折线段,以进行对比或添加额外信息。 由于Matlab中未收录带分组折线段的柱状图的绘制函数,因此需要大家自行设法解决。 本文使用自制的BarwithGroupedLine小工具进行…

景区AR导航营销系统:技术解决方案与实施效益分析

随着旅游市场的竞争日益激烈,景区需要不断创新以吸引游客。景区 AR 导航将虚拟画面与现实场景相结合,为游客提供了更加直观、生动的导航服务。对于景区而言,这一创新技术无疑是吸引游客目光、提升景区知名度的有力武器。通过独特的 AR 导航体…

AI/机器学习(计算机视觉/NLP)方向面试复习2

1. 用pytorch写一个self-attention 继承pytorch.nn.Module的类 代码: import torch import torch.nn as nn import torch.nn.functional as Fclass SelfAttention(nn.Module):def __init__(self, embed_size): # (B,T,C)super(SelfAttention, self).__init__()sel…

Zabbix监控案例

文章目录 一、监控linux TCP连接状态TCP端口的十一种连接状态自定义监控项监控示例二、监控模板监控tcp连接监控nginx 一、监控linux TCP连接状态 TCP,全称Transfer Control Protocol,中文名为传输控制协议,它工作在OSI的传输层,…

亚马逊AWS节点运行器扩展对Sui支持,简化区块链部署路径

亚马逊AWS在其节点运行器(Node Runners)服务中扩展了对Sui的原生支持,为基础设施开发者提供了一条新的、便捷的路径来建立Sui节点。Sui基金会还加入了AWS的Web3激活提供商计划(Web3 Activate Provider Program)&#x…

抖音矩阵管理系统解决方案:一站式服务

在当今社交媒体蓬勃发展的时代,抖音作为一款短视频平台,凭借其独特的魅力和庞大的用户群体,已成为众多企业、个人乃至网红达人展示自我、推广品牌的重要舞台。然而,随着抖音账号数量的不断增加,如何高效、专业地管理这…

开源安全信息和事件管理(SIEM)平台OSSIM

简介 OSSIM,开源安全信息和事件管理(SIEM)产品,提供了经过验证的核心SIEM功能,包括事件收集、标准化和关联。 OSSIM作为一个开源平台,具有灵活性和可定制性高的优点,允许用户根据自己的特定需…

SpringBoot上传超大文件导致OOM,完美问题解决办法

问题描述 报错: Caused by: java.lang.OutOfMemoryError at java.io.ByteArrayOutputStream.hugeCapacity(ByteArrayOutputStream.java:123) ~[?:1.8.0_381] at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:117) ~[?:1.8.0_381] at java.…

【BUG】已解决:ERROR: No matching distribution found for PIL

ERROR: No matching distribution found for PIL 目录 ERROR: No matching distribution found for PIL 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身&#xff0…

CSS(四)——CSS Text(文本)

CSS Text(文本&#xff09; 文本颜色 颜色属性被用来设置文字的颜色。 颜色是通过CSS最经常的指定&#xff1a; 十六进制值 - 如: &#xff03;FF0000 一个RGB值 - 如: RGB(255,0,0) 颜色的名称 - 如: red 一个网页的背景颜色是指在主体内的选择&#xff0c;即<body…

C++之类与对象(2)

前言 今天将步入学习类的默认成员函数&#xff0c;本节讲解其中的构造函数和析构函数。 1.类的默认成员函数 在 C 中&#xff0c;如果一个类没有显式定义某些成员函数&#xff0c;编译器会自动为该类生成默认的成员函数。以下是编译器可能会生成的默认成员函数&#xff1a; 默…

Fork软件笔记:一键拉取仓库所有模块

Fork是一个好用的git工具&#xff0c;只是没有中文而已&#xff08;不过不用翻译也能看使用&#xff09;。 工具下载地址&#xff1a;https://fork.dev/ 界面展示&#xff1a; 当项目中仓库模块比较多时&#xff0c;可以看到每个模块都是一个分页&#xff0c;每一个都要手动切换…

Linux云计算 |【第二阶段】AUTOMATION-DAY2

主要内容&#xff1a; 部署GitLab、配置管理GitLab、CI/CD概述、Jenkins概述、部署Jenkins&#xff08;初始化、拷贝插件&#xff09; 一、GitLab概述 GitLab 是一个基于 Web 的 Git 仓库管理工具&#xff0c;它提供了一个集成的开发环境和代码管理平台。GitLab 不仅支持 Git…

深入探讨:如何在Shopee平台上安全运营多个店铺?

在Shopee平台上&#xff0c;卖家如何避免店铺被关联&#xff1f;这是一个关乎账号安全和业务持续性的重要问题。Shopee严格规定每个卖家只能拥有一个店铺&#xff0c;以维护市场竞争公平和购物体验的稳定性。如果你开了多个店铺被平台判定关联&#xff0c;会面临冻结或封禁的风…

AI数字人+城市交通大数据可视化平台,让交通管理与服务更简便、更智能

如今&#xff0c;AI数字人作为科技革命和产业革命的重要驱动力&#xff0c;AI数字人接入城市交通大数据可视化平台&#xff0c;可以有效地将各硬件与业务系统进行深度融合&#xff0c;完成业务闭环。依托AI数字人的应用&#xff0c;使城市交通大数据可视化平台的使用复杂度大幅…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十章 Linux设备树

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【Gin】架构的精妙编织:Gin框架中组合模式的革新实践与技术深度解析(下)

【Gin】架构的精妙编织&#xff1a;Gin框架中组合模式的革新实践与技术深度解析(下) 大家好 我是寸铁&#x1f44a; 【Gin】架构的精妙编织&#xff1a;Gin框架中组合模式的革新实践与技术深度解析(下)✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 本次文章分为上下两部分…

Typora 【最新1.8.6】版本安装下载教程 (轻量级 Markdown 编辑器),图文步骤详解,免费领取(软件可激活使用)

文章目录 软件介绍软件下载安装步骤激活步骤 软件介绍 Typora 是一款专为 Markdown 爱好者设计的文本编辑器&#xff0c;它结合了简洁的界面设计与强大的 Markdown 渲染能力&#xff0c;为用户提供了一个流畅、高效的写作环境。以下是对 Typora 更详细的介绍&#xff1a; 核心特…

[k8s源码]8.deltaFIFO

deltaFIFO DeltaFIFO: 这是一个特殊类型的队列&#xff0c;它结合了FIFO&#xff08;先进先出&#xff09;队列的特性和增量&#xff08;Delta&#xff09;处理的能力。DeltaFIFO 中是按顺序存储的&#xff0c;但它们不必严格按照发生的顺序逐个处理。这种设计提供了处理的灵…