/
BirdLeon
/
ROBLOX2016
Обзор
Документация
Войти
/
BirdLeon
/
ROBLOX2016
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
App/solver/SolverConfig.cpp
169 строк
5 KB
PatoFlamejanteTV
full source code
19 дек 2024, 19:11
19 дек 2024, 19:11
05db15d
Код
Авторство
О чём код?
#include "stdafx.h" #include "solver/SolverConfig.h" FASTINTVARIABLE(PGSPenetrationMarginMax, 50000) //0.05f FASTINTVARIABLE(PGSPenetrationMarginMin, 100) //0.0001f FASTINTVARIABLE(PGSPenetrationMarginMaxBump, 5) //5% FASTINTVARIABLE(PGSPenetrationResolutionDamping, 7) //0.7 FASTINTVARIABLE(PGSPenetrationVelocityForMinMargin, 20) // 20.0f FASTINTVARIABLE(PGSAlign2AxesCorrectionDamping, 10) //1.0 FASTINTVARIABLE(PGSBallInSocketCorrectionDamping, 10) //1.0 namespace RBX { SolverConfig::SolverConfig( Type type ) { // Kernel pgsIterations = 20; // Collisions collisionRestitutionThreshold = 1.0f; collisionPenetrationMargin = 0.05f; collisionPenetrationMarginMax = float(FInt::PGSPenetrationMarginMax)/1000000.0f; collisionPenetrationMarginMin = float(FInt::PGSPenetrationMarginMin)/1000000.0f; collisionPenetrationVelocityForMinMargin = float(FInt::PGSPenetrationVelocityForMinMargin); collisionPenetrationMarginMaxBumpProportions = float(FInt::PGSPenetrationMarginMaxBump)/100.0f; collisionPenetrationResolutionDamping = float(FInt::PGSPenetrationResolutionDamping)/10.0f; collisionFrictionStaticToDynamicThreshold = 1.0f; collisionFrictionStaticScale = 1.0f; collisionFrictionDynamicScale = 1.0f; // Align2Axes align2AxesFrictionConstant = 0.02f; align2AxesPositionStageFrictionConstant = 0.01f; align2AxesMaxCorrectiveAngle = 3.0f; align2AxesCorrectionDamping = float(FInt::PGSAlign2AxesCorrectionDamping)/10.0f; // BallInSocket ballInSocketMaxCorrectionByStabilization = 0.3f; ballInSocketCorrectionDamping = float(FInt::PGSBallInSocketCorrectionDamping)/10.0f; // SOR modulation - constraints sorConstraintsModulation.thresholdMax = 1.0f; sorConstraintsModulation.thresholdMin = 0.01f; sorConstraintsModulation.aggressiveValue = 1.5f; sorConstraintsModulation.conservativeValue = 0.75f; sorConstraintsModulation.easingUpToAggressive = 0.0001f; sorConstraintsModulation.easingDownToConservative = 0.2f; // SOR modulation - Collisions sorCollisionsModulation.thresholdMax = 0.05f; sorCollisionsModulation.thresholdMin = 0.01f; sorCollisionsModulation.aggressiveValue = 1.9f; sorCollisionsModulation.conservativeValue = 1.0f; sorCollisionsModulation.easingUpToAggressive = 0.0001f; sorCollisionsModulation.easingDownToConservative = 0.2f; // Stabilization mass properties stabilizationMassReductionPower = 0.3f; stabilizationInertiaScale = 0.05f; // Impulse cache damping cacheVStageModulation.thresholdMin = 0.5f; cacheVStageModulation.thresholdMax = 2.0f; cacheVStageModulation.conservativeValue = 0.93f; cacheVStageModulation.aggressiveValue= 0.99f; cacheVStageModulation.easingDownToConservative = 0.01f; cacheVStageModulation.easingUpToAggressive = 0.0002f; cachePStageModulation.thresholdMin = 0.5f; cachePStageModulation.thresholdMax = 1.5f; cachePStageModulation.conservativeValue = 0.70f; cachePStageModulation.aggressiveValue = 0.99f; cachePStageModulation.easingDownToConservative = 0.01f; cachePStageModulation.easingUpToAggressive = 0.0002f; // Enable/disable caching velCacheDamping = 1.0f; posCacheDamping = 1.0f; constraintCachingEnabled = true; // Integration // Old damping was 0.99621 per step. Using d = -ln( 0.99621 ) / dt, where dt = 1/240, we get: angularDamping = 0.911328f; updateSimBodies = true; integrateOnlyPositions = false; // Block PGS blockPGSEnabled = true; // Virtual masses virtualMassesEnabled = true; // SOR velocityStageSOREnabled = true; positionStageSOREnabled = true; // Sim islands useSimIslands = false; // Inconsistency detector inconsistentConstraintDetectorEnabled = false; inconsistentConstraintMaxIterations = 0; inconsistentConstraintBallInSocketResidualThreshold = 0.02f; inconsistentConstraintAlign2AxesThreshold = 0.003f; inconsistentConstraintCollisionThreshold = 0.02f; inconsistentConstraintCollisionBaseThreshold = 0.001f; inconsistentConstraintDeltaThreshold = 0.0001f; // Change up things for inconsistency detector if( type == Type_InconsistencyDetector ) { inconsistentConstraintDetectorEnabled = true; inconsistentConstraintMaxIterations = 100000; pgsIterations = 100; // Disable caching posCacheDamping = 0.0f; velCacheDamping = 0.0f; constraintCachingEnabled = false; // Disable block PGS blockPGSEnabled = false; // Disable SOR velocityStageSOREnabled = false; positionStageSOREnabled = false; // Disable friction collisionFrictionStaticScale = 0.0f; collisionFrictionDynamicScale = 0.0f; // Don't update body positions updateSimBodies = false; // Mass Stabilization stabilizationMassReductionPower = 0.1f; // Sim islands useSimIslands = true; } printConvergenceDiagnostics = false; if( type == Type_PositionalCorrection ) { // Disable caching posCacheDamping = 0.0f; velCacheDamping = 0.0f; constraintCachingEnabled = false; // Disable block PGS blockPGSEnabled = false; // Disable SOR velocityStageSOREnabled = false; positionStageSOREnabled = false; // Disable friction collisionFrictionStaticScale = 0.0f; collisionFrictionDynamicScale = 0.0f; integrateOnlyPositions = true; } } }