Because all I really see are demos and toy apps I’m curious whether its common in more “pro” apps to use primitives such as BoxGeometry, PlaneGeometry, etc?
In other words, is it common to ponder over the primitive composition of an object I wish to create, or just skip it, and unless its very obvious, like a planet or a donut, start from scratch with BufferGeometry?
I don’t think most developers are spending much time composing the primitive shapes in their three.js code, although the occasional plane or box can certainly come in handy. What to do instead would depend on the style you are trying to achieve:
Procedural: Certain styles make more sense to code than to create in modeling software; generative art by people like Jaume Sanchez Elias would be a good example of this. Often this means programmatically generating a BufferGeometry with some known structure and then using GLSL shaders to deform it further.
Other: If you’re making something with a deliberately low-poly style, ala Minecraft, the primitive shapes are not a bad choice.
Personally I would start with Blender (https://www.blender.org/); it’s free and has a good glTF exporter, which makes life much easier when you want to bring your work into three.js. This is what you’ll find recommended in courses like https://threejs-journey.xyz/, as well.
Would it be a good strategy to modify the BufferGeometry data itself, ignoring shaders, for something like modeling software like SketchUp? (I’m assuming threes baked in shaders are still used for things like panning, zooming and rotating, so you’ll still get some GPU goodness from those operations.)