![]() |
Ответ: [TrueHorror] - разработка
Собрал игру со старым булетом( 2.78 ), тормозов от физики существенно прибавилось, но и "тряска" прекратилась. И еще на старой физике, когда залезаешь на лестницу персонаж подыхает, лестница создает выталкивающий импульс слишком сильный, но в новом такой фигни нет. Че за нах вообще? У булета дохлое комюнити и там ответа неделю ждать буду, может тут кто знает в чем дело?
|
Ответ: [TrueHorror] - разработка
PhysX
|
Ответ: [TrueHorror] - разработка
Havok
знакомый хвалит архитектуру и скорость |
Ответ: [TrueHorror] - разработка
Ну это метод решения проблемы "в лоб". Мне не охота перелопачивать движок выдергивая оттуда буллет, ибо он там очень прочно корни пустил. Физик грешит "проваливанием" объектов сквозь пол, и Continuous Collision Detection не помогает. Кароч мне нужно решение проблемы с булетом, а не замена его другим движком. Но я понимаю что ответа мне не дадут и все придется самому решать.
|
Ответ: [TrueHorror] - разработка
Цитата:
|
Ответ: [TrueHorror] - разработка
Это проблема новой версии булета, я не думаю что он с ней работал.
|
Ответ: [TrueHorror] - разработка
Цитата:
К слову я с PhysX'а перешёл на буллит, потому что у PhysX'а есть проблемы с некоторыми компиляторами, в том числе с MinGW которым я пользовался, и на форуме ответили что они заинтересованы сотрудничать с теми у кого Ну вот я проблему решил и взял буллет. А ну да править ты должен сам, потому что ты лучше других знаешь свой проект, тут уж ничего не поделать, нужно интуицию развивать, иногда это лучше чем дебагер помогает. |
Ответ: [TrueHorror] - разработка
А где у булета все настраивается? Я знаю только dynamicsWorld->GetDispathInfo()
|
Ответ: [TrueHorror] - разработка
Там настраивать можно каждый отдельный объект того или иного класса.
Ты можешь сгенерировать справку через doxygen для конкретно своей версии исходников буллета, а можешь посмотреть онлайн документацию, но она может быть немного старее, ещё можешь посмотреть хедеры. Отличия буллета от физикса, то что он не является чем-то внешним, работающим из коробки, тут заточка на то что ты буллет можешь интегрировать и перемешать со своими игровыми кодами. Например в GTA4 буллет использовался вместе с Euphoria и какими-то своими специальными движками для физики авто и т.п. |
Ответ: [TrueHorror] - разработка
Я карочи всё. Всё. Заебался. Подумываю от том чтобы использовать btKinematicCharacterController. Либо написать свой велосипед с перемещением при помощи рейкаста. Я и damping, restitution и им подобные параметры крутил и так и так и ниче. Как "дергается" игрок на наклонной поверхности так и дергается. Писец.
Сейчас у меня капсульный игрок, двигаю его SetLinearVelocity. Вот так просто. Видимо простота не всегда обеспечивает хороший результат |
Ответ: [TrueHorror] - разработка
Я поэкспериментирую с буллетом у себя, посмотрим.
Попробуй например SSAO пока. |
Ответ: [TrueHorror] - разработка
Пока я тут ещё экспериментирую, но как бы между делом: я буллет 2.82 еще пол года назад скачал, а вышел он год назад в октябре 2013.
Почему у тебя 2.81 считается новым? |
Ответ: [TrueHorror] - разработка
Я напутал все, у меня 2.83 - недавно качал, хз почему в память отложилась 2,81
|
Ответ: [TrueHorror] - разработка
На самом деле Bullet очень устойчивый движок, даже когда я намеренно пытался вывести из равновесия, никаких взрывов сцены или улетающих в небо объектов не было.
В общем что-то похожее как у тебя получилось сделать с функцией btDiscreteDynamicsWorld::stepSimulation. Там три параметра (два можно оставить по умолчанию). Первый это дельта-время, то сколько прошло с прошлого вызова (то есть сколько нужно обработать), третий параметр это время минимального шага, а второй это предел количества разрешённых минимальных шагов, в случае если дельта-время будет больше обычного значения. Например если у игры 60fps можно сделать так: deltaTime = 1.0f / 60.0f; stepSimulation( deltaTime, 4, 1.0f / 60.0f ); В данном случае будет один шаг, т. к. он равен дельта-времени. А вот в случае если по каким-то причинам игра подзастряла на 3 кадра и получилось: deltaTime = 3.0f * 1.0f / 60.0f; теперь при вызове stepSimulation( deltaTime, 4, 1.0f / 60.0f ); будет вызвано три шага. А вот в случае если игра подзастрянет на 10 кадров, то всё равно больше 4 функция не обработает -- таким образом не произойдет большого неконтролируемого интервала. Визуально это будет выглядеть как пауза, а не исчезнувший большой кусок времени. Ну так вот, а если deltaTime будет меньше минимального шага: deltaTime = 1.0f / 120.0f stepSimulation( deltaTime, 4, 1.0f / 60.0f ); то начинаются как раз такие глюки с подпрыгиванием. В общем ставить шаг точно равный fps тоже имхо не надежно, я делаю за кадр 2 шага. deltaTime ~ 1.0f / 60.0f (то есть может немного гулять). stepSimulation( deltaTime, 4, 1.0f / 120.0f ); Особых негативных последствий для производительности я не заметил, хотя у меня пока нет таких больших локаций как у тебя и стресс-тестов я не проводил. Можно вообще отсоединить физику от реального времени: stepSimulation( 1.0f / 60.0f, 1, 1.0f / 60.0f ); Тогда раз всё ровно, можно попробовать обойтись одним шагом. Скорость игры будет зависеть от FPS (что тоже не плохо, если графический движок плавно адаптирует сложность графики и FPS не скачет). Если ты делаешь безлимитный FPS то соответственно шаги придется при необходимости делать ещё меньше, чтобы умещались в deltaTime. Пока это одна из причин пригания объектов, может есть и другие... |
Ответ: [TrueHorror] - разработка
Кароч наверное все таки баг в другом, я заметил что не на всех наклонных поверхностях такой косяк( можно сказать что этих поверхностей очень мало ). Я забил кароч на этот баг. Просто в этом месте на карте уберу наклон и все. Ища баг я потратил кучу времени, которое мог бы провести с пользой.
Я кстати сделал сохранения. В общем сделал некое подобие сериализации, но упрощенное - объект восстанавливает только изменяемые игроком или игровым процессом переменные. Работает довольно хорошо. Так же поправил баги с вылетом - все было из-за инвентаря - особенно если тащить предмет в инвентаре с другого уровня. Убрал бамп с бумажек, убрал холмик( автэ это все тебе :-D ) Пятно к фонарю пока не добавил - все время просрал на борьбу с булетом. Сделал пропуск заставки по нажатии пробела. Ну и всякие маленькие изменения, коих много. |
Часовой пояс GMT +4, время: 21:20. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot