Hi everyone and merry cristmas!
I create archviz visualizations with unreal on a pretty realistic level. See some of my work here in case you are interested: Login • Instagram
I love what you can achieve with unreal engine, but as always I am looking for a way to improve my results even further and also for ways to improve things in a way that surpasses the engine´s normal capabilities.
For quite some time I thought that the fresnel of unreal´s specular doesn´t look to great, so …
- I isolated the fresnel
- of unreal and vray
- and started comparing both results
- using different IOR values inside vray
- and trying to achieve the same inside unreal
For people who are interested how I did it, I did it by:
- using a pure white HDRI for lighting
- that was set invisible (BG only)
- giving a sphere a completely black diffuse color
- turning tonemapper, bloom, SSR etc. inside Unreal off
- setting the same exposure by using a sphere with a single color and with no specular as a reference
- (at least) trying to make some settings so that other sphere´s don´t affect each other regarding lighting (did work in vray, but not in unreal with GPU lightmass)
Here some example results of Vray:
https://drive.google.com/file/d/1A8m…ew?usp=sharing
From left to right different IOR values (I think 1.2, 1.46, 2 and 2.5)
From top to bottom simply different reflection amount.
The white sphere was used for exposure matching of unreal and vray.
Don´t mind the red circle.
I could now show some comparison screenshots of unreal, but to make it short:
-
Unreal´s fresnel just matches a single IOR value pretty close (1.3 or so, don´t remember exactly since I don´t have my pc here)
-
but the edges are still to bright (noticeable) and the mid (between center and edges) to dark (always refering to the visual sphere results of my vray screen in this post)
-
other IORs couldn´t be reproduced since even if you plug a “custom fresnel node” into the specular input the default fresnel of the specular determines the maximum value that you can reach for a pixel
-
unreal´s specular fresnel seems to work like a multiplier here
-
whatever you put into the specular input of a material, be it a single value or a fresnel node, it seems to get multiplied by the default fresnel
-
for example this way recreating higher IOR fresnels simply is not possible since the multiplication with the default fresnel will lead to a way to weak reflection amount in the center
-
datasmith results seem very unrealistic to me and way to strong since it uses the metallic input which shouldn´t be used because of tinted reflections
-
also Unreal by default changes diffuse/base color based on the specular value you set, which I don´t like at all. I think they do it in order to create some fake fresnel effect. Why? I don´t know, even though I have some theories.
-
I used Clear Coat shader to get rid of this effect in my experiments
-
setting default specular to 0 and using clear coat specular amount only
After comparing I just can say that I think that it would be great for Unreal if Epic would update the specular options of materials. And by that I mean…
- creating a shader setting that allows you to plug custom fresnel function outputs into the specular input of a material (which is disabling/removing the default fresnel as multiplier)
- and also a settings that disables the effect that the specular amount affects the luminance of the albedo/diffuse color
Of course Epic´s strategy was always to make the shader “easy to master” as they even wrote in some documents, looking ´however at more and more people coming from archviz to unreal and knowing that Epic by default always cared a lot about making things as flexible/customizable as possible too I think these 2 settings would add quite a lot more realism.
Some people might think it would be very expensive to create custom/realstic fresnels, however I could already recreate other fresnels simulating other IORs very easily and with low costs by…
- adding and subtracting multiple different fresnel outputs
- and also by using multiplication
So what do you guys think?
Would be nice to hear your thoughts, where I am possibly wrong and if it is already achievable with some hacks/custom coding.
Thanks,
Marcus