UE4_照亮环境_光束light beam
学习笔记,不喜勿喷,侵权立删!祝愿生活越来越好!
光束:模拟大气中散射的光线。利用定向光源模拟真实曙暮光效果或大气散射的阴影,即可生成 光束 。这些光线为场景添加深度和真实度。

一:一些参数介绍:
定向光源在其属性中拥有一个光束 Light Shaft 类目,

以下是这些属性的参考。
| 属性 | 描述 | |
|---|---|---|
| 定向光源 | ||
| Enable Light Shaft Occlusion | 确定此光源是否对雾气和大气散射形成屏幕空间模糊遮挡。 | |
| Occlusion Mask Darkness | 确定遮挡遮罩的颜色深度。数值 1 为无深色调。可使用大于 1 和小于 0 的数值,构成更为专业的效果。 | |
| Occlusion Depth Range | 在此距离到摄像机之间的物体均会对光束构成遮挡。 | |
| Enable Light Shaft Bloom | 确定是否渲染此光源的光束光晕。就定向光源而言,光源方向周围的颜色将呈放射性模糊,然后重新添加至场景中。 | |
| Bloom Scale | 调整光晕的加色,使其更明显/不明显。 | |
| Bloom Threshold | 场景颜色必须大于此阈值方可在光束中形成光晕。 | |
| Bloom Tint | 与场景颜色一同构成光晕颜色。它为光束光晕效果着色。 | |
| Light Shaft Override Direction | 可使光束来自光源实际方向以外的其他位置(必须在非零时使用,无需进行标准化)。 | |
下面是编译器翻译:

遮挡法
遮挡法从屏幕上物体的深度创建遮罩,将其从光线中模糊掉,并将其用于雾气和大气的遮罩。它和现实生活中的光束类似 - 光束由雾气的阴影所生成。请注意:这也意味着光束的强弱度只能和雾气/大气相同。它用于游戏中,旨在获得更真实的效果。

太阳定向光源可稍微偏离屏幕并产生遮挡光束。然而与太阳之间的角度接近 90 度时,光束将逐渐淡出。
光晕法
光晕法将在世界空间中的光源周围捕捉场景颜色(包括半透明度和雾气散射),并从光源进行放射性模糊。此法并非对真实世界中发生的一切进行模拟,但可控性较高(不受雾气密度限制),视觉效果震撼。太阳周围存在突出的明亮区域(如明亮的云朵)时光晕法的使用效果最佳。明亮的太阳过小,因此将形成一定程度的锯齿,而模糊是一个图像空间操作。

GPU 消耗
这些效果(遮挡和光晕)存在单独的消耗,因此只启用必要的效果方为上策。使用 680GTX 显卡运行 1080p 画面时,遮挡为 .5ms,单个光源上的光晕为 .68ms。
二:一些实现方法:
1、使用几何体和材质的方法来创建

这种方法的GPU开销最低,但是得需要创建几何体和材质,但无法保证所有角度或情况下都拥有良好的效果,并且无法精确的模拟物理效果,这种技术最适合低端设备,例如手机。
2、使用光束:

这种方法会用到光束,光束的GPU开销更高,并且只能用于特定的定向光源,只能用于屏幕空间,意味着定向光源必须位于屏幕中,你才能看见光束,有两种方法可以生成光束:一种是使用泛光bloom让屏幕变亮来实现另一种是使用遮蔽让屏幕变暗来创建光束。可以同时使用2种方法,但这也会导致性能开销变大。
3、体积雾

体积雾的GPU开销更高,场景中的光源越多尤其是如果光源会生成体积阴影那么开销就越大。好处在于体积雾可以与点光源、聚光源、矩形光源、定向光源一起使用。它还能与定向光源的光照函数以及动态和静态阴影一起使用。你甚至还能使用粒子将雾效限制在特定场景区域内。体积雾的另外一个好处是它能精确模拟物理效果,并且支持半透明,但是无法准确表现ies描述文件。
三、操作步骤:
1、添加指数高度雾。
2、添加一个太阳光(平行光)。先使用第二种方法,找到细节面板-光束,同时启用光束泛光和光束遮挡。

一种方法是降低亮度,另一种是调整天空球材质。天空球这里使用hdr图片

我们可以控制图片的亮度。我们也可以使用光束下的泛光缩放bloom scale来调整亮度。
3、我们关闭光束的光束遮挡和光束泛光,来看看体积雾制作效果
我们需要使用定向光源的体积散射强度,它控制着光束的光照强度。

我们需要开启Atmosphere Fog Sunlight。

继续向下,定向光源会默认开启Cast Volumetric Shadows

选中指数高度雾,开启体积雾Volumetric fog

如果不改动默认设置,效果看起来并不明显,我们为了让效果明显我们把Volumetric Scattering Intensity改为30,效果如下:

回到指数高度雾,高度雾的密度可以有多种控制方式,首先雾密度可以控制,雾高度衰减也可以控制,雾Actor位置,这能控制雾气中最浓密位置的起始点,可以调坐标,雾高度衰减通常以此点为起点。

调整体积雾的各个选项,首先是Scattering Distribution,基于你观察光束的角度控制光束强度,此值为0.2时,甚至背对光源也能看见光束。

效果如图:

当把此值设为0.9,发现摄像机对着光源才能看清光束。记得设回0.3.
接着是反射率Albedo,反射率控制着粒子在大气中的反射程度,如果是雾、云团、迷雾或者其它由水分子构成的雾就需要尽量设为1,也就是白色,如果你降低这个值,你就能模拟出烟雾,雾霾以及其它并非由水分子构成的雾效,设为0.16,如下图:

还可以设置雾的颜色(改变反射率颜色),

改回白色,另一个参数为Emissive自发光,如果没有烘焙光线,可用于渲染全局光照,还能用来生成自带关照的雾效以及其它美术效果。

接着是消光比例,它基本上就是控制雾光束的强度,它的实际作用就是控制参与媒介遮挡光线的程度。如果增加这个值,看见光束更加不透明了。

降低此数值,可让光束更加透明,如下图:

此外还有View Distance可视距离,它能控制雾效会在距离摄像机多远的距离生成,距离越远,出现渲染瑕疵的可能性越大,谨慎使用。如果数值太低,你可能在背景中的体积雾发现一些瑕疵,如下图:

我们使用默认的6000.
静态光照散射Static Light Scattering 控制着烘焙光照在体积雾中的贡献,它的办法是使用一张体积光照贴图,体积光照贴图会在lightmass烘焙光照时生成,我们可以可视化体积光照贴图,显示-可视化-体积光照贴图。

最后一个参数,使用雾内散射颜色覆盖光源颜色Override Light Colors with Fog in Scattering Colors,如果启用它,我们就可以基于三种不同的设置来调整体积雾的颜色。

第一个是雾内散射颜色,第二个是内散射立方体纹理,最后是定向内散射颜色

使用内散射颜色调整效果如下:

四、总结
如果打开视口选项,点击统计数据,advanced,勾选GPU,在GPU中我们可以看见体积雾当前渲染时间。设置-引擎可延展性,我们更改阴影设置为high,但会有瑕疵,渲染时间更少。另外一种影响体积雾效能的是在体积雾中使用点光源和聚光源,拖入聚光灯到场景,修改亮度,加大体积散射强度,启用投射体积雾阴影,发现渲染时间边长。如果出现光束时,雾效不是特别多,你可以降低全局雾密度,然后增加光源的体积散射强度。以便在不增加雾浓度的情况下,加强光束亮度。体积雾与光束一起使用,打开光束遮蔽,调整下面参数值,他对体积雾的光束产生了影响。
要想了解体积雾:查看以下链接:

视频链接:
UE使用体积光制作上帝之光视频教程_哔哩哔哩_bilibili
相关文章:
UE4_照亮环境_光束light beam
学习笔记,不喜勿喷,侵权立删!祝愿生活越来越好! 光束:模拟大气中散射的光线。利用定向光源模拟真实曙暮光效果或大气散射的阴影,即可生成 光束 。这些光线为场景添加深度和真实度。 一:一些参数…...
springboot3项目练习详细步骤(第三部分:文章管理模块)
目录 发布文章 接口文档 业务实现 自定义参数校验 项目参数要求 实现思路 实现步骤 文章列表(条件分页) 接口文档 业务实现 mapper映射 更新文章 接口文档 业务实现 获取文章详情 接口文档 业务实现 删除文章 接口文档 业务实现 文章管理业务表结构…...
【面试八股总结】C++11新特性:智能指针
参考资料 :阿秀、代码随想录 智能指针是一个类,用于存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止堆内存泄露。动态分配的资源,交给一个类对象去管理,当类对象声明周期结束时,自…...
【教程向】从零开始创建浏览器插件(二)深入理解 Chrome 扩展的 manifest.json 配置文件
第二步:深入理解 Chrome 扩展的 manifest.json 配置文件 上一次我们已经着手完成了一个自己的浏览器插件,链接在这里:我是链接 在本篇博客中,我们将更详细地探讨 Chrome 扩展中的 manifest.json 文件。这个文件是每个浏览器扩展…...
美易官方:美国房地产贷款逾期率飙升,银行业危机仍可控?现货黄金暂守2360
美国房地产贷款逾期率飙升,银行业危机仍可控?现货黄金暂守2360 近年来,美国房地产市场一直处于波动之中,尤其是商业房地产领域。近期,美联储发出警告,称商业房地产贷款逾期率持续攀升,银行正在为…...
SwiftUI中的@StateObject和@ObservedObject的区别
SwiftUI中的StateObject和ObservedObject属性包装器指示视图更新以响应被观察对象的变化。虽然这两个属性包装器看起来很相似,但在使用SwiftUI构建应用程序时,有一个关键的区别需要理解。 两个属性包装器都要求对象符合ObservableObject协议。这个协议表…...
类与对象(二)
封装 封装作为面向对象三大特性(封装,继承,多态)之一,那如何实现封装性的呢?就又得拿出上面的访问修饰限定符的图 public: 就是在任何地方都可以访问 protected: 涉及子类在介绍继承时详细介绍 default: …...
LeetCode/NowCoder-链表经典算法OJ练习2
最好的,不一定是最合适的;最合适的,才是真正最好的。💓💓💓 目录 说在前面 题目一:分割链表 题目二:环形链表的约瑟夫问题 SUMUP结尾 说在前面 dear朋友们大家好!&…...
英伟达解码性能NVDEC
如果你能打开官网,请看这里: NVDEC Application Note 下面是摘录:...
文心一言 VS 讯飞星火 VS chatgpt (255)-- 算法导论18.3 1题
一、请说明依次从图18-8(f)中删除C、P和V后的结果。如果要写代码,请用go语言。 文心一言: 首先,让我们明确一点:由于您没有提供具体的图18-8(f)的内容,我只能假设它是一个数据结构(可能是图、树或列表等&…...
C++ | Leetcode C++题解之第73题矩阵置零
题目: 题解: class Solution { public:void setZeroes(vector<vector<int>>& matrix) {int m matrix.size();int n matrix[0].size();int flag_col0 false;for (int i 0; i < m; i) {if (!matrix[i][0]) {flag_col0 true;}for …...
用 Supabase CLI 进行本地开发环境搭建
文章目录 (零)前言(一)Supabase CLI(1.1)安装 Scoop(1.2)用 Scoop 安装 Supabase CLI (二)本地项目环境(2.1)初始化项目(2…...
三极管 导通条件
一、三极管理解 三极管是电子行业常用的元器件之一,他是一种电流型控制的器件,他有三种工作状态:截止区,放大区、饱和区。当三极管当做开关使用时,他工作在饱和区。下面简短讲解三极管作为开关使用的方法,只…...
一次pytorch分布式训练精度调试过程
现象: loss不下降 过程如下: 1.减少层数,准备最小复现环境 2.dropout设置为0,重复运行二次,对比loss是否一致 3.第二次迭代开始loss不一致 4.对比backward之后的梯度,发现某一个梯度不一致 5.dump得到所有算子的规模,单算子测试…...
STM32(GPIO)
GPIO简介 GPIO(General Purpose Input Output)通用输入输出口 引脚电平:0V~3.3V,部分引脚可容忍5V 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等 输入模式下可读取端口的高低电…...
python设计模式---观察者模式
观察者模式是一种行为设计模式,用于定义对象之间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都会得到通知并自动更新。 from abc import ABC, abstractmethod from typing import Listclass Observable:def __init__(sel…...
【论文笔记】KAN: Kolmogorov-Arnold Networks 全新神经网络架构KAN,MLP的潜在替代者
KAN: Kolmogorov-Arnold Networks code:https://github.com/KindXiaoming/pykan Background 多层感知机(MLP)是机器学习中拟合非线性函数的默认模型,在众多深度学习模型中被广泛的应用。但MLP存在很多明显的缺点:…...
【投稿资讯】区块链会议CCF C -- CoopIS 2024 截止7.10 附录用率
会议名称:CoopIS CCF等级:CCF C类学术会议 类别:人机交互与普适计算 录用率:2023年接收率21% (21 regular 10 work-in-progress papers/100) AREA 5: HUMAN-CENTRIC SECURITY AND PRIVACY IN INFORMATION SYSTEMS Access Con…...
React Native 之 开发环境搭建(一)
1. 安装Node.js: Node.js是React Native开发的基础,因此首先需要安装Node.js。强烈建议始终选择 Node 当前的 LTS (长期维护)版本,一般是偶数版本,不要选择偏实验性质的奇数版本。 如果你希望更方便地管理…...
DS高阶:B树系列
一、常见的搜索结构 1、顺序查找 时间复杂度:O(N) 2、二分查找 时间复杂度:O(logN) 要求:(1)有序 (2)支持下标的随机访问 3、二叉搜索树(BS树) 时间复杂…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
