| 1234567891011121314151617181920212223242526272829303132333435 |
- mixin PPEyeAdaptationParams
- {
- code
- {
- [internal]
- cbuffer EyeAdaptationParams
- {
- // [0]: x - histogram scale, y - histogram offset, z - histogram percent low, w - histogram percent high
- // [1]: x - min adaptation, y - max adaptation, z - adaptation speed up, w - adaptation speed down
- // [2]: x - exposure scale, y - frame time delta, z - min. allowed intensity, w - nothing
- float4 gEyeAdaptationParams[3];
- }
-
- /**
- * Smooths out eye adaptation changes over multiple frames so they aren't as jarring.
- *
- * @param old Eye adaptation value from the previous frame.
- * @param target Ideal eye adaptation value for this frame.
- * @param frameDelta Time difference between this and last frame, in seconds.
- * @return Smoothed eye adaptation.
- */
- float smoothEyeAdaptation(float old, float target, float frameDelta)
- {
- float diff = target - old;
- float speedUp = gEyeAdaptationParams[1].z;
- float speedDown = gEyeAdaptationParams[1].w;
- float adaptionSpeed = (diff > 0) ? speedUp : speedDown;
- float scale = 1.0f - exp2(-frameDelta * adaptionSpeed);
- return clamp(old + diff * scale, gEyeAdaptationParams[1].x, gEyeAdaptationParams[1].y);
- }
- };
- };
|