Skip to content

Commit ef534ae

Browse files
committed
Updates from review.
1 parent 8b20b14 commit ef534ae

File tree

1 file changed

+31
-22
lines changed

1 file changed

+31
-22
lines changed

Source/Scene/processPbrMaterials.js

+31-22
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ define([
9494
var sampler = gltf.samplers[gltf.textures[textureIndex].sampler];
9595

9696
var repeatS = sampler.wrapS === WebGLConstants.REPEAT ? 'true' : 'false';
97-
var repeatT = sampler.wrapS === WebGLConstants.REPEAT ? 'true' : 'false';
97+
var repeatT = sampler.wrapT === WebGLConstants.REPEAT ? 'true' : 'false';
9898

9999
texCoord = textureName + 'Coord';
100100
result.fragmentShaderMain += ' vec2 ' + texCoord + ' = computeTexCoord(' + defaultTexCoord + ', ' + textureName + 'Offset, ' + textureName + 'Rotation, ' + textureName + 'Scale, ' + repeatS + ', ' + repeatT + ');\n';
@@ -108,6 +108,22 @@ define([
108108
var DEFAULT_TEXTURE_ROTATION = [0.0];
109109
var DEFAULT_TEXTURE_SCALE = [1.0, 1.0];
110110

111+
function handleKHRTextureTransform(parameterName, value, generatedMaterialValues) {
112+
if (parameterName.indexOf('Texture') === -1 || !defined(value.extensions) || !defined(value.extensions.KHR_texture_transform)) {
113+
return;
114+
}
115+
116+
var uniformName = 'u_' + parameterName;
117+
var extension = value.extensions.KHR_texture_transform;
118+
generatedMaterialValues[uniformName + 'Offset'] = defaultValue(extension.offset, DEFAULT_TEXTURE_OFFSET);
119+
generatedMaterialValues[uniformName + 'Rotation'] = defaultValue(extension.rotation, DEFAULT_TEXTURE_ROTATION);
120+
generatedMaterialValues[uniformName + 'Scale'] = defaultValue(extension.scale, DEFAULT_TEXTURE_SCALE);
121+
122+
if (defined(value.texCoord) && defined(extension.texCoord)) {
123+
generatedMaterialValues[uniformName].texCoord = extension.texCoord;
124+
}
125+
}
126+
111127
function generateTechnique(gltf, material, materialIndex, generatedMaterialValues, primitiveByMaterial, options) {
112128
var addBatchIdToGeneratedShaders = defaultValue(options.addBatchIdToGeneratedShaders, false);
113129

@@ -120,24 +136,15 @@ define([
120136

121137
var uniformName;
122138
var parameterName;
139+
var value;
123140
var pbrMetallicRoughness = material.pbrMetallicRoughness;
124141
if (defined(pbrMetallicRoughness) && !useSpecGloss) {
125142
for (parameterName in pbrMetallicRoughness) {
126143
if (pbrMetallicRoughness.hasOwnProperty(parameterName)) {
127-
var value = pbrMetallicRoughness[parameterName];
144+
value = pbrMetallicRoughness[parameterName];
128145
uniformName = 'u_' + parameterName;
129146
generatedMaterialValues[uniformName] = value;
130-
131-
if (parameterName.indexOf('Texture') >= 0 && defined(value.extensions) && defined(value.extensions.KHR_texture_transform)) {
132-
var extension = value.extensions.KHR_texture_transform;
133-
generatedMaterialValues[uniformName + 'Offset'] = defaultValue(extension.offset, DEFAULT_TEXTURE_OFFSET);
134-
generatedMaterialValues[uniformName + 'Rotation'] = defaultValue(extension.rotation, DEFAULT_TEXTURE_ROTATION);
135-
generatedMaterialValues[uniformName + 'Scale'] = defaultValue(extension.scale, DEFAULT_TEXTURE_SCALE);
136-
137-
if (defined(value.texCoord) && defined(extension.texCoord)) {
138-
generatedMaterialValues[uniformName].texCoord = extension.texCoord;
139-
}
140-
}
147+
handleKHRTextureTransform(parameterName, value, generatedMaterialValues);
141148
}
142149
}
143150
}
@@ -146,16 +153,20 @@ define([
146153
var pbrSpecularGlossiness = material.extensions.KHR_materials_pbrSpecularGlossiness;
147154
for (parameterName in pbrSpecularGlossiness) {
148155
if (pbrSpecularGlossiness.hasOwnProperty(parameterName)) {
156+
value = pbrSpecularGlossiness[parameterName];
149157
uniformName = 'u_' + parameterName;
150-
generatedMaterialValues[uniformName] = pbrSpecularGlossiness[parameterName];
158+
generatedMaterialValues[uniformName] = value;
159+
handleKHRTextureTransform(parameterName, value, generatedMaterialValues);
151160
}
152161
}
153162
}
154163

155164
for (var additional in material) {
156165
if (material.hasOwnProperty(additional) && ((additional.indexOf('Texture') >= 0) || additional.indexOf('Factor') >= 0)) {
166+
value = material[additional];
157167
uniformName = 'u_' + additional;
158-
generatedMaterialValues[uniformName] = material[additional];
168+
generatedMaterialValues[uniformName] = value;
169+
handleKHRTextureTransform(additional, value, generatedMaterialValues);
159170
}
160171
}
161172

@@ -547,14 +558,12 @@ define([
547558
fragmentShader +=
548559
'vec2 computeTexCoord(vec2 texCoords, vec2 offset, float rotation, vec2 scale, bool repeatS, bool repeatT) \n' +
549560
'{\n' +
550-
' mat3 translationMatrix = mat3(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, offset.x, offset.y, 1.0); \n' +
551561
' rotation = -rotation; \n' +
552-
' mat3 rotationMatrix = mat3(\n' +
553-
' cos(rotation), sin(rotation), 0.0, \n' +
554-
' -sin(rotation), cos(rotation), 0.0, \n' +
555-
' 0.0, 0.0, 1.0); \n' +
556-
' mat3 scaleMatrix = mat3(scale.x, 0.0, 0.0, 0.0, scale.y, 0.0, 0.0, 0.0, 1.0); \n' +
557-
' vec2 transformedTexCoords = ((translationMatrix * rotationMatrix * scaleMatrix) * vec3(fract(texCoords), 1.0)).xy; \n' +
562+
' mat3 transform = mat3(\n' +
563+
' cos(rotation) * scale.x, sin(rotation) * scale.x, 0.0, \n' +
564+
' -sin(rotation) * scale.y, cos(rotation) * scale.y, 0.0, \n' +
565+
' offset.x, offset.y, 1.0); \n' +
566+
' vec2 transformedTexCoords = (transform * vec3(fract(texCoords), 1.0)).xy; \n' +
558567
' transformedTexCoords.x = repeatS ? fract(transformedTexCoords.x) : clamp(transformedTexCoords.x, 0.0, 1.0); \n' +
559568
' transformedTexCoords.y = repeatT ? fract(transformedTexCoords.y) : clamp(transformedTexCoords.y, 0.0, 1.0); \n' +
560569
' return transformedTexCoords; \n' +

0 commit comments

Comments
 (0)