teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

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

2020/02/19 21:00

投稿

Bongo
Bongo

スコア10816

answer CHANGED
@@ -7,4 +7,143 @@
7
7
  下図のようにDirectional Lightを回転させてみたり、ライトトグルを切り替えて見ると変化はあるでしょうか?
8
8
  光がどの方向から当たっているかわかりやすいように、隣に球体を置いて撮影してみました。ライトトグルがオフだとシーンビューでは常に正面から光が当たったように描画され、ゲームビューと見え方が食い違う現象が起きています。
9
9
 
10
- ![図](a1f3d42d5501b40ba469f931c9aee8e9.gif)
10
+ ![図1](a1f3d42d5501b40ba469f931c9aee8e9.gif)
11
+
12
+ **Raw Imageでの真っ黒現象について**
13
+ Frame Debugで見てみたところ、下図のように一旦カラフルな紙吹雪が描画されるものの、後続の`ShadowCaster`パスのせいで真っ黒に塗り直されてしまっているようでした。
14
+
15
+ ![図2](9a293e58e35ebc72fba48caabdbdfce1.gif)
16
+
17
+ UI用マテリアルに`ShadowCaster`パスは不要でしょうから、`ChromaKey_Unlit_Transparent.shader`を複製して`ChromaKey_UI_Transparent.shader`と名前を変え、下記のように`UI/Default`シェーダーをベースにUI向けの変更を加え...
18
+
19
+ ```ShaderLab
20
+ // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
21
+
22
+ Shader "ChromaKey/UI/Transparent"
23
+ {
24
+ Properties
25
+ {
26
+ [Header(Material)]
27
+ _Color ("Color", Color) = (1, 1, 1, 1)
28
+ _MainTex("Texture", 2D) = "white" {}
29
+ [Enum(UnityEngine.Rendering.BlendMode)] _BlendSrc("Blend Src", Float) = 5
30
+ [Enum(UnityEngine.Rendering.BlendMode)] _BlendDst("Blend Dst", Float) = 10
31
+
32
+ [Header(Chroma Key)]
33
+ _ChromaKeyColor("Color", Color) = (0.0, 0.0, 1.0, 0.0)
34
+ _ChromaKeyHueRange("Hue Range", Range(0, 1)) = 0.1
35
+ _ChromaKeySaturationRange("Saturation Range", Range(0, 1)) = 0.5
36
+ _ChromaKeyBrightnessRange("Brightness Range", Range(0, 1)) = 0.5
37
+
38
+ [Header(UI)]
39
+ _StencilComp ("Stencil Comparison", Float) = 8
40
+ _Stencil ("Stencil ID", Float) = 0
41
+ _StencilOp ("Stencil Operation", Float) = 0
42
+ _StencilWriteMask ("Stencil Write Mask", Float) = 255
43
+ _StencilReadMask ("Stencil Read Mask", Float) = 255
44
+ _ColorMask ("Color Mask", Float) = 15
45
+ [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0
46
+ }
47
+
48
+ SubShader
49
+ {
50
+ Tags
51
+ {
52
+ "Queue"="Transparent"
53
+ "IgnoreProjector"="True"
54
+ "RenderType"="Transparent"
55
+ "PreviewType"="Plane"
56
+ "CanUseSpriteAtlas"="True"
57
+ }
58
+
59
+ Stencil
60
+ {
61
+ Ref [_Stencil]
62
+ Comp [_StencilComp]
63
+ Pass [_StencilOp]
64
+ ReadMask [_StencilReadMask]
65
+ WriteMask [_StencilWriteMask]
66
+ }
67
+
68
+ Cull Off
69
+ Lighting Off
70
+ ZWrite Off
71
+ ZTest [unity_GUIZTestMode]
72
+ Blend [_BlendSrc] [_BlendDst]
73
+ ColorMask [_ColorMask]
74
+
75
+ Pass
76
+ {
77
+ CGPROGRAM
78
+
79
+ #pragma vertex vert
80
+ #pragma fragment frag
81
+ #pragma target 2.0
82
+
83
+ #include "UnityCG.cginc"
84
+ #include "UnityUI.cginc"
85
+ #include "./ChromaKey.cginc"
86
+
87
+ #pragma multi_compile_local _ UNITY_UI_CLIP_RECT
88
+ #pragma multi_compile_local _ UNITY_UI_ALPHACLIP
89
+
90
+ struct appdata_t
91
+ {
92
+ float4 vertex : POSITION;
93
+ float4 color : COLOR;
94
+ float2 texcoord : TEXCOORD0;
95
+ UNITY_VERTEX_INPUT_INSTANCE_ID
96
+ };
97
+
98
+ struct v2f
99
+ {
100
+ float4 vertex : SV_POSITION;
101
+ fixed4 color : COLOR;
102
+ float2 texcoord : TEXCOORD0;
103
+ float4 worldPosition : TEXCOORD1;
104
+ UNITY_VERTEX_OUTPUT_STEREO
105
+ };
106
+
107
+ sampler2D _MainTex;
108
+ fixed4 _Color;
109
+ fixed4 _TextureSampleAdd;
110
+ float4 _ClipRect;
111
+ float4 _MainTex_ST;
112
+
113
+ v2f vert(appdata_t v)
114
+ {
115
+ v2f OUT;
116
+ UNITY_SETUP_INSTANCE_ID(v);
117
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
118
+ OUT.worldPosition = v.vertex;
119
+ OUT.vertex = UnityObjectToClipPos(OUT.worldPosition);
120
+ OUT.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
121
+ OUT.color = v.color * _Color;
122
+ return OUT;
123
+ }
124
+
125
+ fixed4 frag(v2f IN) : SV_Target
126
+ {
127
+ half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;
128
+ ChromaKeyApplyAlpha(color);
129
+
130
+ #ifdef UNITY_UI_CLIP_RECT
131
+ color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);
132
+ #endif
133
+
134
+ #ifdef UNITY_UI_ALPHACLIP
135
+ clip (color.a - 0.001);
136
+ #endif
137
+
138
+ return color;
139
+ }
140
+
141
+ ENDCG
142
+ }
143
+ }
144
+ }
145
+ ```
146
+
147
+ VideoChromaKeyマテリアルのシェーダーをそれに変更すると、下図のようにカラフルな紙吹雪になりました。
148
+
149
+ ![図3](b85e5c3d8de52e2f5ed0304d2a2557f6.gif)