UE4材质编辑器中的Custom节点可以写hlsl代码,方便进行一些复杂计算,比如for循环。可以保证材质面板简洁可读性高。UE4之前的版本直接在Custom节点中用#include包含Shaders文件夹下的ush或usf文件,这样可以用外部的代码编辑器编写shader文件。但是最近的版本有所改动,Custom节点无法识别Shaders路径下的文件。所以需要修改工程模块来包含任意路径。
准备工作
- 首先创建C++工程,如果是蓝图工程可以添加新的C++类,会自动转成C++工程。假设项目名称为MotionBlur。
- 修改MotionBlur.Build.cs:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| using UnrealBuildTool; public class MotionBlur : ModuleRules { public MotionBlur(ReadOnlyTargetRules Target) : base(Target) { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "RHI", "RenderCore" });
PrivateDependencyModuleNames.AddRange(new string[] {"Projects"}); } }
|
1 2 3 4 5 6 7 8 9
| #pragma once #include "CoreMinimal.h"
class FMotionBlurModule : public IModuleInterface { public: virtual void StartupModule() override; virtual void ShutdownModule() override; };
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include "MotionBlur.h" #include "Modules/ModuleManager.h" #include "Misc/Paths.h" #include "ShaderCore.h"
IMPLEMENT_MODULE(FMotionBlurModule, MotionBlur);
void FMotionBlurModule::StartupModule() { FString ShaderDirectory = FPaths::Combine(FPaths::ProjectDir(), TEXT("Shaders")); AddShaderSourceDirectoryMapping("/Project", ShaderDirectory); }
void FMotionBlurModule::ShutdownModule() { ResetAllShaderSourceDirectoryMappings(); }
|
使用