From 4ebcc7e2d75a5bd016f1ef5936388c45e4d05e35 Mon Sep 17 00:00:00 2001 From: Quantum Date: Sun, 26 Aug 2018 04:42:46 -0400 Subject: [PATCH] Add specular mapping. --- punyverse/assets/textures.txt | 1 + punyverse/assets/textures/earth_specular.jpg | Bin 0 -> 91788 bytes punyverse/entity.py | 18 ++++++++++++++---- punyverse/shaders/planet.fragment.glsl | 9 +++------ punyverse/world.json | 1 + punyverse/world.py | 2 +- 6 files changed, 20 insertions(+), 11 deletions(-) create mode 100644 punyverse/assets/textures/earth_specular.jpg diff --git a/punyverse/assets/textures.txt b/punyverse/assets/textures.txt index 5b915b5..d7e7b70 100644 --- a/punyverse/assets/textures.txt +++ b/punyverse/assets/textures.txt @@ -5,6 +5,7 @@ mercury.jpg earth.jpg earth_normal.jpg earth_emission.jpg +earth_specular.jpg cloudmap.jpg moon.jpg mars.jpg diff --git a/punyverse/assets/textures/earth_specular.jpg b/punyverse/assets/textures/earth_specular.jpg new file mode 100644 index 0000000000000000000000000000000000000000..baa34ffc1824f9b7f8b485fd4a95758a3fbb655e GIT binary patch literal 91788 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%0D(YNsL;~Km)JAWPo^~V+>9V$G{6%3V2Y~c_!umY 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
KICSzZQ}wRruiL52qZ)^+jY0 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 H*RlTve#;$Q literal 0 HcmV?d00001 diff --git a/punyverse/entity.py b/punyverse/entity.py index 9339590..055e4fe 100644 --- a/punyverse/entity.py +++ b/punyverse/entity.py @@ -293,6 +293,7 @@ class SphericalBody(Body): self.texture = get_best_texture(info['texture']) self.normal_texture = None + self.specular_texture = None self.emission_texture = None self.sphere = self._get_sphere(division, tangent=self.type == 'planet') @@ -303,6 +304,9 @@ class SphericalBody(Body): if 'normal_map' in info: self.normal_texture = get_best_texture(info['normal_map']) + if 'specular_map' in info: + self.specular_texture = get_best_texture(info['specular_map']) + if 'emission_map' in info: self.emission_texture = get_best_texture(info['emission_map']) @@ -349,7 +353,16 @@ class SphericalBody(Body): glBindTexture(GL_TEXTURE_2D, self.normal_texture) shader.uniform_texture('u_planet.normalMap', 1) - shader.uniform_bool('u_planet.hasSpecular', False) + shader.uniform_bool('u_planet.hasSpecular', self.specular_texture) + if self.specular_texture: + glActiveTexture(GL_TEXTURE2) + glBindTexture(GL_TEXTURE_2D, self.emission_texture) + shader.uniform_texture('u_planet.specularMap', 2) + shader.uniform_vec3('u_planet.specular', 2, 2, 2) + shader.uniform_float('u_planet.shininess', 5) + else: + shader.uniform_vec3('u_planet.specular', 0, 0, 0) + shader.uniform_float('u_planet.shininess', 0) shader.uniform_bool('u_planet.hasEmission', self.emission_texture) if self.emission_texture: @@ -363,9 +376,6 @@ class SphericalBody(Body): shader.uniform_vec3('u_planet.emission', 0, 0, 0) shader.uniform_vec3('u_planet.diffuse', 1, 1, 1) - shader.uniform_vec3('u_planet.specular', 0, 0, 0) - - shader.uniform_float('u_planet.shininess', 0) glBindBuffer(GL_ARRAY_BUFFER, self.sphere.vbo) shader.vertex_attribute('a_normal', self.sphere.direction_size, self.sphere.type, GL_FALSE, diff --git a/punyverse/shaders/planet.fragment.glsl b/punyverse/shaders/planet.fragment.glsl index 5a2dc79..f312b2e 100644 --- a/punyverse/shaders/planet.fragment.glsl +++ b/punyverse/shaders/planet.fragment.glsl @@ -39,18 +39,15 @@ void main() { vec3 emission = u_planet.hasEmission ? texture2D(u_planet.emissionMap, v_uv).rgb : vec3(1); vec3 incident = normalize(u_sun.position - v_position); - vec3 reflected = normalize(-reflect(incident, normal)); + vec3 reflected = normalize(reflect(-incident, normal)); float diffuseIntensity = max(dot(normal, incident), 0.0); - float shininess = pow(clamp(dot(normalize(v_camDirection), reflected), 0.0, 1.0), u_planet.shininess); + float shininess = pow(max(dot(normalize(v_camDirection), reflected), 0), u_planet.shininess); vec3 ambient = u_planet.ambient * u_sun.ambient * diffuse; diffuse *= u_planet.diffuse * u_sun.diffuse * diffuseIntensity; emission *= u_planet.emission * (1 - min(diffuseIntensity * 2, 1)); - if (u_planet.shininess > 0) - specular *= u_planet.specular * u_sun.specular * clamp(shininess, 0, 1); - else - specular = vec3(0); + specular *= u_planet.specular * u_sun.specular * max(shininess, 0); gl_FragColor = vec4((ambient + diffuse + emission + specular) * u_sun.intensity, 1); } diff --git a/punyverse/world.json b/punyverse/world.json index cb9936f..1bbd145 100644 --- a/punyverse/world.json +++ b/punyverse/world.json @@ -57,6 +57,7 @@ "rotation": 86400, "division": 90, "normal_map": ["earth_normal.jpg", "earth_normal_small.jpg"], + "specular_map": ["earth_specular.jpg", "earth_specular_small.jpg"], "emission_map": ["earth_emission.jpg", "earth_emission_medium.jpg", "earth_emission_small.jpg"], "atmosphere": { "cloud_texture": ["cloudmap.jpg", "cloudmap_small.jpg"], diff --git a/punyverse/world.py b/punyverse/world.py index 927e913..6f4ff57 100644 --- a/punyverse/world.py +++ b/punyverse/world.py @@ -49,7 +49,7 @@ class World(object): shader = self.activate_shader('planet') shader.uniform_vec3('u_sun.ambient', 0.1, 0.1, 0.1) shader.uniform_vec3('u_sun.diffuse', 1, 1, 1) - shader.uniform_vec3('u_sun.specular', 0.5, 0.5, 0.5) + shader.uniform_vec3('u_sun.specular', 1, 1, 1) shader.uniform_vec3('u_sun.position', 0, 0, 0) shader.uniform_float('u_sun.intensity', 1) self.activate_shader(None)