update mbu shaders

This commit is contained in:
RandomityGuy 2022-12-30 10:03:08 +05:30
parent 3ea6926871
commit d0dcb5f6c9
4 changed files with 37 additions and 2 deletions

View file

@ -187,6 +187,8 @@ class DifBuilder {
normalTex.mipMap = Nearest;
var shader = new PhongMaterial(diffuseTex, normalTex, shininess, specularColor, MarbleGame.instance.world.ambient,
MarbleGame.instance.world.dirLight, MarbleGame.instance.world.dirLightDir, uvScaleFactor);
if (uvScaleFactor == 0.5)
shader.isHalfTile = true;
onFinish(shader);
});
worker.loadFile('interiors_mbu/${baseTexture}');

View file

@ -1,5 +1,6 @@
package src;
import shaders.Gamma;
import collision.Collision;
import shapes.MegaMarble;
import shapes.Blast;
@ -271,6 +272,9 @@ class MarbleWorld extends Scheduler {
var worker = new ResourceLoaderWorker(() -> {
var renderer = cast(this.scene.renderer, h3d.scene.fwd.Renderer);
var gammaRes = ResourceLoader.getResource('data/shaders/gammaRamp.png', ResourceLoader.getTexture, this.textureResources);
gammaRes.wrap = Repeat;
// renderer.addShader(new Gamma(gammaRes, 1 / gammaRes.width));
for (element in mission.root.elements) {
if (element._type != MissionElementType.Sun)
@ -280,6 +284,9 @@ class MarbleWorld extends Scheduler {
var directionalColor = MisParser.parseVector4(sunElement.color);
var ambientColor = MisParser.parseVector4(sunElement.ambient);
ambientColor.r *= 1.18;
ambientColor.g *= 1.06;
ambientColor.b *= 0.95;
var sunDirection = MisParser.parseVector3(sunElement.direction);
sunDirection.x = -sunDirection.x;
// sunDirection.z = -sunDirection.z;

25
src/shaders/Gamma.hx Normal file
View file

@ -0,0 +1,25 @@
package shaders;
class Gamma extends h3d.shader.ScreenShader {
static var SRC = {
@param var texture:Sampler2D;
@param var gammaMap:Sampler2D;
@param var gammaRampInvSize:Float;
function fragment() {
var c = texture.get(input.uv);
c = c * (1 - gammaRampInvSize) + 0.5 * gammaRampInvSize;
c.x = gammaMap.get(vec2(c.x, 0)).x;
c.y = gammaMap.get(vec2(c.y, 0)).x;
c.z = gammaMap.get(vec2(c.z, 0)).x;
c.a = 1;
output.color = c;
}
}
public function new(gammaMap, gammaRampInvSize) {
super();
this.gammaMap = gammaMap;
this.gammaRampInvSize = gammaRampInvSize;
}
}

View file

@ -10,6 +10,7 @@ class PhongMaterial extends hxsl.Shader {
@param var dirLight:Vec3;
@param var dirLightDir:Vec3;
@param var uvScaleFactor:Float;
@const var isHalfTile:Bool = false;
@global var camera:{
var position:Vec3;
@var var dir:Vec3;
@ -35,8 +36,8 @@ class PhongMaterial extends hxsl.Shader {
transformedTangent = vec4(input.tangent * global.modelView.mat3(), input.tangent.dot(input.tangent) > 0.5 ? 1. : -1.);
}
function lambert(normal:Vec3, lightPosition:Vec3):Float {
var result = dot(normal, lightPosition);
return saturate(result);
var result = isHalfTile ? dot(normal, lightPosition) : ((dot(normal, lightPosition) + 1) * 0.5);
return result;
}
function vertex() {
calculatedUV = input.uv * uvScaleFactor;