This answer is based on your comments above.
You can do what you want, but it's quite complicated, and of course you have to change the usual shader of the three. js.
Take a look at http://alteredqualia.com/three/examples/webgl_cubes_indexed.html . Look at the fragment shader and you will see
vec3 normal = normalize( cross( dFdx( vViewPosition ), dFdy( vViewPosition ) ) );
Alteredqualia uses the normal derivative in the fragment shader (instead of the normal attribute), since the positions of the vertices change in the vertex shader, and the normal is not known.
What he does is calculate the norm using the cross product of the derivatives of the screen space x and y of the fragment position.
This will establish a normal, normal face. It will be intermittent on hard edges.
three.js r.58
Westlangley
source share