Przeglądaj źródła

Moved light sorting to renderer from shader module, fixed light sorting, renamed area lights to point lights everywhere in the code base, added light importance option to SceneLight prop sheet in entity editor, light importance now saved and loaded into entity instances

Ivan Safrin 12 lat temu
rodzic
commit
dffed96631

BIN
Assets/Default asset pack/default.pak


+ 10 - 10
Assets/Default asset pack/default/default.mat

@@ -1,43 +1,43 @@
 <?xml version="1.0" ?>
 <polycode>	
 	<shaders>		
-		<shader type="glsl" name="DefaultShader" numAreaLights="4" numSpotLights="2">		
+		<shader type="glsl" name="DefaultShader" numPointLights="4" numSpotLights="2">		
 			<vp source="default/DefaultShader.vert"/>
 			<fp source="default/DefaultShader.frag"/>
 		</shader>	
-		<shader type="glsl" name="DefaultShaderNoTexture" numAreaLights="4" numSpotLights="2">	
+		<shader type="glsl" name="DefaultShaderNoTexture" numPointLights="4" numSpotLights="2">	
 			<vp source="default/DefaultShader.vert"/>
 			<fp source="default/DefaultShaderNoTexture.frag"/>
 		</shader>
-		<shader type="glsl" name="DefaultShaderShadows" numAreaLights="4" numSpotLights="2">		
+		<shader type="glsl" name="DefaultShaderShadows" numPointLights="4" numSpotLights="2">		
 			<vp source="default/DefaultShaderShadows.vert"/>
 			<fp source="default/DefaultShaderShadows.frag"/>
 		</shader>		
-		<shader type="glsl" name="DefaultShaderVertex" numAreaLights="4" numSpotLights="2">		
+		<shader type="glsl" name="DefaultShaderVertex" numPointLights="4" numSpotLights="2">		
 			<vp source="default/DefaultShaderVertex.vert"/>
 			<fp source="default/DefaultShaderVertex.frag"/>
 		</shader>			
-		<shader type="glsl" name="DefaultShaderVertexNoTexture" numAreaLights="4" numSpotLights="2">		
+		<shader type="glsl" name="DefaultShaderVertexNoTexture" numPointLights="4" numSpotLights="2">		
 			<vp source="default/DefaultShaderVertex.vert"/>
 			<fp source="default/DefaultShaderVertexNoTexture.frag"/>
 		</shader>
-		<shader type="glsl" name="DefaultParticleShader" numAreaLights="4" numSpotLights="2">		
+		<shader type="glsl" name="DefaultParticleShader" numPointLights="4" numSpotLights="2">		
 			<vp source="default/DefaultShader.vert"/>
 			<fp source="default/DefaultParticleShader.frag"/>
 		</shader>															
-		<shader type="glsl" name="Unlit" numAreaLights="0" numSpotLights="0">		
+		<shader type="glsl" name="Unlit" numPointLights="0" numSpotLights="0">		
 			<vp source="default/Unlit.vert"/>
 			<fp source="default/Unlit.frag"/>
 		</shader>
-		<shader type="glsl" name="UnlitUntextured" numAreaLights="0" numSpotLights="0">		
+		<shader type="glsl" name="UnlitUntextured" numPointLights="0" numSpotLights="0">		
 			<vp source="default/Unlit.vert"/>
 			<fp source="default/UnlitUntextured.frag"/>
 		</shader>		
-		<shader type="glsl" name="LightCube" numAreaLights="0" numSpotLights="0">		
+		<shader type="glsl" name="LightCube" numPointLights="0" numSpotLights="0">		
 			<vp source="default/DefaultShader.vert"/>
 			<fp source="default/LightCube.frag"/>
 		</shader>		
-		<shader type="glsl" name="NorColSpec" numAreaLights="4" numSpotLights="2">		
+		<shader type="glsl" name="NorColSpec" numPointLights="4" numSpotLights="2">		
 			<vp source="default/NormalShader.vert"/>
 			<fp source="default/NorColSpec.frag"/>
 		</shader>

BIN
Assets/Default asset pack/hdr.pak


+ 2 - 2
Assets/Default asset pack/hdr/hdr.mat

@@ -1,11 +1,11 @@
 <?xml version="1.0" ?>
 <polycode>	
 	<shaders>
-		<shader type="glsl" name="NorColSpecHDR" numAreaLights="4" numSpotLights="2">		
+		<shader type="glsl" name="NorColSpecHDR" numPointLights="4" numSpotLights="2">		
 			<vp source="default/NormalShader.vert"/>
 			<fp source="hdr/NorColSpecHDR.frag"/>
 		</shader>
-		<shader type="glsl" name="DefaultShaderNoTextureHDR" numAreaLights="4" numSpotLights="2">	
+		<shader type="glsl" name="DefaultShaderNoTextureHDR" numPointLights="4" numSpotLights="2">	
 			<vp source="default/DefaultShader.vert"/>
 			<fp source="hdr/DefaultShaderNoTextureHDR.frag"/>
 		</shader>		

+ 8 - 13
Core/Contents/Include/PolyRenderer.h

@@ -65,12 +65,11 @@ namespace Polycode {
 	class _PolyExport LightSorter : public PolyBase {
 		public:
 			Vector3 basePosition;
-			Matrix4 cameraMatrix;
-			bool operator() (LightInfo i,LightInfo j) {
+			bool operator() (LightInfo i,LightInfo j) {                
 				if(i.lightImportance > j.lightImportance)
 					return true;
 				if(i.lightImportance == j.lightImportance)
-					return ((cameraMatrix*i.position).distance(basePosition)<(cameraMatrix*j.position).distance(basePosition));
+					return i.position.distance(basePosition) < j.position.distance(basePosition);
 				return false; 
 			}
 	};
@@ -164,10 +163,7 @@ namespace Polycode {
 				
 		virtual void multModelviewMatrix(Matrix4 m) = 0;
 		virtual void setModelviewMatrix(Matrix4 m) = 0;
-		
-		void setCurrentModelMatrix(Matrix4 m) { currentModelMatrix = m; }
-		Matrix4 getCurrentModelMatrix() { return currentModelMatrix; }
-		
+				
 		virtual void setBlendingMode(int blendingMode) = 0;	
 			
 		virtual void applyMaterial(Material *material, ShaderBinding *localOptions, unsigned int shaderIndex, bool forceMaterial);
@@ -236,7 +232,7 @@ namespace Polycode {
 		virtual void cullFrontFaces(bool val) = 0;
 		
 		void clearLights();
-		void addLight(int lightImportance, Vector3 position, Vector3 direction, int type, Color color, Color specularColor, Number constantAttenuation, Number linearAttenuation, Number quadraticAttenuation, Number intensity, Number spotlightCutoff, Number spotlightExponent, bool shadowsEnabled, Matrix4 *textureMatrix, Texture *shadowMapTexture);
+		void addLight(int lightImportance, const Vector3 &position, const Vector3 &direction, int type, const Color &color, const Color &specularColor, Number constantAttenuation, Number linearAttenuation, Number quadraticAttenuation, Number intensity, Number spotlightCutoff, Number spotlightExponent, bool shadowsEnabled, Matrix4 *textureMatrix, Texture *shadowMapTexture);
 		
 		void setExposureLevel(Number level);
 		
@@ -286,11 +282,11 @@ namespace Polycode {
 		
 		void sortLights();
 		
-		int getNumAreaLights() { return numAreaLights; }
+		int getNumPointLights() { return numPointLights; }
 		int getNumSpotLights() { return numSpotLights; }
 		int getNumLights() { return numLights; }
 		
-		std::vector<LightInfo> getAreaLights() { return areaLights; }
+		std::vector<LightInfo> getPointLights() { return pointLights; }
 		std::vector<LightInfo> getSpotLights() { return spotLights;	}
 		
 		bool doClearBuffer;
@@ -323,7 +319,6 @@ namespace Polycode {
 		Polycode::Rectangle scissorBox;
 	
 		Number anisotropy;
-		Matrix4 currentModelMatrix;
 		LightSorter sorter;	
 	
 		Number viewportWidth;
@@ -345,10 +340,10 @@ namespace Polycode {
 		std::vector <PolycodeShaderModule*> shaderModules;
 
 		std::vector<LightInfo> lights;
-		std::vector<LightInfo> areaLights;
+		std::vector<LightInfo> pointLights;
 		std::vector<LightInfo> spotLights;
 		int numLights;
-		int numAreaLights;
+		int numPointLights;
 		int numSpotLights;
 		
 		bool shadersEnabled;

+ 0 - 1
Core/Contents/Include/PolyScene.h

@@ -147,7 +147,6 @@ namespace Polycode {
 		* @param light Light to remove from the scene.
 		*/		
 		void removeLight(SceneLight *light);		
-		SceneLight *getNearestLight(Vector3 pos);
 				
 		int getNumLights();
 		SceneLight *getLight(int index);

+ 1 - 1
Core/Contents/Include/PolySceneLight.h

@@ -34,7 +34,7 @@ namespace Polycode {
 //	class ScenePrimitive;
 	
 	/**
-	* 3D light source. Lights can be area or spot lights and can be set to different colors. 
+	* 3D light source. Lights can be point or spot lights and can be set to different colors. 
 	*/
 	class _PolyExport SceneLight : public Entity {
 		public:

+ 1 - 1
Core/Contents/Include/PolyShader.h

@@ -99,7 +99,7 @@ namespace Polycode {
 			static const int MODULE_SHADER = 1;
 
 			int numSpotLights;
-			int numAreaLights;
+			int numPointLights;
 			
 			std::vector<String> expectedTextures;
 			std::vector<String> expectedCubemaps;			

+ 1 - 4
Core/Contents/Source/PolyEntity.cpp

@@ -500,12 +500,9 @@ void Entity::transformAndRender() {
 	renderer->pushMatrix();
 	if(ignoreParentMatrix && parentEntity) {
 		renderer->multModelviewMatrix(parentEntity->getConcatenatedMatrix().Inverse());
-//		renderer->setCurrentModelMatrix(parentEntity->getConcatenatedMatrix().Inverse());
 	}
 
-		renderer->multModelviewMatrix(transformMatrix);
-		renderer->setCurrentModelMatrix(transformMatrix);
-		
+    renderer->multModelviewMatrix(transformMatrix);
 	renderer->setVertexColor(color.r,color.g,color.b,color.a);
 	
 	if(billboardMode) {

+ 11 - 15
Core/Contents/Source/PolyGLSLShaderModule.cpp

@@ -240,17 +240,12 @@ bool GLSLShaderModule::applyShaderMaterial(Renderer *renderer, Material *materia
 
 	glPushMatrix();
 	glLoadIdentity();
-	
-	
-	int numRendererAreaLights = renderer->getNumAreaLights();
+		
+	int numRendererPointLights = renderer->getNumPointLights();
 	int numRendererSpotLights = renderer->getNumSpotLights();
 	
-	int numTotalLights = glslShader->numAreaLights + glslShader->numSpotLights;
-	
-	if(numTotalLights > 0) {
-		renderer->sortLights();	
-	}
-	
+	int numTotalLights = glslShader->numPointLights + glslShader->numSpotLights;
+		
 	for(int i=0 ; i < numTotalLights; i++) {
 		GLfloat resetData[] = {0.0, 0.0, 0.0, 0.0};				
 		glLightfv (GL_LIGHT0+i, GL_DIFFUSE, resetData);	
@@ -265,13 +260,13 @@ bool GLSLShaderModule::applyShaderMaterial(Renderer *renderer, Material *materia
 	
 	int lightIndex = 0;
 	
-	vector<LightInfo> areaLights = renderer->getAreaLights();
+	vector<LightInfo> pointLights = renderer->getPointLights();
 		
 	GLfloat ambientVal[] = {1, 1, 1, 1.0};				
-	for(int i=0; i < glslShader->numAreaLights; i++) {
+	for(int i=0; i < glslShader->numPointLights; i++) {
 		LightInfo light;
-		if(i < numRendererAreaLights) {
-			light = areaLights[i];
+		if(i < numRendererPointLights) {
+			light = pointLights[i];
 			light.position = renderer->getCameraMatrix().Inverse() * light.position;
 			ambientVal[0] = renderer->ambientColor.r;
 			ambientVal[1] = renderer->ambientColor.g;
@@ -410,7 +405,8 @@ bool GLSLShaderModule::applyShaderMaterial(Renderer *renderer, Material *materia
 	glPopMatrix();
 		
 	glEnable(GL_TEXTURE_2D);
-		
+
+/*
 	Matrix4 modelMatrix = renderer->getCurrentModelMatrix();
 	int mloc = glGetUniformLocation(glslShader->shader_id, "modelMatrix");				
 	GLfloat mat[16];
@@ -418,7 +414,7 @@ bool GLSLShaderModule::applyShaderMaterial(Renderer *renderer, Material *materia
 		mat[z] = modelMatrix.ml[z];
 	}
 	glUniformMatrix4fv(mloc, 1, false, mat);
-		
+*/
 		
 	ShaderBinding *cgBinding = material->getShaderBinding(shaderIndex);
 	

+ 5 - 5
Core/Contents/Source/PolyMaterialManager.cpp

@@ -220,7 +220,7 @@ Shader *MaterialManager::createShader(ResourcePool *resourcePool, String shaderT
 	
 	if(retShader) {
 		retShader->screenShader = screenShader;
-		retShader->numAreaLights = 0;
+		retShader->numPointLights = 0;
 		retShader->numSpotLights = 0;
         retShader->setResourceName(name);        
 	}
@@ -247,11 +247,11 @@ Shader *MaterialManager::createShaderFromXMLNode(ResourcePool *resourcePool, TiX
 	if (!retShader)
 		return NULL;
 
-	int numAreaLights = 0;
+	int numPointLights = 0;
 	int numSpotLights = 0;
 		
-	if(nodeElement->Attribute("numAreaLights")) {
-		numAreaLights = atoi(nodeElement->Attribute("numAreaLights"));
+	if(nodeElement->Attribute("numPointLights")) {
+		numPointLights = atoi(nodeElement->Attribute("numPointLights"));
 	}
 	if(nodeElement->Attribute("numSpotLights")) {
 		numSpotLights = atoi(nodeElement->Attribute("numSpotLights"));
@@ -266,7 +266,7 @@ Shader *MaterialManager::createShaderFromXMLNode(ResourcePool *resourcePool, TiX
 	}
 	
 	if(retShader) {
-		retShader->numAreaLights = numAreaLights;
+		retShader->numPointLights = numPointLights;
 		retShader->numSpotLights = numSpotLights;		
 	}	
 	

+ 14 - 13
Core/Contents/Source/PolyRenderer.cpp

@@ -37,7 +37,7 @@ Renderer::Renderer() : clearColor(0.2, 0.2, 0.2, 0.0), currentTexture(NULL), lig
 	shadersEnabled = true;
 	currentMaterial = NULL;
 	numLights = 0;
-	numAreaLights = 0;
+	numPointLights = 0;
 	numSpotLights = 0;	
 	exposureLevel = 1;
 	shadersEnabled = true;
@@ -98,10 +98,10 @@ void Renderer::setCameraMatrix(const Matrix4& matrix) {
 
 void Renderer::clearLights() {
 	numLights = 0;
-	numAreaLights = 0;
+	numPointLights = 0;
 	numSpotLights = 0;	
 	lights.clear();
-	areaLights.clear();
+	pointLights.clear();
 	spotLights.clear();
 }
 
@@ -114,14 +114,12 @@ void Renderer::addShaderModule(PolycodeShaderModule *module) {
 }
 
 void Renderer::sortLights(){
-
-	sorter.basePosition = (getModelviewMatrix()).getPosition();
-	sorter.cameraMatrix = getCameraMatrix().Inverse();	
-	sort (areaLights.begin(), areaLights.end(), sorter);
+    sorter.basePosition = (getModelviewMatrix() * cameraMatrix).getPosition();
+	sort (pointLights.begin(), pointLights.end(), sorter);
 	sort (spotLights.begin(), spotLights.end(), sorter);	
 }
 
-void Renderer::addLight(int lightImportance, Vector3 position, Vector3 direction, int type, Color color, Color specularColor, Number constantAttenuation, Number linearAttenuation, Number quadraticAttenuation, Number intensity, Number spotlightCutoff, Number spotlightExponent, bool shadowsEnabled, Matrix4 *textureMatrix,Texture *shadowMapTexture) {
+void Renderer::addLight(int lightImportance, const Vector3 &position, const Vector3 &direction, int type, const Color &color, const Color &specularColor, Number constantAttenuation, Number linearAttenuation, Number quadraticAttenuation, Number intensity, Number spotlightCutoff, Number spotlightExponent, bool shadowsEnabled, Matrix4 *textureMatrix,Texture *shadowMapTexture) {
 
 	numLights++;
 	
@@ -147,9 +145,9 @@ void Renderer::addLight(int lightImportance, Vector3 position, Vector3 direction
 	info.position = position;
 	lights.push_back(info);
 	switch(type) {
-		case 0: //area light
-			areaLights.push_back(info);
-			numAreaLights++;
+		case 0: //point light
+			pointLights.push_back(info);
+			numPointLights++;
 		break;
 		case 1: //spot light
 			spotLights.push_back(info);			
@@ -267,13 +265,16 @@ void Renderer::applyMaterial(Material *material,  ShaderBinding *localOptions,un
 	}
 	
 	FixedShaderBinding *fBinding;
+    
+    Shader *shader = material->getShader(shaderIndex);
+	if(shader->numPointLights + shader->numSpotLights > 0) {
+		sortLights();
+	}
 	
 	switch(material->getShader(shaderIndex)->getType()) {
 		case Shader::FIXED_SHADER:
-            //			FixedShader *fShader = (FixedShader*)material->getShader();
 			fBinding = (FixedShaderBinding*)material->getShaderBinding(shaderIndex);
 			setTexture(fBinding->getDiffuseTexture());
-            //			setTexture(fShader->getDiffuseTexture());
             break;
 		case Shader::MODULE_SHADER:
 			currentMaterial = material;

+ 0 - 7
Core/Contents/Source/PolyScene.cpp

@@ -374,13 +374,6 @@ void Scene::removeLight(SceneLight *light) {
 	}
 }
 
-SceneLight *Scene::getNearestLight(Vector3 pos) {
-	if(lights.size() > 0)
-		return lights[0];
-	else
-		return NULL;
-}
-
 int Scene::getNumLights() {
 	return lights.size();
 }

+ 5 - 0
Core/Contents/Source/PolySceneEntityInstance.cpp

@@ -348,6 +348,11 @@ Entity *SceneEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry, Entit
                 
                 newLight->setIntensity((*lightEntry)["intensity"]->NumberVal);
                 
+                ObjectEntry *importanceEntry = (*lightEntry)["importance"];
+                if(importanceEntry) {
+                    newLight->setLightImportance(importanceEntry->intVal);
+                }
+                
                 newLight->lightColor.setColor((*lightEntry)["cR"]->NumberVal, (*lightEntry)["cG"]->NumberVal, (*lightEntry)["cB"]->NumberVal, (*lightEntry)["cA"]->NumberVal);
                 newLight->specularLightColor.setColor((*lightEntry)["scR"]->NumberVal, (*lightEntry)["scG"]->NumberVal, (*lightEntry)["scB"]->NumberVal, (*lightEntry)["scA"]->NumberVal);
 

+ 1 - 0
Core/Contents/Source/PolySceneMesh.cpp

@@ -349,6 +349,7 @@ void SceneMesh::Render() {
 	renderer->setPointSmooth(pointSmooth);
 	
 	if(material) {
+        
 		renderer->applyMaterial(material, localShaderOptions,0, forceMaterial);
 	} else {
 		if(texture)

+ 1 - 1
Core/Contents/Source/PolyShader.cpp

@@ -250,7 +250,7 @@ RenderTargetBinding *ShaderBinding::getDepthTargetBinding(unsigned int index) {
 
 Shader::Shader(int type) : Resource(Resource::RESOURCE_SHADER) {
 	numSpotLights = 0;
-	numAreaLights = 0;
+	numPointLights = 0;
 	this->type = type;
 	vp = NULL;
 	fp = NULL;

+ 1 - 1
IDE/Contents/Include/PolycodeMaterialEditor.h

@@ -240,7 +240,7 @@ class ShaderEditorPane : public UIElement {
 		BoolProp *screenShaderProp;
 	
 		
-		NumberProp *areaLightsProp;
+		NumberProp *pointLightsProp;
 		NumberProp *spotLightsProp;		
 };
 

+ 1 - 0
IDE/Contents/Include/PolycodeProps.h

@@ -661,6 +661,7 @@ class SceneLightSheet : public PropSheet {
         SceneLight *light;
     
         ComboProp *typeProp;
+        NumberProp *importanceProp;
         ColorProp *lightColorProp;
         ColorProp *specularColorProp;
         NumberProp *intensityProp;

+ 2 - 1
IDE/Contents/Source/PolycodeEntityEditor.cpp

@@ -1691,7 +1691,8 @@ void PolycodeEntityEditor::saveEntityToObjectEntry(Entity *entity, ObjectEntry *
         lightEntry->addChild("scA", light->specularLightColor.a);
 
         lightEntry->addChild("intensity", light->getIntensity());
-
+        lightEntry->addChild("importance", light->getLightImportance());
+        
         lightEntry->addChild("cAtt", light->getConstantAttenuation());
         lightEntry->addChild("lAtt", light->getLinearAttenuation());
         lightEntry->addChild("qAtt", light->getQuadraticAttenuation());

+ 7 - 7
IDE/Contents/Source/PolycodeMaterialEditor.cpp

@@ -356,9 +356,9 @@ ShaderEditorPane::ShaderEditorPane(ResourcePool *resourcePool) : UIElement() {
 	baseProps->addProp(fragmentProgramProp);	
 	fragmentProgramProp->addEventListener(this, Event::CHANGE_EVENT);	
 	
-	areaLightsProp = new NumberProp("Num area lights");
-	baseProps->addProp(areaLightsProp);	
-	areaLightsProp->addEventListener(this, Event::CHANGE_EVENT);
+	pointLightsProp = new NumberProp("Num point lights");
+	baseProps->addProp(pointLightsProp);
+	pointLightsProp->addEventListener(this, Event::CHANGE_EVENT);
 
 	spotLightsProp = new NumberProp("Num spotlights");
 	baseProps->addProp(spotLightsProp);	
@@ -388,8 +388,8 @@ void ShaderEditorPane::handleEvent(Event *event) {
 			dispatchEvent(new Event(), Event::CHANGE_EVENT);			
 		}
 				
-		if(event->getDispatcher() == areaLightsProp) {
-			currentShader->numAreaLights = floor(areaLightsProp->get());
+		if(event->getDispatcher() == pointLightsProp) {
+			currentShader->numPointLights = floor(pointLightsProp->get());
 			dispatchEvent(new Event(), Event::CHANGE_EVENT);
 		}
 
@@ -504,7 +504,7 @@ void ShaderEditorPane::setShader(Shader *shader) {
 	
 	screenShaderProp->set(shader->screenShader);
 	
-	areaLightsProp->set(shader->numAreaLights);
+	pointLightsProp->set(shader->numPointLights);
 	spotLightsProp->set(shader->numSpotLights);
 	
 	enabled = true;
@@ -1350,7 +1350,7 @@ void PolycodeMaterialEditor::saveFile() {
 		ObjectEntry *shaderEntry = shadersEntry->addChild("shader");
 		shaderEntry->addChild("type", String("glsl"));
 		shaderEntry->addChild("name", shaders[i]->getName());
-		shaderEntry->addChild("numAreaLights", shaders[i]->numAreaLights);
+		shaderEntry->addChild("numPointLights", shaders[i]->numPointLights);
 		shaderEntry->addChild("numSpotLights", shaders[i]->numSpotLights);
 		shaderEntry->addChild("screen", shaders[i]->screenShader);
 

+ 7 - 0
IDE/Contents/Source/PolycodeProps.cpp

@@ -2507,6 +2507,9 @@ SceneLightSheet::SceneLightSheet() : PropSheet("LIGHT", "scene_light") {
     typeProp->comboEntry->addComboItem("Spot");
     addProp(typeProp);
     
+    importanceProp = new NumberProp("Importance");
+    addProp(importanceProp);
+    
     lightColorProp = new ColorProp("Light color");
     addProp(lightColorProp);
     
@@ -2588,6 +2591,8 @@ void SceneLightSheet::setSceneLight(SceneLight *light) {
         linearAttenuationProp->set(light->getLinearAttenuation());
         quadraticAttenuationProp->set(light->getQuadraticAttenuation());
         
+        importanceProp->set(light->getLightImportance());
+        
         spotlightCutoffProp->set(light->getSpotlightCutoff());
         spotlightExponentProp->set(light->getSpotlightExponent());
         
@@ -2633,6 +2638,8 @@ void SceneLightSheet::handleEvent(Event *event) {
             light->setSpotlightProperties(spotlightCutoffProp->get(), light->getSpotlightExponent());
         } else if(event->getDispatcher() == spotlightExponentProp) {
             light->setSpotlightProperties(light->getSpotlightCutoff(), spotlightExponentProp->get());
+        } else if(event->getDispatcher() == importanceProp) {
+            light->setLightImportance(importanceProp->get());
         }
 
         updateOptionVisibility();