Bläddra i källkod

Make the standard material use the Mesh ubo

Popov72 4 år sedan
förälder
incheckning
4859edcda3

+ 0 - 5
src/Materials/PBR/pbrBaseMaterial.ts

@@ -1785,11 +1785,6 @@ export abstract class PBRBaseMaterial extends PushMaterial {
         mesh.getMeshUniformBuffer().bindToEffect(effect, "Mesh");
         mesh.transferToEffect(world);
 
-        // Matrices
-        if (!defines.INSTANCES || defines.THIN_INSTANCES) {
-            this.bindOnlyWorldMatrix(world);
-        }
-
         // PrePass
         this.prePassConfiguration.bindForSubMesh(this._activeEffect, scene, mesh, world, this.isFrozen);
 

+ 5 - 9
src/Materials/standardMaterial.ts

@@ -1199,7 +1199,7 @@ export class StandardMaterial extends PushMaterial {
                 "reflection2DSampler", "emissiveSampler", "specularSampler", "bumpSampler", "lightmapSampler",
                 "refractionCubeSampler", "refraction2DSampler", "boneSampler"];
 
-            var uniformBuffers = ["Material", "Scene"];
+            var uniformBuffers = ["Material", "Scene", "Mesh"];
 
             DetailMapConfiguration.AddUniforms(uniforms);
             DetailMapConfiguration.AddSamplers(samplers);
@@ -1322,7 +1322,6 @@ export class StandardMaterial extends PushMaterial {
         ubo.addUniform("vRefractionInfos", 4);
         ubo.addUniform("vSpecularColor", 4);
         ubo.addUniform("vEmissiveColor", 3);
-        ubo.addUniform("visibility", 1);
         ubo.addUniform("vDiffuseColor", 4);
 
         DetailMapConfiguration.PrepareUniformBuffer(ubo);
@@ -1374,10 +1373,10 @@ export class StandardMaterial extends PushMaterial {
         }
         this._activeEffect = effect;
 
-        // Matrices
-        if (!defines.INSTANCES || defines.THIN_INSTANCES) {
-            this.bindOnlyWorldMatrix(world);
-        }
+        // Matrices Mesh.
+        mesh.getMeshUniformBuffer().bindToEffect(effect, "Mesh");
+        mesh.transferToEffect(world);
+
 
         // PrePass
         this.prePassConfiguration.bindForSubMesh(this._activeEffect, scene, mesh, world, this.isFrozen);
@@ -1512,9 +1511,6 @@ export class StandardMaterial extends PushMaterial {
                 ubo.updateColor4("vDiffuseColor", this.diffuseColor, this.alpha);
             }
 
-            // Visibility
-            ubo.updateFloat("visibility", mesh.visibility);
-
             // Textures
             if (scene.texturesEnabled) {
                 if (this._diffuseTexture && StandardMaterial.DiffuseTextureEnabled) {

+ 2 - 9
src/Shaders/ShadersInclude/defaultUboDeclaration.fx

@@ -35,18 +35,11 @@ uniform Material
 	vec4 vRefractionInfos;
 	vec4 vSpecularColor;
 	vec3 vEmissiveColor;
-	float visibility;
 	vec4 vDiffuseColor;
 
 	vec4 vDetailInfos;
 	mat4 detailMatrix;
 };
 
-uniform Scene {
-    mat4 viewProjection;
-#ifdef MULTIVIEW
-	mat4 viewProjectionR;
-#endif 
-	mat4 view;
-    vec4 viewPosition;
-};
+#include<sceneUboDeclaration>
+#include<meshUboDeclaration>

+ 1 - 0
src/Shaders/ShadersInclude/defaultVertexDeclaration.fx

@@ -1,4 +1,5 @@
 // Uniforms
+uniform mat4 world;
 uniform mat4 viewProjection;
 uniform mat4 view;
 

+ 9 - 0
src/Shaders/ShadersInclude/meshUboDeclaration.fx

@@ -0,0 +1,9 @@
+layout(std140, column_major) uniform;
+
+uniform Mesh
+{
+    mat4 world;
+    mat4 worldView;
+    mat4 worldViewProjection;
+    float visibility;
+};

+ 2 - 15
src/Shaders/ShadersInclude/pbrUboDeclaration.fx

@@ -22,16 +22,6 @@ layout(std140, column_major) uniform;
 //     uniform vec3 vSphericalZX;
 // }
 
-uniform Scene {
-    mat4 viewProjection;
-#ifdef MULTIVIEW
-	mat4 viewProjectionR;
-#endif 
-    mat4 view;
-    vec4 viewPosition;
-};
-
-
 uniform Material {
     vec2 vAlbedoInfos;
     vec4 vAmbientInfos;
@@ -127,8 +117,5 @@ uniform Material {
     vec3 vSphericalZX;
 };
 
-uniform Mesh
-{
-    mat4 world;
-    float visibility;
-};
+#include<sceneUboDeclaration>
+#include<meshUboDeclaration>

+ 11 - 0
src/Shaders/ShadersInclude/sceneUboDeclaration.fx

@@ -0,0 +1,11 @@
+layout(std140, column_major) uniform;
+
+uniform Scene {
+    mat4 viewProjection;
+#ifdef MULTIVIEW
+	mat4 viewProjectionR;
+#endif 
+	mat4 view;
+    vec4 viewPosition;
+};
+

+ 8 - 1
src/Shaders/default.vertex.fx

@@ -25,7 +25,14 @@ attribute vec4 color;
 #include<bonesDeclaration>
 
 // Uniforms
-#include<instancesDeclaration>
+// TODO WEBGPU faut-il remettre l'include et supprimer la déclaration de la world matrix ? Ca implique de passer par l'ubo du mesh aussi pour les autres types de material
+// #include<instancesDeclaration>
+#ifdef INSTANCES
+	attribute vec4 world0;
+	attribute vec4 world1;
+	attribute vec4 world2;
+	attribute vec4 world3;
+#endif
 #include<prePassVertexDeclaration>
 
 #ifdef MAINUV1