回答編集履歴
1
つなぎ目ブレンドに特化したバージョンを検討
answer
CHANGED
@@ -118,4 +118,122 @@
|
|
118
118
|
|
119
119
|
黄緑芝生の手前に緑芝生を配置し、緑芝生のマテリアルをその「Sprites/Gradient Alpha」を使ったものに差し替えたところ、下図のようになりました。
|
120
120
|
|
121
|
-

|
121
|
+

|
122
|
+
|
123
|
+
#追記
|
124
|
+
不透明にしたいエッジを選択する方式を検討してみました。同じくSprites-Default.shaderをベースに下記のように改造し...
|
125
|
+
|
126
|
+
```ShaderLab
|
127
|
+
// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
|
128
|
+
|
129
|
+
Shader "Sprites/Edge Gradient Alpha"
|
130
|
+
{
|
131
|
+
Properties
|
132
|
+
{
|
133
|
+
[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
|
134
|
+
_Color ("Tint", Color) = (1,1,1,1)
|
135
|
+
[MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
|
136
|
+
[HideInInspector] _RendererColor ("RendererColor", Color) = (1,1,1,1)
|
137
|
+
[HideInInspector] _Flip ("Flip", Vector) = (1,1,1,1)
|
138
|
+
[PerRendererData] _AlphaTex ("External Alpha", 2D) = "white" {}
|
139
|
+
[PerRendererData] _EnableExternalAlpha ("Enable External Alpha", Float) = 0
|
140
|
+
|
141
|
+
[Space]
|
142
|
+
[Header(Gradient)]
|
143
|
+
_GradientAlpha1 ("Alpha 1", Range(0, 1)) = 0
|
144
|
+
_GradientAlpha2 ("Alpha 2", Range(0, 1)) = 1
|
145
|
+
[PowerSlider(2.0)] _GradientExponent ("Exponent", Range(0.125, 8)) = 2
|
146
|
+
[Toggle] _GradientEdgeTop ("Top", Float) = 0
|
147
|
+
[Toggle] _GradientEdgeBottom ("Bottom", Float) = 0
|
148
|
+
[Toggle] _GradientEdgeLeft ("Left", Float) = 0
|
149
|
+
[Toggle] _GradientEdgeRight ("Right", Float) = 0
|
150
|
+
}
|
151
|
+
|
152
|
+
SubShader
|
153
|
+
{
|
154
|
+
Tags
|
155
|
+
{
|
156
|
+
"Queue"="Transparent"
|
157
|
+
"IgnoreProjector"="True"
|
158
|
+
"RenderType"="Transparent"
|
159
|
+
"PreviewType"="Plane"
|
160
|
+
"CanUseSpriteAtlas"="True"
|
161
|
+
}
|
162
|
+
|
163
|
+
Cull Off
|
164
|
+
Lighting Off
|
165
|
+
ZWrite Off
|
166
|
+
Blend One OneMinusSrcAlpha
|
167
|
+
|
168
|
+
Pass
|
169
|
+
{
|
170
|
+
CGPROGRAM
|
171
|
+
#pragma vertex vert
|
172
|
+
#pragma fragment frag
|
173
|
+
#pragma target 2.0
|
174
|
+
#pragma multi_compile_instancing
|
175
|
+
#pragma multi_compile _ PIXELSNAP_ON
|
176
|
+
#pragma multi_compile _ ETC1_EXTERNAL_ALPHA
|
177
|
+
#include "UnitySprites.cginc"
|
178
|
+
|
179
|
+
float _GradientAlpha1;
|
180
|
+
float _GradientAlpha2;
|
181
|
+
float _GradientExponent;
|
182
|
+
float _GradientEdgeTop;
|
183
|
+
float _GradientEdgeBottom;
|
184
|
+
float _GradientEdgeLeft;
|
185
|
+
float _GradientEdgeRight;
|
186
|
+
|
187
|
+
struct v2fCustom
|
188
|
+
{
|
189
|
+
float4 vertex : SV_POSITION;
|
190
|
+
fixed4 color : COLOR;
|
191
|
+
float2 texcoord : TEXCOORD0;
|
192
|
+
float2 position : TEXCOORD1; // グラデーション用の位置
|
193
|
+
UNITY_VERTEX_OUTPUT_STEREO
|
194
|
+
};
|
195
|
+
|
196
|
+
v2fCustom vert(appdata_t IN)
|
197
|
+
{
|
198
|
+
v2fCustom OUT;
|
199
|
+
|
200
|
+
UNITY_SETUP_INSTANCE_ID (IN);
|
201
|
+
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
|
202
|
+
|
203
|
+
OUT.vertex = UnityFlipSprite(IN.vertex, _Flip);
|
204
|
+
OUT.vertex = UnityObjectToClipPos(OUT.vertex);
|
205
|
+
OUT.texcoord = IN.texcoord;
|
206
|
+
OUT.color = IN.color * _Color * _RendererColor;
|
207
|
+
OUT.position = IN.vertex.xy * 2;
|
208
|
+
|
209
|
+
#ifdef PIXELSNAP_ON
|
210
|
+
OUT.vertex = UnityPixelSnap (OUT.vertex);
|
211
|
+
#endif
|
212
|
+
|
213
|
+
return OUT;
|
214
|
+
}
|
215
|
+
|
216
|
+
fixed4 frag(v2fCustom IN) : SV_Target
|
217
|
+
{
|
218
|
+
fixed4 c = SampleSpriteTexture (IN.texcoord) * IN.color;
|
219
|
+
|
220
|
+
float alpha = saturate(dot(float4(
|
221
|
+
pow(saturate(_GradientEdgeTop * IN.position.y), _GradientExponent),
|
222
|
+
pow(saturate(_GradientEdgeBottom * -IN.position.y), _GradientExponent),
|
223
|
+
pow(saturate(_GradientEdgeLeft * -IN.position.x), _GradientExponent),
|
224
|
+
pow(saturate(_GradientEdgeRight * IN.position.x), _GradientExponent)), 1));
|
225
|
+
c.a *= saturate(lerp(_GradientAlpha1, _GradientAlpha2, alpha));
|
226
|
+
|
227
|
+
c.rgb *= c.a;
|
228
|
+
|
229
|
+
return c;
|
230
|
+
}
|
231
|
+
ENDCG
|
232
|
+
}
|
233
|
+
}
|
234
|
+
}
|
235
|
+
```
|
236
|
+
|
237
|
+
インスペクタ上で各チェックボックスを切り替えると、その方向のエッジ表示が切り替わります。
|
238
|
+
|
239
|
+

|