Browse Source

Update decal

ShiroSmith 6 years ago
parent
commit
56efe092e1
1 changed files with 10 additions and 18 deletions
  1. 10 18
      hide/prefab/l3d/AdvancedDecal.hx

+ 10 - 18
hide/prefab/l3d/AdvancedDecal.hx

@@ -51,14 +51,13 @@ class AdvancedDecal extends Object3D {
 
 	override function makeInstance(ctx:Context):Context {
 		ctx = ctx.clone(this);
-		var mesh = new h3d.scene.Mesh(h3d.prim.Cube.defaultUnitCube(), ctx.local3d);
+		var mesh = new h3d.scene.pbr.Decal(h3d.prim.Cube.defaultUnitCube(), ctx.local3d);
 
 		switch (renderMode) {
 			case Decal:
 				var shader = mesh.material.mainPass.getShader(h3d.shader.pbr.VolumeDecal.DecalPBR);
 				if( shader == null ) {
 					shader = new h3d.shader.pbr.VolumeDecal.DecalPBR();
-					//shader.setPriority(-1);
 					mesh.material.mainPass.addShader(shader);
 				}
 				mesh.material.mainPass.setPassName("decal");
@@ -68,7 +67,7 @@ class AdvancedDecal extends Object3D {
 					shader = new h3d.shader.pbr.VolumeDecal.DecalOverlay();
 					mesh.material.mainPass.addShader(shader);
 				}
-				mesh.material.mainPass.setPassName("BeforeTonemapping");
+				mesh.material.mainPass.setPassName("beforeTonemapping");
 			default:
 		}
 
@@ -81,21 +80,13 @@ class AdvancedDecal extends Object3D {
 		return ctx;
 	}
 
-	override function updateInstance(ctx:Context,?propName:String) {
-		super.updateInstance(ctx,propName);
-
+	public function updateRenderParams(ctx) {
 		var mesh = Std.instance(ctx.local3d, h3d.scene.Mesh);
 		mesh.material.blendMode = blendMode;
-
 		switch (renderMode) {
 			case Decal:
 				var shader = mesh.material.mainPass.getShader(h3d.shader.pbr.VolumeDecal.DecalPBR);
 				if( shader != null ){
-					var b = mesh.getBounds();
-					shader.minBound = new h3d.Vector(b.xMin, b.yMin, b.zMin);
-					shader.maxBound = new h3d.Vector(b.xMax, b.yMax, b.zMax);
-					shader.normal = mesh.getAbsPos().up();
-					shader.tangent = mesh.getAbsPos().right();
 					shader.albedoTexture = albedoMap != null ? ctx.loadTexture(albedoMap) : null;
 					shader.normalTexture = normalMap != null ? ctx.loadTexture(normalMap) : null;
 					shader.pbrTexture = pbrMap != null ? ctx.loadTexture(pbrMap) : null;
@@ -109,7 +100,6 @@ class AdvancedDecal extends Object3D {
 					shader.USE_NORMAL = normalStrength != 0;
 					shader.USE_PBR = pbrStrength != 0;
 					shader.CENTERED = centered;
-					shader.scale = new h3d.Vector(mesh.scaleX, mesh.scaleY, mesh.scaleZ);
 					shader.fadePower = fadePower;
 					shader.fadeStart = fadeStart;
 					shader.fadeEnd = fadeEnd;
@@ -118,13 +108,9 @@ class AdvancedDecal extends Object3D {
 			case BeforeTonemapping:
 				var shader = mesh.material.mainPass.getShader(h3d.shader.pbr.VolumeDecal.DecalOverlay);
 				if( shader != null ){
-					var b = mesh.getBounds();
-					shader.minBound = new h3d.Vector(b.xMin, b.yMin, b.zMin);
-					shader.maxBound = new h3d.Vector(b.xMax, b.yMax, b.zMax);
 					shader.colorTexture = albedoMap != null ? ctx.loadTexture(albedoMap) : null;
 					if(shader.colorTexture != null) shader.colorTexture.wrap = Repeat;
 					shader.CENTERED = centered;
-					shader.scale = new h3d.Vector(mesh.scaleX, mesh.scaleY, mesh.scaleZ);
 					shader.fadePower = fadePower;
 					shader.fadeStart = fadeStart;
 					shader.fadeEnd = fadeEnd;
@@ -134,6 +120,11 @@ class AdvancedDecal extends Object3D {
 		}
 	}
 
+	override function updateInstance(ctx:Context,?propName:String) {
+		super.updateInstance(ctx,propName);
+		updateRenderParams(ctx);
+	}
+
 	#if editor
 	override function getHideProps() : HideProps {
 		return { icon : "paint-brush", name : "Decal" };
@@ -153,6 +144,7 @@ class AdvancedDecal extends Object3D {
 			wireCenter.material.setDefaultProps("ui");
 			wireCenter.ignoreCollide = true;
 			wireCenter.material.shadows = false;
+			wireCenter.material.mainPass.depthTest = Always;
 		} else {
 			for( o in ctx.shared.getObjects(this,h3d.scene.Box) )
 				if( o.name == "_highlight" ) {
@@ -183,7 +175,6 @@ class AdvancedDecal extends Object3D {
 		}
 
 		function refreshProps(){
-			//ctx.properties.clear();
 			var props = ctx.properties.add(new hide.Element('
 			<div class="decal">
 				<div class="group" name="Decal">
@@ -212,6 +203,7 @@ class AdvancedDecal extends Object3D {
 			</div>
 			'),this, function(pname) {
 				if(pname == "renderMode"){
+					ctx.rebuildPrefab(this);
 					ctx.rebuildProperties();
 				}
 				else