Description

Reproduced Crash on 4.18.3, 4.19.2, and Main CL 4081612.

Licensee states:

Based on a quick inspection of the code, it seems FVectorFieldVisualizationVertexFactory::ShouldCache() returns false (requires a RHI Feature Level of SM4) so the shader wasn't cached, but vector field scene proxies are created and added to the scene without checking rendering capabilities. As a fix we're thinking of modifying UVectorFieldComponent::CreateSceneProxy() to prevent the creation of the proxy if the feature level of the scene isn't at least SM4 - is this reasonable, or is there a preferred alternative?

Steps to Reproduce
  1. Open new default level
  2. Create new BP Actor, open BP
  3. Add VectorField component to empty actor
  4. Assign static vector field asset to Vector Field component (sample asset attached)
  5. Compile, save, and drag BP into level
  6. Go to Settings > Preview Rendering Level > High-End Mobile > Default High-End Mobile

Result: Crash

Callstack

LoginId:77ac66cf4b506a51a458c382c4ec63c2
EpicAccountId:5caf2c99925243e8b9b1bdcc9cd0e6cf

Fatal error: [Link Removed] [Line: 1928] Couldn't find Shader TMobileBasePassVSFNoLightMapPolicyHDRLinear64 for Material Resource LevelColorationUnlitMaterial! RenderMeshShaderMap 0, RenderThreadShaderMap 1 GameMeshShaderMap 0, GameThreadShaderMap 1, bShaderWasFoundInGameShaderMap 0 With VF=FVectorFieldVisualizationVertexFactory, Platform=PCD3D_ES31 ShouldCache: Mat=1, VF=0, Shader=1 MaterialUsageDesc: LightingModel=MSM_Unlit, BlendMode=BLEND_Opaque, SpecialEngine=1, TwoSided=0, TSNormal=1, Masked=0, Distorted=0, WritesEveryPixel=1, ModifiesMeshPosition=0, Usage={}

UE4Editor_Core!FDebug::AssertFailed() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\core\private\misc\assertionmacros.cpp:419]
UE4Editor_Engine!FMaterial::GetShader() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\engine\private\materials\materialshared.cpp:1915]
UE4Editor_Renderer!GetUniformMobileBasePassShaders<0,0>() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\renderer\private\mobilebasepassrendering.h:517]
UE4Editor_Renderer!GetMobileBasePassShaders<FUniformLightMapPolicy,0>::GetMobileBasePassShaders<FUniformLightMapPolicy,0>() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\renderer\private\mobilebasepassrendering.h:594]
UE4Editor_Renderer!FDrawMobileBasePassDynamicMeshAction::Process<0>() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\renderer\private\mobilebasepassrendering.cpp:410]
UE4Editor_Renderer!ProcessMobileBasePassMesh<FDrawMobileBasePassDynamicMeshAction,0>() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\renderer\private\mobilebasepassrendering.h:1046]
UE4Editor_Renderer!FMobileBasePassOpaqueDrawingPolicyFactory::DrawDynamicMeshTempl<0>() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\renderer\private\mobilebasepassrendering.cpp:460]
UE4Editor_Renderer!FMobileBasePassOpaqueDrawingPolicyFactory::DrawDynamicMesh() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\renderer\private\mobilebasepassrendering.cpp:538]
UE4Editor_Renderer!FMobileSceneRenderer::RenderMobileBasePass() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\renderer\private\mobilebasepassrendering.cpp:775]
UE4Editor_Renderer!FMobileSceneRenderer::Render() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\renderer\private\mobileshadingrenderer.cpp:233]
UE4Editor_Renderer!RenderViewFamily_RenderThread() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\renderer\private\scenerendering.cpp:2749]
UE4Editor_Renderer!TGraphTask<`FRendererModule::BeginRenderingViewFamily'::`33'::EURCMacro_FDrawSceneCommand>::ExecuteTask() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\core\public\async\taskgraphinterfaces.h:829]
UE4Editor_Core!FNamedTaskThread::ProcessTasksNamedThread() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\core\private\async\taskgraph.cpp:665]
UE4Editor_Core!FNamedTaskThread::ProcessTasksUntilQuit() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\core\private\async\taskgraph.cpp:574]
UE4Editor_RenderCore!RenderingThreadMain() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\rendercore\private\renderingthread.cpp:331]
UE4Editor_RenderCore!FRenderingThread::Run() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\rendercore\private\renderingthread.cpp:465]
UE4Editor_Core!FRunnableThreadWin::Run() [d:\build\++ue4+release-4.19+compile\sync\engine\source\runtime\core\private\windows\windowsrunnablethread.cpp:76]

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-59408 in the post.

2
Login to Vote

Fixed
ComponentUE - Platform - Mobile
Affects Versions4.18.34.19.24.20
Target Fix4.20
Fix Commit4129458
Main Commit4133609
Release Commit4129458
CreatedMay 21, 2018
ResolvedJun 14, 2018
UpdatedSep 16, 2019