Keylight inheritance mode works.

This commit is contained in:
Nissim Hadar 2017-12-21 19:19:55 -08:00
parent 58c6f8e9c4
commit e974cac177
4 changed files with 57 additions and 13 deletions

View file

@ -165,18 +165,14 @@ void ZoneEntityRenderer::doRender(RenderArgs* args) {
if (_visible) { if (_visible) {
// Finally, push the light visible in the frame // Finally, push the light visible in the frame
if (_keyLightMode == COMPONENT_MODE_ENABLED) { if (_keyLightMode != BACKGROUND_MODE_INHERIT) {
_stage->_currentFrame.pushSunLight(_sunIndex); _stage->_currentFrame.pushSunLight(_sunIndex);
} else if (_keyLightMode == COMPONENT_MODE_DISABLED) {
// DEAL WITH OFF LIGHT
} }
// The ambient light only if it has a valid texture to render with // The ambient light only if it has a valid texture to render with
if (_validAmbientTexture || _validSkyboxTexture) { if (_validAmbientTexture || _validSkyboxTexture) {
if (_ambientLightMode == COMPONENT_MODE_ENABLED) { if (_ambientLightMode != BACKGROUND_MODE_INHERIT) {
_stage->_currentFrame.pushAmbientLight(_ambientIndex); _stage->_currentFrame.pushAmbientLight(_ambientIndex);
} else if (_ambientLightMode == COMPONENT_MODE_DISABLED) {
// DEAL WITH OFF LIGHT
} }
} }
@ -201,7 +197,6 @@ void ZoneEntityRenderer::removeFromScene(const ScenePointer& scene, Transaction&
Parent::removeFromScene(scene, transaction); Parent::removeFromScene(scene, transaction);
} }
void ZoneEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scene, Transaction& transaction, const TypedEntityPointer& entity) { void ZoneEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scene, Transaction& transaction, const TypedEntityPointer& entity) {
DependencyManager::get<EntityTreeRenderer>()->updateZone(entity->getID()); DependencyManager::get<EntityTreeRenderer>()->updateZone(entity->getID());
@ -244,11 +239,11 @@ void ZoneEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scen
updateKeyZoneItemFromEntity(); updateKeyZoneItemFromEntity();
if (sunChanged) { if (sunChanged) {
updateKeySunFromEntity(); updateKeySunFromEntity(entity);
} }
if (sunChanged || skyboxChanged) { if (sunChanged || skyboxChanged) {
updateKeyAmbientFromEntity(); updateKeyAmbientFromEntity(entity);
} }
if (backgroundChanged || skyboxChanged) { if (backgroundChanged || skyboxChanged) {
@ -317,7 +312,9 @@ bool ZoneEntityRenderer::needsRenderUpdateFromTypedEntity(const TypedEntityPoint
return false; return false;
} }
void ZoneEntityRenderer::updateKeySunFromEntity() { void ZoneEntityRenderer::updateKeySunFromEntity(const TypedEntityPointer& entity) {
setKeyLightMode((ComponentMode)entity->getKeyLightMode());
const auto& sunLight = editSunLight(); const auto& sunLight = editSunLight();
sunLight->setType(model::Light::SUN); sunLight->setType(model::Light::SUN);
sunLight->setPosition(_lastPosition); sunLight->setPosition(_lastPosition);
@ -329,7 +326,9 @@ void ZoneEntityRenderer::updateKeySunFromEntity() {
sunLight->setDirection(_keyLightProperties.getDirection()); sunLight->setDirection(_keyLightProperties.getDirection());
} }
void ZoneEntityRenderer::updateKeyAmbientFromEntity() { void ZoneEntityRenderer::updateKeyAmbientFromEntity(const TypedEntityPointer& entity) {
setAmbientLightMode((ComponentMode)entity->getAmbientLightMode());
const auto& ambientLight = editAmbientLight(); const auto& ambientLight = editAmbientLight();
ambientLight->setType(model::Light::AMBIENT); ambientLight->setType(model::Light::AMBIENT);
ambientLight->setPosition(_lastPosition); ambientLight->setPosition(_lastPosition);

View file

@ -46,8 +46,8 @@ protected:
private: private:
void updateKeyZoneItemFromEntity(); void updateKeyZoneItemFromEntity();
void updateKeySunFromEntity(); void updateKeySunFromEntity(const TypedEntityPointer& entity);
void updateKeyAmbientFromEntity(); void updateKeyAmbientFromEntity(const TypedEntityPointer& entity);
void updateHazeFromEntity(const TypedEntityPointer& entity); void updateHazeFromEntity(const TypedEntityPointer& entity);
void updateKeyBackgroundFromEntity(const TypedEntityPointer& entity); void updateKeyBackgroundFromEntity(const TypedEntityPointer& entity);
void updateAmbientMap(); void updateAmbientMap();

View file

@ -28,6 +28,34 @@ static const auto MAX_BIAS = 0.006f;
const LightStage::Index LightStage::INVALID_INDEX { render::indexed_container::INVALID_INDEX }; const LightStage::Index LightStage::INVALID_INDEX { render::indexed_container::INVALID_INDEX };
LightStage::LightStage() { LightStage::LightStage() {
// Add off lights
const LightPointer ambientOffLight { std::make_shared<model::Light>() };
ambientOffLight->setAmbientIntensity(0.0f);
ambientOffLight->setColor(model::Vec3(0.0));
ambientOffLight->setIntensity(0.0f);
ambientOffLight->setType(model::Light::Type::AMBIENT);
_ambientOffLight = addLight(ambientOffLight);
const LightPointer pointOffLight { std::make_shared<model::Light>() };
pointOffLight->setAmbientIntensity(0.0f);
pointOffLight->setColor(model::Vec3(0.0));
pointOffLight->setIntensity(0.0f);
pointOffLight->setType(model::Light::Type::POINT);
_pointOffLight = addLight(pointOffLight);
const LightPointer spotOffLight { std::make_shared<model::Light>() };
spotOffLight->setAmbientIntensity(0.0f);
spotOffLight->setColor(model::Vec3(0.0));
spotOffLight->setIntensity(0.0f);
spotOffLight->setType(model::Light::Type::SPOT);
_spotOffLight = addLight(spotOffLight);
const LightPointer sunOffLight { std::make_shared<model::Light>() };
sunOffLight->setAmbientIntensity(0.0f);
sunOffLight->setColor(model::Vec3(0.0));
sunOffLight->setIntensity(0.0f);
sunOffLight->setType(model::Light::Type::SUN);
_sunOffLight = addLight(sunOffLight);
} }
LightStage::Shadow::Schema::Schema() { LightStage::Shadow::Schema::Schema() {

View file

@ -185,6 +185,11 @@ public:
Frame _currentFrame; Frame _currentFrame;
Index getAmbientOffLight() { return _ambientOffLight; }
Index getPointOffLight() { return _pointOffLight; }
Index getSpotOffLight() { return _spotOffLight; }
Index getSunOffLight() { return _sunOffLight; }
protected: protected:
struct Desc { struct Desc {
@ -199,6 +204,18 @@ protected:
Descs _descs; Descs _descs;
LightMap _lightMap; LightMap _lightMap;
// define off lights
const LightPointer ambientOffLight { std::make_shared<model::Light>() };
const LightPointer pointOffLight { std::make_shared<model::Light>() };
const LightPointer spotOffLight { std::make_shared<model::Light>() };
const LightPointer sunOffLight { std::make_shared<model::Light>() };
Index _ambientOffLight;
Index _pointOffLight;
Index _spotOffLight;
Index _sunOffLight;
}; };
using LightStagePointer = std::shared_ptr<LightStage>; using LightStagePointer = std::shared_ptr<LightStage>;