WarCraft 3: Избавляемся от швов

» Раздел: Моделлинг

Наверняка, работая с моделями (особенно экспортированными из других игр, например, World of Warcraft), вы встречались с проблемой появления швов. Если нет, то я поясню, как это выглядит.
У нас имеется каркас из полигонов, который представляет из себя две половинки. На них натянута с двух отражённых сторон одна и та же текстура. На моей модели это лицо персонажа.
Когда мы включаем полный просмотр, получаем следующий результат:
Как видно, на лице просматривается шов. Это последствие склейки полигонов с натянутыми копиями текстуры с разных сторон.
Изначально решением было смещение точек развёртки геосета "вглубь" текстуры, подальше от её краёв.
Но недавно я придумал другое решение: нужно убрать флаги "Wrap Width" и "Wrap Height" в свойствах текущей текстуры.
В War3 Model Editor это делается через меню Windows / Texture Manager / правый клик по текстуре / Edit / Texture Wrapping.
Тогда программа отрисовки не будет понимать текстуру как "тайл" и её края приобретут чёткие границы. Я думаю, что это глюк алгоритма обработки текстур-тайлов, который приводит к швам на границах.
Отдельная благодарность: Wolverine.

Просмотров: 4 722

П4ела #1 - 7 лет назад 1
как то мало для статьи)
Banzay89 #2 - 7 лет назад 1
Это новый вид статей - заметки :)
ScorpioT1000 #3 - 7 лет назад 1
Я думаю, это кому-то поможет. Лучше, чем ничего. Если что, я уменьшил количество опыта в 4 раза)
Dr #4 - 7 лет назад 1
Лучше зашей в xgm.guru/p/wc3/m_faq
Iron #5 - 7 лет назад 0
"это глюк алгоритма обработки текстур-тайлов, который приводит к швам на границах"
Это не глюк, это фича. Просто векторно текстура представима как матрица вершин окрашенных цветами соответствующих пикселей, а пространство между ними заполняется градиентом цветов соседних вершин. Иначе мы бы наблюдали квадратные (а иногда и не очень) пиксели текстуры на модели.
Т.е. когда точке геосета соответствует позиция (0, 0) на карте текстур (допустим текстура 256х256), то эта точка будет занимать позицию на стыке 4-х пикселей (0,0) (255, 0) (255, 255) (0, 255) и будет окрашена в цвет равномерного смешения цветов этих пикселей. Вот и получается, что вроде бы как край текстуры одного цвета, но вершина окрашивается в смесь цвета этого края, с цветом противоположного края.
А когда ты убираешь тороидальность наложения текстуры, то крайние положения на карте текстур берут цвет пикселей только того же края.
truth troll #6 - 7 лет назад 0
Мелочь, но приятно... мне пригодится... спс...
Сказочник #7 - 7 лет назад 0
Никогда не встречал, у меня и так все работает. Пока.
ScorpioT1000 #8 - 7 лет назад 0
Iron, всё бы ничего, если бы я юзал 0,0, а не 1.8, допустим :)
т.е. я так понимаю, он заполняет внутренние пиксели своим градиентом вместо абсолютного перехода, а это и есть "глюк" ибо это "не то, что ожидалось"
Iron #9 - 7 лет назад 0
"всё бы ничего, если бы я юзал 0,0, а не 1.8"
?? Вроде ж координаты вершины на карте текстур в mdx это два float значения. Т.е. координаты (1, 8) это правая нижняя точка седьмого повторения текстуры по направлению вниз (ну или правая верхняя точка восьмого)
Ну а если ты имел ввиду пиксели то я тебе гарантирую, что если координаты находятся в рамках:
(0.5 / TextureWidethInPixels) * n < X < (1 - (0.5 / TextureWidethInPixels)) * n
(0.5 / TextureHeightInPixels) * n < Y < (1 - (0.5 / TextureHeightInPixels)) * n
n &#8712; &#8484; \ 0
То в варе никаких швов не будет. Если они есть в War3 Model Editor-е, то этот баг исключительно на его совести.
__________________
PS: Гадский фильтр.
n є Z \ 0
Ууупс, лажаю. Поправочка:
(0.5 / TextureWidethInPixels) + n < X < (1 - (0.5 / TextureWidethInPixels)) + n
(0.5 / TextureHeightInPixels) + n < Y < (1 - (0.5 / TextureHeightInPixels)) + n
ScorpioT1000 #10 - 7 лет назад 0
Ты сейчас повыёживаться пришёл чтоли ? Я тестил может прежде чем писать?
iZucken #11 - 7 лет назад 0
Вуху, теперь я знаю что нужно делать если внезапно появятся швы! И при этом не учтено что тексутра может использоваться в материалах с анимацией положения оной, и дабы избежать смазывания придется использовать еще раз ту же текустуру что в принципе не возможно из-за корявого кода War3ME! Клево!
Iron #12 - 7 лет назад 0
ScorpioT1000, я просто говорю как оно есть с максимумом конкретики, не обобщая кучу мыслей непонятными терминами типа "заполнение внутренних пикселей" и "абсолютный переход".
И ты мне поверь, я тоже тестил.
JesusHipster #13 - 6 лет назад 0
soooooooooooooooooooooo useless