three-gpu-pathtracer 0.0.12 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +961 -886
- package/build/index.module.js +6850 -6481
- package/build/index.module.js.map +1 -1
- package/build/index.umd.cjs +6845 -6475
- package/build/index.umd.cjs.map +1 -1
- package/package.json +73 -72
- package/src/core/DynamicPathTracingSceneGenerator.js +119 -119
- package/src/core/MaterialReducer.js +256 -256
- package/src/core/PathTracingRenderer.js +346 -275
- package/src/core/PathTracingSceneGenerator.js +69 -69
- package/src/core/QuiltPathTracingRenderer.js +223 -0
- package/src/index.js +40 -39
- package/src/materials/AlphaDisplayMaterial.js +48 -48
- package/src/materials/AmbientOcclusionMaterial.js +199 -199
- package/src/materials/BlendMaterial.js +67 -67
- package/src/materials/DenoiseMaterial.js +142 -142
- package/src/materials/GraphMaterial.js +243 -243
- package/src/materials/LambertPathTracingMaterial.js +285 -285
- package/src/materials/MaterialBase.js +56 -56
- package/src/materials/PhysicalPathTracingMaterial.js +1013 -982
- package/src/objects/EquirectCamera.js +13 -13
- package/src/objects/PhysicalCamera.js +28 -28
- package/src/objects/PhysicalSpotLight.js +14 -14
- package/src/objects/ShapedAreaLight.js +12 -12
- package/src/shader/shaderEnvMapSampling.js +58 -58
- package/src/shader/shaderGGXFunctions.js +100 -100
- package/src/shader/shaderIridescenceFunctions.js +135 -130
- package/src/shader/shaderLayerTexelFetchFunctions.js +25 -25
- package/src/shader/shaderLightSampling.js +229 -229
- package/src/shader/shaderMaterialSampling.js +510 -506
- package/src/shader/shaderRandFunctions.js +57 -57
- package/src/shader/shaderSheenFunctions.js +98 -98
- package/src/shader/shaderSobolSampling.js +256 -256
- package/src/shader/shaderStructs.js +327 -325
- package/src/shader/shaderUtils.js +377 -361
- package/src/textures/GradientEquirectTexture.js +35 -35
- package/src/textures/ProceduralEquirectTexture.js +75 -75
- package/src/uniforms/AttributesTextureArray.js +35 -35
- package/src/uniforms/EquirectHdrInfoUniform.js +273 -259
- package/src/uniforms/FloatAttributeTextureArray.js +169 -169
- package/src/uniforms/IESProfilesTexture.js +100 -100
- package/src/uniforms/LightsInfoUniformStruct.js +212 -207
- package/src/uniforms/MaterialsTexture.js +426 -426
- package/src/uniforms/PhysicalCameraUniform.js +36 -36
- package/src/uniforms/RenderTarget2DArray.js +97 -97
- package/src/uniforms/utils.js +30 -30
- package/src/utils/BlurredEnvMapGenerator.js +116 -116
- package/src/utils/GeometryPreparationUtils.js +214 -214
- package/src/utils/IESLoader.js +325 -325
- package/src/utils/SobolNumberMapGenerator.js +80 -80
- package/src/utils/UVUnwrapper.js +101 -101
- package/src/workers/PathTracingSceneWorker.js +42 -42
|
@@ -1,325 +1,327 @@
|
|
|
1
|
-
export const shaderMaterialStructs = /* glsl */ `
|
|
2
|
-
|
|
3
|
-
struct PhysicalCamera {
|
|
4
|
-
|
|
5
|
-
float focusDistance;
|
|
6
|
-
float anamorphicRatio;
|
|
7
|
-
float bokehSize;
|
|
8
|
-
int apertureBlades;
|
|
9
|
-
float apertureRotation;
|
|
10
|
-
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
struct EquirectHdrInfo {
|
|
14
|
-
|
|
15
|
-
sampler2D marginalWeights;
|
|
16
|
-
sampler2D conditionalWeights;
|
|
17
|
-
sampler2D map;
|
|
18
|
-
|
|
19
|
-
float totalSumWhole;
|
|
20
|
-
float totalSumDecimal;
|
|
21
|
-
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
struct Material {
|
|
25
|
-
|
|
26
|
-
vec3 color;
|
|
27
|
-
int map;
|
|
28
|
-
|
|
29
|
-
float metalness;
|
|
30
|
-
int metalnessMap;
|
|
31
|
-
|
|
32
|
-
float roughness;
|
|
33
|
-
int roughnessMap;
|
|
34
|
-
|
|
35
|
-
float ior;
|
|
36
|
-
float transmission;
|
|
37
|
-
int transmissionMap;
|
|
38
|
-
|
|
39
|
-
float emissiveIntensity;
|
|
40
|
-
vec3 emissive;
|
|
41
|
-
int emissiveMap;
|
|
42
|
-
|
|
43
|
-
int normalMap;
|
|
44
|
-
vec2 normalScale;
|
|
45
|
-
|
|
46
|
-
float clearcoat;
|
|
47
|
-
int clearcoatMap;
|
|
48
|
-
int clearcoatNormalMap;
|
|
49
|
-
vec2 clearcoatNormalScale;
|
|
50
|
-
float clearcoatRoughness;
|
|
51
|
-
int clearcoatRoughnessMap;
|
|
52
|
-
|
|
53
|
-
int iridescenceMap;
|
|
54
|
-
int iridescenceThicknessMap;
|
|
55
|
-
float iridescence;
|
|
56
|
-
float iridescenceIor;
|
|
57
|
-
float iridescenceThicknessMinimum;
|
|
58
|
-
float iridescenceThicknessMaximum;
|
|
59
|
-
|
|
60
|
-
vec3 specularColor;
|
|
61
|
-
int specularColorMap;
|
|
62
|
-
|
|
63
|
-
float specularIntensity;
|
|
64
|
-
int specularIntensityMap;
|
|
65
|
-
bool thinFilm;
|
|
66
|
-
|
|
67
|
-
vec3 attenuationColor;
|
|
68
|
-
float attenuationDistance;
|
|
69
|
-
|
|
70
|
-
int alphaMap;
|
|
71
|
-
|
|
72
|
-
bool castShadow;
|
|
73
|
-
float opacity;
|
|
74
|
-
float alphaTest;
|
|
75
|
-
|
|
76
|
-
float side;
|
|
77
|
-
bool matte;
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
bool
|
|
86
|
-
bool
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
mat3
|
|
90
|
-
mat3
|
|
91
|
-
mat3
|
|
92
|
-
mat3
|
|
93
|
-
mat3
|
|
94
|
-
mat3
|
|
95
|
-
mat3
|
|
96
|
-
mat3
|
|
97
|
-
mat3
|
|
98
|
-
mat3
|
|
99
|
-
mat3
|
|
100
|
-
mat3
|
|
101
|
-
mat3
|
|
102
|
-
mat3
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
vec4
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
textureTransform[
|
|
115
|
-
textureTransform[
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
vec4
|
|
127
|
-
vec4
|
|
128
|
-
vec4
|
|
129
|
-
vec4
|
|
130
|
-
vec4
|
|
131
|
-
vec4
|
|
132
|
-
vec4
|
|
133
|
-
vec4
|
|
134
|
-
vec4
|
|
135
|
-
vec4
|
|
136
|
-
vec4
|
|
137
|
-
vec4
|
|
138
|
-
vec4
|
|
139
|
-
vec4
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
m
|
|
143
|
-
m.
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
m.
|
|
147
|
-
m.
|
|
148
|
-
m.
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
m.
|
|
152
|
-
m.
|
|
153
|
-
m.
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
m.
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
m.
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
m.
|
|
163
|
-
m.
|
|
164
|
-
m.
|
|
165
|
-
m.
|
|
166
|
-
m.
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
m.
|
|
170
|
-
m.
|
|
171
|
-
m.
|
|
172
|
-
|
|
173
|
-
m.
|
|
174
|
-
|
|
175
|
-
m.
|
|
176
|
-
m.
|
|
177
|
-
m.
|
|
178
|
-
m.
|
|
179
|
-
|
|
180
|
-
m.
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
m.
|
|
184
|
-
|
|
185
|
-
m.
|
|
186
|
-
|
|
187
|
-
m.
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
m.
|
|
191
|
-
|
|
192
|
-
m.
|
|
193
|
-
|
|
194
|
-
m.
|
|
195
|
-
|
|
196
|
-
m.
|
|
197
|
-
|
|
198
|
-
m.
|
|
199
|
-
m.
|
|
200
|
-
m.
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
m.
|
|
207
|
-
m.
|
|
208
|
-
m.
|
|
209
|
-
m.
|
|
210
|
-
m.
|
|
211
|
-
m.
|
|
212
|
-
m.
|
|
213
|
-
m.
|
|
214
|
-
m.
|
|
215
|
-
m.
|
|
216
|
-
m.
|
|
217
|
-
m.
|
|
218
|
-
m.
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
#define
|
|
231
|
-
#define
|
|
232
|
-
#define
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
float
|
|
257
|
-
float
|
|
258
|
-
float
|
|
259
|
-
float
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
vec4
|
|
271
|
-
vec4
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
l
|
|
276
|
-
|
|
277
|
-
l.
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
l.
|
|
281
|
-
|
|
282
|
-
l.
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
l.
|
|
291
|
-
l.
|
|
292
|
-
|
|
293
|
-
l.
|
|
294
|
-
|
|
295
|
-
l.
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
float
|
|
316
|
-
|
|
317
|
-
float
|
|
318
|
-
float
|
|
319
|
-
float
|
|
320
|
-
float
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
1
|
+
export const shaderMaterialStructs = /* glsl */ `
|
|
2
|
+
|
|
3
|
+
struct PhysicalCamera {
|
|
4
|
+
|
|
5
|
+
float focusDistance;
|
|
6
|
+
float anamorphicRatio;
|
|
7
|
+
float bokehSize;
|
|
8
|
+
int apertureBlades;
|
|
9
|
+
float apertureRotation;
|
|
10
|
+
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
struct EquirectHdrInfo {
|
|
14
|
+
|
|
15
|
+
sampler2D marginalWeights;
|
|
16
|
+
sampler2D conditionalWeights;
|
|
17
|
+
sampler2D map;
|
|
18
|
+
|
|
19
|
+
float totalSumWhole;
|
|
20
|
+
float totalSumDecimal;
|
|
21
|
+
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
struct Material {
|
|
25
|
+
|
|
26
|
+
vec3 color;
|
|
27
|
+
int map;
|
|
28
|
+
|
|
29
|
+
float metalness;
|
|
30
|
+
int metalnessMap;
|
|
31
|
+
|
|
32
|
+
float roughness;
|
|
33
|
+
int roughnessMap;
|
|
34
|
+
|
|
35
|
+
float ior;
|
|
36
|
+
float transmission;
|
|
37
|
+
int transmissionMap;
|
|
38
|
+
|
|
39
|
+
float emissiveIntensity;
|
|
40
|
+
vec3 emissive;
|
|
41
|
+
int emissiveMap;
|
|
42
|
+
|
|
43
|
+
int normalMap;
|
|
44
|
+
vec2 normalScale;
|
|
45
|
+
|
|
46
|
+
float clearcoat;
|
|
47
|
+
int clearcoatMap;
|
|
48
|
+
int clearcoatNormalMap;
|
|
49
|
+
vec2 clearcoatNormalScale;
|
|
50
|
+
float clearcoatRoughness;
|
|
51
|
+
int clearcoatRoughnessMap;
|
|
52
|
+
|
|
53
|
+
int iridescenceMap;
|
|
54
|
+
int iridescenceThicknessMap;
|
|
55
|
+
float iridescence;
|
|
56
|
+
float iridescenceIor;
|
|
57
|
+
float iridescenceThicknessMinimum;
|
|
58
|
+
float iridescenceThicknessMaximum;
|
|
59
|
+
|
|
60
|
+
vec3 specularColor;
|
|
61
|
+
int specularColorMap;
|
|
62
|
+
|
|
63
|
+
float specularIntensity;
|
|
64
|
+
int specularIntensityMap;
|
|
65
|
+
bool thinFilm;
|
|
66
|
+
|
|
67
|
+
vec3 attenuationColor;
|
|
68
|
+
float attenuationDistance;
|
|
69
|
+
|
|
70
|
+
int alphaMap;
|
|
71
|
+
|
|
72
|
+
bool castShadow;
|
|
73
|
+
float opacity;
|
|
74
|
+
float alphaTest;
|
|
75
|
+
|
|
76
|
+
float side;
|
|
77
|
+
bool matte;
|
|
78
|
+
|
|
79
|
+
float sheen;
|
|
80
|
+
vec3 sheenColor;
|
|
81
|
+
int sheenColorMap;
|
|
82
|
+
float sheenRoughness;
|
|
83
|
+
int sheenRoughnessMap;
|
|
84
|
+
|
|
85
|
+
bool vertexColors;
|
|
86
|
+
bool flatShading;
|
|
87
|
+
bool transparent;
|
|
88
|
+
|
|
89
|
+
mat3 mapTransform;
|
|
90
|
+
mat3 metalnessMapTransform;
|
|
91
|
+
mat3 roughnessMapTransform;
|
|
92
|
+
mat3 transmissionMapTransform;
|
|
93
|
+
mat3 emissiveMapTransform;
|
|
94
|
+
mat3 normalMapTransform;
|
|
95
|
+
mat3 clearcoatMapTransform;
|
|
96
|
+
mat3 clearcoatNormalMapTransform;
|
|
97
|
+
mat3 clearcoatRoughnessMapTransform;
|
|
98
|
+
mat3 sheenColorMapTransform;
|
|
99
|
+
mat3 sheenRoughnessMapTransform;
|
|
100
|
+
mat3 iridescenceMapTransform;
|
|
101
|
+
mat3 iridescenceThicknessMapTransform;
|
|
102
|
+
mat3 specularColorMapTransform;
|
|
103
|
+
mat3 specularIntensityMapTransform;
|
|
104
|
+
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
mat3 readTextureTransform( sampler2D tex, uint index ) {
|
|
108
|
+
|
|
109
|
+
mat3 textureTransform;
|
|
110
|
+
|
|
111
|
+
vec4 row1 = texelFetch1D( tex, index );
|
|
112
|
+
vec4 row2 = texelFetch1D( tex, index + 1u );
|
|
113
|
+
|
|
114
|
+
textureTransform[0] = vec3(row1.r, row2.r, 0.0);
|
|
115
|
+
textureTransform[1] = vec3(row1.g, row2.g, 0.0);
|
|
116
|
+
textureTransform[2] = vec3(row1.b, row2.b, 1.0);
|
|
117
|
+
|
|
118
|
+
return textureTransform;
|
|
119
|
+
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
Material readMaterialInfo( sampler2D tex, uint index ) {
|
|
123
|
+
|
|
124
|
+
uint i = index * 45u;
|
|
125
|
+
|
|
126
|
+
vec4 s0 = texelFetch1D( tex, i + 0u );
|
|
127
|
+
vec4 s1 = texelFetch1D( tex, i + 1u );
|
|
128
|
+
vec4 s2 = texelFetch1D( tex, i + 2u );
|
|
129
|
+
vec4 s3 = texelFetch1D( tex, i + 3u );
|
|
130
|
+
vec4 s4 = texelFetch1D( tex, i + 4u );
|
|
131
|
+
vec4 s5 = texelFetch1D( tex, i + 5u );
|
|
132
|
+
vec4 s6 = texelFetch1D( tex, i + 6u );
|
|
133
|
+
vec4 s7 = texelFetch1D( tex, i + 7u );
|
|
134
|
+
vec4 s8 = texelFetch1D( tex, i + 8u );
|
|
135
|
+
vec4 s9 = texelFetch1D( tex, i + 9u );
|
|
136
|
+
vec4 s10 = texelFetch1D( tex, i + 10u );
|
|
137
|
+
vec4 s11 = texelFetch1D( tex, i + 11u );
|
|
138
|
+
vec4 s12 = texelFetch1D( tex, i + 12u );
|
|
139
|
+
vec4 s13 = texelFetch1D( tex, i + 13u );
|
|
140
|
+
vec4 s14 = texelFetch1D( tex, i + 14u );
|
|
141
|
+
|
|
142
|
+
Material m;
|
|
143
|
+
m.color = s0.rgb;
|
|
144
|
+
m.map = int( round( s0.a ) );
|
|
145
|
+
|
|
146
|
+
m.metalness = s1.r;
|
|
147
|
+
m.metalnessMap = int( round( s1.g ) );
|
|
148
|
+
m.roughness = s1.b;
|
|
149
|
+
m.roughnessMap = int( round( s1.a ) );
|
|
150
|
+
|
|
151
|
+
m.ior = s2.r;
|
|
152
|
+
m.transmission = s2.g;
|
|
153
|
+
m.transmissionMap = int( round( s2.b ) );
|
|
154
|
+
m.emissiveIntensity = s2.a;
|
|
155
|
+
|
|
156
|
+
m.emissive = s3.rgb;
|
|
157
|
+
m.emissiveMap = int( round( s3.a ) );
|
|
158
|
+
|
|
159
|
+
m.normalMap = int( round( s4.r ) );
|
|
160
|
+
m.normalScale = s4.gb;
|
|
161
|
+
|
|
162
|
+
m.clearcoat = s4.a;
|
|
163
|
+
m.clearcoatMap = int( round( s5.r ) );
|
|
164
|
+
m.clearcoatRoughness = s5.g;
|
|
165
|
+
m.clearcoatRoughnessMap = int( round( s5.b ) );
|
|
166
|
+
m.clearcoatNormalMap = int( round( s5.a ) );
|
|
167
|
+
m.clearcoatNormalScale = s6.rg;
|
|
168
|
+
|
|
169
|
+
m.sheen = s6.a;
|
|
170
|
+
m.sheenColor = s7.rgb;
|
|
171
|
+
m.sheenColorMap = int( round( s7.a ) );
|
|
172
|
+
m.sheenRoughness = s8.r;
|
|
173
|
+
m.sheenRoughnessMap = int( round( s8.g ) );
|
|
174
|
+
|
|
175
|
+
m.iridescenceMap = int( round( s8.b ) );
|
|
176
|
+
m.iridescenceThicknessMap = int( round( s8.a ) );
|
|
177
|
+
m.iridescence = s9.r;
|
|
178
|
+
m.iridescenceIor = s9.g;
|
|
179
|
+
m.iridescenceThicknessMinimum = s9.b;
|
|
180
|
+
m.iridescenceThicknessMaximum = s9.a;
|
|
181
|
+
|
|
182
|
+
m.specularColor = s10.rgb;
|
|
183
|
+
m.specularColorMap = int( round( s10.a ) );
|
|
184
|
+
|
|
185
|
+
m.specularIntensity = s11.r;
|
|
186
|
+
m.specularIntensityMap = int( round( s11.g ) );
|
|
187
|
+
m.thinFilm = bool( s11.b );
|
|
188
|
+
|
|
189
|
+
m.attenuationColor = s12.rgb;
|
|
190
|
+
m.attenuationDistance = s12.a;
|
|
191
|
+
|
|
192
|
+
m.alphaMap = int( round( s13.r ) );
|
|
193
|
+
|
|
194
|
+
m.opacity = s13.g;
|
|
195
|
+
m.alphaTest = s13.b;
|
|
196
|
+
m.side = s13.a;
|
|
197
|
+
|
|
198
|
+
m.matte = bool( s14.r );
|
|
199
|
+
m.castShadow = ! bool( s14.g );
|
|
200
|
+
m.vertexColors = bool( int( s14.b ) & 1 );
|
|
201
|
+
m.flatShading = bool( int( s14.b ) & 2 );
|
|
202
|
+
m.transparent = bool( s14.a );
|
|
203
|
+
|
|
204
|
+
uint firstTextureTransformIdx = i + 15u;
|
|
205
|
+
|
|
206
|
+
m.mapTransform = m.map == - 1 ? mat3( 0 ) : readTextureTransform( tex, firstTextureTransformIdx );
|
|
207
|
+
m.metalnessMapTransform = m.metalnessMap == - 1 ? mat3( 0 ) : readTextureTransform( tex, firstTextureTransformIdx + 2u );
|
|
208
|
+
m.roughnessMapTransform = m.roughnessMap == - 1 ? mat3( 0 ) : readTextureTransform( tex, firstTextureTransformIdx + 4u );
|
|
209
|
+
m.transmissionMapTransform = m.transmissionMap == - 1 ? mat3( 0 ) : readTextureTransform( tex, firstTextureTransformIdx + 6u );
|
|
210
|
+
m.emissiveMapTransform = m.emissiveMap == - 1 ? mat3( 0 ) : readTextureTransform( tex, firstTextureTransformIdx + 8u );
|
|
211
|
+
m.normalMapTransform = m.normalMap == - 1 ? mat3( 0 ) : readTextureTransform( tex, firstTextureTransformIdx + 10u );
|
|
212
|
+
m.clearcoatMapTransform = m.clearcoatMap == - 1 ? mat3( 0 ) : readTextureTransform( tex, firstTextureTransformIdx + 12u );
|
|
213
|
+
m.clearcoatNormalMapTransform = m.clearcoatNormalMap == - 1 ? mat3( 0 ) : readTextureTransform( tex, firstTextureTransformIdx + 14u );
|
|
214
|
+
m.clearcoatRoughnessMapTransform = m.clearcoatRoughnessMap == - 1 ? mat3( 0 ) : readTextureTransform( tex, firstTextureTransformIdx + 16u );
|
|
215
|
+
m.sheenColorMapTransform = m.sheenColorMap == - 1 ? mat3( 0 ) : readTextureTransform( tex, firstTextureTransformIdx + 18u );
|
|
216
|
+
m.sheenRoughnessMapTransform = m.sheenRoughnessMap == - 1 ? mat3( 0 ) : readTextureTransform( tex, firstTextureTransformIdx + 20u );
|
|
217
|
+
m.iridescenceMapTransform = m.iridescenceMap == - 1 ? mat3( 0 ) : readTextureTransform( tex, firstTextureTransformIdx + 22u );
|
|
218
|
+
m.iridescenceThicknessMapTransform = m.iridescenceThicknessMap == - 1 ? mat3( 0 ) : readTextureTransform( tex, firstTextureTransformIdx + 24u );
|
|
219
|
+
m.specularColorMapTransform = m.specularColorMap == - 1 ? mat3( 0 ) : readTextureTransform( tex, firstTextureTransformIdx + 26u );
|
|
220
|
+
m.specularIntensityMapTransform = m.specularIntensityMap == - 1 ? mat3( 0 ) : readTextureTransform( tex, firstTextureTransformIdx + 28u );
|
|
221
|
+
|
|
222
|
+
return m;
|
|
223
|
+
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
`;
|
|
227
|
+
|
|
228
|
+
export const shaderLightStruct = /* glsl */ `
|
|
229
|
+
|
|
230
|
+
#define RECT_AREA_LIGHT_TYPE 0
|
|
231
|
+
#define CIRC_AREA_LIGHT_TYPE 1
|
|
232
|
+
#define SPOT_LIGHT_TYPE 2
|
|
233
|
+
#define DIR_LIGHT_TYPE 3
|
|
234
|
+
#define POINT_LIGHT_TYPE 4
|
|
235
|
+
|
|
236
|
+
struct LightsInfo {
|
|
237
|
+
|
|
238
|
+
sampler2D tex;
|
|
239
|
+
uint count;
|
|
240
|
+
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
struct Light {
|
|
244
|
+
|
|
245
|
+
vec3 position;
|
|
246
|
+
int type;
|
|
247
|
+
|
|
248
|
+
vec3 color;
|
|
249
|
+
float intensity;
|
|
250
|
+
|
|
251
|
+
vec3 u;
|
|
252
|
+
vec3 v;
|
|
253
|
+
float area;
|
|
254
|
+
|
|
255
|
+
// spot light fields
|
|
256
|
+
float radius;
|
|
257
|
+
float near;
|
|
258
|
+
float decay;
|
|
259
|
+
float distance;
|
|
260
|
+
float coneCos;
|
|
261
|
+
float penumbraCos;
|
|
262
|
+
int iesProfile;
|
|
263
|
+
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
Light readLightInfo( sampler2D tex, uint index ) {
|
|
267
|
+
|
|
268
|
+
uint i = index * 6u;
|
|
269
|
+
|
|
270
|
+
vec4 s0 = texelFetch1D( tex, i + 0u );
|
|
271
|
+
vec4 s1 = texelFetch1D( tex, i + 1u );
|
|
272
|
+
vec4 s2 = texelFetch1D( tex, i + 2u );
|
|
273
|
+
vec4 s3 = texelFetch1D( tex, i + 3u );
|
|
274
|
+
|
|
275
|
+
Light l;
|
|
276
|
+
l.position = s0.rgb;
|
|
277
|
+
l.type = int( round( s0.a ) );
|
|
278
|
+
|
|
279
|
+
l.color = s1.rgb;
|
|
280
|
+
l.intensity = s1.a;
|
|
281
|
+
|
|
282
|
+
l.u = s2.rgb;
|
|
283
|
+
l.v = s3.rgb;
|
|
284
|
+
l.area = s3.a;
|
|
285
|
+
|
|
286
|
+
if ( l.type == SPOT_LIGHT_TYPE || l.type == POINT_LIGHT_TYPE ) {
|
|
287
|
+
|
|
288
|
+
vec4 s4 = texelFetch1D( tex, i + 4u );
|
|
289
|
+
vec4 s5 = texelFetch1D( tex, i + 5u );
|
|
290
|
+
l.radius = s4.r;
|
|
291
|
+
l.near = s4.g;
|
|
292
|
+
l.decay = s4.b;
|
|
293
|
+
l.distance = s4.a;
|
|
294
|
+
|
|
295
|
+
l.coneCos = s5.r;
|
|
296
|
+
l.penumbraCos = s5.g;
|
|
297
|
+
l.iesProfile = int( round ( s5.b ) );
|
|
298
|
+
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
return l;
|
|
302
|
+
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
struct SpotLight {
|
|
306
|
+
|
|
307
|
+
vec3 position;
|
|
308
|
+
int type;
|
|
309
|
+
|
|
310
|
+
vec3 color;
|
|
311
|
+
float intensity;
|
|
312
|
+
|
|
313
|
+
vec3 u;
|
|
314
|
+
vec3 v;
|
|
315
|
+
float area;
|
|
316
|
+
|
|
317
|
+
float radius;
|
|
318
|
+
float near;
|
|
319
|
+
float decay;
|
|
320
|
+
float distance;
|
|
321
|
+
float coneCos;
|
|
322
|
+
float penumbraCos;
|
|
323
|
+
int iesProfile;
|
|
324
|
+
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
`;
|