It was brought to my attention via StackOverflow that SphereGeometry produces wrong UV mappings when thetaStart is different that 0 and last theta angle is different than PI.
This occurs because it's wrongfully assumed, in the declaration of uOffset, that the first height segment maps to the south pole and the last maps to the north pole. Which is obviously wrong when setting custom theta starting angles and dimension. r104 example
I confess, I don't understand the need for this uv offset on the poles. Simply removing doesn't seem to cause any difference in full sphere mappings and it solves the current issue on dev. Eitherway, here are the results when removing uOffset entirely: branch exmaple
I got the PR ready, in case removing the uOffset is indeed correct. If it's not, then we might need to check if certain segment lands on each of the poles and adjust it correctly.
edit: I just noticed that removing the offset still doesn't quite make it work. A few mappings are still broken or misaligned, but perhaps still better than what we have in current dev.
I think you may be jumping to conclusions...
I expect this uv mapping bug was introduced with https://github.com/mrdoob/three.js/pull/16043. (r.103)
You are indeed correct, I jumped the gun for a second there 馃槃
I noticed the shearing on low poly only after making the issue, but the original mapping bug still remains.
var uOffset = ( thetaStart + v * thetaLength == 0 ) ? 0.5 / widthSegments :
( ( thetaStart + v * thetaLength == Math.PI ) ? - 0.5 / widthSegments : 0 );
Changing uOffset to account for thetaStart and thetaLength would do the trick. Except that it will might run into float precision problems.
@sciecode Thanks for posting this.
Please see if #16457 fixes your issues.
It does. Thank you @WestLangley