Skip to content

Commit ddc20c5

Browse files
committed
Connect UVW input for cube/array texture samplers
These require 3-dimensional UVW coordinates instead of the default UV coordinates, which are 2-dimensional. This should fix materials using texture cube or texture array samplers. Signed-off-by: Angel Pons <[email protected]>
1 parent 74a787a commit ddc20c5

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

AssetGenerator/Source/AssetGenerator/Private/Toolkit/AssetTypeGenerator/MaterialGenerator.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "Materials/MaterialExpressionLandscapeGrassOutput.h"
1616
#include "Materials/MaterialExpressionMultiply.h"
1717
#include "Materials/MaterialExpressionQualitySwitch.h"
18+
#include "Materials/MaterialExpressionReflectionVectorWS.h"
1819
#include "Materials/MaterialExpressionRuntimeVirtualTextureSampleParameter.h"
1920
#include "Materials/MaterialExpressionScalarParameter.h"
2021
#include "Materials/MaterialExpressionStaticSwitchParameter.h"
@@ -297,6 +298,10 @@ UClass* GetTextureSampleParameterClassForTexture(UTexture* Texture) {
297298
return NULL;
298299
}
299300

301+
FORCEINLINE static bool DoesTextureSamplerRequireUVW(UClass* ExpressionClass) {
302+
return ExpressionClass->IsChildOf<UMaterialExpressionTextureSampleParameterCube>() || ExpressionClass->IsChildOf<UMaterialExpressionTextureSampleParameter2DArray>();
303+
}
304+
300305
void UMaterialGenerator::ApplyOtherLayoutChanges(UMaterial* Material, FMaterialLayoutChangeInfo& LayoutChangeInfo) {
301306
//Add Parameter Collection parameter nodes
302307
for (UMaterialParameterCollection* NewCollection : LayoutChangeInfo.NewReferencedParameterCollections) {
@@ -464,6 +469,12 @@ void UMaterialGenerator::SpawnNewMaterialParameterNodes(UMaterial* Material, FMa
464469
Expression->SetParameterName(NewTextureParameter.ParameterInfo.Name);
465470
Expression->Texture = NewTextureParameter.ParameterValue.Get();
466471
Expression->AutoSetSampleType();
472+
473+
if (DoesTextureSamplerRequireUVW(ExpressionClass)) {
474+
const FVector2D NodePos = FVector2D(Expression->MaterialExpressionEditorX - 256, Expression->MaterialExpressionEditorY);
475+
UMaterialExpressionReflectionVectorWS* ReflectionVector = SpawnMaterialExpression<UMaterialExpressionReflectionVectorWS>(Material, NodePos);
476+
Expression->Coordinates.Connect(0, ReflectionVector);
477+
}
467478
}
468479
}
469480

AssetGenerator/Source/AssetGenerator/Public/Toolkit/AssetTypeGenerator/MaterialGenerator.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,15 +149,21 @@ class UMaterialGenerator : public UAssetTypeGenerator {
149149
static FVector2D GetGoodPlaceForNewMaterialExpression(UMaterial* Material);
150150
static void ForceMaterialCompilation(UMaterial* Material);
151151
static void ConnectBasicParameterPinsIfPossible(UMaterial* Material, const FString& ErrorMessage);
152-
152+
153153
template<typename T>
154-
FORCEINLINE static T* SpawnMaterialExpression(UMaterial* Material, UClass* ExpressionClass = T::StaticClass()) {
155-
const FVector2D NodePos = GetGoodPlaceForNewMaterialExpression(Material);
156-
T* NewMaterialExpression = CastChecked<T>(UMaterialEditingLibrary::CreateMaterialExpressionEx(Material, NULL, ExpressionClass, NULL, NodePos.X, NodePos.Y));
154+
FORCEINLINE static T* SpawnMaterialExpression(UMaterial* Material, const FVector2D NodePos, UClass* ExpressionClass = T::StaticClass())
155+
{
156+
T* NewMaterialExpression = CastChecked<T>(UMaterialEditingLibrary::CreateMaterialExpressionEx(Material, NULL, ExpressionClass, NULL, NodePos.X, NodePos.Y));
157157

158158
if (Material->MaterialGraph) {
159159
Material->MaterialGraph->AddExpression(NewMaterialExpression, false);
160160
}
161161
return NewMaterialExpression;
162162
}
163+
164+
template<typename T>
165+
FORCEINLINE static T* SpawnMaterialExpression(UMaterial* Material, UClass* ExpressionClass = T::StaticClass())
166+
{
167+
return SpawnMaterialExpression<T>(Material, GetGoodPlaceForNewMaterialExpression(Material), ExpressionClass);
168+
}
163169
};

0 commit comments

Comments
 (0)