回答編集履歴

1

Raw Imageでの真っ黒現象について追記

2020/02/19 21:00

投稿

Bongo
Bongo

スコア10807

test CHANGED
@@ -16,4 +16,282 @@
16
16
 
17
17
 
18
18
 
19
- ![図](a1f3d42d5501b40ba469f931c9aee8e9.gif)
19
+ ![図1](a1f3d42d5501b40ba469f931c9aee8e9.gif)
20
+
21
+
22
+
23
+ **Raw Imageでの真っ黒現象について**
24
+
25
+ Frame Debugで見てみたところ、下図のように一旦カラフルな紙吹雪が描画されるものの、後続の`ShadowCaster`パスのせいで真っ黒に塗り直されてしまっているようでした。
26
+
27
+
28
+
29
+ ![図2](9a293e58e35ebc72fba48caabdbdfce1.gif)
30
+
31
+
32
+
33
+ UI用マテリアルに`ShadowCaster`パスは不要でしょうから、`ChromaKey_Unlit_Transparent.shader`を複製して`ChromaKey_UI_Transparent.shader`と名前を変え、下記のように`UI/Default`シェーダーをベースにUI向けの変更を加え...
34
+
35
+
36
+
37
+ ```ShaderLab
38
+
39
+ // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
40
+
41
+
42
+
43
+ Shader "ChromaKey/UI/Transparent"
44
+
45
+ {
46
+
47
+ Properties
48
+
49
+ {
50
+
51
+ [Header(Material)]
52
+
53
+ _Color ("Color", Color) = (1, 1, 1, 1)
54
+
55
+ _MainTex("Texture", 2D) = "white" {}
56
+
57
+ [Enum(UnityEngine.Rendering.BlendMode)] _BlendSrc("Blend Src", Float) = 5
58
+
59
+ [Enum(UnityEngine.Rendering.BlendMode)] _BlendDst("Blend Dst", Float) = 10
60
+
61
+
62
+
63
+ [Header(Chroma Key)]
64
+
65
+ _ChromaKeyColor("Color", Color) = (0.0, 0.0, 1.0, 0.0)
66
+
67
+ _ChromaKeyHueRange("Hue Range", Range(0, 1)) = 0.1
68
+
69
+ _ChromaKeySaturationRange("Saturation Range", Range(0, 1)) = 0.5
70
+
71
+ _ChromaKeyBrightnessRange("Brightness Range", Range(0, 1)) = 0.5
72
+
73
+
74
+
75
+ [Header(UI)]
76
+
77
+ _StencilComp ("Stencil Comparison", Float) = 8
78
+
79
+ _Stencil ("Stencil ID", Float) = 0
80
+
81
+ _StencilOp ("Stencil Operation", Float) = 0
82
+
83
+ _StencilWriteMask ("Stencil Write Mask", Float) = 255
84
+
85
+ _StencilReadMask ("Stencil Read Mask", Float) = 255
86
+
87
+ _ColorMask ("Color Mask", Float) = 15
88
+
89
+ [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0
90
+
91
+ }
92
+
93
+
94
+
95
+ SubShader
96
+
97
+ {
98
+
99
+ Tags
100
+
101
+ {
102
+
103
+ "Queue"="Transparent"
104
+
105
+ "IgnoreProjector"="True"
106
+
107
+ "RenderType"="Transparent"
108
+
109
+ "PreviewType"="Plane"
110
+
111
+ "CanUseSpriteAtlas"="True"
112
+
113
+ }
114
+
115
+
116
+
117
+ Stencil
118
+
119
+ {
120
+
121
+ Ref [_Stencil]
122
+
123
+ Comp [_StencilComp]
124
+
125
+ Pass [_StencilOp]
126
+
127
+ ReadMask [_StencilReadMask]
128
+
129
+ WriteMask [_StencilWriteMask]
130
+
131
+ }
132
+
133
+
134
+
135
+ Cull Off
136
+
137
+ Lighting Off
138
+
139
+ ZWrite Off
140
+
141
+ ZTest [unity_GUIZTestMode]
142
+
143
+ Blend [_BlendSrc] [_BlendDst]
144
+
145
+ ColorMask [_ColorMask]
146
+
147
+
148
+
149
+ Pass
150
+
151
+ {
152
+
153
+ CGPROGRAM
154
+
155
+
156
+
157
+ #pragma vertex vert
158
+
159
+ #pragma fragment frag
160
+
161
+ #pragma target 2.0
162
+
163
+
164
+
165
+ #include "UnityCG.cginc"
166
+
167
+ #include "UnityUI.cginc"
168
+
169
+ #include "./ChromaKey.cginc"
170
+
171
+
172
+
173
+ #pragma multi_compile_local _ UNITY_UI_CLIP_RECT
174
+
175
+ #pragma multi_compile_local _ UNITY_UI_ALPHACLIP
176
+
177
+
178
+
179
+ struct appdata_t
180
+
181
+ {
182
+
183
+ float4 vertex : POSITION;
184
+
185
+ float4 color : COLOR;
186
+
187
+ float2 texcoord : TEXCOORD0;
188
+
189
+ UNITY_VERTEX_INPUT_INSTANCE_ID
190
+
191
+ };
192
+
193
+
194
+
195
+ struct v2f
196
+
197
+ {
198
+
199
+ float4 vertex : SV_POSITION;
200
+
201
+ fixed4 color : COLOR;
202
+
203
+ float2 texcoord : TEXCOORD0;
204
+
205
+ float4 worldPosition : TEXCOORD1;
206
+
207
+ UNITY_VERTEX_OUTPUT_STEREO
208
+
209
+ };
210
+
211
+
212
+
213
+ sampler2D _MainTex;
214
+
215
+ fixed4 _Color;
216
+
217
+ fixed4 _TextureSampleAdd;
218
+
219
+ float4 _ClipRect;
220
+
221
+ float4 _MainTex_ST;
222
+
223
+
224
+
225
+ v2f vert(appdata_t v)
226
+
227
+ {
228
+
229
+ v2f OUT;
230
+
231
+ UNITY_SETUP_INSTANCE_ID(v);
232
+
233
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
234
+
235
+ OUT.worldPosition = v.vertex;
236
+
237
+ OUT.vertex = UnityObjectToClipPos(OUT.worldPosition);
238
+
239
+ OUT.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
240
+
241
+ OUT.color = v.color * _Color;
242
+
243
+ return OUT;
244
+
245
+ }
246
+
247
+
248
+
249
+ fixed4 frag(v2f IN) : SV_Target
250
+
251
+ {
252
+
253
+ half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;
254
+
255
+ ChromaKeyApplyAlpha(color);
256
+
257
+
258
+
259
+ #ifdef UNITY_UI_CLIP_RECT
260
+
261
+ color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);
262
+
263
+ #endif
264
+
265
+
266
+
267
+ #ifdef UNITY_UI_ALPHACLIP
268
+
269
+ clip (color.a - 0.001);
270
+
271
+ #endif
272
+
273
+
274
+
275
+ return color;
276
+
277
+ }
278
+
279
+
280
+
281
+ ENDCG
282
+
283
+ }
284
+
285
+ }
286
+
287
+ }
288
+
289
+ ```
290
+
291
+
292
+
293
+ VideoChromaKeyマテリアルのシェーダーをそれに変更すると、下図のようにカラフルな紙吹雪になりました。
294
+
295
+
296
+
297
+ ![図3](b85e5c3d8de52e2f5ed0304d2a2557f6.gif)