Дополнительный проход для текстуры

Шейдеры и все-все-все.

Дополнительный проход для текстуры

Сообщение Leonin 07 фев 2018, 13:09

В общем, не знал, как лучше назвать тему, учитывая мою некомпетентность в шейдерах, поэтому заранее прошу прощения, в том числе и за текст ниже :)
В общем, захотелось мне больше красивостей и анимированную эмиссию, а точнее ее текстура. Возможно ли у стандартного шейдера перед проходом, где обрабатывается эмиссия, "подкорректировать" текстуру другим шейдером? Если да, то как, каким шейдером? Да и вообщем, каким образом можно "вставить" свой шейдер (проход?) в стандартный. Сначала скачал стандартные шейдеры, пытался разобраться что там за чем идет, но там очень много разных параметров, легко запутаться/что-нибудь сломать. Ну или шейдеры для меня пока как магия для маглов.
Задача такая: имеется ч\б текстура, с белыми узорами на черном фонe. Хочется чтобы определенная часть узора в разное время светилась где-то больше, где-то меньше. В частности бегающая по контуру узора светящаяся точка, которая светится. Первое что пришло в голову, это какая-нибудь маска в виде этой точки, по определенному алгоритму бегающая по текстуре узора (по заданным заранее координатам в определенной последовательности, например) . Где она есть, там белый свет, где ее нет -- там черный. Эм... правда узоры пока не рисуются, но они будут. Надеюсь, что будут :D
Должен сказать, что текстура эмиссии представляет собой автогенерируемый атлас из сторон кубов, как на картинке. Сложно словами описать, проще скрины будет посмотреть :)

Скрытый текст:
Изображение

Скрытый текст:
Изображение

Скрытый текст:
Изображение


Спасибо за ответы заранее.
Аватара пользователя
Leonin
UNец
 
Сообщения: 41
Зарегистрирован: 12 янв 2018, 16:59

Re: Дополнительный проход для текстуры

Сообщение Leonin 08 фев 2018, 00:36

По большей части уже разобрался сам, более или менее. Мне просто нужен был surface shader. Что-то вроде такого я хотел получить:
Скрытый текст:

Мой первый самописный шейдер. Если более опытные могут подсказать, как было бы написать правильнее, то буду признателен:

https://pastebin.com/CG6aBZFa

p.s. в коде ошибка, которую я уже исправил. Вместо
float2 flickerPos = (_FlickerPosX, _FlickerPosY)
нужно написать
float2 flickerPos = float2(_FlickerPosX, _FlickerPosY);
Последний раз редактировалось Leonin 08 фев 2018, 01:37, всего редактировалось 1 раз.
Аватара пользователя
Leonin
UNец
 
Сообщения: 41
Зарегистрирован: 12 янв 2018, 16:59

Re: Дополнительный проход для текстуры

Сообщение samana 08 фев 2018, 00:57

Классный эффект получился!
Аватара пользователя
samana
Адепт
 
Сообщения: 4172
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск
  • Сайт

Re: Дополнительный проход для текстуры

Сообщение Leonin 08 фев 2018, 01:34

samana писал(а):Классный эффект получился!

Да, что-то вроде локального glow эффекта, если правильно настроить сам glow и эмиссию и шейдере :) Скоро самое интересное и красивое пойдет, но в то же время трудное: это рандомные узоры и бегающие по ним "локальные глоу" :)
Аватара пользователя
Leonin
UNец
 
Сообщения: 41
Зарегистрирован: 12 янв 2018, 16:59

Re: Дополнительный проход для текстуры

Сообщение jetyb 12 фев 2018, 07:55

В общем, захотелось мне больше красивостей и анимированную эмиссию, а точнее ее текстура. Возможно ли у стандартного шейдера перед проходом, где обрабатывается эмиссия, "подкорректировать" текстуру другим шейдером? Если да, то как, каким шейдером?

Можно саму текстуру - источник сделать динамически модифицируемой рендер-текстурой _MyRenderTexAlbedo, которую передавать в шейдер.
А изменять эту рендер-текстуру отдельно, по команде вне основного цикла.
Синтаксис:
Используется csharp
o.Aldedo = tex2D(_MyRenderTexAlbedo, IN.texcoord).rgb;
o.Emission = tex2D(_MyRenderTexEmission, IN.texcoord).r;
..
sampler2D _MyRenderTexAlbedo;
sampler2D _MyRenderTexEmission;
 
jetyb
Адепт
 
Сообщения: 1343
Зарегистрирован: 31 окт 2011, 17:21


Вернуться в Shader Lab

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2