vault backup: 2024-10-12 17:19:45

This commit is contained in:
2024-10-12 17:19:46 +08:00
parent ff94ddca61
commit 244c0c52f6
960 changed files with 31348 additions and 10 deletions

View File

@@ -0,0 +1,76 @@
# MaterialNewHLSLGenerator
- **功能描述:** 标识该UMaterialExpression为采用新HLSL生成器的节点当前在材质蓝图右键菜单中隐藏。
- **使用位置:** UCLASS
- **引擎模块:** Material
- **元数据类型:** bool
- **限制类型:** UMaterialExpression子类
- **常用程度:** ★
标识该UMaterialExpression为采用新HLSL生成器的节点当前在材质蓝图右键菜单中隐藏。
## 源码例子:
```cpp
UCLASS(MinimalAPI, meta = (MaterialNewHLSLGenerator))
class UMaterialExpressionLess : public UMaterialExpressionBinaryOp
{
GENERATED_UCLASS_BODY()
#if WITH_EDITOR
virtual UE::HLSLTree::EOperation GetBinaryOp() const override { return UE::HLSLTree::EOperation::Less; }
#endif // WITH_EDITOR
};
```
## 测试效果:
材质蓝图里无法调用Less。
![Untitled](Untitled.png)
## 原理:
在遍历所有可用FMaterialExpression的时候如果有MaterialNewHLSLGenerator则略过。当前引擎下r.MaterialEnableNewHLSLGenerator是只读的且实现未完全。
```cpp
static TAutoConsoleVariable<int32> CVarMaterialEnableNewHLSLGenerator(
TEXT("r.MaterialEnableNewHLSLGenerator"),
0,
TEXT("Enables the new (WIP) material HLSL generator.\n")
TEXT("0 - Don't allow\n")
TEXT("1 - Allow if enabled by material\n")
TEXT("2 - Force all materials to use new generator\n"),
ECVF_RenderThreadSafe | ECVF_ReadOnly);
void MaterialExpressionClasses::InitMaterialExpressionClasses()
{
static const auto CVarMaterialEnableNewHLSLGenerator = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("r.MaterialEnableNewHLSLGenerator"));
const bool bEnableControlFlow = AllowMaterialControlFlow();
const bool bEnableNewHLSLGenerator = CVarMaterialEnableNewHLSLGenerator->GetValueOnAnyThread() != 0;
for( TObjectIterator<UClass> It ; It ; ++It )
{
if( Class->IsChildOf(UMaterialExpression::StaticClass()) )
{
// Hide node types related to control flow, unless it's enabled
if (!bEnableControlFlow && Class->HasMetaData("MaterialControlFlow"))
{
continue;
}
if (!bEnableNewHLSLGenerator && Class->HasMetaData("MaterialNewHLSLGenerator"))
{
continue;
}
// Hide node types that are tagged private
if(Class->HasMetaData(TEXT("Private")))
{
continue;
}
AllExpressionClasses.Add(MaterialExpression);
}
}
}
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB