lexpartizan (lexpartizan) wrote,
lexpartizan
lexpartizan

Category:

Продолжаем ковырять редактор персонажей. Новый подход.

В общем, прямая работа с блендшейпами, конечно, проще и понятней. Но у меня не получается сделать её достаточно быстро.
При всех моих ухищрениях персонаж создаётся 33 секунды. И это много. Очень много. Хотя мне пришла в голову идея, как сократить это число раза в 4. Но всё равно много для моих целей.
На днях один человек подсказал мне другой подход. Который используют в Sims4.
Вместо блендшейпов использовать карты смещения.
Вкратце так, для каждого блендшейпа мы генерируем текстуру, куда заносим разницу между координатами основной базисной фигуры и конкретного шейпа (то есть максимально толстый персонаж). И так для каждой формы. Потом мы миксуем эти картинки и получаем итоговую картинку с применёнными изменениями. И уже из цветов этой картинки прибавляем к базовому мешу.
В чём прелесть такого подхода?

1. Насколько я понимаю, картинки можно микшировать (да, именно стандартное mix в опенгл является линейной интерполяцией, которую я использовал для каждой вершины и которая так тормозит) с помощью шейдера. А он может смикшировать картинки довольно быстро. Я на это надеюсь. Конечно, с шейдерами я работать не умею, да. Но это ещё впереди)) А дальше уже применение самой картинки к базовому мешу. Это я делаю за 0.2 секунды и есть потенциал повысить скорость раза в 4.

2. Эти же карты смещений вполне себе можно использовать для другого меша, если их развёртка совпадает. То есть, юзать лоу-поли топологии из того же мейкхумана. И можно будет реализовать LOD хотя бы.

В чём недостаток такого подхода? В неточности. Цвет в годот является флоатом в диапазоне от 0 до 1. И мы должны запихнуть координаты вершин (которые могут быть в любом диапазоне) между 0 и 1. А потом восстановить их из этого диапазона. И при этом реально теряется довольно внушительная часть информации. Речь идёи о 5% ошибке, может даже больше. Кроме того, наложение меша на текстуру UV не совсем точное. Не до пикселя. А нам нужно очень точно взять цвет. Но мы берём цвет соседнего пикселя.
Что, кстати, сыграло со мной злую шутку. У меня долго меш выдавал непонятную фигню. Вот на картинке кубик, который я построил из текстуры на том же скрине.

Ну, угадать можно, но это ж не кубик)) Потому что развёртка по краям берёт серый цвет, вместо цветного. Потому что не точно пиксель в пиксель накладывается. И иногда берёт серый цвет вокруг. Тут со мной злую шутку сыграл годот, где по умолчанию цвет фона серый. И я далеко не сразу увидел, что это за фигню я получаю и не должен ли я это получить. Потом уже, когда я нашёл, откуда ноги растут, я сменил фон на чёрный, чтобы нули явно выбивались из списка вершин, которые я распечатывал в надежде отловить баг. Серый же цвет выглядит вполне осмысленными координатами и теряется.
Проблема решилась банальным масштабированием. Но это тоже снизило точность, теперь берутся соседние пиксели (да и раньше не угадывалось точно, иначе бы не было глюков с серым цветом), сильно это не влияет, так как цвета по полигону интерполируются между вершинами и мы получаем "примерно" то, что надо.
Насколько примерно? Ну вот результат сохранения меша в текстуру смещения и восстановления из него. Слева оригинал, справа восстановленный.

И да, из-за ошибок есть даже дыры в сетке (на ногах) там просто вершины полигонов отходят друг от друга.

Почему я продолжу изучать эту тему, несмотря на неудовлетворительный результат восстановления?
Потому что здесь я запекал напрямую координаты. А я хочу попробовать запечь не координаты, а разницу между ними. Это сузит диапазон. И, возможно, такой большой разницы не будет. Ещё есть что покопать, прежде чем сдаваться.

Нефть + 15%, детка!
Subscribe
Судя по лысой горгулье справа, скоро ты осилишь сделать первый дум.
Ага, получился генератор монстров.
ты какой то игровой движок клепаешь? нахер те? готовых мало?

lexpartizan

September 17 2019, 04:48:36 UTC today Edited:  September 17 2019, 04:50:09 UTC

Нет, конечно. Я делаю генератор персонажей на годоте.
Смысл в том, чтобы иметь одну модель персонажа, но применить разные смещения и они были разными. Так работает Симс-4. Так персонажей дохера, все разные, все редактируются, но модель одна.

kriptonik

September 17 2019, 02:33:29 UTC today Edited:  September 17 2019, 02:35:04 UTC

Как обычно все хорошее пиндосам(( Начали отправлять в Нью-Йорк

проект находится на стадии развертывания, а ты говорил обанкротятся
They liked it 0