我正在尝试在球体上投射大量的32k分辨率的equirectangular地图。
由于支持1k-2k大小的纹理的旧显卡几乎无法访问32k纹理,并且将32k图像缩放到1k会丢失大量细节,我决定通过将每个源图分别投影到6个立方体来分割每个源图构成立方体贴图的面,以便在旧卡上显示更多细节。
但是,我实际上无法使用three.js显示这些立方体贴图球体。我可以将MeshPhongMaterial.envMap
设置为我的立方体贴图,但当然这会使球体网格反射纹理。
使用ShaderMaterial
和ShaderLib['cube']
来“伪造”某种类型的天体,可以产生可接受的结果。但这会降低所有使用MeshPhongMaterial
的照明,法线贴图和所有其他方便(和漂亮)事物的能力。
如果可能的话,我不想从头开始编写一个完整的着色器进行如此简单的调整(将texture2D
调用textureCube
调用一次。有没有办法强制three.js从立方体贴图而不是2D纹理中读取漫反射术语,或者是一种编辑着色器three.js在内部使用的简单方法?