From 7f0a51e9e8f2f9cec7d29c6e7cf5700fa82b4575 Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Thu, 8 Dec 2022 19:47:26 +0530 Subject: [PATCH] fix specular and use mbu values --- src/DifBuilder.hx | 61 ++++++++++++++++---------------- src/shaders/NoiseTileMaterial.hx | 12 +++---- src/shaders/NormalMaterial.hx | 6 ++++ src/shaders/PhongMaterial.hx | 12 +++---- 4 files changed, 45 insertions(+), 46 deletions(-) diff --git a/src/DifBuilder.hx b/src/DifBuilder.hx index fe34ac20..581572fa 100644 --- a/src/DifBuilder.hx +++ b/src/DifBuilder.hx @@ -190,7 +190,7 @@ class DifBuilder { worker.run(); } - static function createNoiseTileMaterial(onFinish:hxsl.Shader->Void, baseTexture:String, noiseSuffix:String) { + static function createNoiseTileMaterial(onFinish:hxsl.Shader->Void, baseTexture:String, noiseSuffix:String, shininess:Float, specularIntensity:Float) { 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; @@ -198,7 +198,7 @@ class DifBuilder { 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; - var shader = new NoiseTileMaterial(diffuseTex, specularTex, normalTex, noiseTex, 40, 0.7, MarbleGame.instance.world.ambient, + var shader = new NoiseTileMaterial(diffuseTex, specularTex, normalTex, noiseTex, shininess, specularIntensity, MarbleGame.instance.world.ambient, MarbleGame.instance.world.dirLight, MarbleGame.instance.world.dirLightDir, 1); onFinish(shader); }); @@ -224,42 +224,43 @@ 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', 30, 0.5), - 'interiors_mbu/tile_beginner.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', ''), - 'interiors_mbu/tile_beginner_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner_shadow.png', ''), - 'interiors_mbu/tile_beginner_red.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner_red.jpg', ''), - 'interiors_mbu/tile_beginner_red_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner_red_shadow.png', ''), - 'interiors_mbu/tile_beginner_blue.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner_blue.jpg', ''), - 'interiors_mbu/tile_beginner_blue_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner_blue_shadow.png', ''), - 'interiors_mbu/tile_intermediate.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate.png', ''), - 'interiors_mbu/tile_intermediate_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_shadow.png', ''), - 'interiors_mbu/tile_intermediate_red.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_red.jpg', ''), - 'interiors_mbu/tile_intermediate_red_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_red_shadow.png', ''), - 'interiors_mbu/tile_intermediate_green.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_green.jpg', ''), - 'interiors_mbu/tile_intermediate_green_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_green_shadow.png', ''), - 'interiors_mbu/tile_advanced.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced.png', ''), - 'interiors_mbu/tile_advanced_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced_shadow.png', ''), - 'interiors_mbu/tile_advanced_blue.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced_blue.jpg', ''), - 'interiors_mbu/tile_advanced_blue_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced_blue_shadow.png', ''), - 'interiors_mbu/tile_advanced_green.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced_green.jpg', ''), - 'interiors_mbu/tile_advanced_green_shadow.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced_green_shadow.png', ''), - 'interiors_mbu/tile_underside.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_underside.jpg', ''), - 'interiors_mbu/wall_beginner.png' => (onFinish) -> createPhongMaterial(onFinish, 'wall_beginner.png', 'wall_mbu.spec.png', 'wall_mbu.normal.png', 30, - 0.5), + '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_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), + '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', - 'edge_white_mbu.normal.jpg', 50, 4), + 'edge_white_mbu.normal.jpg', 50, 0.8), 'interiors_mbu/edge_white_shadow.png' => (onFinish) -> createPhongMaterial(onFinish, 'edge_white_shadow.png', 'edge_white_mbu.spec.jpg', - 'edge_white_mbu.normal.jpg', 50, 4), + 'edge_white_mbu.normal.jpg', 50, 0.2), 'interiors_mbu/beam.png' => (onFinish) -> createNormalMapMaterial(onFinish, 'beam.png', 'beam_side_mbu.normal.png'), 'interiors_mbu/beam_side.png' => (onFinish) -> createNormalMapMaterial(onFinish, 'beam_side.png', 'beam_side_mbu.normal.png'), 'interiors_mbu/friction_low.jpg' => (onFinish) -> createPhongMaterial(onFinish, 'friction_low.jpg', 'friction_low_mbu.spec.png', - 'friction_low_mbu.normal.png', 100, 3), + 'friction_low_mbu.normal.png', 128, 1), 'interiors_mbu/friction_low_shadow.png' => (onFinish) -> createPhongMaterial(onFinish, 'friction_low_shadow.png', 'friction_low_mbu.spec.png', - 'friction_low_mbu.normal.png', 100, 3), + 'friction_low_mbu.normal.png', 128, 0.3), 'interiors_mbu/friction_high.png' => (onFinish) -> createPhongMaterial(onFinish, 'friction_high.png', 'friction_high_mbu.spec.png', - 'friction_high_mbu.normal.png', 30, 0.8, 2), + 'friction_high_mbu.normal.png', 10, 0.3, 2), 'interiors_mbu/friction_high_shadow.png' => (onFinish) -> createPhongMaterial(onFinish, 'friction_high_shadow.png', 'friction_high_mbu.spec.png', - 'friction_high_mbu.normal.png', 30, 0.8, 2) + 'friction_high_mbu.normal.png', 10, 0.15, 2) ]; public static function loadDif(path:String, itr:InteriorObject, onFinish:Void->Void, ?so:Int = -1) { diff --git a/src/shaders/NoiseTileMaterial.hx b/src/shaders/NoiseTileMaterial.hx index 0bd2707d..fd5ba8ae 100644 --- a/src/shaders/NoiseTileMaterial.hx +++ b/src/shaders/NoiseTileMaterial.hx @@ -87,14 +87,10 @@ class NoiseTileMaterial extends hxsl.Shader { var addedLight = dirLight * lambert(transformedNormal, -dirLightDir); incomingLight += addedLight; - var viewDir = normalize(camera.position - transformedPosition.xyz); - var halfwayDir = normalize(-dirLightDir + camera.dir); // Blinn-Phong - - var spec = pow(max(dot(transformedNormal, halfwayDir), 0.0), shininess); - - spec *= specularMap.get(secondaryMapUvFactor * calculatedUV).r; - - specularLight += vec3(specularIntensity * spec); + 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 shaded = diffuse * vec4(incomingLight, 1); shaded.rgb += specularLight; diff --git a/src/shaders/NormalMaterial.hx b/src/shaders/NormalMaterial.hx index ac241d1f..9780eaf6 100644 --- a/src/shaders/NormalMaterial.hx +++ b/src/shaders/NormalMaterial.hx @@ -54,7 +54,13 @@ class NormalMaterial extends hxsl.Shader { var addedLight = dirLight * lambert(transformedNormal, -dirLightDir); incomingLight += addedLight; + var r = reflect(dirLightDir, transformedNormal).normalize(); + var specColor = vec3(1, 1, 1); + var specValue = r.dot((camera.position - transformedPosition).normalize()).max(0.); + specularLight += specColor * pow(specValue, 12) * 0.8; + var shaded = diffuse * vec4(incomingLight, 1); + shaded.rgb += specularLight; pixelColor = shaded; } diff --git a/src/shaders/PhongMaterial.hx b/src/shaders/PhongMaterial.hx index cc62cad2..9dc10cc1 100644 --- a/src/shaders/PhongMaterial.hx +++ b/src/shaders/PhongMaterial.hx @@ -58,14 +58,10 @@ class PhongMaterial extends hxsl.Shader { var addedLight = dirLight * lambert(transformedNormal, -dirLightDir); incomingLight += addedLight; - var viewDir = normalize(camera.position - transformedPosition.xyz); - var halfwayDir = normalize(-dirLightDir + camera.dir); // Blinn-Phong - - var spec = pow(max(dot(transformedNormal, halfwayDir), 0.0), shininess); - - spec *= specularMap.get(secondaryMapUvFactor * calculatedUV).r; - - specularLight += vec3(specularIntensity * spec); + 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 shaded = diffuse * vec4(incomingLight, 1); shaded.rgb += specularLight;