mbu-real-tex
BIN
data/interiors_mbu/beam.jpg
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 14 KiB |
BIN
data/interiors_mbu/beam_side.jpg
Normal file
|
After Width: | Height: | Size: 752 B |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 3.4 KiB |
BIN
data/interiors_mbu/edge_white.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
data/interiors_mbu/edge_white_shadow.jpg
Normal file
|
After Width: | Height: | Size: 3 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 28 KiB |
BIN
data/interiors_mbu/friction_high.jpg
Normal file
|
After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 402 KiB After Width: | Height: | Size: 483 KiB |
BIN
data/interiors_mbu/friction_high_shadow.jpg
Normal file
|
After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 369 KiB After Width: | Height: | Size: 372 KiB |
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 41 KiB |
BIN
data/interiors_mbu/friction_low.png
Normal file
|
After Width: | Height: | Size: 441 KiB |
BIN
data/interiors_mbu/friction_low_shadow.jpg
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
|
Before Width: | Height: | Size: 277 KiB After Width: | Height: | Size: 126 KiB |
BIN
data/interiors_mbu/plate.randomize.jpg
Normal file
|
After Width: | Height: | Size: 192 KiB |
BIN
data/interiors_mbu/plate.randomize.png
Normal file
|
After Width: | Height: | Size: 2 MiB |
BIN
data/interiors_mbu/stripe_caution.jpg
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 5 KiB After Width: | Height: | Size: 19 KiB |
BIN
data/interiors_mbu/tile_advanced.jpg
Normal file
|
After Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 740 KiB After Width: | Height: | Size: 858 KiB |
|
Before Width: | Height: | Size: 405 KiB After Width: | Height: | Size: 587 KiB |
BIN
data/interiors_mbu/tile_intermediate.jpg
Normal file
|
After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 584 KiB After Width: | Height: | Size: 736 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 14 KiB |
BIN
data/interiors_mbu/tile_underside.png
Normal file
|
After Width: | Height: | Size: 136 KiB |
BIN
data/interiors_mbu/wall_beginner.jpg
Normal file
|
After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 118 KiB |
BIN
data/shaders/tex/beam.normal.jpg
Normal file
|
After Width: | Height: | Size: 293 B |
BIN
data/shaders/tex/beam_side.normal.jpg
Normal file
|
After Width: | Height: | Size: 498 B |
BIN
data/shaders/tex/edge.normal.jpg
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
data/shaders/tex/friction_high.normal.jpg
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
data/shaders/tex/friction_low.normal.jpg
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
data/shaders/tex/plate.normal.jpg
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
|
|
@ -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: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/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',
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||