History

Added tools to adjust avatar LOD to LOD tools dialog. Closes #2624.

Andrzej Kapolka committed 12 years ago

Commit fe7a3591 parent d3b43a94 files · +110 −20Browse files

Showing the changes to interface/src/Menu.cpp (1 of 4 files). Show all

Unified · Split

interface/src/Menu.cpp+31−20
@@ -79,6 +79,9 @@ Menu::Menu() : · 78 unmodified lines
7979 _lodToolsDialog(NULL),
8080 _maxVoxels(DEFAULT_MAX_VOXELS_PER_SYSTEM),
8181 _voxelSizeScale(DEFAULT_OCTREE_SIZE_SCALE),
82+ _automaticAvatarLOD(true),
83+ _avatarLODDecreaseFPS(DEFAULT_ADJUST_AVATAR_LOD_DOWN_FPS),
84+ _avatarLODIncreaseFPS(ADJUST_LOD_UP_FPS),
8285 _avatarLODDistanceMultiplier(DEFAULT_AVATAR_LOD_DISTANCE_MULTIPLIER),
8386 _boundaryLevelAdjust(0),
8487 _maxVoxelPacketsPerSecond(DEFAULT_MAX_VOXEL_PPS),
@@ -273,7 +276,7 @@ Menu::Menu() : · 188 unmodified lines
273276 addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Metavoxels, 0, true);
274277 addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::BuckyBalls, 0, true);
275278 addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Particles, 0, true);
276−
279+ addActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::LodTools, Qt::SHIFT | Qt::Key_L, this, SLOT(lodTools()));
277280
278281 QMenu* voxelOptionsMenu = developerMenu->addMenu("Voxel Options");
279282
@@ -286,7 +289,6 @@ Menu::Menu() : · 6 unmodified lines
286289
287290 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::VoxelTextures);
288291 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::AmbientOcclusion);
289− addActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::LodTools, Qt::SHIFT | Qt::Key_L, this, SLOT(lodTools()));
290292 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::DontFadeOnVoxelServerChanges);
291293 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::DisableAutoAdjustLOD);
292294
@@ -415,6 +417,11 @@ void Menu::loadSettings(QSettings* settings) { · 122 unmodified lines
415417 _maxVoxels = loadSetting(settings, "maxVoxels", DEFAULT_MAX_VOXELS_PER_SYSTEM);
416418 _maxVoxelPacketsPerSecond = loadSetting(settings, "maxVoxelsPPS", DEFAULT_MAX_VOXEL_PPS);
417419 _voxelSizeScale = loadSetting(settings, "voxelSizeScale", DEFAULT_OCTREE_SIZE_SCALE);
420+ _automaticAvatarLOD = settings->value("automaticAvatarLOD", true).toBool();
421+ _avatarLODDecreaseFPS = loadSetting(settings, "avatarLODDecreaseFPS", DEFAULT_ADJUST_AVATAR_LOD_DOWN_FPS);
422+ _avatarLODIncreaseFPS = loadSetting(settings, "avatarLODIncreaseFPS", ADJUST_LOD_UP_FPS);
423+ _avatarLODDistanceMultiplier = loadSetting(settings, "avatarLODDistanceMultiplier",
424+ DEFAULT_AVATAR_LOD_DISTANCE_MULTIPLIER);
418425 _boundaryLevelAdjust = loadSetting(settings, "boundaryLevelAdjust", 0);
419426
420427 settings->beginGroup("View Frustum Offset Camera");
@@ -454,6 +461,10 @@ void Menu::saveSettings(QSettings* settings) { · 33 unmodified lines
454461 settings->setValue("maxVoxels", _maxVoxels);
455462 settings->setValue("maxVoxelsPPS", _maxVoxelPacketsPerSecond);
456463 settings->setValue("voxelSizeScale", _voxelSizeScale);
464+ settings->setValue("automaticAvatarLOD", _automaticAvatarLOD);
465+ settings->setValue("avatarLODDecreaseFPS", _avatarLODDecreaseFPS);
466+ settings->setValue("avatarLODIncreaseFPS", _avatarLODIncreaseFPS);
467+ settings->setValue("avatarLODDistanceMultiplier", _avatarLODDistanceMultiplier);
457468 settings->setValue("boundaryLevelAdjust", _boundaryLevelAdjust);
458469 settings->beginGroup("View Frustum Offset Camera");
459470 settings->setValue("viewFrustumOffsetYaw", _viewFrustumOffset.yaw);
@@ -1165,27 +1176,27 @@ void Menu::autoAdjustLOD(float currentFPS) { · 705 unmodified lines
11651176
11661177 quint64 now = usecTimestampNow();
11671178
1168− const float ADJUST_AVATAR_LOD_DOWN_FPS = 30.0f;
11691179 const quint64 ADJUST_AVATAR_LOD_DOWN_DELAY = 1000 * 1000;
1170− if (_fastFPSAverage.getAverage() < ADJUST_AVATAR_LOD_DOWN_FPS) {
1171− if (now - _lastAvatarDetailDrop > ADJUST_AVATAR_LOD_DOWN_DELAY) {
1172− // attempt to lower the detail in proportion to the fps difference
1173− float targetFps = (ADJUST_AVATAR_LOD_DOWN_FPS + ADJUST_LOD_UP_FPS) * 0.5f;
1174− float averageFps = _fastFPSAverage.getAverage();
1175− const float MAXIMUM_MULTIPLIER_SCALE = 2.0f;
1176− const float MAXIMUM_DISTANCE_MULTIPLIER = 15.0f;
1177− _avatarLODDistanceMultiplier = qMin(MAXIMUM_DISTANCE_MULTIPLIER, _avatarLODDistanceMultiplier *
1178− (averageFps < EPSILON ? MAXIMUM_MULTIPLIER_SCALE : qMin(MAXIMUM_MULTIPLIER_SCALE, targetFps / averageFps)));
1179− _lastAvatarDetailDrop = now;
1180+ if (_automaticAvatarLOD) {
1181+ if (_fastFPSAverage.getAverage() < _avatarLODDecreaseFPS) {
1182+ if (now - _lastAvatarDetailDrop > ADJUST_AVATAR_LOD_DOWN_DELAY) {
1183+ // attempt to lower the detail in proportion to the fps difference
1184+ float targetFps = (_avatarLODDecreaseFPS + _avatarLODIncreaseFPS) * 0.5f;
1185+ float averageFps = _fastFPSAverage.getAverage();
1186+ const float MAXIMUM_MULTIPLIER_SCALE = 2.0f;
1187+ _avatarLODDistanceMultiplier = qMin(MAXIMUM_AVATAR_LOD_DISTANCE_MULTIPLIER, _avatarLODDistanceMultiplier *
1188+ (averageFps < EPSILON ? MAXIMUM_MULTIPLIER_SCALE :
1189+ qMin(MAXIMUM_MULTIPLIER_SCALE, targetFps / averageFps)));
1190+ _lastAvatarDetailDrop = now;
1191+ }
1192+ } else if (_fastFPSAverage.getAverage() > _avatarLODIncreaseFPS) {
1193+ // let the detail level creep slowly upwards
1194+ const float DISTANCE_DECREASE_RATE = 0.05f;
1195+ _avatarLODDistanceMultiplier = qMax(MINIMUM_AVATAR_LOD_DISTANCE_MULTIPLIER,
1196+ _avatarLODDistanceMultiplier - DISTANCE_DECREASE_RATE);
11801197 }
1181− } else if (_fastFPSAverage.getAverage() > ADJUST_LOD_UP_FPS) {
1182− // let the detail level creep slowly upwards
1183− const float DISTANCE_DECREASE_RATE = 0.05f;
1184− const float MINIMUM_DISTANCE_MULTIPLIER = 0.1f;
1185− _avatarLODDistanceMultiplier = qMax(MINIMUM_DISTANCE_MULTIPLIER,
1186− _avatarLODDistanceMultiplier - DISTANCE_DECREASE_RATE);
11871198 }
1188−
1199+
11891200 bool changed = false;
11901201 quint64 elapsed = now - _lastAdjust;
11911202

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t