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