Implementing UE4 in VFX pipeline

Hi,

I am considering implementing UE4 in my VFX pipeline for animatics and some background environment. I am now in the initial phase of exploring the pros and cons and there are few features I need to be able to use and haven’t found out for sure yet.

First of all is the exr support. I found UE4 supports them but I didn’t find whether ts specifically supports linear LUT so we could easily compose and CC the images in Nuke.

Secondly I use many custom IDs and other passes. I found it’s possible to make some sort of custom pass, but can I make for example a separate pass that writes in only specific shader? (i.e. specific object or shader all white). Can zdepth pass be set to absolute distance (not just 0-1, but full unclamped distance values). Also does UE4 support multichanel exr? (all passes within the exr - not a necessity but it is convenient).

And lastly does UE4 support advanced render settings such as anti-alias sampling, motion vector, ray-count or linear loght workflow? I haven’t seen this in the image sequence export settings.

Could anyone clarify any of my issues or provide their experience with implementing UE4 in VFX pipeline?

Thanks
Martin :slight_smile:

Hi, I am not able to answer all of your questions but I do have answers for some of them (I might be wrong about some info aswell) :slight_smile:

So when exporting multipass in HDR (using ACEScg capture gamut) it seems that the final image pass produces the results that are not the same as in engine (it looks like your scene with r.TonemapperFilm=0 (it was default tonemapper before 4.15) but it does indeed capture with over 0-1) in After Effects I applied a tonemapper effect in order to replicate the results that would look simmilar to r.TonemapperFilm=1 (default in 4.15).

About anti-alias sampling and motion vectors. I personally turn the anti-aliasing completely off inside of the engine, I don’t like FXAA, TAA has too many ghosting artifacts in my opinion and just looks messy. So I guess rendering it at a higher resolution and downscaling it in Nuke would be the best choice (or even using some 2D anti-alias solutions in Nuke, I guess there is something like that). Oh and I don’t think you can export motion vectors (yet), it was recommended on the old UE roadmap so I guess it will be implemented in the future.

Something I didn’t find out is how to make custom render passes (something like World Position Pass), I used a post-process material that outputs World Position Pass and rendered it in HDR but I think it does not have all the color data necessery for making something like a position mask. If you know how to make a custom render pass I think you could make something like a custom pass for motion vectors (you can visualize them with this command: VisualizeTexture GBufferVelocity RGB UV0).

The multichannel exr isn’t supported (yet), but as for the motion vectors, I remember seeing this on old UE roadmap so this might be implemented in the future aswell.

Depth pass is clamped 0-1, and if using a atmospheric fog as a sky, the rendered image will have the sky as full black (tho this shouldn’t be a problem because there is basically nothing that has a 0 value when rendered, the closest what I could get is 0.0124 (and thats a gun attached to the camera). Even at 0-1 it still has enough information for you to work with it (I guess). U will just have to key out the full black and use something like levels to control the black and white point.

Heres the image of the stock rendered depth pass and an after image that has full black keyed out, is inverted and has levels applied to it.

Stock: https://i.gyazo.com/a68c7247a62fc3646d2258f2ea10ee5b.png
Edited: https://i.gyazo.com/8e61906fd31534d697a5a21dba23a164.png

Hopefully I answered some of your questions. :slight_smile:

Hi,

Thanks for you quick and comprehensive reply. If it is ok I’d like to ask a couple of follow-up questions.

I am not sure I completely understood what you meant in the first paragraph. What I need is standart linear exr output (no sRGB, no other LUT, pure linear data). I work in Nuke so dont know it AE supports linear workflow, but in VFX it is a necessity. It might be that UE doesn’t work in linear under the hood, but I’d actually would be surprised if it were otherwise. I just don’t know how to make UE to give the pure data out.

As far as the AA goes double res is a useable workaround, the problem is when you need a 3k or 4k output. Double res then isn’t usually supported.

Regarding the render passes I am really confused about how they work in UE. I not only didnt find one I could define myself (but that might be possible with some sort of UE blueprint). But more importantly I didn’t find any settings for the premade ones (for example for AO you need to be able to setup the sampling and distance, you should also be able to set sampling mode and possibly chanels for all of the passes. In UE I found only how to add them and remove (I might be missing something here).

As far as the absolute depth pass I saw that in UE there is ‘depth’ and ‘depth.world units’ (also both can be either custom or scene). Do yiu know the difference between those? Could it be that the ‘world units’ has absolut unclamped distance values? Clamped is workable, but doesn’t have as much detail.

Hi, Don’t know if my previous reply notified you, i may have posted it as a reply to my own post :smiley:

Hi, yeah I didn’t recieve the notification.

About the linear EXR output, I am not too sure because when exporting as EXR you have to choose a Color Gamut and each Color Gamut produces colors that are a bit different. (Check the bottom of this page: https://docs.unrealengine.com/latest/INT/Engine/Sequencer/Workflow/CustomRenderPass/). As I can’t give a correct answer to this question I guess its better to wait for someone who has more experience to reply on it.

The double res should work yeah, but the AA is really a big no in my opinion.

The passes like AO are basically just what you see when you go to buffer visualization to visualize a specific pass (Check here: View Modes | Unreal Engine Documentation). I am not too sure if you can actually increase the samples for AO in UE4, but all the values are controlled by a Post-Processing volume. You might be able to increase the samples/quality through console commands tho.

About the depth, I am not sure how does “depth.world units” really work, as I personally never really used it. I guess someone with more experience should comment on this aswell.

About world position pass, I do have a solution.
Thanks to you, I know where is the BufferVisualization shaders.
I modify Roughness and metallic Pass to store World Position Positive and Negative. becourse I found UE4 can’t store Negative values in EXR format. So, This is a compromise way.
Than, I modify Specular pass to store Specular , roughness, metallic in original Specular RGB.
Also Need to find some way to get motion vector. still looking.

I’m interested in this very same pipeline. Would be awesome to know if there’s a way to expose those buffers.