Hi, I'm a new godot user and I always forget a lot to set contact monitoring to on and to at least 1 contact monitoring everytime I make a new rigidbody.
Is very frustrating to not know what to do, specially if you're a new user.
Isn't it a performance problem if it's on by default and a lot of people would forget about it, making their games slower by default? I'm not sure, correct me if I'm wrong.
@TomDobbelaere seems to be right as the docs are quite clear about that:
By default, rigid bodies do not keep track of contacts, because this can require a huge amount of memory if many bodies are in the scene.
As far as I know settings that can have a huge impact on performance are deactivated by default (like CCD) and I really like this approach as long as these options are explained in the docs.
So it would be nice to know...
_Disclaimer: I almost never use contact-monitoring for rigidbodies so I might be biased. I can see the benefits of activating it by default but I have less concerns about dealing with the current situation._
Rereading the issue title I get the feeling that maybe I misunderstood the proposal. @ca3games was your intention to set the contacts_reported member to 1 by default? This would make much sense.
Now that I think, I guess a warning in the editor could be enough to remind you the collider wont detect collisions.
Please turn Contact Monitor on by default. Favor usability and intuitiveness over micro-optimizations. If someone needs that micro-optimization, they are probably at a state in their game where they can look to disable stuff like that. It's little stuff like this that turns away beginners.
I did a performance benchmark with over 1000 rigid bodies bouncing on top of themselves with contact monitor on and 10 contacts being reported versus no contact monitor and 0 contracts being reported and the performance difference was virtually non-existent.
Another example was when the set_process function became no longer necessary to get the _process function to work with the advent of version 3.0. Similarly, can't Godot check to see if there are any signals connected from the RigidBody, and automatically enable or disable Contact Monitor by default if the performance consideration is really something we're worried about?
Hey @Oranjoose could you please provide your performance benchmark so I am able to confirm your observations with my hardware? If the impact is really that minimal it could be activated by default.
@pwab I created an isolated project with the performance benchmark and actually there is quite a difference in performance between contact_monitor being on or off. I think what happened in the old benchmark was that I have code that automatically turns on contact_monitor if there is a signal attached, so I think I was inadvertently turning it on in that case. Anyways, I attached the performance benchmark if you want to try it. contacts_reporting_performance_test.zip
Even so, why can't Godot check if the body_entered signal is connected on the RigidBody, and automatically enable contact_monitor if so, similar to how set_process became unnecessary with Godot 3.0? It seems there are predictable times when the dev would always want contact_monitor on and always want contact_monitor off.
why can't Godot check if the body_entered signal is connected on the RigidBody, and automatically enable contact_monitor
Because you can also trigger contact_monitor by using get_colliding_bodies(), in which case it would have to return an empty array the first time it is hit, and that would be pretty jarring.
Here is a profiler graph of the performance benchmark:

Can you spot where I toggled contact monitor on/off by pressing "Enter"? I seem to have done it around 5 times during the benchmark.
On my machine, the difference is on the order of 0.02 seconds per 1024 bodies, so around 0.019 ms per body. I think this might be low enough as to enable it by default.
If we enable this by default in 4.0, should we also remove the contact monitoring property entirely? The maximum number of contacts could be set to 0 when you need to disable it.
Feature and improvement proposals for the Godot Engine are now being discussed and reviewed in a dedicated Godot Improvement Proposals (GIP) (godotengine/godot-proposals) issue tracker. The GIP tracker has a detailed issue template designed so that proposals include all the relevant information to start a productive discussion and help the community assess the validity of the proposal for the engine.
The main (godotengine/godot) tracker is now solely dedicated to bug reports and Pull Requests, enabling contributors to have a better focus on bug fixing work. Therefore, we are now closing all older feature proposals on the main issue tracker.
If you are interested in this feature proposal, please open a new proposal on the GIP tracker following the given issue template (after checking that it doesn't exist already). Be sure to reference this closed issue if it includes any relevant discussion (which you are also encouraged to summarize in the new proposal). Thanks in advance!
Most helpful comment
Here is a profiler graph of the performance benchmark:

Can you spot where I toggled contact monitor on/off by pressing "Enter"? I seem to have done it around 5 times during the benchmark.
On my machine, the difference is on the order of 0.02 seconds per 1024 bodies, so around 0.019 ms per body. I think this might be low enough as to enable it by default.