How to create realistic .scn files?

To get some existing models to work with, here is what I did…just the basics that I know.

  1. I went to Turbosquid and found a 3D model that would work for me.
  2. Make sure it has the OBJ files. Buy and download.
  3. Next download Blender. Import the OBJ file you just bought.
  4. Export a DAE file.
  5. Drag the DAE files and any textures (png files) into the .scnassets folder in your project.
  6. Click on the DAE model in the .scnassets folder. Click to select the object in the Scene graph.
  7. Click the globe in the upper right.
  8. I clicked Diffuse and selected one of the PNGs I dragged in to apply it to the model

You can also skip the Blender conversion and just use one of the free online OBJ to DAE conversion tools. Google it. And try to buy a cheap $5 range model on Turbosquid that just has a OBJ file and not a lot of other piece parts. They are too big and create other issues as a starter approach anyway.

Update After watching a Apple WWDC presentation on Model IO in Xcode, I now see that you could drop in a OBJ file into your .scnassets folder. Select that file, go to Editor and select Convert to SCN file. That should work also but I have not tried. Worth trying with a copy of your OBJ file.

Update December 2018:
I’ve been working more with 3D files. Here is some incremental help on this issue.

Try using MeshLab to import your 3D model and convert it to a .DAE file. Drag the .DAE file into a folder in Xcode. That is what you are going to use to display in your app.

  1. http://www.meshlab.net/

If your source 3D model is a .OBJ file, there are two related files that should be in the same folder as the .OBJ file. These are a *.mtl file and a *.jpg or *.BMP file. The .mtl file can be opened with TextEdit.

Open and make sure it has a line that says: map_Kd *.jpg. The .jpg is the texture image the wraps around the 3D mesh file. I’ve found that it is best to make sure your texture file is in .jpg format. If it isn’t, change it to .jpg format (in Preview for example by resaving it as a jpeg) and then edit the .mtl file for the new .jpg file name.

I had some texture files that were .bmp and I just converted to .jpg, edited the .mtl file and I was good.

The second issue is the name of the node in the .obj file. The .obj file can also be opened with TextEdit. The .obj file should reference the .mtl file in the same folder. If not, you have a problem.

And here is the tricky part. When you are adding a childNode to the rootNode in a SceneKit scene, you have to fill in the “withName:” text name. Open the converted .DAE file that you have made from your .obj + .jpg + .mtl (all three are used when importing into MeshLab but after exporting to .DAE, there is only the .DAE file), and search for “node id =” . It might say: “node id=”node”. If so, the word “node” is the name of the childNode you enter for your text name in the “withName:” property of the scene.rootNode.childNode(withName: “node”, recursively: true) call.

You can change your node name ID to node if it isn’t already.

Hope this helps. Many hours of work and help from others to understand this next round of working with 3D models.

Leave a Comment