瀏覽代碼

L3D: don't bake shadows for dynamic objects

trethaller 6 年之前
父節點
當前提交
26de9d465d
共有 1 個文件被更改,包括 26 次插入1 次删除
  1. 26 1
      hide/view/l3d/Level3D.hx

+ 26 - 1
hide/view/l3d/Level3D.hx

@@ -415,12 +415,37 @@ class Level3D extends FileView {
 		}
 		for( p in passes )
 			p.isStatic = true;
+
+		function isDynamic(elt: hxd.prefab.Prefab) {
+			var p = elt;
+			while(p != null) {
+				if(p.name == "dynamic")
+					return true;
+				p = p.parent;
+			}
+			return false;
+		}
+
+		for(elt in data.flatten()) {
+			if(Std.is(elt, Instance) || isDynamic(elt)) {
+				var mats = sceneEditor.context.shared.getMaterials(elt);
+				for(mat in mats) {
+					var p = mat.getPass("shadow");
+					if(p != null)
+						p.isStatic = false;
+				}
+			}
+		}
+
 		scene.s3d.computeStatic();
 		for( p in passes )
 			p.isStatic = false;
 		var lights = data.getAll(hide.prefab.Light);
-		for( l in lights )
+		for( l in lights ) {
+			if(!l.visible)
+				continue;
 			l.saveBaked(sceneEditor.context);
+		}
 		sceneEditor.selectObjects(curSel);
 	}