Rendering out NDisplay screens

Oh, just in case someone else stumbles upon this problem.

I’ve solved it.

  1. Download Unreal Engine Source
  2. Open the class Plugins/Runtime/nDisplay/Source/DisplayCluster/Private/Game/EngineClasses/Scene/DisplayClusterRootActorEditor.cpp
  3. In the function “ADisplayClusterRootActor::Tick_Editor” change the first condition if (IsPreviewEnabled())//!IsRunningGameOrPIE() && IsPreviewEnabled())
  4. Open the class Plugins/Runtime/nDisplay/Source/DisplayCluster/Private/Game/EngineClasses/Scene/DisplayClusterRootActor.cpp
  5. In the function “IsRunningGameOrPIE”, replace the first return value with return false;//World && World->IsPlayInEditor();
  6. Compile project
  7. Copy the nDisplay Plugin from your newly compiled project (Engine/Plugins/Runtime/nDisplay) into the plugin folder of your own project (MyProject/Plugins/nDisplay). Create folders if they do not exist yet.
  8. In your new Project nDisplay plugin, open nDisplay/Binaries/Win64/UE4Editor.modules
  9. Open up the same modules file from the installed Engine (C:\Program Files\Epic Games\UE_4.27\Engine\Plugins\Runtime\nDisplay\Binaries\Win64\UE4Editor.modules)
  10. Copy the “BuildId” from the engine project into your custom compiled nDisplay.

Open your project and profit!

The build ID should go from a long hex to a relatively low number. For my .27 installation I went from “2a91d8a4-7699-45c8-88c9-556fd2467644” to “17155196”

What did I do and why?

  1. Delete all checks whether the game is currently running. This means the preview will keep running when playing the game or when rendering a movie. While I didn’t check, I expect this change to break usual nDisplay operations. So only do this for rendering the Unreal project to video.

  2. Copy the compiled engine plugin into the project plugin. Project plugins take priority over engine plugins which allows all your team members to properly render out scenes with nDisplay.

    However, by default it will be detected as “compiled with a different engine version”. This is usually a useful check to make sure everything remains compatible. But we deliberately compiled the plugin to work with the same engine version. Meaning it is compatible, Unreal just doesn’t register this. So

  3. We pretend the plugin was built with the correct engine version. We circumvent the check by manually entering the known ID and make Unreal believe it was compiled correctly for this version. Since we know for sure this is the case there shouldn’t be any issues.

Hope it helps anyone else :slight_smile:

3 Likes