Войти
ПрограммированиеФорумГрафика

Параметрическое размытие теней (3 стр)

Страницы: 1 2 3
#30
16:00, 29 июля 2014

Kozinaka
> Есть какие-нибудь готовые решения по автоматическому раскидыванию спрайтов в
> атласы на лету?
Зачем перераскидывать? Они у тебя изначально разве не в атласах? Вот эти атласы просто и склонировать с уменьшением в 2 (например) раза.

> Разве нагрузка на пиксельный шейдер зависит не количества пикселей на выходе?
И на выходе и на входе. Все влияет. И по идее чем меньше коэффицентов, чем грубее гауссиана, тем в меньшей степени это будет тормозить.

> По части отражения ситуации - безусловно достатчно, но в динамике ступеньки
> могут внимание привлекать при плавном изменении высоты (а оно именно такое и
> есть).
Сначала проверь потом говори.
Я был сильно удивлен, когда в моем проекте (римейк boulder dash), достаточно было всего лишь восемь углов с заранее отрендеренной тенью для того, чтобы никаких артифактов на ПЛАВНО катящемся камне не было видно. Мозг человека быстро проходящие процессы часто достраивает в восприятии.
Какие-то шороховатости все равно останутся. Не нужно заранее настраивать себя на то что это будет плохо. Это будет просто фишка. Но мне думается что никто ничего не заметит.

#31
16:24, 29 июля 2014

Executor
> Я наверное пропустил, но как ты сейчас делаешь тени? Я так понял это не
> спрайты. Это шадоумапа или что?

Поначалу я держал отдельные спрайты теней, но потом открыл для себя блендинг. :) Прежде чем отрисовать спрайт существа я сдвигаю его немного и отрисовываю с блендингом в цвет (0, 0, 0, 200) - последнее, это альфа. А уже потом сверху рисую спрайт как он есть. Всё просто.

CasDev
У меня не для мобилок, в принципе, так что думаю прокатит. Как раз что-то типа такого шейдера я собрал по результатам гугления. :) Вычитал, что если делать выборки между пикселями, то можно в два раза сэкономить за счет интерполяции при выборке, которая усредняет значение пикселей. Плюс можно сократить количество выборок, но увеличить количество проходов - будет меньше градаций размытия, но, возможно, много и не требуется.

Dexus
> Зачем перераскидывать? Они у тебя изначально разве не в атласах?
В атласах. Просто некоторые перемешаны с гуишным барахлом, придётся навести порядок. Спасибо, чё-то затупил.

>Вот эти атласы просто и склонировать с уменьшением в 2 (например) раза.
Так может, действительно, будет эффективнее сделать пачечку таких атласов (с разницей в размытии) и блендить шейдером из неё?

> Не нужно заранее настраивать себя на то что это будет плохо.
Перфекционизм живуч и трудноподавляем. :)

#32
16:28, 29 июля 2014

Kozinaka
> Так может, действительно, будет эффективнее сделать пачечку таких атласов (с
> разницей в размытии) и блендить шейдером из неё?
Да, вариант. Многие в том числе и из современных игр таким способом не брезгают. Дешево и сердито.
Попробуй, велика вероятность что этого будет более чем достаточно.
Учитывая разрешение в 2 раза меньшее чем оригинальных спрайтов, и то что это будет 8 вместо 32 бит, объем, занимаемый 16ю такими атласами будет эквивалентен объему оригинальных атласов. Т.е. Память на текстуры этих спрайтов увеличится всего в 2 раза.

> Перфекционизм живуч и трудноизживаем. :)
Борись с ним :) Сам вот со своим борюсь тоже.

#33
16:34, 29 июля 2014

Dexus
> Да, вариант. Многие в том числе и из современных игр таким способом не брезгуют. Дешево и сердито.
Начну с того, что попробую ещё сердитей - вообще без шейдеров. Буду выбирать из пачки два ближайших к нужной градации атласа и выводить один поверх другого с прозрачностью в нужной пропорции.

#34
17:34, 29 июля 2014

Kozinaka
> Начну с того, что попробую ещё сердитей - вообще без шейдеров. Буду выбирать из
> пачки два ближайших к нужной градации атласа и выводить один поверх другого с
> прозрачностью в нужной пропорции.

у тебя в змее много звеньев, которые накладываются друг на друга, филлрейт на недоайпадах просадишь :) а так нормальное решение.  следи за дроколами.

#35
0:44, 30 июля 2014

Спасибо за пристальное внимание и содержательные советы!

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

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

Никаких шейдеров, никакого волшебства. Если со временем покажется грубоватым - добавлю промежуточный слой для плавности перехода.

#36
9:50, 30 июля 2014

Kozinaka
>Оказалось достаточно одной максимально размытой тени, которая блендится с максимально чёткой.
Это как?
И как у тебя на это накладывается тень от составляющих тела (крылышки и прочее)?

#37
10:00, 30 июля 2014

Kozinaka
Выглядит хорошо.
А чем вызвано избегание шейдеров? Сейчас даже калькуляторы по другому и не умеют.

#38
10:27, 30 июля 2014

CasDev
>Это как?
Кроме спрайта существа храню ещё и спрайт максимально размытой тени:

Блоха | Параметрическое размытие теней

У блохи всего два состояния - обычное и когда она пищит (когда пугается или просто от скуки), поэтому набора спрайтов два, а так достаточно основного спрайта и размытой тени.

Когда мне нужно нарисовать тень существа, я замеряю его высоту и вывожу спрайт существа с блендингом в чёрный цвет и спрайт его размытой тени с прозрачностью соответствующей высоте:

//Блоха выше 50.0f не прыгает
float fade = obj->Z / 50.0f;
        
//_fleaSprite - основной спрайт блохи (он фейдится в чёрный цвет, поэтому тоже как тень выглядит)
DrawShadow(obj, _fleaSprite, 1.0f - fade);

//_fleaFadedShadow - размытый спрайт тени блохи
DrawShadow(obj, _fleaFadedShadow, fade);

То, что всего две градации размытия сильно прикрывает ещё одна фишка - чем выше расстояние до земли, тем бледнее отрисовывается тень (прозрачней).

>И как у тебя на это накладывается тень от составляющих тела (крылышки и прочее)?

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

Муха | Параметрическое размытие теней

Executor
> А чем вызвано избегание шейдеров? Сейчас даже калькуляторы по другому и не умеют.
Э... Бритвой Оккама. Мой самопальный движок (обёртка вокруг DirectX) быстро и просто рисует спрайты с разным блендингом, шейдеров до этого не использовал, не нужны были. Второй раз пытаюсь внедрить шейдеры (первый раз понадобились для бликов на стёклах), и второй раз оказывается, что можно не усложнять движок и процесс отрисовки, а обойтись обычным наложением рук спрайтов. :)

#39
10:32, 30 июля 2014

Kozinaka
> Второй раз пытаюсь внедрить шейдеры (первый раз понадобились для
> бликов на стёклах), и второй раз оказывается, что можно не усложнять движок и
> процесс отрисовки, а обойтись обычным наложением рук спрайтов. :)
Боюсь, в какой-то момент тебе понадобятся шейдеры ради какой-то фичи, а что-бы их внедрить, придется перелопатить весь движок.
С другой стороны, заслуживает уважение умение использовать стандартный конвейер. Я, например, много работал с графикой, но нарисовать что-то без шейдеров уже не могу, так как не имею представления о стандартном конвейере и всех этих фичах.

#40
10:42, 30 июля 2014

-Eugene-
> в какой-то момент тебе понадобятся шейдеры ради какой-то фичи, а что-бы их
> внедрить, придется перелопатить весь движок
Ближайшая причина - регуляция гаммы, яркости и контраста. Сейчас я это через SetGammaRamp делаю, но когда игра в оконном режиме, то гамма меняется у всего монитора, немного обескураживающий пользователей эффект.

У меня постэффектов пока вообще нет - вот они-то точно потребуют шейдеров. Уже начерно шейдеры вставил в движок, но с ними сложнее, конечно. Подключай, отключай, параметры им передавай... :)

Страницы: 1 2 3
ПрограммированиеФорумГрафика

Тема в архиве.