1
0
mirror of https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git synced 2025-08-24 05:05:29 +08:00
Files
LearnOpenGL-CN/05 Advanced Lighting/06 HDR.md
Meow J 5ccc5e4059 Update README.md
Update HDR progress
img/ dir for images
Replace html with picture formula
05 Light casters encoding -> UTF-8
2015-06-25 23:17:19 +08:00

17 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

本文作者JoeyDeVries由Meow J翻译自[http://learnopengl.com](http://learnopengl.com/#!Getting-started/Shaders)
##HDR
当存在帧缓冲区(Framebuffer)时亮度和颜色的值是默认被限制在0.0到1.0之间的. 这个看起来无辜的语句使我们一直将亮度与颜色的值设置在这个范围内,尝试着与场景契合. 这样是能够运行的,也能给出还不错的效果. 但是如果我们遇上了一个特定的区域其中有多个亮光源使这些数值总和超过了1.0,又会发生什么呢? 答案是这些片段中超过1.0的亮度或者颜色值会被限制在1.0, 从而导致场景混成一片,难以分辨:
![](http://learnopengl.com/img/advanced-lighting/hdr_clamped.png)
这是由于大量片段的颜色值都非常接近1.0,在很大一个区域内每一个亮的片段都有相同的白色. 这损失了很多的细节,使场景看起来非常假.
解决这个问题的一个方案是减小光源的强度从而保证场景内没有一个片段亮于1.0. 然而这并不是一个好的方案,因为你需要使用不切实际的光照参数. 一个更好的方案是让颜色暂时超过1.0然后将其转换至0.0到1.0的区间内,从而防止损失细节.
显示器被限制为只能显示值为0.0到1.0间的颜色,但是在光照方程中却没有这个限制. 通过使片段的颜色超过1.0我们有了一个更大的颜色范围这也被称作HDR.(High Dynamic Range, 高动态范围) 有了HDR亮的东西可以变得非常亮暗的东西可以变得非常暗而且充满细节.
---
#WIP