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

游戏引擎中的大气和云的渲染

一、大气

首先和光线追踪类似,大气渲染也有类似的渲染公式,在实际处理中也有类似 Blinn-Phong的拟合模型。关键参数是当前点到天顶的角度和到太阳的角度
在这里插入图片描述

二、大气散射理论

光和介质的接触:

  • Absorption 吸收
  • Out-scattering 散射
  • Emission 自发光
  • In-scattering 其他介质的光散射过来

四种方式累积起来形成RTE公式
在这里插入图片描述

体渲染公式:其实就是RTE公式的导数
在这里插入图片描述

2.1 大气中的真实物理

大气中真实存在两种介质:气体分子和气溶胶分子,前者往往小于太阳光中各种光的波长,而后者一般接近这些波长。
因此散射也分为了两种:

2.2 散射

Rayleigh Scattering(瑞利散射)
当空气中介质尺寸远小于波长的时候(气体分子):

空气中的光是四面八方均匀散射,不太具有方向性
对于越短的波长(蓝紫光),它散射的越远,对越长的波长(红光),散射的越近
详细来说,其散射公式如下:
在这里插入图片描述
其中θ是光散射出去的方向和入射角之间的角度,n是空气折射率。而密度比。ρ \rhoρ 这个数字在海平面上等于1,随ρ ( z ) = exp ⁡ − h / H   \rho(z) = \exp{-h/H},ρ(z)=exp−h/H 呈指数递减

几何部分决定了不同方向光的散射情况不同(但整体差别不太大,而且旋转不变);波长部分表明波长越短,散射越强;密度部分表明了海拔对散射的影响。

这也解释了天空在白天是蓝色在傍晚是偏红的原因:
在这里插入图片描述
Mie scattering(米氏散射)
当空气中介质尺寸接近或大于波长时(气溶胶):

  • 有一定方向性
  • 对波长不敏感

详细来说,其散射公式如下:
在这里插入图片描述
对比瑞利散射,多了几何参数g的影响。
其实际生活影响就是雾和太阳光环:
在这里插入图片描述

2.3 吸收

空气中主要是臭氧和甲烷能够吸收波长的光,比如臭氧吸收红橙黄,甲烷吸收红光。比如海王星上大量甲烷导致其显现蓝色。
实际计算过程中往往假设这些气体是均匀分布在整个大气中的(虽然实际上并不是,比如臭氧集中在大气上层)

三、实时大气渲染

在这里插入图片描述

3.1 预计算LUT

实际计算时,Ray Marching是最常用的方法。其原理主要是依照路径逐步计算累积,如下图:
在这里插入图片描述
其中T就是所谓通透度(密度)
和普通物体的实时渲染类似,预计算也在该领域得到运用,LUT就是一个将许多复杂计算进行预计算保存下来的表格。在通透度方面,一个公式得以提出:
在这里插入图片描述

我们注意到,两个点之间的通透度关系借此只由两个参数决定( h 和 θ )由此,我们可以得到一个关于传播通透度的LUT表。

提出这个公式之后,原来的单次散射公式就可以表示为:
在这里插入图片描述
这里最重要的是一种参数化思想(和上面一样),利用三个参数 η 太阳顶角)、θ (观察顶角)和 ϕ (太阳到观察视角之间水平角度)再加上当前高度 h 表示站在所有点在所有太阳角度下看任何方向的情况。(这三个角都是方位角并进一步通过cos计算得到相应结果( μ s 、μ 以及 v )。我们将这个4D表示存到多个3Dtexture array(其实3D texture的插值更合理)里面方便查询。

因此,我们获得了通透度LUT表和单次散射LUT表,利用这两张表,就可以计算出二次、三次以及更多次散射的LUT表

缺点:

  • 预计算成本很高。首先是多次散射的迭代计算成本高,其次是在移动端没法用。(即使在PC端可能也有很多毫秒甚至一秒,但可能分到很多帧去完成)
  • 没法处理动态环境调整。比如从晴天变成下雨的雾天,此时需要均匀过度,每一帧都要插值计算,所以没法处理。包括艺术家调节参数也不方便
  • 虽然获得预计算表,但单单是去逐像素进行高维的插值查询也是成本很高的(所以经常需要为了效率去下采样)

3.2 简化版

因为上述缺点,一种更简化的多次散射方案被提出,其特点在于认为任何散射都是各向同性的,向所有方向均匀散射,所以对一个介质来说,其所有邻居介质收到来自它的散射能量都是相同的,因而一次散射带来的结果只是整体削减(吸收)了固定百分比。
在这种设定下,多次散射也就单纯变成了一次散射的指数变化(等比数列),而一个介质收到的不同次数的散射总量就是其求和(等比数列求和)。
这样一来,由于极大加快了速度,所以这种方法可以每一帧都进行计算。从而导致原方法LUT参数中的高度 h 以及太阳顶角 η都不需要参与预计算(因为都实时更新了),所以新方法的LUT表中只需要计算出观察的天顶角 θ 和一个水平方向环绕360度的夹角 ϕ (对应原来太阳到观察视角水平方向的夹角)即可。化四维为二维。
再加入相机距离可以进一步获得3D的LUT表来实现ray marching
在这里插入图片描述

四、云的渲染

在这里插入图片描述
Billboard Cloud:
在这里插入图片描述
Volumetric Cloud Modeling
在这里插入图片描述

云渲染从最早学术界的Mesh方法到早起游戏的单纯叠贴图,逐渐发展到了用于3A行业的Volumetric Cloud Modeling。其本身有各种优点:

  • 真实的云的形状
  • 可以实现大尺寸的云
  • 支持动态天气
  • 支持动态的体积光照和阴影

同时也具有一个明显的缺点:

  • 效率低下,成本昂贵
  • 其具体依赖于一个称为Weather Texture的东西,而它由两个部分组成:

天空中云的随机分布:
在这里插入图片描述

  • 云的厚度(从0到1表示)
  • 利用这两个部分就可以实现比如云的移动(对1进行平移)以及厚度变化等

但是单单这样做会导致云的形状变成柱状,所以引入了Noise,比如Perlin Noise(棉絮状噪声)和Worley Noise(细胞结构状)等,先利用低频把云的规则边缘模糊化,再加上一些高频来优化细节。
在这里插入图片描述

实际如何进行渲染呢?Ray Marching。具体来说分四步:
在这里插入图片描述

  • 对每个屏幕像素做射线
  • 在该射线未接触到任何云之前大步前进
  • 碰到云之后密集计算
  • 利用前述方法计算,但进行简化(因为云比较密,所以可以做这个假设)

相关文章:

游戏引擎中的大气和云的渲染

一、大气 首先和光线追踪类似,大气渲染也有类似的渲染公式,在实际处理中也有类似 Blinn-Phong的拟合模型。关键参数是当前点到天顶的角度和到太阳的角度 二、大气散射理论 光和介质的接触: Absorption 吸收Out-scattering 散射Emission …...

华为鲲鹏云认证考试内容有哪些?华为鲲鹏云认证考试报名条件

华为鲲鹏云认证考试是华为公司为了验证IT专业人士在鲲鹏计算及云计算领域的专业能力而设立的一项认证考试。以下是关于华为鲲鹏云认证考试的一些详细信息: 考试内容:华为鲲鹏云认证考试的内容主要包括理论考核和实践考核两大部分。理论考核涉及云计算、…...

v3-admin-vite 改造自动路由,view页面自解释Meta

需求 v3-admin-vite是一款不错的后端管理模板,主要是pany一直都在维护,最近将后台管理也进行了升级,顺便完成一直没时间解决的小痛痒: 在不使用后端动态管理的情况下。我不希望单独维护一份路由定义,我希望页面是自解…...

FIFO存储器选型参数,结构原理,工艺与注意问题总结

🏡《总目录》 目录 1,概述2.1,写入操作2.2,读取操作2.3,指针移动与循环2.4,状态检测3,结构特点3.1,双口RAM结构3.2,无外部读写地址线3.3,内部读写指针自动递增3.4,固定深度的缓冲区4,工艺流程4.1,硅晶圆准备...

jvm高级面试题-2024

说下对JVM内存模型的理解 JVM内存模型主要是指Java虚拟机在运行时所使用的内存结构。它主要包括堆、栈、方法区和程序计数器等部分。 堆是JVM中最大的一块内存区域,用于存储对象实例。一般通过new关键字创建的对象都存放在堆中,堆的大小可以通过启动参数…...

DeepL Pro3.1 下载地址及安装教程

DeepL Pro是DeepL公司推出的专业翻译服务。DeepL是一家专注于机器翻译和自然语言处理技术的公司,其翻译引擎被认为在质量和准确性方面表现优秀.DeepL Pro提供了一系列高级功能和服务,以满足专业用户的翻译需求。其中包括: 高质量翻译&#xf…...

第十一届 “MathorCup“- B题:基于机器学习的团簇能量预测及结构全局寻优方法

目录 摘 要 第 1 章 问题重述 1.1 问题背景 1.2 问题描述 第 2 章 思路分析...

云计算探索-如何在服务器上配置RAID(附模拟器)

一,引言 RAID(Redundant Array of Independent Disks)是一种将多个物理硬盘组合成一个逻辑单元的技术,旨在提升数据存取速度、增大存储容量以及提高数据可靠性。在服务器环境中配置RAID尤其重要,它不仅能够应对高并发访…...

LeetCode226:反转二叉树

题目描述 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 解题思想 使用前序遍历和后序遍历比较方便 代码 class Solution { public:TreeNode* invertTree(TreeNode* root) {if (root nullptr) return root;swap(root->left, root…...

特征融合篇 | 利用RT-DETR的AIFI去替换YOLOv8中的SPPF(附2种改进方法)

前言:Hello大家好,我是小哥谈。RT-DETR模型是一种用于目标检测的深度学习模型,它基于transformer架构,特别适用于实时处理序列数据。在RT-DETR模型中,AIFI(基于注意力的内部尺度特征交互)模块是一个关键组件,它通过引入注意力机制来增强模型对局部和全局信息的处理能力…...

MVCC多版本并发控制

1.什么是MVCC MVCC (Multiversion Concurrency Control),多版本并发控制。MySQL通过MVCC来实现隔离性。隔离性本质上是因为同时存在多个并发事务可能会导致脏读、幻读等情况。要解决并发问题只有一种方案就是加锁。当然,锁不可避免…...

图片转换成base64如何在html文件中使用呢

在HTML文件中使用Base64编码的图片非常简单。Base64编码是一种将二进制数据转换为ASCII字符串的方法,这使得可以直接在网页上嵌入图片数据,而无需引用外部图片文件。以下是如何在HTML中使用Base64编码的图片的步骤: 步骤 1: 将图片转换为Bas…...

【MATLAB源码-第24期】基于matlab的水声通信中海洋噪声的建模仿真,对比不同风速的影响。

操作环境: MATLAB 2022a 1、算法描述 水声通信: 水声通信是一种利用水中传播声波的方式进行信息传递的技术。它在水下环境中被广泛应用,特别是在海洋科学研究、海洋资源勘探、水下军事通信等领域。 1. **传输媒介**:水声通信利…...

七、函数的使用方法

函数的调用 nameinput()#输入参数并赋值name print(name)#d打印name 格式:返回值函数名(参数) def get_sum(n):#形式参数计算累加和:param n::return: sumsum0for i in range(1,n1):sumiprint…...

数据分析之Tebleau 简介、安装及数据导入

Tebleau简介 Tebleau基于斯坦福大学突破性交互式技术 可以将结构化数据快速生成图表、坐标图、仪表盘与报告 将维度拖放到画布等地方是他的主要操作方式 例:Tebleau是手机相机 (相对来说更简单) POWER BI是单反相机 Tebleau各类产品 Teblea…...

分享一下设计模式的学习

分享一下设计模式的学习 1、什么是设计模式? 设计模式是在软件设计过程中,经过实践和总结得出的描述、解决软件设计问题的一种经验总结。它是一种被广泛接受和验证的最佳实践,用于解决特定类型的问题,并提供了可重用的解决方案。…...

【JavaEE初阶系列】——CAS

目录 🎈什么是 CAS 📝CAS 伪代码 🎈CAS 是怎么实现的 🎈CAS 有哪些应用 🚩实现原子类 🌈伪代码实现: 🚩实现自旋锁 🌈自旋锁伪代码 🎈CAS 的 ABA 问题 &#…...

webGIS 之 智慧校园案例

1.引入资源创建地图 //index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&qu…...

CVAE——生成0-9数字图像(Pytorch+mnist)

1、简介 CVAE&#xff08;Conditional Variational Autoencoder&#xff0c;条件变分自编码器&#xff09;是一种变分自编码器&#xff08;VAE&#xff09;的变体&#xff0c;用于生成有条件的数据。在传统的变分自编码器中&#xff0c;生成的数据是完全由潜在变量决定的&…...

【Linux】TCP网络套接字编程+守护进程

文章目录 日志类&#xff08;完成TCP/UDP套接字常见连接过程中的日志打印&#xff09;单进程版本的服务器客户端通信多进程版本和多线程版本守护进程化的多线程服务器 日志类&#xff08;完成TCP/UDP套接字常见连接过程中的日志打印&#xff09; 为了让我们的代码更规范化&…...

终极免费离线OCR解决方案:Umi-OCR完整使用指南

终极免费离线OCR解决方案&#xff1a;Umi-OCR完整使用指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二维码。内置多国语言库。 …...

GEO优化实操框架:GEO优化的正确姿势是“带着答案去找客户”

如果你是B2B企业的老板或市场负责人&#xff0c;你一定听过这句话&#xff1a; “我们网上曝光是不少&#xff0c;但来的询盘都不对——问价格的比问方案的还多&#xff0c;还有不少是学生做调研的。” 这不是你一个人遇到的问题。这是传统SEO和竞价广告的天然缺陷——你只能“…...

开源智能体技术解析:从LangChain到自主抓取,构建自动化工作流

1. 项目概述&#xff1a;从“Awesome”列表看开源智能体生态的演进 最近在梳理一些前沿的自动化工具链时&#xff0c;又翻到了 mergisi/awesome-openclaw-agents 这个仓库。对于长期关注AI Agent&#xff08;智能体&#xff09;和自动化工作流开发的同行来说&#xff0c;这类…...

Go语言开源漏洞扫描器Abyss-Scanner:架构解析与CI/CD集成实践

1. 项目概述&#xff1a;一个为安全而生的开源漏洞扫描器最近在整理自己的开源项目工具箱&#xff0c;发现一个挺有意思的工具&#xff0c;叫 Abyss-Scanner。这名字起得挺有深意&#xff0c;“深渊扫描器”&#xff0c;听起来就有点探索未知、发现潜在风险的味道。简单来说&am…...

Kubernetes配置管理实战:基于Kustomize的结构化部署与多环境管理

1. 项目概述&#xff1a;一个被低估的Kubernetes配置管理利器如果你和我一样&#xff0c;长期在Kubernetes生态里摸爬滚打&#xff0c;那你一定经历过这样的场景&#xff1a;为了部署一个稍微复杂点的应用&#xff0c;需要维护一堆YAML文件——Deployment、Service、ConfigMap、…...

基于RAG的电影智能体构建:从向量检索到Agentic设计

1. 项目概述&#xff1a;一个能聊电影的智能体最近在GitHub上看到一个挺有意思的项目&#xff0c;叫tomasonjo/llm-movieagent。光看名字&#xff0c;你大概能猜到&#xff0c;这是一个和电影、和大型语言模型&#xff08;LLM&#xff09;相关的智能体。简单来说&#xff0c;它…...

符号链接批量管理工具 linko:声明式配置与自动化实践

1. 项目概述与核心价值最近在折腾一些自动化脚本和工具链&#xff0c;发现一个挺有意思的仓库&#xff1a;monsterxx03/linko。乍一看这个名字&#xff0c;你可能会有点懵&#xff0c;这到底是干嘛的&#xff1f;是链接管理工具&#xff0c;还是某种网络代理的客户端&#xff1…...

开源技能图谱工具SkillPort:Go语言构建的知识管理利器

1. 项目概述&#xff1a;一个技能图谱与知识管理的开源利器 最近在整理个人技术栈和团队知识库时&#xff0c;我一直在寻找一个能直观展示技能关联、又能深度管理学习路径的工具。市面上的笔记软件要么太“平”&#xff0c;只能线性记录&#xff1b;要么太“重”&#xff0c;像…...

飞书自动化开发实战:从脚本编写到事件驱动架构设计

1. 项目概述&#xff1a;飞书自动化&#xff0c;从“手动挡”到“自动驾驶”的进化 如果你每天的工作&#xff0c;有超过30%的时间是在飞书里重复着“点击-填写-发送”的枯燥操作&#xff0c;比如手动拉取数据生成日报、定时向群聊推送消息、或者根据特定条件审批流程&#xf…...

构建个人知识库:从碎片化代码到结构化知识体系

1. 项目概述&#xff1a;从“ClawCode”看个人知识库的构建与价值最近在和一些开发者朋友交流时&#xff0c;发现一个普遍现象&#xff1a;大家电脑里都散落着无数代码片段、配置脚本、临时笔记和项目心得。这些“数字碎片”价值巨大&#xff0c;但往往因为缺乏有效的组织&…...