回答編集履歴
1
陰影付きのひびについて追記
test
CHANGED
@@ -9,3 +9,177 @@
|
|
9
9
|
|
10
10
|
|
11
11
|
![スプライトマスク](1daa2bb753618d473b6675bba8b4c998.gif)
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
### 追記
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
上記のやり方ですと、ひびが平坦で、キューブの上にひびの絵が描かれただけのように見えてしまってご不満かもしれません。
|
20
|
+
|
21
|
+
下図のような濃淡のあるひび画像を作っておいて...
|
22
|
+
|
23
|
+
![ひび](98c5199d3aa573a71ebcdbe3e1530b5c.png)
|
24
|
+
|
25
|
+
キューブの前面にQuadを配置し、そのマテリアルを下記のような濃淡をもとに面の向きを決定するような形にすると...
|
26
|
+
|
27
|
+
```ShaderLab
|
28
|
+
|
29
|
+
Shader "Custom/Crack"
|
30
|
+
|
31
|
+
{
|
32
|
+
|
33
|
+
Properties
|
34
|
+
|
35
|
+
{
|
36
|
+
|
37
|
+
_Color ("Color", Color) = (1, 1, 1, 1)
|
38
|
+
|
39
|
+
_MainTex ("Albedo (RGB)", 2D) = "white" {}
|
40
|
+
|
41
|
+
_BumpMap ("Normal", 2D) = "bump" {}
|
42
|
+
|
43
|
+
_Glossiness ("Smoothness", Range(0, 1)) = 0.5
|
44
|
+
|
45
|
+
_Metallic ("Metallic", Range(0, 1)) = 0.0
|
46
|
+
|
47
|
+
_CrackTex ("Crack (Grayscale)", 2D) = "white" { }
|
48
|
+
|
49
|
+
_Progress ("Crack Progress", Range(0, 1)) = 1.0
|
50
|
+
|
51
|
+
_CrackHeight ("Crack Height", Range(0, 0.1)) = 0.05
|
52
|
+
|
53
|
+
}
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
SubShader
|
58
|
+
|
59
|
+
{
|
60
|
+
|
61
|
+
Tags { "Queue" = "AlphaTest" "RenderType" = "Opaque" }
|
62
|
+
|
63
|
+
LOD 200
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
CGPROGRAM
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
#pragma surface surf Standard fullforwardshadows
|
72
|
+
|
73
|
+
#pragma target 3.0
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
sampler2D _MainTex;
|
78
|
+
|
79
|
+
sampler2D _BumpMap;
|
80
|
+
|
81
|
+
sampler2D _CrackTex;
|
82
|
+
|
83
|
+
float4 _CrackTex_TexelSize;
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
struct Input
|
88
|
+
|
89
|
+
{
|
90
|
+
|
91
|
+
float2 uv_MainTex;
|
92
|
+
|
93
|
+
float2 uv_BumpMap;
|
94
|
+
|
95
|
+
float2 uv_CrackTex;
|
96
|
+
|
97
|
+
};
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
half _Glossiness;
|
102
|
+
|
103
|
+
half _Metallic;
|
104
|
+
|
105
|
+
fixed4 _Color;
|
106
|
+
|
107
|
+
float _Progress;
|
108
|
+
|
109
|
+
float _CrackHeight;
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
#define PROGRESS_EXPONENT 2.0
|
114
|
+
|
115
|
+
#define CAVITY_EXPONENT 2.0
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
inline float getAlpha(float2 uv, float2 edge)
|
120
|
+
|
121
|
+
{
|
122
|
+
|
123
|
+
return 1.0 - saturate(tex2D(_CrackTex, uv).r + smoothstep(edge.x, edge.y, uv.x));
|
124
|
+
|
125
|
+
}
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
void surf(Input IN, inout SurfaceOutputStandard o)
|
130
|
+
|
131
|
+
{
|
132
|
+
|
133
|
+
float2 edge = pow(_Progress, float2(PROGRESS_EXPONENT, 1.0 / PROGRESS_EXPONENT));
|
134
|
+
|
135
|
+
float alpha = getAlpha(IN.uv_CrackTex, edge);
|
136
|
+
|
137
|
+
clip(alpha - 0.00001);
|
138
|
+
|
139
|
+
float cavity = 1.0 - pow(alpha, CAVITY_EXPONENT);
|
140
|
+
|
141
|
+
float alphaYP = getAlpha(IN.uv_CrackTex + float2(0.0, _CrackTex_TexelSize.y), edge);
|
142
|
+
|
143
|
+
float alphaXP = getAlpha(IN.uv_CrackTex + float2(_CrackTex_TexelSize.x, 0.0), edge);
|
144
|
+
|
145
|
+
float alphaYN = getAlpha(IN.uv_CrackTex + float2(0.0, -_CrackTex_TexelSize.y), edge);
|
146
|
+
|
147
|
+
float alphaXN = getAlpha(IN.uv_CrackTex + float2(-_CrackTex_TexelSize.x, 0.0), edge);
|
148
|
+
|
149
|
+
float3 tx = float3(_CrackTex_TexelSize.x * 2.0, 0.0, (alphaXN - alphaXP) * _CrackHeight);
|
150
|
+
|
151
|
+
float3 ty = float3(0.0, _CrackTex_TexelSize.y * 2.0, (alphaYN - alphaYP) * _CrackHeight);
|
152
|
+
|
153
|
+
float3 normal = normalize(normalize(cross(tx, ty)) + UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap)));
|
154
|
+
|
155
|
+
fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
|
156
|
+
|
157
|
+
o.Albedo = c.rgb * cavity;
|
158
|
+
|
159
|
+
o.Metallic = _Metallic;
|
160
|
+
|
161
|
+
o.Smoothness = _Glossiness;
|
162
|
+
|
163
|
+
o.Alpha = c.a;
|
164
|
+
|
165
|
+
o.Normal = normal;
|
166
|
+
|
167
|
+
o.Occlusion = cavity;
|
168
|
+
|
169
|
+
}
|
170
|
+
|
171
|
+
ENDCG
|
172
|
+
|
173
|
+
|
174
|
+
|
175
|
+
}
|
176
|
+
|
177
|
+
FallBack "Diffuse"
|
178
|
+
|
179
|
+
}
|
180
|
+
|
181
|
+
```
|
182
|
+
|
183
|
+
下図のように陰影の付いたひびにすることもできるかと思います。
|
184
|
+
|
185
|
+
![陰影付きひび](f57c6808be7aa6e0fb22e1347df4d5c0.gif)
|