real MBU materials

This commit is contained in:
RandomityGuy 2022-12-09 15:06:22 +05:30
parent 2c94aa864e
commit 49b22ef2ad
35 changed files with 67 additions and 74 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 752 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

View file

@ -48,7 +48,7 @@ new SimGroup(MissionGroup) {
}; };
new Sun() { new Sun() {
direction = "0.573201 0.275357 -0.771764"; direction = "0.573201 0.275357 -0.771764";
color = "1.000000 1.000000 0.900000 1.000000"; color = "1.080000 1.030000 0.900000 1.000000";
ambient = "0.400000 0.400000 0.500000 1.000000"; ambient = "0.400000 0.400000 0.500000 1.000000";
shadowColor = "0.000000 0.000000 0.150000 0.350000"; shadowColor = "0.000000 0.000000 0.150000 0.350000";
}; };

View file

@ -46,8 +46,8 @@ new SimGroup(MissionGroup) {
dataBlock = "wintry"; dataBlock = "wintry";
}; };
new Sun() { new Sun() {
color = "1 1 0.9 1"; color = "1.080000 1.030000 0.900000 1.000000";
ambient = "0.4 0.4 0.5 1"; ambient = "0.400000 0.400000 0.500000 1.000000";
direction = "0.573201 0.275357 -0.771764"; direction = "0.573201 0.275357 -0.771764";
shadowColor = "0.000000 0.000000 0.150000 0.350000"; shadowColor = "0.000000 0.000000 0.150000 0.350000";
}; };

View file

@ -37,8 +37,8 @@ new SimGroup(MissionGroup) {
windEffectPrecipitation = "0"; windEffectPrecipitation = "0";
}; };
new Sun() { new Sun() {
color = "1 1 0.9 1"; color = "1.080000 1.030000 0.900000 1.000000";
ambient = "0.4 0.4 0.5 1"; ambient = "0.400000 0.400000 0.500000 1.000000";
direction = "0.573201 0.275357 -0.771764"; direction = "0.573201 0.275357 -0.771764";
shadowColor = "0.000000 0.000000 0.150000 0.350000"; shadowColor = "0.000000 0.000000 0.150000 0.350000";
}; };

View file

@ -84,8 +84,8 @@ new SimGroup(MissionGroup) {
dataBlock = "dusk"; dataBlock = "dusk";
}; };
new Sun() { new Sun() {
color = "1 1 0.9 1"; color = "1.080000 1.030000 0.900000 1.000000";
ambient = "0.4 0.4 0.5 1"; ambient = "0.400000 0.400000 0.500000 1.000000";
direction = "0.573201 0.275357 -0.771764"; direction = "0.573201 0.275357 -0.771764";
shadowColor = "0.000000 0.000000 0.150000 0.350000"; shadowColor = "0.000000 0.000000 0.150000 0.350000";
}; };

View file

@ -43,8 +43,8 @@ new SimGroup(MissionGroup) {
windEffectPrecipitation = "0"; windEffectPrecipitation = "0";
}; };
new Sun() { new Sun() {
color = "1 1 0.9 1"; color = "1.080000 1.030000 0.900000 1.000000";
ambient = "0.4 0.4 0.5 1"; ambient = "0.400000 0.400000 0.500000 1.000000";
direction = "0.573201 0.275357 -0.771764"; direction = "0.573201 0.275357 -0.771764";
shadowColor = "0.000000 0.000000 0.150000 0.350000"; shadowColor = "0.000000 0.000000 0.150000 0.350000";
}; };

Binary file not shown.

Before

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 498 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -172,20 +172,18 @@ class DifBuilder {
} }
]; ];
static function createPhongMaterial(onFinish:hxsl.Shader->Void, baseTexture:String, specTexture:String, normalTexture:String, shininess:Float, static function createPhongMaterial(onFinish:hxsl.Shader->Void, baseTexture:String, normalTexture:String, shininess:Float, specularColor:Vector,
specularIntensity:Float, secMapUVFactor:Float = 1) { uvScaleFactor:Float = 1) {
var worker = new ResourceLoaderWorker(() -> { var worker = new ResourceLoaderWorker(() -> {
var diffuseTex = ResourceLoader.getTexture('data/interiors_mbu/${baseTexture}').resource; var diffuseTex = ResourceLoader.getTexture('data/interiors_mbu/${baseTexture}').resource;
var specularTex = ResourceLoader.getTexture('data/shaders/tex/${specTexture}').resource; diffuseTex.wrap = Repeat;
specularTex.wrap = Repeat;
var normalTex = ResourceLoader.getTexture('data/shaders/tex/${normalTexture}').resource; var normalTex = ResourceLoader.getTexture('data/shaders/tex/${normalTexture}').resource;
normalTex.wrap = Repeat; normalTex.wrap = Repeat;
var shader = new PhongMaterial(diffuseTex, specularTex, normalTex, shininess, specularIntensity, MarbleGame.instance.world.ambient, var shader = new PhongMaterial(diffuseTex, normalTex, shininess, specularColor, MarbleGame.instance.world.ambient,
MarbleGame.instance.world.dirLight, MarbleGame.instance.world.dirLightDir, secMapUVFactor); MarbleGame.instance.world.dirLight, MarbleGame.instance.world.dirLightDir, uvScaleFactor);
onFinish(shader); onFinish(shader);
}); });
worker.loadFile('interiors_mbu/${baseTexture}'); worker.loadFile('interiors_mbu/${baseTexture}');
worker.loadFile('shaders/tex/${specTexture}');
worker.loadFile('shaders/tex/${normalTexture}'); worker.loadFile('shaders/tex/${normalTexture}');
worker.run(); worker.run();
} }
@ -193,6 +191,7 @@ class DifBuilder {
static function createNoiseTileMaterial(onFinish:hxsl.Shader->Void, baseTexture:String, noiseSuffix:String, shininess:Float, specular:Vector) { static function createNoiseTileMaterial(onFinish:hxsl.Shader->Void, baseTexture:String, noiseSuffix:String, shininess:Float, specular:Vector) {
var worker = new ResourceLoaderWorker(() -> { var worker = new ResourceLoaderWorker(() -> {
var diffuseTex = ResourceLoader.getTexture('data/interiors_mbu/${baseTexture}').resource; var diffuseTex = ResourceLoader.getTexture('data/interiors_mbu/${baseTexture}').resource;
diffuseTex.wrap = Repeat;
var normalTex = ResourceLoader.getTexture('data/shaders/tex/tile_mbu.normal.png').resource; var normalTex = ResourceLoader.getTexture('data/shaders/tex/tile_mbu.normal.png').resource;
normalTex.wrap = Repeat; normalTex.wrap = Repeat;
var noiseTex = ResourceLoader.getTexture('data/shaders/tex/noise${noiseSuffix}.jpg').resource; var noiseTex = ResourceLoader.getTexture('data/shaders/tex/noise${noiseSuffix}.jpg').resource;
@ -223,53 +222,54 @@ class DifBuilder {
} }
static var shaderMaterialDict:Map<String, (hxsl.Shader->Void)->Void> = [ static var shaderMaterialDict:Map<String, (hxsl.Shader->Void)->Void> = [
'interiors_mbu/plate_1.jpg' => (onFinish) -> createPhongMaterial(onFinish, 'plate_1.jpg', 'plate_mbu.spec.jpg', 'plate_mbu.normal.png', 8, 1), 'interiors_mbu/plate_1.jpg' => (onFinish) -> createPhongMaterial(onFinish, 'plate.randomize.png', 'plate.normal.png', 8, new Vector(1, 1, 0.8, 1),
0.5),
'interiors_mbu/tile_beginner.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '', 40, new Vector(1, 1, 1, 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, 'interiors_mbu/tile_beginner_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '_shadow', 40,
new Vector(0.2, 0.2, 0.2, 0.2)), 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.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '_red', 40, new Vector(1, 1, 1, 1)),
'interiors_mbu/tile_beginner_red_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner_red_shadow.png', '', 40, 'interiors_mbu/tile_beginner_red_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '_red_shadow', 40,
new Vector(0.2, 0.2, 0.2, 0.2)), 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.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '_blue', 40, new Vector(1, 1, 1, 1)),
'interiors_mbu/tile_beginner_blue_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner_blue_shadow.png', '', 40, 'interiors_mbu/tile_beginner_blue_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '_blue_shadow', 40,
new Vector(0.2, 0.2, 0.2, 0.2)), 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.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, 'interiors_mbu/tile_intermediate_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate.png', '_shadow', 40,
new Vector(0.2, 0.2, 0.2, 0.2)), new Vector(0.2, 0.2, 0.2, 0.2)),
'interiors_mbu/tile_intermediate_red.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_red.jpg', '', 40, 'interiors_mbu/tile_intermediate_red.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate.png', '_red', 40,
new Vector(1, 1, 1, 1)), new Vector(1, 1, 1, 1)),
'interiors_mbu/tile_intermediate_red_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_red_shadow.png', '', 40, 'interiors_mbu/tile_intermediate_red_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate.png', '_red_shadow', 40,
new Vector(0.2, 0.2, 0.2, 0.2)), new Vector(0.2, 0.2, 0.2, 0.2)),
'interiors_mbu/tile_intermediate_green.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_green.jpg', '', 40, 'interiors_mbu/tile_intermediate_green.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate.png', '_green', 40,
new Vector(1, 1, 1, 1)), new Vector(1, 1, 1, 1)),
'interiors_mbu/tile_intermediate_green_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate_green_shadow.png', '', 40, 'interiors_mbu/tile_intermediate_green_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate.png', '_green_shadow', 40,
new Vector(0.2, 0.2, 0.2, 0.2)), 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.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, 'interiors_mbu/tile_advanced_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced.png', '_shadow', 40,
new Vector(0.2, 0.2, 0.2, 0.2)), 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.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced.png', '_blue', 40, new Vector(1, 1, 1, 1)),
'interiors_mbu/tile_advanced_blue_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced_blue_shadow.png', '', 40, 'interiors_mbu/tile_advanced_blue_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced.png', '_blue_shadow', 40,
new Vector(0.2, 0.2, 0.2, 0.2)), 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.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced.png', '_green', 40, new Vector(1, 1, 1, 1)),
'interiors_mbu/tile_advanced_green_shadow.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced_green_shadow.png', '', 40, 'interiors_mbu/tile_advanced_green_shadow.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced.png', '_green_shadow', 40,
new Vector(0.2, 0.2, 0.2, 0.2)), 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/tile_underside.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_underside.png', '', 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, 'interiors_mbu/wall_beginner.png' => (onFinish) -> createPhongMaterial(onFinish, 'wall_beginner.png', 'wall_mbu.normal.png', 12,
0.8), new Vector(0.8, 0.8, 0.6, 1)),
'interiors_mbu/edge_white.jpg' => (onFinish) -> createPhongMaterial(onFinish, 'edge_white.jpg', 'edge_white_mbu.spec.jpg', 'interiors_mbu/edge_white.png' => (onFinish) -> createPhongMaterial(onFinish, 'edge_white.png', 'edge.normal.png', 50, new Vector(0.8, 0.8, 0.8, 1)),
'edge_white_mbu.normal.jpg', 50, 0.8), 'interiors_mbu/edge_white_shadow.png' => (onFinish) -> createPhongMaterial(onFinish, 'edge_white_shadow.png', 'edge.normal.png', 50,
'interiors_mbu/edge_white_shadow.png' => (onFinish) -> createPhongMaterial(onFinish, 'edge_white_shadow.png', 'edge_white_mbu.spec.jpg', new Vector(0.2, 0.2, 0.2, 0.2)),
'edge_white_mbu.normal.jpg', 50, 0.2), 'interiors_mbu/beam.png' => (onFinish) -> createPhongMaterial(onFinish, 'beam.png', 'beam.normal.png', 12, new Vector(0.8, 0.8, 0.6, 1)),
'interiors_mbu/beam.png' => (onFinish) -> createNormalMapMaterial(onFinish, 'beam.png', 'beam_side_mbu.normal.png'), 'interiors_mbu/beam_side.png' => (onFinish) -> createPhongMaterial(onFinish, 'beam_side.png', 'beam_side.normal.png', 12,
'interiors_mbu/beam_side.png' => (onFinish) -> createNormalMapMaterial(onFinish, 'beam_side.png', 'beam_side_mbu.normal.png'), new Vector(0.8, 0.8, 0.6, 1)),
'interiors_mbu/friction_low.jpg' => (onFinish) -> createPhongMaterial(onFinish, 'friction_low.jpg', 'friction_low_mbu.spec.png', 'interiors_mbu/friction_low.png' => (onFinish) -> createPhongMaterial(onFinish, 'friction_low.png', 'friction_low.normal.png', 128,
'friction_low_mbu.normal.png', 128, 1), new Vector(1, 1, 1, 0.8)),
'interiors_mbu/friction_low_shadow.png' => (onFinish) -> createPhongMaterial(onFinish, 'friction_low_shadow.png', 'friction_low_mbu.spec.png', 'interiors_mbu/friction_low_shadow.png' => (onFinish) -> createPhongMaterial(onFinish, 'friction_low_shadow.png', 'friction_low.normal.png', 128,
'friction_low_mbu.normal.png', 128, 0.3), new Vector(0.3, 0.3, 0.35, 1)),
'interiors_mbu/friction_high.png' => (onFinish) -> createPhongMaterial(onFinish, 'friction_high.png', 'friction_high_mbu.spec.png', 'interiors_mbu/friction_high.png' => (onFinish) -> createPhongMaterial(onFinish, 'friction_high.png', 'friction_high.normal.png', 10,
'friction_high_mbu.normal.png', 10, 0.3, 2), new Vector(0.3, 0.3, 0.35, 1)),
'interiors_mbu/friction_high_shadow.png' => (onFinish) -> createPhongMaterial(onFinish, 'friction_high_shadow.png', 'friction_high_mbu.spec.png', 'interiors_mbu/friction_high_shadow.png' => (onFinish) -> createPhongMaterial(onFinish, 'friction_high_shadow.png', 'friction_high.normal.png', 10,
'friction_high_mbu.normal.png', 10, 0.15, 2) new Vector(0.15, 0.15, 0.16, 1.0))
]; ];
public static function loadDif(path:String, itr:InteriorObject, onFinish:Void->Void, ?so:Int = -1) { public static function loadDif(path:String, itr:InteriorObject, onFinish:Void->Void, ?so:Int = -1) {

View file

@ -77,12 +77,12 @@ class NoiseTileMaterial extends hxsl.Shader {
var n = transformedNormal; var n = transformedNormal;
var nf = unpackNormal(normalMap.get(calculatedUV * secondaryMapUvFactor)); var nf = unpackNormal(normalMap.get(calculatedUV * secondaryMapUvFactor));
var tanX = transformedTangent.xyz.normalize(); var tanX = transformedTangent.xyz.normalize();
var tanY = n.cross(tanX) * -transformedTangent.w; var tanY = n.cross(tanX) * transformedTangent.w;
transformedNormal = (nf.x * tanX + nf.y * tanY + nf.z * n).normalize(); transformedNormal = (nf.x * tanX + nf.y * tanY + nf.z * n).normalize();
var bumpDot = dirLight * lambert(transformedNormal, -dirLightDir); var bumpDot = dirLight * lambert(transformedNormal, -dirLightDir);
outCol.xyz *= bumpDot * 0.8 + ambientLight; outCol.xyz *= bumpDot + ambientLight;
var r = reflect(dirLightDir, transformedNormal).normalize(); var r = reflect(dirLightDir, transformedNormal).normalize();
var specValue = saturate(r.dot((camera.position - transformedPosition).normalize())); var specValue = saturate(r.dot((camera.position - transformedPosition).normalize()));

View file

@ -3,14 +3,13 @@ package shaders;
class PhongMaterial extends hxsl.Shader { class PhongMaterial extends hxsl.Shader {
static var SRC = { static var SRC = {
@param var diffuseMap:Sampler2D; @param var diffuseMap:Sampler2D;
@param var specularMap:Sampler2D;
@param var normalMap:Sampler2D; @param var normalMap:Sampler2D;
@param var shininess:Float; @param var shininess:Float;
@param var specularIntensity:Float; @param var specularColor:Vec4;
@param var ambientLight:Vec3; @param var ambientLight:Vec3;
@param var dirLight:Vec3; @param var dirLight:Vec3;
@param var dirLightDir:Vec3; @param var dirLightDir:Vec3;
@param var secondaryMapUvFactor:Float; @param var uvScaleFactor:Float;
@global var camera:{ @global var camera:{
var position:Vec3; var position:Vec3;
@var var dir:Vec3; @var var dir:Vec3;
@ -36,50 +35,44 @@ class PhongMaterial extends hxsl.Shader {
} }
function lambert(normal:Vec3, lightPosition:Vec3):Float { function lambert(normal:Vec3, lightPosition:Vec3):Float {
var result = dot(normal, lightPosition); var result = dot(normal, lightPosition);
return max(result, 0.0); return saturate(result);
} }
function vertex() { function vertex() {
calculatedUV = input.uv; calculatedUV = input.uv * uvScaleFactor;
} }
function fragment() { function fragment() {
// Diffuse part // Diffuse part
var diffuse = diffuseMap.get(calculatedUV); var diffuse = diffuseMap.get(calculatedUV);
var outCol = diffuse;
var incomingLight = vec3(0.0);
var specularLight = vec3(0.0);
incomingLight += ambientLight;
var n = transformedNormal; var n = transformedNormal;
var nf = unpackNormal(normalMap.get(calculatedUV * secondaryMapUvFactor)); var nf = unpackNormal(normalMap.get(calculatedUV));
var tanX = transformedTangent.xyz.normalize(); var tanX = transformedTangent.xyz.normalize();
var tanY = n.cross(tanX) * -transformedTangent.w; var tanY = n.cross(tanX) * transformedTangent.w;
transformedNormal = (nf.x * tanX + nf.y * tanY + nf.z * n).normalize(); transformedNormal = (nf.x * tanX + nf.y * tanY + nf.z * n).normalize();
var addedLight = dirLight * lambert(transformedNormal, -dirLightDir); var bumpDot = dirLight * lambert(transformedNormal, -dirLightDir);
incomingLight += addedLight; outCol.xyz *= bumpDot + ambientLight;
var r = reflect(dirLightDir, transformedNormal).normalize(); var r = reflect(dirLightDir, transformedNormal).normalize();
var specColor = specularMap.get(secondaryMapUvFactor * calculatedUV).r; var specValue = saturate(r.dot((camera.position - transformedPosition).normalize()));
var specValue = r.dot((camera.position - transformedPosition).normalize()).max(0.); var specular = specularColor * pow(specValue, shininess);
specularLight += specColor * pow(specValue, shininess) * specularIntensity;
var shaded = diffuse * vec4(incomingLight, 1); outCol += specular * diffuse.a;
shaded.rgb += specularLight;
pixelColor = shaded; pixelColor = outCol;
} }
} }
public function new(diffuse, specular, normal, shininess, specularIntensity, ambientLight, dirLight, dirLightDir, secondaryMapUvFactor) { public function new(diffuse, normal, shininess, specularVal, ambientLight, dirLight, dirLightDir, uvScaleFactor) {
super(); super();
this.diffuseMap = diffuse; this.diffuseMap = diffuse;
this.specularMap = specular;
this.normalMap = normal; this.normalMap = normal;
this.shininess = shininess; this.shininess = shininess;
this.specularIntensity = specularIntensity; this.specularColor = specularVal;
this.ambientLight = ambientLight.clone(); this.ambientLight = ambientLight.clone();
this.dirLight = dirLight.clone(); this.dirLight = dirLight.clone();
this.dirLightDir = dirLightDir.clone(); this.dirLightDir = dirLightDir.clone();
this.secondaryMapUvFactor = secondaryMapUvFactor; this.uvScaleFactor = uvScaleFactor;
} }
} }