Сообщений: 3813
|
Опубликовано: 23.06.2021, 14:05:35
Описывал эту проблему в дискорде, параллельно делился домыслами и результатами попыток устранения. Не буду описывать процесс всех этих тестов, опишу только полученные результаты и решения.
Суть проблемы: На пользовательских картах в WUM сильно перекручиваются вершины полигонов, либо местами исчезают текстуры. Иногда глюки могут появляться/изменяться/исчезать при разрушении конкретных объектов на карте. Обычно возникает на больших картах. При этом в W4M все работает нормально. Сопровождается записями в лог: Код "282395 | * XBase | ASSERT(uCurrentMaxIndex != 0 && "Uh-oh, we've run out of indices!") fail: 155 @ .\CombineLandscapeAction.cpp 282399 | * XBase | ASSERT(uNewVertexIndex < uNumCoords) fail: 213 @ .\CombineLandscapeAction.cpp"
*вторая строка повторяется множество раз. Если глюк проявляется только после взрыва объекта, соответственно ошибка в логе появляется только после этого.
Благодарность: Проведено очень много тестов, проверены разные версии возникновения. В конце концов, благодаря тестам Emishka_Roper по замене текстур, Alexbond похоже точно определил причину возникновения.
Причина: В WUM довольно специфично устроен рендер сцены. Похоже, что при рендере вначале собирается массив из полигонов с одной текстурой, после чего происходит их отрисовка. Проблема в том, что индекс массива, это переменная типа WORD, т.е. максимальное количество индексов это FFFF = 65535 вершин. Если их больше - индекс обрезается и получается путаница с координатами. Выходит, что если одна и та же текстура (именно текстура/банк, а не бокс с текстурой) встречается в сцене слишком часто (примерно более чем на 18к вокслей, цифра не фиксированная), будет данный глюк.
Как фиксить: Соответственно вначале определить какая текстура вызывает глюк. Обычно именно эта текстура исчезает / растягивается или "тянется" к такой же текстуре. Либо через Map Editor посмотреть, какая текстура чаще встречается или методом исключения (удаления) определить объект, который глючит. Затем выбираем похожую или другую подходящую текстуру и перекрашиваем часть карты с глючащей текстурой. Удобно делать через реплейсер - правой кнопкой мыши по объекту в дереве объектов - replacer, заполняем, как на картинке ниже указывая, номер старого бокса >> номер нового бокса.
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|