DreamShaderLang
设置

项目设置

项目设置

项目设置

DreamShader » 设置 » 项目设置

项目级配置对象:Project Settings ▸ DreamPlugin ▸ Dream Shader 下的十七个属性,持久化到项目的 DefaultEngine.ini。

声明于C++ —— UDreamShaderSettings,DreamShader 运行时模块中的一个 UDeveloperSettings
种类项目设置对象
配置文件<Project>/Config/DefaultEngine.ini,节 [/Script/DreamShader.DreamShaderSettings]

位置

方面值
ContainerProject
CategoryDreamPlugin
SectionDreamShader
节标题Dream Shader
节描述Dream Shader Settings

面板位于 Project Settings ▸ DreamPlugin ▸ Dream Shader —— 不在 Plugins 下面。在面板中做的修改,以及编辑器在别处暴露的开关,都会直接写回 DefaultEngine.ini。

设置

每一个可配置属性,按它在面板中所属的分类分组。

分类界面名称配置属性类型默认值作用
MappingsShading Model MappingsShadingModelMappingsTMap<FString, EMaterialShadingModel>空为 ShadingModel 设置值增加或覆盖拼写。先于内置表扫描。
MappingsBlend Mode MappingsBlendModeMappingsTMap<FString, EBlendMode>空为 BlendMode / RenderType 增加或覆盖拼写。
MappingsMaterial Domain MappingsMaterialDomainMappingsTMap<FString, EMaterialDomain>空为 MaterialDomain / Domain 增加或覆盖拼写。
PathsSource DirectorySourceDirectoryFDirectoryPathDShader扫描 .dsm / .dsf / .dsh 源文件的根目录。为空时回退到 DShader;相对路径相对项目目录解析。<Source>/Packages 由它推导。
PathsGenerated Shader DirectoryGeneratedShaderDirectoryFDirectoryPathIntermediate/DreamShader/GeneratedShaders生成的 .ush include 写到哪里,以及虚拟着色器目录映射到哪里。为空时回退到默认值。
PathsScan Plugin Source DirectoriesbScanPluginSourceDirectoriesbooltrue开启时,每个带 DShader 文件夹的已启用插件都贡献一个自己的源码根。关闭后,项目的 Source Directory 是唯一的根。
CompilerPreprocessor Defines (自 1.9.0 起)PreprocessorDefinesTMap<FString, FString>空项目编译的每个源文件里 #if 能看到的名字。键区分大小写;空值是一个裸标记,对 #if 和 defined() 都为真。以 DS_ 开头的键会被丢弃并记一条警告 —— 这个前缀留给内置名。修改这张表会重建读到了改动名字的源文件。
CompilerDefault Compiler BackendDefaultBackendEDreamShaderDefaultBackendThinCustom源文件未设置 Settings = { Backend = … } 时使用的后端。修改它会重建构建键因此改变的每个源文件;不受影响的被跳过。
CompilerGraph Layout Style (自 2.0.0 起)GraphLayoutStyleEDreamShaderGraphLayoutStyleBlocks生成的图怎么排布:三种读取编译器 IR 的布局之一 —— Blocks(按源码顺序排成一页方框,之间用具名 reroute 相连;默认)、SourceBands(每条源码语句一条带)和 Layered(整张图分层)—— 或 Classic,即 1.x 的布局。见图布局;dsc dump-layout 不构建任何东西就能画出三种 IR 布局。不属于构建键:布局只挪节点,不改变它们计算的东西。所以源文件要等下次重建才会重新排布 —— 未改动的照常被跳过,用 Recompile(或 compile -Force)才能看到已有的图换成新样式。
CompilerShow Ephemeral MaterialsbShowEphemeralMaterialsboolfalse关闭时,纯内存的 DreamShader 实例把自己报告为非资产,从内容浏览器、资产注册表枚举和保存选择器中消失。只作用于 ThinCustom 后端:Graph 材质是普通的 UMaterial,没有 Ephemeral 状态,总是可见。每次查询都实时读取。
CompilerAuto Compile On SavebAutoCompileOnSavebooltrue关闭时,源目录监视器完全忽略文件变化。
CompilerSave Debounce SecondsSaveDebounceSecondsfloat0.25文件变化后编译前的静默期。钳制在 [0.05, 10.0];滑条停在 2.0。设置对象不可用时回退到 0.25。
CompilerVerbose LogsbVerboseLogsboolfalse为依赖文件编译队列增加 Display 级日志。
DecompilerExport Decompiled LayoutbExportDecompiledLayoutbooltrue开启时,反编译出的源码保留节点位置:旧式 .dsm 带 Layout = { … } 段,2.0 反编译器写出的 .dss 带 #pragma layout 行 (自 2.0.0 起)。
EditorOpen In New WindowbOpenInNewWindowbooltrue关闭时,VSCode 启动命令会加上 --reuse-window。
EditorMaterial Instance SubfolderInstanceSubfolderFStringInstances相对父材质所在文件夹的子目录,材质内容浏览器在这里创建新实例。留空则与父材质同级创建。资产名为 MI_<ParentName>,并做唯一化处理。
EditorSync Source References On Asset Rename (自 1.9.0 起)bSyncSourceReferencesOnAssetRenamebooltrue开启时,重命名或移动资产会改写引用它的 .dsm / .dsf / .dsh 文件,写之前先把每个文件备份成 <file>.bak。只改项目源码 —— 插件根从不触碰。见资产重命名同步。实时读取,所以关掉后下一次重命名就生效。

加粗的行带有显式 DisplayName;其余显示的是 Unreal 从属性标识符推导出的名字,布尔属性会去掉开头的 b。

EDreamShaderDefaultBackend 的枚举项

枚举项含义
Graph每个材质构建一份可见的 UMaterial 节点图。
InstanceThinCustom 的弃用别名 (自 1.5.0 起)。
ThinCustom把图建在每材质一份的隐藏基础材质上,并产出它的轻量材质实例。默认值。

完整行为,包括按文件写的 Backend 设置如何覆盖它,见后端。

原文提示文本

Scan Plugin Source Directories:

When enabled, every enabled plugin that ships a DShader folder contributes its own source root, so a plugin can carry the .dsm/.dsf/.dsh files that build its materials. Plugin roots are discovered and compiled but never rewritten by the editor -- only the project's own source directory is writable. Imports never cross roots: a file resolves its imports against its own root and that root's Packages folder.

Default Compiler Backend:

DreamShader 如何物化一个未指定 Settings = { Backend = "..." } 的源文件。 ThinCustom(默认值)在每材质一份的隐藏基础上构建材质图,并产出它的 轻量、Ephemeral 材质实例 —— 完整的功能面,没有可见的逐材质 资产。Graph 构建一份可见的 UMaterial 节点图。Instance 是 ThinCustom 的弃用别名。

Show Ephemeral Materials:

只作用于 ThinCustom/Instance 后端 —— 它是唯一一个有 Ephemeral 状态的后端, 通过 UDreamShaderMaterialInstance::IsAsset 把它藏起来。开启时,Ephemeral 材质会像未保存的资产一样出现 在内容浏览器里。默认关闭:源文件才是预期的 创作面,而隐藏材质也防止意外的 Save 操作把它们 物化到磁盘。Graph 后端的材质是普通 UMaterial,无法退出 资产枚举,所以它们总是可见,此设置不影响它们。

Material Instance Subfolder:

相对父材质所在文件夹的子目录,材质内容浏览器在这里创建 新的材质实例。留空则与父材质同级创建。

Sync Source References On Asset Rename:

开启时,在编辑器中重命名或移动资产会改写引用它的 .dsm/.dsf/.dsh 文件, 因此源文件会继续按名字而不是它曾有的路径来指称该资产。只有项目源目录下的文件会被改写 —— 插件源根从不触碰 —— 并且 每个文件在被写入前都会复制成旁边的 .bak。像 Fix Up Redirectors 这样的批量重命名会被合并为单次处理。删除资产不在其列:删除没有 新路径可写,它产生的编译错误就是正确的结果。如果你 更希望插件从不自行编辑你的源文件,就关掉它。

Preprocessor Defines:

每个 .dsm/.dsf/.dsh 源文件编译时都带的预处理器 define —— 它的 #if / #elif 条件 读到的内容。名字回答 defined();能解析为整数的值按数字比较,其他 按字符串比较;空值仍算作已定义;此表中不存在的名字求值为 0,与 C 中一样。条件在生成时求值,落败的分支在 解析器看到它之前就被剪掉,所以一个条件可以选中一个 Domain、一个 ShadingModel 乃至整个 Outputs 块 —— 这些 都是 StaticSwitch 够不着的,因为它们描述的是材质是什么, 而不是它计算什么。编辑此表只会重建那些源文件确实读取了 发生变化的名字的生成资产。名字区分大小写,必须匹配 [A-Za-z_][A-Za-z0-9_]*。DS_ 前缀 保留给只读的内置名;使用它的条目会被丢弃并记一条日志警告,而不是 让编译失败,因为设置里的错误没有源码行可以报告。

这段提示文本所暗指的内置名是 DS_ENGINE_MAJOR、DS_ENGINE_MINOR、 DS_ENGINE_PATCH、DS_PLATFORM、DS_PLUGIN_VERSION 和 DS_SUBSTRATE;它们被列在 预处理器页面中。提示文本只按前缀提到它们, 因为 UHT 将元数据字符串限制在 1024 个字符,把六个都拼出来会超出。

映射表

三个 Mappings 条目扩展了三个枚举设置所接受的取值拼写。它们 默认为空:内置别名表在解析时按需重建,从不 物化到这些映射中,所以空面板并不意味着“没有别名”。

行为细节
优先级先扫描项目映射;第一个规范化键命中即立刻返回
遮蔽键规范化后与某个内置别名相同的条目会替换它
禁用映射到 MSM_MAX / BLEND_MAX / MD_MAX 的条目会让该拼写解析失败,且不会回落到内置表
键匹配trim、小写,并删除空格、_ 和 -
歧义两个规范化后完全相同的条目,其解析顺序未指定

完整的内置表见材质枚举。

还能在哪里改到这些设置

设置其他入口
bShowEphemeralMaterialsTools ▸ DreamShader ▸ Show Ephemeral Materials,以及材质内容浏览器的 Project 页。两者都会写入 ini,并为每个纯内存实例重新广播资产的创建/移除。
DefaultBackend、三张映射表、PreprocessorDefines在面板里修改一个会立刻重建工程的源文件,并记录 DreamShader setting '{Setting}' changed; regenerating all source files.。它们每一个都属于构建键,所以不受这次修改影响的源文件被跳过。如果持久化的生成资产遮蔽了结果,随后会弹出通知。
SourceDirectory、GeneratedShaderDirectory由模块的目录辅助函数消费;见生成的 HLSL 和 Package。
bSyncSourceReferencesOnAssetRename每次重命名资产时被资产重命名同步服务读取,合并的批次刷新时再读一次。没有菜单项。
PreprocessorDefines编译所见 define 表由五层组成,它是其中一层,也是人能编辑的那层里优先级最低的。C++ 注册和 provider 压过它,命令行上的 -Define= 又压过那些;只有内置的 DS_ 名压过一切。见预处理器 ▸ define 从何而来。

备注

  • 该类是 Config=Engine, DefaultConfig,所以值保存在项目的 Config/DefaultEngine.ini 里,而不是每用户文件里。签出这个 项目的所有人共享同一份配置。
  • 没有持久化的开关。 ThinCustom 产物是 Ephemeral 的 —— 源文件才是 创作面 —— 落盘发生在 cook 时、通过 命令行,或通过显式操作。Default Compiler Backend 在 1.5.0 取代了旧的 In-Memory 开关。在 2.0.0 中移除: Lay Out In-Memory Graphs (bLayoutInMemoryGraphs)。图布局现在总是运行;只有大图的性能保护 会跳过它。Show Ephemeral Materials 的键在 2.0.0 之前叫 bShowInMemoryMaterialsInContentBrowser ,加载时自动迁移。
  • GeneratedShaderDirectory 只在虚拟着色器目录尚未映射时才被读取。如果本项目已经存在 映射,已有映射优先于该设置,直到 编辑器重启。
  • 内置着色器库路径设置已在 1.3.8 移除;没有替代项。
  • 此对象的 C++ 界面 —— 三个 TryResolve* 方法、NormalizeMappingKey 和 三个 BuildDefault*Mappings 辅助函数 —— 记录于设置 API。

示例

<Project>/Config/DefaultEngine.ini,列出所有标量属性在默认值下的情况:

[/Script/DreamShader.DreamShaderSettings]
SourceDirectory=(Path="DShader")
GeneratedShaderDirectory=(Path="Intermediate/DreamShader/GeneratedShaders")
DefaultBackend=ThinCustom
bShowEphemeralMaterials=False
bAutoCompileOnSave=True
SaveDebounceSeconds=0.250000
bVerboseLogs=False
bExportDecompiledLayout=True
bOpenInNewWindow=True
InstanceSubfolder=Instances
bSyncSourceReferencesOnAssetRename=True

ini 键就是原始 C++ 标识符,包括布尔属性上的 b 前缀 —— bAutoCompileOnSave, 而不是 AutoCompileOnSave。三张映射表和 Preprocessor Defines 是容器属性; 请在 Project Settings 面板里编辑,让编辑器写回它们。手写条目使用 +Key=((…)) 形式:

+PreprocessorDefines=(("MOONTOON_LEGACY_TOON", "1"))

DreamShader Custom Pass

旁边还有第二个设置对象:UDreamPassSettings,位于 DreamShaderPass 运行时 模块,在 Project Settings ▸ DreamPlugin ▸ DreamShader Custom Pass。它保存在同一个 DefaultEngine.ini 的 [/Script/DreamShaderPass.DreamPassSettings] 节,并配置 Custom Pass 运行时。它在每个引擎上都存在;UE 5.8 以下没人读它。

分类配置属性类型默认值作用
RuntimebEnabledbooltrue关闭后任何地方都不运行 pipeline,不论是谁激活的。r.DreamPass.Enable 0 对一次会话做同样的事。
PipelinesGlobalPipelinesFDreamPassGlobalPipeline 数组 —— Pipeline、bEnabled、Priority、Overrides空以权重 1 作用于每个世界每个视图的 pipeline。世界启动时加载,列表被编辑时再加载一次。
LayersLayerNamesFName 数组,最多 32 个空pass layer:UDreamPassLayerComponent 给 primitive 其中一些 layer,mesh pass 的 Filter = Layer(Name) 选出带它的 primitive。顺序就是位序 —— 给 layer 改名是安全的;挪动位置会让每个引用它的已编译 pipeline 指向别的 layer,直到它们重新编译。
[/Script/DreamShaderPass.DreamPassSettings]
bEnabled=True
+GlobalPipelines=(Pipeline="/Game/Effects/CP_Wind.CP_Wind",bEnabled=True,Priority=0.000000)
+LayerNames=Highlight
+LayerNames=XRay

另见

本页目录