View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000890 | OpenIV | openFormats | public | 2025-02-01 02:52 | 2025-02-01 02:56 |
Reporter | kirill_mapper | Assigned To | |||
Priority | immediate | Severity | major | Reproducibility | always |
Status | new | Resolution | open | ||
Product Version | 4.1 | ||||
Target Version | Fixed in Version | ||||
Summary | 0000890: [Collisions][BUG] Некорректная генерация ссылок на соседние полигоны (Siblings) при конвертации коллизионных объектов в OpenIV | ||||
Description | Описание проблемы: OpenIV генерирует некорректные ссылки на соседние полигоны (Siblings) для коллизионных объектов при конвертации из openformat (obn, odr) в игровой формат (ybn, ydr), даже с включенным параметром ComputePolyNeighbors True. Это приводит к необходимости вручную исправлять ссылки. В противном случае, неправильные ссылки могут периодически вызывать краши игры. Воспроизведение: Экспортировать модель с коллизионными объектами в openformat, оставив ссылки Siblings пустыми (-1 -1 -1) с включенным параметром ComputePolyNeighbors True. Или экспортировать с выключенным параметром, но с правильно заданными ссылками. Импортировать файл в OpenIV и проверить, что ссылки на соседние полигоны остаются некорректными. Результат: Ссылки Siblings неправильно вычисляются или не сохраняются корректно в конвертированном файле, несмотря на активацию параметра ComputePolyNeighbors True. Ожидаемый результат: OpenIV должен правильно вычислять и генерировать ссылки на соседние полигоны для коллизионных объектов. Решение: Метод public void UpdateEdgeIndices() из CodeWalker должен быть использован для корректировки ссылок на соседние полигоны. Этот метод пересчитывает соседей и восстанавливает правильные ссылки. https://github.com/dexyfex/CodeWalker/blob/c45ea837330864c03ca5f355fd38affab85e46c5/CodeWalker.Core/GameFiles/Resources/Bounds.cs#L2160-L2271 Проблемы с соседями полигонов: Если грань (e1, e2, e3) полигона ссылается на несуществующий соседний полигон (индекс больше числа полигонов), это считается ошибкой. Код пересчитывает соседей для всех полигонов, чтобы восстановить правильные ссылки. Неверные ссылки на вершины: Если грань полигона (через соседний полигон) указывает на несуществующую вершину (индекс больше числа вершин), это тоже считается ошибкой и исправляется. Пересчёт соседей: Границы (edges) полигонов пересчитываются с использованием уникальных идентификаторов (на основе индексов вершин). Словарь (edgeMapping) связывает грани с их полигонами, чтобы правильно определить, какие полигоны являются соседями через эти грани. Соседние полигоны обновляются для каждого типа 0 (валидного полигона). Итог: Код гарантирует, что каждая грань полигона правильно ссылается на соседний полигон (или -1, если сосед отсутствует), а также исправляет проблемы с вершинами, чтобы коллизионная геометрия не сбоила. Это важно для корректной работы коллизии без крашей. Валидация ссылок может быть выполнена с использованием кода из ResourceChecks.cpp. https://github.com/citizenfx/fivem/blob/eb1e6d85586aea7796510e5f663745c38050de91/code/components/gta-streaming-five/src/ResourceChecks.cpp#L139-L309 Специальная утилита Ymap-Ybn Mover может быть использована для исправления и корректировки ссылок в .ybn, .ydr, .yft файлах. Подробнее на GitHub репозитории. https://github.com/92-Smallo/Ymap-Ybn-Mover/tree/master Обсуждение проблемы можно найти на форуме How to fixing invalid poly edge references https://forum.cfx.re/t/how-to-fixing-invalid-poly-edge-references/2158569 и на GitHub Issue #2799. https://github.com/citizenfx/fivem/issues/2799?ysclid=m6lb7j0pbb486229925 | ||||
Tags | bug, Collision, major, openFormats, PolyEdge | ||||
Game | Grand Theft Auto V | ||||
Date Modified | Username | Field | Change |
---|---|---|---|
2025-02-01 02:52 | kirill_mapper | New Issue | |
2025-02-01 02:56 | kirill_mapper | Tag Attached: Collision | |
2025-02-01 02:56 | kirill_mapper | Tag Attached: PolyEdge | |
2025-02-01 02:56 | kirill_mapper | Tag Attached: major | |
2025-02-01 02:56 | kirill_mapper | Tag Attached: bug | |
2025-02-01 02:56 | kirill_mapper | Tag Attached: openFormats |