mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 16:14:35 +02:00
Merge pull request #2477 from ey6es/master
Adjust avatar LOD more aggressively: raise detail slowly when above our ...
This commit is contained in:
commit
acf4b2d172
3 changed files with 30 additions and 6 deletions
|
@ -113,18 +113,18 @@
|
||||||
<context>
|
<context>
|
||||||
<name>Menu</name>
|
<name>Menu</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="src/Menu.cpp" line="449"/>
|
<location filename="src/Menu.cpp" line="455"/>
|
||||||
<source>Open .ini config file</source>
|
<source>Open .ini config file</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="src/Menu.cpp" line="451"/>
|
<location filename="src/Menu.cpp" line="457"/>
|
||||||
<location filename="src/Menu.cpp" line="463"/>
|
<location filename="src/Menu.cpp" line="469"/>
|
||||||
<source>Text files (*.ini)</source>
|
<source>Text files (*.ini)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="src/Menu.cpp" line="461"/>
|
<location filename="src/Menu.cpp" line="467"/>
|
||||||
<source>Save .ini config file</source>
|
<source>Save .ini config file</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
|
@ -61,6 +61,7 @@ Menu* Menu::getInstance() {
|
||||||
|
|
||||||
const ViewFrustumOffset DEFAULT_FRUSTUM_OFFSET = {-135.0f, 0.0f, 0.0f, 25.0f, 0.0f};
|
const ViewFrustumOffset DEFAULT_FRUSTUM_OFFSET = {-135.0f, 0.0f, 0.0f, 25.0f, 0.0f};
|
||||||
const float DEFAULT_FACESHIFT_EYE_DEFLECTION = 0.25f;
|
const float DEFAULT_FACESHIFT_EYE_DEFLECTION = 0.25f;
|
||||||
|
const float DEFAULT_AVATAR_LOD_DISTANCE_MULTIPLIER = 1.0f;
|
||||||
const int FIVE_SECONDS_OF_FRAMES = 5 * 60;
|
const int FIVE_SECONDS_OF_FRAMES = 5 * 60;
|
||||||
|
|
||||||
Menu::Menu() :
|
Menu::Menu() :
|
||||||
|
@ -75,9 +76,11 @@ Menu::Menu() :
|
||||||
_lodToolsDialog(NULL),
|
_lodToolsDialog(NULL),
|
||||||
_maxVoxels(DEFAULT_MAX_VOXELS_PER_SYSTEM),
|
_maxVoxels(DEFAULT_MAX_VOXELS_PER_SYSTEM),
|
||||||
_voxelSizeScale(DEFAULT_OCTREE_SIZE_SCALE),
|
_voxelSizeScale(DEFAULT_OCTREE_SIZE_SCALE),
|
||||||
|
_avatarLODDistanceMultiplier(DEFAULT_AVATAR_LOD_DISTANCE_MULTIPLIER),
|
||||||
_boundaryLevelAdjust(0),
|
_boundaryLevelAdjust(0),
|
||||||
_maxVoxelPacketsPerSecond(DEFAULT_MAX_VOXEL_PPS),
|
_maxVoxelPacketsPerSecond(DEFAULT_MAX_VOXEL_PPS),
|
||||||
_lastAdjust(usecTimestampNow()),
|
_lastAdjust(usecTimestampNow()),
|
||||||
|
_lastAvatarDetailDrop(usecTimestampNow()),
|
||||||
_fpsAverage(FIVE_SECONDS_OF_FRAMES),
|
_fpsAverage(FIVE_SECONDS_OF_FRAMES),
|
||||||
_loginAction(NULL)
|
_loginAction(NULL)
|
||||||
{
|
{
|
||||||
|
@ -386,6 +389,8 @@ void Menu::loadSettings(QSettings* settings) {
|
||||||
_maxVoxels = loadSetting(settings, "maxVoxels", DEFAULT_MAX_VOXELS_PER_SYSTEM);
|
_maxVoxels = loadSetting(settings, "maxVoxels", DEFAULT_MAX_VOXELS_PER_SYSTEM);
|
||||||
_maxVoxelPacketsPerSecond = loadSetting(settings, "maxVoxelsPPS", DEFAULT_MAX_VOXEL_PPS);
|
_maxVoxelPacketsPerSecond = loadSetting(settings, "maxVoxelsPPS", DEFAULT_MAX_VOXEL_PPS);
|
||||||
_voxelSizeScale = loadSetting(settings, "voxelSizeScale", DEFAULT_OCTREE_SIZE_SCALE);
|
_voxelSizeScale = loadSetting(settings, "voxelSizeScale", DEFAULT_OCTREE_SIZE_SCALE);
|
||||||
|
_avatarLODDistanceMultiplier = loadSetting(settings, "avatarLODDistanceMultiplier",
|
||||||
|
DEFAULT_AVATAR_LOD_DISTANCE_MULTIPLIER);
|
||||||
_boundaryLevelAdjust = loadSetting(settings, "boundaryLevelAdjust", 0);
|
_boundaryLevelAdjust = loadSetting(settings, "boundaryLevelAdjust", 0);
|
||||||
|
|
||||||
settings->beginGroup("View Frustum Offset Camera");
|
settings->beginGroup("View Frustum Offset Camera");
|
||||||
|
@ -425,6 +430,7 @@ void Menu::saveSettings(QSettings* settings) {
|
||||||
settings->setValue("maxVoxels", _maxVoxels);
|
settings->setValue("maxVoxels", _maxVoxels);
|
||||||
settings->setValue("maxVoxelsPPS", _maxVoxelPacketsPerSecond);
|
settings->setValue("maxVoxelsPPS", _maxVoxelPacketsPerSecond);
|
||||||
settings->setValue("voxelSizeScale", _voxelSizeScale);
|
settings->setValue("voxelSizeScale", _voxelSizeScale);
|
||||||
|
settings->setValue("avatarLODDistanceMultiplier", _avatarLODDistanceMultiplier);
|
||||||
settings->setValue("boundaryLevelAdjust", _boundaryLevelAdjust);
|
settings->setValue("boundaryLevelAdjust", _boundaryLevelAdjust);
|
||||||
settings->beginGroup("View Frustum Offset Camera");
|
settings->beginGroup("View Frustum Offset Camera");
|
||||||
settings->setValue("viewFrustumOffsetYaw", _viewFrustumOffset.yaw);
|
settings->setValue("viewFrustumOffsetYaw", _viewFrustumOffset.yaw);
|
||||||
|
@ -1185,8 +1191,24 @@ void Menu::autoAdjustLOD(float currentFPS) {
|
||||||
}
|
}
|
||||||
_fpsAverage.updateAverage(currentFPS);
|
_fpsAverage.updateAverage(currentFPS);
|
||||||
|
|
||||||
bool changed = false;
|
|
||||||
quint64 now = usecTimestampNow();
|
quint64 now = usecTimestampNow();
|
||||||
|
|
||||||
|
if (_fpsAverage.getAverage() < ADJUST_LOD_DOWN_FPS) {
|
||||||
|
if (now - _lastAvatarDetailDrop > ADJUST_LOD_DOWN_DELAY) {
|
||||||
|
// attempt to lower the detail in proportion to the fps difference
|
||||||
|
float targetFps = (ADJUST_LOD_DOWN_FPS + ADJUST_LOD_UP_FPS) * 0.5f;
|
||||||
|
_avatarLODDistanceMultiplier *= (targetFps / _fpsAverage.getAverage());
|
||||||
|
_lastAvatarDetailDrop = now;
|
||||||
|
}
|
||||||
|
} else if (_fpsAverage.getAverage() > ADJUST_LOD_UP_FPS) {
|
||||||
|
// let the detail level creep slowly upwards
|
||||||
|
const float DISTANCE_DECREASE_RATE = 0.01f;
|
||||||
|
const float MINIMUM_DISTANCE_MULTIPLIER = 0.1f;
|
||||||
|
_avatarLODDistanceMultiplier = qMax(MINIMUM_DISTANCE_MULTIPLIER,
|
||||||
|
_avatarLODDistanceMultiplier - DISTANCE_DECREASE_RATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool changed = false;
|
||||||
quint64 elapsed = now - _lastAdjust;
|
quint64 elapsed = now - _lastAdjust;
|
||||||
|
|
||||||
if (elapsed > ADJUST_LOD_DOWN_DELAY && _fpsAverage.getAverage() < ADJUST_LOD_DOWN_FPS
|
if (elapsed > ADJUST_LOD_DOWN_DELAY && _fpsAverage.getAverage() < ADJUST_LOD_DOWN_FPS
|
||||||
|
|
|
@ -89,7 +89,7 @@ public:
|
||||||
void autoAdjustLOD(float currentFPS);
|
void autoAdjustLOD(float currentFPS);
|
||||||
void setVoxelSizeScale(float sizeScale);
|
void setVoxelSizeScale(float sizeScale);
|
||||||
float getVoxelSizeScale() const { return _voxelSizeScale; }
|
float getVoxelSizeScale() const { return _voxelSizeScale; }
|
||||||
float getAvatarLODDistanceMultiplier() const { return DEFAULT_OCTREE_SIZE_SCALE / _voxelSizeScale; }
|
float getAvatarLODDistanceMultiplier() const { return _avatarLODDistanceMultiplier; }
|
||||||
void setBoundaryLevelAdjust(int boundaryLevelAdjust);
|
void setBoundaryLevelAdjust(int boundaryLevelAdjust);
|
||||||
int getBoundaryLevelAdjust() const { return _boundaryLevelAdjust; }
|
int getBoundaryLevelAdjust() const { return _boundaryLevelAdjust; }
|
||||||
|
|
||||||
|
@ -202,12 +202,14 @@ private:
|
||||||
LodToolsDialog* _lodToolsDialog;
|
LodToolsDialog* _lodToolsDialog;
|
||||||
int _maxVoxels;
|
int _maxVoxels;
|
||||||
float _voxelSizeScale;
|
float _voxelSizeScale;
|
||||||
|
float _avatarLODDistanceMultiplier;
|
||||||
int _boundaryLevelAdjust;
|
int _boundaryLevelAdjust;
|
||||||
QAction* _useVoxelShader;
|
QAction* _useVoxelShader;
|
||||||
int _maxVoxelPacketsPerSecond;
|
int _maxVoxelPacketsPerSecond;
|
||||||
QMenu* _activeScriptsMenu;
|
QMenu* _activeScriptsMenu;
|
||||||
QString replaceLastOccurrence(QChar search, QChar replace, QString string);
|
QString replaceLastOccurrence(QChar search, QChar replace, QString string);
|
||||||
quint64 _lastAdjust;
|
quint64 _lastAdjust;
|
||||||
|
quint64 _lastAvatarDetailDrop;
|
||||||
SimpleMovingAverage _fpsAverage;
|
SimpleMovingAverage _fpsAverage;
|
||||||
QAction* _loginAction;
|
QAction* _loginAction;
|
||||||
QAction* _chatAction;
|
QAction* _chatAction;
|
||||||
|
|
Loading…
Reference in a new issue