attempt fix marble smooth and fix few dif bugs, add more materials for customs

This commit is contained in:
RandomityGuy 2024-06-02 12:18:47 +05:30
parent 7fd23609f5
commit 2c404d4ba3
4 changed files with 40 additions and 8 deletions

View file

@ -281,7 +281,8 @@ class DifBuilder {
worker.run();
}
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,
uvScale:Float = 1.0) {
var worker = new ResourceLoaderWorker(() -> {
var diffuseTex = ResourceLoader.getTexture('data/textures/${baseTexture}').resource;
diffuseTex.wrap = Repeat;
@ -293,7 +294,7 @@ class DifBuilder {
var noiseTex = ResourceLoader.getTexture('data/textures/noise${noiseSuffix}.jpg').resource;
noiseTex.wrap = Repeat;
noiseTex.mipMap = None;
var shader = new NoiseTileMaterial(diffuseTex, normalTex, noiseTex, shininess, specular, 1);
var shader = new NoiseTileMaterial(diffuseTex, normalTex, noiseTex, shininess, specular, uvScale);
#if hl
shader.useAccurateNoise = true;
#end
@ -322,6 +323,9 @@ class DifBuilder {
static var shaderMaterialDict:Map<String, (hxsl.Shader->Void)->Void> = [
'plate_1' => (onFinish) -> createDefaultMaterial(onFinish, 'data/textures/plate.randomize.png', 'data/textures/plate.normal.png', 8,
new Vector(1, 1, 0.8, 1), 1, true),
'plate_1_small' => (onFinish) -> createDefaultMaterial(onFinish, 'data/textures/plate.randomize.png', 'data/textures/plate.normal.png', 8,
new Vector(1, 1, 0.8, 1), 1, false),
// Tiles
'tile_beginner' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '', 40, new Vector(1, 1, 1, 1)),
'tile_beginner_shadow' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '_shadow', 40, new Vector(0.2, 0.2, 0.2, 0.2)),
'tile_beginner_red' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '_red', 40, new Vector(1, 1, 1, 1)),
@ -344,6 +348,33 @@ class DifBuilder {
'tile_advanced_green_shadow' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced.png', '_green_shadow', 40,
new Vector(0.2, 0.2, 0.2, 0.2)),
'tile_underside' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_underside.png', '', 40, new Vector(1, 1, 1, 1)),
// 4x4 Variant
'tile_beginner_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '', 40, new Vector(1, 1, 1, 1), 4),
'tile_beginner_shadow_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '_shadow', 40, new Vector(0.2, 0.2, 0.2, 0.2), 4),
'tile_beginner_red_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '_red', 40, new Vector(1, 1, 1, 1), 4),
'tile_beginner_red_shadow_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '_red_shadow', 40,
new Vector(0.2, 0.2, 0.2, 0.2), 4),
'tile_beginner_blue_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '_blue', 40, new Vector(1, 1, 1, 1), 4),
'tile_beginner_blue_shadow_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_beginner.png', '_blue_shadow', 40,
new Vector(0.2, 0.2, 0.2, 0.2), 4),
'tile_intermediate_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate.png', '', 40, new Vector(1, 1, 1, 1), 4),
'tile_intermediate_shadow_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate.png', '_shadow', 40,
new Vector(0.2, 0.2, 0.2, 0.2), 4),
'tile_intermediate_red_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate.png', '_red', 40, new Vector(1, 1, 1, 1), 4),
'tile_intermediate_red_shadow_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate.png', '_red_shadow', 40,
new Vector(0.2, 0.2, 0.2, 0.2), 4),
'tile_intermediate_green_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate.png', '_green', 40, new Vector(1, 1, 1, 1), 4),
'tile_intermediate_green_shadow_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_intermediate.png', '_green_shadow', 40,
new Vector(0.2, 0.2, 0.2, 0.2), 4),
'tile_advanced_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced.png', '', 40, new Vector(1, 1, 1, 1), 4),
'tile_advanced_shadow_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced.png', '_shadow', 40, new Vector(0.2, 0.2, 0.2, 0.2), 4),
'tile_advanced_blue_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced.png', '_blue', 40, new Vector(1, 1, 1, 1), 4),
'tile_advanced_blue_shadow_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced.png', '_blue_shadow', 40,
new Vector(0.2, 0.2, 0.2, 0.2), 4),
'tile_advanced_green_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced.png', '_green', 40, new Vector(1, 1, 1, 1), 4),
'tile_advanced_green_shadow_4x4' => (onFinish) -> createNoiseTileMaterial(onFinish, 'tile_advanced.png', '_green_shadow', 40,
new Vector(0.2, 0.2, 0.2, 0.2), 4),
// Others
'wall_beginner' => (onFinish) -> createDefaultNormalMaterial(onFinish, 'data/textures/wall_beginner.png', 12, new Vector(0.8, 0.8, 0.6, 1)),
'edge_white' => (onFinish) -> createDefaultMaterial(onFinish, 'data/textures/edge_white.png', 'data/textures/edge.normal.png', 50,
new Vector(0.8, 0.8, 0.8, 1)),
@ -923,7 +954,7 @@ class DifBuilder {
var texture:Texture;
var material:Material;
var exactName = StringTools.replace(grp.toLowerCase(), "textures/", "");
var exactName = stripTexName(StringTools.replace(grp.toLowerCase(), "textures/", ""));
if (canFindTex(grp) || shaderMaterialDict.exists(exactName)) {
material = h3d.mat.Material.create();
if (shaderMaterialDict.exists(exactName)) {

View file

@ -1942,7 +1942,7 @@ class Marble extends GameObject {
function calculateNetSmooth() {
if (this.netCorrected) {
this.netCorrected = false;
this.netSmoothOffset.load(this.lastRenderPos.sub(this.newPos));
this.netSmoothOffset.load(this.lastRenderPos.sub(this.oldPos));
// this.oldPos.load(this.posStore);
}
}
@ -2020,7 +2020,8 @@ class Marble extends GameObject {
var newDt = 2.3 * (timeState.dt / 0.4);
var smooth = 1.0 / (newDt * (newDt * 0.235 * newDt) + newDt + 1.0 + 0.48 * newDt * newDt);
this.netSmoothOffset.scale(smooth);
if (this.netSmoothOffset.lengthSq() < 0.1)
var smoothScale = this.netSmoothOffset.lengthSq();
if (smoothScale < 0.1 || smoothScale > 10.0)
this.netSmoothOffset.set(0, 0, 0);
if (oldPos != null && newPos != null) {

View file

@ -313,7 +313,7 @@ class HuntMode extends NullMode {
}
override function onGemPickup(marble:Marble, gem:Gem) {
if (@:privateAccess !marble.isNetUpdate && Net.isHost) {
if ((@:privateAccess !marble.isNetUpdate && Net.isHost) || !Net.isMP) {
if (marble == level.marble)
AudioManager.playSound(ResourceLoader.getResource('data/sound/gem_collect.wav', ResourceLoader.getAudio,
@:privateAccess this.level.soundResources));

View file

@ -39,7 +39,7 @@ class NoiseTileMaterial extends hxsl.Shader {
return mat3(vec3(m[0].x, m[1].x, m[2].x), vec3(m[0].y, m[1].y, m[2].y), vec3(m[0].z, m[1].z, m[2].z));
}
function vertex() {
calculatedUV = input.uv;
calculatedUV = input.uv * secondaryMapUvFactor;
var objToTangentSpace = mat3(input.t, input.b, input.n);
outLightVec = vec4(0);
var inLightVec = vec3(-0.5732, 0.27536, -0.77176) * mat3(global.modelViewTranspose);
@ -57,7 +57,7 @@ class NoiseTileMaterial extends hxsl.Shader {
outLightVec.w = step(0, dot(n, -inLightVec));
}
function fragment() {
var bumpNormal = normalMap.get(calculatedUV * secondaryMapUvFactor).xyz * 2 - 1;
var bumpNormal = normalMap.get(calculatedUV).xyz * 2 - 1;
var bumpDot = saturate(dot(bumpNormal, outLightVec.xyz));
// Diffuse part
var diffuse = diffuseMap.get(calculatedUV);