Hi everyone,
We have a 180° cylindrical surface that we project onto using 3 FullHD Video Projectors (7m diameter by 3m height, around 4000x1000px). We can also use two of these module to have a ccomplete 360° cylinder surrounding the spectator. We’d like to use Unreal Engine to project in real-time a cylindrical projection so the user, if placed at the center of the cylinder, would have a perfect simulation of the orientation of its head mimicked.
We already did the warping and blending of the 3 VPs using MadMapper. For the tests, we use a single computer with an RTX card connected to the 3 VPs and one display - it is not a problem if the framerate is very low for now (+ no quadro sync), and once we are satisfied with the camera paths, we can render a frame sequence if we want a better framerate. Unfortunately, MadMapper cannot be used directly to export files that would be used with nDisplay, so I wanted to reach out to understand what are the available options - I see four at the moment:
- nDisplay can ingest *.mpcdi calibration files, as well as Vioso Anyblend or Scalable Display EasyBlend files. Are these softwares the recommended way to set-up the calibration of a cylindrical screen? Are there open-source or cheaper alternatives to export mpcdi calibration files (it seems like dataton watchout and 7th sense software also allow mpcdi export, but all of these are priced quite high for testing purposes)? On Anyblend trial version for now I could not correctly calibrate automatically using a camera (because the central VP is very distorted). Moreover, the 360 cylinder calibration would be tricky, even with a fisheye lens, since portion of the projection screen would be masked by the structure supporting the cylinder.
- Since our cylindrical surface is already warped and blended using MadMapper, we could instead feed a video stream or file of a cylindrical projection to MadMapper. We have created a compositor shader which converts cubemaps or 360 equirectangular to cylindrical projection with the correct ratio for our screen. Combined with the Camera 360 plugin, this does work. However, it means we are not using nDisplay, so either the projection computer would accept the real time app at a decent framerate (but probably impossible with 6 VPs on the 360 cylinder), either we would need to do the 3D renders offline and inupt the video files to madmapper.
- We could place two or three perspective cameras in the scene, map their renders onto a cylinder mesh UV unwrapped, and use that resulting texture, probably using SceneCapture and a RenderTarget. Most tutorials only use a single camera projected onto a single mesh, so we should combine at least three textures (of 120° hfov cams) for the 360 cylinder. Again, we would be limited by the computing power of the single computer.
- Finally, there is now (since 4.25?) an option in nDisplay to use a mesh, but there is not a lot of documentation or tutorials (probably because it is more recent). Would that be the preferred option? How would I define, if i give my 360° cylindrical mesh as an input to the nDisplay configuration file, that I want to project onto this mesh from its center (or from a point somewhere else in the cylinder by the way)? Would the camera be used as the center of projection - so its position relative to the cylinder in the scene would dictate the projection? It also seems that coming in 4.27 is a way to visualize the nDisplay configuration file, does it also work for cylindrical screens?
Again, the 3 last suggestions would use the 3 VPs (or 6 in the 360 case) as one unique cylindrical screen, and we would feed the stream to MadMapper, so there would be no way to dispatch the computation between multiple slaves. So I think the preferred option is the first one, nDisplay using mpcdi (or other supported) calibration files exported from one of the listed softwares, so any advice on the software with the smallest feature set or the most cost efficient would be great since our setup is really simple. And in the meantime, if any of the other 3 options seems more appropriate, please do not hesitate to come back to us!
Thanks a lot for your time and best regards,