Почему столкновения трудно эффективно вычислить в графических движках? - PullRequest
7 голосов
/ 26 января 2012

От самых старых игр до самых современных кажется, что вы все еще можете видеть сквозь стены или чаще всего землю в некоторых положениях камеры.Почему столкновения трудно эффективно вычислить в графических движках?Это округление / потеря точности, приводящая к неправильному представлению?

Ответы [ 2 ]

2 голосов
/ 26 января 2012

Это на самом деле не столкновение в явном смысле. Положение камеры, вероятно, на самом деле не «внутри» стены или земли в таких ситуациях, но оно просто очень близко к ней.

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

Теперь разработчики могут установить расстояние до этой ближней плоскости, и оно может быть очень коротким - достаточно коротким, чтобы такие ситуации не возникали. Однако буфер глубины или z , который используется для определения того, какие объекты находятся ближе всего к камере во время рендеринга и, таким образом, какие объекты рендерится, а какие - нет, тесно связан. на ближний и дальний расстояния самолета.

В графическом оборудовании буфер глубины представлен с использованием фиксированного количества битов для каждого пикселя, например, 32 бита. Эти 32 бита должны быть достаточными для точного представления всего промежутка между ближней и дальней плоскостями. Он также не линейный, но будет использовать большую точность ближе к камере. В результате, выбор очень малого расстояния в ближней плоскости значительно снизит общую точность буфера глубины. Это может вызвать раздражающее мерцание по всей сцене, где два объекта находятся очень близко друг к другу.

Вы можете прочитать больше об этой проблеме здесь , а также раздел 12.040 здесь .

1 голос
/ 26 января 2012

Речь идет не о сложности (конечно, это не легко вычислить столкновение / отсечение невыпуклого объекта), но у вас все еще есть только ~ 33 мс для вычисления целого кадра, поэтому необходимо сделать некоторый компромисс не то же самое, что сетка, которую вы действительно видите). Если нет времени для точного решения (чтобы выполнить все условия - расстояние от камеры, видимый объект, предотвращение столкновений), вам придется вернуться к какому-нибудь «простому» решению, например, видеть сквозь стену.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...