2016-10-05 15:12:42
О прохождении сквозь стены и застревании в текстурах.
Ради экономии памяти в таких играх физика обычно сочеталась с геометрией. Поскольку смещение за игровой цикл нередко было больше одного пикселя, персонаж мог попасть внутрь стены (пола или потолка), поэтому такое непроходимые объекты программировали на так называемые коллайдеры, если персонаж внутри — его выталкивает, сообщая ему вектор скорости, если стоит впритык — обнуляет соответствующий вектор скорости (вертикальный для пола/потолка, горизонтальный для стен). Цимес в том, что игра не сохраняет путь персонажа, а потому не знает, откуда он влетел. Также ради той же экономии не делаются направленные коллайдеры стен (выталкивающие в определённые стороны). Персонажа просто выталкивает в сторону ближайшей границы. Обычно это работает корректно. Но если влететь достаточно глубоко в стену (или в коде коллайдера есть дополнительные баги), то выталкивать начинает в противоположную сторону и персонаж проходит сквозь стены.
Подобные баги не изжиты и в современных играх. Когда персонажа резко отбрасывает в космос (в скайриме, после удара гигантом в землю) или персонаж «застревает в текстурах» или после застревания его начинает колбасить, на самом деле он застревает в физической сетке. Физический движок сообщает (или нет, в зависимости от реализации) телу импульс, выталкивающий его из твёрдого тела. Если части тела обсчитываются более или менее отдельно (ragdoll), то часть может погрузиться слишком глубоко и части тела начнут получать разные импульсы. Поскольку разрыв 3d-модели не предусмотрен, персонажа начинает мотать из стороны в сторону. Разумеется, современные движки устроены куда сложнее и в отдельных случаях причины колбасенья могут радикально отличаться.
Познавательно.
клюкед: ну давай тогда уж всю историю, че мелочиться
https://geektimes.ru/post/281046/
(вот же хабра-пидоры, даже линк на оригинал уже не ставят)
Ради экономии памяти в таких играх физика обычно сочеталась с геометрией. Поскольку смещение за игровой цикл нередко было больше одного пикселя, персонаж мог попасть внутрь стены (пола или потолка), поэтому такое непроходимые объекты программировали на так называемые коллайдеры, если персонаж внутри — его выталкивает, сообщая ему вектор скорости, если стоит впритык — обнуляет соответствующий вектор скорости (вертикальный для пола/потолка, горизонтальный для стен). Цимес в том, что игра не сохраняет путь персонажа, а потому не знает, откуда он влетел. Также ради той же экономии не делаются направленные коллайдеры стен (выталкивающие в определённые стороны). Персонажа просто выталкивает в сторону ближайшей границы. Обычно это работает корректно. Но если влететь достаточно глубоко в стену (или в коде коллайдера есть дополнительные баги), то выталкивать начинает в противоположную сторону и персонаж проходит сквозь стены.
Подобные баги не изжиты и в современных играх. Когда персонажа резко отбрасывает в космос (в скайриме, после удара гигантом в землю) или персонаж «застревает в текстурах» или после застревания его начинает колбасить, на самом деле он застревает в физической сетке. Физический движок сообщает (или нет, в зависимости от реализации) телу импульс, выталкивающий его из твёрдого тела. Если части тела обсчитываются более или менее отдельно (ragdoll), то часть может погрузиться слишком глубоко и части тела начнут получать разные импульсы. Поскольку разрыв 3d-модели не предусмотрен, персонажа начинает мотать из стороны в сторону. Разумеется, современные движки устроены куда сложнее и в отдельных случаях причины колбасенья могут радикально отличаться.
Познавательно.
клюкед: ну давай тогда уж всю историю, че мелочиться
https://geektimes.ru/post/281046/
(вот же хабра-пидоры, даже линк на оригинал уже не ставят)
2016-10-05 14:55:47
Два англичанина идут по улице, вдруг видят лежит дохлая лошадь.
Один другому говорит:
— Давай отнесем её ко мне домой и положим в ванную.
— Но зачем, сэр?
— А вот мы её положим, сами сядем пить чай, и тут войдет мой слуга Джон. Я ему скажу: «Джон, сделай мне ванну», он уйдёт потом придёт и скажет: «Но там же дохлая лошадь, сэр!», а я ему скажу: «Я знаю, Джон»…
Отнесли они эту лошадь, сидят пьют чай, входит Джон.
— Джон, сделай мне ванну.
Джон уходит, через несколько минут возвращается.
— Ванна готова, сэр!
— Но там же дохлая лошадь!
— Я знаю, сэр…
Один другому говорит:
— Давай отнесем её ко мне домой и положим в ванную.
— Но зачем, сэр?
— А вот мы её положим, сами сядем пить чай, и тут войдет мой слуга Джон. Я ему скажу: «Джон, сделай мне ванну», он уйдёт потом придёт и скажет: «Но там же дохлая лошадь, сэр!», а я ему скажу: «Я знаю, Джон»…
Отнесли они эту лошадь, сидят пьют чай, входит Джон.
— Джон, сделай мне ванну.
Джон уходит, через несколько минут возвращается.
— Ванна готова, сэр!
— Но там же дохлая лошадь!
— Я знаю, сэр…