Browse Source

add ambientOcclusionScale.

Ben Houston 10 years ago
parent
commit
0ecfda58f0

+ 78 - 0
editor/js/Sidebar.Material.js

@@ -278,6 +278,32 @@ Sidebar.Material = function ( editor ) {
 
 
 	container.add( materialEnvMapRow );
 	container.add( materialEnvMapRow );
 
 
+	// light map
+
+	var materialLightMapRow = new UI.Panel();
+	var materialLightMapEnabled = new UI.Checkbox( false ).onChange( update );
+	var materialLightMap = new UI.Texture().onChange( update );
+
+	materialLightMapRow.add( new UI.Text( 'Light Map' ).setWidth( '90px' ) );
+	materialLightMapRow.add( materialLightMapEnabled );
+	materialLightMapRow.add( materialLightMap );
+
+	container.add( materialLightMapRow );
+
+	// ambient occlusion map
+
+	var materialAmbientOcclusionMapRow = new UI.Panel();
+	var materialAmbientOcclusionMapEnabled = new UI.Checkbox( false ).onChange( update );
+	var materialAmbientOcclusionMap = new UI.Texture().onChange( update );
+	var materialAmbientOcclusionScale = new UI.Number( 1 ).setRange( 0, 1 ).setWidth( '30px' ).onChange( update );
+
+	materialAmbientOcclusionMapRow.add( new UI.Text( 'Ambient Occlusion Map' ).setWidth( '90px' ) );
+	materialAmbientOcclusionMapRow.add( materialAmbientOcclusionMapEnabled );
+	materialAmbientOcclusionMapRow.add( materialAmbientOcclusionMap );
+	materialAmbientOcclusionMapRow.add( materialAmbientOcclusionScale );
+
+	container.add( materialAmbientOcclusionMapRow );
+
 	// side
 	// side
 
 
 	var materialSideRow = new UI.Panel();
 	var materialSideRow = new UI.Panel();
@@ -574,6 +600,41 @@ Sidebar.Material = function ( editor ) {
 
 
 			}
 			}
 
 
+
+			if ( material.lightMap !== undefined ) {
+
+				var lightMapEnabled = materialLightMapEnabled.getValue() === true;
+
+				if ( objectHasUvs ) {
+
+					material.lightMap = specularMapEnabled ? materialLightMap.getValue() : null;
+					material.needsUpdate = true;
+
+				} else {
+
+					if ( lightMapEnabled ) textureWarning = true;
+
+				}
+
+			}
+
+			if ( material.ambientOcclusionMap !== undefined ) {
+
+				var ambientOcclusionMapEnabled = materialAmbientOcclusionMapEnabled.getValue() === true;
+
+				if ( objectHasUvs ) {
+
+					material.ambientOcclusionMap = ambientOcclusionMapEnabled ? materialAmbientOcclusionMap.getValue() : null;
+					material.ambientOcclusionScale = materialAmbientOcclusionScale.getValue();
+					material.needsUpdate = true;
+
+				} else {
+
+					if ( ambientOcclusionMapEnabled ) textureWarning = true;
+
+				}
+
+			}
 			if ( material.side !== undefined ) {
 			if ( material.side !== undefined ) {
 
 
 				material.side = parseInt( materialSide.getValue() );
 				material.side = parseInt( materialSide.getValue() );
@@ -650,6 +711,8 @@ Sidebar.Material = function ( editor ) {
 			'normalMap': materialNormalMapRow,
 			'normalMap': materialNormalMapRow,
 			'specularMap': materialSpecularMapRow,
 			'specularMap': materialSpecularMapRow,
 			'envMap': materialEnvMapRow,
 			'envMap': materialEnvMapRow,
+			'lightMap': materialLightMapRow,
+			'ambientOcclusionMap': materialAmbientOcclusionMapRow,
 			'side': materialSideRow,
 			'side': materialSideRow,
 			'shading': materialShadingRow,
 			'shading': materialShadingRow,
 			'blending': materialBlendingRow,
 			'blending': materialBlendingRow,
@@ -799,6 +862,21 @@ Sidebar.Material = function ( editor ) {
 
 
 			}
 			}
 
 
+			if ( material.ambientOcclusionMap !== undefined ) {
+
+				materialAmbientOcclusionMapEnabled.setValue( material.ambientOcclusionMap !== null );
+				materialAmbientOcclusionMap.setValue( material.ambientOcclusionMap );
+				materialAmbientOcclusionScale.setValue( material.ambientOcclusionScale );
+
+			}
+
+			if ( material.lightMap !== undefined ) {
+
+				materialLightMapEnabled.setValue( material.lightMap !== null );
+				materialLightMap.setValue( material.lightMap );
+
+			}
+
 			if ( material.side !== undefined ) {
 			if ( material.side !== undefined ) {
 
 
 				materialSide.setValue( material.side );
 				materialSide.setValue( material.side );

+ 3 - 1
src/loaders/ObjectLoader.js

@@ -283,7 +283,9 @@ THREE.ObjectLoader.prototype = {
 				if ( data.ambientOcclusionMap !== undefined ) {
 				if ( data.ambientOcclusionMap !== undefined ) {
 
 
 					material.ambientOcclusionMap = getTexture( data.ambientOcclusionMap );
 					material.ambientOcclusionMap = getTexture( data.ambientOcclusionMap );
-
+					if ( data.ambientOcclusionScale ) {
+						material.ambientOcclusionScale = data.ambientOcclusionScale;
+					}
 				}
 				}
 
 
 				if ( data.specularMap !== undefined ) {
 				if ( data.specularMap !== undefined ) {

+ 2 - 0
src/materials/MeshBasicMaterial.js

@@ -48,6 +48,7 @@ THREE.MeshBasicMaterial = function ( parameters ) {
 
 
 	this.lightMap = null;
 	this.lightMap = null;
 	this.ambientOcclusionMap = null;
 	this.ambientOcclusionMap = null;
+	this.ambientOcclusionScale = 1.0;
 
 
 	this.specularMap = null;
 	this.specularMap = null;
 
 
@@ -91,6 +92,7 @@ THREE.MeshBasicMaterial.prototype.clone = function () {
 
 
 	material.lightMap = this.lightMap;
 	material.lightMap = this.lightMap;
 	material.ambientOcclusionMap = this.ambientOcclusionMap;
 	material.ambientOcclusionMap = this.ambientOcclusionMap;
+	material.ambientOcclusionScale = this.ambientOcclusionScale;
 
 
 	material.specularMap = this.specularMap;
 	material.specularMap = this.specularMap;
 
 

+ 3 - 0
src/materials/MeshLambertMaterial.js

@@ -55,6 +55,7 @@ THREE.MeshLambertMaterial = function ( parameters ) {
 
 
 	this.lightMap = null;
 	this.lightMap = null;
 	this.ambientOcclusionMap = null;
 	this.ambientOcclusionMap = null;
+	this.ambientOcclusionScale = 1.0;
 
 
 	this.specularMap = null;
 	this.specularMap = null;
 
 
@@ -103,6 +104,8 @@ THREE.MeshLambertMaterial.prototype.clone = function () {
 
 
 	material.lightMap = this.lightMap;
 	material.lightMap = this.lightMap;
 	material.ambientOcclusionMap = this.ambientOcclusionMap;
 	material.ambientOcclusionMap = this.ambientOcclusionMap;
+	material.ambientOcclusionScale = this.ambientOcclusionScale;
+	material.ambientOcclusionScale = this.ambientOcclusionScale;
 
 
 	material.specularMap = this.specularMap;
 	material.specularMap = this.specularMap;
 
 

+ 2 - 0
src/materials/MeshPhongMaterial.js

@@ -67,6 +67,7 @@ THREE.MeshPhongMaterial = function ( parameters ) {
 
 
 	this.lightMap = null;
 	this.lightMap = null;
 	this.ambientOcclusionMap = null;
 	this.ambientOcclusionMap = null;
+	this.ambientOcclusionScale = 1.0;
 
 
 	this.bumpMap = null;
 	this.bumpMap = null;
 	this.bumpScale = 1;
 	this.bumpScale = 1;
@@ -125,6 +126,7 @@ THREE.MeshPhongMaterial.prototype.clone = function () {
 
 
 	material.lightMap = this.lightMap;
 	material.lightMap = this.lightMap;
 	material.ambientOcclusionMap = this.ambientOcclusionMap;
 	material.ambientOcclusionMap = this.ambientOcclusionMap;
+	material.ambientOcclusionScale = this.ambientOcclusionScale;
 
 
 	material.bumpMap = this.bumpMap;
 	material.bumpMap = this.bumpMap;
 	material.bumpScale = this.bumpScale;
 	material.bumpScale = this.bumpScale;

+ 1 - 0
src/renderers/WebGLRenderer.js

@@ -4597,6 +4597,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 		uniforms.map.value = material.map;
 		uniforms.map.value = material.map;
 		uniforms.lightMap.value = material.lightMap;
 		uniforms.lightMap.value = material.lightMap;
 		uniforms.ambientOcclusionMap.value = material.ambientOcclusionMap;
 		uniforms.ambientOcclusionMap.value = material.ambientOcclusionMap;
+		uniforms.ambientOcclusionScale.value = material.ambientOcclusionScale;
 		uniforms.specularMap.value = material.specularMap;
 		uniforms.specularMap.value = material.specularMap;
 		uniforms.alphaMap.value = material.alphaMap;
 		uniforms.alphaMap.value = material.alphaMap;
 
 

+ 1 - 1
src/renderers/shaders/ShaderChunk/ambientocclusionmap_fragment.glsl

@@ -1,5 +1,5 @@
 #ifdef USE_AMBIENTOCCLUSIONMAP
 #ifdef USE_AMBIENTOCCLUSIONMAP
 
 
-	outgoingLight *= texture2D( ambientOcclusionMap, vUv2 ).xyz;
+	outgoingLight *= ( texture2D( ambientOcclusionMap, vUv2 ).r - 1.0 ) * ambientOcclusionScale + 1.0;
 
 
 #endif
 #endif

+ 1 - 0
src/renderers/shaders/ShaderChunk/ambientocclusionmap_pars_fragment.glsl

@@ -1,5 +1,6 @@
 #ifdef USE_AMBIENTOCCLUSIONMAP
 #ifdef USE_AMBIENTOCCLUSIONMAP
 
 
 	uniform sampler2D ambientOcclusionMap;
 	uniform sampler2D ambientOcclusionMap;
+	uniform float ambientOcclusionScale;
 
 
 #endif
 #endif

+ 3 - 0
src/renderers/shaders/UniformsLib.js

@@ -13,7 +13,10 @@ THREE.UniformsLib = {
 		"offsetRepeat" : { type: "v4", value: new THREE.Vector4( 0, 0, 1, 1 ) },
 		"offsetRepeat" : { type: "v4", value: new THREE.Vector4( 0, 0, 1, 1 ) },
 
 
 		"lightMap" : { type: "t", value: null },
 		"lightMap" : { type: "t", value: null },
+
 		"ambientOcclusionMap" : { type: "t", value: null },
 		"ambientOcclusionMap" : { type: "t", value: null },
+		"ambientOcclusionScale" : { type: "f", value: 1 },
+
 		"specularMap" : { type: "t", value: null },
 		"specularMap" : { type: "t", value: null },
 		"alphaMap" : { type: "t", value: null },
 		"alphaMap" : { type: "t", value: null },