forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты C++ (http://forum.boolean.name/forumdisplay.php?f=56)
-   -   [TrueHorror] - разработка (http://forum.boolean.name/showthread.php?t=17293)

mr.DIMAS 11.10.2014 12:32

Ответ: [TrueHorror] - разработка
 
Собрал игру со старым булетом( 2.78 ), тормозов от физики существенно прибавилось, но и "тряска" прекратилась. И еще на старой физике, когда залезаешь на лестницу персонаж подыхает, лестница создает выталкивающий импульс слишком сильный, но в новом такой фигни нет. Че за нах вообще? У булета дохлое комюнити и там ответа неделю ждать буду, может тут кто знает в чем дело?

tirarex 11.10.2014 12:50

Ответ: [TrueHorror] - разработка
 
PhysX

Mr_F_ 11.10.2014 12:56

Ответ: [TrueHorror] - разработка
 
Havok
знакомый хвалит архитектуру и скорость

mr.DIMAS 11.10.2014 13:23

Ответ: [TrueHorror] - разработка
 
Ну это метод решения проблемы "в лоб". Мне не охота перелопачивать движок выдергивая оттуда буллет, ибо он там очень прочно корни пустил. Физик грешит "проваливанием" объектов сквозь пол, и Continuous Collision Detection не помогает. Кароч мне нужно решение проблемы с булетом, а не замена его другим движком. Но я понимаю что ответа мне не дадут и все придется самому решать.

ARA 11.10.2014 14:39

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 288007)
Ну это метод решения проблемы "в лоб". Мне не охота перелопачивать движок выдергивая оттуда буллет, ибо он там очень прочно корни пустил. Физик грешит "проваливанием" объектов сквозь пол, и Continuous Collision Detection не помогает. Кароч мне нужно решение проблемы с булетом, а не замена его другим движком. Но я понимаю что ответа мне не дадут и все придется самому решать.

Попробуй обратиться к Coks юзеру. Он в своё время делал враппер буллета на блиц. Думаю, шарит :)

mr.DIMAS 11.10.2014 14:42

Ответ: [TrueHorror] - разработка
 
Это проблема новой версии булета, я не думаю что он с ней работал.

Samodelkin 11.10.2014 15:44

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от Samodelkin
Проблемы с физикой могут быть от значения проникновения тел друг в друга, в буллете бывает что от релиза к релизу меняются некоторые значения по умолчанию и их лучше установить явно.

В буллете всё можно настроить и всё будет работать как надо.
К слову я с PhysX'а перешёл на буллит, потому что у PhysX'а есть проблемы с некоторыми компиляторами, в том числе с MinGW которым я пользовался, и на форуме ответили что они заинтересованы сотрудничать с теми у кого много денег большие проекты, а мелкие разрабы, если не хотят пользоваться тем софтом что и большие разрабы (то есть висуал студией), пусть сами решают свои проблемы.
Ну вот я проблему решил и взял буллет.

А ну да править ты должен сам, потому что ты лучше других знаешь свой проект, тут уж ничего не поделать, нужно интуицию развивать, иногда это лучше чем дебагер помогает.

mr.DIMAS 11.10.2014 15:50

Ответ: [TrueHorror] - разработка
 
А где у булета все настраивается? Я знаю только dynamicsWorld->GetDispathInfo()

Samodelkin 11.10.2014 16:01

Ответ: [TrueHorror] - разработка
 
Там настраивать можно каждый отдельный объект того или иного класса.
Ты можешь сгенерировать справку через doxygen для конкретно своей версии исходников буллета, а можешь посмотреть онлайн документацию, но она может быть немного старее, ещё можешь посмотреть хедеры.
Отличия буллета от физикса, то что он не является чем-то внешним, работающим из коробки, тут заточка на то что ты буллет можешь интегрировать и перемешать со своими игровыми кодами. Например в GTA4 буллет использовался вместе с Euphoria и какими-то своими специальными движками для физики авто и т.п.

mr.DIMAS 11.10.2014 17:16

Ответ: [TrueHorror] - разработка
 
Я карочи всё. Всё. Заебался. Подумываю от том чтобы использовать btKinematicCharacterController. Либо написать свой велосипед с перемещением при помощи рейкаста. Я и damping, restitution и им подобные параметры крутил и так и так и ниче. Как "дергается" игрок на наклонной поверхности так и дергается. Писец.

Сейчас у меня капсульный игрок, двигаю его SetLinearVelocity. Вот так просто. Видимо простота не всегда обеспечивает хороший результат

Samodelkin 11.10.2014 17:27

Ответ: [TrueHorror] - разработка
 
Я поэкспериментирую с буллетом у себя, посмотрим.

Попробуй например SSAO пока.

Samodelkin 11.10.2014 20:36

Ответ: [TrueHorror] - разработка
 
Пока я тут ещё экспериментирую, но как бы между делом: я буллет 2.82 еще пол года назад скачал, а вышел он год назад в октябре 2013.
Почему у тебя 2.81 считается новым?

mr.DIMAS 11.10.2014 21:33

Ответ: [TrueHorror] - разработка
 
Я напутал все, у меня 2.83 - недавно качал, хз почему в память отложилась 2,81

Samodelkin 11.10.2014 22:13

Ответ: [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.

Пока это одна из причин пригания объектов, может есть и другие...

mr.DIMAS 11.10.2014 22:45

Ответ: [TrueHorror] - разработка
 
Кароч наверное все таки баг в другом, я заметил что не на всех наклонных поверхностях такой косяк( можно сказать что этих поверхностей очень мало ). Я забил кароч на этот баг. Просто в этом месте на карте уберу наклон и все. Ища баг я потратил кучу времени, которое мог бы провести с пользой.

Я кстати сделал сохранения. В общем сделал некое подобие сериализации, но упрощенное - объект восстанавливает только изменяемые игроком или игровым процессом переменные. Работает довольно хорошо.

Так же поправил баги с вылетом - все было из-за инвентаря - особенно если тащить предмет в инвентаре с другого уровня.

Убрал бамп с бумажек, убрал холмик( автэ это все тебе :-D )

Пятно к фонарю пока не добавил - все время просрал на борьбу с булетом.

Сделал пропуск заставки по нажатии пробела.

Ну и всякие маленькие изменения, коих много.


Часовой пояс GMT +4, время: 21:20.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot