2013-11-14 54 views
4

我想在我的Three.js应用程序中模拟相机曝光控制,我不知道该如何处理它。模拟曝光控制

所以我的问题是:我如何实现或模拟曝光控制,以便我可以配置相机或渲染器以获得非常暗光场景的清晰图像,或不会过度曝光非常明亮的场景?理想情况下,它应该与真实相机的工作方式接近(更像是调整ISO速度而不是光圈/快门)。

目前我使用各种可配置的EffectComposer后处理效果。其中一些允许在渲染之后控制亮度,对比度等。显然这对于​​微调来说并不好,因为无法从已经渲染的标准动态范围图像中恢复出现的高光或黑色阴影。

,我已经考虑一些方法:

  • 的手工调节每个光invidually,从而获得所需的曝光。这是我目前的方法,我想摆脱。
  • 已经提到后处理。这是非常有限的,并在极端情况下导致图像质量不佳。
  • 我看到一些可以调整曝光的HDR渲染示例。这些都是使用自定义HDR着色器实现的,我想尽可能使用标准的Three.js MeshPhongMaterial系统和着色器,因为其他所有内置功能(如阴影等)都是如此。我想使用这些功能并不容易,而且使用一些HDR着色器方法?请注意,我不需要高动态范围,只需调整曝光。
  • 通过对场景中的所有灯光应用某种强度倍增器进行欺骗。这看起来很难实现,因为光线衰减算法等带来了额外的复杂性,我不完全明白,而且我不认为创建看起来像是提高/降低相机灵敏度的结果并不容易。
  • 简单地调整WebGLRenderer中的gamma(预渲染)。我找不到一种方法来做到这一点,我不完全确定伽玛是否是模拟曝光的正确方法(也许它是?)。
+0

除了编写自定义着色器之外,我看不出其他选择。现有的three.js流水线在将光线应用于场景时非常僵硬,因此调整它们的强度不会是您想要的结果。还要考虑一下你希望控制的灯光和阴影的作用。但是,您可以在现有的着色器上进行构建 - 将所有位合并在一起,并更改颜色的最终分配。这可能就够了。 –

回答

0

理想情况下,一个自定义管道,但短,那么简单地统治在你的镜面&排放一个漂亮的,中位数,可见的颜色?

查看图片示例:False HDR Color Scheme

至于纹理,为什么不运行一个过滤器呢?即使只是亮度&对比度调整可能会伎俩。这会产生一种“普遍的”HDR效果。如果您想同时维护普通照明,则可能需要为每个对象维护两种材质。

+0

糟糕,我在图片中将'Specular'与'Emissive'置换。 – Jackalope