Unreal Engin_画廊制作笔记 _011<利用PS为场景添加滤镜效果>

本文详细介绍如何使用Photoshop为游戏场景添加镜头滤镜效果,包括调整饱和度、对比度等参数,通过颜色分级实现独特视觉风格,并介绍如何在虚幻引擎中应用这些调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                011 利用PS为场景添加滤镜效果

这节比较重要。


我们要利用PS制作一个类似镜头滤镜的效果。


第一步,需要打开之前做好的白天的画廊场景。


打开之后,在Build旁边三角设置一下照明质量。


然后选中  PostProcessColume


这里简单说一下,因为我们要做滤镜的效果,这里的数值也应该了解。


一个是饱和度,一个是对比度。


单独调节后的效果。


不过这节的重点并不在这两个数值上,后面有更牛逼的做法。


记得还原一下,Film下调整过的属性。


-------------------------------------我是分割线-------------------------------------

颜色分级,上个链接。

https://docs.unrealengine.com/latest/CHN/Engine/Rendering/PostProcessEffects/ColorGrading/index.html



打开之后,找到这个位置,并且下载下来这张图片。



接下来就是此处的牛逼之处。


第一:

打开编辑界面,按G,让图标消失,并截图,保存下来。

保存之后将截图放在PS中。


然后,再将刚刚保存下来的图片,同样放在ps中。


这里我们将条状图片命名成LUT。


然后保存一下,选择位置,将文件命名为,ExlLUT,

Psd格式。



第二:


保存好之后,选中LUT层,

添加蒙版----亮度,对比度。






接下来是自然饱和度。13,19


然后是色阶



色彩平衡






然后看一下调整后的图片效果。







第三:



然后我们在PS中选中LUT图,


选中后复制


复制之后新建一个长256,高16的新文件,粘贴在新文件中

保存一个PNG格式的图片,


保存好之后,将LUT图,导入在文件的Textures文件下。






第四:


在虚幻中,双击LUT贴图进行编辑设置。




着个 步骤是指定<颜色查找表>

设置好之后保存。


第五:


在场景中选中  PostProcessColume设置,



OK看一下PS和引擎中是否相似。



然后在设置一下属性。


1、边缘强度

2、背景色强度

3、贴图启用强度

4、光照的强度


OK,这节利用PS制作后期效果的部分就结束了。




<think>我们正在处理一个Unreal Engine的断言失败错误:`Assertion failed: ComputedOffset < Stack.Node->Script.Num()`。这个错误通常发生在蓝图执行过程中,涉及到蓝图虚拟机(Blueprint Virtual Machine, BVM)的堆栈操作。 ### 错误原因分析 1. **脚本偏移量越界**:当蓝图虚拟机尝试执行一个节点时,会计算一个操作码偏移量(`ComputedOffset`)来定位下一个要执行的指令。断言失败表明计算出的偏移量超出了节点脚本指令数组的范围(`Stack.Node->Script.Num()`)[^1][^2]。 2. **常见触发场景**: - **节点损坏**:蓝图节点数据损坏,可能是由于版本升级、资产迁移或手动编辑导致的节点内部数据不一致。 - **序列化错误**:蓝图在保存或加载时,节点的脚本指令数组(`Script`数组)没有正确序列化,导致指令数量与实际不符。 - **异步操作问题**:在异步操作中(如延迟、网络请求),节点在执行过程中被销毁或状态改变,导致后续指令偏移量计算错误。 - **插件兼容性问题**:第三方插件自定义节点与当前引擎版本不兼容,导致节点脚本指令数组生成错误。 3. **数学原理**:设指令数组大小为$N$,有效偏移量范围为$[0, N-1]$。当计算出的偏移量$C$满足$C \geq N$时,触发断言。这通常由以下公式计算错误导致: $$ C = \text{CurrentOffset} + \text{InstructionSize} $$ 其中`InstructionSize`由当前操作码决定。 ### 解决方案 #### 步骤1:定位问题蓝图 1. 查看崩溃日志中的调用堆栈,找到触发断言的蓝图节点(日志中通常包含蓝图和节点名称)。 2. 在编辑器中打开该蓝图,检查是否有异常节点(如显示为`Unknown`或带警告图标的节点)。 #### 步骤2:修复损坏节点 - **方法A:替换节点** 1. 删除疑似损坏的节点。 2. 重新创建相同功能的节点(避免复制粘贴)。 3. 重新编译蓝图并测试。 - **方法B:节点重置** 1. 右键点击节点 → `Break Link`断开所有连接。 2. 手动重新连接引脚。 3. 编译后保存蓝图。 #### 步骤3:修复蓝图资产 - **蓝图重新保存**: 1. 在内容浏览器中右键点击蓝图 → `Reconsolidate Assets`(如果可用)。 2. 或使用`File → Save All`强制重新序列化所有资产。 - **蓝图修复工具**: 1. 运行`Editor → File → Load All`重新加载所有资产。 2. 使用命令行工具`Editor-Cmd.exe -run=ResavePackages -fixupredirects`修复重定向器[^3]。 #### 步骤4:处理异步操作 若问题发生在异步节点(如自定义延迟节点): 1. **检查节点生命周期**: - 确保异步操作完成前,调用对象未被销毁(使用`IsValid()`检查)。 ```cpp if (!IsValid(this)) return; // 在回调开始处添加 ``` 2. **修复延迟计算**: - 在自定义延迟节点中,确保`UpdateOperation`中的时间累计方式正确: $$ \Delta t = \text{Response.ElapsedTime()} $$ $$ \text{TimeRemaining} = \text{TimeRemaining} - \Delta t $$ - 确保在时间耗尽时立即触发完成事件。 #### 步骤5:引擎修复 1. **更新引擎**:检查是否有相关修复的引擎版本(如引用[2]修复了动画蓝图崩溃)。 2. **清除中间文件**: - 删除项目目录下`Intermediate/`和`Saved/`文件夹。 - 右键点击.uproject文件 → `Generate Visual Studio Project Files`。 3. **验证节点兼容性**: - 若使用第三方插件,禁用插件测试是否崩溃。 - 联系插件开发者提供兼容版本。 ### 预防措施 1. **版本控制**:使用Git/SVN管理蓝图,避免不可逆损坏。 2. **错误处理**:在自定义节点中添加安全校验: ```cpp // 在激活异步节点前检查有效性 if (!WorldContext || LatentInfo.UUID == -1) { OnFailure.Broadcast(); return; } ``` 3. **单元测试**:为复杂蓝图创建自动化测试(使用Unreal Automated Tests)。 ### 相关问题 1. 如何调试Unreal Engine的断言失败错误? 2. 蓝图虚拟机执行原理是怎样的? 3. 如何避免异步操作中的对象销毁导致的崩溃? 4. 引擎升级后蓝图兼容性问题如何解决?[^3] 5. 自定义蓝图节点的最佳实践有哪些?[^1][^4]</think>### Unreal Engine "Assertion failed: ComputedOffset < Stack.Node->Script.Num()" 问题解析 该断言失败错误通常发生在蓝图执行过程中,表示蓝图虚拟机(Blueprint VM)尝试访问超出有效范围的脚本指令。以下是根本原因和解决方案: --- #### **问题原因分析** 1. **节点脚本越界访问** 当蓝图执行时,虚拟机计算的操作码偏移量(`ComputedOffset`)超出了节点脚本指令数组的有效范围(`Stack.Node->Script.Num()`)[^1]。数学表示为: $$ \text{ComputedOffset} \geq \text{Stack.Node->Script.Num()} $$ 2. **常见触发场景**: - **损坏的蓝图节点**:节点内部数据损坏导致脚本指令数组异常 - **异步操作冲突**:延迟节点/异步任务执行时原始节点已被销毁 - **版本兼容问题**:引擎升级后旧版蓝图节点数据格式不兼容 - **插件冲突**:第三方插件修改了蓝图虚拟机的执行逻辑 - **动画蓝图错误**:动画蓝图重定向时的数据损坏(参考引用[2]) --- #### **解决方案步骤** ##### **1. 定位问题蓝图** - 查看崩溃日志中的调用堆栈,确定触发断言的蓝图资源 - 在编辑器中复现崩溃(运行Play-in-Editor并记录操作步骤) ##### **2. 修复损坏节点** ```mermaid graph TD A[打开问题蓝图] --> B[查找警告节点] B --> C{节点类型} C -->|自定义节点| D[检查节点实现] C -->|标准节点| E[替换节点] D --> F[验证脚本偏移计算] ``` - 对于**自定义节点**: - 检查`Activate()`函数中的偏移计算逻辑 - 确保`UpdateOperation()`中的时间累计正确: $$ \Delta t = \text{Response.ElapsedTime()} $$ $$ \text{TimeRemaining} = \text{TimeRemaining} - \Delta t $$ - 添加边界保护: ```cpp // 在访问 Script 数组前添加检查 if (ComputedOffset >= Script.Num()) { UE_LOG(LogTemp, Error, TEXT("Invalid script offset!")); return; } ``` - 对于**标准节点**: 1. 删除可疑节点并重新创建 2. 断开所有连接后重新连接引脚 3. 使用"Reparent Blueprint"重置继承关系 ##### **3. 清理引擎中间文件** 1. 删除项目目录中的: - `Saved/` - `Intermediate/` - `Binaries/` 2. 右键点击`.uproject`文件 → "Generate Visual Studio Project Files" 3. 重新编译项目 ##### **4. 处理异步操作冲突** ```cpp // 在异步节点激活时添加对象有效性检查 void UCustomDelayAsync::Activate() { if (!IsValid(this) || !IsValid(WorldContextObject)) { UE_LOG(LogTemp, Warning, TEXT("Invalid context!")); return; } // ...原有逻辑... } ``` ##### **5. 修复动画蓝图问题** - 若涉及动画蓝图(参考引用[2]): 1. 禁用"Allow remapping to existing assets" 2. 在内容浏览器中:右键动画蓝图 → "Retarget Anim Assets" → 创建新副本 --- #### **预防措施** 1. **版本迁移安全**: - 使用`CoreRedirects`系统处理资产重定向(引用[3]) - 升级引擎后运行"Resave All Assets"命令 2. **代码安全实践**: - 访问数组前始终检查边界 - 使用`TStaticArray`替代原始数组(引用[4]) ```cpp TStaticArray<float, 10> TimeArray; // 固定大小数组 if (TimeArray.Num() > ComputedOffset) // 安全访问 ``` 3. **异步操作防护**: ```mermaid graph LR A[启动异步操作] --> B[注册到GameInstance] B --> C[操作中检查IsValid] C --> D{对象有效?} D -->|是| E[继续执行] D -->|否| F[终止操作] ``` --- ### 相关问题 1. 如何解读Unreal Engine崩溃日志中的调用堆栈? 2. 蓝图虚拟机(Blueprint VM)的执行原理是什么? 3. 如何安全地实现可中断的延迟节点? 4. 引擎升级后如何批量修复兼容性问题?[^3] 5. 第三方插件导致蓝图崩溃时如何排查?[^1][^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Allen7474

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值