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() {
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";
shadowColor = "0.000000 0.000000 0.150000 0.350000";
};

View file

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

View file

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

View file

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

View file

@ -43,8 +43,8 @@ new SimGroup(MissionGroup) {
windEffectPrecipitation = "0";
};
new Sun() {
color = "1 1 0.9 1";
ambient = "0.4 0.4 0.5 1";
color = "1.080000 1.030000 0.900000 1.000000";
ambient = "0.400000 0.400000 0.500000 1.000000";
direction = "0.573201 0.275357 -0.771764";
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,
specularIntensity:Float, secMapUVFactor:Float = 1) {
static function createPhongMaterial(onFinish:hxsl.Shader->Void, baseTexture:String, normalTexture:String, shininess:Float, specularColor:Vector,
uvScaleFactor:Float = 1) {
var worker = new ResourceLoaderWorker(() -> {
var diffuseTex = ResourceLoader.getTexture('data/interiors_mbu/${baseTexture}').resource;
var specularTex = ResourceLoader.getTexture('data/shaders/tex/${specTexture}').resource;
specularTex.wrap = Repeat;
diffuseTex.wrap = Repeat;
var normalTex = ResourceLoader.getTexture('data/shaders/tex/${normalTexture}').resource;
normalTex.wrap = Repeat;
var shader = new PhongMaterial(diffuseTex, specularTex, normalTex, shininess, specularIntensity, MarbleGame.instance.world.ambient,
MarbleGame.instance.world.dirLight, MarbleGame.instance.world.dirLightDir, secMapUVFactor);
var shader = new PhongMaterial(diffuseTex, normalTex, shininess, specularColor, MarbleGame.instance.world.ambient,
MarbleGame.instance.world.dirLight, MarbleGame.instance.world.dirLightDir, uvScaleFactor);
onFinish(shader);
});
worker.loadFile('interiors_mbu/${baseTexture}');
worker.loadFile('shaders/tex/${specTexture}');
worker.loadFile('shaders/tex/${normalTexture}');
worker.run();
}
@ -193,6 +191,7 @@ class DifBuilder {
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;
diffuseTex.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;
@ -223,53 +222,54 @@ class DifBuilder {
}
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_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)),
'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,
'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.png', '_red_shadow', 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,
'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.png', '_blue_shadow', 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,
'interiors_mbu/tile_intermediate_shadow.png' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate.png', '_shadow', 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,
'interiors_mbu/tile_intermediate_red.jpg' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate.png', '_red', 40,
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)),
'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)),
'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)),
'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)),
'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,
'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.png', '_blue_shadow', 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,
'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.png', '_green_shadow', 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',
'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, 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', 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', 128, 0.3),
'interiors_mbu/friction_high.png' => (onFinish) -> createPhongMaterial(onFinish, 'friction_high.png', 'friction_high_mbu.spec.png',
'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', 10, 0.15, 2)
'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.normal.png', 12,
new Vector(0.8, 0.8, 0.6, 1)),
'interiors_mbu/edge_white.png' => (onFinish) -> createPhongMaterial(onFinish, 'edge_white.png', 'edge.normal.png', 50, new Vector(0.8, 0.8, 0.8, 1)),
'interiors_mbu/edge_white_shadow.png' => (onFinish) -> createPhongMaterial(onFinish, 'edge_white_shadow.png', 'edge.normal.png', 50,
new Vector(0.2, 0.2, 0.2, 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_side.png' => (onFinish) -> createPhongMaterial(onFinish, 'beam_side.png', 'beam_side.normal.png', 12,
new Vector(0.8, 0.8, 0.6, 1)),
'interiors_mbu/friction_low.png' => (onFinish) -> createPhongMaterial(onFinish, 'friction_low.png', 'friction_low.normal.png', 128,
new Vector(1, 1, 1, 0.8)),
'interiors_mbu/friction_low_shadow.png' => (onFinish) -> createPhongMaterial(onFinish, 'friction_low_shadow.png', 'friction_low.normal.png', 128,
new Vector(0.3, 0.3, 0.35, 1)),
'interiors_mbu/friction_high.png' => (onFinish) -> createPhongMaterial(onFinish, 'friction_high.png', 'friction_high.normal.png', 10,
new Vector(0.3, 0.3, 0.35, 1)),
'interiors_mbu/friction_high_shadow.png' => (onFinish) -> createPhongMaterial(onFinish, 'friction_high_shadow.png', 'friction_high.normal.png', 10,
new Vector(0.15, 0.15, 0.16, 1.0))
];
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 nf = unpackNormal(normalMap.get(calculatedUV * secondaryMapUvFactor));
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();
var bumpDot = dirLight * lambert(transformedNormal, -dirLightDir);
outCol.xyz *= bumpDot * 0.8 + ambientLight;
outCol.xyz *= bumpDot + ambientLight;
var r = reflect(dirLightDir, transformedNormal).normalize();
var specValue = saturate(r.dot((camera.position - transformedPosition).normalize()));

View file

@ -3,14 +3,13 @@ package shaders;
class PhongMaterial extends hxsl.Shader {
static var SRC = {
@param var diffuseMap:Sampler2D;
@param var specularMap:Sampler2D;
@param var normalMap:Sampler2D;
@param var shininess:Float;
@param var specularIntensity:Float;
@param var specularColor:Vec4;
@param var ambientLight:Vec3;
@param var dirLight:Vec3;
@param var dirLightDir:Vec3;
@param var secondaryMapUvFactor:Float;
@param var uvScaleFactor:Float;
@global var camera:{
var position:Vec3;
@var var dir:Vec3;
@ -36,50 +35,44 @@ class PhongMaterial 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;
calculatedUV = input.uv * uvScaleFactor;
}
function fragment() {
// Diffuse part
var diffuse = diffuseMap.get(calculatedUV);
var outCol = diffuse;
var incomingLight = vec3(0.0);
var specularLight = vec3(0.0);
incomingLight += ambientLight;
var n = transformedNormal;
var nf = unpackNormal(normalMap.get(calculatedUV * secondaryMapUvFactor));
var nf = unpackNormal(normalMap.get(calculatedUV));
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();
var addedLight = dirLight * lambert(transformedNormal, -dirLightDir);
incomingLight += addedLight;
var bumpDot = dirLight * lambert(transformedNormal, -dirLightDir);
outCol.xyz *= bumpDot + 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;
outCol += specular * diffuse.a;
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();
this.diffuseMap = diffuse;
this.specularMap = specular;
this.normalMap = normal;
this.shininess = shininess;
this.specularIntensity = specularIntensity;
this.specularColor = specularVal;
this.ambientLight = ambientLight.clone();
this.dirLight = dirLight.clone();
this.dirLightDir = dirLightDir.clone();
this.secondaryMapUvFactor = secondaryMapUvFactor;
this.uvScaleFactor = uvScaleFactor;
}
}