Files
UnrealEngineUWP/Engine/Plugins/Runtime/MeshModelingToolset/Source/MeshModelingTools/Private/ToolActivities/PolyEditActivityUtil.cpp
ryan schmidt 12f074e656 ModelingTools: optional path tracing support inside Modeling Tools
- Add new UModelingComponentsSettings which has settings for in-tool preview mesh rendering and emitted new mesh objects
- Add ToolSetupUtil::ApplyRenderingConfigurationToPreview() utility functions, most Tools now call this function to configure UPreviewMesh/DynamicMeshComponents they create for mesh editing preview rendering (uses Settings to make setup decisions like RT on/off)
- add PreviewMesh::NotifyWorldPathTracedOutputInvalidated(), forces invalidation of current path tracing result, call from various PreviewMesh internal functions
- UCreateMeshObjectTypeProperties::ConfigureCreateMeshObjectParams() now configures new-mesh-object parameters with RT and Collision from UModelingComponentsSettings
- DynamicMeshComponent now defaults to raytracing-enabled, usage in Editor is controlled by above settings

#rb rinat.abdrashitov
#rnx
#jira none
#preflight 615f376bf0ee840001cab0fc

#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17753416 in //UE5/Release-5.0/... via CL 17758212
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v879-17706426)
#ROBOMERGE[STARSHIP]: UE5-Main

[CL 17758266 by ryan schmidt in ue5-release-engine-test branch]
2021-10-07 22:25:54 -04:00

54 lines
2.1 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "ToolActivities/PolyEditActivityUtil.h"
#include "Drawing/PolyEditPreviewMesh.h"
#include "InteractiveTool.h"
#include "Materials/MaterialInstanceDynamic.h"
#include "Materials/MaterialInterface.h"
#include "MeshOpPreviewHelpers.h"
#include "ToolActivities/PolyEditActivityContext.h"
#include "ToolSetupUtil.h"
using namespace UE::Geometry;
UPolyEditPreviewMesh* PolyEditActivityUtil::CreatePolyEditPreviewMesh(UInteractiveTool& Tool, const UPolyEditActivityContext& ActivityContext)
{
UPolyEditPreviewMesh* EditPreview = NewObject<UPolyEditPreviewMesh>(&Tool);
EditPreview->CreateInWorld(Tool.GetWorld(), FTransform::Identity);
ToolSetupUtil::ApplyRenderingConfigurationToPreview(EditPreview, nullptr);
UpdatePolyEditPreviewMaterials(Tool, ActivityContext, *EditPreview, EPreviewMaterialType::PreviewMaterial);
EditPreview->EnableWireframe(true);
return EditPreview;
}
void PolyEditActivityUtil::UpdatePolyEditPreviewMaterials(UInteractiveTool& Tool, const UPolyEditActivityContext& ActivityContext,
UPolyEditPreviewMesh& EditPreview, EPreviewMaterialType MaterialType)
{
if (MaterialType == EPreviewMaterialType::SourceMaterials)
{
TArray<UMaterialInterface*> Materials;
ActivityContext.Preview->PreviewMesh->GetMaterials(Materials);
EditPreview.ClearOverrideRenderMaterial();
EditPreview.SetMaterials(Materials);
}
else if (MaterialType == EPreviewMaterialType::PreviewMaterial)
{
EditPreview.ClearOverrideRenderMaterial();
EditPreview.SetMaterial(
ToolSetupUtil::GetSelectionMaterial(FLinearColor(0.8f, 0.75f, 0.0f), Tool.GetToolManager()));
}
else if (MaterialType == EPreviewMaterialType::UVMaterial)
{
UMaterial* CheckerMaterialBase = LoadObject<UMaterial>(nullptr, TEXT("/MeshModelingToolsetExp/Materials/CheckerMaterial"));
if (CheckerMaterialBase != nullptr)
{
UMaterialInstanceDynamic* CheckerMaterial = UMaterialInstanceDynamic::Create(CheckerMaterialBase, NULL);
CheckerMaterial->SetScalarParameterValue("Density", 1);
EditPreview.SetOverrideRenderMaterial(CheckerMaterial);
}
}
}