В соседней теме я задал вопрос по поводу своих проблем с тенями в движке Unity3d.
Проблема заключается в том, что они "отодвинуты" от объекта который их отбрасывает:
Этот баг называется "peter panning". В документации по Unity он описывается,
но готовых решений как с ним бороться там не приводится. Интересно, что такие
неправильные тени изображены даже в промо материалах по версии Unity 5.0,
которые выложены на официальном сайте разработчика движка:
Так же этот баг наличествует в коммерческом паке из ассетстора ценой в $85:
Скрин взят отсюда: https://youtu.be/SHxChfQ2_pc?t=164
==============
В общем камрад arte_de_mort обозначил направление куда копать, за что ему большое спасибо!
arte_de_mort
> Я так понимаю речь про то, что тень начинается не сразу от меша, а с некоторым
> зазором? Просто сбивает с толку светлая полоса посреди картинки, и невозможно
> понять геометрию пространства :)
> Но если так, я бы поигрался сначала с самим мешем, - cast shadow double sided,
> потом проверил UV меша и скорее всего разложил бы вручную UV2 под лайтмапу,
> затем сделал меш кубами (т.е. на картинке стены выглядят просто плоскостями -
> это стрёмный подход, я бы делал замкнутыми мешами), потом поставил бы
> кубик-шадоукастер, затем у источника света shadow bias, потом бы вообще
> попробовал изменить угол падения света, есть подозрение, что он слишком
> сильный, отчего тень может беситься. Ну и наконец lightmap parameters - это уже
> тяжёлая артиллерия, где надо закапываться.
Я сделал вот такой вот меш:
с такой вот UV-сеткой:
покрутил все перечисленные выше настройки, изменял угол падения света, и т.д.
но данные действия не привели ни к какому результату...
Кто что может посоветовать?
MSA2
забей, никто не будет вглядываться в такие детали ..
ради интереса сшей вот это в один UV шелл на UV2
https://s.mail.ru/AWHw/Psz3izDBh
P.S. и да, я не верю что ты попробовал всё перечисленное, в частности lightmap parameters :)
Уменьшить bias на источнике света.
1. Эффект Питера пена в теневых картах устранить невозможно, если только не городить хитровыделанных алгоритмов. Сейчас чаще всего от него избавляются за счёт ScreenSpace теней, которые дополняют ShadowMap.
2. Какое отношение UV развёртка имеет к реалтайм теням?
marggob
> 2. Какое отношение UV развёртка имеет к реалтайм теням?
А я чё-то думал это запечённые.
Обычная фигня для стандартного шадоумаппинга. Выбор между смещенной тенью и глитчем от z-fighting , подбирать bias и ловить эту тонкую грань.
arte_de_mort
> А я чё-то думал это запечённые.
Да, я забыл уточнить, что это реалтайм тени.
marggob
> 1. Эффект Питера пена в теневых картах устранить невозможно, если только не
> городить хитровыделанных алгоритмов. Сейчас чаще всего от него избавляются за
> счёт ScreenSpace теней, которые дополняют ShadowMap.
Печаль.
Скажите, а в различных играх эти проблемы устраняются способом о котором вы говорите?
В оутласте, TLOU, дизонерде и т.д. я ни разу не замечал этого эффекта, хотя многие места
просматривал по-кадрово - изучал строение мешей и текстурирование на их примере.
Mira
> Обычная фигня для стандартного шадоумаппинга. Выбор между смещенной тенью и
> глитчем от z-fighting , подбирать bias и ловить эту тонкую грань.
Да, я уже понял, что это стандартный гемор, если уж он присутствует даже в промо-материалах.
Bias у меня на минимуме, особой роли он не играет как мне показалось.
А про "глитчем от z-fighting" можете чуть более подробно? Я не владею столь
специфичным техническим слэнгом и очень трудно понимать контекст, даже с гуглом.
MSA2
Ну ты выставь биас на минимум и побегай по локации или что у тебя там. На некоторых поверхностях где свет падает под большим углом, тень может стать похожа на "шевелящуюся" сетку/полосы/пиксельный узор. Еще неприятнее чем уползшая тень...
marggob
> Эффект Питера пена в теневых картах устранить невозможно
Подтверждаю.
Эффект связан с погрешностью float и принципиально неустраним (для карт теней).
Тему можно закрывать.
Для ShadowMap это не баг а результат работы PolygonOffset, который накручивают, чтобы не было з-файтинга. То есть стоит выбор - или з-файтинг или питер пэн.
g-cont
> Для ShadowMap это не баг а результат работы PolygonOffset, который накручивают,
> чтобы не было з-файтинга. То есть стоит выбор - или з-файтинг или питер пэн.
Вот теперь мне почти всё ясно. Спасибо за ёмкий комментарий!
Похоже стоит поэкспериментировать с запеканием теней,
а по-большому счёту махнуть на всё это рукой.
Всем спасибо за комментарии!
MSA2
если долго крутить параметры PolygonOffset можно найти такой компромисс, чтобы и з-файтинга почти не было и питер пэннинг свести к минимуму. Но всё равно будет неидеально.
g-cont
> если долго крутить параметры PolygonOffset можно найти такой компромисс, чтобы
> и з-файтинга почти не было и питер пэннинг свести к минимуму. Но всё равно
> будет неидеально.
Тут всё просто: хотя и хочется, но я не полезу в QT и вообще api GPU,
поскольку этой темой специально не занимался и разбираться с ней
несколько месяцев не стану. Моя цель - сделать продукт, а не закапываться
в бесконечных технологиях и фичах. Я очень хорошо умею делать другие
вещи, которые как раз и обуславливают потребительскую стоимость игры.
С таким подходом я уже посрезал много всего интересного, что
выглядело бы весьма эффектно с точки зрения геймерского опыта,
но требует для реализации и отладки пусть небольшой, но слаженной
команды, которой у меня нет. По крайней мере пока.
MSA2
> Этот баг называется "peter panning". В документации по Unity он описывается,
> но готовых решений как с ним бороться там не приводится
Detailed Screen Space Shadows
Тема в архиве.