Отрисовать один из объектов другим цветом

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

Отрисовать один из объектов другим цветом

Сообщение Shock 28 мар 2018, 23:03

У меня на сцене есть множество объектов. В определенный момент мне необходимо сделать два скриншота сцены - один нормальный скриншот, а второй - на котором все объекты отрисованы цветом А, а только один из них цветом Б.
Я пока пришел к такому решению - вторая камера, на нее накладываю ReplacementShader, похожий на дефолтный Unlit shader:

Синтаксис:
Используется csharp
Shader "Replacement_Example" {
        Properties
        {
                _Color ("Color", Color) = (1,1,1,1)
        }
        SubShader
        {
                Tags { "RenderType"="Opaque" }
                LOD 100

                Pass
                {
                        CGPROGRAM
                        #pragma vertex vert
                        #pragma fragment frag

                        struct appdata
                        {
                                float4 vertex : POSITION;
                        };

                        struct v2f
                        {
                                float4 vertex : SV_POSITION;
                        };
                       
                        float4 _Color;
                       
                        v2f vert (appdata v)
                        {
                                v2f o;
                                o.vertex = UnityObjectToClipPos(v.vertex);
                                return o;
                        }
                       
                        fixed4 frag (v2f i) : SV_Target
                        {
                                return _Color;
                        }
                        ENDCG
                }
        }
}


Теперь у меня есть способ быстро отрисовать все объекты одним цветом. Но как один из объектов выделить другим цветом? Как сообщить Replacement шейдеру, что именно этот конкретный объект должен быть зеленого цвета, а не белого? Вот пример на скриншотах. Сцена:
Изображение
Результат с реплейсмент шейдером:
Изображение
Желаемый результат:
Изображение
Аватара пользователя
Shock
UNIт
 
Сообщения: 70
Зарегистрирован: 10 окт 2016, 18:22

Re: Отрисовать один из объектов другим цветом

Сообщение waruiyume 29 мар 2018, 00:54

Material.SetOverrideTag
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 4960
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Отрисовать один из объектов другим цветом

Сообщение Shock 29 мар 2018, 02:13

Просто волшебно, это именно то, что мне необходимо. Спасибо!
Аватара пользователя
Shock
UNIт
 
Сообщения: 70
Зарегистрирован: 10 окт 2016, 18:22


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

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

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