我想在我的Three.js應用程序中模擬相機曝光控制,我不知道該如何處理它。模擬曝光控制
所以我的問題是:我如何實現或模擬曝光控制,以便我可以配置相機或渲染器以獲得非常暗光場景的清晰圖像,或不會過度曝光非常明亮的場景?理想情況下,它應該與真實相機的工作方式接近(更像是調整ISO速度而不是光圈/快門)。
目前我使用各種可配置的EffectComposer後處理效果。其中一些允許在渲染之後控制亮度,對比度等。顯然這對於微調來說並不好,因爲無法從已經渲染的標準動態範圍圖像中恢復出現的高光或黑色陰影。
,我已經考慮一些方法:
- 的手工調節每個光invidually,從而獲得所需的曝光。這是我目前的方法,我想擺脫。
- 已經提到後處理。這是非常有限的,並在極端情況下導致圖像質量不佳。
- 我看到一些可以調整曝光的HDR渲染示例。這些都是使用自定義HDR着色器實現的,我想盡可能使用標準的Three.js MeshPhongMaterial系統和着色器,因爲其他所有內置功能(如陰影等)都是如此。我想使用這些功能並不容易,而且使用一些HDR着色器方法?請注意,我不需要高動態範圍,只需調整曝光。
- 通過對場景中的所有燈光應用某種強度倍增器進行欺騙。這看起來很難實現,因爲光線衰減算法等帶來了額外的複雜性,我不完全明白,而且我不認爲創建看起來像是提高/降低相機靈敏度的結果並不容易。
- 簡單地調整WebGLRenderer中的gamma(預渲染)。我找不到一種方法來做到這一點,我不完全確定伽瑪是否是模擬曝光的正確方法(也許它是?)。
除了編寫自定義着色器之外,我看不出其他選擇。現有的three.js流水線在將光線應用於場景時非常僵硬,因此調整它們的強度不會是您想要的結果。還要考慮一下你希望控制的燈光和陰影的作用。但是,您可以在現有的着色器上進行構建 - 將所有位合併在一起,並更改顏色的最終分配。這可能就夠了。 –