mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 00:36:30 +02:00
add comments
This commit is contained in:
parent
721e9d426a
commit
c1906215ba
2 changed files with 22 additions and 8 deletions
|
@ -19,10 +19,6 @@
|
||||||
|
|
||||||
#include "LODManager.h"
|
#include "LODManager.h"
|
||||||
|
|
||||||
const uint64_t LOD_AUTO_ADJUST_PERIOD = 500 * USECS_PER_MSEC;
|
|
||||||
const float LOD_AUTO_ADJUST_DECREMENT_FACTOR = 0.8f;
|
|
||||||
const float LOD_AUTO_ADJUST_INCREMENT_FACTOR = 1.2f;
|
|
||||||
|
|
||||||
|
|
||||||
Setting::Handle<float> desktopLODDecreaseFPS("desktopLODDecreaseFPS", DEFAULT_DESKTOP_LOD_DOWN_FPS);
|
Setting::Handle<float> desktopLODDecreaseFPS("desktopLODDecreaseFPS", DEFAULT_DESKTOP_LOD_DOWN_FPS);
|
||||||
Setting::Handle<float> hmdLODDecreaseFPS("hmdLODDecreaseFPS", DEFAULT_HMD_LOD_DOWN_FPS);
|
Setting::Handle<float> hmdLODDecreaseFPS("hmdLODDecreaseFPS", DEFAULT_HMD_LOD_DOWN_FPS);
|
||||||
|
@ -44,10 +40,28 @@ float LODManager::getLODIncreaseFPS() {
|
||||||
return getDesktopLODIncreaseFPS();
|
return getDesktopLODIncreaseFPS();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LODManager::autoAdjustLOD(float renderTime, float deltaTimeSec) {
|
// We use a "time-weighted running average" of the renderTime and compare it against min/max thresholds
|
||||||
|
// to determine if we should adjust the level of detail (LOD).
|
||||||
|
//
|
||||||
|
// A time-weighted running average has a timescale which determines how fast the average tracks the measured
|
||||||
|
// value in real-time. Given a step-function in the mesured value, and assuming measurements happen
|
||||||
|
// faster than the runningAverage is computed, the error between the value and its runningAverage will be
|
||||||
|
// reduced by 1/e every timescale of real-time that passes.
|
||||||
|
const float LOD_ADJUST_RUNNING_AVG_TIMESCALE = 0.1f; // sec
|
||||||
|
//
|
||||||
|
// Assuming the measured value is affected by logic invoked by the runningAverage bumping up against its
|
||||||
|
// thresholds, we expect the adjustment to introduce a step-function. We want the runningAverage settle
|
||||||
|
// to the new value BEFORE we test it aginst its thresholds again. Hence we test on a period that is a few
|
||||||
|
// multiples of the running average timescale:
|
||||||
|
const uint64_t LOD_AUTO_ADJUST_PERIOD = 5 * (uint64_t)(LOD_ADJUST_RUNNING_AVG_TIMESCALE * (float)USECS_PER_MSEC); // usec
|
||||||
|
|
||||||
|
const float LOD_AUTO_ADJUST_DECREMENT_FACTOR = 0.8f;
|
||||||
|
const float LOD_AUTO_ADJUST_INCREMENT_FACTOR = 1.2f;
|
||||||
|
|
||||||
|
void LODManager::autoAdjustLOD(float renderTime, float realTimeDelta) {
|
||||||
// compute time-weighted running average renderTime
|
// compute time-weighted running average renderTime
|
||||||
const float LOD_ADJUST_TIMESCALE = 0.1f; // sec
|
// Note: we MUST clamp the blend to 1.0 for stability
|
||||||
float blend = (deltaTimeSec < LOD_ADJUST_TIMESCALE) ? deltaTimeSec / LOD_ADJUST_TIMESCALE : 1.0f;
|
float blend = (realTimeDelta < LOD_ADJUST_RUNNING_AVG_TIMESCALE) ? realTimeDelta / LOD_ADJUST_RUNNING_AVG_TIMESCALE : 1.0f;
|
||||||
_avgRenderTime = (1.0f - blend) * _avgRenderTime + blend * renderTime; // msec
|
_avgRenderTime = (1.0f - blend) * _avgRenderTime + blend * renderTime; // msec
|
||||||
if (!_automaticLODAdjust) {
|
if (!_automaticLODAdjust) {
|
||||||
// early exit
|
// early exit
|
||||||
|
|
|
@ -62,7 +62,7 @@ public:
|
||||||
Q_INVOKABLE float getLODIncreaseFPS();
|
Q_INVOKABLE float getLODIncreaseFPS();
|
||||||
|
|
||||||
static bool shouldRender(const RenderArgs* args, const AABox& bounds);
|
static bool shouldRender(const RenderArgs* args, const AABox& bounds);
|
||||||
void autoAdjustLOD(float renderTime, float deltaTimeSec);
|
void autoAdjustLOD(float renderTime, float realTimeDelta);
|
||||||
|
|
||||||
void loadSettings();
|
void loadSettings();
|
||||||
void saveSettings();
|
void saveSettings();
|
||||||
|
|
Loading…
Reference in a new issue