mirror of
https://github.com/RandomityGuy/MBHaxe.git
synced 2026-04-27 21:21:41 +00:00
tsstatic envmaps
This commit is contained in:
parent
97e8e2ebee
commit
93d86bbd6a
4 changed files with 50 additions and 16 deletions
|
|
@ -1,5 +1,7 @@
|
||||||
package src;
|
package src;
|
||||||
|
|
||||||
|
import shaders.EnvMap;
|
||||||
|
import h3d.shader.CubeMap;
|
||||||
import dts.TSDrawPrimitive;
|
import dts.TSDrawPrimitive;
|
||||||
import hxd.res.Sound;
|
import hxd.res.Sound;
|
||||||
import h3d.col.Bounds;
|
import h3d.col.Bounds;
|
||||||
|
|
@ -374,7 +376,11 @@ class DtsObject extends GameObject {
|
||||||
|
|
||||||
if (fullName == null || (this.isTSStatic && ((flags & (1 << 31) > 0)))) {
|
if (fullName == null || (this.isTSStatic && ((flags & (1 << 31) > 0)))) {
|
||||||
if (this.isTSStatic) {
|
if (this.isTSStatic) {
|
||||||
Console.warn('Unsupported material type for ${fullName}, dts: ${this.dtsPath}');
|
material.mainPass.enableLights = false;
|
||||||
|
if (flags & (1 << 31) > 0) {
|
||||||
|
environmentMaterial = material;
|
||||||
|
}
|
||||||
|
// Console.warn('Unsupported material type for ${fullName}, dts: ${this.dtsPath}');
|
||||||
// TODO USE PBR???
|
// TODO USE PBR???
|
||||||
}
|
}
|
||||||
} else if (Path.extension(fullName) == "ifl") {
|
} else if (Path.extension(fullName) == "ifl") {
|
||||||
|
|
@ -431,11 +437,8 @@ class DtsObject extends GameObject {
|
||||||
material.receiveShadows = false;
|
material.receiveShadows = false;
|
||||||
material.mainPass.depthWrite = false;
|
material.mainPass.depthWrite = false;
|
||||||
}
|
}
|
||||||
// // TODO TRANSPARENCY SHIT
|
|
||||||
if (flags & 8 > 0) {
|
if (flags & 8 > 0) {
|
||||||
material.blendMode = BlendMode.Add;
|
material.blendMode = BlendMode.Add;
|
||||||
// material.mainPass.setPassName("overlay");
|
|
||||||
// material.textureShader.additive = true;
|
|
||||||
}
|
}
|
||||||
if (flags & 16 > 0) {
|
if (flags & 16 > 0) {
|
||||||
material.blendMode = BlendMode.Sub;
|
material.blendMode = BlendMode.Sub;
|
||||||
|
|
@ -444,20 +447,13 @@ class DtsObject extends GameObject {
|
||||||
if (flags & 32 > 0) {
|
if (flags & 32 > 0) {
|
||||||
material.mainPass.enableLights = false;
|
material.mainPass.enableLights = false;
|
||||||
material.receiveShadows = false;
|
material.receiveShadows = false;
|
||||||
// material.mainPass.setPassName("overlay");
|
|
||||||
// var pbrprops = material.mainPass.getShader(h3d.shader.pbr.PropsValues);
|
|
||||||
// pbrprops.emissiveValue = 1;
|
|
||||||
// pbrprops.roughnessValue = 1;
|
|
||||||
// pbrprops.occlusionValue = 0;
|
|
||||||
// pbrprops.metalnessValue = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (this.isTSStatic && !(flags & 64 > 0)) {
|
if (this.isTSStatic && !(flags & 64 > 0)) {
|
||||||
// // TODO THIS SHIT
|
var reflectivity = this.dts.matNames.length == 1 ? 1 : (environmentMaterial != null ? 0.5 : 0.333);
|
||||||
// }
|
var cubemapshader = new EnvMap(this.level.sky.cubemap, reflectivity);
|
||||||
// ((flags & 32) || environmentMaterial) ? new Materia
|
material.mainPass.addShader(cubemapshader);
|
||||||
|
}
|
||||||
// material.mainPass.addShader(new AlphaMult());
|
|
||||||
|
|
||||||
this.materials.push(material);
|
this.materials.push(material);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
package src;
|
package src;
|
||||||
|
|
||||||
|
import shaders.EnvMap;
|
||||||
|
import h3d.shader.CubeMap;
|
||||||
import shaders.NormalMaterial;
|
import shaders.NormalMaterial;
|
||||||
import shaders.NoiseTileMaterial;
|
import shaders.NoiseTileMaterial;
|
||||||
import shaders.PhongMaterial;
|
import shaders.PhongMaterial;
|
||||||
|
|
@ -161,6 +163,10 @@ class InstanceManager {
|
||||||
minfo.meshbatch.material.mainPass.addShader(nmapshdr);
|
minfo.meshbatch.material.mainPass.addShader(nmapshdr);
|
||||||
// minfo.meshbatch.material.mainPass.culling = mat.mainPass.culling;
|
// minfo.meshbatch.material.mainPass.culling = mat.mainPass.culling;
|
||||||
}
|
}
|
||||||
|
var cubemapshdr = mat.mainPass.getShader(EnvMap);
|
||||||
|
if (cubemapshdr != null) {
|
||||||
|
minfo.meshbatch.material.mainPass.addShader(cubemapshdr);
|
||||||
|
}
|
||||||
minfo.transparencymeshbatch = new MeshBatch(cast(cast(obj, Mesh).primitive), cast(cast(obj, Mesh)).material.clone(), scene);
|
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.removeShader(minfo.meshbatch.material.textureShader);
|
||||||
minfo.transparencymeshbatch.material.mainPass.addShader(dtsshader);
|
minfo.transparencymeshbatch.material.mainPass.addShader(dtsshader);
|
||||||
|
|
|
||||||
|
|
@ -884,6 +884,7 @@ class MarbleWorld extends Scheduler {
|
||||||
if (obj is ForceObject) {
|
if (obj is ForceObject) {
|
||||||
this.forceObjects.push(cast obj);
|
this.forceObjects.push(cast obj);
|
||||||
}
|
}
|
||||||
|
obj.isTSStatic = isTsStatic;
|
||||||
obj.init(cast this, () -> {
|
obj.init(cast this, () -> {
|
||||||
obj.update(this.timeState);
|
obj.update(this.timeState);
|
||||||
if (obj.useInstancing) {
|
if (obj.useInstancing) {
|
||||||
|
|
|
||||||
31
src/shaders/EnvMap.hx
Normal file
31
src/shaders/EnvMap.hx
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
package shaders;
|
||||||
|
|
||||||
|
class EnvMap extends hxsl.Shader {
|
||||||
|
static var SRC = {
|
||||||
|
@param var envMap:SamplerCube;
|
||||||
|
@param var shininess:Float;
|
||||||
|
@global var camera:{
|
||||||
|
var position:Vec3;
|
||||||
|
@var var dir:Vec3;
|
||||||
|
};
|
||||||
|
var pixelColor:Vec4;
|
||||||
|
var transformedNormal:Vec3;
|
||||||
|
var pixelTransformedPosition:Vec3;
|
||||||
|
function fragment() {
|
||||||
|
var viewDir = normalize(camera.position - pixelTransformedPosition);
|
||||||
|
|
||||||
|
var incidentRay = normalize(pixelTransformedPosition - camera.position);
|
||||||
|
var reflectionRay = reflect(incidentRay, transformedNormal);
|
||||||
|
|
||||||
|
var reflectColor = envMap.get(reflectionRay);
|
||||||
|
|
||||||
|
pixelColor = mix(pixelColor, reflectColor, shininess);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function new(skybox, shininess) {
|
||||||
|
super();
|
||||||
|
this.envMap = skybox;
|
||||||
|
this.shininess = shininess;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue