I spent two years with threejs then the last 2 years with Babylon.js
Three.js has a huge community, learning 3D programming by learning three.js from the community is very feasible, lots of nice exemples around.
Babylon.js is maintained by a team of Microsoft employees. It is a cohesive piece of software with tons of integrated utilities (controls, GUI, good debugging tools, an excellent jsfiddle equivalent called playground etc).
It is the perfect balance between a rendering and a game engine.
Also it has a well engineered Typescript codebase that in my humble experience has been more stable than Three.
The docs are great, the community is nice and super active, contributing is easy but you have much less online exemples than with Three.
So my advice for a 3D novice would be to play with Three.js and see where it goes. If you are in it for art and making things look good, the amount of examples with Three will also help a lot.
Now if you value engineering, and you already have even a very modest experience with 3D programming I really recommend Babylon.js
Also you will see Aframe, react-fiber or react-babylon thrown around: don't bother if you don't already know Three or Babylon. You will outgrow them and still have to learn Three/Babylon "the correct way". I think that most people decent with Three or Babylon can make their own specific abstraction with less overhead anyway.
react-three-fibre is just a method for writing three.js code in a declarative way. It doesn't impede anything about three.js, so you can't really outgrow it and fall back to plain three.js.
I don’t have a strong opinion because I’ve never used Babylon.
However, I’ll echo the sibling comment here. I used Three.js and had some problems exporting it into my TypeScript project (using the DefinitelyTyped repo for type definitions). It eventually worked with a dumb js file that I copied over from Three and edited myself to make the export work in my project. This was in mid-2019.
Anyway, after getting that all working and moving on, I realized I should have at least tried Babylon because the code looked far more suitable for a TypeScript project. I never got around to porting over because it wasn’t crucial for my project, and Three was already working.
Based on that experience and the fact that I prefer ts, if I work on another project with 3D rendering in the browser, I’ll try Babylon.
Really you should.
I use babylonJs in my 3D export. ( https://free-visit.net).
It's very easy to program.
I was amazed at the power of this 3D API : with a few lines you do incredible stuffs.