소스 검색

Update lights

ShiroSmith 6 년 전
부모
커밋
ce2359687c
2개의 변경된 파일26개의 추가작업 그리고 20개의 파일을 삭제
  1. 15 16
      hide/prefab/Light.hx
  2. 11 4
      hide/prefab/l3d/VolumetricLightmap.hx

+ 15 - 16
hide/prefab/Light.hx

@@ -86,7 +86,7 @@ class Light extends Object3D {
 		color = obj.color;
 		range = obj.range;
 		size = obj.size;
-		zNear = obj.zNear;
+		zNear = obj.zNear == null ?  0.02 : obj.zNear;
 		power = obj.power;
 		quality = obj.quality;
 		isMainLight = obj.isMainLight;
@@ -104,8 +104,11 @@ class Light extends Object3D {
 	}
 
 	override function applyPos( o : h3d.scene.Object ) {
-		super.applyPos(o);
-		o.setScale(1.0);
+		//super.applyPos(o); // Disable scaling
+		o.x = x;
+		o.y = y;
+		o.z = z;
+		o.setRotation(hxd.Math.degToRad(rotationX), hxd.Math.degToRad(rotationY), hxd.Math.degToRad(rotationZ));
 	}
 
 	function initTexture(path : String, ?wrap : h3d.mat.Data.Wrap){
@@ -165,7 +168,6 @@ class Light extends Object3D {
 
 		var color = color | 0xff000000;
 		var light = cast(ctx.local3d,h3d.scene.pbr.Light);
-		light.setScale(1.0);
 		light.isMainLight = isMainLight;
 
 		switch( kind ) {
@@ -192,6 +194,7 @@ class Light extends Object3D {
 		light.shadows.blur.radius = shadows.radius;
 		light.shadows.blur.quality = shadows.quality;
 
+
 		#if editor
 
 		var debugPoint = ctx.local3d.find(c -> if(c.name == "_debugPoint") c else null);
@@ -215,8 +218,9 @@ class Light extends Object3D {
 
 					mesh = new h3d.scene.Mesh(h3d.prim.Sphere.defaultUnitSphere(), debugPoint);
 					mesh.ignoreBounds = true;
+					mesh.setScale(0.2);
 
-					rangeSphere = new h3d.scene.Sphere(0xffffff, range, true, debugPoint);
+					rangeSphere = new h3d.scene.Sphere(0xffffff, 1, true, debugPoint);
 					rangeSphere.visible = false;
 					rangeSphere.ignoreBounds = true;
 					rangeSphere.ignoreCollide = true;
@@ -228,10 +232,8 @@ class Light extends Object3D {
 					rangeSphere = cast debugPoint.getChildAt(1);
 				}
 
-				debugPoint.setScale(1/range);
-				mesh.setScale(hxd.Math.clamp(size, 0.1, 0.5));
+				mesh.setScale(0.2/range);
 				rangeSphere.material.color.setColor(color);
-				rangeSphere.radius = range;
 				sel = rangeSphere;
 
 			case Directional :
@@ -245,7 +247,7 @@ class Light extends Object3D {
 
 					mesh = new h3d.scene.Mesh(h3d.prim.Sphere.defaultUnitSphere(), debugDir);
 					mesh.ignoreBounds = true;
-					mesh.scale(0.5);
+					mesh.setScale(0.2);
 
 					var g = new h3d.scene.Graphics(debugDir);
 					g.lineStyle(1, 0xffffff);
@@ -273,9 +275,7 @@ class Light extends Object3D {
 
 					mesh = new h3d.scene.Mesh(h3d.prim.Sphere.defaultUnitSphere(), debugSpot);
 					mesh.ignoreBounds = true;
-					mesh.scaleX = 1.0 / maxRange;
-					mesh.scaleY = 1.0 / (hxd.Math.tan(hxd.Math.degToRad(angle/2.0)) * maxRange);
-					mesh.scaleZ = 1.0 / (hxd.Math.tan(hxd.Math.degToRad(angle/2.0)) * maxRange);
+					mesh.setScale(0.2);
 
 					var g = new h3d.scene.Graphics(debugSpot);
 					g.lineStyle(1, this.color);
@@ -308,11 +308,10 @@ class Light extends Object3D {
 					g.lineTo(1, -1, -1);
 
 					mesh = cast debugSpot.getChildAt(0);
-					mesh.scaleX = 1.0 / maxRange;
-					mesh.scaleY = 1.0 / (hxd.Math.tan(hxd.Math.degToRad(angle/2.0)) * maxRange);
-					mesh.scaleZ = 1.0 / (hxd.Math.tan(hxd.Math.degToRad(angle/2.0)) * maxRange);
 					sel = g;
 				}
+
+				mesh.setScale(0.2/maxRange);
 		}
 
 		if(mesh != null){
@@ -386,7 +385,7 @@ class Light extends Object3D {
 			group.append(hide.comp.PropsEditor.makePropsList([
 				{ name: "size", t: PFloat(0, 5), def: 0 },
 				{ name: "range", t: PFloat(1, 20), def: 10 },
-				{ name: "zNear", t: PFloat(0.02, 1), def: 0.02 },
+				{ name: "zNear", t: PFloat(0.02, 5), def: 0.02 },
 			]));
 		default:
 		}

+ 11 - 4
hide/prefab/l3d/VolumetricLightmap.hx

@@ -12,7 +12,7 @@ class VolumetricLightmap extends Object3D {
 	public var volumetricLightmap : h3d.scene.pbr.VolumetricLightmap;
 	var useWorldAlignedProbe = false;
 	var displaySH = false;
-	var resolution : Int;
+	var resolution : Int = 16;
 	var useGPU = true;
 
 	#if editor
@@ -35,7 +35,7 @@ class VolumetricLightmap extends Object3D {
 		displaySH = obj.displaySH == null ? false : obj.displaySH;
 		displaySH_field = displaySH;
 		useWorldAlignedProbe = obj.useWorldAlignedProbe == null ? false : obj.useWorldAlignedProbe;
-		resolution = obj.resolution == null ? 32 : obj.resolution;
+		resolution = obj.resolution == null ? 16 : obj.resolution;
 	}
 
 	override function save() {
@@ -161,7 +161,7 @@ class VolumetricLightmap extends Object3D {
 				if(shader != null) shader.strength = volumetricLightmap.strength;
 			}
 		}
-		if( propName != "visible" && propName != "strength" && propName != "order" && propName != "displaySH_field")
+		if( propName != "visible" && propName != "strength" && propName != "order" && propName != "displaySH_field" && propName != "useGPU" &&  propName != "resolution")
 			resetLightmap();
 	}
 
@@ -291,8 +291,15 @@ class VolumetricLightmap extends Object3D {
 		var s3d = @:privateAccess ctx.rootContext.local3d.getScene();
 		baker = new hide.view.l3d.ProbeBakerProcess(this, resolution, useGPU, 0.032);
 
+		var pbrRenderer = Std.instance(s3d.renderer, h3d.scene.pbr.Renderer);
+		if(pbrRenderer != null) {
+			if( pbrRenderer.env == null || pbrRenderer.env.env == null || pbrRenderer.env.env.isDisposed() )
+					trace("Environment missing");
+		} else
+			trace("Invalid renderer");
+
 		var sceneData = @:privateAccess ctx.scene.editor.sceneData;
-		baker.init(sceneData.clone(), cast ctx.rootContext.shared, ctx.scene);
+		baker.init(pbrRenderer.env, sceneData.clone(), cast ctx.rootContext.shared, ctx.scene);
 
 		baker.onEnd = function() {
 			if( onEnd != null ) onEnd();