Как сделать шейдер Unlit

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Как сделать шейдер Unlit

Сообщение ArtUni3d 19 ноя 2011, 03:15

Посмотрел референс встроенного unlit, заприметил там только Lighting Off и Tags { "RenderType"="Opaque" }
Вставил в своей шейдер - не дает требуемого результата.
Мой шейдер на Cg, видимо в этом дело.

p.s. С шейдерами работаю пол дня, а с документацией похоже не густо. 3 странички в мануале у Юнити, и какая-то вода на сайте у Нвидиа, документацию по Cg так и не нашел.
Аватара пользователя
ArtUni3d
UNITрон
 
Сообщения: 249
Зарегистрирован: 27 апр 2011, 22:12

Re: Как сделать шейдер Unlit

Сообщение seaman 19 ноя 2011, 10:30

Вот это вода?
CgTutorial
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Как сделать шейдер Unlit

Сообщение DbIMok 19 ноя 2011, 11:43

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

Re: Как сделать шейдер Unlit

Сообщение ArtUni3d 19 ноя 2011, 12:00

seaman писал(а):Вот это вода?
CgTutorial


Аа, содержание справа не заметил. Спасибо.

DbIMok писал(а):какой результат нужен? все основное по шейдерам в reference manual и там не 3 страницы


Нужен шейдер который всегда будет светлый, вне зависимости от света (для Sky Dome). Сделал редактируемый градиент, осталось вот только свойство Unlit задать.
Я нашел только User Manuals - Shaders, там 3 страницы.

Дополнительный вопрос, я ведь правильно понимаю? Unlit задается одним свойством? Или это надо как-то делать через соответствующую light или self-ilumination map?

upd: Блин, я туплю) Нужно же всего навсего поместить требуемый градиент в Emission канал.
Как всегда, сам спросил, сам ответил)
Аватара пользователя
ArtUni3d
UNITрон
 
Сообщения: 249
Зарегистрирован: 27 апр 2011, 22:12

Re: Как сделать шейдер Unlit

Сообщение Paha 19 ноя 2011, 12:31

Вот самый простой unlit:
Синтаксис:
Используется csharp
Shader "Unlit/Texture" {
Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
}

SubShader {
        Tags { "RenderType"="Opaque" }
        Lighting Off
       
        Pass {
                SetTexture [_MainTex] { combine texture }
        }
}
}
 
Paha
UNец
 
Сообщения: 30
Зарегистрирован: 01 авг 2011, 17:38

Re: Как сделать шейдер Unlit

Сообщение ArtUni3d 19 ноя 2011, 12:34

Я видел этот код, но я не понял что в нем отвечает за unlit. У меня не работает.

И таки нет, нужен не emmision канал, а лайт, а как он пишется, в их справке ничерта не понятно.
Аватара пользователя
ArtUni3d
UNITрон
 
Сообщения: 249
Зарегистрирован: 27 апр 2011, 22:12

Re: Как сделать шейдер Unlit

Сообщение DbIMok 19 ноя 2011, 19:00

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

Re: Как сделать шейдер Unlit

Сообщение ArtUni3d 19 ноя 2011, 20:39

Есть такой вот шейдер собранный из кусков разного кода (в котором я не все понимаю))
Там внизу есть:

o.Albedo = grad.rgb;
o.Alpha = grad.a;

Пока, максимум до чего я додумался, дописать туда-же o.Emission = grad.rgb
Но результат получается засвеченым. Полагаю надо добавить градиент не в Emission, а в Light канал, но как обратиться к Лайту, я в справке не нашел.

Синтаксис:
Используется glsl
Shader "Sky Gradients" {
        Properties {
                _MainTex ("Base (RGB)", 2D) = "white" {}
            _Color1 ("Color1", Color) = (1,1,1,1)
            _Color2 ("Color2", Color) = (1,1,1,1)
            _Color3 ("Color3", Color) = (1,1,1,1)
            _Slider1 ("Slider1", Range(1, 3)) = 2
        }

        SubShader {
                Tags {"Queue"="Overlay"}
                LOD 200
       
        CGPROGRAM
        #pragma surface surf Lambert alpha

        sampler2D _MainTex;
        fixed4 _Color1;
        fixed4 _Color2;
        fixed4 _Color3;
        float _Slider1;

        struct Input {
                float2 uv_MainTex;
        };

        void surf (Input IN, inout SurfaceOutput o) {

                half y = IN.uv_MainTex.y;
                half4 grad1 = lerp(_Color1, _Color2, y);
                half4 grad2 = lerp(_Color2, _Color3, y / _Slider1);
                half4 grad = lerp(grad1, grad2, y);

                o.Albedo = grad.rgb;
                o.Alpha = grad.a;
        }
        ENDCG
        }
}
Аватара пользователя
ArtUni3d
UNITрон
 
Сообщения: 249
Зарегистрирован: 27 апр 2011, 22:12

Re: Как сделать шейдер Unlit

Сообщение DbIMok 20 ноя 2011, 00:02

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

Re: Как сделать шейдер Unlit

Сообщение ArtUni3d 20 ноя 2011, 01:51

Так выглядит стандартный дифуз
Изображение
А надо так
Изображение
Чтобы с любой стороны был цвет максимальной яркости, вне зависимости от освещения.
Аватара пользователя
ArtUni3d
UNITрон
 
Сообщения: 249
Зарегистрирован: 27 апр 2011, 22:12

Re: Как сделать шейдер Unlit

Сообщение gnoblin 20 ноя 2011, 02:38

сорец партиклового шейдера не подходит?)
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Как сделать шейдер Unlit

Сообщение gnoblin 20 ноя 2011, 02:43

Синтаксис:
Используется glsl
Shader "SuperUnlit" {
Properties {
        _TintColor ("Tint Color", Color) = (0.5,0.5,0.5,0.5)
        _MainTex ("Particle Texture", 2D) = "white" {}
}

Category {
        Tags { "RenderType"="Opaque" }
        //Blend SrcAlpha OneMinusSrcAlpha
        //AlphaTest Greater .01
        ColorMask RGB
        Cull Off Lighting Off ZWrite Off Fog { Color (0,0,0,0) }
        BindChannels {
                Bind "Color", color
                Bind "Vertex", vertex
                Bind "TexCoord", texcoord
        }
       
        // ---- Fragment program cards
        SubShader {
                Pass {
               
                        CGPROGRAM
                        #pragma vertex vert
                        #pragma fragment frag
                        #pragma fragmentoption ARB_precision_hint_fastest
                       
                        #include "UnityCG.cginc"

                        sampler2D _MainTex;
                        fixed4 _TintColor;
                       
                        struct appdata_t {
                                float4 vertex : POSITION;
                                fixed4 color : COLOR;
                                float2 texcoord : TEXCOORD0;
                        };

                        struct v2f {
                                float4 vertex : POSITION;
                                fixed4 color : COLOR;
                                float2 texcoord : TEXCOORD0;
                        };
                       
                        float4 _MainTex_ST;

                        v2f vert (appdata_t v)
                        {
                                v2f o;
                                o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                               
                                o.color = v.color;
                                o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
                                return o;
                        }

                        fixed4 frag (v2f i) : COLOR
                        {
                                return 2.0f * i.color * _TintColor * tex2D(_MainTex, i.texcoord);
                        }
                        ENDCG
                }
        }      
       
        // ---- Dual texture cards
        SubShader {
                Pass {
                        SetTexture [_MainTex] {
                                constantColor [_TintColor]
                                combine constant * primary
                        }
                        SetTexture [_MainTex] {
                                combine texture * previous DOUBLE
                        }
                }
        }
       
        // ---- Single texture cards (does not do color tint)
        SubShader {
                Pass {
                        SetTexture [_MainTex] {
                                combine texture * primary
                        }
                }
        }
}
}
 
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Как сделать шейдер Unlit

Сообщение zverrr 20 ноя 2011, 15:57

Присоединюсь к вопросу. Ни у кого случайно нету кода toon shader'a?
Аватара пользователя
zverrr
UNIт
 
Сообщения: 84
Зарегистрирован: 24 сен 2011, 16:06

Re: Как сделать шейдер Unlit

Сообщение gnoblin 20 ноя 2011, 17:40

код туншейдера есть в стандартном тун пакадже
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Как сделать шейдер Unlit

Сообщение ArtUni3d 20 ноя 2011, 22:29

gnoblin писал(а):сорец партиклового шейдера не подходит?)


Ну у меня уже готов шейдер (кстати на основе вашего кода, 2х летней давности, ссылку уже не помню), я только добавил (добавлю) слайдеры для смены положения цветов градиента.
Нужно только самосвечение задать, иначе SkyDome с этим шейдером выглядит темным т.к. не освещается солнцем.
Аватара пользователя
ArtUni3d
UNITрон
 
Сообщения: 249
Зарегистрирован: 27 апр 2011, 22:12


Вернуться в Почемучка

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

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