瀏覽代碼

reduce code bulk, still the darkening bug.

Ben Houston 9 年之前
父節點
當前提交
4f2f70ece3
共有 2 個文件被更改,包括 98 次插入143 次删除
  1. 97 139
      examples/js/postprocessing/MSAAPass.js
  2. 1 4
      examples/webgl_postprocessing_msaa.html

+ 97 - 139
examples/js/postprocessing/MSAAPass.js

@@ -7,15 +7,6 @@ THREE.MSAAPass = function ( scene, camera, params, clearColor, clearAlpha ) {
   this.scene = scene;
   this.camera = camera;
 
-  // any set of samples in equal area weighting pattern is fine (3 or +4 samples would also work as well)
-  this.sampleOffsets = [];
-  this.sampleOffsets[0] = null;
-  this.sampleOffsets[1] = this.standardDirctX11_MSAA2();
-  this.sampleOffsets[2] = this.standardDirctX11_MSAA4();
-  this.sampleOffsets[3] = this.standardDirctX11_MSAA8();
-  this.sampleOffsets[4] = this.standardDirctX11_MSAA16();
-  this.sampleOffsets[5] = this.standardDirctX11_MSAA32();
-
   this.currentSampleLevel = 4;
 
   this.params = params || { minFilter: THREE.NearestFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat };
@@ -83,7 +74,7 @@ THREE.MSAAPass.prototype = {
 
     var camera = ( this.camera || this.scene.camera );
 
-    var currentSampleOffsets = this.sampleOffsets[ Math.max( 0, Math.min( this.currentSampleLevel, 5 ) ) ];
+    var currentSampleOffsets = THREE.MSAAPass.JitterVectors[ Math.max( 0, Math.min( this.currentSampleLevel, 5 ) ) ];
 
     if( ! currentSampleOffsets ) {
 
@@ -144,138 +135,105 @@ THREE.MSAAPass.prototype = {
 
     renderer.setClearColor( this.oldClearColor, this.oldClearAlpha );
 
-  },
-
-  // DirectX 11 standard MSAA sample pattern
-  standardDirctX11_MSAA2: function() {
-    var vectors = [
-      new THREE.Vector3(  4,  4, 0 ),
-      new THREE.Vector3( -4, -4, 0 )
-    ];
-    var xfrm = new THREE.Matrix4().makeScale( 1 / 16.0, 1/ 16.0, 0 );
-    var vectors2 = [];
-    for( var i = 0; i < vectors.length; i ++ ) {
-      vectors2.push( vectors[i].clone().applyMatrix4( xfrm ) );
-    }
-    return vectors2;
-  },
-
-  // DirectX 11 standard MSAA sample pattern
-  standardDirctX11_MSAA4: function() {
-    var vectors = [
-      new THREE.Vector3( -2, -6, 0 ),
-      new THREE.Vector3(  6, -2, 0 ),
-      new THREE.Vector3( -6,  2, 0 ),
-      new THREE.Vector3(  2,  6, 0 )
-    ];
-    var xfrm = new THREE.Matrix4().makeScale( 1 / 16.0, 1/ 16.0, 0 );
-    var vectors2 = [];
-    for( var i = 0; i < vectors.length; i ++ ) {
-      vectors2.push( vectors[i].clone().applyMatrix4( xfrm ) );
-    }
-    return vectors2;
-  },
-
-  // DirectX 11 standard MSAA sample pattern
-  standardDirctX11_MSAA8: function() {
-    var vectors = [
-      new THREE.Vector3(  1, -3, 0 ),
-      new THREE.Vector3( -1,  3, 0 ),
-      new THREE.Vector3(  5,  1, 0 ),
-      new THREE.Vector3( -3, -5, 0 ),
-      new THREE.Vector3( -5,  5, 0 ),
-      new THREE.Vector3( -7, -1, 0 ),
-      new THREE.Vector3(  3,  7, 0 ),
-      new THREE.Vector3(  7, -7, 0 ),
-    ];
-    var xfrm = new THREE.Matrix4().makeScale( 1 / 16.0, 1/ 16.0, 0 );
-    var vectors2 = [];
-    for( var i = 0; i < vectors.length; i ++ ) {
-      vectors2.push( vectors[i].clone().applyMatrix4( xfrm ) );
-    }
-    return vectors2;
-  },
+  }
+};
 
-  // DirectX 11 standard MSAA sample pattern
-  standardDirctX11_MSAA16: function() {
-    var vectors = [
-      new THREE.Vector3(  1,  1, 0 ),
-      new THREE.Vector3( -1, -3, 0 ),
-      new THREE.Vector3( -3,  2, 0 ),
-      new THREE.Vector3(  4, -1, 0 ),
-
-      new THREE.Vector3( -5, -2, 0 ),
-      new THREE.Vector3(  2,  5, 0 ),
-      new THREE.Vector3(  5,  3, 0 ),
-      new THREE.Vector3(  3, -5, 0 ),
-
-      new THREE.Vector3( -2,  6, 0 ),
-      new THREE.Vector3(  0, -7, 0 ),
-      new THREE.Vector3( -4, -6, 0 ),
-      new THREE.Vector3( -6,  4, 0 ),
-
-      new THREE.Vector3( -8,  0, 0 ),
-      new THREE.Vector3(  7, -4, 0 ),
-      new THREE.Vector3(  6,  7, 0 ),
-      new THREE.Vector3( -7, -8, 0 ),
-    ];
-    var xfrm = new THREE.Matrix4().makeScale( 1 / 16.0, 1/ 16.0, 0 );
-    var vectors2 = [];
-    for( var i = 0; i < vectors.length; i ++ ) {
-      vectors2.push( vectors[i].clone().applyMatrix4( xfrm ) );
-    }
-    return vectors2;
-  },
+THREE.MSAAPass.normalizedJitterVectors = function() {
+  var xfrm = new THREE.Matrix4().makeScale( 1 / 16.0, 1/ 16.0, 0 );
 
-  // based on this: http://images.anandtech.com/reviews/video/NVIDIA/GF100/CSAA.png
-  standardDirctX11_MSAA32: function() {
-    var vectors = [
-      new THREE.Vector3( -4, -7, 0 ),
-      new THREE.Vector3( -7, -5, 0 ),
-      new THREE.Vector3( -3, -5, 0 ),
-      new THREE.Vector3( -5, -4, 0 ),
-
-      new THREE.Vector3( -1, -4, 0 ),
-      new THREE.Vector3( -2, -2, 0 ),
-      new THREE.Vector3( -6, -1, 0 ),
-      new THREE.Vector3( -4,  0, 0 ),
-
-      new THREE.Vector3( -7,  1, 0 ),
-      new THREE.Vector3( -1,  2, 0 ),
-      new THREE.Vector3( -6,  3, 0 ),
-      new THREE.Vector3( -3,  3, 0 ),
-
-      new THREE.Vector3( -7,  6, 0 ),
-      new THREE.Vector3( -3,  6, 0 ),
-      new THREE.Vector3( -5,  7, 0 ),
-      new THREE.Vector3( -1,  7, 0 ),
-
-      new THREE.Vector3(  5, -7, 0 ),
-      new THREE.Vector3(  1, -6, 0 ),
-      new THREE.Vector3(  6, -5, 0 ),
-      new THREE.Vector3(  4, -4, 0 ),
-
-      new THREE.Vector3(  2, -3, 0 ),
-      new THREE.Vector3(  7, -2, 0 ),
-      new THREE.Vector3(  1, -1, 0 ),
-      new THREE.Vector3(  4, -1, 0 ),
-
-      new THREE.Vector3(  2,  1, 0 ),
-      new THREE.Vector3(  6,  2, 0 ),
-      new THREE.Vector3(  0,  4, 0 ),
-      new THREE.Vector3(  4,  4, 0 ),
-
-      new THREE.Vector3(  2,  5, 0 ),
-      new THREE.Vector3(  7,  5, 0 ),
-      new THREE.Vector3(  5,  6, 0 ),
-      new THREE.Vector3(  3,  7, 0 ),
-    ];
-    var xfrm = new THREE.Matrix4().makeScale( 1 / 16.0, 1/ 16.0, 0 );
+  return function( jitterVectors ) {
     var vectors2 = [];
-    for( var i = 0; i < vectors.length; i ++ ) {
-      vectors2.push( vectors[i].clone().applyMatrix4( xfrm ) );
+    for( var i = 0; i < jitterVectors.length; i ++ ) {
+      vectors2.push( new THREE.Vector3( jitterVectors[i][0], jitterVectors[i][0] ).applyMatrix4( xfrm ) );
     }
     return vectors2;
   }
-
-};
+}(),
+
+THREE.MSAAPass.JitterVectors = [
+  THREE.MSAAPass.normalizedJitterVectors( [
+    [  0,  0 ]
+  ] ),
+  THREE.MSAAPass.normalizedJitterVectors( [
+    [  4,  4 ],
+    [ -4, -4 ]
+  ] ),
+  THREE.MSAAPass.normalizedJitterVectors( [
+    [ -2, -6 ],
+    [  6, -2 ],
+    [ -6,  2 ],
+    [  2,  6 ]
+  ] ),
+  THREE.MSAAPass.normalizedJitterVectors( [
+    [  1, -3 ],
+    [ -1,  3 ],
+    [  5,  1 ],
+    [ -3, -5 ],
+    [ -5,  5 ],
+    [ -7, -1 ],
+    [  3,  7 ],
+    [  7, -7 ]
+  ] ),
+  THREE.MSAAPass.normalizedJitterVectors( [
+    [  1,  1 ],
+    [ -1, -3 ],
+    [ -3,  2 ],
+    [  4, -1 ],
+
+    [ -5, -2 ],
+    [  2,  5 ],
+    [  5,  3 ],
+    [  3, -5 ],
+
+    [ -2,  6 ],
+    [  0, -7 ],
+    [ -4, -6 ],
+    [ -6,  4 ],
+
+    [ -8,  0 ],
+    [  7, -4 ],
+    [  6,  7 ],
+    [ -7, -8 ]
+  ] ),
+  THREE.MSAAPass.normalizedJitterVectors( [
+    [ -4, -7 ],
+    [ -7, -5 ],
+    [ -3, -5 ],
+    [ -5, -4 ],
+
+    [ -1, -4 ],
+    [ -2, -2 ],
+    [ -6, -1 ],
+    [ -4,  0 ],
+
+    [ -7,  1 ],
+    [ -1,  2 ],
+    [ -6,  3 ],
+    [ -3,  3 ],
+
+    [ -7,  6 ],
+    [ -3,  6 ],
+    [ -5,  7 ],
+    [ -1,  7 ],
+
+    [  5, -7 ],
+    [  1, -6 ],
+    [  6, -5 ],
+    [  4, -4 ],
+
+    [  2, -3 ],
+    [  7, -2 ],
+    [  1, -1 ],
+    [  4, -1 ],
+
+    [  2,  1 ],
+    [  6,  2 ],
+    [  0,  4 ],
+    [  4,  4 ],
+
+    [  2,  5 ],
+    [  7,  5 ],
+    [  5,  6 ],
+    [  3,  7 ]
+  ] )
+];

+ 1 - 4
examples/webgl_postprocessing_msaa.html

@@ -48,8 +48,6 @@
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				document.body.appendChild( renderer.domElement );
 
-				//
-
 				camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 1000 );
 				camera.position.z = 400;
 
@@ -66,10 +64,9 @@
 				// postprocessing
 
 				composer = new THREE.EffectComposer( renderer );
-				//composer.addPass( new THREE.RenderPass( scene, camera ) );
 
 				var massPass = new THREE.MSAAPass( scene, camera, new THREE.Color( 1.0, 1.0, 1.0 ), 1.0 );
-				massPass.currentSampleLevel = 1;
+				massPass.currentSampleLevel = 4;
 				composer.addPass( massPass );
 
 				var copyPass = new THREE.ShaderPass(THREE.CopyShader);