UE虚拟引擎实践踩坑记录---每一个坑都是眼泪

O 前言

腾讯游戏远程实践课题一

1 UE5源码编译和往一个空项目加模块

第一次作业–这个引擎我已经编译不下8次了,搞了三四天,一直反复编译。
现在成功的那一刻,眼泪憋不住了嘤嘤嘤

1.1UE引擎编译成功,但是每次打开项目会要求重新编译?

解决办法:无论是项目还是引擎,都不要碰rebuild和clean!

这里虽然是仅用于项目,但是按下去就啥也没了整个引擎得重新花一小时编译!(项目编译不通过二重奏 :查日志,全网搜; 不要老是编译)
在这里插入图片描述

1.2 无法解析的外部符号MSB3073代码6错误

无法解析的外部符号 "__declspec(dllimport) void __cdecl AddShaderSourceDirectoryMapping(class FString const &,class FString const &)" (__imp_?AddShaderSourceDirectoryMapping@@YAXAEBVFString@@0@Z),函数 "private: virtual void __cdecl FExampleComputeShaderModule::StartupModule(void)" (?StartupModule@FExampleComputeShaderModule@@EEAAXXZ) 中引用了该符号啥外部符号不能解析‘

这个函数(AddShaderSourceDirectoryMapping)来自 ShaderCore 模块,但你的项目可能没有正确引用该模块。或者,你的 Unreal Engine 版本中,AddShaderSourceDirectoryMapping 的定义已被移动到其他模块,例如 RenderCore 或 RHI。
修复方法:
在 项目模块名.Build.cs 文件中,加入RenderCore 模块在 PrivateDependencyModuleNames 或 PublicDependencyModuleNames 中声明。例如:

csharp
PrivateDependencyModuleNames.AddRange(new string[] { "Core",  "RenderCore", "RHI" });

在这里插入图片描述

1.3pending:反复编译引擎内存节节高升?

安在D盘,第一次编译引擎成功后我的内存还有295GB,经过反复重新编译后,内存由295->256->186;我不知道啥原因,之后找个机会卸载一下试试。
项目编译永远不要clean和rebuild!!!
在这里插入图片描述

2 使用UE实现Global Compute Shader

在 Unreal Engine(UE)中实现全局计算着色器(Global Compute Shader),需要深入了解 UE 的渲染流水线以及如何通过 RHI(Rendering Hardware Interface)与计算着色器交互。这是一项高级功能,主要涉及 HLSL 编写、UE 的 C++ 模块开发以及 GPU 数据的传输。


2.1 基本概念

  • 计算着色器(Compute Shader) 是一种运行在 GPU 上的程序,用于处理不涉及图形渲染的任务,例如物理模拟、粒子系统、数据处理等。
  • 在 UE 中,计算着色器通过 RenderCore 模块和 RHI API 进行集成。

全局计算着色器的实现主要分为以下几步:

  1. 编写 HLSL 计算着色器代码。
  2. 在 UE 中封装 HLSL 逻辑(通过 C++ 代码与引擎交互)。
  3. 配置渲染管线(包括 Shader 参数绑定、执行等)。
  4. 在项目中调用计算着色器。

2.2 游戏模块“xxx”加载后无法被成功初始化

在这里插入图片描述

解决:请教大佬说检查一下IMPLEMENT_MODULE宏有没有写,发现没写,加上:
IMPLEMENT_MODULE(FShaderFunctionLibraryModule, FShaderFunctionLibrary)

2.3 Shader type was loaded after engine init, use ELoadingPhase::PostConfigInit on your module to cause it to load earlier.已在 UnrealEditor.exe 中执行断点指令(__debugbreak()语句或类似调用)。

解决:在项目的.uproject文件里面模块定义改成PostConfigInit

在这里插入图片描述

2.4 warning: Group size of 262144 (64 * 64 * 64) is outside of valid range [1…1024] - attribute will be ignorederror: compute entry point must have a valid numthreads attribute启动时黑屏

解决:修改.usf文件使得线程数减小

在这里插入图片描述

3 使用UE实现Global VS/PS

3.1Could not find definition for module ‘ExampleGraphicsShader’

解决:在ShaderFunctionLibraryModule.h引入#include "ExampleGraphicsShaderModule.h"  // 确保路径正确

3.2矩阵变换时候颜色渲染不出来

解决:需要对齐参数。排查的时候可以直接传入常数测试,然后打印变换矩阵验证追踪bug。

在这里插入图片描述
对齐:在这里插入图片描述
定义使用FMatrix44f ,矩阵取行使用.M。

3.33 Shader compiler errors compiling global shaders for platform PCD3D_SM6:

Shader debug info dumped to: “D:\unreal_project\project1\Saved\ShaderDebugInfo\PCD3D_SM6\Global\FExampleGraphcisShaderVS\0”
D:\unreal_project\project1\Shaders\ExampleGraphicsShader.usf(0): Shader FExampleGraphcisShaderVS, Permutation 0, VF None:
error: validation errors
D:\unreal_project\project1\Shaders\ExampleGraphicsShader.usf(0): Shader FExampleGraphcisShaderVS, Permutation 0, VF None:
error: Semantic ‘ATTRIBUTE’ overlap at 4.
D:\unreal_project\project1\Shaders\ExampleGraphicsShader.usf(0): Shader FExampleGraphcisShaderVS, Permutation 0, VF None:
Validation failed.

Retry compilation?

解决: 参数顺序 ,新加的参数要放在变换矩阵前面。因为transform矩阵传入分成多行,如果在后面加参数会占用属性所以造成冲突。但是老师说更好的办法是传入shader参数。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值