Browse Source

Reflector/Refractor: Add multisampling support. (#23444)

Michael Herzog 3 years ago
parent
commit
b7d12a597f
2 changed files with 30 additions and 4 deletions
  1. 15 2
      examples/jsm/objects/Reflector.js
  2. 15 2
      examples/jsm/objects/Refractor.js

+ 15 - 2
examples/jsm/objects/Reflector.js

@@ -8,7 +8,8 @@ import {
 	UniformsUtils,
 	Vector3,
 	Vector4,
-	WebGLRenderTarget
+	WebGLRenderTarget,
+	WebGLMultisampleRenderTarget
 } from 'three';
 
 class Reflector extends Mesh {
@@ -26,6 +27,7 @@ class Reflector extends Mesh {
 		const textureHeight = options.textureHeight || 512;
 		const clipBias = options.clipBias || 0;
 		const shader = options.shader || Reflector.ReflectorShader;
+		const multisample = options.multisample || 4;
 
 		//
 
@@ -44,7 +46,18 @@ class Reflector extends Mesh {
 		const textureMatrix = new Matrix4();
 		const virtualCamera = new PerspectiveCamera();
 
-		const renderTarget = new WebGLRenderTarget( textureWidth, textureHeight );
+		let renderTarget;
+
+		if ( multisample > 0 ) {
+
+			renderTarget = new WebGLMultisampleRenderTarget( textureWidth, textureHeight );
+			renderTarget.samples = multisample;
+
+		} else {
+
+			renderTarget = new WebGLRenderTarget( textureWidth, textureHeight );
+
+		}
 
 		const material = new ShaderMaterial( {
 			uniforms: UniformsUtils.clone( shader.uniforms ),

+ 15 - 2
examples/jsm/objects/Refractor.js

@@ -9,7 +9,8 @@ import {
 	UniformsUtils,
 	Vector3,
 	Vector4,
-	WebGLRenderTarget
+	WebGLRenderTarget,
+	WebGLMultisampleRenderTarget
 } from 'three';
 
 class Refractor extends Mesh {
@@ -27,6 +28,7 @@ class Refractor extends Mesh {
 		const textureHeight = options.textureHeight || 512;
 		const clipBias = options.clipBias || 0;
 		const shader = options.shader || Refractor.RefractorShader;
+		const multisample = options.multisample || 4;
 
 		//
 
@@ -41,7 +43,18 @@ class Refractor extends Mesh {
 
 		// render target
 
-		const renderTarget = new WebGLRenderTarget( textureWidth, textureHeight );
+		let renderTarget;
+
+		if ( multisample > 0 ) {
+
+			renderTarget = new WebGLMultisampleRenderTarget( textureWidth, textureHeight );
+			renderTarget.samples = multisample;
+
+		} else {
+
+			renderTarget = new WebGLRenderTarget( textureWidth, textureHeight );
+
+		}
 
 		// material