![](images/chestnut/misc/left.gif) |
07.12.2010, 16:17
|
#1
|
scientist.alien
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений (для 2,593 пользователей)
|
"Лесенки" на границе Shadow distance
Предисловие:
По мере возможностей своего медленного интернета облазил ветки "глюки", "tips&tricks", шейдерный флуд, Post-Processing соседнего ресурса, но ничего похожего на свой вопрос не нашел.
На официальных форумах и "ответах" тоже был, но решения там тоже не увидел. Если плохо искал - просьба ткнуть в меня ссылкой на решение (именно в решение).
Проблема:
Есть сцена, включен deferred, в сцене directional источник света с мягкими тенями. Лайтмапы посчитаны, расстояние теням в "quality settings" выставлено 30. В дальней зоне теней (т.е. ближе к shadow distance) появляются "лесенки" - плоскости затенения. При поворотах камеры и при движении "лесенки" тоже бегают - как я понимаю, зависят они от depth пикселя.
Ну, на скриншоте эффект в общем-то во всей "красе" представлен.
Задача:
Заставить их исчезнуть.
Информация:
Как я понял из официальных форумов, это нечто вроде "особенности", которую на уровне движка они выпилить не могут (что меня сильно удивляет - неужели с ТАКИМ артефактом они готовы мириться?)
Попытки решения:
1. Пробовал крутить Far clip plane камеры. Лесенкам пофиг.
2. Пробовал уменьшать Shadow distance. На SD=10 лесенок почти не видно, но SD=10 - это 3 метра в игровом эквиваленте. Несерьёзно, однако. Идешь-идешь, и тут ЧЕРДАК! - под объектом тень появилась.
3. Пробовал крутить Bias параметр у теней источника света. Чем меньше Bias, тем ужаснее лесенки. Но! Я сильно обломался когда напоролся на то, что ребята из Юнитека решили, что Bias больше чем 0.2 быть не может. Думается мне, если бы его можно было установить 0.7 - 0.9, это решило бы проблему. В 2.6, к слову, когда у меня возникала подобная проблема (там лесенки были менее ужасными и проявляли себя всего в паре мест), я выкручивал Bias до значения 1.0 и избавлялся от артефакта.
!!Решение!!
Крутить вместе Far clip plane и (этот еще важнее) Near clip plane. Старайтесь сделать Near clip plane настолько большим, насколько это возможно - и лесенки уходят! Но! Уходят лесенки только в Play mode, в Scene view они остаются(
Просьба:
Расскажите, что, все-таки, вызывает этот артефакт. В силу своих незнаний предполагаю (исходя из найденного решения) что это связано с ошибкой буфера глубины видеокартой (надеюсь, эта абракадабра не вызовет на меня лучи гнева - я плохо ориентируюсь в пайплайне рендера теней)
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab. We LOVE you. We MADE you.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
07.12.2010, 18:03
|
#2
|
Дэвелопер
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений (для 4,642 пользователей)
|
Ответ: "Лесенки" на границе Shadow distance
Сразу глянув на скрин, хотел предложить покрутить depth bias. Но потом оказалось, что ты уже это делал.
Вообще соотношение far clip plane к near clip plane всегда нужно делать как можно меньше. Это повышает точность буфера глубины. Вспоминается какой-то пост в блоге Aras'a, что неплохо было бы сделать автоответчик на форуме, который бы писал "Следует увеличить значение near clip plane", ибо это какая-то массовая истерия ставить ближнюю плоскость на 0.000001, а дальнюю на 1000000. В таком случае, если буфер глубины 24-битный, то на один его бит будет приходиться 59604,64 единиц движкового пространства. Но это очень грубо говоря, т.к. значения глубины в з-буфере на самом деле не линейные. Скажем, если соотношение far к near составляет 100 единиц, то 90% значений з-буфера придется на первые 10% значений глубины сцены. Именно поэтому такие артефакты чаще всего проявляются на большем расстоянии от камеры. Есть еще w-buffer, он вроде как линейный. Но о нем я ничего больше сказать не могу, т.к. не пользовался.
Иногда похожая ерунда может возникнуть если тень падает на поверхность под очень острым углом.
UPD. Немного перефразировал и дополнил.
__________________
|
(Offline)
|
|
Эти 7 пользователя(ей) сказали Спасибо .Squid за это полезное сообщение:
|
|
07.12.2010, 18:59
|
#3
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: "Лесенки" на границе Shadow distance
это какая-то массовая истерия ставить ближнюю плоскость на 0.000001, а дальнюю на 1000000.
|
Ну дак это логично, мне кажется. Когда-то давно, когда я впервые столкнулся с тем, что мне блиц красил чёрным то, что вдали, я узнал про эту команду и, недолго думая, засунул туда 0.000001 и 9999999 шоб надолго хватило, искренне удивляясь, почему авторы движка так не сделали, вдалеке не видно ж ничего.
Только потом уже узнал в чём соль.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
07.12.2010, 19:07
|
#4
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: "Лесенки" на границе Shadow distance
Сообщение от .Squid
Есть еще w-buffer, он вроде как линейный. Но о нем я ничего больше сказать не могу, т.к. не пользовался.
|
А он по моему только на 16-ти битном цвете дает лучший результат. Когда-то давно интересовался, а вот осталось в голове только это.
|
(Offline)
|
|
07.12.2010, 19:51
|
#5
|
Дэвелопер
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений (для 4,642 пользователей)
|
Ответ: "Лесенки" на границе Shadow distance
Сообщение от pax
А он по моему только на 16-ти битном цвете дает лучший результат. Когда-то давно интересовался, а вот осталось в голове только это.
|
Цвет тут не при чем. W-buffer давал более качетсвенный результат, чем 16-битный Z-buffer. Почему сейчас, в эпоху 24-, 32-битных з-буферов, он дает хуже результат, я не знаю, т.к. не в курсе всех нюансов его работы. Сейчас W-buffer железом не поддерживается, насколько я знаю.
__________________
|
(Offline)
|
|
07.12.2010, 20:37
|
#6
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: "Лесенки" на границе Shadow distance
Собственно о возможности использования более точного w-буфера при 16-ти битном цвете я и не догадывался. Так что я это и имел ввиду.
|
(Offline)
|
|
07.12.2010, 21:37
|
#7
|
Дэвелопер
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений (для 4,642 пользователей)
|
Ответ: "Лесенки" на границе Shadow distance
Еще раз говорю: разрядность цвета тут не при чем. Разрядность з-буффера устанавливается отдельно.
__________________
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:50.
|