Карты нормалей
- Автор темы Makadebinesi
- Дата создания
Причем тут вообще OpenGl и DirectX?=DDD y+ или y- не зависит от API, людей с толку сбиваете... Надо понимать что в движках шейдера продублированы 2 раза на HLSL под винду и GLSL ради мультиплатформенности, как напишешь шейдера такой Y и будет! В unreal Y- используется, как в 3ds-max например. В Maya используется Y+, как в юнити например. Нужно еще кое что уточнить, запеченная карта нормалей вообще где либо всегда будет выглядеть с искажениями в Unreal 4 из за того, что тангент спейс у анрила какой то свой, который вообще никто больше не использует... Легко проверяется на запекании хайпольного кубика на лоупольный со сглаженными нормалями. Это будет выглядеть в Unreal 4 криво. Обращайте внимание на это, старайтесь запекать там, где тангент спейс максимально совпадает с Unreal 4
- Рейтинг
- 155
Какое отношение имеет просчет в пиксельном шейдере бинормалей для OpenGl и DirectX к вертексному шейдеру?
читаем за +У и -У для правосторонних и левосторонних движков.
http://netlib.narod.ru/library/book0052/ch07_02.htm
В подтверждении разности касательных бинормалей -
https://forum.allegorithmic.com/index.php?topic=504.0
Если считать бинормали непосредственно в шейдере с учетом нормалки, у вас ляжет видеокарта при просчете множества мешей.
для этого даже эпики помоему рекомендуют экспортировать в ФБХ и импортировать тангенсы и бинормали из приложения в котором запекалась модель. Экспорт из майки или макса в SBM формат позволяет в Хнормале выпечь карту нормали с учетом тангенсов и бинормалей вертексов, таким образом минимизировав артефакты сглаживания.
Несусветная глупость так поступать. ребра по которым сделан юви разрез должны быть жесткими. движок детачит эти эйджи, поэтому с накинутой картой нормали на которой нет компенсации разрыва уже будет баг.
Unreal отлично работает с mikktspace если следовать правилам и рекомендациям.
Makadebinesi, это карта нормалей либо в собственном , либо в мировом пространствах. использовать можно, но накладно по ресурсам.
+ недостаток в том что нельзя зеркалить меш.
несколько рекомендаций -
1 всегда ребра по которым сделан разрез юви, делайте жесткими. остальные софт.
при ошибках шейдинга на деталях которые занимают мало места на юви делайте разрезы и жесткие ребра. мало пикселей для компенсации. За швы не стоит переживать . карта нормали компенсирует эти места и видно их не будет. Нормали после этого нужно залочить, чтобы при экспорте\импорте ничего не сломалось.
К сообщению прикреплен скрипт для Майки который назначает софт\хард по границам ювишелов автоматом
2Лучше пользоваться xNormal с его форматом SBM который уже формирует кейдж и позволяет учитывать бинормали вершин при выпечке.
3. при импорте в Unreal не пересчитывайте бинормали, а включите галки импортировать из FBX.из майки при экспорте в фбх включите.
читаем за +У и -У для правосторонних и левосторонних движков.
http://netlib.narod.ru/library/book0052/ch07_02.htm
В подтверждении разности касательных бинормалей -
https://forum.allegorithmic.com/index.php?topic=504.0
Если считать бинормали непосредственно в шейдере с учетом нормалки, у вас ляжет видеокарта при просчете множества мешей.
Нужно еще кое что уточнить, запеченная карта нормалей вообще где либо всегда будет выглядеть с искажениями в Unreal 4 из за того, что тангент спейс у анрила какой то свой, который вообще никто больше не использует..
Легко проверяется на запекании хайпольного кубика на лоупольный со сглаженными нормалями
Unreal отлично работает с mikktspace если следовать правилам и рекомендациям.
Makadebinesi, это карта нормалей либо в собственном , либо в мировом пространствах. использовать можно, но накладно по ресурсам.
+ недостаток в том что нельзя зеркалить меш.
несколько рекомендаций -
1 всегда ребра по которым сделан разрез юви, делайте жесткими. остальные софт.
при ошибках шейдинга на деталях которые занимают мало места на юви делайте разрезы и жесткие ребра. мало пикселей для компенсации. За швы не стоит переживать . карта нормали компенсирует эти места и видно их не будет. Нормали после этого нужно залочить, чтобы при экспорте\импорте ничего не сломалось.
К сообщению прикреплен скрипт для Майки который назначает софт\хард по границам ювишелов автоматом
2Лучше пользоваться xNormal с его форматом SBM который уже формирует кейдж и позволяет учитывать бинормали вершин при выпечке.
3. при импорте в Unreal не пересчитывайте бинормали, а включите галки импортировать из FBX.из майки при экспорте в фбх включите.
Вложения
-
663 байт Просмотров: 1 599
Последнее редактирование:
фишка в том, что не все додумываются ортонормировать базис тангент спейса в пиксельном шейдере, все только в вершинном это делают потому что так привыкли и не думают что как то иначе можно. На данный момент я знаю только 4 софта которые это делают: Marmoset 2, 3D-Coat, Xnormal'овский предпросмоторщик, Unigine. В их рендерах если запечь карту нормалей на лоупольный кубик с совпадающим TS то все будет выглядеть просто идеально, можете проверить на мармосете, но не забудьте поставить там TS Maya если в Maya запекали. Всякие там методы делать разрывы UV по жестким ребрам это все костыли из за того что TS не просчитывали раньше никогда в пиксельном шейдере и до сих пор мало кто так делает. Уж про это я знаю, участвовал в разработке этой штуки в Coat, Unity и Unigine, не просто из начитанных статей с интернетов это беру.
- Рейтинг
- 155
насчет костылей и насколько оправдан перерасчет в пиксельном - проблема то нарастает по отходу от кубика. непланарные полики, сложные модели, количество текселей ( компенсация не перепеклась - мало пикселей на данном шеле).
ну и запись сдвоенных вершин в месте разрыва ювишки. В нынешних версиях это улучшено и визуально не так заметно. но есть трабл с бликом на месте шва
http://prntscr.com/5ckjut. (1 - шов хард. 2 шов софт)
кстати в мармосете эта ошибка еще меньше , но присутствует. так что излечить до конца не удалось. Я в разработке не участвовал и познания скорее теоретические в этом вопросе, настолько насколько мне требуется для производства контента, но логика подсказывает, что учитывая все перечисленные факторы, наверно поэтому и не считают в пиксельном шейдере - нагрузка + сложность модели(значительные ошибки шейдинга) + тексели( не хватает пикселей для компенсации)
ну и запись сдвоенных вершин в месте разрыва ювишки. В нынешних версиях это улучшено и визуально не так заметно. но есть трабл с бликом на месте шва
http://prntscr.com/5ckjut. (1 - шов хард. 2 шов софт)
кстати в мармосете эта ошибка еще меньше , но присутствует. так что излечить до конца не удалось. Я в разработке не участвовал и познания скорее теоретические в этом вопросе, настолько насколько мне требуется для производства контента, но логика подсказывает, что учитывая все перечисленные факторы, наверно поэтому и не считают в пиксельном шейдере - нагрузка + сложность модели(значительные ошибки шейдинга) + тексели( не хватает пикселей для компенсации)
в том и прикол что запеч на лоупольный кубик со сглаженными нормалками (по максовки одной группой сглаживания) это одна из самых трудных ситуаций. Труднее будет если углы будут не 90 гразусов, а например 30, но и в таком случае все будет работать как надо. Производительность не падает от этого на современных вижеокартах, так как это очень малозатратная операция для современного шейдинга. Вся проблема только в том, что это мало кто использует. В Unity как раз человек который писал шейдера PBR для 5 версии (Renaldaz), не смотря на свой опыт работы в этом вообще не понимал зачем нужно ортонормировать тангент спейс в пиксельном шейдере, типо всегда же в вершинном только делали и вроде как хватало, в результате я попросил главного разработчика 3D-Coat помочь Unity с правильным отображением нормалей и все получилось, там делов было 15 минут. Правда не знаю осталось у них это в релизной версии или нет, у юнити очень сложно все с малейшими изменениями... А если по делу, то автору статьи просто нужно знать что бывают Y+ и Y- нормали, отличаются они просто инвертированием зеленого канала. На скриншоте именно этот артефакт присутствует. Для органики этого знания достаточно)) все эти примудрости с TS и стыками на UV в основном нужны для хардсурфейсного моделирования. И еще да srgb тыкать туда сюда, это тоже может раломать отображение нормалмапы еще как.
Всем привет!
Я не знаком с техническими примудростями сложных просчетов видеокарт и спицифики программного устройства движков, поэтому я не буду говорить об этом. Я лишь поделюсь своим способом создания нормала для игрового контента UE 4 с помощью Blender. Сразу скажу что я никогда не заморачивался на счет стыков и прочих костылей с ребрами, а что такое TSя вообще не знаю ))), но при этом я знаю что у Makadebinesi проблема не только с инвертированным зеленым каналом.
На примере покажу весь процесс. Я не делаю разницы между hard surface моделированием и персонажкой, в обоих случаях нормал запекаю одинаково, а развертка вообще не важна.
Допустим у нас есть какая то техническая деталь, приспособление, в общем hardsurface-ная штука), вот что я смоделил для примера:
Сделал лоуполи с ужасной сеткой:
И такую же ужасную развертку:
С сечениями на самых видных местах)).
Для запекания выставляем одну группу сглаживания:
И, добавляем модификатор Triangulate на нашу лоуполи (как раз наличие четырехугольных полигонов придает запеченному нормалу такой «покареженый» вид, нужно убедиться что все поделено на трианглы):
Запекаем:
Вот что у меня получилось:
Экспортируем модель ( с одной группой сглаживания):
Имортируем в Unreal:
Инвертируем зеленый канал у карты нормалей в Unreal:
Смотрим что получилось:
Я не знаком с техническими примудростями сложных просчетов видеокарт и спицифики программного устройства движков, поэтому я не буду говорить об этом. Я лишь поделюсь своим способом создания нормала для игрового контента UE 4 с помощью Blender. Сразу скажу что я никогда не заморачивался на счет стыков и прочих костылей с ребрами, а что такое TSя вообще не знаю ))), но при этом я знаю что у Makadebinesi проблема не только с инвертированным зеленым каналом.
На примере покажу весь процесс. Я не делаю разницы между hard surface моделированием и персонажкой, в обоих случаях нормал запекаю одинаково, а развертка вообще не важна.
Допустим у нас есть какая то техническая деталь, приспособление, в общем hardsurface-ная штука), вот что я смоделил для примера:
Сделал лоуполи с ужасной сеткой:
И такую же ужасную развертку:
С сечениями на самых видных местах)).
Для запекания выставляем одну группу сглаживания:
И, добавляем модификатор Triangulate на нашу лоуполи (как раз наличие четырехугольных полигонов придает запеченному нормалу такой «покареженый» вид, нужно убедиться что все поделено на трианглы):
Запекаем:
Вот что у меня получилось:
Экспортируем модель ( с одной группой сглаживания):
Имортируем в Unreal:
Инвертируем зеленый канал у карты нормалей в Unreal:
Смотрим что получилось:
Последнее редактирование: