41

Эффект силового поля (шейдер)

Небольшая практика в эффектиках и шейдерах под Unity. Хотелось мне сделать эффект силового поля, в которое попадают что-либо и провоцирует световое пятно, растекающееся по поверхности. Сказано - сделано :)

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

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

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

Ну и сам эффект растекающейся энергетической вспышки

_InpactPoint - это вектор направления попадания (для отрисовки пятна в нужной стороне, передавать его придётся с помощью скрипта(конечное, минус начальное, ну и привести к единичке). Подсказочка:

Нормаль берём из вертекса.

_HitOverlayArea - регулирует величину пятна (плавность пятна зависит от полигонажа сферы, потому что работаем с нормалями вертексов. Тут немношко экономии - нормали берём в вертексном шейдере. Но если экономить не надо - можно нормаль посчитать и во фрагменте, тогда никаких проблем с размерами пятна не будет).

_HitOverlayValue - сила пятна.

_HitColor - собственно цвет для пятна.

Цвет самого поля задается через _TintColor и сохраняется в переменную col (код был выше).

Собственно сам инспектор всего этого добра, для тех, кто не хочет математики, а подёргать ползунки:

Надеюсь, что подписульки понятны лучше, чем названия переменных :)


Гитхаб: https://github.com/MrMouseSE/EnergyShieldShader

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

0
Автор поста оценил этот комментарий

вообще не понимаю, как работают шейдеры

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

альфа - это канал отрисовки, отвечающий за прозрачность. Это просто инструмент, как его использовать - зависит от пользователя. Если имеется ввиду, "почему не использовать текстуру в качестве маски для альфы" - то текстура не меняется динамически, т.е. не будет зависить от угла взгляда на объект, соответственно, если объект крутить - с разных сторон будет выглядеть по-разному. Поэтому для альфа-канала используются свойства самого объекта (нормаль к поверхности в этой точке и её dot-product с направлением взгляда). Dot - возвращает значение от -1 до 1 в зависимости от угла между векторами (когда вектора направлены в одну сторону значение будет 1, когда в разные -1, остальные случаи будут лежать в этом диапазоне). Для эффекта френеля этот закон можно сформулировать так: когда нормаль поверхности перпендикулярна направлению взгляда - объект прозрачный, иначе - непрозарычный. Для поля (которое непрозрачно по краям, а прозрачно посередине) нужен обратный к этому эффект, т.е. там где нормаль перпендикулярна взгляду нам нужна 1 для альфы, а в остальных случаях - меньшее значение, вплоть до нуля, когда мы смотрим на объект "в лоб". То есть необходимо вычесть из единицы полученное значение. В конечном счетё мы получаем точно такую же маску для альфы, только не текстурную, а динамическую, которая вычисляется на основании свойств объекта.

показать ответы
0
Автор поста оценил этот комментарий

Немного не точно, но я понял, что вы имели ввиду. Почему нельзя было использовать альфа-канал?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

што?.. судя по вопросу - вы вообще не понимаете, о чем говорите, если честно.

показать ответы
0
Автор поста оценил этот комментарий

Кто б нормальный мешслайсер с мелонингом (это про текстурирование среза), а то и вовсе с объемными текстурами запилил на юнити. В свое время из-за этого на анрил перешел :D

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

что за "объёмные текстуры"? не оч. понятно

показать ответы
0
Автор поста оценил этот комментарий
А выдержит ли этот щит АВАДУ КЕДАВРУ?! т.е. непрерывным потоком
Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

настройки есть, анимируйте, как душе угодно

0
Автор поста оценил этот комментарий

Что значит: "эффектом френеля симулируем "энергетическое" поле"?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

эффект френеля - зависимость визуальных свойств материала от угла падения (взгляда, света). Если просто - постепенное изменение прозрачности от центра шара к краю.

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества