소스 검색

Update GI

ShiroSmith 6 년 전
부모
커밋
d29c9344b9
2개의 변경된 파일21개의 추가작업 그리고 19개의 파일을 삭제
  1. 13 5
      hide/prefab/l3d/VolumetricLightmap.hx
  2. 8 14
      hide/view/l3d/ProbeBakerProcess.hx

+ 13 - 5
hide/prefab/l3d/VolumetricLightmap.hx

@@ -13,6 +13,7 @@ class VolumetricLightmap extends Object3D {
 	var useWorldAlignedProbe = false;
 	var displaySH = false;
 	var resolution : Int;
+	var useGPU = true;
 
 	#if editor
 	var maxOrderBaked = 0;
@@ -218,16 +219,18 @@ class VolumetricLightmap extends Object3D {
 			<div class="group" name="Light Params">
 				<dl>
 				<dt>Strength</dt><dd><input type="range" min="0" max="2" value="0" field="strength"/></dd>
+				<dt>Display SH</dt><dd><input type="checkbox" field="displaySH_field"/></dd>
+				</dl>
+			</div>
+			<div class="group" name="Bake">
 				<dt>SH Order</dt><dd><input type="range" min="1" max="3" value="0" step="1" field="order"/></dd>
 				<dt>Resolution</dt><dd><input type="range" min="1" max="1024" value="0" step="1" field="resolution"/></dd>
-				<dt>Use World Aligned Probes</dt><dd><input type="checkbox" field="useWorldAlignedProbe"/></dd>
-				<dt>Display SH</dt><dd><input type="checkbox" field="displaySH_field"/></dd>
+				<dt>Use GPU</dt><dd><input type="checkbox" field="useGPU"/></dd>
 				<dt></dt><dd><input type="button" value="Bake" class="bake"/></dd>
 				<div class="progress">
 					<dt>Baking Process</dt><dd><progress class="bakeProgress" max="1"></progress></dd>
 				</div>
-				</dl>
-			</div>
+			</dl></div>
 			<div class="group" name="Voxel Size">
 				<dl>
 					<dt>X</dt><dd><input type="range" min="1" max="10" value="0" field="voxelsize_x"/></dd>
@@ -286,11 +289,16 @@ class VolumetricLightmap extends Object3D {
 		maxOrderBaked = order;
 		volumetricLightmap.lastBakedProbeIndex = -1;
 		var s3d = @:privateAccess ctx.rootContext.local3d.getScene();
-		baker = new hide.view.l3d.ProbeBakerProcess(s3d, this, resolution);
+		baker = new hide.view.l3d.ProbeBakerProcess(this, resolution, useGPU, 0.032);
+
+		var sceneData = @:privateAccess ctx.scene.editor.sceneData;
+		baker.init(sceneData.clone(), cast ctx.rootContext.shared, ctx.scene);
+
 		baker.onEnd = function() {
 			if( onEnd != null ) onEnd();
 			var bytes = volumetricLightmap.save();
 			ctx.rootContext.shared.savePrefabDat("sh", "bake", name, bytes);
+			createDebugPreview();
 		}
 	}
 

+ 8 - 14
hide/view/l3d/ProbeBakerProcess.hx

@@ -6,31 +6,24 @@ class ProbeBakerProcess {
 
 	var lightProbeBaker : h3d.scene.pbr.LightProbeBaker;
 	var volumetricLightmap : hide.prefab.l3d.VolumetricLightmap;
-	var s3d : h3d.scene.Scene;
 	var bakeTime : Float;
 	var resolution : Int;
 
-	public function new(s3d, volumetricLightmap, res, bakeTime : Float = 0.08 ){
+	public function new(volumetricLightmap, res, useGPU, bakeTime : Float = 0.016 ){
 		progress = 0;
-		this.s3d = s3d;
 		this.bakeTime = bakeTime;
 		this.volumetricLightmap = volumetricLightmap;
 		this.resolution = res;
-
 		lightProbeBaker = new h3d.scene.pbr.LightProbeBaker();
-		lightProbeBaker.useGPU = false;
-
-		var rend = Std.instance(s3d.renderer, h3d.scene.pbr.Renderer) ;
-		if(rend != null) {
-			lightProbeBaker.environment = rend.env;
-			if( rend.env == null || rend.env.env == null || rend.env.env.isDisposed() ) trace("Environment missing");
-		 } else
-		 	trace("Invalid renderer");
+		lightProbeBaker.useGPU = useGPU;
+	}
+
+	public function init( sceneData : hide.prefab.Prefab , shared : hide.prefab.ContextShared, scene : hide.comp.Scene) {
+		lightProbeBaker.initScene(sceneData, shared, scene);
 	}
 
 	public function update(dt:Float) {
-		lightProbeBaker.bake(s3d, volumetricLightmap.volumetricLightmap, resolution, bakeTime);
-		volumetricLightmap.createDebugPreview();
+		lightProbeBaker.bake(volumetricLightmap.volumetricLightmap, resolution, bakeTime);
 		progress = (volumetricLightmap.volumetricLightmap.lastBakedProbeIndex +1.0) / volumetricLightmap.volumetricLightmap.getProbeCount();
 		if( progress == 1 ) {
 			lightProbeBaker.dispose();
@@ -40,6 +33,7 @@ class ProbeBakerProcess {
 	}
 
 	public dynamic function onEnd() {
+
 	}
 
 }