diff --git a/labs2/lab3/lab3.cpp b/labs2/lab3/lab3.cpp
index ce0af3d5760292c310bb15f28f7bb332d6724614..c9e2dae405d7c6b83a792d43097f6c61889dd33e 100755
--- a/labs2/lab3/lab3.cpp
+++ b/labs2/lab3/lab3.cpp
@@ -365,11 +365,20 @@ int main()
         
         ourShader.Use();
 
-        glUniform3f(glGetUniformLocation(ourShader.Program, "objectColor"), 1.0f, 1.0f, 1.0f);
-        glUniform3f(glGetUniformLocation(ourShader.Program, "lightColor"), lightColor.x, lightColor.y, lightColor.z);
-        glUniform3f(glGetUniformLocation(ourShader.Program, "lightPos"), lightPos.x, lightPos.y, lightPos.z);
+        //glUniform3f(glGetUniformLocation(ourShader.Program, "objectColor"), 1.0f, 1.0f, 1.0f);
+        glUniform3f(glGetUniformLocation(ourShader.Program, "light.position"), lightPos.x, lightPos.y, lightPos.z);
         glUniform3f(glGetUniformLocation(ourShader.Program, "viewPos"), cameraPos.x, cameraPos.y, cameraPos.z);
 
+        glUniform3f(glGetUniformLocation(ourShader.Program, "light.ambient"), lightColor.x, lightColor.y, lightColor.z);
+        glUniform3f(glGetUniformLocation(ourShader.Program, "light.diffuse"), lightColor.x, lightColor.y, lightColor.z);
+        glUniform3f(glGetUniformLocation(ourShader.Program, "light.specular"), lightColor.x, lightColor.y, lightColor.z);
+
+        glUniform3f(glGetUniformLocation(ourShader.Program, "material.ambient"), 1.0f, 0.0f, 0.0f);
+        glUniform3f(glGetUniformLocation(ourShader.Program, "material.diffuse"), 0.0f, 1.0f, 0.0f);
+        glUniform3f(glGetUniformLocation(ourShader.Program, "material.specular"), 0.0f, 0.0f, 1.0f);
+        glUniform1f(glGetUniformLocation(ourShader.Program, "material.shininess"), 256.0f);
+
+
         GLfloat timeValue = glfwGetTime();
         GLuint timeLoc = glGetUniformLocation(ourShader.Program, "time");
         glUniform1f(timeLoc, timeValue);
diff --git a/labs2/lab3/shader.frag b/labs2/lab3/shader.frag
index 67b259b1c71465cc8b755b97deac699feb845244..860247f254ace52a300162321f0c6d03ea752273 100755
--- a/labs2/lab3/shader.frag
+++ b/labs2/lab3/shader.frag
@@ -1,5 +1,20 @@
 #version 330 core
 
+struct Material {
+    vec3 ambient;
+    vec3 diffuse;
+    vec3 specular;
+    float shininess;
+};
+
+struct Light {
+    vec3 position;
+
+    vec3 ambient;
+    vec3 diffuse;
+    vec3 specular;
+};
+
 in vec2 TexCoord;
 in vec3 Normal;
 in vec3 FragPos;
@@ -8,31 +23,39 @@ out vec4 color;
 
 uniform sampler2D ourTexture;
 
-uniform vec3 objectColor;
-uniform vec3 lightColor;
-uniform vec3 lightPos;
 uniform vec3 viewPos;
+uniform Material material;
+uniform Light light;
+
+//uniform vec3 lightColor;
+//uniform vec3 lightPos;
+//uniform vec3 viewPos;
 
 void main()
 {
     vec3 texColor = texture(ourTexture, TexCoord).rgb;
 
     // Ambient
-    float ambientStrength = 0.1f;
-    vec3 ambient = ambientStrength * lightColor;
+    //float ambientStrength = 0.1f;
+    //vec3 ambient = ambientStrength * lightColor;
+    //vec3 ambient = lightColor * material.ambient;
+    vec3 ambient = light.ambient * material.ambient;
 
     // Diffuse
     vec3 norm = normalize(Normal);
-    vec3 lightDir = normalize(lightPos - FragPos);
+    vec3 lightDir = normalize(light.position - FragPos);
     float diff = max(dot(norm, lightDir), 0.0f);
-    vec3 diffuse = diff * lightColor;
+    //vec3 diffuse = lightColor * (diff * material.diffuse);
+    vec3 diffuse = light.diffuse * (diff * material.diffuse);
 
     // Specular
-    float specularStrength = 0.5f;
+    //float specularStrength = 0.5f;
     vec3 viewDir = normalize(viewPos - FragPos);
     vec3 reflectDir = reflect(-lightDir, norm);
-    float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32);
-    vec3 specular = specularStrength * spec * lightColor;
+    float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess);
+    //vec3 specular = specularStrength * spec * lightColor;
+    //vec3 specular = lightColor * (spec * material.specular);
+    vec3 specular = light.specular * (spec * material.specular);
 
     vec3 result = (ambient + diffuse + specular) * texColor;
     color = vec4(result, 1.0f);