Обводка контура объекта

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

Обводка контура объекта

Сообщение DarkNet 31 май 2016, 17:23

Добрый вечер. Надо сделать наподобие ВХ в Unity 3d. У некоторых объектов обводить контур определенным цветом. Я полазал в гугле но ничего не нашел, хотя смотря по играм это используется очень часто (CS GO, Warface и тд). Скажите пожалуйста, как это сделать. Просто щас делаю игру в которой эта вещь очень нужна. Заранее спасибо за ответы. Если не трудно, то скиньте код.
DarkNet
UNец
 
Сообщения: 7
Зарегистрирован: 02 фев 2016, 16:26

Re: Обводка контура объекта

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

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

Re: Обводка контура объекта

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

Спасибо за ссылки которые я смотрел. Я просил чуть другое
DarkNet
UNец
 
Сообщения: 7
Зарегистрирован: 02 фев 2016, 16:26

Re: Обводка контура объекта

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

DarkNet писал(а):Я просил чуть другое

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

Re: Обводка контура объекта

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

Так как никто не нашел, то, облазив 100500 страниц, я нашел нормальный шейдер
Синтаксис:
Используется c
Shader "Outlined" {
        Properties{
                _Color("Main Color", Color) = (.5,.5,.5,1)
                _OutlineColor("Outline Color", Color) = (0,0,0,1)
                _Outline("Outline width", Range(0.0, 0.03)) = .005
                _MainTex("Base (RGB)", 2D) = "white" { }
        }

                CGINCLUDE
#include "UnityCG.cginc"

                struct appdata {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
        };

        struct v2f {
                float4 pos : POSITION;
                float4 color : COLOR;
        };

        uniform float _Outline;
        uniform float4 _OutlineColor;

        v2f vert(appdata v) {
                // just make a copy of incoming vertex data but scaled according to normal direction
                v2f o;
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex);

                float3 norm = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);
                float2 offset = TransformViewToProjection(norm.xy);

                o.pos.xy += offset * o.pos.z * _Outline;
                o.color = _OutlineColor;
                return o;
        }
        ENDCG

                SubShader{
                Tags{ "Queue" = "Transparent" }

                // note that a vertex shader is specified here but its using the one above
                Pass{
                Name "OUTLINE"
                Tags{ "LightMode" = "Always" }
                Cull Off
                ZWrite Off
                ZTest Always
                ColorMask RGB // alpha not used

                                          // you can choose what kind of blending mode you want for the outline
                Blend SrcAlpha OneMinusSrcAlpha // Normal
                                                                                //Blend One One // Additive
                                                                                //Blend One OneMinusDstColor // Soft Additive
                                                                                //Blend DstColor Zero // Multiplicative
                                                                                //Blend DstColor SrcColor // 2x Multiplicative

                CGPROGRAM
#pragma vertex vert
#pragma fragment frag

                half4 frag(v2f i) :COLOR{
                return i.color;
        }
                ENDCG
        }

                Pass{
                Name "BASE"
                ZWrite On
                ZTest LEqual
                Blend SrcAlpha OneMinusSrcAlpha
                Material{
                Diffuse[_Color]
                Ambient[_Color]
        }
                Lighting On
                SetTexture[_MainTex]{
                ConstantColor[_Color]
                Combine texture * constant
        }
                SetTexture[_MainTex]{
                Combine previous * primary DOUBLE
        }
        }
        }

                SubShader{
                Tags{ "Queue" = "Transparent" }

                Pass{
                Name "OUTLINE"
                Tags{ "LightMode" = "Always" }
                Cull Front
                ZWrite Off
                ZTest Always
                ColorMask RGB

                // you can choose what kind of blending mode you want for the outline
                Blend SrcAlpha OneMinusSrcAlpha // Normal
                                                                                //Blend One One // Additive
                                                                                //Blend One OneMinusDstColor // Soft Additive
                                                                                //Blend DstColor Zero // Multiplicative
                                                                                //Blend DstColor SrcColor // 2x Multiplicative

                CGPROGRAM
#pragma vertex vert
#pragma exclude_renderers gles xbox360 ps3
                ENDCG
                SetTexture[_MainTex]{ combine primary }
        }

                Pass{
                Name "BASE"
                ZWrite On
                ZTest LEqual
                Blend SrcAlpha OneMinusSrcAlpha
                Material{
                Diffuse[_Color]
                Ambient[_Color]
        }
                Lighting On
                SetTexture[_MainTex]{
                ConstantColor[_Color]
                Combine texture * constant
        }
                SetTexture[_MainTex]{
                Combine previous * primary DOUBLE
        }
        }
        }

                Fallback "Diffuse"
}
 
DarkNet
UNец
 
Сообщения: 7
Зарегистрирован: 02 фев 2016, 16:26

Re: Обводка контура объекта

Сообщение Leopar 07 авг 2016, 09:00

а как сделать чтобы контур обводился, но не просвечивался через другие объекты?
Leopar
UNец
 
Сообщения: 19
Зарегистрирован: 21 июл 2016, 08:01


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

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

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