|
@@ -66,61 +66,12 @@ THREE.WebGLPrograms = function ( renderer, capabilities ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- function allocateLights( lights ) {
|
|
|
-
|
|
|
- var dirLights = 0;
|
|
|
- var pointLights = 0;
|
|
|
- var spotLights = 0;
|
|
|
- var hemiLights = 0;
|
|
|
-
|
|
|
- for ( var l = 0, ll = lights.length; l < ll; l ++ ) {
|
|
|
-
|
|
|
- var light = lights[ l ];
|
|
|
-
|
|
|
- if ( light instanceof THREE.DirectionalLight ) dirLights ++;
|
|
|
- if ( light instanceof THREE.PointLight ) pointLights ++;
|
|
|
- if ( light instanceof THREE.SpotLight ) spotLights ++;
|
|
|
- if ( light instanceof THREE.HemisphereLight ) hemiLights ++;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- return { 'directional': dirLights, 'point': pointLights, 'spot': spotLights, 'hemi': hemiLights };
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- function allocateShadows( lights ) {
|
|
|
-
|
|
|
- var maxShadows = 0;
|
|
|
- var pointLightShadows = 0;
|
|
|
-
|
|
|
- for ( var l = 0, ll = lights.length; l < ll; l ++ ) {
|
|
|
-
|
|
|
- var light = lights[ l ];
|
|
|
-
|
|
|
- if ( light.castShadow === false ) continue;
|
|
|
-
|
|
|
- if ( light instanceof THREE.SpotLight || light instanceof THREE.DirectionalLight ) maxShadows ++;
|
|
|
- if ( light instanceof THREE.PointLight ) {
|
|
|
-
|
|
|
- maxShadows ++;
|
|
|
- pointLightShadows ++;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- return { 'maxShadows': maxShadows, 'pointLightShadows': pointLightShadows };
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
this.getParameters = function ( material, lights, fog, object ) {
|
|
|
|
|
|
var shaderID = shaderIDs[ material.type ];
|
|
|
// heuristics to create shader parameters according to lights in the scene
|
|
|
// (not to blow over maxLights budget)
|
|
|
|
|
|
- var maxLightCount = allocateLights( lights );
|
|
|
- var allocatedShadows = allocateShadows( lights );
|
|
|
var maxBones = allocateBones( object );
|
|
|
var precision = renderer.getPrecision();
|
|
|
|
|
@@ -180,14 +131,15 @@ THREE.WebGLPrograms = function ( renderer, capabilities ) {
|
|
|
maxMorphTargets: renderer.maxMorphTargets,
|
|
|
maxMorphNormals: renderer.maxMorphNormals,
|
|
|
|
|
|
- maxDirLights: maxLightCount.directional,
|
|
|
- maxPointLights: maxLightCount.point,
|
|
|
- maxSpotLights: maxLightCount.spot,
|
|
|
- maxHemiLights: maxLightCount.hemi,
|
|
|
+ maxDirLights: lights.directional.length,
|
|
|
+ maxPointLights: lights.point.length,
|
|
|
+ maxSpotLights: lights.spot.length,
|
|
|
+ maxHemiLights: lights.hemi.length,
|
|
|
+
|
|
|
+ maxShadows: lights.shadows,
|
|
|
+ pointLightShadows: lights.shadowsPointLight,
|
|
|
|
|
|
- maxShadows: allocatedShadows.maxShadows,
|
|
|
- pointLightShadows: allocatedShadows.pointLightShadows,
|
|
|
- shadowMapEnabled: renderer.shadowMap.enabled && object.receiveShadow && allocatedShadows.maxShadows > 0,
|
|
|
+ shadowMapEnabled: renderer.shadowMap.enabled && object.receiveShadow && lights.shadows > 0,
|
|
|
shadowMapType: renderer.shadowMap.type,
|
|
|
shadowMapDebug: renderer.shadowMap.debug,
|
|
|
|