From fedb42d0bb8bd0e93a3df01eb4ef7735b4834cb4 Mon Sep 17 00:00:00 2001 From: Sumit Date: Thu, 22 Sep 2016 15:07:32 -0400 Subject: [PATCH 1/3] added shadows property to cesium3dtileset, batched3dmodel, and instanced3dmodel --- Source/Scene/Batched3DModel3DTileContent.js | 2 ++ Source/Scene/Cesium3DTileset.js | 15 +++++++++++++-- Source/Scene/Instanced3DModel3DTileContent.js | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Source/Scene/Batched3DModel3DTileContent.js b/Source/Scene/Batched3DModel3DTileContent.js index 881326e54a6c..e335a7e0725b 100644 --- a/Source/Scene/Batched3DModel3DTileContent.js +++ b/Source/Scene/Batched3DModel3DTileContent.js @@ -258,6 +258,7 @@ define([ releaseGltfJson : true, // Models are unique and will not benefit from caching so save memory basePath : this._url, modelMatrix : this._tile.computedTransform, + shadows: this._tileset.shadows, vertexShaderLoaded : batchTable.getVertexShaderCallback(), fragmentShaderLoaded : batchTable.getFragmentShaderCallback(), uniformMapLoaded : batchTable.getUniformMapCallback(), @@ -303,6 +304,7 @@ define([ // actually generate commands. this.batchTable.update(tileset, frameState); this._model.modelMatrix = this._tile.computedTransform; + this._model.shadows = this._tileset.shadows; this._model.update(frameState); frameState.addCommand = oldAddCommand; diff --git a/Source/Scene/Cesium3DTileset.js b/Source/Scene/Cesium3DTileset.js index e80c8f1d8a8a..6c308ca537b5 100644 --- a/Source/Scene/Cesium3DTileset.js +++ b/Source/Scene/Cesium3DTileset.js @@ -26,7 +26,8 @@ define([ './Cesium3DTileStyleEngine', './CullingVolume', './DebugCameraPrimitive', - './SceneMode' + './SceneMode', + './ShadowMode' ], function( Color, defaultValue, @@ -54,7 +55,8 @@ define([ Cesium3DTileStyleEngine, CullingVolume, DebugCameraPrimitive, - SceneMode) { + SceneMode, + ShadowMode) { 'use strict'; /** @@ -76,6 +78,7 @@ define([ * @param {Boolean} [options.debugColorizeTiles=false] For debugging only. When true, assigns a random color to each tile. * @param {Boolean} [options.debugShowBoundingVolume=false] For debugging only. When true, renders the bounding volume for each tile. * @param {Boolean} [options.debugShowContentBoundingVolume=false] For debugging only. When true, renders the bounding volume for each tile's content. + * @param {ShadowMode} [options.shadows=ShadowMode.ENABLED] Determines whether the tileset casts or receives shadows from each light source. * * @example * var tileset = scene.primitives.add(new Cesium.Cesium3DTileset({ @@ -130,6 +133,14 @@ define([ this._refineToVisible = defaultValue(options.refineToVisible, false); + /** + * Determines whether the tileset casts or receives shadows from each light source. + * + * @type {ShadowMode} + * @default ShadowMode.ENABLED + */ + this.shadows = defaultValue(options.shadows, ShadowMode.ENABLED); + /** * Determines if the tileset will be shown. * diff --git a/Source/Scene/Instanced3DModel3DTileContent.js b/Source/Scene/Instanced3DModel3DTileContent.js index 6df988d56792..34e3317b43a3 100644 --- a/Source/Scene/Instanced3DModel3DTileContent.js +++ b/Source/Scene/Instanced3DModel3DTileContent.js @@ -477,6 +477,7 @@ define([ // actually generate commands. this.batchTable.update(tileset, frameState); this._modelInstanceCollection.transform = this._tile.computedTransform; + this._modelInstanceCollection.shadows = this._tileset.shadows; this._modelInstanceCollection.update(frameState); frameState.addCommand = oldAddCommand; From 43541c436a9bc1e15fcac6a8cc2126c396a7937d Mon Sep 17 00:00:00 2001 From: Sumit Date: Thu, 29 Sep 2016 16:01:24 -0400 Subject: [PATCH 2/3] added clone command for shadows --- Source/Scene/Cesium3DTileBatchTable.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Source/Scene/Cesium3DTileBatchTable.js b/Source/Scene/Cesium3DTileBatchTable.js index 244d3e8d7a55..58e87d497846 100644 --- a/Source/Scene/Cesium3DTileBatchTable.js +++ b/Source/Scene/Cesium3DTileBatchTable.js @@ -783,6 +783,13 @@ define([ derivedCommands.front = deriveTranslucentCommand(command, CullFace.BACK); } + derivedCommands.originalCommand.castShadows = command.castShadows; + derivedCommands.originalCommand.receiveShadows = command.receiveShadows; + derivedCommands.back.castShadows = command.castShadows; + derivedCommands.back.receiveShadows = command.receiveShadows; + derivedCommands.front.castShadows = command.castShadows; + derivedCommands.front.receiveShadows = command.receiveShadows; + // If the command was originally opaque: // * If the styling applied to the tile is all opaque, use the original command // (with one additional uniform needed for the shader). From d56251fb40311fa6168fe6c0e0ff3ee8cc7df941 Mon Sep 17 00:00:00 2001 From: Sumit Date: Mon, 3 Oct 2016 15:17:07 -0400 Subject: [PATCH 3/3] fixed changes undone by merge --- Source/Scene/Batched3DModel3DTileContent.js | 1 + Source/Scene/Cesium3DTileset.js | 1 + 2 files changed, 2 insertions(+) diff --git a/Source/Scene/Batched3DModel3DTileContent.js b/Source/Scene/Batched3DModel3DTileContent.js index 7e78d36ac987..ee3e029e4adb 100644 --- a/Source/Scene/Batched3DModel3DTileContent.js +++ b/Source/Scene/Batched3DModel3DTileContent.js @@ -260,6 +260,7 @@ define([ releaseGltfJson : true, // Models are unique and will not benefit from caching so save memory basePath : this._url, modelMatrix : this._tile.computedTransform, + shadows: this._tileset.shadows, incrementallyLoadTextures : false, vertexShaderLoaded : batchTable.getVertexShaderCallback(), fragmentShaderLoaded : batchTable.getFragmentShaderCallback(), diff --git a/Source/Scene/Cesium3DTileset.js b/Source/Scene/Cesium3DTileset.js index d84944c9e769..e03a74847b9f 100644 --- a/Source/Scene/Cesium3DTileset.js +++ b/Source/Scene/Cesium3DTileset.js @@ -79,6 +79,7 @@ define([ * @param {Boolean} [options.debugShowBoundingVolume=false] For debugging only. When true, renders the bounding volume for each tile. * @param {Boolean} [options.debugShowContentBoundingVolume=false] For debugging only. When true, renders the bounding volume for each tile's content. * @param {Boolean} [options.debugShowViewerRequestVolume=false] For debugging only. When true, renders the viewer request volume for each tile. + * @param {ShadowMode} [options.shadows=ShadowMode.ENABLED] Determines whether the tileset casts or receives shadows from each light source. * * @example * var tileset = scene.primitives.add(new Cesium.Cesium3DTileset({