Question: I have a wavefront object that I have imported into blender, and a simple cylindrical projection that I am trying to apply to it. The cylindrical projection is mapped around the prime meridian with longitude 0 on the left & right edges.

How do I apply this mapping to the 3D model in Blender?

My Attempted Solution: I tried 2 approaches: UV mapping and texture nodes. Both of them have run into problems so far.

(1) I unwrapped the model onto my texture with the following settings, but I wasn't able to get the model to map "properly" onto the texture. Here is an example of what I ended up with: https://imgur.com/a/KvWtGps - this is with the settings:

  • Directions: View on Equator
  • Align: ZX
  • Radius: 1.000
  • Correct Aspect: Check
  • Clip to Bounds: Unchecked
  • Scale to Bounds: Checked

(2) I also tried adding an image texture node to my model (with the texture coordinate node). However, all the settings I chose have given me stretched lines. Here is an album of my "best" attempts: https://imgur.com/a/DUraRQ3

Background: I am attempting to create a textured model of an asteroid in Blender using data from NASA's PDS SBN. Specifically, I am looking to replicate the version of Eros from the 3D Asteroid Catalogue (click "Grayscale" on the website to see the texture), but with Blender instead of ThreeJS.

For reference, the wavefront file I'm using is located here, and the simple cylindrical projection I'm using is located here (warning, large image file).

  • $\begingroup$ Have you tried to texture it directly with an environment texture? Depending on the axis conventions, you may have to rotate the texture or/and the mesh model. $\endgroup$ – lemon Feb 19 '20 at 11:14

You can use an environment texture in order to project on the mesh surface.

enter image description here

The environment texture is generally used for scene environment lightning, but it performs an equirectangular projection that seems to meet our need here.

Take the object output from the texture coordinates node.

Plug it into a vector mapping.

And plug its result into the env texture node.

Now we just have to handle what needs to be rotated in the mapping (it's a guess): here a rotation of 180 around X and a -1 scale for Z seem to correspond perfectly to the mesh.

They are little distortions on the left part, but all craters have found the good place, it seems.

The texture from the link in the question is not included as too large to be uploaded with the blend file:

Note: 'equirectangular projection' is also called 'equidistant cylindrical projection'

  • 1
    $\begingroup$ And I was wondering why my texture is still stretched. Now I see :) Thanks for lesson :) $\endgroup$ – vklidu Feb 19 '20 at 18:15
  • 1
    $\begingroup$ Thank you, that is perfect! I believe the stretching on the left is a result of the texture map itself, as it is present in the 3D asteroid catalogue as well. $\endgroup$ – Taycan Feb 20 '20 at 18:42
  • 1
    $\begingroup$ Perhaps the 180 degree rotation is explained here sbnarchive.psi.edu/pds3/multi_mission/… $\endgroup$ – batFINGER Feb 25 '20 at 16:01
  • $\begingroup$ @batFINGER, yes 0 on left and right, not at Greenwich. $\endgroup$ – lemon Feb 25 '20 at 16:09
  • 1
    $\begingroup$ @batFINGER, remember this from Cegaton? blender.stackexchange.com/questions/52904/… but the asteroid is not spherical or cylindrical... or from Leon blender.stackexchange.com/questions/24043/… $\endgroup$ – lemon Feb 25 '20 at 16:58

The idea is to map on sphere first, than stretch to Asteroid shape.

Quite helpful is "grid" seen on source site you provided. So you can try apply some "grid" texture to check if you are applying it correctly.

enter image description here enter image description here

Original topology is Cube so I recreated it for nicer topo in Blender

  • Add Cube / Subdivide (W) / To Sphere (Shift+Alt+S) 1
  • Unwrapp > Cylinder Projection
  • Add shape key (Basic and Key1)
  • For Shapekey Key1 set value 1 (in Object Data Properties > Shape Keys)
  • Add Shrinkwrapp modifier > Target Asteroid (Positive and Negative)

For more details add SubdivisionSurface modifier before Shrinkwrapp.

enter image description here enter image description here

enter image description here enter image description here


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.