1 - Both will use resources. Graphics cards have a limited amount of memory and bandwidth, so referencing too many gigantic textures will use up those resources (but memory, the capacity for large textures, is typically less of an issue than bandwidth, the speed of transferring those large textures). Shader calculations on the other hand will eat up your pixel shading performance, and typically that’s going to be your bottleneck. Everyone wants more complex shaders and higher quality lighting, post-process, high resolution, faster framerates, etc, and with the advent of shared texture samplers, draw calls typically associated with textures are no longer an issue. Ideally, you’d use all the resources you have available, so a combination of methods will give you the best results.
2 - I like to stay as close to default levels as possible, but that’s dodging the question. Obviously more complex shaders like ocean water with translucency, displacement, reflections, depth-based opacity, wave breaks, and panning normals will require a lot of instructions. Again, it depends on a number of factors (resolution/framerate goal of project, whether you’re targeting mobile or high-end GTX 980 setups, the style of the project, and the type of material in question). For PC projects it’s generally good practice for your necessary code to stay below 130 instructions for most base pass+static lighting rendering shaders, but that number’s just for me personally. If you choose to use absolutely no stationary or dynamic lighting, just static lighting for the entire game, you can double your shader complexity and get the same performance. Personally I’m a shader nut (Mario Kart 8), but I also have to admit that a simpler, cleaner style in 1080p also looks amazing (Rayman Legends).
3 - Materials themselves don’t usually waste more than one draw , but if a static mesh references more than one material, then each instance of that mesh will create two draw calls. If you use the shared samplers from UE 4.6 and beyond, you can basically group multiple textures together into one draw . Multiple static meshes and multiple materials will result in more draw calls, but like the texture/shader issue, you have to use discretion to tell whether or not it’s smarter to use more materials and draw calls or group together more often (hint: if it’s going in your level a hundred times, please don’t give it 3 materials. If it’s your player character, 7 materials is not insane). A well-optimized project takes advantage of both to keep draw calls and material complexity balanced low. Foliage instancing used to be one draw per group, but UE 4.7 seems to dissolve this issue in the same way it dissolved texture samplers by using arrays, and I’m guessing now all foliage actors of the same static mesh are considered as one draw .
4 - Yes.
5 - I typically prefer to use uncompressed .tga with UE4’s default DXT1 compression for most cases, or no compression for special cases. Typically I find compression artifacts are what drive people to keep using progressively larger textures, and it’s better to make good use of a quality, less compressed texture at 1/4 the size than to quadruple the texture space, compress it, and allow the quality (especially the color depth/contrast) to suffer. If you’re rendering a sharp noise map, it needs to retain that contrast and it must be uncompressed. Normal Maps also benefit from less compression. Alpha channels using hard-edge masks need to be smooth and well defined, otherwise they appear with jagged edges. Other than that, .tga with default compression settings is good for most purposes. Memory and texel rendering is not as much of an issue now as it used to be in the past, so as long as you’re not filling a giant library full of 4k textures, you should be fine. Remember, textures don’t have to be square: colored gradients look great at 1128, and that size is half as large as a 1616 pixel texture. If your material is going to tile along a short wall, the texture needs more variation in width than height, so you can cut its height down and use a texture with 1:4 or 1:8 aspect ratio and save a ton of pixels. Not to mention detail maps: tiling detail maps over larger general ones to break up repetition. I’m making a shader right now that takes advantage of this, and you can render a hundred square meters of tiling bricks extremely easily with extremely small textures.