4

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

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

目前我使用各种可配置的 EffectComposer 后处理效果。其中一些允许在渲染后控制亮度、对比度等。显然,这除了微调之外没有什么好处,因为不可能从已经渲染的标准动态范围图像中恢复高光或黑色阴影。

我考虑过的一些方法:

  • 单独手动调整每盏灯以获得所需的曝光。这是我目前的方法,我想摆脱它。
  • 已经提到后处理。这太有限了,并且在极端情况下会导致糟糕的图像质量。
  • 我看到了一些可以调整曝光的 HDR 渲染示例。这些是使用自定义 HDR 着色器实现的,我想尽可能使用标准 Three.js MeshPhongMaterial 系统和着色器,因为所有其他内置功能,如阴影等。我想使用这些功能并不容易,并且使用一些 HDR 着色器方法?请注意,我不需要高动态范围,只需要可调曝光。
  • 通过对场景中的所有灯光应用某种强度乘数来作弊。这似乎很难实际实现,因为光衰减算法等带来了我不完全理解的额外复杂性,而且我认为创建看起来与提高/降低相机灵敏度相同的结果并不容易。
  • 只需在 WebGLRenderer(预渲染)中调整 gamma。我找不到这样做的方法,而且我不完全确定伽玛是否是模拟曝光的正确方法(也许是?)。
4

1 回答 1

0

理想情况下,一个自定义管道,但除此之外,如何简单地控制您的镜面反射和自发光,以获得漂亮的、中等的、可见的颜色?

参见图片示例:假 HDR 颜色方案

至于纹理,为什么不对它们运行过滤器呢?即使只是亮度和对比度调整也可以解决问题。这将产生“通用”的类似 HDR 的效果。如果您想同时保持普通照明,您可能需要为每个对象维护两种材质。

于 2014-02-05T21:10:55.710 回答