Hi tas, I was also a vfx convert when I started with UE4, so I feel your pain. What Daniel and ZacD said are both very useful tips and I would like to just add on. I would say that you could get away with using some high poly meshes (not crazy high poly, mind you.), Although if you do, if you want avoid performance issues, you should definitely make use of aggressive LOD transitions. But you’ll also need a way of making up for the performance cost, as well. Like Daniel said, a big factor is what hardware you’re targeting, and unfortunately it’s not as simple as spec sheets and and benchmarks. Different GPUs handle different things better and worse than others. Even if they’re in the same GPU brand and family.
I mean, if you’re aiming for as close to photorealism as possible, then my suggestion would be to bake normal for most of your meshes. Because, from what I’ve experienced, the actual meshes and textures aren’t usually the issue when it comes to performance, unless they have either crazy high or really poor topology. You’ll be getting far larger performance hits from things like particle effects, Screen-space/planar reflections, dynamic ambient occlusion, non-static lighting, tessellation/displacement, movable lights, certain directional lighting options, poorly executed code/blueprints, and of course, draw cells.
Textures, including normal maps aren’t usually an issue, especially with higher end GPUs because of texture streaming, as long as occluders are used effectively.
Something else you could use is distance-based tessellation and displacement, which will subdivide the polys, or tris in the case of a game engine, and implement the displacement map as the main camera gets closer to the objects.
Zbrush’s decimation plugin is useful for reducing and maintaining a high poly silhouette while reducing the poly count significantly.
Hope some of this helps!