diff --git a/src/InstanceManager.hx b/src/InstanceManager.hx index 9ea6bb02..dda49732 100644 --- a/src/InstanceManager.hx +++ b/src/InstanceManager.hx @@ -72,6 +72,7 @@ class InstanceManager { dtsShader.currentOpacity = instance.gameObject.currentOpacity; } var transform = instance.emptyObj.getAbsPos(); + minfo.meshbatch.shadersChanged = true; minfo.meshbatch.material.mainPass.setPassName(minfo.mesh.material.mainPass.name); minfo.meshbatch.material.mainPass.enableLights = minfo.mesh.material.mainPass.enableLights; minfo.meshbatch.setTransform(transform); @@ -79,7 +80,7 @@ class InstanceManager { } } if (minfo.transparencymeshbatch != null) { - var transparentinstances = visibleinstances.filter(x -> x.gameObject.currentOpacity != 1); + var transparentinstances = visibleinstances.filter(x -> x.gameObject.currentOpacity != 1 && x.gameObject.currentOpacity != 0); // Filter out all zero opacity things too minfo.transparencymeshbatch.begin(transparentinstances.length); for (instance in transparentinstances) { // Non opaque shit var dtsShader = minfo.transparencymeshbatch.material.mainPass.getShader(DtsTexture); diff --git a/src/Marble.hx b/src/Marble.hx index c9caed30..54a42d8f 100644 --- a/src/Marble.hx +++ b/src/Marble.hx @@ -323,10 +323,11 @@ class Marble extends GameObject { if (Settings.optionsSettings.marbleShader == null || Settings.optionsSettings.marbleShader == "Default" - || Settings.optionsSettings.marbleShader == "") { + || Settings.optionsSettings.marbleShader == "" + || !isUltra) { // Use this shit everywhere except ultra mat.mainPass.addShader(new MarbleReflection(this.cubemapRenderer.cubemap)); } else { - // Generate tangents for next shaders + // Generate tangents for next shaders, only for Ultra for (node in marbleDts.graphNodes) { for (ch in node.children) { var chmesh = cast(ch, Mesh); diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index 4d23ba21..810349d8 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -313,7 +313,7 @@ class MarbleWorld extends Scheduler { worker.loadFile(file); } - this.scene.camera.zFar = Std.parseFloat(this.skyElement.visibledistance); + this.scene.camera.zFar = Math.max(4000, Std.parseFloat(this.skyElement.visibledistance)); this.sky = new Sky(); @@ -362,8 +362,14 @@ class MarbleWorld extends Scheduler { "shapes/pads/blue.jpg", "shapes/pads/green.jpg", "shapes/items/gem.dts", // Ew ew - "shapes/items/gemshine.png" + "shapes/items/gemshine.png", ]; + if (this.game == "ultra") { + marblefiles.push("shapes/balls/pack1/marble20.normal.png"); + marblefiles.push("shapes/balls/pack1/marble18.normal.png"); + marblefiles.push("shapes/balls/pack1/marble01.normal.png"); + marblefiles.push("sound/blast.wav"); + } // Hacky marblefiles.push(StringTools.replace(Settings.optionsSettings.marbleModel, "data/", "")); if (Settings.optionsSettings.marbleCategoryIndex == 0) diff --git a/src/Sky.hx b/src/Sky.hx index 953ea7b8..b072a73f 100644 --- a/src/Sky.hx +++ b/src/Sky.hx @@ -46,13 +46,15 @@ class Sky extends Object { // pbrprops.occlusionValue = 0; // pbrprops.metalnessValue = 1; - // skyMesh.scale(3500); + skyMesh.scale(3500); // var env = new Environment(texture); // env.compute(); // var renderer = cast(level.scene.renderer, h3d.scene.pbr.Renderer); var shad = new Skybox(texture); + skyMesh.material.mainPass.removeShader(skyMesh.material.textureShader); skyMesh.material.mainPass.addShader(shad); skyMesh.material.mainPass.depthWrite = false; + skyMesh.material.mainPass.depth(false, h3d.mat.Data.Compare.LessEqual); cubemap = texture; onFinish(); }); diff --git a/src/shaders/Skybox.hx b/src/shaders/Skybox.hx index 09c2f8ec..4a373482 100644 --- a/src/shaders/Skybox.hx +++ b/src/shaders/Skybox.hx @@ -3,21 +3,38 @@ package shaders; class Skybox extends hxsl.Shader { static var SRC = { var pixelColor:Vec4; - var transformedNormal:Vec3; var transformedPosition:Vec3; + var projectedPosition:Vec4; @param var texture:SamplerCube; @global var camera:{ var position:Vec3; var viewProj:Mat4; var view:Mat4; var proj:Mat4; + var projFlip:Float; + }; + @input var input:{ + var position:Vec3; + }; + @global var global:{ + @perObject var modelView:Mat4; + }; + var output:{ + var position:Vec4; + var color:Vec4; + var depth:Float; }; var projNorm:Vec3; + function __init__() { + transformedPosition = input.position * global.modelView.mat3x4(); + projectedPosition = vec4(transformedPosition, 1) * camera.viewProj; + } function vertex() { projNorm = transformedPosition - camera.position; + output.position = projectedPosition * vec4(1, camera.projFlip, 1, 1); } function fragment() { - pixelColor.rgba = texture.get(normalize(projNorm)).rgba; + output.color = texture.get(normalize(projNorm)).rgba; } } diff --git a/src/triggers/Trigger.hx b/src/triggers/Trigger.hx index ca006718..db91b7ea 100644 --- a/src/triggers/Trigger.hx +++ b/src/triggers/Trigger.hx @@ -47,7 +47,7 @@ class Trigger extends GameObject { var mat = new Matrix(); var quat = MisParser.parseRotation(element.rotation); quat.x = -quat.x; - // quat.w = -quat.w; + quat.w = -quat.w; quat.toMatrix(mat); var scale = MisParser.parseVector3(element.scale); mat.scale(scale.x, scale.y, scale.z);