PavelBlend / blender-xray

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

Некорректная работа Normal Map, ошибки сглаживания. #166

Closed akaSpy closed 6 years ago

akaSpy commented 6 years ago

Приветствую, коллеги по цеху!

Снова я к вам за помощью, так как косвенно это относится к плагину экспорта и вы в целом больше в теме внутренних особенностей.

В общем, проблема такая. Карту нормалей запёк в Substance Painter. В Substance всё выглядит отлично, в Marmoset тоже. Но в игре (Зов Припяти) имеет такие же ошибки сглаживания (3ds Max с Xoliul Shader): 2018-01-30_20-56-53

Не могу разобраться в чём дело, как только не пробовал запекать. Подскажите, пожалуйста, какие есть варианты? Такое ощущение, что, что-то не то с нормалями.

P.S. Модель сделана в Blender и экспортирована через текущий плагин.

igelbox commented 6 years ago

Здравствуй, @akaSpy По скриншоту сложно сказать в чём проблема. Было бы полезно посмотреть на blend-файл, object-файл и получившуюся карту нормалей, чтобы хоть как-то понять в чём может быть проблема. А экспорт же был сделан с использованием Format Version: CS/CoP?

akaSpy commented 6 years ago

@igelbox, спасибо, что откликнулся. И извини, что ответил не сразу, был пока не у дел. Я сегодня проведу ещё пару тестов и постараюсь предоставить детальную информацию.

akaSpy commented 6 years ago

@igelbox

Пока не могу нормально провести тесты, так как ломается модель. Сделал тестовую модель, но не могу понять, что с ней происходит в Actor Editor: 2018-02-03_19-09-27-

Похоже на проблему с группами сглаживания, судя по возросшему vertex count. В игре (Зов Припяти) аналогично плохо всё: 2018-02-03_19-14-55

Это как-то решается?

P. S. Сам экспорт модели проходит нормально, при импорте обратно в Блендер модель выглядит корректно.

akaSpy commented 6 years ago

@igelbox

Blend-файл GameTest.zip

igelbox commented 6 years ago

Думаю проблема в не правильной Format Version:. У меня, при выставленной Format Version: CS/CoP - нормально в CoP SDK открывает: image

akaSpy commented 6 years ago

@igelbox Действительно, спасибо! Как же я не догадался попробовать, ведь при импорте та же проблема была. В общем, у меня по какой-то причине эти кнопки перепутаны. Я когда импортировал модель Winchester 1300 из игры, то при выставленном CS/CoP ломались группы, а при SoC норм. При экспорте видимо та же ситуация. Версия плагина 0.4.0 Видимо есть какой-то баг, либо, что-то я неправильно установил.

akaSpy commented 6 years ago

@igelbox По поводу основной проблемы. Подскажи, пожалуйста, передаётся ли tangent space из Blender? Подобные проблемы сглаживания указывают, как раз на то, что не соответствуют tangent space Blender'a и Stalker'a. И как их синхронизировать не могу понять. Кучу разных способов перепробовал, но ошибки сглаживания как были, так и есть.

igelbox commented 6 years ago

Я когда импортировал модель Winchester 1300 из игры, то при выставленном CS/CoP ломались группы, а при SoC норм. При экспорте видимо та же ситуация. Версия плагина 0.4.0 Видимо есть какой-то баг

Какая версия игры? Какой конкретно файл импортировался? Чем был сконвертирован из ogf в object?

Подскажи, пожалуйста, передаётся ли tangent space из Blender?

на сколько я знаю, формат object не предоставляет возможности передачи tangent map, т.е. SDK его каждый раз рассчитывает при экспорте в ogf. Если всё таки есть примеры где он передаётся, напиши - мы реализуем в аддоне.

akaSpy commented 6 years ago

Какая версия игры? Какой конкретно файл импортировался? Чем был сконвертирован из ogf в object?

  1. Версия игры — 1.6.02 (Steam-лицензия)
  2. Импортировал файл — wpn_winchester1300_hud.object (скачать). Это не оригинальный из игры, а мой, но он также нормально импортируется только при выборе SoC.
  3. Конвертер не помню от куда скачал, датируется 24-06-2015, конвертируется через converter.exe с помощью .bat-файла.
igelbox commented 6 years ago

У меня, при открытии этого файла в CoP SDK, он загружается так же плохо, как и в Blender. Получается - это проблема с converter.exe (что он всегда конвертирует в SoC-овские группы сглаживания). @PavelBlend, может ты знаешь, каким конвертером правильно преобразовывать модели ЗП. Но, вообще, думаю можно смело импортировать сконверченные модели с Format Version: SoC, а сохранять для SDK с Format Version: CS/CoP.

akaSpy commented 6 years ago

Но, вообще, думаю можно смело импортировать сконверченные модели с Format Version: SoC, а сохранять для SDK с Format Version: CS/CoP.

В том то и дело, что если сохраняешь с Format Version: CS/CoP, то бьются группы сглаживания, а если в SoC, то всё ок :) Магия! Может у меня, что-то локально не так.

Может при импорте куда-то фиксируется в blend-файл? Тот файл, который я выше скидывал, удалось сохранить как CS/CoP, но без битых групп?

igelbox commented 6 years ago

Может при импорте куда-то фиксируется в blend-файл?

Навряд ли. Такого в аддоне не было.

Тот файл, который я выше скидывал, удалось сохранить как CS/CoP, но без битых групп?

Да. Импортировал в Blender как SoC и сразу же экспортировал как CS/CoP. Потом открыл получившийся object-файл в SDK и там со сглаживанием всё хорошо. Версии ПО: SDK - 0.7 blender-xray - 0.5.0

PavelBlend commented 6 years ago

Конвертер бардака всегда сохраняет группы сглаживания в формате SoC, независимо откуда был взят ogf файл (из ТЧ или из ЧН/ЗП).

@akaSpy я скачал твой файл wpn_winchester1300_hud.object, импортировал в blender, потом экспортировал в object в формате CS/CoP, потом сохранил в ogf с помощью SDK 0.7. В итоге в игре модель выглядит так же как в blender: sg_cop_test

Чтобы не было таких чёрных затенений на модели, нужно править группы сглаживания, так как сейчас они не совсем правильно настроены. Вот я исправил: fix_sg

И вот blend сцена с исправленным сглаживанием: fix_sg.zip

akaSpy commented 6 years ago

Да. Импортировал в Blender как SoC и сразу же экспортировал как CS/CoP. Потом открыл получившийся object-файл в SDK 0.7 и там со сглаживанием всё хорошо. @akaSpy я скачал твой файл wpn_winchester1300_hud.object, импортировал в blender, потом экспортировал в object в формате CS/CoP, потом сохранил в ogf с помощью SDK 0.7. В итоге в игре модель выглядит так же как в blender:

Попробую поставить свежую версию плагина, очень странно.

Чтобы не было таких чёрных затенений на модели, нужно править группы сглаживания, так как сейчас они не совсем правильно настроены. Вот я исправил.

@PavelBlend Дело не в группах сглаживания, они сделаны такими специально для тестирования карты нормалей. В игре карта нормалей по какой-то причине не компенсирует подобное сглаживание, хотя должно. Я предполагаю это из-за не соответствия tangent space. Но как синхронизировать не могу найти решение. Толи вектора из Blender имеют не то направление, то ли ещё чего. Пока нет мыслей.

akaSpy commented 6 years ago

Вот здесь хорошо показана проблема, при смене tangent basis (аналогичная моей): https://youtu.be/m-6Yu-nTbUU?t=2m31s

PavelBlend commented 6 years ago

@akaSpy можешь показать как выглядит карта нормалей?

akaSpy commented 6 years ago

@PavelBlend да, я в течении получаса подготовлю модель и карту нормалей, и скину сюда.

akaSpy commented 6 years ago

@igelbox, @PavelBlend

Каталог с файлами

in-game — скомпилированная модель для игры raw — исходники

PavelBlend commented 6 years ago

@akaSpy я менял группы сглаживания и косяков стало меньше. Может в сталкере карта нормалей не компенсирует сглаживание, а дополняет его. Сквозь карту нормалей проглядываются затенения от групп сглаживания. В оригинальных моделях ЗП на острых углах нет сглаживания. Может так нужно делать и со своими моделями?

akaSpy commented 6 years ago

@igelbox, @PavelBlend Ребята, спасибо за помощь! Возьму время ещё на пару тестов.

s30-zip commented 6 years ago

Так же не забывайте удалять двойные вершины и выворачивать нормали наружу.

akaSpy commented 6 years ago

@igelbox Хочу уточнить, а при экспорте необходимо накидывать модификатор Edge Split, чтобы сохранить группы сглаживания?

Только недавно обратил внимание, что появляется ошибка (про неё я уже прочитал): Maya-SG incompatible: sharp edge adjacents has same smoothing group Так вот Edge Split фиксит её.

И вообще как сохранить группы сглаживания?

akaSpy commented 6 years ago

@PavelBlend Подскажи, а как ты экспортишь группы сглаживания? У меня почему-то бьются в AE и в игре соответственно ломается нормалка.

В редакторах: 2018-02-07_20-47-11

В игре: 2018-02-07_20-51-33

Edited: похоже опять проблема с форматом. Не знаю почему, но у меня экспортируется только в SoC нормально.

PavelBlend commented 6 years ago

@akaSpy просто нажимаю File>Export>XRay Object и ставлю тип формата (SoC или CS/CoP) и всё. И никаких модификаторов Edge Split не нужно ставить.

А при экспорте этой модели есть предупреждения Maya-SG incompatible? Может острое ребро преобразовалось в сглаженное. Хотя если это ЗП, то не должно быть такого предупреждения. Только для ТЧ есть определённые ограничения в этом плане.

akaSpy commented 6 years ago

@PavelBlend Понятно, спасибо!

В SoC формате группы сохраняет. Но склеивает вершины и из-за этого бьет группы :(((( Флаг HQ Geometry не помогает. Существуют какие-то лекарства?

2018-02-07_21-06-02

igelbox commented 6 years ago

@akaSpy

Хочу уточнить, а при экспорте необходимо накидывать модификатор Edge Split, чтобы сохранить группы сглаживания? И вообще как сохранить группы сглаживания?

Обычно и без него работает. Но, думаю, он может помогать в сложных случаях (разделяя треугольники, дублируя рёбра), когда текущий меш не представим в формате SoC/Maya. Тут, кстати, есть ишью по этому поводу (если уж очень нужен SoC формат) - #57, но у меня пока мощи не хватает, сделать нормальный алгоритм расчёта. А в CoP-формате - нет таких ограничений, любые группы сглаживания должны поддерживаться аддоном, безо всяких дополнительных модификаторов.

akaSpy commented 6 years ago

@igelbox Спасибо за ответ! Я честно говоря так и не понял, почему у меня нормально не экспортируется в CoP-формате. Плагин поставил свежий. Может ещё СДК на всякий случай переустановить, странно это всё.

igelbox commented 6 years ago

Попробовал открыть модель из _Test/raw/sdk/editors/rawdata/meshes/dynamics/weapons/wpnwinchester1300/ из ранее приложенного "Каталог с файлами" в SDK 0.7 - сглаживание сломано, в SDK - 0.4 - склаживание - норм.

Попробовал экспортировать модель из Test/raw/GameTest.blend используя формат CS/CoP - в SDK 0.7 - сглаживание норм, в SDK - 0.4 - склаживание сломано.

Может всё-таки версия SDK - не правильная. У меня, кстати, были похожие проблемы при использовании SDK 0.4: при компиляции OGF ломались нормали и в игре это выглядело как на половине с "original": akim Из-за этого в аддоне и появилась сырая поддержка экспорта в ogf (см. половину с "my (fixed)"). Сейчас, я тестирую в (откуда я их взял - уже не помню):

Вообщем, попробуй тоже экспортировать с CS/CoP и открыть в SDK для ЗП. Если не получается, то пиши, какой SDK используешь (не думаю, что сюда надо ссылку на пиратские ресурсы постить, может просто описание, как его найти на просторах интернета).

akaSpy commented 6 years ago

@igelbox Ты прав. Я установил чистый официальный SDK 0.7. Что-то было внутри SDK, что ломало весь процесс, либо какие-то файлы от 0.4 версии. С экспортом CS/CoP сглаживание заработало как надо. Правда не сразу. Модификатор Edge Split ломает группы в модели, по крайней мере в промежуточном использовании в *.fbx для запекания карты нормали, развёртки. И меня это сильно путало. Когда отказался от него, всё пошло как надо. Большое тебе спасибо! Наконец-то мои мучения закончились :)

Пока единственной проблемой осталось склеивание вершин, с HQ Geometry, в редакторе вроде по лучше выглядит, чем в игре. То есть как будто в игре игнорируется этот флаг. Ну хоть группы не ломает, уже хорошо. Но тут как вариант ещё есть оптимизировать модельку.

Накинул тестовую текстурку: 2018-02-08_12-17-14

s30-zip commented 6 years ago

Есть ещё какой-то фикс "форсирование групп сглаживания" для SDK 0.7 https://www.gameru.net/forum/index.php?showtopic=46774

igelbox commented 6 years ago

Похоже на то, что вопрос решён. Если что, можно будет переоткрыть эту ишью.