소스 검색

Fixed spotlight calculation in default shaders, added all default shaders as default materials, added spotlight visualizer to the entity editor, fixed some light prop sheet values

Ivan Safrin 12 년 전
부모
커밋
722a6bc095

BIN
Assets/Default asset pack/default.pak


+ 1 - 1
Assets/Default asset pack/default/DefaultParticleShader.frag

@@ -48,7 +48,7 @@ void spotLight(in int i, in vec3 normal, in vec4 pos, inout vec4 diffuse) {
 	vec3 v = -pos.xyz;
 	vec3 v = -pos.xyz;
 	v = normalize(v);
 	v = normalize(v);
 
 
-	float cos_outer_cone_angle = gl_LightSource[i].spotExponent;
+	float cos_outer_cone_angle = (1.0-gl_LightSource[i].spotExponent) * gl_LightSource[i].spotCosCutoff;
 	float cos_cur_angle = dot(-normalize(gl_LightSource[i].spotDirection), sn.xyz);
 	float cos_cur_angle = dot(-normalize(gl_LightSource[i].spotDirection), sn.xyz);
 	float cos_inner_cone_angle = gl_LightSource[i].spotCosCutoff;
 	float cos_inner_cone_angle = gl_LightSource[i].spotCosCutoff;
 
 

+ 1 - 1
Assets/Default asset pack/default/DefaultShader.frag

@@ -61,7 +61,7 @@ void spotLight(in int i, in vec3 normal, in vec4 pos, inout vec4 diffuse, inout
 	vec3 v = -pos.xyz;
 	vec3 v = -pos.xyz;
 	v = normalize(v);
 	v = normalize(v);
 
 
-	float cos_outer_cone_angle = gl_LightSource[i].spotExponent;
+	float cos_outer_cone_angle = (1.0-gl_LightSource[i].spotExponent) * gl_LightSource[i].spotCosCutoff;
 	float cos_cur_angle = dot(-normalize(gl_LightSource[i].spotDirection), sn.xyz);
 	float cos_cur_angle = dot(-normalize(gl_LightSource[i].spotDirection), sn.xyz);
 	float cos_inner_cone_angle = gl_LightSource[i].spotCosCutoff;
 	float cos_inner_cone_angle = gl_LightSource[i].spotCosCutoff;
 
 

+ 1 - 1
Assets/Default asset pack/default/DefaultShaderNoTexture.frag

@@ -60,7 +60,7 @@ void spotLight(in int i, in vec3 normal, in vec4 pos, inout vec4 diffuse, inout
 	vec3 v = -pos.xyz;
 	vec3 v = -pos.xyz;
 	v = normalize(v);
 	v = normalize(v);
 
 
-	float cos_outer_cone_angle = gl_LightSource[i].spotExponent;
+	float cos_outer_cone_angle = (1.0-gl_LightSource[i].spotExponent) * gl_LightSource[i].spotCosCutoff;
 	float cos_cur_angle = dot(-normalize(gl_LightSource[i].spotDirection), sn.xyz);
 	float cos_cur_angle = dot(-normalize(gl_LightSource[i].spotDirection), sn.xyz);
 	float cos_inner_cone_angle = gl_LightSource[i].spotCosCutoff;
 	float cos_inner_cone_angle = gl_LightSource[i].spotCosCutoff;
 
 

+ 1 - 1
Assets/Default asset pack/default/DefaultShaderShadows.frag

@@ -78,7 +78,7 @@ void spotLight(in int i, in vec3 normal, in vec4 pos, inout vec4 diffuse, inout
 	vec3 v = -pos.xyz;
 	vec3 v = -pos.xyz;
 	v = normalize(v);
 	v = normalize(v);
 
 
-	float cos_outer_cone_angle = gl_LightSource[i].spotExponent;
+	float cos_outer_cone_angle = (1.0-gl_LightSource[i].spotExponent) * gl_LightSource[i].spotCosCutoff;
 	float cos_cur_angle = dot(-normalize(gl_LightSource[i].spotDirection), sn.xyz);
 	float cos_cur_angle = dot(-normalize(gl_LightSource[i].spotDirection), sn.xyz);
 	float cos_inner_cone_angle = gl_LightSource[i].spotCosCutoff;
 	float cos_inner_cone_angle = gl_LightSource[i].spotCosCutoff;
 
 

+ 1 - 1
Assets/Default asset pack/default/DefaultShaderVertex.vert

@@ -56,7 +56,7 @@ void spotLight(in int i, in vec3 normal, in vec4 pos, inout vec4 diffuse, inout
 	vec3 v = -pos.xyz;
 	vec3 v = -pos.xyz;
 	v = normalize(v);
 	v = normalize(v);
 
 
-	float cos_outer_cone_angle = gl_LightSource[i].spotExponent;
+	float cos_outer_cone_angle = (1.0-gl_LightSource[i].spotExponent) * gl_LightSource[i].spotCosCutoff;
 	float cos_cur_angle = dot(-normalize(gl_LightSource[i].spotDirection), sn.xyz);
 	float cos_cur_angle = dot(-normalize(gl_LightSource[i].spotDirection), sn.xyz);
 	float cos_inner_cone_angle = gl_LightSource[i].spotCosCutoff;
 	float cos_inner_cone_angle = gl_LightSource[i].spotCosCutoff;
 
 

+ 1 - 1
Assets/Default asset pack/default/NorColSpec.frag

@@ -89,7 +89,7 @@ void spotLight(in int i, in vec3 bump, in vec3 normal, in vec3 tangent, in vec3
 	lDir = normalize(lDir);
 	lDir = normalize(lDir);
 
 
 	
 	
-	float cos_outer_cone_angle = gl_LightSource[i].spotExponent;
+	float cos_outer_cone_angle = (1.0-gl_LightSource[i].spotExponent) * gl_LightSource[i].spotCosCutoff;
 	float cos_cur_angle = dot(-lDir, lVec);
 	float cos_cur_angle = dot(-lDir, lVec);
 	float cos_inner_cone_angle = gl_LightSource[i].spotCosCutoff;
 	float cos_inner_cone_angle = gl_LightSource[i].spotCosCutoff;
 
 

+ 50 - 2
Assets/Default asset pack/default/default.mat

@@ -43,6 +43,18 @@
 		</shader>	
 		</shader>	
 	</shaders>	
 	</shaders>	
 	<materials>
 	<materials>
+		<material name="DefaultVertex">
+			<shader name="DefaultShaderVertexNoTexture">
+			</shader>
+		</material>		
+		<material name="DefaultVertexTextured">
+			<shader name="DefaultShaderVertex">
+			</shader>
+		</material>
+		<material name="DefaultVertexTexturedAdditive" blendingMode="2">
+			<shader name="DefaultShaderVertex">
+			</shader>
+		</material>						
 		<material name="Default">
 		<material name="Default">
 			<shader name="DefaultShaderNoTexture">
 			<shader name="DefaultShaderNoTexture">
 			</shader>
 			</shader>
@@ -53,11 +65,47 @@
 				</textures>				
 				</textures>				
 			</shader>
 			</shader>
 		</material>
 		</material>
-		<material name="UnlitMaterial">
+		<material name="DefaultTexturedAdditive" blendingMode="2">
+			<shader name="DefaultShader">
+				<textures>
+				</textures>				
+			</shader>
+		</material>		
+		<material name="Unlit">
 			<shader name="Unlit">
 			<shader name="Unlit">
 				<textures>
 				<textures>
 				</textures>				
 				</textures>				
 			</shader>
 			</shader>
-		</material>							
+		</material>
+		<material name="DefaultWithShadows">
+			<shader name="DefaultShaderShadows">
+				<textures>
+				</textures>				
+			</shader>
+		</material>
+		<material name="Particles">
+			<shader name="DefaultParticleShader">
+				<textures>
+				</textures>				
+			</shader>
+		</material>
+		<material name="ParticlesAdditive" blendingMode="2">
+			<shader name="DefaultParticleShader">
+				<textures>
+				</textures>				
+			</shader>
+		</material>
+		<material name="LightCube">
+			<shader name="LightCube">
+				<textures>
+				</textures>				
+			</shader>
+		</material>
+		<material name="NormalColorSpecular">
+			<shader name="NorColSpec">
+				<textures>
+				</textures>				
+			</shader>
+		</material>		
 	</materials>
 	</materials>
 </polycode>
 </polycode>

BIN
Assets/Default asset pack/hdr.pak


+ 1 - 1
Assets/Default asset pack/hdr/DefaultShaderNoTextureHDR.frag

@@ -60,7 +60,7 @@ void spotLight(in int i, in vec3 normal, in vec4 pos, inout vec4 diffuse, inout
 	vec3 v = -pos.xyz;
 	vec3 v = -pos.xyz;
 	v = normalize(v);
 	v = normalize(v);
 
 
-	float cos_outer_cone_angle = gl_LightSource[i].spotExponent;
+	float cos_outer_cone_angle = (1.0-gl_LightSource[i].spotExponent) * gl_LightSource[i].spotCosCutoff;
 	float cos_cur_angle = dot(-normalize(gl_LightSource[i].spotDirection), sn.xyz);
 	float cos_cur_angle = dot(-normalize(gl_LightSource[i].spotDirection), sn.xyz);
 	float cos_inner_cone_angle = gl_LightSource[i].spotCosCutoff;
 	float cos_inner_cone_angle = gl_LightSource[i].spotCosCutoff;
 
 

+ 1 - 1
Assets/Default asset pack/hdr/NorColSpecHDR.frag

@@ -89,7 +89,7 @@ void spotLight(in int i, in vec3 bump, in vec3 normal, in vec3 tangent, in vec3
 	lDir = normalize(lDir);
 	lDir = normalize(lDir);
 
 
 	
 	
-	float cos_outer_cone_angle = gl_LightSource[i].spotExponent;
+	float cos_outer_cone_angle = (1.0-gl_LightSource[i].spotExponent) * gl_LightSource[i].spotCosCutoff;
 	float cos_cur_angle = dot(-lDir, lVec);
 	float cos_cur_angle = dot(-lDir, lVec);
 	float cos_inner_cone_angle = gl_LightSource[i].spotCosCutoff;
 	float cos_inner_cone_angle = gl_LightSource[i].spotCosCutoff;
 
 

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

@@ -31,10 +31,14 @@
 		</shader>							
 		</shader>							
 	</shaders>
 	</shaders>
 	<materials>
 	<materials>
-		<material name="DefaultHDR" screen="true">
+		<material name="DefaultHDR">
 			<shader name="DefaultShaderNoTextureHDR">
 			<shader name="DefaultShaderNoTextureHDR">
 			</shader>
 			</shader>
-		</material>				
+		</material>
+			<material name="NormalColorSpecularHDR">
+			<shader name="NorColSpecHDR">
+			</shader>
+		</material>									
 		<material name="HDRProcess" screen="true">
 		<material name="HDRProcess" screen="true">
 			<shader name="HDRProcessShader">
 			<shader name="HDRProcessShader">
 			</shader>
 			</shader>

+ 3 - 5
Core/Contents/Include/PolySceneLight.h

@@ -41,7 +41,7 @@ namespace Polycode {
 		
 		
 			/**
 			/**
 			* Constructs a light with parameters.
 			* Constructs a light with parameters.
-			* @param type Type of light to create. Can be SceneLight::AREA_LIGHT or SceneLight::SPOT_LIGHT
+			* @param type Type of light to create. Can be SceneLight::POINT_LIGHT or SceneLight::SPOT_LIGHT
 			* @param parentScene Scene to light.
 			* @param parentScene Scene to light.
 			* @param intensity Light color intensity
 			* @param intensity Light color intensity
 			* @param constantAttenuation Constant falloff attenuation value	
 			* @param constantAttenuation Constant falloff attenuation value	
@@ -86,7 +86,7 @@ namespace Polycode {
 
 
 			const Matrix4& getLightViewMatrix() const;
 			const Matrix4& getLightViewMatrix() const;
 			
 			
-			static const int AREA_LIGHT = 0;
+			static const int POINT_LIGHT = 0;
 			static const int SPOT_LIGHT = 1;
 			static const int SPOT_LIGHT = 1;
 			
 			
 			Texture *getZBufferTexture() const;
 			Texture *getZBufferTexture() const;
@@ -144,13 +144,11 @@ namespace Polycode {
 			*/
 			*/
 			void setSpotlightProperties(Number spotlightCutoff, Number spotlightExponent) {
 			void setSpotlightProperties(Number spotlightCutoff, Number spotlightExponent) {
 				this->spotlightCutoff = spotlightCutoff;
 				this->spotlightCutoff = spotlightCutoff;
-				Number cosVal = cos(spotlightCutoff*(PI/180.0));
-				this->spotlightExponent = cosVal - (0.02*spotlightExponent);				
+                this->spotlightExponent = spotlightExponent;
 			}
 			}
 			
 			
 			Number getSpotlightCutoff() const { return spotlightCutoff; }
 			Number getSpotlightCutoff() const { return spotlightCutoff; }
 			Number getSpotlightExponent() const { return spotlightExponent; }
 			Number getSpotlightExponent() const { return spotlightExponent; }
-						
 			
 			
 			/**
 			/**
 			* If this is called with 'true', the light will generate a shadow map.
 			* If this is called with 'true', the light will generate a shadow map.

+ 15 - 1
IDE/Contents/Include/PolycodeEntityEditor.h

@@ -35,17 +35,31 @@
 
 
 using namespace Polycode;
 using namespace Polycode;
 
 
+class LightDisplay : public Entity {
+public:
+    LightDisplay(SceneLight *light);
+    ~LightDisplay();
+    void Update();
+    
+private:
+    ScenePrimitive *spotSpot;
+    SceneMesh *fovSceneMesh;    
+    Mesh *fovMesh;
+    
+    SceneLight *light;
+};
+
 class CameraDisplay : public Entity {
 class CameraDisplay : public Entity {
     public:
     public:
         CameraDisplay(Camera *camera);
         CameraDisplay(Camera *camera);
         ~CameraDisplay();
         ~CameraDisplay();
         void Update();
         void Update();
     
     
+    
     private:
     private:
         SceneMesh *fovSceneMesh;
         SceneMesh *fovSceneMesh;
         Mesh *fovMesh;
         Mesh *fovMesh;
         Camera *camera;
         Camera *camera;
-    
 };
 };
 
 
 class CameraPreviewWindow : public UIElement {
 class CameraPreviewWindow : public UIElement {

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

@@ -597,6 +597,8 @@ class SceneLightSheet : public PropSheet {
         SceneLightSheet();
         SceneLightSheet();
         ~SceneLightSheet();
         ~SceneLightSheet();
     
     
+        void updateOptionVisibility();
+    
         void setSceneLight(SceneLight *light);
         void setSceneLight(SceneLight *light);
         void handleEvent(Event *event);
         void handleEvent(Event *event);
     
     
@@ -612,7 +614,7 @@ class SceneLightSheet : public PropSheet {
         SliderProp *linearAttenuationProp;
         SliderProp *linearAttenuationProp;
         SliderProp *quadraticAttenuationProp;
         SliderProp *quadraticAttenuationProp;
     
     
-        NumberProp *spotlightCutoffProp;
+        SliderProp *spotlightCutoffProp;
         SliderProp *spotlightExponentProp;
         SliderProp *spotlightExponentProp;
     
     
         BoolProp *castShadowsProp;
         BoolProp *castShadowsProp;

+ 66 - 15
IDE/Contents/Source/PolycodeEntityEditor.cpp

@@ -27,6 +27,65 @@ extern UIGlobalMenu *globalMenu;
 extern PolycodeFrame *globalFrame;
 extern PolycodeFrame *globalFrame;
 extern Scene *globalScene;
 extern Scene *globalScene;
 
 
+LightDisplay::LightDisplay(SceneLight *light) {
+    this->light = light;
+    spotSpot = new ScenePrimitive(ScenePrimitive::TYPE_LINE_CIRCLE, 1.0, 1.0, 32);
+	spotSpot->getMesh()->setMeshType(Mesh::LINE_LOOP_MESH);
+    addChild(spotSpot);
+    spotSpot->setColor(1.0, 0.8, 0.0, 1.0);
+    spotSpot->enabled = false;
+    
+    fovSceneMesh = new SceneMesh(Mesh::LINE_MESH);
+    fovSceneMesh->setColor(1.0, 0.8, 0.0, 1.0);
+    fovMesh = fovSceneMesh->getMesh();
+    fovMesh->indexedMesh = true;
+    addChild(fovSceneMesh);
+    
+    fovMesh->addVertex(0.0, 0.0, 0.0);
+    
+    fovMesh->addVertex(-1.0, 1.0, -1.0);
+    fovMesh->addVertex(1.0, 1.0, -1.0);
+    fovMesh->addVertex(1.0, -1.0, -1.0);
+    fovMesh->addVertex(-1.0, -1.0, -1.0);
+    
+    fovMesh->addIndexedFace(0, 1);
+    fovMesh->addIndexedFace(0, 2);
+    fovMesh->addIndexedFace(0, 3);
+    fovMesh->addIndexedFace(0, 4);
+    
+    
+    light->addChild(this);
+}
+
+LightDisplay::~LightDisplay() {
+    
+}
+
+void LightDisplay::Update() {
+    if(light->getLightType() == SceneLight::SPOT_LIGHT) {
+        spotSpot->enabled = true;
+        fovSceneMesh->enabled = true;
+        Number distance = light->getIntensity() * 2.0;
+        Number spotAngle = ((light->getSpotlightCutoff()) * 2.0);
+        Number spotLightSize = ((PI * 2.0) * distance * spotAngle) / 360.0;
+        
+        spotSpot->setPosition(0.0, 0.0, -distance);
+        spotSpot->setPrimitiveOptions(ScenePrimitive::TYPE_LINE_CIRCLE, spotLightSize, spotLightSize, 32);
+       	spotSpot->getMesh()->setMeshType(Mesh::LINE_LOOP_MESH);
+        
+        spotLightSize *= 0.5;
+        fovMesh->getActualVertex(1)->set(sin(PI/2.0)*spotLightSize, cos(PI/2.0)*spotLightSize, -distance);
+        fovMesh->getActualVertex(2)->set(sin(PI)*spotLightSize, cos(PI)*spotLightSize, -distance);
+        fovMesh->getActualVertex(3)->set(sin(PI + (PI/2.0))*spotLightSize, cos(PI + (PI/2.0))*spotLightSize, -distance);
+        fovMesh->getActualVertex(4)->set(sin(PI*2.0)*spotLightSize, cos(PI*2.0)*spotLightSize, -distance);
+         fovMesh->dirtyArray(RenderDataArray::VERTEX_DATA_ARRAY);
+    } else {
+        spotSpot->enabled = false;
+        fovSceneMesh->enabled = false;
+    }
+}
+
+
 CameraDisplay::CameraDisplay(Camera *camera) : Entity() {
 CameraDisplay::CameraDisplay(Camera *camera) : Entity() {
     
     
     editorOnly = true;
     editorOnly = true;
@@ -42,9 +101,6 @@ CameraDisplay::CameraDisplay(Camera *camera) : Entity() {
     fovMesh->addVertex(1.0, 1.0, -1.0);
     fovMesh->addVertex(1.0, 1.0, -1.0);
     fovMesh->addVertex(1.0, -1.0, -1.0);
     fovMesh->addVertex(1.0, -1.0, -1.0);
     fovMesh->addVertex(-1.0, -1.0, -1.0);
     fovMesh->addVertex(-1.0, -1.0, -1.0);
-
-//    fovMesh->addVertex(0.0, 0.0, 0.0);
-//    fovMesh->addVertex(0.0, 0.0, 2.0);
     
     
     fovMesh->addIndexedFace(0, 1);
     fovMesh->addIndexedFace(0, 1);
     fovMesh->addIndexedFace(0, 2);
     fovMesh->addIndexedFace(0, 2);
@@ -56,8 +112,6 @@ CameraDisplay::CameraDisplay(Camera *camera) : Entity() {
     fovMesh->addIndexedFace(3, 4);
     fovMesh->addIndexedFace(3, 4);
     fovMesh->addIndexedFace(4, 1);
     fovMesh->addIndexedFace(4, 1);
     
     
-//    fovMesh->addIndexedFace(5, 6);
-    
     addChild(fovSceneMesh);
     addChild(fovSceneMesh);
     
     
     camera->addChild(this);
     camera->addChild(this);
@@ -108,11 +162,6 @@ void CameraDisplay::Update() {
         fovMesh->getActualVertex(4)->set(-xPos, -yPos, zPos);
         fovMesh->getActualVertex(4)->set(-xPos, -yPos, zPos);
         fovMesh->dirtyArray(RenderDataArray::VERTEX_DATA_ARRAY);
         fovMesh->dirtyArray(RenderDataArray::VERTEX_DATA_ARRAY);
     }
     }
-    
-/*
-    fovMesh->getActualVertex(5)->set(0.0, 0.0, camera->getNearClipppingPlane());
-    fovMesh->getActualVertex(6)->set(0.0, 0.0, camera->getFarClipppingPlane());
- */
 }
 }
 
 
 CameraPreviewWindow::CameraPreviewWindow() : UIElement() {
 CameraPreviewWindow::CameraPreviewWindow() : UIElement() {
@@ -266,7 +315,7 @@ void EntityEditorMainView::Update() {
 void EntityEditorMainView::createIcon(Entity *entity, String iconFile) {
 void EntityEditorMainView::createIcon(Entity *entity, String iconFile) {
     ScenePrimitive *iconPrimitive = new ScenePrimitive(ScenePrimitive::TYPE_VPLANE, 0.4, 0.4);
     ScenePrimitive *iconPrimitive = new ScenePrimitive(ScenePrimitive::TYPE_VPLANE, 0.4, 0.4);
     
     
-    iconPrimitive->setMaterialByName("UnlitMaterial");
+    iconPrimitive->setMaterialByName("Unlit");
 	Texture *tex = CoreServices::getInstance()->getMaterialManager()->createTextureFromFile("entityEditor/"+iconFile);
 	Texture *tex = CoreServices::getInstance()->getMaterialManager()->createTextureFromFile("entityEditor/"+iconFile);
 	if(iconPrimitive->getLocalShaderOptions()) {
 	if(iconPrimitive->getLocalShaderOptions()) {
         iconPrimitive->getLocalShaderOptions()->addTexture("diffuse", tex);
         iconPrimitive->getLocalShaderOptions()->addTexture("diffuse", tex);
@@ -297,6 +346,7 @@ void EntityEditorMainView::setEditorProps(Entity *entity) {
     SceneLight *sceneLight = dynamic_cast<SceneLight*>(entity);
     SceneLight *sceneLight = dynamic_cast<SceneLight*>(entity);
     if(sceneLight) {
     if(sceneLight) {
         createIcon(entity, "light_icon.png");
         createIcon(entity, "light_icon.png");
+        LightDisplay *lightVis = new LightDisplay(sceneLight);
     }
     }
     
     
     if(emitter) {
     if(emitter) {
@@ -310,10 +360,11 @@ void EntityEditorMainView::setEditorProps(Entity *entity) {
 
 
     Camera *camera = dynamic_cast<Camera*>(entity);
     Camera *camera = dynamic_cast<Camera*>(entity);
     if(camera) {
     if(camera) {
-        
         CameraDisplay *camVis = new CameraDisplay(camera);
         CameraDisplay *camVis = new CameraDisplay(camera);
         createIcon(entity, "camera_icon.png");
         createIcon(entity, "camera_icon.png");
     }
     }
+    
+    
 }
 }
 
 
 void EntityEditorMainView::addEntityFromMenu(String command) {
 void EntityEditorMainView::addEntityFromMenu(String command) {
@@ -401,7 +452,7 @@ void EntityEditorMainView::addEntityFromMenu(String command) {
 
 
     
     
     if(command == "add_light") {
     if(command == "add_light") {
-        SceneLight *newLight = new SceneLight(SceneLight::AREA_LIGHT, mainScene, 1.0);
+        SceneLight *newLight = new SceneLight(SceneLight::POINT_LIGHT, mainScene, 1.0);
         newLight->bBox = Vector3(0.5, 0.5, 0.5);
         newLight->bBox = Vector3(0.5, 0.5, 0.5);
         mainScene->addLight(newLight);
         mainScene->addLight(newLight);
         sceneObjectRoot->addChild(newLight);
         sceneObjectRoot->addChild(newLight);
@@ -468,7 +519,7 @@ void EntityEditorMainView::handleEvent(Event *event) {
                 selectEntity(newMesh);
                 selectEntity(newMesh);
             } else if(assetSelectType == "image") {
             } else if(assetSelectType == "image") {
                 SceneImage *newImage = new SceneImage(globalFrame->assetBrowser->getFullSelectedAssetPath());
                 SceneImage *newImage = new SceneImage(globalFrame->assetBrowser->getFullSelectedAssetPath());
-                newImage->setMaterialByName("UnlitMaterial");
+                newImage->setMaterialByName("Unlit");
                 if(newImage->getLocalShaderOptions()) {
                 if(newImage->getLocalShaderOptions()) {
                     newImage->getLocalShaderOptions()->addTexture("diffuse", newImage->getTexture());
                     newImage->getLocalShaderOptions()->addTexture("diffuse", newImage->getTexture());
                 }
                 }
@@ -483,7 +534,7 @@ void EntityEditorMainView::handleEvent(Event *event) {
                 newSprite->playAnimation(newSprite->getAnimationAtIndex(0)->name, 0, false);
                 newSprite->playAnimation(newSprite->getAnimationAtIndex(0)->name, 0, false);
             }
             }
             
             
-            newSprite->setMaterialByName("UnlitMaterial");
+            newSprite->setMaterialByName("Unlit");
             if(newSprite->getLocalShaderOptions()) {
             if(newSprite->getLocalShaderOptions()) {
                 newSprite->getLocalShaderOptions()->addTexture("diffuse", newSprite->getTexture());
                 newSprite->getLocalShaderOptions()->addTexture("diffuse", newSprite->getTexture());
             }
             }

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

@@ -540,11 +540,11 @@ PostPreviewBox::PostPreviewBox() : UIElement() {
 	previewScene->clearColor.setColor(0.0, 0.0, 0.0, 1.0);	
 	previewScene->clearColor.setColor(0.0, 0.0, 0.0, 1.0);	
 	previewScene->ambientColor.setColor(0.0, 0.0, 0.0, 1.0);
 	previewScene->ambientColor.setColor(0.0, 0.0, 0.0, 1.0);
 
 
-	mainLight = new SceneLight(SceneLight::AREA_LIGHT, previewScene, 90.0);
+	mainLight = new SceneLight(SceneLight::POINT_LIGHT, previewScene, 90.0);
 	mainLight->setPosition(-6,6,6);
 	mainLight->setPosition(-6,6,6);
 	previewScene->addLight(mainLight);
 	previewScene->addLight(mainLight);
 
 
-	secondLight = new SceneLight(SceneLight::AREA_LIGHT, previewScene, 90.0);
+	secondLight = new SceneLight(SceneLight::POINT_LIGHT, previewScene, 90.0);
 	secondLight->setPosition(6,-6,6);
 	secondLight->setPosition(6,-6,6);
 	previewScene->addLight(secondLight);
 	previewScene->addLight(secondLight);
 
 
@@ -724,11 +724,11 @@ MaterialPreviewBox::MaterialPreviewBox() : UIElement() {
 	previewPrimitive->getMesh()->calculateTangents();	
 	previewPrimitive->getMesh()->calculateTangents();	
 
 
 	
 	
-	mainLight = new SceneLight(SceneLight::AREA_LIGHT, previewScene, 290.0);
+	mainLight = new SceneLight(SceneLight::POINT_LIGHT, previewScene, 290.0);
 	mainLight->setPosition(-10,10,10);
 	mainLight->setPosition(-10,10,10);
 	previewScene->addLight(mainLight);
 	previewScene->addLight(mainLight);
 
 
-	secondLight = new SceneLight(SceneLight::AREA_LIGHT, previewScene, 250.0);
+	secondLight = new SceneLight(SceneLight::POINT_LIGHT, previewScene, 250.0);
 	secondLight->setPosition(10,-10,10);
 	secondLight->setPosition(10,-10,10);
 	previewScene->addLight(secondLight);
 	previewScene->addLight(secondLight);
 
 

+ 2 - 2
IDE/Contents/Source/PolycodeMeshEditor.cpp

@@ -34,11 +34,11 @@ PolycodeMeshEditor::PolycodeMeshEditor() : PolycodeEditor(true){
 	
 	
 //	previewScene->ambientColor.setColor(0.0, 0.0, 0.0, 1.0);
 //	previewScene->ambientColor.setColor(0.0, 0.0, 0.0, 1.0);
 				
 				
-	mainLight = new SceneLight(SceneLight::AREA_LIGHT, previewScene, 1590.0);
+	mainLight = new SceneLight(SceneLight::POINT_LIGHT, previewScene, 1590.0);
 	mainLight->setPosition(-10,10,10);
 	mainLight->setPosition(-10,10,10);
 	previewScene->addLight(mainLight);
 	previewScene->addLight(mainLight);
 
 
-	secondLight = new SceneLight(SceneLight::AREA_LIGHT, previewScene, 1590.0);
+	secondLight = new SceneLight(SceneLight::POINT_LIGHT, previewScene, 1590.0);
 	secondLight->setPosition(10,-10,10);
 	secondLight->setPosition(10,-10,10);
 	previewScene->addLight(secondLight);
 	previewScene->addLight(secondLight);
 
 

+ 34 - 4
IDE/Contents/Source/PolycodeProps.cpp

@@ -308,7 +308,7 @@ void PropSheet::layoutProps() {
     Number newPropHeight = yOffset + contents->getPosition().y;
     Number newPropHeight = yOffset + contents->getPosition().y;
     if(newPropHeight != propHeight) {
     if(newPropHeight != propHeight) {
         propHeight = newPropHeight;
         propHeight = newPropHeight;
-        dispatchEvent(new Event(), Event::COMPLETE_EVENT);	
+        dispatchEvent(new Event(), Event::COMPLETE_EVENT);
     }
     }
 
 
 }
 }
@@ -2360,7 +2360,7 @@ void ParticleEmitterSheet::setParticleEmitter(SceneParticleEmitter *emitter) {
 
 
 SceneLightSheet::SceneLightSheet() : PropSheet("LIGHT", "scene_light") {
 SceneLightSheet::SceneLightSheet() : PropSheet("LIGHT", "scene_light") {
     typeProp = new ComboProp("Type");
     typeProp = new ComboProp("Type");
-    typeProp->comboEntry->addComboItem("Area");
+    typeProp->comboEntry->addComboItem("Point");
     typeProp->comboEntry->addComboItem("Spot");
     typeProp->comboEntry->addComboItem("Spot");
     addProp(typeProp);
     addProp(typeProp);
     
     
@@ -2382,10 +2382,10 @@ SceneLightSheet::SceneLightSheet() : PropSheet("LIGHT", "scene_light") {
     quadraticAttenuationProp = new SliderProp("Quadratic att.", 0.0, 1.0);
     quadraticAttenuationProp = new SliderProp("Quadratic att.", 0.0, 1.0);
     addProp(quadraticAttenuationProp);
     addProp(quadraticAttenuationProp);
     
     
-    spotlightCutoffProp = new NumberProp("Spot cutoff");
+    spotlightCutoffProp = new SliderProp("Spot angle", 0.0, 90.0);
     addProp(spotlightCutoffProp);
     addProp(spotlightCutoffProp);
     
     
-    spotlightExponentProp = new SliderProp("Spot exponent", 0.0, 50.0);
+    spotlightExponentProp = new SliderProp("Spot softness", 0.0, 1.0);
     addProp(spotlightExponentProp);
     addProp(spotlightExponentProp);
     
     
     castShadowsProp = new BoolProp("Cast shadows");
     castShadowsProp = new BoolProp("Cast shadows");
@@ -2406,6 +2406,33 @@ SceneLightSheet::~SceneLightSheet() {
     
     
 }
 }
 
 
+void SceneLightSheet::updateOptionVisibility() {
+    if(!light) {
+        return;
+    }
+    
+    if(light->getLightType() == SceneLight::POINT_LIGHT) {
+        spotlightCutoffProp->enabled = false;
+        spotlightExponentProp->enabled = false;
+        castShadowsProp->enabled = false;
+        shadowMapFOVProp->enabled = false;
+        shadowResolutionProp->enabled = false;
+    } else {
+        spotlightCutoffProp->enabled = true;
+        spotlightExponentProp->enabled = true;
+        castShadowsProp->enabled = true;
+        if(light->areShadowsEnabled()) {
+            shadowMapFOVProp->enabled = true;
+            shadowResolutionProp->enabled = true;
+        } else {
+            shadowMapFOVProp->enabled = false;
+            shadowResolutionProp->enabled = false;
+        }
+    }
+    
+    layoutProps();
+}
+
 void SceneLightSheet::setSceneLight(SceneLight *light) {
 void SceneLightSheet::setSceneLight(SceneLight *light) {
     this->light = light;
     this->light = light;
     
     
@@ -2426,6 +2453,8 @@ void SceneLightSheet::setSceneLight(SceneLight *light) {
         shadowMapFOVProp->set(light->getShadowMapFOV());
         shadowMapFOVProp->set(light->getShadowMapFOV());
         shadowResolutionProp->set(light->getShadowMapResolution());
         shadowResolutionProp->set(light->getShadowMapResolution());
         
         
+        updateOptionVisibility();
+        
         enabled = true;
         enabled = true;
     } else {
     } else {
         enabled = false;
         enabled = false;
@@ -2464,6 +2493,7 @@ void SceneLightSheet::handleEvent(Event *event) {
             light->setSpotlightProperties(light->getSpotlightCutoff(), spotlightExponentProp->get());
             light->setSpotlightProperties(light->getSpotlightCutoff(), spotlightExponentProp->get());
         }
         }
 
 
+        updateOptionVisibility();
     }
     }
     PropSheet::handleEvent(event);
     PropSheet::handleEvent(event);
 }
 }

+ 0 - 1
IDE/Contents/Source/TransformGizmo.cpp

@@ -118,7 +118,6 @@ TransformGizmo::TransformGizmo(Scene *targetScene, Camera *targetCamera) : Entit
 	yArrow->setPosition(0.0, 1.0, 0.0);
 	yArrow->setPosition(0.0, 1.0, 0.0);
 	yArrow->depthTest = false;
 	yArrow->depthTest = false;
 	trasnformDecorators->addChild(yArrow);
 	trasnformDecorators->addChild(yArrow);
-    yArrow->setMaterialByName("Unlit");
 	
 	
 	xArrow = new ScenePrimitive(ScenePrimitive::TYPE_CONE, 0.2, 0.05, 12);
 	xArrow = new ScenePrimitive(ScenePrimitive::TYPE_CONE, 0.2, 0.05, 12);
 	xArrow->setColor(1.0, 0.0, 0.0, 1.0);
 	xArrow->setColor(1.0, 0.0, 0.0, 1.0);