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
79 _lodToolsDialog(NULL),79 _lodToolsDialog(NULL),
80 _maxVoxels(DEFAULT_MAX_VOXELS_PER_SYSTEM),80 _maxVoxels(DEFAULT_MAX_VOXELS_PER_SYSTEM),
81 _voxelSizeScale(DEFAULT_OCTREE_SIZE_SCALE),81 _voxelSizeScale(DEFAULT_OCTREE_SIZE_SCALE),
82 _automaticAvatarLOD(true),
83 _avatarLODDecreaseFPS(DEFAULT_ADJUST_AVATAR_LOD_DOWN_FPS),
84 _avatarLODIncreaseFPS(ADJUST_LOD_UP_FPS),
82 _avatarLODDistanceMultiplier(DEFAULT_AVATAR_LOD_DISTANCE_MULTIPLIER),85 _avatarLODDistanceMultiplier(DEFAULT_AVATAR_LOD_DISTANCE_MULTIPLIER),
83 _boundaryLevelAdjust(0),86 _boundaryLevelAdjust(0),
84 _maxVoxelPacketsPerSecond(DEFAULT_MAX_VOXEL_PPS),87 _maxVoxelPacketsPerSecond(DEFAULT_MAX_VOXEL_PPS),
@@ -273,7 +276,7 @@ Menu::Menu() : · 188 unmodified lines
273 addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Metavoxels, 0, true);276 addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Metavoxels, 0, true);
274 addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::BuckyBalls, 0, true);277 addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::BuckyBalls, 0, true);
275 addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Particles, 0, true);278 addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Particles, 0, true);
276 279 addActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::LodTools, Qt::SHIFT | Qt::Key_L, this, SLOT(lodTools()));
277 280
278 QMenu* voxelOptionsMenu = developerMenu->addMenu("Voxel Options");281 QMenu* voxelOptionsMenu = developerMenu->addMenu("Voxel Options");
279 282
@@ -286,7 +289,6 @@ Menu::Menu() : · 6 unmodified lines
286 289
287 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::VoxelTextures);290 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::VoxelTextures);
288 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::AmbientOcclusion);291 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::AmbientOcclusion);
289 addActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::LodTools, Qt::SHIFT | Qt::Key_L, this, SLOT(lodTools()));
290 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::DontFadeOnVoxelServerChanges);292 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::DontFadeOnVoxelServerChanges);
291 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::DisableAutoAdjustLOD);293 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::DisableAutoAdjustLOD);
292 294
@@ -415,6 +417,11 @@ void Menu::loadSettings(QSettings* settings) { · 122 unmodified lines
415 _maxVoxels = loadSetting(settings, "maxVoxels", DEFAULT_MAX_VOXELS_PER_SYSTEM);417 _maxVoxels = loadSetting(settings, "maxVoxels", DEFAULT_MAX_VOXELS_PER_SYSTEM);
416 _maxVoxelPacketsPerSecond = loadSetting(settings, "maxVoxelsPPS", DEFAULT_MAX_VOXEL_PPS);418 _maxVoxelPacketsPerSecond = loadSetting(settings, "maxVoxelsPPS", DEFAULT_MAX_VOXEL_PPS);
417 _voxelSizeScale = loadSetting(settings, "voxelSizeScale", DEFAULT_OCTREE_SIZE_SCALE);419 _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);
418 _boundaryLevelAdjust = loadSetting(settings, "boundaryLevelAdjust", 0);425 _boundaryLevelAdjust = loadSetting(settings, "boundaryLevelAdjust", 0);
419 426
420 settings->beginGroup("View Frustum Offset Camera");427 settings->beginGroup("View Frustum Offset Camera");
@@ -454,6 +461,10 @@ void Menu::saveSettings(QSettings* settings) { · 33 unmodified lines
454 settings->setValue("maxVoxels", _maxVoxels);461 settings->setValue("maxVoxels", _maxVoxels);
455 settings->setValue("maxVoxelsPPS", _maxVoxelPacketsPerSecond);462 settings->setValue("maxVoxelsPPS", _maxVoxelPacketsPerSecond);
456 settings->setValue("voxelSizeScale", _voxelSizeScale);463 settings->setValue("voxelSizeScale", _voxelSizeScale);
464 settings->setValue("automaticAvatarLOD", _automaticAvatarLOD);
465 settings->setValue("avatarLODDecreaseFPS", _avatarLODDecreaseFPS);
466 settings->setValue("avatarLODIncreaseFPS", _avatarLODIncreaseFPS);
467 settings->setValue("avatarLODDistanceMultiplier", _avatarLODDistanceMultiplier);
457 settings->setValue("boundaryLevelAdjust", _boundaryLevelAdjust);468 settings->setValue("boundaryLevelAdjust", _boundaryLevelAdjust);
458 settings->beginGroup("View Frustum Offset Camera");469 settings->beginGroup("View Frustum Offset Camera");
459 settings->setValue("viewFrustumOffsetYaw", _viewFrustumOffset.yaw);470 settings->setValue("viewFrustumOffsetYaw", _viewFrustumOffset.yaw);
@@ -1165,27 +1176,27 @@ void Menu::autoAdjustLOD(float currentFPS) { · 705 unmodified lines
1165 1176
1166 quint64 now = usecTimestampNow();1177 quint64 now = usecTimestampNow();
1167 1178
1168 const float ADJUST_AVATAR_LOD_DOWN_FPS = 30.0f;
1169 const quint64 ADJUST_AVATAR_LOD_DOWN_DELAY = 1000 * 1000;1179 const quint64 ADJUST_AVATAR_LOD_DOWN_DELAY = 1000 * 1000;
1170 if (_fastFPSAverage.getAverage() < ADJUST_AVATAR_LOD_DOWN_FPS) {1180 if (_automaticAvatarLOD) {
1171 if (now - _lastAvatarDetailDrop > ADJUST_AVATAR_LOD_DOWN_DELAY) {1181 if (_fastFPSAverage.getAverage() < _avatarLODDecreaseFPS) {
1172 // attempt to lower the detail in proportion to the fps difference1182 if (now - _lastAvatarDetailDrop > ADJUST_AVATAR_LOD_DOWN_DELAY) {
1173 float targetFps = (ADJUST_AVATAR_LOD_DOWN_FPS + ADJUST_LOD_UP_FPS) * 0.5f;1183 // attempt to lower the detail in proportion to the fps difference
1174 float averageFps = _fastFPSAverage.getAverage();1184 float targetFps = (_avatarLODDecreaseFPS + _avatarLODIncreaseFPS) * 0.5f;
1175 const float MAXIMUM_MULTIPLIER_SCALE = 2.0f;1185 float averageFps = _fastFPSAverage.getAverage();
1176 const float MAXIMUM_DISTANCE_MULTIPLIER = 15.0f;1186 const float MAXIMUM_MULTIPLIER_SCALE = 2.0f;
1177 _avatarLODDistanceMultiplier = qMin(MAXIMUM_DISTANCE_MULTIPLIER, _avatarLODDistanceMultiplier *1187 _avatarLODDistanceMultiplier = qMin(MAXIMUM_AVATAR_LOD_DISTANCE_MULTIPLIER, _avatarLODDistanceMultiplier *
1178 (averageFps < EPSILON ? MAXIMUM_MULTIPLIER_SCALE : qMin(MAXIMUM_MULTIPLIER_SCALE, targetFps / averageFps)));1188 (averageFps < EPSILON ? MAXIMUM_MULTIPLIER_SCALE :
1179 _lastAvatarDetailDrop = now;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);
1180 }1197 }
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);
1187 }1198 }
1188 1199
1189 bool changed = false;1200 bool changed = false;
1190 quint64 elapsed = now - _lastAdjust;1201 quint64 elapsed = now - _lastAdjust;
1191 1202

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