Шейдер программа просто код, используемый для рисования треугольников на экране. Эффекты Bloom - совершенно другой зверь, and are screen-space calculations that are done after the geometry is drawn. Вы не получите эффект цветения, просто изменив шейдер объекта.
Проще говоря, с помощью шейдера вы не можете рисовать «вне линий», и здесь вам нужно изменить пиксели, которые находятся за пределами досягаемости объекта. Извините, но это просто не в возможностях шейдера.
Все еще, вы можете заставить его работать, реализуя сценарии Image Effect, например, единство built-in bloom effect. После добавления сценария в камеру и активации HDR-настройки камеры вы можете использовать специальный шейдер, который приведет к сиянию, но не раньше всего.
Как только вы правильно настроили эффект (и включите опцию HDR на камере), теперь вы можете использовать любой шейдер, который возвращает значения более 1 в пиксельном шейдере, чтобы генерировать эффект свечения вокруг объекта. Шейдер, который вы разместили, является старой программой шейдеров. Вот обновленный код, с мультипликатором Glow включены:
Shader "Glow" {
Properties {
_MainTex ("Texture", 2D) = "white" {}
_Color ("Color", Color) = (1,1,1,1)
_Glow ("Intensity", Range(0, 3)) = 1
}
SubShader {
Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
LOD 100
Cull Off
ZWrite On
Blend SrcAlpha OneMinusSrcAlpha
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
sampler2D _MainTex;
half4 _MainTex_ST;
fixed4 _Color;
half _Glow;
struct vertIn {
float4 pos : POSITION;
half2 tex : TEXCOORD0;
};
struct v2f {
float4 pos : SV_POSITION;
half2 tex : TEXCOORD0;
};
v2f vert (vertIn v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.pos);
o.tex = v.tex * _MainTex_ST.xy + _MainTex_ST.zw;
return o;
}
fixed4 frag (v2f f) : SV_Target {
fixed4 col = tex2D(_MainTex, f.tex);
col *= _Color;
col *= _Glow;
return col;
}
ENDCG
}
}
}
выбросов, и, таким образом, цветение количество приходит FROMTHE значение конечного пикселя значение цвета, которое обычно должно быть в диапазоне HDR. Попробуйте добавить свойство эмиссии, например. _Emission ("Emmisive Strength", Range (0.01,3.0)) = 1.0. Затем умножьте свой вывод на это свойство. – Absinthe
Можете ли вы показать мне, как это должно быть сделано в моей шейдерной ведьме? Я добавляю к вопросу? – ARTAGE
К сожалению, я не думаю, что все так просто. В настоящее время вы используете шейдерные программы. Чтобы управлять эмиссией, вам нужно будет переписать шейдер в качестве поверхностного шейдера вместо использования программ. См. Здесь в руководстве https://docs.unity3d.com/Manual/SL-SurfaceShaderExamples.html и найдите «выброс», есть много примеров. Это говорит, что я довольно новичок в этом и приветствую другие комментарии. – Absinthe