Изменить стандартный шейдер через скрипт

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

Изменить стандартный шейдер через скрипт

Сообщение AABB 28 май 2016, 01:19

Вот у меня есть скрипт EditorWindow. В окне должны быть 2 текстуры - одна поверх другой. И они конечно же должны быть с прозрачностью, чтобы одну под другой было видно. Как-то так:

Синтаксис:
Используется csharp
        EditorGUI.DrawPreviewTexture(Rect, tex1, transparentMaterial);
        EditorGUI.DrawPreviewTexture(Rect, tex2, transparentMaterial);


По идее, должен подойти стандартный шейдер с настройками Rendering Mode: Cutout, AlphaCutoff = 1.
Сначала я сделал transparentMaterial публичным, создал соответствующий материал в ассетах, и присваивал вручную. Прозрачность была.
Но хочется чтобы материал создавался сам при открытии окна. И ничего не получается. Делаю так:

Синтаксис:
Используется csharp
        Material mat = new Material(Shader.Find("Standard"));
        mat.SetFloat("_Mode", 1);     // пробовал и другие цифры, без толку
        mat.SetFloat("_Cutoff", 1);
        transparentMat = mat;

Почему нет прозрачности?
AABB
UNIт
 
Сообщения: 134
Зарегистрирован: 05 фев 2014, 15:52

Re: Изменить стандартный шейдер через скрипт

Сообщение DbIMok 28 май 2016, 03:14

AABB писал(а):создал соответствующий материал в ассетах, и присваивал вручную. Прозрачность была.

скачайте builtin_shaders и посмотрите Editor\StandardShaderGUI.cs. там все несколько сложнее
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Изменить стандартный шейдер через скрипт

Сообщение AABB 30 май 2016, 17:47

А... то есть надо скопировать из того файла то, что внутри метки Cutout
Синтаксис:
Используется csharp
                        case BlendMode.Cutout:
                                material.SetOverrideTag("RenderType", "TransparentCutout");
                                material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
                                material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
                                material.SetInt("_ZWrite", 1);
                                material.EnableKeyword("_ALPHATEST_ON");
                                material.DisableKeyword("_ALPHABLEND_ON");
                                material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
                                material.renderQueue = 2450;
                                break;
AABB
UNIт
 
Сообщения: 134
Зарегистрирован: 05 фев 2014, 15:52

Re: Изменить стандартный шейдер через скрипт

Сообщение AABB 01 июн 2016, 00:30

Эх, оказалось не всё так просто. Оказывается стандартный материал делает все цвета текстуры черными. А мне теперь нужно чтобы они были разноцветные. Что делать?
AABB
UNIт
 
Сообщения: 134
Зарегистрирован: 05 фев 2014, 15:52

Re: Изменить стандартный шейдер через скрипт

Сообщение DbIMok 01 июн 2016, 01:20

стандартный слишком навороченный для того, чтобы просто вывести в гуй пару текстур. можно использовать для каждой шейдер попроще, или выводить обе одним, в зависимости от того, какова задача
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Изменить стандартный шейдер через скрипт

Сообщение AABB 03 июн 2016, 23:26

Смысл был в том, чтобы скрипт можно было перекинуть в другой проект без каких-то доп. материалов, то есть использовать то, что 100% есть в любом проекте. Насколько я понял "Sprites/Default" подойдёт. У меня в окне должна быть текстура плана лабиринта, а над ней масштабная сетка и "лекало" по которому можно рисовать план.
AABB
UNIт
 
Сообщения: 134
Зарегистрирован: 05 фев 2014, 15:52


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

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

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


cron