Ahh, ok, read that but somehow missed it - my bad. Hmm… maybe some blurring can do the job then? Apart from iterating through and adjusting the position
attribute followed by recomputing normals for the whole geometry, that is…
P.S. Altering the position
attribute for a sphere is done like this (don’t know for the text though, it probably depends on its specific segments):
var posidx, posval = new THREE.Vector3(), dirval = new THREE.Vector3(), disval;
for (var j = 0; j < geometry.parameters.heightSegments + 1; j++)
{
for (var i = 0; i < geometry.parameters.widthSegments + 1; i++)
{
// ideally you'd only alter the positions in curved segments here
posidx = (geometry.parameters.widthSegments + 1) * j + i;
posval.fromBufferAttribute(geometry.attributes.position, posidx);
dirval.fromBufferAttribute(geometry.attributes.normal, posidx);
// the distance by which you alter vertices will depend here
disval = 0;
posval.addScaledVector(dirval, disval);
geometry.attributes.position.setXYZ(posidx, posval.x, posval.y, posval.z);
};
};
geometry.computeVertexNormals();
geometry.attributes.position.needsUpdate = true;
If you can figure out a way to adjust vertices only for positions belonging to curved segments and in a way that follows some trigonometric function, something similar to this will probably do it. I’m not sure if simply adjusting vertices with a hardcoded value to trigger smoothing via recomputing normals will work, but you can try.