maptalks / maptalks.three

A maptalks layer to render with three.js.
https://deyihu.github.io/maptalks.three.website/
MIT License
567 stars 129 forks source link

使用新版本three时,设置outputColorSpace不生效问题 #640

Closed aoyaZY closed 3 months ago

aoyaZY commented 3 months ago

技术背景:threeLayer加到groupLayer中,并且groupLayer开了后处理。 需求:我希望导入的模型可以修改颜色空间属性。如outputEncoding(旧版本138)/outputColorSpace(新版本158) 在新版本中,设置这些属性均无法生效,但是在旧版本中通过设置toneMapping是可以修改到想要的效果的。所以我想对比两个版本之间的差异,从而找到问题。以下是我的一些发现:

Three版本138.3中 修改threeLayer.getThreeRenderer().toneMapping = 4;可修改颜色系统。
image image

所以我想看设置outputEncoding之后,程序发生了什么导致变化。经排查发现,他会跑到更新program的方法。 image

但是在新版本158下,这个方法就一直没有进来,我在纯three环境下,设置outputColorSpace是可以进来的,也试过在fusion.gl的案例里加是可以进来这个方法,并且设置是有效果。

新版本158 设置 threeLayer.getThreeRenderer().outputColorSpace = THREE.LinearSRGBColorSpace或者 threeLayer.getThreeRenderer().toneMapping = 2 都没有效果 image image

代码都没有进到这个方法, image

不知道这个是不是对解决新版本的three设置颜色空间有帮助。

fuzhenn commented 3 months ago

讨论后确定outputSpace本身的设置是ok的,只是GroupGLLayer后处理打开后,导致outputSpace无法生效,这个issue暂时先关闭。