Преглед изворни кода

Add culling collider for Model prefab, editor only
Update renderer for frustum culling

ShiroSmith пре 6 година
родитељ
комит
2d1742bc64
2 измењених фајлова са 23 додато и 8 уклоњено
  1. 7 8
      hide/Renderer.hx
  2. 16 0
      hide/prefab/Model.hx

+ 7 - 8
hide/Renderer.hx

@@ -159,10 +159,9 @@ class PbrRenderer extends h3d.scene.pbr.Renderer {
 	}
 
 	override function mainDraw() {
-		output.draw(getSort("default", true));
-		output.draw(getSort("alpha"));
-		output.draw(get("additive"));
-
+		renderPass(output, getSort("default", true));
+		renderPass(output, getSort("alpha"));
+		renderPass(output, get("additive"));
 
 		var outlineTex = allocTarget("outline", false);
 		setTarget(outlineTex);
@@ -175,10 +174,10 @@ class PbrRenderer extends h3d.scene.pbr.Renderer {
 	}
 
 	override function postDraw() {
-		defaultPass.draw(getSort("debuggeom"));
-		defaultPass.draw(getSort("debuggeom_alpha"));
-		defaultPass.draw(getSort("overlay"));
-		defaultPass.draw(getSort("ui"));
+		renderPass(defaultPass, getSort("debuggeom"));
+		renderPass(defaultPass, getSort("debuggeom_alpha"));
+		renderPass(defaultPass, getSort("overlay"));
+		renderPass(defaultPass, getSort("ui"));
 	}
 }
 

+ 16 - 0
hide/prefab/Model.hx

@@ -23,6 +23,12 @@ class Model extends Object3D {
 		lockAnimation = obj.lockAnimation;
 	}
 
+	function setCullingCollider( o : h3d.scene.Object, cc : h3d.col.Collider ) {
+		o.cullingCollider = cc;
+		for( c in @:privateAccess o.children )
+			setCullingCollider(c, cc);
+	}
+
 	override function makeInstance(ctx:Context):Context {
 		if( source == null)
 			return super.makeInstance(ctx);
@@ -53,6 +59,16 @@ class Model extends Object3D {
 		return ctx;
 	}
 
+	var tmpBounds = new h3d.col.Bounds();
+	override function updateInstance( ctx: Context, ?propName : String ) {
+		super.updateInstance(ctx, propName);
+		var o = ctx.local3d;
+		#if editor
+		var cc = o.getBounds(tmpBounds).toSphere();
+		setCullingCollider(o, cc);
+		#end
+	}
+
 	#if editor
 	override function edit( ctx : EditContext ) {
 		super.edit(ctx);