У меня возник вопрос на счет мягких краев, сглаживание по алфа но мягкое,
Линк на Google Drive
Справа: шейдер по принципу http://wiki.unity3d.com/index.php/Trans ... ture_Blend
в два проходи ми получаем мягкие края но так как он Vertex and Fragment Shaders у нас нету света, и не принимает тени.
Слева: у нас есть Surface Shaders но края шерховатие.
Так вот неужели нелзя совместить ети две техники, если есть идеи или решение прошу помоч,
или скажите куда копать.
К сожилению исползовать пост фильтри не подходят так как картинка получается мильной.
(Прошу прощение русский язик не родной по етому с ошибками)
UPD: Огромное Спасибо WhiteDevil помог решить проблему
Решение "LightMode" = "PrepassFinal"
Синтаксис:
Используется javascript
Shader "My Shaders/Surface" {
Properties {
_Color ("Main Color", Color) = (1, 1, 1, 1)
_MainTex ("Texture", 2D) = "white" {}
_Cutoff ("Cutoff", Range(0,1)) = 0.5
}
SubShader {
Tags { "Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout" }
CGPROGRAM
#pragma surface surf Lambert
struct Input {
float2 uv_MainTex;
};
float4 _Color;
sampler2D _MainTex;
fixed _Cutoff;
void surf (Input IN, inout SurfaceOutput o) {
half4 col = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = _Color * col.rgb;
clip(col.a - _Cutoff);
}
ENDCG
Pass {
Tags { "RequireOption" = "SoftVegetation" "LightMode" = "PrepassFinal"}
Blend SrcAlpha OneMinusSrcAlpha
ZWrite off
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata_t {
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
};
struct v2f {
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
};
sampler2D _MainTex;
float4 _MainTex_ST;
fixed _Cutoff;
v2f vert (appdata_t v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
return o;
}
float4 _Color;
half4 frag (v2f i) : COLOR
{
half4 col = _Color * tex2D(_MainTex, i.texcoord);
clip(-(col.a - _Cutoff));
return col;
}
ENDCG
}
}
Fallback "Diffuse"
}
Properties {
_Color ("Main Color", Color) = (1, 1, 1, 1)
_MainTex ("Texture", 2D) = "white" {}
_Cutoff ("Cutoff", Range(0,1)) = 0.5
}
SubShader {
Tags { "Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout" }
CGPROGRAM
#pragma surface surf Lambert
struct Input {
float2 uv_MainTex;
};
float4 _Color;
sampler2D _MainTex;
fixed _Cutoff;
void surf (Input IN, inout SurfaceOutput o) {
half4 col = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = _Color * col.rgb;
clip(col.a - _Cutoff);
}
ENDCG
Pass {
Tags { "RequireOption" = "SoftVegetation" "LightMode" = "PrepassFinal"}
Blend SrcAlpha OneMinusSrcAlpha
ZWrite off
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata_t {
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
};
struct v2f {
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
};
sampler2D _MainTex;
float4 _MainTex_ST;
fixed _Cutoff;
v2f vert (appdata_t v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
return o;
}
float4 _Color;
half4 frag (v2f i) : COLOR
{
half4 col = _Color * tex2D(_MainTex, i.texcoord);
clip(-(col.a - _Cutoff));
return col;
}
ENDCG
}
}
Fallback "Diffuse"
}
UPD2: С етим методом есть неприятная особеность ето то что при пересечение двух одинакових обектов с тем же шейдером у нас не будут мягкие края