Visibility vs Camera trace channels in UE4 confusion

When you perform a collision test in UE4 e.g. via line trace or sphere overlap there are two built in trace channels: Visibility and Camera.

When I was trying to find any information about which channel should I use for specific situations I couldn't find many information. It seems like they are just two channels which can be used for various things without any general definition of when to use one and when another.

But recently I've discovered a pattern in Unreal's default objects and this is my approach of how to decide which trace channel to use.

Visibility

This channels is self explanatory. Invisible objects should ignore the Visibility traces and visible objects should Block or Overlap the Visibility traces.

This might be counterintuitive when looking at the following collision presets: Pawn, Character Mesh, Ragdoll. They have the Visibility response set to Ignore. We might think that these objects should block Visibility trace as they represent visible objects. 

I think the idea is that these objects are in fact a semitransparent objects as they doesn't fill a whole collision shape (like box or capsule). You could do a line trace and doesn't hit an enemy character as it could go under it's shoulder or between it's legs. When you think about that, the default behaviour makes more sense.

However I usually set Visibility response to Block or Overlap in my enemy characters as I want to do simple test if I can shoot them.

Camera

The name of this channel is what caused confusion in my head. What is the difference between visibility and camera anyway? The confusion vanished when I started thinking about this trace not as a trace that goes from the camera but the camera object itself.

This is why Blocking Volume blocks Camera but ignores Visibility. It allows to trace through itself as it is transparent, but it will block a camera if this camera will try to go through it.

This is also why a default Collision Probe Channel for Spring Arm is a Camera channel.

Such naming convention could be introduced, because Unreal Engine was originally an engine to make  First Person Shooters, where camera was in fact a player.

Use case

A good use case of both of these channels would be an invisible blocking volume that prevents player character from falling down to the pit. 

It should prevent from perfoming a dash or teleport through it (Block Camera channel) so the player character won't go through it, but it will allow to trace a line of shot (Ignore Visibility channel) so player could shoot enemies on the other side of the pit.

In other words...

I use the following pattern: Visibility channel tells if the object is visible. Camera channel tells if anything can go through this object. Having such a pattern makes working with game less confusing. I hope this little post helped you too. Cheers!