Страница 1 из 1

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

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

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

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

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


Спасибо за ответы заранее.

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

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

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

https://pastebin.com/CG6aBZFa

p.s. в коде ошибка, которую я уже исправил. Вместо
float2 flickerPos = (_FlickerPosX, _FlickerPosY)
нужно написать
float2 flickerPos = float2(_FlickerPosX, _FlickerPosY);

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

СообщениеДобавлено: 08 фев 2018, 00:57
samana
Классный эффект получился!

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

СообщениеДобавлено: 08 фев 2018, 01:34
Leonin
samana писал(а):Классный эффект получился!

Да, что-то вроде локального glow эффекта, если правильно настроить сам glow и эмиссию и шейдере :) Скоро самое интересное и красивое пойдет, но в то же время трудное: это рандомные узоры и бегающие по ним "локальные глоу" :)

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

СообщениеДобавлено: 12 фев 2018, 07:55
jetyb
В общем, захотелось мне больше красивостей и анимированную эмиссию, а точнее ее текстура. Возможно ли у стандартного шейдера перед проходом, где обрабатывается эмиссия, "подкорректировать" текстуру другим шейдером? Если да, то как, каким шейдером?

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