mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2025-10-30 08:11:25 +00:00
fix some graphical bugs
This commit is contained in:
parent
0bcf8d1eb8
commit
112aceb02c
6 changed files with 85 additions and 65 deletions
|
|
@ -372,21 +372,21 @@ class DtsObject extends GameObject {
|
||||||
var texture = ResourceLoader.getResource(fullName, ResourceLoader.getTexture, this.textureResources);
|
var texture = ResourceLoader.getResource(fullName, ResourceLoader.getTexture, this.textureResources);
|
||||||
texture.wrap = Wrap.Repeat;
|
texture.wrap = Wrap.Repeat;
|
||||||
material.texture = texture;
|
material.texture = texture;
|
||||||
// if (this.useInstancing) {
|
if (this.useInstancing) {
|
||||||
// var dtsshader = new DtsTexture();
|
var dtsshader = new DtsTexture();
|
||||||
// dtsshader.texture = texture;
|
dtsshader.texture = texture;
|
||||||
// dtsshader.currentOpacity = 1;
|
dtsshader.currentOpacity = 1;
|
||||||
// material.mainPass.removeShader(material.textureShader);
|
material.mainPass.removeShader(material.textureShader);
|
||||||
// material.mainPass.addShader(dtsshader);
|
material.mainPass.addShader(dtsshader);
|
||||||
// }
|
}
|
||||||
// TODO TRANSLUENCY SHIT
|
// TODO TRANSLUENCY SHIT
|
||||||
}
|
}
|
||||||
material.shadows = false;
|
material.shadows = false;
|
||||||
if (this.isCollideable)
|
if (this.isCollideable)
|
||||||
material.receiveShadows = true;
|
material.receiveShadows = true;
|
||||||
if (material.texture == null && !iflMaterial) {
|
if (material.texture == null && !iflMaterial) {
|
||||||
// var dtsshader = new DtsTexture();
|
var dtsshader = new DtsTexture();
|
||||||
// dtsshader.currentOpacity = 1;
|
dtsshader.currentOpacity = 1;
|
||||||
// Make a 1x1 white texture
|
// Make a 1x1 white texture
|
||||||
#if hl
|
#if hl
|
||||||
var bitmap = new hxd.BitmapData(1, 1);
|
var bitmap = new hxd.BitmapData(1, 1);
|
||||||
|
|
@ -403,9 +403,9 @@ class DtsObject extends GameObject {
|
||||||
texture.wrap = Wrap.Repeat;
|
texture.wrap = Wrap.Repeat;
|
||||||
#end
|
#end
|
||||||
material.texture = texture;
|
material.texture = texture;
|
||||||
// dtsshader.texture = texture;
|
dtsshader.texture = texture;
|
||||||
// material.mainPass.addShader(dtsshader);
|
material.mainPass.addShader(dtsshader);
|
||||||
// material.shadows = false;
|
material.shadows = false;
|
||||||
}
|
}
|
||||||
if (flags & 4 > 0) {
|
if (flags & 4 > 0) {
|
||||||
material.blendMode = BlendMode.Alpha;
|
material.blendMode = BlendMode.Alpha;
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,10 @@ class InstanceManager {
|
||||||
var opaqueinstances = minfo.instances.filter(x -> x.gameObject.currentOpacity == 1);
|
var opaqueinstances = minfo.instances.filter(x -> x.gameObject.currentOpacity == 1);
|
||||||
minfo.meshbatch.begin(opaqueinstances.length);
|
minfo.meshbatch.begin(opaqueinstances.length);
|
||||||
for (instance in opaqueinstances) { // Draw the opaque shit first
|
for (instance in opaqueinstances) { // Draw the opaque shit first
|
||||||
|
var dtsShader = minfo.meshbatch.material.mainPass.getShader(DtsTexture);
|
||||||
|
if (dtsShader != null) {
|
||||||
|
dtsShader.currentOpacity = instance.gameObject.currentOpacity;
|
||||||
|
}
|
||||||
var transform = instance.emptyObj.getAbsPos().clone();
|
var transform = instance.emptyObj.getAbsPos().clone();
|
||||||
minfo.meshbatch.material.mainPass.setPassName(minfo.mesh.material.mainPass.name);
|
minfo.meshbatch.material.mainPass.setPassName(minfo.mesh.material.mainPass.name);
|
||||||
minfo.meshbatch.material.mainPass.enableLights = minfo.mesh.material.mainPass.enableLights;
|
minfo.meshbatch.material.mainPass.enableLights = minfo.mesh.material.mainPass.enableLights;
|
||||||
|
|
@ -50,9 +54,12 @@ class InstanceManager {
|
||||||
var transparentinstances = minfo.instances.filter(x -> x.gameObject.currentOpacity != 1);
|
var transparentinstances = minfo.instances.filter(x -> x.gameObject.currentOpacity != 1);
|
||||||
minfo.transparencymeshbatch.begin(transparentinstances.length);
|
minfo.transparencymeshbatch.begin(transparentinstances.length);
|
||||||
for (instance in transparentinstances) { // Non opaque shit
|
for (instance in transparentinstances) { // Non opaque shit
|
||||||
var dtsShader = minfo.transparencymeshbatch.material.mainPass.getShader(h3d.shader.Texture);
|
var dtsShader = minfo.transparencymeshbatch.material.mainPass.getShader(DtsTexture);
|
||||||
|
if (dtsShader != null) {
|
||||||
|
dtsShader.currentOpacity = instance.gameObject.currentOpacity;
|
||||||
|
}
|
||||||
minfo.transparencymeshbatch.material.blendMode = Alpha;
|
minfo.transparencymeshbatch.material.blendMode = Alpha;
|
||||||
minfo.transparencymeshbatch.material.color.a = instance.gameObject.currentOpacity;
|
// minfo.transparencymeshbatch.material.color.a = instance.gameObject.currentOpacity;
|
||||||
// minfo.transparencymeshbatch.material.mainPass.setPassName(minfo.mesh.material.mainPass.name);
|
// minfo.transparencymeshbatch.material.mainPass.setPassName(minfo.mesh.material.mainPass.name);
|
||||||
minfo.transparencymeshbatch.shadersChanged = true;
|
minfo.transparencymeshbatch.shadersChanged = true;
|
||||||
minfo.transparencymeshbatch.material.mainPass.enableLights = minfo.mesh.material.mainPass.enableLights;
|
minfo.transparencymeshbatch.material.mainPass.enableLights = minfo.mesh.material.mainPass.enableLights;
|
||||||
|
|
@ -100,23 +107,23 @@ class InstanceManager {
|
||||||
}
|
}
|
||||||
if (isMesh) {
|
if (isMesh) {
|
||||||
var mat = cast(obj, Mesh).material;
|
var mat = cast(obj, Mesh).material;
|
||||||
// var dtsshader = mat.mainPass.getShader(DtsTexture);
|
var dtsshader = mat.mainPass.getShader(DtsTexture);
|
||||||
// if (dtsshader != null) {
|
if (dtsshader != null) {
|
||||||
// minfo.meshbatch.material.mainPass.removeShader(minfo.meshbatch.material.textureShader);
|
minfo.meshbatch.material.mainPass.removeShader(minfo.meshbatch.material.textureShader);
|
||||||
// minfo.meshbatch.material.mainPass.addShader(dtsshader);
|
minfo.meshbatch.material.mainPass.addShader(dtsshader);
|
||||||
// }
|
|
||||||
minfo.transparencymeshbatch = new MeshBatch(cast(cast(obj, Mesh).primitive), cast(cast(obj, Mesh)).material.clone(), scene);
|
|
||||||
// minfo.transparencymeshbatch.material.mainPass.removeShader(minfo.meshbatch.material.textureShader);
|
|
||||||
// minfo.transparencymeshbatch.material.mainPass.addShader(dtsshader);
|
|
||||||
|
|
||||||
minfo.meshbatch.material.mainPass.removeShader(minfo.meshbatch.material.mainPass.getShader(PropsValues));
|
|
||||||
minfo.transparencymeshbatch.material.mainPass.removeShader(minfo.transparencymeshbatch.material.mainPass.getShader(PropsValues));
|
|
||||||
|
|
||||||
var pbrshader = mat.mainPass.getShader(PropsValues);
|
|
||||||
if (pbrshader != null) {
|
|
||||||
minfo.meshbatch.material.mainPass.addShader(pbrshader);
|
|
||||||
minfo.transparencymeshbatch.material.mainPass.addShader(pbrshader);
|
|
||||||
}
|
}
|
||||||
|
minfo.transparencymeshbatch = new MeshBatch(cast(cast(obj, Mesh).primitive), cast(cast(obj, Mesh)).material.clone(), scene);
|
||||||
|
minfo.transparencymeshbatch.material.mainPass.removeShader(minfo.meshbatch.material.textureShader);
|
||||||
|
minfo.transparencymeshbatch.material.mainPass.addShader(dtsshader);
|
||||||
|
|
||||||
|
// minfo.meshbatch.material.mainPass.removeShader(minfo.meshbatch.material.mainPass.getShader(PropsValues));
|
||||||
|
// minfo.transparencymeshbatch.material.mainPass.removeShader(minfo.transparencymeshbatch.material.mainPass.getShader(PropsValues));
|
||||||
|
|
||||||
|
// var pbrshader = mat.mainPass.getShader(PropsValues);
|
||||||
|
// if (pbrshader != null) {
|
||||||
|
// minfo.meshbatch.material.mainPass.addShader(pbrshader);
|
||||||
|
// minfo.transparencymeshbatch.material.mainPass.addShader(pbrshader);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
minfos.push(minfo);
|
minfos.push(minfo);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -81,20 +81,26 @@ class Particle {
|
||||||
|
|
||||||
var t = this.currentAge / (this.lifeTime / 1000);
|
var t = this.currentAge / (this.lifeTime / 1000);
|
||||||
|
|
||||||
for (i in 1...4) {
|
// for (i in 1...4) {
|
||||||
if (this.o.times.length > i) {
|
// if (this.o.times.length > i) {
|
||||||
if (this.o.times[i] >= t) {
|
// if (this.o.times[i] >= t) {
|
||||||
var firstPart = t - this.o.times[i - 1];
|
// var firstPart = t - this.o.times[i - 1];
|
||||||
var total = this.o.times[i] - this.o.times[i - 1];
|
// var total = this.o.times[i] - this.o.times[i - 1];
|
||||||
|
|
||||||
firstPart /= total;
|
// firstPart /= total;
|
||||||
|
|
||||||
this.color = Util.lerpThreeVectors(this.o.colors[i - 1], this.o.colors[i], firstPart);
|
// // if (this.o.texture == 'particles/spark.png') {
|
||||||
this.scale = Util.lerp(this.o.sizes[i - 1], this.o.sizes[i], firstPart);
|
// // if (this.o.colors[0].r == 1 && this.o.colors[0].g == 1) {
|
||||||
break;
|
// // trace("HEREEEE");
|
||||||
}
|
// // }
|
||||||
}
|
// // }
|
||||||
}
|
|
||||||
|
// this.color = Util.lerpThreeVectors(this.o.colors[i - 1], this.o.colors[i], firstPart);
|
||||||
|
// this.scale = Util.lerp(this.o.sizes[i - 1], this.o.sizes[i], firstPart);
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
// var velElapsed = elapsed / 1000;
|
// var velElapsed = elapsed / 1000;
|
||||||
// // velElapsed *= 0.001;
|
// // velElapsed *= 0.001;
|
||||||
|
|
@ -104,30 +110,30 @@ class Particle {
|
||||||
// // var pos = this.position.add(this.vel.multiply(velElapsed + this.o.acceleration * (velElapsed * velElapsed) / 2));
|
// // var pos = this.position.add(this.vel.multiply(velElapsed + this.o.acceleration * (velElapsed * velElapsed) / 2));
|
||||||
// // this.position = pos;
|
// // this.position = pos;
|
||||||
|
|
||||||
// this.rotation = (this.initialSpin + this.o.spinSpeed * elapsed / 1000) * Math.PI / 180;
|
this.rotation = (this.initialSpin + this.o.spinSpeed * elapsed / 1000) * Math.PI / 180;
|
||||||
|
|
||||||
// // Check where we are in the times array
|
// Check where we are in the times array
|
||||||
// var indexLow = 0;
|
var indexLow = 0;
|
||||||
// var indexHigh = 1;
|
var indexHigh = 1;
|
||||||
// for (i in 2...this.o.times.length) {
|
for (i in 2...this.o.times.length) {
|
||||||
// if (this.o.times[indexHigh] >= completion)
|
if (this.o.times[indexHigh] >= completion)
|
||||||
// break;
|
break;
|
||||||
|
|
||||||
// indexLow = indexHigh;
|
indexLow = indexHigh;
|
||||||
// indexHigh = i;
|
indexHigh = i;
|
||||||
// }
|
}
|
||||||
|
|
||||||
// if (this.o.times.length == 1)
|
if (this.o.times.length == 1)
|
||||||
// indexHigh = indexLow;
|
indexHigh = indexLow;
|
||||||
// var t = (completion - this.o.times[indexLow]) / (this.o.times[indexHigh] - this.o.times[indexLow]);
|
var t = (completion - this.o.times[indexLow]) / (this.o.times[indexHigh] - this.o.times[indexLow]);
|
||||||
|
|
||||||
// // Adjust color
|
// Adjust color
|
||||||
// var color = Util.lerpThreeVectors(this.o.colors[indexLow], this.o.colors[indexHigh], t);
|
var color = Util.lerpThreeVectors(this.o.colors[indexLow], this.o.colors[indexHigh], t);
|
||||||
// this.color = color;
|
this.color = color;
|
||||||
// // this.material.opacity = color.a * * 1.5; // Adjusted because additive mixing can be kind of extreme
|
// this.material.opacity = color.a * * 1.5; // Adjusted because additive mixing can be kind of extreme
|
||||||
|
|
||||||
// // Adjust sizing
|
// Adjust sizing
|
||||||
// this.scale = Util.lerp(this.o.sizes[indexLow], this.o.sizes[indexHigh], t);
|
this.scale = Util.lerp(this.o.sizes[indexLow], this.o.sizes[indexHigh], t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -290,10 +296,11 @@ class ParticleManager {
|
||||||
var particleShader = batch.meshBatch.material.mainPass.getShader(Billboard);
|
var particleShader = batch.meshBatch.material.mainPass.getShader(Billboard);
|
||||||
particleShader.scale = instance.scale;
|
particleShader.scale = instance.scale;
|
||||||
particleShader.rotation = instance.rotation;
|
particleShader.rotation = instance.rotation;
|
||||||
|
particleShader.color = instance.color;
|
||||||
batch.meshBatch.material.blendMode = instance.o.blending;
|
batch.meshBatch.material.blendMode = instance.o.blending;
|
||||||
batch.meshBatch.material.mainPass.depthWrite = false;
|
batch.meshBatch.material.mainPass.depthWrite = false;
|
||||||
// batch.meshBatch.material.mainPass.setPassName("overlay");
|
// batch.meshBatch.material.mainPass.setPassName("overlay");
|
||||||
batch.meshBatch.material.color.load(instance.color);
|
// batch.meshBatch.material.color.load(instance.color);
|
||||||
batch.meshBatch.shadersChanged = true;
|
batch.meshBatch.shadersChanged = true;
|
||||||
batch.meshBatch.setScale(instance.scale);
|
batch.meshBatch.setScale(instance.scale);
|
||||||
batch.meshBatch.emitInstance();
|
batch.meshBatch.emitInstance();
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ class Sky extends Object {
|
||||||
// var renderer = cast(level.scene.renderer, h3d.scene.pbr.Renderer);
|
// var renderer = cast(level.scene.renderer, h3d.scene.pbr.Renderer);
|
||||||
var shad = new Skybox(texture);
|
var shad = new Skybox(texture);
|
||||||
skyMesh.material.mainPass.addShader(shad);
|
skyMesh.material.mainPass.addShader(shad);
|
||||||
|
skyMesh.material.mainPass.depthWrite = false;
|
||||||
// skyMesh.material.shadows = false;
|
// skyMesh.material.shadows = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,17 +12,22 @@ class Billboard extends hxsl.Shader {
|
||||||
@global var global:{
|
@global var global:{
|
||||||
@perObject var modelView:Mat4;
|
@perObject var modelView:Mat4;
|
||||||
};
|
};
|
||||||
@param var scale:Float;
|
@perInstance @param var scale:Float;
|
||||||
@param var rotation:Float;
|
@perInstance @param var rotation:Float;
|
||||||
|
@perInstance @param var color:Vec4;
|
||||||
var relativePosition:Vec3;
|
var relativePosition:Vec3;
|
||||||
var projectedPosition:Vec4;
|
var projectedPosition:Vec4;
|
||||||
var calculatedUV:Vec2;
|
var calculatedUV:Vec2;
|
||||||
|
var pixelColor:Vec4;
|
||||||
function vertex() {
|
function vertex() {
|
||||||
var mid = 0.5;
|
var mid = 0.5;
|
||||||
var uv = input.uv;
|
var uv = input.uv;
|
||||||
calculatedUV.x = cos(rotation) * (uv.x - mid) + sin(rotation) * (uv.y - mid) + mid;
|
calculatedUV.x = cos(rotation) * (uv.x - mid) + sin(rotation) * (uv.y - mid) + mid;
|
||||||
calculatedUV.y = cos(rotation) * (uv.y - mid) - sin(rotation) * (uv.x - mid) + mid;
|
calculatedUV.y = cos(rotation) * (uv.y - mid) - sin(rotation) * (uv.x - mid) + mid;
|
||||||
}
|
}
|
||||||
|
function fragment() {
|
||||||
|
pixelColor *= color;
|
||||||
|
}
|
||||||
function billboard(pos:Vec2, scale:Vec2):Vec4 {
|
function billboard(pos:Vec2, scale:Vec2):Vec4 {
|
||||||
return (vec4(0, 0, 0, 1) * (global.modelView * camera.view) + vec4(pos * scale, 0, 0));
|
return (vec4(0, 0, 0, 1) * (global.modelView * camera.view) + vec4(pos * scale, 0, 0));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ class DtsTexture extends hxsl.Shader {
|
||||||
@const var specularAlpha:Bool;
|
@const var specularAlpha:Bool;
|
||||||
@range(0, 1) @param var killAlphaThreshold:Float;
|
@range(0, 1) @param var killAlphaThreshold:Float;
|
||||||
@param var texture:Sampler2D;
|
@param var texture:Sampler2D;
|
||||||
@param var currentOpacity:Float;
|
@perInstance @param var currentOpacity:Float;
|
||||||
var calculatedUV:Vec2;
|
var calculatedUV:Vec2;
|
||||||
var pixelColor:Vec4;
|
var pixelColor:Vec4;
|
||||||
var specColor:Vec3;
|
var specColor:Vec3;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue