Hello dear strangers,
I’ve managed to bring Nvidia Flex and VXGI under the same roof that is 4.14.3 , my issue is that i have an editor crash while loading one of the test map of Flex (flexsurface).
I would like to figure out what the issue is. If anyone could point me in the right direction or even help me solve this, it would be highly appreciated !
The crash reporter:
[SPOILER]Access violation - code c0000005 (first/second chance not available)
UE4Editor_Engine!FFlexFluidSurfaceVertexFactoryShaderParametersPS::SetMesh() [d:\unrealengine-vxgi-4.14\engine\source\runtime\engine\private\physicsengine\flexfluidsurfacecomponent.cpp:147]
UE4Editor_Renderer!FMeshMaterialShader::SetMesh<FRHIPixelShader * __ptr64>() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\shaderbaseclasses.cpp:453]
UE4Editor_Renderer!TBasePassPixelShaderPolicyParamType<FUniformLightMapPolicyShaderParametersType>::SetMesh() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\basepassrendering.inl:73]
UE4Editor_Renderer!TBasePassDrawingPolicy<FUniformLightMapPolicy>::SetMeshRenderState() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\basepassrendering.h:1133]
UE4Editor_Renderer!FDrawTranslucentMeshAction::Process<FUniformLightMapPolicy>() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:481]
UE4Editor_Renderer!ProcessBasePassMesh<FDrawTranslucentMeshAction>() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\basepassrendering.h:1507]
UE4Editor_Renderer!FTranslucencyDrawingPolicyFactory::DrawMesh() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:641]
UE4Editor_Renderer!FTranslucentPrimSet::RenderPrimitive() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:856]
UE4Editor_Renderer!FTranslucentPrimSet::DrawPrimitives() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:828]
UE4Editor_Renderer!FDeferredShadingSceneRenderer::DrawAllTranslucencyPasses() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:1249]
UE4Editor_Renderer!FDeferredShadingSceneRenderer::RenderTranslucency() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:1286]
UE4Editor_Renderer!FDeferredShadingSceneRenderer::Render() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\deferredshadingrenderer.cpp:1325]
UE4Editor_Renderer!RenderViewFamily_RenderThread() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\scenerendering.cpp:1652]
UE4Editor_Renderer!TGraphTask<FRendererModule::BeginRenderingViewFamily'::
21’::EURCMacro_FDrawSceneCommand>::ExecuteTask() [d:\unrealengine-vxgi-4.14\engine\source\runtime\core\public\async askgraphinterfaces.h:868]
UE4Editor_Core!FNamedTaskThread::ProcessTasksNamedThread() [d:\unrealengine-vxgi-4.14\engine\source\runtime\core\private\async askgraph.cpp:932]
UE4Editor_Core!FNamedTaskThread::ProcessTasksUntilQuit() [d:\unrealengine-vxgi-4.14\engine\source\runtime\core\private\async askgraph.cpp:679]
UE4Editor_RenderCore!RenderingThreadMain() [d:\unrealengine-vxgi-4.14\engine\source\runtime\rendercore\private\renderingthread.cpp:320]
UE4Editor_RenderCore!FRenderingThread::Run() [d:\unrealengine-vxgi-4.14\engine\source\runtime\rendercore\private\renderingthread.cpp:454]
UE4Editor_Core!FRunnableThreadWin::Run() [d:\unrealengine-vxgi-4.14\engine\source\runtime\core\private\windows\windowsrunnablethread.cpp:74][/SPOILER]
Looks like SetMesh is involved.
[SPOILER]
virtual void SetMesh(FRHICommandList& RHICmdList, FShader* Shader, const FVertexFactory* VertexFactory, const FSceneView& View, const FMeshBatchElement& BatchElement, uint32 DataFlags) const override
{
FFlexFluidSurfaceVertexFactory* SurfaceVF = (FFlexFluidSurfaceVertexFactory*)VertexFactory;
FPixelShaderRHIParamRef PixelShaderRHI = Shader->GetPixelShader();
FFlexFluidSurfaceTextures* Textures = SurfaceVF->Proxy->Textures;
bool bDownSampledTexture = SurfaceVF->Proxy->TexResScale != 1.0f;
FSamplerStateRHIParamRef samplerStateRHI = TStaticSamplerState<SF_Point, AM_Border, AM_Border, AM_Clamp>::GetRHI();
if (DepthTexture.IsBound() && Textures)
{
**147 ** **FTextureRHIParamRef TextureRHI = bDownSampledTexture ? GetTexture(Textures->UpSampledDepth) : GetTexture(Textures->SmoothDepth);**
SetTextureParameter(RHICmdList, PixelShaderRHI, DepthTexture, DepthTextureSampler,
samplerStateRHI, TextureRHI);
}
if (ThicknessTexture.IsBound() && Textures)
{
FTextureRHIParamRef TextureRHI = GetTexture(Textures->Thickness);
SetTextureParameter(RHICmdList, PixelShaderRHI, ThicknessTexture, ThicknessTextureSampler,
samplerStateRHI, TextureRHI);
}
if (ClipXYAndViewDepthToViewXY.IsBound())
{
float FOV = PI / 4.0f;
float AspectRatio = 1.0f;
if (View.IsPerspectiveProjection())
{
// Derive FOV and aspect ratio from the perspective projection matrix
FOV = FMath::Atan(1.0f / View.ViewMatrices.GetProjectionMatrix().M[0][0]);
AspectRatio = View.ViewMatrices.GetProjectionMatrix().M[1][1] / View.ViewMatrices.GetProjectionMatrix().M[0][0];
}
FVector2D VecMult(FMath::Tan(FOV*0.5f)*AspectRatio, FMath::Tan(FOV*0.5f));
SetShaderValue(RHICmdList, PixelShaderRHI, ClipXYAndViewDepthToViewXY, VecMult);
}
if (InvTexResScale.IsBound())
{
SetShaderValue(RHICmdList, PixelShaderRHI, InvTexResScale, 1.0f / SurfaceVF->Proxy->TexResScale);
}
}
[/SPOILER]
The CrashContext.runtime should highlight the issue, haven’t fully dived in yet. If anyone wanna help, you’ll be more than welcome :rolleyes:
[SPOILER]
<?xml version="1.0" encoding="UTF-8"?>
<FGenericCrashContext>
<RuntimeProperties>
<CrashVersion>3</CrashVersion>
<CrashGUID>UE4CC-Windows-33BC1D4D45E5D43ED8F2C69F769BC4CD_0000</CrashGUID>
<ProcessId>16124</ProcessId>
<IsInternalBuild>false</IsInternalBuild>
<IsPerforceBuild>false</IsPerforceBuild>
<IsSourceDistribution>true</IsSourceDistribution>
<IsEnsure>false</IsEnsure>
<IsAssert>false</IsAssert>
<CrashType>Crash</CrashType>
<SecondsSinceStart>67</SecondsSinceStart>
<GameName>UE4-FlexProject</GameName>
<ExecutableName>UE4Editor</ExecutableName>
<BuildConfiguration>Development</BuildConfiguration>
<GameSessionID />
<PlatformName>Windows</PlatformName>
<PlatformNameIni>Windows</PlatformNameIni>
<EngineMode>Editor</EngineMode>
<EngineModeEx>Dirty</EngineModeEx>
<DeploymentName />
<EngineVersion>4.14.3-0+++UE4+Release-4.14</EngineVersion>
<CommandLine>"D:/UnrealEngine-VXGI-4.14/FlexProject/FlexProject.uproject"</CommandLine>
<LanguageLCID>1033</LanguageLCID>
<AppDefaultLocale>en_US</AppDefaultLocale>
<BuildVersion>++UE4+Release-4.14-CL-0</BuildVersion>
<IsUE4Release>false</IsUE4Release>
<UserName>maxim</UserName>
<BaseDir>D:/UnrealEngine-VXGI-4.14/Engine/Binaries/Win64/</BaseDir>
<RootDir>D:/UnrealEngine-VXGI-4.14/</RootDir>
<MachineId>BBF937AD45C1BE596C13DE80A9AD14BE</MachineId>
<EpicAccountId>190137c49fa34158a76d0c46eacf0cd6</EpicAccountId>
<CallStack>UE4Editor_Engine!FFlexFluidSurfaceVertexFactoryShaderParametersPS::SetMesh() [d:\unrealengine-vxgi-4.14\engine\source\runtime\engine\private\physicsengine\flexfluidsurfacecomponent.cpp:147];<br>UE4Editor_Renderer!FMeshMaterialShader::SetMesh<FRHIPixelShader * __ptr64>() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\shaderbaseclasses.cpp:453];<br>UE4Editor_Renderer!TBasePassPixelShaderPolicyParamType<FUniformLightMapPolicyShaderParametersType>::SetMesh() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\basepassrendering.inl:73];<br>UE4Editor_Renderer!TBasePassDrawingPolicy<FUniformLightMapPolicy>::SetMeshRenderState() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\basepassrendering.h:1133];<br>UE4Editor_Renderer!FDrawTranslucentMeshAction::Process<FUniformLightMapPolicy>() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:481];<br>UE4Editor_Renderer!ProcessBasePassMesh<FDrawTranslucentMeshAction>() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\basepassrendering.h:1507];<br>UE4Editor_Renderer!FTranslucencyDrawingPolicyFactory::DrawMesh() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:641];<br>UE4Editor_Renderer!FTranslucentPrimSet::RenderPrimitive() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:856];<br>UE4Editor_Renderer!FTranslucentPrimSet::DrawPrimitives() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:828];<br>UE4Editor_Renderer!FDeferredShadingSceneRenderer::DrawAllTranslucencyPasses() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:1249];<br>UE4Editor_Renderer!FDeferredShadingSceneRenderer::RenderTranslucency() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private ranslucentrendering.cpp:1286];<br>UE4Editor_Renderer!FDeferredShadingSceneRenderer::Render() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\deferredshadingrenderer.cpp:1325];<br>UE4Editor_Renderer!RenderViewFamily_RenderThread() [d:\unrealengine-vxgi-4.14\engine\source\runtime\renderer\private\scenerendering.cpp:1652];<br>UE4Editor_Renderer!TGraphTask<`FRendererModule::BeginRenderingViewFamily'::`21'::EURCMacro_FDrawSceneCommand>::ExecuteTask() [d:\unrealengine-vxgi-4.14\engine\source\runtime\core\public\async askgraphinterfaces.h:868];<br>UE4Editor_Core!FNamedTaskThread::ProcessTasksNamedThread() [d:\unrealengine-vxgi-4.14\engine\source\runtime\core\private\async askgraph.cpp:932];<br>UE4Editor_Core!FNamedTaskThread::ProcessTasksUntilQuit() [d:\unrealengine-vxgi-4.14\engine\source\runtime\core\private\async askgraph.cpp:679];<br>UE4Editor_RenderCore!RenderingThreadMain() [d:\unrealengine-vxgi-4.14\engine\source\runtime\rendercore\private\renderingthread.cpp:320];<br>UE4Editor_RenderCore!FRenderingThread::Run() [d:\unrealengine-vxgi-4.14\engine\source\runtime\rendercore\private\renderingthread.cpp:454];<br>UE4Editor_Core!FRunnableThreadWin::Run() [d:\unrealengine-vxgi-4.14\engine\source\runtime\core\private\windows\windowsrunnablethread.cpp:74]</CallStack>
<SourceContext> 132 Ar << ClipXYAndViewDepthToViewXY;;<br> 133 Ar << InvTexResScale;;<br> 134 };<br> 135 ;<br> 136 virtual void SetMesh(FRHICommandList& RHICmdList, FShader* Shader, const FVertexFactory* VertexFactory, const FSceneView& View, const FMeshBatchElement& BatchElement, uint32 DataFlags) const override;<br> 137 {;<br> 138 FFlexFluidSurfaceVertexFactory* SurfaceVF = (FFlexFluidSurfaceVertexFactory*)VertexFactory;;<br> 139 FPixelShaderRHIParamRef PixelShaderRHI = Shader->GetPixelShader();;<br> 140 FFlexFluidSurfaceTextures* Textures = SurfaceVF->Proxy->Textures;;<br> 141 bool bDownSampledTexture = SurfaceVF->Proxy->TexResScale != 1.0f;;<br> 142 FSamplerStateRHIParamRef samplerStateRHI = TStaticSamplerState<SF_Point, AM_Border, AM_Border, AM_Clamp>::GetRHI();;<br> 143 ;<br> 144 if (DepthTexture.IsBound() && Textures);<br> 145 {;<br> 146 ***** FTextureRHIParamRef TextureRHI = bDownSampledTexture ? GetTexture(Textures->UpSampledDepth) : GetTexture(Textures->SmoothDepth);;<br> 147 SetTextureParameter(RHICmdList, PixelShaderRHI, DepthTexture, DepthTextureSampler,;<br> 148 samplerStateRHI, TextureRHI);;<br> 149 };<br> 150 ;<br> 151 if (ThicknessTexture.IsBound() && Textures);<br> 152 {;<br> 153 FTextureRHIParamRef TextureRHI = GetTexture(Textures->Thickness);;<br> 154 SetTextureParameter(RHICmdList, PixelShaderRHI, ThicknessTexture, ThicknessTextureSampler,;<br> 155 samplerStateRHI, TextureRHI);;<br> 156 };<br> 157 ;<br> 158 if (ClipXYAndViewDepthToViewXY.IsBound());<br> 159 {;<br> 160 float FOV = PI / 4.0f;;<br> 161 float AspectRatio = 1.0f;</SourceContext>
<UserDescription>Hello Unreal Engine staff! ;<br>I'm trying to merge some Nvidia build (VXGI and Flex) in 4.14.3, and currently have an editor crash i'm struggling to narrow down.</UserDescription>
<UserActivityHint />
<ErrorMessage>Access violation - code c0000005 (first/second chance not available)</ErrorMessage>
<CrashDumpMode>0</CrashDumpMode>
<CrashReporterMessage />
<Misc.NumberOfCores>6</Misc.NumberOfCores>
<Misc.NumberOfCoresIncludingHyperthreads>12</Misc.NumberOfCoresIncludingHyperthreads>
<Misc.Is64bitOperatingSystem>1</Misc.Is64bitOperatingSystem>
<Misc.CPUVendor>GenuineIntel</Misc.CPUVendor>
<Misc.CPUBrand>Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz</Misc.CPUBrand>
<Misc.PrimaryGPUBrand>NVIDIA GeForce GTX 980 Ti</Misc.PrimaryGPUBrand>
<Misc.OSVersionMajor>Windows 10</Misc.OSVersionMajor>
<Misc.OSVersionMinor />
<MemoryStats.TotalPhysical>17099374592</MemoryStats.TotalPhysical>
<MemoryStats.TotalVirtual>140737488224256</MemoryStats.TotalVirtual>
<MemoryStats.PageSize>65536</MemoryStats.PageSize>
<MemoryStats.TotalPhysicalGB>16</MemoryStats.TotalPhysicalGB>
<MemoryStats.AvailablePhysical>0</MemoryStats.AvailablePhysical>
<MemoryStats.AvailableVirtual>0</MemoryStats.AvailableVirtual>
<MemoryStats.UsedPhysical>0</MemoryStats.UsedPhysical>
<MemoryStats.PeakUsedPhysical>0</MemoryStats.PeakUsedPhysical>
<MemoryStats.UsedVirtual>0</MemoryStats.UsedVirtual>
<MemoryStats.PeakUsedVirtual>0</MemoryStats.PeakUsedVirtual>
<MemoryStats.bIsOOM>0</MemoryStats.bIsOOM>
<MemoryStats.OOMAllocationSize>0</MemoryStats.OOMAllocationSize>
<MemoryStats.OOMAllocationAlignment>0</MemoryStats.OOMAllocationAlignment>
<TimeOfCrash>636202347932160000</TimeOfCrash>
<bAllowToBeContacted>1</bAllowToBeContacted>
<PlatformFullName>Win64 [Windows 10 64b]</PlatformFullName>
<CrashReportClientVersion>1.0</CrashReportClientVersion>
<Modules>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\ICU\icu4c-53_1\Win64\VS2015\icuin53.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\ICU\icu4c-53_1\Win64\VS2015\icuuc53.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\ICU\icu4c-53_1\Win64\VS2015\icuio53.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\ICU\icu4c-53_1\Win64\VS2015\iculx53.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\ICU\icu4c-53_1\Win64\VS2015\icule53.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\ICU\icu4c-53_1\Win64\VS2015\icudt53.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor.exe;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-HierarchicalLODOutliner.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-CrashTracker.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SceneOutliner.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-CollectionManager.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-FoliageEdit.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-LandscapeEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GeometryMode.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TextureAlignMode.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-BspMode.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-HardwareSurvey.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SequenceRecorderSections.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AutomationWorker.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\MovieScene\MatineeToLevelSequence\Binaries\Win64\UE4Editor-MatineeToLevelSequence.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PlacementMode.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\MovieScene\LevelSequenceEditor\Binaries\Win64\UE4Editor-LevelSequenceEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Media\WmfMedia\Binaries\Win64\UE4Editor-WmfMediaEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Media\AvfMedia\Binaries\Win64\UE4Editor-AvfMediaFactory.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Media\AvfMedia\Binaries\Win64\UE4Editor-AvfMediaEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Media\AndroidMedia\Binaries\Win64\UE4Editor-AndroidMediaFactory.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Media\AndroidMedia\Binaries\Win64\UE4Editor-AndroidMediaEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Editor\AudioCapture\Binaries\Win64\UE4Editor-AudioCapture.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\2D\Paper2D\Binaries\Win64\UE4Editor-SmartSnapping.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SessionServices.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SessionMessages.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-LogVisualizer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-EditorLiveStreaming.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\IOS\UE4Editor-IOSPlatformEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\HTML5\UE4Editor-HTML5PlatformEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-AndroidDeviceDetection.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-AndroidPlatformEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\IOS\UE4Editor-IOSRuntimeSettings.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-AndroidRuntimeSettings.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-InputBindingEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-NiagaraEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MergeActors.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SizeMap.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TreeMap.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ReferenceViewer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-LocalizationService.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-LocalizationDashboard.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-DeviceProfileEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-UndoHistory.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-UserFeedback.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Blutility.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ProjectTargetPlatformEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ProjectSettingsViewer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-EditorSettingsViewer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SettingsEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ProjectLauncher.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SessionFrontend.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ProfilerClient.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TargetDeviceServices.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-DeviceManager.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AutomationController.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AutomationMessages.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AutomationWindow.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Layers.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PackagesDialog.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Persona.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Toolbox.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ModuleUI.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-OutputLog.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GammaUI.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Documentation.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Niagara.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-VectorVM.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-StreamingPauseRendering.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AnalyticsET.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PortalServices.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PortalRpc.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MessagingRpc.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AITestSuite.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ProfilerService.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ProfilerMessages.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TaskGraph.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Slate\SlateRemote\Binaries\Win64\UE4Editor-SlateRemote.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\OpenVR\OpenVRv1_0_2\win64\openvr_api.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\Steam\SteamVR\Binaries\Win64\UE4Editor-SteamVR.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\ProceduralMeshComponent\Binaries\Win64\UE4Editor-ProceduralMeshComponentEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\ProceduralMeshComponent\Binaries\Win64\UE4Editor-ProceduralMeshComponent.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\OculusLibrary\Binaries\Win64\UE4Editor-OculusLibrary.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\OculusInput\Binaries\Win64\UE4Editor-OculusInput.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\MobilePatchingUtils\Binaries\Win64\UE4Editor-MobilePatchingUtils.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\Steam\SteamVR\Binaries\Win64\UE4Editor-SteamVRController.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\CustomMeshComponent\Binaries\Win64\UE4Editor-CustomMeshComponent.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\CableComponent\Binaries\Win64\UE4Editor-CableComponent.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\ArchVisCharacter\Binaries\Win64\UE4Editor-ArchVisCharacter.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Experimental\HTML5Networking\Binaries\Win64\UE4Editor-HTML5Networking.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Online\OnlineSubsystemNull\Binaries\Win64\UE4Editor-OnlineSubsystemNull.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Media\MediaPlayerEditor\Binaries\Win64\UE4Editor-MediaPlayerEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GeometryCacheEd.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Experimental\AlembicImporter\Binaries\Win64\UE4Editor-AlembicImporter.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Experimental\AlembicImporter\Binaries\Win64\UE4Editor-AlembicLibrary.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GeometryCache.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Editor\SuperSearchEditor\Binaries\Win64\UE4Editor-SuperSearchEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SuperSearch.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-IntroTutorials.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Editor\SpeedTreeImporter\Binaries\Win64\UE4Editor-SpeedTreeImporter.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Editor\PluginBrowser\Binaries\Win64\UE4Editor-PluginBrowser.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Editor\MobileLauncherProfileWizard\Binaries\Win64\UE4Editor-MobileLauncherProfileWizard.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-LauncherServices.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Editor\EpicSurvey\Binaries\Win64\UE4Editor-EpicSurvey.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Developer\VisualStudioSourceCodeAccess\Binaries\Win64\UE4Editor-VisualStudioSourceCodeAccess.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Developer\UObjectPlugin\Binaries\Win64\UE4Editor-UObjectPlugin.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Developer\SubversionSourceControl\Binaries\Win64\UE4Editor-SubversionSourceControl.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-XmlParser.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Developer\PerforceSourceControl\Binaries\Win64\UE4Editor-PerforceSourceControl.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Developer\GitSourceControl\Binaries\Win64\UE4Editor-GitSourceControl.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Blendables\LightPropagationVolume\Binaries\Win64\UE4Editor-LightPropagationVolumeEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\2D\Paper2D\Binaries\Win64\UE4Editor-PaperTiledImporter.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\2D\Paper2D\Binaries\Win64\UE4Editor-PaperSpriteSheetImporter.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PixelInspectorModule.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-HotReload.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MainFrame.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TranslationEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\2D\Paper2D\Binaries\Win64\UE4Editor-Paper2DEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MeshPaint.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Messaging\UdpMessaging\Binaries\Win64\UE4Editor-UdpMessaging.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Messaging\TcpMessaging\Binaries\Win64\UE4Editor-TcpMessaging.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Blendables\LightPropagationVolume\Binaries\Win64\UE4Editor-LightPropagationVolumeRuntime.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\2D\Paper2D\Binaries\Win64\UE4Editor-Paper2D.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\WindowsMoviePlayer\Binaries\Win64\UE4Editor-WindowsMoviePlayer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Media\WmfMedia\Binaries\Win64\UE4Editor-WmfMedia.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MediaAssets.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GameLiveStreaming.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GameplayTagsEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ContentBrowser.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-BehaviorTreeEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-FunctionalTesting.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AssetTools.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AIGraph.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-CollisionAnalyzer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Media\WmfMedia\Binaries\Win64\UE4Editor-WmfMediaFactory.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GameplayTasksEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-WorkspaceMenuStructure.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MessageLog.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SlateReflector.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SourceCodeAccess.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-XAudio2.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Networking.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PhysXFormats.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MeshUtilities.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-VulkanShaderFormat.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AssetRegistry.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-QuadricMeshReduction.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-DerivedDataCache.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MetalShaderFormat.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ShaderFormatD3D.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ShaderFormatOpenGL.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ShaderPreprocessor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ShaderCompilerCommon.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ImageWrapper.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TextureFormatDXT.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\IntelISPCTexComp\Win64-Release\ispc_texcomp.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TextureFormatIntelISPCTexComp.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AudioFormatOpus.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\Vorbis\Win64\VS2015\libvorbis_64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AudioFormatOgg.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AudioFormatADPCM.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Messaging.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\IOS\UE4Editor-IOSTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-LaunchDaemonMessages.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\HTML5\UE4Editor-HTML5TargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-Android_MultiTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-Android_ASTCTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-Android_ETC2TargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-Android_ETC1TargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-Android_DXTTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-Android_ATCTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-Android_PVRTCTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\Android\UE4Editor-AndroidTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AllDesktopTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-WindowsClientTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\GameWorks\GFSDK_SSAO\GFSDK_SSAO.win64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\FLEX-1.0.0\Win64\flexExtRelease_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\FLEX-1.0.0\Win64\flexRelease_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\APEX_ClothingPROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-WindowsServerTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-WindowsNoEditorTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\APEX_LegacyPROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\APEX_DestructiblePROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\APEXFrameworkPROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\PhysX3PROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\PhysX3CommonPROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\OculusRift\Binaries\Win64\UE4Editor-OculusRift.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-DetailCustomizations.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Online\OnlineSubsystemUtils\Binaries\Win64\UE4Editor-OnlineSubsystemUtils.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Online\OnlineSubsystem\Binaries\Win64\UE4Editor-OnlineSubsystem.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SlateRHIRenderer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-OpenGLDrv.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-WindowsTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Voice.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\GameWorks\VXGI\GFSDK_VXGI_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-D3D11RHI.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Localization.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SequenceRecorder.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Sequencer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Serialization.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MovieSceneCapture.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-WebBrowser.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SourceControlWindows.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MovieSceneTools.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-BlueprintCompilerCppBackend.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-LevelEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-UMGEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Renderer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-HTTP.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GraphEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PropertyEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-BlueprintGraph.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\libfbxsdk.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Kismet.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Engine.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MacClientTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SSL.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\FLEX-1.0.0\Win64\cudart64_70.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-KismetCompiler.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AIModule.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MacServerTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ClassViewer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-EditorStyle.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MacTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-EditorWidgets.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ComponentVisualizers.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AnimGraphRuntime.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-KismetWidgets.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GameProjectGeneration.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Settings.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\PhysX3CookingPROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ConfigEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-UMG.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-BlueprintProfiler.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Landscape.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GameplayDebugger.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\PxPvdSDKPROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TextureCompressor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-BlueprintNativeCodeGen.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GameplayTags.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-VREditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-UnrealEd.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-InternationalizationSettings.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MovieSceneTracks.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AppFramework.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Slate.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-CoreUObject.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Core.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-NetworkFile.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MaterialEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MacNoEditorTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-HardwareTargeting.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AddContentDialog.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-UtilityShaders.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Online\OnlineSubsystemUtils\Binaries\Win64\UE4Editor-OnlineBlueprintSupport.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-UnrealAudio.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SourceControl.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-AnimGraph.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ViewportInteraction.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty
vTextureTools\Win64
vtt_64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Media.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SharedSettingsWidgets.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MovieScene.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-HeadMountedDisplay.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-GameplayTasks.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Foliage.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SlateCore.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-DirectoryWatcher.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MaterialUtilities.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-StreamingFile.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-DesktopWidgets.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-WidgetCarousel.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-StatsViewer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ActorPickerMode.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-JsonUtilities.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Sockets.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SoundCueEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Experimental\CharacterAI\Binaries\Win64\UE4Editor-CharacterAI.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SoundClassEditor.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-LevelSequence.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-DesktopPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PakFile.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Navmesh.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MaterialShaderQualitySettings.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Internationalization.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SceneDepthPickerMode.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ViewportSnapping.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ShaderCore.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-RHI.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SwarmInterface.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-RenderCore.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-CinematicCamera.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TextureFormatUncompressed.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-EngineSettings.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-UnrealEdMessages.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-EngineMessages.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-SandboxFile.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PacketHandler.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TextureFormatASTC.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-TextureFormatPVR.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\Ogg\Win64\VS2015\libogg_64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\IOS\UE4Editor-TVOSTargetPlatform.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Json.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Projects.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-InputCore.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\PhysX\Win64\VS2015\PxFoundationPROFILE_x64.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Plugins\Runtime\ExampleDeviceProfileSelector\Binaries\Win64\UE4Editor-ExampleDeviceProfileSelector.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-PerfCounters.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-MoviePlayer.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-CEF3Utils.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-ImageCore.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-RawMesh.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\Win64\UE4Editor-Analytics.dll;<br>D:\UnrealEngine-VXGI-4.14\Engine\Binaries\ThirdParty\Vorbis\Win64\VS2015\libvorbisfile_64.dll</Modules>
</RuntimeProperties>
<PlatformProperties>
<PlatformIsRunningWindows>1</PlatformIsRunningWindows>
<PlatformCallbackResult>0</PlatformCallbackResult>
</PlatformProperties>
</FGenericCrashContext>
[/SPOILER]
FlexFluidSurfaceComponent.cpp
[SPOILER]
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
/*=============================================================================
FlexFluidSurfaceComponent.cpp: Fluid surface implementation.
=============================================================================*/
#include "EnginePrivate.h"
#include "Net/UnrealNetwork.h"
#include "ShaderParameterUtils.h"
#include "RHIStaticStates.h"
#include "PhysicsPublic.h"
#include "ParticleEmitterInstances.h"
#include "FlexFluidSurfaceSceneProxy.h"
#include "PhysicsEngine/FlexFluidSurfaceComponent.h"
#include "PhysicsEngine/FlexContainerInstance.h"
#include "PhysicsEngine/FlexFluidSurface.h"
#include "PhysicsEngine/FlexFluidSurfaceActor.h"
#include "SceneView.h"
/*=============================================================================
Helper
=============================================================================*/
const FTexture2DRHIRef& GetTexture(TRefCountPtr<IPooledRenderTarget>& RenderTarget)
{
return (const FTexture2DRHIRef&)RenderTarget->GetRenderTargetItem().ShaderResourceTexture;
}
/*=============================================================================
FFlexFluidSurfaceVertexFactory
=============================================================================*/
class FFlexFluidSurfaceVertexFactory : public FVertexFactory
{
DECLARE_VERTEX_FACTORY_TYPE(FFlexFluidSurfaceVertexFactory);
public:
struct DataType
{
/** The stream to read the vertex position from. */
FVertexStreamComponent PositionComponent;
};
FFlexFluidSurfaceVertexFactory(FFlexFluidSurfaceSceneProxy* InProxy) : FVertexFactory(), Proxy(InProxy) {}
// FRenderResource interface.
virtual void InitRHI() override
{
VertexBuffer.InitResource();
{
uint32 Size = 4 * sizeof(FVector4);
FRHIResourceCreateInfo CreateInfo;
VertexBuffer.VertexBufferRHI = RHICreateVertexBuffer(Size, BUF_Static, CreateInfo);
// fill out the verts (vertices of view frustum on near plane in ndc), UE4 has z = 1 in ndc
FVector4* Vertices = (FVector4*)RHILockVertexBuffer(VertexBuffer.VertexBufferRHI, 0, Size, RLM_WriteOnly);
float zNearplaneOffset = 0.01f;
Vertices[0] = FVector4(1, -1, 1 - zNearplaneOffset, 1);
Vertices[1] = FVector4(1, 1, 1 - zNearplaneOffset, 1);
Vertices[2] = FVector4(-1, -1, 1 - zNearplaneOffset, 1);
Vertices[3] = FVector4(-1, 1, 1 - zNearplaneOffset, 1);
RHIUnlockVertexBuffer(VertexBuffer.VertexBufferRHI);
}
Data.PositionComponent = FVertexStreamComponent(&VertexBuffer, 0, sizeof(FVector4), VET_Float4);
UpdateRHI();
FVertexDeclarationElementList Elements;
check(Data.PositionComponent.VertexBuffer != NULL);
Elements.Add(AccessStreamComponent(Data.PositionComponent, 0));
check(Streams.Num() > 0);
InitDeclaration(Elements);
check(IsValidRef(GetDeclaration()));
}
virtual void ReleaseRHI() override
{
FVertexFactory::ReleaseRHI();
VertexBuffer.ReleaseResource();
}
static bool ShouldCache(EShaderPlatform Platform, const class FMaterial* Material, const class FShaderType* ShaderType)
{
return Material->IsUsedWithFlexFluidSurfaces() || Material->IsSpecialEngineMaterial();
}
static void ModifyCompilationEnvironment(EShaderPlatform Platform, const FMaterial* Material, FShaderCompilerEnvironment& OutEnvironment)
{
FVertexFactory::ModifyCompilationEnvironment(Platform, Material, OutEnvironment);
OutEnvironment.SetDefine(TEXT("FLEX_FLUID_SURFACE_FACTORY"), TEXT("1"));
}
static FVertexFactoryShaderParameters* ConstructShaderParameters(EShaderFrequency ShaderFrequency);
public:
FFlexFluidSurfaceSceneProxy* Proxy;
protected:
DataType Data;
FVertexBuffer VertexBuffer;
};
IMPLEMENT_VERTEX_FACTORY_TYPE(FFlexFluidSurfaceVertexFactory, "FlexFluidSurfaceVertexFactory", true, false, true, false, false);
/*=============================================================================
FVertexFactoryShaderParameters
=============================================================================*/
class FFlexFluidSurfaceVertexFactoryShaderParametersPS : public FVertexFactoryShaderParameters
{
public:
virtual void Bind(const FShaderParameterMap& ParameterMap) override
{
DepthTexture.Bind(ParameterMap, TEXT("FlexFluidSurfaceDepthTexture"));
DepthTextureSampler.Bind(ParameterMap, TEXT("FlexFluidSurfaceDepthTextureSampler"));
ThicknessTexture.Bind(ParameterMap, TEXT("FlexFluidSurfaceThicknessTexture"));
ThicknessTextureSampler.Bind(ParameterMap, TEXT("FlexFluidSurfaceThicknessTextureSampler"));
ClipXYAndViewDepthToViewXY.Bind(ParameterMap, TEXT("ClipXYAndViewDepthToViewXY"));
InvTexResScale.Bind(ParameterMap, TEXT("InvTexResScale"));
}
virtual void Serialize(FArchive& Ar) override
{
Ar << DepthTexture;
Ar << DepthTextureSampler;
Ar << ThicknessTexture;
Ar << ThicknessTextureSampler;
Ar << ClipXYAndViewDepthToViewXY;
Ar << InvTexResScale;
}
virtual void SetMesh(FRHICommandList& RHICmdList, FShader* Shader, const FVertexFactory* VertexFactory, const FSceneView& View, const FMeshBatchElement& BatchElement, uint32 DataFlags) const override
{
FFlexFluidSurfaceVertexFactory* SurfaceVF = (FFlexFluidSurfaceVertexFactory*)VertexFactory;
FPixelShaderRHIParamRef PixelShaderRHI = Shader->GetPixelShader();
FFlexFluidSurfaceTextures* Textures = SurfaceVF->Proxy->Textures;
bool bDownSampledTexture = SurfaceVF->Proxy->TexResScale != 1.0f;
FSamplerStateRHIParamRef samplerStateRHI = TStaticSamplerState<SF_Point, AM_Border, AM_Border, AM_Clamp>::GetRHI();
if (DepthTexture.IsBound() && Textures)
{
FTextureRHIParamRef TextureRHI = bDownSampledTexture ? GetTexture(Textures->UpSampledDepth) : GetTexture(Textures->SmoothDepth);
SetTextureParameter(RHICmdList, PixelShaderRHI, DepthTexture, DepthTextureSampler,
samplerStateRHI, TextureRHI);
}
if (ThicknessTexture.IsBound() && Textures)
{
FTextureRHIParamRef TextureRHI = GetTexture(Textures->Thickness);
SetTextureParameter(RHICmdList, PixelShaderRHI, ThicknessTexture, ThicknessTextureSampler,
samplerStateRHI, TextureRHI);
}
if (ClipXYAndViewDepthToViewXY.IsBound())
{
float FOV = PI / 4.0f;
float AspectRatio = 1.0f;
if (View.IsPerspectiveProjection())
{
// Derive FOV and aspect ratio from the perspective projection matrix
FOV = FMath::Atan(1.0f / View.ViewMatrices.GetProjectionMatrix().M[0][0]);
AspectRatio = View.ViewMatrices.GetProjectionMatrix().M[1][1] / View.ViewMatrices.GetProjectionMatrix().M[0][0];
}
FVector2D VecMult(FMath::Tan(FOV*0.5f)*AspectRatio, FMath::Tan(FOV*0.5f));
SetShaderValue(RHICmdList, PixelShaderRHI, ClipXYAndViewDepthToViewXY, VecMult);
}
if (InvTexResScale.IsBound())
{
SetShaderValue(RHICmdList, PixelShaderRHI, InvTexResScale, 1.0f / SurfaceVF->Proxy->TexResScale);
}
}
virtual uint32 GetSize() const { return sizeof(*this); }
FShaderResourceParameter DepthTexture;
FShaderResourceParameter DepthTextureSampler;
FShaderResourceParameter ThicknessTexture;
FShaderResourceParameter ThicknessTextureSampler;
FShaderParameter ClipXYAndViewDepthToViewXY;
FShaderParameter InvTexResScale;
};
FVertexFactoryShaderParameters* FFlexFluidSurfaceVertexFactory::ConstructShaderParameters(EShaderFrequency ShaderFrequency)
{
return ShaderFrequency == SF_Pixel ? new FFlexFluidSurfaceVertexFactoryShaderParametersPS() : NULL;
}
/*=============================================================================
FFlexFluidSurfaceSceneProxy
=============================================================================*/
FFlexFluidSurfaceSceneProxy::FFlexFluidSurfaceSceneProxy(UFlexFluidSurfaceComponent* Component)
: FPrimitiveSceneProxy(Component)
, VertexFactory(NULL)
, MeshBatch(NULL)
, Textures(NULL)
, SurfaceMaterial(NULL)
{
bFlexFluidSurface = true;
}
FFlexFluidSurfaceSceneProxy::~FFlexFluidSurfaceSceneProxy()
{
if (VertexFactory)
{
VertexFactory->ReleaseResource();
delete VertexFactory;
}
delete MeshBatch;
if (Textures)
{
Textures->Depth.SafeRelease();
Textures->DepthStencil.SafeRelease();
Textures->Thickness.SafeRelease();
Textures->SmoothDepth.SafeRelease();
Textures->DownSampledSceneDepth.SafeRelease();
Textures->UpSampledDepth.SafeRelease();
}
}
void FFlexFluidSurfaceSceneProxy::CreateRenderThreadResources()
{
check(!VertexFactory);
VertexFactory = new FFlexFluidSurfaceVertexFactory(this);
VertexFactory->InitResource();
MeshBatch = new FMeshBatch();
Textures = new FFlexFluidSurfaceTextures();
}
void ConfigureMeshBatch(FMeshBatch* MeshBatch, FMaterialRenderProxy* MaterialRenderProxy, FFlexFluidSurfaceVertexFactory* VertexFactory)
{
MeshBatch->VertexFactory = VertexFactory;
MeshBatch->DynamicVertexStride = 0;
MeshBatch->ReverseCulling = false;
MeshBatch->UseDynamicData = false;
MeshBatch->Type = PT_TriangleStrip;
MeshBatch->DepthPriorityGroup = SDPG_Foreground;
MeshBatch->MaterialRenderProxy = MaterialRenderProxy;
MeshBatch->bSelectable = false;
FMeshBatchElement& BatchElement = MeshBatch->Elements[0];
BatchElement.FirstIndex = 0;
BatchElement.NumPrimitives = 2;
BatchElement.MinVertexIndex = 0;
BatchElement.MaxVertexIndex = 3;
BatchElement.PrimitiveUniformBufferResource = &GIdentityPrimitiveUniformBuffer;
}
void FFlexFluidSurfaceSceneProxy::SetEmitterDynamicData_RenderThread(class FParticleSystemSceneProxy* PSysSceneProxy,
struct FDynamicEmitterDataBase* DynamicEmitterData)
{
check(PSysSceneProxy != nullptr);
if (DynamicEmitterData != nullptr)
{
ParticleSystemSceneProxyArray.Add(PSysSceneProxy);
DynamicEmitterDataArray.Add(DynamicEmitterData);
}
else
{
//clear DynamicEmitterData associated with PSysSceneProxy
for (int32 i = ParticleSystemSceneProxyArray.Num()-1; i >= 0; --i)
{
if (ParticleSystemSceneProxyArray* == PSysSceneProxy)
{
ParticleSystemSceneProxyArray.RemoveAtSwap(i);
DynamicEmitterDataArray.RemoveAtSwap(i);
}
}
}
}
void FFlexFluidSurfaceSceneProxy::SetDynamicData_RenderThread(FFlexFluidSurfaceProperties SurfaceProperties)
{
SurfaceMaterial = SurfaceProperties.Material;
if (SurfaceMaterial)
{
ConfigureMeshBatch(MeshBatch, SurfaceMaterial->GetRenderProxy(false), VertexFactory);
}
bCastDynamicShadow = SurfaceProperties.ReceiveShadows;
SmoothingRadius = SurfaceProperties.SmoothingRadius;
MaxRadialSamples = SurfaceProperties.MaxRadialSamples;
DepthEdgeFalloff = SurfaceProperties.DepthEdgeFalloff;
ThicknessParticleScale = SurfaceProperties.ThicknessParticleScale;
DepthParticleScale = SurfaceProperties.DepthParticleScale;
TexResScale = SurfaceProperties.TexResScale;
}
void FFlexFluidSurfaceSceneProxy::GetDynamicMeshElements(const TArray<const FSceneView*>& Views, const FSceneViewFamily& ViewFamily, uint32 VisibilityMap, FMeshElementCollector& Collector) const
{
if (SurfaceMaterial)
{
for (int32 ViewIndex = 0; ViewIndex < Views.Num(); ViewIndex++)
{
if (VisibilityMap & (1 << ViewIndex))
{
const FSceneView* View = Views[ViewIndex];
FMeshBatch& TmpMeshBatch = Collector.AllocateMesh();
ConfigureMeshBatch(&TmpMeshBatch, SurfaceMaterial->GetRenderProxy(false), VertexFactory);
Collector.AddMesh(ViewIndex, TmpMeshBatch);
}
}
}
}
FPrimitiveViewRelevance FFlexFluidSurfaceSceneProxy::GetViewRelevance(const FSceneView* View) const
{
FPrimitiveViewRelevance Result;
Result.bDrawRelevance = IsShown(View);
Result.bShadowRelevance = false;
Result.bDynamicRelevance = true;
if (SurfaceMaterial)
{
FMaterialRelevance MaterialRelevance = SurfaceMaterial->GetRelevance_Concurrent(View->FeatureLevel);
MaterialRelevance.SetPrimitiveViewRelevance(Result);
}
return Result;
}
extern TGlobalResource<FIdentityPrimitiveUniformBuffer> GIdentityPrimitiveUniformBuffer;
/*=============================================================================
UFlexFluidSurface
=============================================================================*/
UFlexFluidSurface::UFlexFluidSurface(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
SmoothingRadius = 10.0f;
MaxRadialSamples = 5;
DepthEdgeFalloff = 0.05f;
ThicknessParticleScale = 2.0f;
DepthParticleScale = 1.0f;
HalfRes = false;
ReceiveShadows = false;
Material = NULL;
}
#if WITH_EDITOR
void UFlexFluidSurface::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
{
SmoothingRadius = FMath::Clamp(SmoothingRadius, 0.0f, 1000.0f);
MaxRadialSamples = FMath::Clamp(MaxRadialSamples, 0, 100);
Super::PostEditChangeProperty(PropertyChangedEvent);
}
#endif // WITH_EDITOR
/*=============================================================================
UFlexFluidSurfaceComponent
=============================================================================*/
UFlexFluidSurfaceComponent::UFlexFluidSurfaceComponent(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
, FlexFluidSurface(NULL)
{
PrimaryComponentTick.bCanEverTick = true;
bTickInEditor = true;
bAutoActivate = true;
}
void UFlexFluidSurfaceComponent::TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction)
{
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
// Call this because bounds have changed
UpdateComponentToWorld();
#if WITH_EDITOR
if (GIsEditor || GIsPlayInEditorWorld)
{
//push all surface properties to proxy
MarkRenderDynamicDataDirty();
}
#endif
}
void UFlexFluidSurfaceComponent::SendRenderDynamicData_Concurrent()
{
Super::SendRenderDynamicData_Concurrent();
if (SceneProxy)
{
FFlexFluidSurfaceProperties SurfaceProperties;
if (FlexFluidSurface)
{
UMaterialInterface* RenderMaterial = FlexFluidSurface->Material;
if (RenderMaterial == NULL || (RenderMaterial->CheckMaterialUsage_Concurrent(MATUSAGE_FlexFluidSurfaces) == false))
{
RenderMaterial = UMaterial::GetDefaultMaterial(MD_Surface);
}
SurfaceProperties.Material = RenderMaterial;
SurfaceProperties.ReceiveShadows = FlexFluidSurface->ReceiveShadows;
SurfaceProperties.SmoothingRadius = FlexFluidSurface->SmoothingRadius;
SurfaceProperties.MaxRadialSamples = FlexFluidSurface->MaxRadialSamples;
SurfaceProperties.DepthEdgeFalloff = FlexFluidSurface->DepthEdgeFalloff;
SurfaceProperties.ThicknessParticleScale = FlexFluidSurface->ThicknessParticleScale;
SurfaceProperties.DepthParticleScale = FlexFluidSurface->DepthParticleScale;
SurfaceProperties.TexResScale = FlexFluidSurface->HalfRes ? 0.5f: 1.0f;
}
else
{
FMemory::Memset(SurfaceProperties, 0);
}
// Enqueue command to send to render thread
ENQUEUE_UNIQUE_RENDER_COMMAND_TWOPARAMETER(
FSendFlexFluidSurfaceDynamicData,
FFlexFluidSurfaceSceneProxy*, FlexFluidSurfaceSceneProxy, (FFlexFluidSurfaceSceneProxy*)SceneProxy,
FFlexFluidSurfaceProperties, SurfaceProperties, SurfaceProperties,
{
FlexFluidSurfaceSceneProxy->SetDynamicData_RenderThread(SurfaceProperties);
});
}
}
void UFlexFluidSurfaceComponent::SendRenderEmitterDynamicData_Concurrent(
FParticleSystemSceneProxy* PSysSceneProxy,
FDynamicEmitterDataBase* DynamicEmitterData)
{
check(PSysSceneProxy != nullptr);
if (!SceneProxy)
{
return;
}
// Enqueue command to send to render thread
ENQUEUE_UNIQUE_RENDER_COMMAND_THREEPARAMETER(
FSendFlexFluidSurfaceEmitterDynamicData,
FFlexFluidSurfaceSceneProxy*, FlexFluidSurfaceSceneProxy, (FFlexFluidSurfaceSceneProxy*)SceneProxy,
FParticleSystemSceneProxy*, PSysSceneProxy, PSysSceneProxy,
FDynamicEmitterDataBase*, DynamicEmitterData, DynamicEmitterData,
{
FlexFluidSurfaceSceneProxy->SetEmitterDynamicData_RenderThread(PSysSceneProxy, DynamicEmitterData);
});
}
FBoxSphereBounds UFlexFluidSurfaceComponent::CalcBounds(const FTransform & LocalToWorld) const
{
if (EmitterInstances.Num() > 0)
{
FBox SphereBoxBounds = EmitterInstances[0]->GetBoundingBox();
for (int32 i = 1; i < EmitterInstances.Num(); i++)
{
SphereBoxBounds += EmitterInstances*->GetBoundingBox();
}
return FBoxSphereBounds(SphereBoxBounds);
}
else
{
return FBoxSphereBounds(LocalToWorld.GetLocation(), FVector(0.0f, 0.0f, 0.0f), 0.0f);
}
}
FPrimitiveSceneProxy* UFlexFluidSurfaceComponent::CreateSceneProxy()
{
return new FFlexFluidSurfaceSceneProxy(this);
}
void UFlexFluidSurfaceComponent::RegisterEmitterInstance(struct FParticleEmitterInstance* EmitterInstance)
{
check(EmitterInstance);
int32 EmitterIndex = EmitterInstances.Find(EmitterInstance);
if (EmitterIndex == INDEX_NONE) //emitters are sometimes reinitialized
{
EmitterInstances.Add(EmitterInstance);
MarkRenderDynamicDataDirty();
}
}
void UFlexFluidSurfaceComponent::UnregisterEmitterInstance(struct FParticleEmitterInstance* EmitterInstance)
{
check(EmitterInstance);
int32 EmitterIndex = EmitterInstances.Find(EmitterInstance);
if (EmitterIndex != INDEX_NONE)
{
EmitterInstances.RemoveSingleSwap(EmitterInstance);
MarkRenderDynamicDataDirty();
if (EmitterInstances.Num() == 0 && GetWorld() != NULL)
{
//this will destroy the actor.
GetWorld()->RemoveFlexFluidSurface(this);
//no other operations should go here.
}
}
}
/*=============================================================================
AFlexFluidSurfaceActor
=============================================================================*/
AFlexFluidSurfaceActor::AFlexFluidSurfaceActor(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
Component = ObjectInitializer.CreateDefaultSubobject<UFlexFluidSurfaceComponent>(this, TEXT("FlexFluidSurfaceComponent0"));
RootComponent = Component;
bHidden = false;
#if WITH_EDITORONLY_DATA
if (!IsRunningCommandlet() && (GetSpriteComponent() != NULL))
{
// Structure to hold one-time initialization
struct FConstructorStatics
{
ConstructorHelpers::FObjectFinderOptional<UTexture2D> FogTextureObject;
FName ID_Fog;
FText NAME_Fog;
FConstructorStatics()
: FogTextureObject(TEXT("/Engine/EditorResources/S_ExpoHeightFog"))
, ID_Fog(TEXT("Fog"))
, NAME_Fog(NSLOCTEXT("SpriteCategory", "Fog", "Fog"))
{
}
};
static FConstructorStatics ConstructorStatics;
GetSpriteComponent()->Sprite = ConstructorStatics.FogTextureObject.Get();
GetSpriteComponent()->RelativeScale3D = FVector(0.5f, 0.5f, 0.5f);
GetSpriteComponent()->SpriteInfo.Category = ConstructorStatics.ID_Fog;
GetSpriteComponent()->SpriteInfo.DisplayName = ConstructorStatics.NAME_Fog;
FAttachmentTransformRules AttachmentRules(EAttachmentRule::KeepRelative, false);
GetSpriteComponent()->AttachToComponent(Component, AttachmentRules);
}
#endif // WITH_EDITORONLY_DATA
}
void AFlexFluidSurfaceActor::PostInitializeComponents()
{
Super::PostInitializeComponents();
bEnabled = (Component != NULL) ? Component->bVisible : false;
}
void AFlexFluidSurfaceActor::PostActorCreated()
{
Super::PostActorCreated();
}
void AFlexFluidSurfaceActor::GetLifetimeReplicatedProps(TArray< FLifetimeProperty > & OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(AFlexFluidSurfaceActor, bEnabled);
}
void AFlexFluidSurfaceActor::OnRep_bEnabled()
{
Component->SetVisibility(bEnabled);
}
/** Returns Component subobject **/
UFlexFluidSurfaceComponent* AFlexFluidSurfaceActor::GetComponent() const { return Component; }
[/SPOILER]
Once it’s stable i put this straight on my Github branche and work on adding Hairworks, whic should be way easier. Motivational pic: