PavelBlend / blender-xray

STALKER (aka xray-engine) import/export plugin for Blender 3D
BSD 2-Clause "Simplified" License
192 stars 39 forks source link

Сглаживание при экспорте в .ogf работает некорректно. #775

Open YourWaltNightmare opened 6 months ago

YourWaltNightmare commented 6 months ago

Работаю с ТЧ (правлю модели оружия и анимации) и пользуюсь SDK от Yara. У меня актуальная версия плагина, а также Блендер 2.79 на Win10 Pro. Карта RTX 3060.

  1. Беру модель, у которого правлю сглаживание. На скриншоте представлено, как оно должно выглядеть: image

  2. Экспортирую в object - получаю Maya-SG incompatible: sharp edge adjacents has same smoothing group image Сколько форумы не читаю, так и не понял, с чем конкретно связана эта ошибка. Появляется при экспорте с первой группой сглаживания (SOC).

  3. Так или иначе, после экспорта и импорта в Блендере мой .object файл имеет правильные Sharp Edges.

  4. При конвертировании уже в .ogf (неважно через SDK или плагин) и последующем импорте обратно в Блендер видим, что сглаживание имеет проблемы. image Часть граней становится острыми, а часть наоборот сглаженными там, где это не нужно.

Не имеет значение, выбираю ли я пункт SOC при экспорте или CS/COP. По итогу результат получается одним и тем же и линии грани портятся приблизительно в одних и тех же местах.

PavelBlend commented 6 months ago

@YourWaltNightmare про сглаживание я недавно написал в wiki: https://github.com/PavelBlend/blender-xray/wiki/Smoothing

Острые рёбра могут пропасть, если полигоны плоские: 01

Это связано с тем, что в ogf файлах нет границ сглаживания. Для сглаживания используются нормали вершин. Подробнее в вики по ссылке выше. Если на плоских полигонах пропадают sharp edges, то это нормально, так и должно быть, это не ошибка. Но если на выпуклых полигонах - то это ошибка и нужен пример файла. Я сейчас пытался сам создать пример, но не получилось.

Если сглаженное ребро становится несглаженным, то скорее всего это не критично, так как главное, чтобы направления нормалей совпадали. Визуально объекты до и после экспорта не будут отличаться, так как для ogf важны направления нормалей. Их можно включить здесь: 02

Я в принципе знал, что такое может быть, но не стал искать причину этого, так как результат в игре нормальный.

Сейчас пытался на простом примере воспроизвести ошибку и понял, что сглаженные рёбра становятся несглаженными, если у меша топология не корректная. Например, если есть накладывающиеся полигоны и кривая геометрия: 03

Вот пример файла: test_ogf_smoothing.zip

Буду выяснять в чём причина. Скорее всего эта ошибка исчезнет, если исправить ошибки геометрии. Сделать так, чтобы поверхность меша была non-manifold'ой и чтобы не было T-соединений.

YourWaltNightmare commented 6 months ago

Спасибо за ответ! Вот оно как.... Т.е. в данном случае, где ребра имеют sharp edges на плоской поверхности, в игре будут выглядеть нормально, т.к. нормали на вершинах правильные? image

МБ из-за этого у меня на грозе в этом месте странный пересвет image image

Почитаю вики и поиграюсь еще. Раньше я как раз использовал Максовский тип сглаживания, где полигоны нужно было делить на группы, пока не перешел полностью на Блендер.

PavelBlend commented 6 months ago

Я открою эту issue, чтобы не забыть тщательнее изучить проблему.

YourWaltNightmare commented 6 months ago

Извеняюсь. Я ее случайно закрыл, пока пытался разобраться с работой Гитхаба :)

Да. Проблема была в этих двух вершинах: image

На скриншоте видно, что нормали не туда смотря, а все из за того, что между полигонами были еще полигоны.... image

Удалил, поправил геометрию меша и сразу все стало работать как надо. image

YourWaltNightmare commented 6 months ago

"Сделать так, чтобы поверхность меша была non-manifold'ой и чтобы не было T-соединений."

Посмотрел все non-manifold'ные соединения. Они как раз находятся приблизительно там, где у меня проблемы со сглаживанием. image

YourWaltNightmare commented 6 months ago

Убрал нон-монифолдные поверхности у мушки, целика и скобы спускового крючка (создал в дырах между гранями полигоны). Попробовал снова эскпорт в .ogf и импорт в Blender. Теперь в этих выделенных местах нету Sharp Edges на плоских поверхностях, как на предыдущем скриншоте: image

Правда меня это не особо радует, т.к. конкретно в этой модели невозможно обойтись без конечных краев, которые ни к чему не присоединены. Вот еще пример на Волтере: image Это модель после экспорта и импорта. Верхняя грань нон-монифолдная (ее я менять никак не собираюсь). Выделил все грани, которые должны были быть острыми. Вместо этого при экспорте острой становится грань по середине плоского квадрата. Выглядит это так, словно параметр острой грани перешел на соседнюю грань образуя тем самым треугольник И так во многих местах, где похожая ситуация с конечными гранями, которые ни с чем не замкнуты.

Надо как то сделать так, чтобы сглаживание было в тех местах, где нам хочется, независимо от геометрии меша.

PavelBlend commented 6 months ago

Понял. Посмотрю позже.