Кодирование единичных шейдеров с единственной визуальной студией

Недавно я был кодирующим шейдером для единства в визуальной студии, и я заметил, что, поскольку единичные шейдеры написаны в сочетании единственного шейдерного лабораторного языка и CG, визуальная студия 2015, похоже, не распознает языки. Из-за этого визуальная студия не переделывает ключевые слова, не имеет интеллигентности и хуже всех табуляции неправильно, когда я нажимаю клавишу ввода, чтобы перейти к новой строке. Я пробовал это расширение Visual Studio https://visualstudiogallery.msdn.microsoft.com/ed812631-a7d3-4ca3-9f84-7efb240c7bb5, и он, похоже, не работает полностью. Мне было интересно, есть ли у кого-нибудь здесь опыт работы с шейдерами и имеет расширение, которое они знают, чтобы исправить эту проблему.

Ответ 1

Этот плагин должен решить вашу проблему:

ShaderlabVS

Он поддерживает Visual Studio 2013 и 2015. 2017 находится на стадии тестирования.

Ответ 2

i bassicly использовал это для шейдеров:

http://wiki.unity3d.com/index.php/Silhouette-Outlined_Diffuse

часть, которая гласит "Только контур"

с описанием: "То, что делает трюк, это" Blend Zero One ", который должен полностью отказаться от рендеринга нашего объекта и использовать только цвет назначения (то есть все, что находится за объектом). Фактически сам объект является невидимым, но мы все же даем очертаниям рендеринга. Так что мы остаемся с только контуром".

Сначала вам нужно сделать шейдер script и поместить его где-то, когда он вам подходит, я всегда помещаю его в шейдеры папки.

код басико на сайте, но для облегчения для вас я вставляю его здесь. не забудьте прочитать код, потому что вы можете легко отредактировать его с помощью кода или инспектора Unity. настоящим код для созданного шейдера:

Shader "Outlined/Silhouette Only" {
    Properties {
        _OutlineColor ("Outline Color", Color) = (0,0,0,1)
        _Outline ("Outline width", Range (0.0, 0.03)) = .005
    }

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" }

        Pass {
            Name "BASE"
            Cull Back
            Blend Zero One

            // uncomment this to hide inner details:
            //Offset -8, -8

            SetTexture [_OutlineColor] {
                ConstantColor (0,0,0,0)
                Combine constant
            }
        }

        // note that a vertex shader is specified here but its using the one above
        Pass {
            Name "OUTLINE"
            Tags { "LightMode" = "Always" }
            Cull Front

            // 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
        }


    }

    Fallback "Diffuse"
}

P.S. можете ли вы сказать мне, какие шейдеры вы хотите сделать?