Сохранен 43
https://2ch.hk/gd/res/169767.html
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

ShaderLab newfag нить 1;

 Аноним 26/05/15 Втр 11:39:57 #1 №169767 
14326295977420.jpg
Реквестирую максимальную инфу по шейдерам, в частности по ShaderLab.
Запилил несколько няшных шейдеров в ShaderForge, люто доставило, но, по личным ощущением, оно годится только для прототипирования, и после обкатки прототипа в связке с остальной игровой инфраструктурой необходимо переписывать уже руками. Слюни капают на UE4 и UDK с тамошним редактором шейдеров, но в силу обстоятельств вынужден использовать юнити, что, впрочем, не так уж и плохо.
Помимо всего прочего, реквестирую советы шейдерокодеров по оптимизации. Сильно ли больно фреймрейту от if\else и прочей логики? Художники люто требуют максимальную унификацию, решение "Всё в одном" вместо десятка по-разному настроенных шейдеров. Это ли праведный путь, или стоит знать меру? К шейдерам вообще применимы паттерны? (глупый вопрос, наверное, но кодингом занимаюсь всего год и первым языком был C#, со всеми вытекающими. От структуры выдаваемого шейдерфорджем кода хочется плакать).
И последний вопрос - наткнулся на описание стандартного шейдера в 5 юньке, и согласно ему при компиляции в билд всё неиспользуемое говно просто не компилируется в конечный билд. Могу ли я стандартными средствами unity сделать то же самое?
Аноним 26/05/15 Втр 11:47:49 #2 №169768 
Ну ебись оно конём, разметку проебал.
Аноним 26/05/15 Втр 11:49:33 #3 №169769 
>по личным ощущением
"ощущениям", конечно же.
самофикс
Аноним 26/05/15 Втр 12:01:55 #4 №169772 
Охуеенно. Подписался на тренд.

> Художники люто требуют максимальную унификацию
Слать нахуй таких художников. Лень ему сменить шейдер в один клик, сука, хочет передавать гору ненужных данных туда-сюда.
Отвечаю, сам artist, ебу в рот таких ленивых пидоров с претензиями.

>Сильно ли больно фреймрейту от if\else
Во всех источниках пишут что сильно, сам не замерял. А вообще почти всегда можно извернуться и обойтись без этого.

>И последний вопрос - наткнулся на описание стандартного шейдера в 5 юньке, и согласно ему при компиляции в билд всё неиспользуемое говно просто не компилируется
Если не ошибаюсь, все шейдеры ведут себя так-же в пятерке. А у дефолтного просто заебатый редактор, с галочками, выпадающими списками и т.д.
Аноним 26/05/15 Втр 12:13:18 #5 №169775 
>>169772
>Если не ошибаюсь, все шейдеры ведут себя так-же в пятерке. А у дефолтного просто заебатый редактор, с галочками, выпадающими списками и т.д.

Все? Даже самописные? Если это так то я кончаю радугой.

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

И да, всю инфу, которая соберётся в этом треде, оформлю в шапку к следующему треду. Очевидно, данный вопрос интересует не только меня.
Аноним 26/05/15 Втр 13:36:13 #6 №169785 
>>169775
>В Юнити в стандартном шейдере решили эту проблему этим самым заебатым редактором, и я хочу понять как они это сделали. Галки в шейдере - это в любом случае логика

По-моему, логика редактора никак не влияет на логику шейдеров. Все равно все что мы пишем на cg компилируется в некий computed code.
По сути редактор создает кучу шейдеров с разными комбинациями этих самых галочек, выпадающих списков и прочего. А затем при рендере подставляет нужный уже скомпилированный шейдер.

Во всяуос случае из того что я читал - сделал такие выводы. Может не так что-то понял конечно. Реквестируется знающий анон.

Аноним 26/05/15 Втр 18:54:07 #7 №169819 
>>169785
Нет. В шейдерлабе галки это булевые переменные в связке с if/else. Чувствую, стоит перекатываться в /pr/.
Здесь всё мертво.
Alita !!If/2eJUtPU 27/05/15 Срд 23:11:32 #8 №169950 
>>169767
Шэйдер-гуру в треде
>Сильно ли больно фреймрейту от if\else и прочей логики?
Зависит от ситуации, в большинстве случаев больно, на мобилах очень больно.

>К шейдерам вообще применимы паттерны?
Наркоман сука штоле? hlsl/glsl языки структурные.

>при компиляции в билд всё неиспользуемое говно просто не компилируется в конечный билд. Могу ли я стандартными средствами unity сделать то же самое?
Можешь :3

Вообще, скачай builtin_shaders и изучай.
Аноним 28/05/15 Чтв 10:17:20 #9 №170015 
>>169950
Да вот не имел дела с такими языками, разрыв шаблона получил. Выглядит оно как-то жутко внутри, понятно, вроде даже и просто, но жутко. За наводку спасибо, погуглю.
Аноним 28/05/15 Чтв 11:48:26 #10 №170022 
>>169950
>скачай builtin_shaders и изучай
Как же там дохуя всего р.р

StandardShaderGUI.cs - это и есть препроцессор?
Аноним 28/05/15 Чтв 11:58:21 #11 №170025 
>>170022
О, кажется понимаю.
Они препроцессор прямо в шейдер запихнули? Охуеть. Конечно препроцессору делать нечего в гуе, но я и не думал, что можно его прямо в шейдер запихнуть, лол.
Alita !!If/2eJUtPU 28/05/15 Чтв 18:04:20 #12 №170098 
>>170015
Паскаль, бэйсик не не слышал? Как-то грустно что современные дети кроме жабы да шарпа ничего и не знают.

>>170025
Можно полностью кастом эдитор сделать, а можно через MaterialPropertyDrawer
http://docs.unity3d.com/ScriptReference/MaterialPropertyDrawer.html
Аноним 28/05/15 Чтв 19:48:22 #13 №170119 
>>170098
Слышал конечно, даже писал на Паскале, как-раз таки в школе. И...я просто переставал понимать тот код, который я пишу, когда программа разрасталась хотя-бы немного. Преподаватель был чудесный, но он не любил Паскаль всей душой, соответственно и учил ему не очень охотно. А учиться самому было ОЧЕНЬ лень, ибо было ощущение, что я работаю не с магией, а с кучей проводов и переключателей. По этой причине не упоминаю, что имел опыт на Паскале, равно как и сознательный опыт работы со структурными языками. Это не кодинг был вовсе, это было какое-то говно.

К слову, писал, помимо прочего, ещё и на Scheme, но уже после окончания школы. Понравился значительно больше, и, честное слово, лучше бы учили его.
Аноним 29/05/15 Птн 08:48:41 #14 №170201 
>>170098
> Можно полностью кастом эдитор сделать, а можно через MaterialPropertyDrawer
> http://docs.unity3d.com/ScriptReference/MaterialPropertyDrawer.html
Спасибо за инфу об этой штуке. Но тут вот какой момент - у меня шейдер сделан универсальным, лепи из него что душе угодно, но я использовал для этого if/else. т.е. есть булевая переменная *мерцание неонового хуя" стоит в true, то в цикле if выбирается ветка с алгоритмом мерцания. Но куда не загляну - везде по пальцам бьют за такое. Нашел два метода, один описан выше и реализован в стандартном шейдере, а именно компиляция кучи .cginc под каждую функцию и их подключение в самом шейдере при нажатии кнопки. Второй вариант - использовать Lerp вместо If'a. Подсказали на каком-то английском форуме, сам пока не пробовал, но выглядит очень годным методом, разве что не слишком удобным.
Аноним 29/05/15 Птн 08:49:35 #15 №170202 
>>170201
не "есть" а "если"
самофикс
Аноним 29/05/15 Птн 08:58:54 #16 №170203 
>>169819
>>169785
>Нет. В шейдерлабе галки это булевые переменные в связке с if/else

Ну и кто теперь неправ, категоричная сучечка?

>>170201
Лерп неудобно. Охуеть.
Аноним 29/05/15 Птн 09:07:08 #17 №170205 
>>170203
"Ну и кто теперь неправ, категоричная сучечка? "
По твоему компилятор шейдеров настолько умный, что автоматически проводит препроцессинг кода на CG? Не видел этому доказательств. В исходниках стандартного шейдера препроцессор написан руками.

>Лерп неудобно. Охуеть.
В качестве логического элемента непривычно. Плюс я плохо себе представляю, как на лерпе можно сделать ветвление вида
if(ophui){
if(optochnohui?){
}}
(макака сожрала разметку кода, так что терпи).
Аноним 29/05/15 Птн 09:25:34 #18 №170207 
>>170205
Еще раз. Условные переходы редактора на превращаются в условныепереходы в скопмлированном шейдере.

>как на лерпе можно сделать ветвление вида
Это синтетический пример.
Как правило все привязано к какому-то флотату, и нужно выбрать из двух вариантов результата

fixed4 possatNaOpa;
fixed4 viebatMamkuOpa;
fixed opHui;

possatNaOpa = lerp(possatNaOpa, viebatMamkuOpa, opHui);

Аноним 29/05/15 Птн 09:26:59 #19 №170208 
>>170207
>переходы редактора на превращаются
Не превращаются

Быстрофикс с мобилы.
Аноним 29/05/15 Птн 09:31:56 #20 №170210 
>>170207
>Это синтетический пример.
Как правило все привязано к какому-то флотату, и нужно выбрать из двух вариантов результата

fixed4 possatNaOpa;
fixed4 viebatMamkuOpa;
fixed opHui;

possatNaOpa = lerp(possatNaOpa, viebatMamkuOpa, opHui);
Уоу. Ценная инфа, весьма благодарен. Я тут шоколад ем, с тобой бы поделился, но монитор потом чистить, так что обойдешься устной благодарностью.

>Условные переходы редактора на превращаются в условныепереходы в скопмлированном шейдере.
т.е. я могу класть хуй и использовать в шейдерлабе логику? А это сработает, если я буду ей пользоваться прямо в CGPROGRAM?
Аноним 29/05/15 Птн 09:32:34 #21 №170211 
>>170210
Блядь, проебал разметку.
р.р
Аноним 29/05/15 Птн 09:49:28 #22 №170213 
>>170210
Ты понимаешь, что то, что ты написал в файле .shader - не сам шейдер? Он еще должен скомпилироваться. Заметь, когда выбираешь свой шейдер в инспекторе - там есть кнопка "Compile and show code". В нем простыня кода шейдеров под разные платформы, типы рендеринга и прочей херни.

Так вот все что ты написал в CGPROGRAM - это все туда попадает, со всей логикой и прочей хуетой.

А юнитехи, запили логику, компиляции шейдера в по сути в редактор материала. И перенесли туда галочки, списки и т.д.
То есть выбрал ты из списка "rendering mofe - opaque" - он компилирует шейдер без блока обработки прозрачности. Выбрал "cutout" - на тебе блок кода по отсечению пикселей.

И так далее. И получается что в итоге, в финальном шейдере нет никаких if/else.

Аноним 29/05/15 Птн 09:58:53 #23 №170214 
14328827337630.jpg
>>170213
Понял. Ты просто няша, спасибо большое!
Аноним 29/05/15 Птн 10:13:08 #24 №170218 
>>170213
Ах да, ещё такой момент. Я всю логику, которую мог, выносил на внешние .cs скрипты. В частности анимацию прокручивания UV координат, всякие тайминги и всё в этом роде. Но после твоего сообщения меня посетила мысль... А что если внести логику в сам шейдер, но за рамки CGPROGRAM? Прокрутку UV то точно можно, а вот как быть, скажем, если мне нужно растворить материал по маске по команде внешнего скрипта? Я для этого делал внешний скрипт-контроллер, а уже его связывал с шейдером глобальными переменными (не знаю другого способа, делал это при помощи метода Shader.SetGlobal)
Аноним 29/05/15 Птн 10:34:42 #25 №170220 
И последний, на данный момент, вопрос. Как шейдерлаб к VS прикрутить? На данный момент использую Notepad++ в качестве редактора, синтаксис для него, опять же, взял на одном из форумов. Но не хватает Intellisense :c
Аноним 29/05/15 Птн 10:49:00 #26 №170226 
>>170218
<всю логику, которую мог, выносил на внешние .cs скрипты. В частности

Я думаю все переносить в шейдер тоже не дело. Нахер максимализм, исходить нужно из логики удобства и наглядности. Например ювишки я кручу скриптом. Хття бы потому-что в шейдере нет параметра deltaTime. И если уж все равно его нужно передавать в шейдер, мне проще сразу посчитать смещение uv в скрипте и уже его слать.

>Как шейдерлаб к VS прикрутить?
Я не нашел способа это сделать, сам страдаю.

Аноним 29/05/15 Птн 11:02:47 #27 №170227 
>>170226
>нет параметра deltaTime
Точно. Не подумал об этом совсем. В общем ты прав, в крайности уходить не стоит.
Аноним 29/05/15 Птн 12:20:08 #28 №170233 
14328912083610.png
Пикрилейтед - мой способ заставить работать Realtime Emissive. На материале - источнике весит эмиссив, который, помимо прочего, меняет свой цвет по таймингу. Чтобы вслед за ним менялось и освещение ближайших предметов я вешаю на предметы этот скрипт. Всё работает, но волнует вопрос оптимизации, ведь не просто же так в эмиссиве по-умолчанию реалтайм отключен.
Alita !!If/2eJUtPU 29/05/15 Птн 16:41:06 #29 №170274 
>>170210
>т.е. я могу класть хуй и использовать в шейдерлабе логику? А это сработает, если я буду ей пользоваться прямо в CGPROGRAM?
Вообщем тут такой стул - если у тебя есть статическая булевая переменная, то компилятор достаточно умный чтоб скомпилить две версии шэйдера. Так например сделано в анриле4. Но в юнити ты не можешь сделать булевую пропертю/юниформ, тебе придётся делать в стиле if(op_hui >= 0.5) o.Albedo += mamu_ebal(); это компилятор не заоптимизирует.
По мне так оптимальней всего делать через дефайны и мультикомпиляцию шэйдеров, так весь стандартный шэйдер в пятёрке сделан.
http://docs.unity3d.com/460/Documentation/Manual/SL-CustomMaterialEditors.html
http://docs.unity3d.com/460/Documentation/Manual/SL-MultipleProgramVariants.html

>>170226
>Например ювишки я кручу скриптом. Хття бы потому-что в шейдере нет параметра deltaTime.
Не пизди, есть
[code]
uniform vec4 _Time;
uniform vec4 _SinTime;
uniform vec4 _CosTime;
[/code]
Иногда удобнее скроллить UV в шэйдере т.к. когда ты меняешь Scale/Offset из скрипта то создаётся копия материала, и дровколлы могут улететь в небеса(например когда рисуешь анимированый прибой).
Аноним 30/05/15 Суб 00:26:50 #30 №170320 
>>170274
>Не пизди, есть vec4 _Time
Читать умеешь, быдло?
Я написал нет deltaTime, а не Time.

>когда ты меняешь Scale/Offset из скрипта то создаётся копия материала
Очевидно.
И это не всегда минус.

Нахуй пройди вообщем
Аноним 30/05/15 Суб 09:13:07 #31 №170334 
> И это не всегда минус.

А когда это не минус?
Аноним 30/05/15 Суб 11:40:54 #32 №170349 
>>169767
Раз уж речь зашла о шейдерах, есть ли какое-нибудь бесплатное стэнд-элоун приложение, в котором можно было бы писать шейдеры для обработки изображений?
Аноним 30/05/15 Суб 11:52:18 #33 №170351 
>>170349
Типо модули для фотошопа что-ли?
Аноним 30/05/15 Суб 13:20:49 #34 №170359 
>>170334
>А когда это не минус?
Когда ты делаешь что-то отличное от армии клонов.
Аноним 30/05/15 Суб 18:51:41 #35 №170386 
>>170351
Я фотошопом ни разу не пользовался, так что не ебу. Я знаю, что был раньше pixel bender, в котором можно было в том числе писать шейдеры для флэша, фотошопа и афтер эффектс, но он теперь дохлый, да и изначально был фичами небогат.
Аноним 30/05/15 Суб 19:04:07 #36 №170387 
>>170386
Нахуя ты тогда на изображениях сделал акцент? Сказал бы сразу, что тебе редактор шейдеров нужен. Дохуя их, есть RenderMonkey, есть аналогичное по функционалу и степени тухлости решение от нвидии, которое сто лет не обновляли. Однако они выкатили какую-то йобу в 2013 вроде, название не помню, надо рыскать по закладкам, но штука очень мощная. Настолько, что для полнофункциональной работы требует, мать его, вторую видеокарту под вывод окна рендеринга. Там же и встроенный мощный профайлер и куча всякой другой годноты.
Аноним 31/05/15 Вск 04:21:16 #37 №170419 
>>170387
>вторую видеокарту
Привет, 99й год.
Аноним 05/06/15 Птн 18:18:05 #38 №171049 
Поясните по хардкору за такой эффект, как аутлайн.
Я знаю пока что один метод:
Сделать два прохода в шейдоре, в одном шейдоре малевать обычный объект, а во втором увеличенный, при этом нужно еще как-то сделать, чтобы обычный объект малевался над увеличенным. Как сделать очередность малевания - я не знаю, но предпологаю, что очень просто, лол.
Как еще можно заебенить аутлайн?
Аноним 05/06/15 Птн 19:59:26 #39 №171055 
>Сильно ли больно фреймрейту от if\else и прочей логики?
Да. Гугли branch misprediction.
Аноним 05/07/15 Вск 17:00:59 #40 №175340 
14361048590770.jpg
Охуеть, вот это мы утонули. Бамп сука, бамп!
Аноним 05/07/15 Вск 17:02:12 #41 №175341 
14361049325420.png
>>175340
Яростно поддерживаю, совершенно другой анон-не-семен, мы выплывем, это точно!
Аноним 05/07/15 Вск 17:03:46 #42 №175343 
14361050261510.jpg
>>175341
>>175340
Ой, как у вас тут интересно! Можно я присоединюсь?
Бамп!
Аноним 09/07/15 Чтв 10:37:10 #43 №175805 
Хуле мои шейдеры никто не покупает в ассет-сторе?
Пидорасы блять, вот и делай им хорошо.
comments powered by Disqus

Отзывы и предложения