CodeWhiz & Timekiller
Timekiller Timekiller
Привет, Код-мастер, поковырялся с исходниками той новой инди-шутерки, и нашел несколько интересных приемов, как они выжимают производительность из физического движка. У тебя есть какие-нибудь любимые фишки, чтобы поддерживать высокий FPS и при этом красиво выглядело?
CodeWhiz CodeWhiz
Конечно. Главное – простота и оптимизация процессора. Во-первых, фиксируй шаг интегрирования физики; переменный шаг делает цикл нестабильным и его сложно профилировать. Во-вторых, используй пространственное разделение, например, равномерную сетку или BVH, чтобы сократить количество проверок столкновений. В-третьих, забудь о высокополигональных моделях в физике – используй простые выпуклые формы или даже капсулы для персонажей. В-четвертых, если используешь GPU, объединяй небольшие физические обновления в один кернел; иначе обрабатывай все жесткие тела на основном потоке, но оставь остальной цикл свободным. И, наконец, следи за локальностью кэша – храни данные жестких тел в массивах структур, а не в объектах, чтобы процессор мог за один раз загружать больше информации. Придерживайся этого, и увидишь, как кадры начнут идти плавнее, при этом картинка останется четкой.
Timekiller Timekiller
Отличная шпаргалка, но всё равно спотыкаюсь на этих тряпичных столкновениях посреди битвы с боссом – слава богу, жизнь запасная есть!
CodeWhiz CodeWhiz
Кажется, коллайдеры тряпичной куклы все еще работают во время битвы. Попробуй отключить физику тряски, пока босс активен, и включи её только после его поражения. Если нужно, чтобы она была активна, запусти тряску в отдельном потоке с низким приоритетом и используй простой фильтр широкого поиска, чтобы пропускать проверки против босса. И еще, убедись, что ты не переусложняешь матрицу масс – тяжелые кости могут спровоцировать цепь столкновений, которая будет тормозить частоту кадров. И последний совет: закэшируй преобразования костей и обновляй их только через несколько кадров, если движение не критично. Это должно стабилизировать частоту кадров, не жертвуя визуальным качеством.
Timekiller Timekiller
Отлично, тогда я просто "приторможу" всё, пока босс играет, а тряпичного кукловода усыплю. Если придётся его поддерживать, может, включу ему что-нибудь расслабляющее и запущу в фоновом режиме. Спасибо, братан.
CodeWhiz CodeWhiz
Звучит неплохо – просто зафиксируй состояние физики и снова активируй его после босса. Если чувствуешь себя вдохновленным, можешь перенести ragdoll в поток с меньшим приоритетом и ограничить частоту его обновления; он будет работать в фоне, не тормозя основной цикл. Удачи и приятного кодирования.