diff --git a/data/interiors_mbu/beam.jpg b/data/interiors_mbu/beam.jpg new file mode 100644 index 00000000..d1e4cb79 Binary files /dev/null and b/data/interiors_mbu/beam.jpg differ diff --git a/data/interiors_mbu/beam.png b/data/interiors_mbu/beam.png index 55e60493..453f2868 100644 Binary files a/data/interiors_mbu/beam.png and b/data/interiors_mbu/beam.png differ diff --git a/data/interiors_mbu/beam_side.jpg b/data/interiors_mbu/beam_side.jpg new file mode 100644 index 00000000..6eebf119 Binary files /dev/null and b/data/interiors_mbu/beam_side.jpg differ diff --git a/data/interiors_mbu/beam_side.png b/data/interiors_mbu/beam_side.png index cf817849..1e02e575 100644 Binary files a/data/interiors_mbu/beam_side.png and b/data/interiors_mbu/beam_side.png differ diff --git a/data/interiors_mbu/edge_white.jpg b/data/interiors_mbu/edge_white.jpg index d4a14145..d0a91c59 100644 Binary files a/data/interiors_mbu/edge_white.jpg and b/data/interiors_mbu/edge_white.jpg differ diff --git a/data/interiors_mbu/edge_white.png b/data/interiors_mbu/edge_white.png new file mode 100644 index 00000000..95ca1249 Binary files /dev/null and b/data/interiors_mbu/edge_white.png differ diff --git a/data/interiors_mbu/edge_white_shadow.jpg b/data/interiors_mbu/edge_white_shadow.jpg new file mode 100644 index 00000000..e4378356 Binary files /dev/null and b/data/interiors_mbu/edge_white_shadow.jpg differ diff --git a/data/interiors_mbu/edge_white_shadow.png b/data/interiors_mbu/edge_white_shadow.png index 1b045fc7..ab2ad271 100644 Binary files a/data/interiors_mbu/edge_white_shadow.png and b/data/interiors_mbu/edge_white_shadow.png differ diff --git a/data/interiors_mbu/friction_high.jpg b/data/interiors_mbu/friction_high.jpg new file mode 100644 index 00000000..a016bfb4 Binary files /dev/null and b/data/interiors_mbu/friction_high.jpg differ diff --git a/data/interiors_mbu/friction_high.png b/data/interiors_mbu/friction_high.png index aeee3f1c..7c7edd2a 100644 Binary files a/data/interiors_mbu/friction_high.png and b/data/interiors_mbu/friction_high.png differ diff --git a/data/interiors_mbu/friction_high_shadow.jpg b/data/interiors_mbu/friction_high_shadow.jpg new file mode 100644 index 00000000..3024722d Binary files /dev/null and b/data/interiors_mbu/friction_high_shadow.jpg differ diff --git a/data/interiors_mbu/friction_high_shadow.png b/data/interiors_mbu/friction_high_shadow.png index 8e951df8..28730cbc 100644 Binary files a/data/interiors_mbu/friction_high_shadow.png and b/data/interiors_mbu/friction_high_shadow.png differ diff --git a/data/interiors_mbu/friction_low.jpg b/data/interiors_mbu/friction_low.jpg index 8a92ce58..8a45b9da 100644 Binary files a/data/interiors_mbu/friction_low.jpg and b/data/interiors_mbu/friction_low.jpg differ diff --git a/data/interiors_mbu/friction_low.png b/data/interiors_mbu/friction_low.png new file mode 100644 index 00000000..259ec698 Binary files /dev/null and b/data/interiors_mbu/friction_low.png differ diff --git a/data/interiors_mbu/friction_low_shadow.jpg b/data/interiors_mbu/friction_low_shadow.jpg new file mode 100644 index 00000000..ca154f48 Binary files /dev/null and b/data/interiors_mbu/friction_low_shadow.jpg differ diff --git a/data/interiors_mbu/friction_low_shadow.png b/data/interiors_mbu/friction_low_shadow.png index c5f21ce8..e6ebc447 100644 Binary files a/data/interiors_mbu/friction_low_shadow.png and b/data/interiors_mbu/friction_low_shadow.png differ diff --git a/data/interiors_mbu/plate.randomize.jpg b/data/interiors_mbu/plate.randomize.jpg new file mode 100644 index 00000000..c0848e69 Binary files /dev/null and b/data/interiors_mbu/plate.randomize.jpg differ diff --git a/data/interiors_mbu/plate.randomize.png b/data/interiors_mbu/plate.randomize.png new file mode 100644 index 00000000..4e523372 Binary files /dev/null and b/data/interiors_mbu/plate.randomize.png differ diff --git a/data/interiors_mbu/stripe_caution.jpg b/data/interiors_mbu/stripe_caution.jpg new file mode 100644 index 00000000..4825b781 Binary files /dev/null and b/data/interiors_mbu/stripe_caution.jpg differ diff --git a/data/interiors_mbu/stripe_caution.png b/data/interiors_mbu/stripe_caution.png index 1bbf2614..780ea2d3 100644 Binary files a/data/interiors_mbu/stripe_caution.png and b/data/interiors_mbu/stripe_caution.png differ diff --git a/data/interiors_mbu/tile_advanced.jpg b/data/interiors_mbu/tile_advanced.jpg new file mode 100644 index 00000000..45c7d476 Binary files /dev/null and b/data/interiors_mbu/tile_advanced.jpg differ diff --git a/data/interiors_mbu/tile_advanced.png b/data/interiors_mbu/tile_advanced.png index fa740a77..80f8260a 100644 Binary files a/data/interiors_mbu/tile_advanced.png and b/data/interiors_mbu/tile_advanced.png differ diff --git a/data/interiors_mbu/tile_beginner.png b/data/interiors_mbu/tile_beginner.png index ad60b14f..adbc0665 100644 Binary files a/data/interiors_mbu/tile_beginner.png and b/data/interiors_mbu/tile_beginner.png differ diff --git a/data/interiors_mbu/tile_intermediate.jpg b/data/interiors_mbu/tile_intermediate.jpg new file mode 100644 index 00000000..7d2d641e Binary files /dev/null and b/data/interiors_mbu/tile_intermediate.jpg differ diff --git a/data/interiors_mbu/tile_intermediate.png b/data/interiors_mbu/tile_intermediate.png index 8f6b74e6..9cdbb340 100644 Binary files a/data/interiors_mbu/tile_intermediate.png and b/data/interiors_mbu/tile_intermediate.png differ diff --git a/data/interiors_mbu/tile_underside.jpg b/data/interiors_mbu/tile_underside.jpg index ebb7434a..af52c034 100644 Binary files a/data/interiors_mbu/tile_underside.jpg and b/data/interiors_mbu/tile_underside.jpg differ diff --git a/data/interiors_mbu/tile_underside.png b/data/interiors_mbu/tile_underside.png new file mode 100644 index 00000000..296a3ec5 Binary files /dev/null and b/data/interiors_mbu/tile_underside.png differ diff --git a/data/interiors_mbu/wall_beginner.jpg b/data/interiors_mbu/wall_beginner.jpg new file mode 100644 index 00000000..daa1599e Binary files /dev/null and b/data/interiors_mbu/wall_beginner.jpg differ diff --git a/data/interiors_mbu/wall_beginner.png b/data/interiors_mbu/wall_beginner.png index 47630f79..41710ce9 100644 Binary files a/data/interiors_mbu/wall_beginner.png and b/data/interiors_mbu/wall_beginner.png differ diff --git a/data/shaders/tex/beam.normal.jpg b/data/shaders/tex/beam.normal.jpg new file mode 100644 index 00000000..cd72a605 Binary files /dev/null and b/data/shaders/tex/beam.normal.jpg differ diff --git a/data/shaders/tex/beam_side.normal.jpg b/data/shaders/tex/beam_side.normal.jpg new file mode 100644 index 00000000..2cfbcc94 Binary files /dev/null and b/data/shaders/tex/beam_side.normal.jpg differ diff --git a/data/shaders/tex/edge.normal.jpg b/data/shaders/tex/edge.normal.jpg new file mode 100644 index 00000000..4edfcc04 Binary files /dev/null and b/data/shaders/tex/edge.normal.jpg differ diff --git a/data/shaders/tex/friction_high.normal.jpg b/data/shaders/tex/friction_high.normal.jpg new file mode 100644 index 00000000..0e9e9184 Binary files /dev/null and b/data/shaders/tex/friction_high.normal.jpg differ diff --git a/data/shaders/tex/friction_low.normal.jpg b/data/shaders/tex/friction_low.normal.jpg new file mode 100644 index 00000000..97e48dcb Binary files /dev/null and b/data/shaders/tex/friction_low.normal.jpg differ diff --git a/data/shaders/tex/plate.normal.jpg b/data/shaders/tex/plate.normal.jpg new file mode 100644 index 00000000..4933ff4d Binary files /dev/null and b/data/shaders/tex/plate.normal.jpg differ diff --git a/src/DifBuilder.hx b/src/DifBuilder.hx index ef652c43..ca07a3f5 100644 --- a/src/DifBuilder.hx +++ b/src/DifBuilder.hx @@ -190,16 +190,14 @@ class DifBuilder { worker.run(); } - static function createNoiseTileMaterial(onFinish:hxsl.Shader->Void, baseTexture:String, noiseSuffix:String, shininess:Float, specularIntensity:Float) { + static function createNoiseTileMaterial(onFinish:hxsl.Shader->Void, baseTexture:String, noiseSuffix:String, shininess:Float, specular:Vector) { var worker = new ResourceLoaderWorker(() -> { var diffuseTex = ResourceLoader.getTexture('data/interiors_mbu/${baseTexture}').resource; - var specularTex = ResourceLoader.getTexture('data/shaders/tex/tile_mbu.spec.jpg').resource; - specularTex.wrap = Repeat; var normalTex = ResourceLoader.getTexture('data/shaders/tex/tile_mbu.normal.png').resource; normalTex.wrap = Repeat; var noiseTex = ResourceLoader.getTexture('data/shaders/tex/noise${noiseSuffix}.jpg').resource; noiseTex.wrap = Repeat; - var shader = new NoiseTileMaterial(diffuseTex, specularTex, normalTex, noiseTex, shininess, specularIntensity, MarbleGame.instance.world.ambient, + var shader = new NoiseTileMaterial(diffuseTex, normalTex, noiseTex, shininess, specular, MarbleGame.instance.world.ambient, MarbleGame.instance.world.dirLight, MarbleGame.instance.world.dirLightDir, 1); onFinish(shader); }); @@ -226,26 +224,36 @@ class DifBuilder { static var shaderMaterialDict:MapVoid)->Void> = [ 'interiors_mbu/plate_1.jpg' => (onFinish) -> createPhongMaterial(onFinish, 'plate_1.jpg', 'plate_mbu.spec.jpg', 'plate_mbu.normal.png', 8, 1), - 'interiors_mbu/tile_beginner.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '', 40, 1), - 'interiors_mbu/tile_beginner_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner_shadow.png', '', 40, 0.2), - 'interiors_mbu/tile_beginner_red.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner_red.jpg', '', 40, 1), - 'interiors_mbu/tile_beginner_red_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner_red_shadow.png', '', 40, 0.2), - 'interiors_mbu/tile_beginner_blue.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner_blue.jpg', '', 40, 1), - 'interiors_mbu/tile_beginner_blue_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner_blue_shadow.png', '', 40, 0.2), - 'interiors_mbu/tile_intermediate.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate.png', '', 40, 1), - 'interiors_mbu/tile_intermediate_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_shadow.png', '', 40, 0.2), - 'interiors_mbu/tile_intermediate_red.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_red.jpg', '', 40, 1), - 'interiors_mbu/tile_intermediate_red_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_red_shadow.png', '', 40, 0.2), - 'interiors_mbu/tile_intermediate_green.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_green.jpg', '', 40, 1), + 'interiors_mbu/tile_beginner.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '', 40, new Vector(1, 1, 1, 1)), + 'interiors_mbu/tile_beginner_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner_shadow.png', '', 40, + new Vector(0.2, 0.2, 0.2, 0.2)), + 'interiors_mbu/tile_beginner_red.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner_red.jpg', '', 40, new Vector(1, 1, 1, 1)), + 'interiors_mbu/tile_beginner_red_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner_red_shadow.png', '', 40, + new Vector(0.2, 0.2, 0.2, 0.2)), + 'interiors_mbu/tile_beginner_blue.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner_blue.jpg', '', 40, new Vector(1, 1, 1, 1)), + 'interiors_mbu/tile_beginner_blue_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner_blue_shadow.png', '', 40, + new Vector(0.2, 0.2, 0.2, 0.2)), + 'interiors_mbu/tile_intermediate.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate.png', '', 40, new Vector(1, 1, 1, 1)), + 'interiors_mbu/tile_intermediate_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_shadow.png', '', 40, + new Vector(0.2, 0.2, 0.2, 0.2)), + 'interiors_mbu/tile_intermediate_red.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_red.jpg', '', 40, + new Vector(1, 1, 1, 1)), + 'interiors_mbu/tile_intermediate_red_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_red_shadow.png', '', 40, + new Vector(0.2, 0.2, 0.2, 0.2)), + 'interiors_mbu/tile_intermediate_green.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_green.jpg', '', 40, + new Vector(1, 1, 1, 1)), 'interiors_mbu/tile_intermediate_green_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_green_shadow.png', '', 40, - 0.2), - 'interiors_mbu/tile_advanced.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced.png', '', 40, 1), - 'interiors_mbu/tile_advanced_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced_shadow.png', '', 40, 0.2), - 'interiors_mbu/tile_advanced_blue.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced_blue.jpg', '', 40, 1), - 'interiors_mbu/tile_advanced_blue_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced_blue_shadow.png', '', 40, 0.2), - 'interiors_mbu/tile_advanced_green.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced_green.jpg', '', 40, 1), - 'interiors_mbu/tile_advanced_green_shadow.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced_green_shadow.png', '', 40, 0.2), - 'interiors_mbu/tile_underside.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_underside.jpg', '', 40, 1), + new Vector(0.2, 0.2, 0.2, 0.2)), + 'interiors_mbu/tile_advanced.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced.png', '', 40, new Vector(1, 1, 1, 1)), + 'interiors_mbu/tile_advanced_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced_shadow.png', '', 40, + new Vector(0.2, 0.2, 0.2, 0.2)), + 'interiors_mbu/tile_advanced_blue.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced_blue.jpg', '', 40, new Vector(1, 1, 1, 1)), + 'interiors_mbu/tile_advanced_blue_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced_blue_shadow.png', '', 40, + new Vector(0.2, 0.2, 0.2, 0.2)), + 'interiors_mbu/tile_advanced_green.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced_green.jpg', '', 40, new Vector(1, 1, 1, 1)), + 'interiors_mbu/tile_advanced_green_shadow.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced_green_shadow.png', '', 40, + new Vector(0.2, 0.2, 0.2, 0.2)), + 'interiors_mbu/tile_underside.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_underside.jpg', '', 40, new Vector(1, 1, 1, 1)), 'interiors_mbu/wall_beginner.png' => (onFinish) -> createPhongMaterial(onFinish, 'wall_beginner.png', 'wall_mbu.spec.png', 'wall_mbu.normal.png', 12, 0.8), 'interiors_mbu/edge_white.jpg' => (onFinish) -> createPhongMaterial(onFinish, 'edge_white.jpg', 'edge_white_mbu.spec.jpg', diff --git a/src/shaders/NoiseTileMaterial.hx b/src/shaders/NoiseTileMaterial.hx index fd5ba8ae..25368bff 100644 --- a/src/shaders/NoiseTileMaterial.hx +++ b/src/shaders/NoiseTileMaterial.hx @@ -3,11 +3,10 @@ package shaders; class NoiseTileMaterial extends hxsl.Shader { static var SRC = { @param var diffuseMap:Sampler2D; - @param var specularMap:Sampler2D; + @param var specularColor:Vec4; @param var normalMap:Sampler2D; @param var noiseMap:Sampler2D; @param var shininess:Float; - @param var specularIntensity:Float; @param var ambientLight:Vec3; @param var dirLight:Vec3; @param var dirLightDir:Vec3; @@ -37,7 +36,7 @@ class NoiseTileMaterial extends hxsl.Shader { } function lambert(normal:Vec3, lightPosition:Vec3):Float { var result = dot(normal, lightPosition); - return max(result, 0.0); + return saturate(result); } function vertex() { calculatedUV = input.uv; @@ -45,7 +44,6 @@ class NoiseTileMaterial extends hxsl.Shader { function fragment() { // Diffuse part var diffuse = diffuseMap.get(calculatedUV); - // noise var noiseIndex:Vec2; @@ -72,41 +70,36 @@ class NoiseTileMaterial extends hxsl.Shader { noiseColor4 = noiseMap.get(noiseIndex) * 1.0 - 0.5; var finalNoiseCol = (noiseColor1 + noiseColor2 + noiseColor3 + noiseColor4) / 4.0; - diffuse.rgb *= 1.0 + finalNoiseCol.r; // This isn't how MBU does it afaik but it looks good :o + var noiseAdd = finalNoiseCol * diffuse.a; - var incomingLight = vec3(0.0); - var specularLight = vec3(0.0); + var outCol = diffuse + noiseAdd; - incomingLight += ambientLight; var n = transformedNormal; var nf = unpackNormal(normalMap.get(calculatedUV * secondaryMapUvFactor)); var tanX = transformedTangent.xyz.normalize(); var tanY = n.cross(tanX) * -transformedTangent.w; transformedNormal = (nf.x * tanX + nf.y * tanY + nf.z * n).normalize(); - var addedLight = dirLight * lambert(transformedNormal, -dirLightDir); - incomingLight += addedLight; + var bumpDot = dirLight * lambert(transformedNormal, -dirLightDir); + + outCol.xyz *= bumpDot * 0.8 + ambientLight; var r = reflect(dirLightDir, transformedNormal).normalize(); - var specColor = specularMap.get(secondaryMapUvFactor * calculatedUV).r; - var specValue = r.dot((camera.position - transformedPosition).normalize()).max(0.); - specularLight += specColor * pow(specValue, shininess) * specularIntensity; + var specValue = saturate(r.dot((camera.position - transformedPosition).normalize())); + var specular = specularColor * pow(specValue, shininess); - var shaded = diffuse * vec4(incomingLight, 1); - shaded.rgb += specularLight; - - pixelColor = shaded; + outCol += specular * diffuse.a; + pixelColor = outCol; } } - public function new(diffuse, specular, normal, noise, shininess, specularIntensity, ambientLight, dirLight, dirLightDir, secondaryMapUvFactor) { + public function new(diffuse, normal, noise, shininess, specularColor, ambientLight, dirLight, dirLightDir, secondaryMapUvFactor) { super(); this.diffuseMap = diffuse; - this.specularMap = specular; this.normalMap = normal; this.noiseMap = noise; this.shininess = shininess; - this.specularIntensity = specularIntensity; + this.specularColor = specularColor; this.ambientLight = ambientLight.clone(); this.dirLight = dirLight.clone(); this.dirLightDir = dirLightDir.clone();