Hey! So I wouldn’t say I’m an expert by any means, but I have done my fair share of modeling in a variety of programs and formats. So here is my 2 cents:
*side note: click the green text, its a picture!*
STL format is generally used as a ‘finished product’ ‘geometry only’ export format. STL is an abbreviation of Stereolithography, but I like to think of STL as “Standard Triangle Language” because when you export as an STL it completely changes the ‘mesh’ of the model into all triangular faces (still preserving the original shape and geometry). This is important to some people when sharing their files on the internet because it is much harder to modify a 3D model after the fact when its coming from an STL, rather than another format that preserves the original mesh that it was created with (more on this later). Not to say its impossible to modify an STL file, but it is SIGNIFICANTLY more difficult than just re-modeling it yourself. Also, with the countless slicers out there used for 3D printing and CNC machining, they all seem to work best with the STL format, in fact some slicers only accept STL. If you just browse www.thingiverse.com for any amount of time, you will notice almost all the models you download will be in the .stl format, this is because one of the two reasons listed above. 1 the creator doesn’t want anyone taking their design and modifying it. Or 2 they are just making it easier for the consumer to drag and drop that file directly into their slicer without any problems.
Now onto OBJ, obj was developed by Wavefront Technologies and is basically recognized as a ‘geometry definition file’ which is way different than stl, but can still function the same depending on the application. OBJ is pretty much the .PDF of the 3d formats, it is about as universally accepted as it gets between several CAD programs, slicers, game engines, etc. OBJ is also a much more inclusive format, preserving not only the basic ‘shape’ of the model but the original geometry and mesh it was created with. This is hugely important if you plan on using multiple programs to model or sending it off to someone else to continue work on it. Because if I was trying to continue modeling something and all I had to work with was triangles, I might as well just start over. Lastly, OBJ also has some support in the textures area. Some obj exporters allow you to ‘bake’ in your textures, meaning you can include colors into your model and the OBJ format will preserve what textures are used and where they are positionally assigned. More on why this is important later.
Let me give some real world examples, say you are planning on 3D printing a model and your slicer is pretty stable and accepts a wide array of formats. You can export that model as both an STL and an OBJ and I can guarantee you will not notice any difference between the two finished products. That said, there is more to it than that. The important thing to note about OBJ vs STL is that STL is a much simpler format, holding only basic information about a models geometry, probably why slicers like it, (which isn’t even the same geometric mesh it was created with) whereas OBJ stores information with regards to everything from the mesh to even the way the textures should be presented onto the model! This is especially useful if you want to have something printed in color through www.shapeways.com such as a mini figurine!
Here’s another example to better visualize the difference, say you create a basic cube in CAD: Cube.stl and then send it off to someone who you then expect to continue work on it. Imagine getting that file and trying to manipulate it in a simple way, maybe by increasing the height. You would have to select both of the triangles, and most likely due to the other axis being on constraints, you wont get the desired effect. You will end up with hard, diagonal, indented cuts. However, if you sent off Cube.obj you can easily click on the top face and move it up! Also note that these two cube examples are literally the simplest models just to demonstrate the point, if you were doing this with real models there would be way more triangles that wouldn’t behave the way you wanted, even if you tried to manipulate them.
So finally I will close with how and when I use each format, because I use both regularly:
-Publishing a model online for the intent of others 3D-Printing it: STL
-Sending off a model for a colleague to work on: OBJ
-Saving a model for later use: OBJ
-Asking for someone’s opinion of a model but don’t want it being modified: STL
-3D-Printing my own personal design: STL
-Moving a model between CAD software: OBJ (biiiig time OBJ on this one, Fusion 360 absolutely HATES stl!)
-Publishing a 3D-Model on Thingiverse that has been ‘remixed’ and am leaving open for further modification: STL and OBJ
-Exporting a model for use in a game engine or separate rendering application: OBJ (solely for the texture mapping, STL would work too but without textures)
Too Long Didn’t Read:
If you’re 3D printing it USE STL
If you’re continuously changing the model or care about textures USE OBJ
-If you have any further questions please let me know!