|
@@ -61,6 +61,10 @@ class Light extends Object3D {
|
|
|
@:s public var minDist : Float = -1;
|
|
|
@:s public var autoShrink : Bool = true;
|
|
|
@:s public var autoZPlanes : Bool = false;
|
|
|
+ @:s public var cascade : Bool = false;
|
|
|
+ @:s public var cascadeNbr : Int = 1;
|
|
|
+ @:s public var cascadePow : Float = 2;
|
|
|
+ @:s public var firstCascadeSize : Float = 10;
|
|
|
|
|
|
// Debug
|
|
|
@:s public var debugDisplay : Bool = true;
|
|
@@ -139,7 +143,7 @@ class Light extends Object3D {
|
|
|
} else {
|
|
|
switch( kind ) {
|
|
|
case Point: ctx.local3d = new h3d.scene.pbr.PointLight(ctx.local3d);
|
|
|
- case Directional: ctx.local3d = new h3d.scene.pbr.DirLight(ctx.local3d);
|
|
|
+ case Directional: ctx.local3d = new h3d.scene.pbr.DirLight(ctx.local3d, cascade);
|
|
|
case Spot: ctx.local3d = new h3d.scene.pbr.SpotLight(ctx.local3d);
|
|
|
}
|
|
|
}
|
|
@@ -169,6 +173,13 @@ class Light extends Object3D {
|
|
|
s.minDist = minDist;
|
|
|
s.autoShrink = autoShrink;
|
|
|
s.autoZPlanes = autoZPlanes;
|
|
|
+ var cs = Std.downcast(s, h3d.pass.CascadeShadowMap);
|
|
|
+ if ( cs != null ) {
|
|
|
+ cs.cascade = cascadeNbr;
|
|
|
+ cs.pow = cascadePow;
|
|
|
+ cs.firstCascadeSize = firstCascadeSize;
|
|
|
+ cs.debug = debugDisplay;
|
|
|
+ }
|
|
|
}
|
|
|
case Spot:
|
|
|
var sl = Std.downcast(light, h3d.scene.pbr.SpotLight);
|
|
@@ -384,12 +395,22 @@ class Light extends Object3D {
|
|
|
|
|
|
switch( kind ) {
|
|
|
case Directional:
|
|
|
- group.append(hide.comp.PropsEditor.makePropsList([
|
|
|
- { name: "maxDist", t: PFloat(0, 1000), def: -1 },
|
|
|
- { name: "minDist", t: PFloat(0, 50), def: -1 },
|
|
|
- { name: "autoShrink", t: PBool, def: true },
|
|
|
- { name: "autoZPlanes", t: PBool, def: false },
|
|
|
- ]));
|
|
|
+ if ( !cascade ) {
|
|
|
+ group.append(hide.comp.PropsEditor.makePropsList([
|
|
|
+ { name: "maxDist", t: PFloat(0, 1000), def: -1 },
|
|
|
+ { name: "minDist", t: PFloat(0, 50), def: -1 },
|
|
|
+ { name: "autoShrink", t: PBool, def: true },
|
|
|
+ { name: "autoZPlanes", t: PBool, def: false },
|
|
|
+ { name: "cascade", t: PBool, def: false },
|
|
|
+ ]));
|
|
|
+ } else {
|
|
|
+ group.append(hide.comp.PropsEditor.makePropsList([
|
|
|
+ { name: "maxDist", t: PFloat(0, 1000), def: -1 },
|
|
|
+ { name: "minDist", t: PFloat(0, 50), def: -1 },
|
|
|
+ { name: "autoZPlanes", t: PBool, def: false },
|
|
|
+ { name: "cascade", t: PBool, def: false },
|
|
|
+ ]));
|
|
|
+ }
|
|
|
case Spot:
|
|
|
group.append(hide.comp.PropsEditor.makePropsList([
|
|
|
{ name: "range", t: PFloat(1, 20), def: 10 },
|
|
@@ -405,9 +426,15 @@ class Light extends Object3D {
|
|
|
]));
|
|
|
default:
|
|
|
}
|
|
|
+ if ( cascade )
|
|
|
+ group.append(hide.comp.PropsEditor.makePropsList([
|
|
|
+ { name: "cascadeNbr", t: PInt(1, 5), def: 1},
|
|
|
+ { name: "cascadePow", t: PFloat(1, 10), def: 2},
|
|
|
+ { name: "firstCascadeSize", t: PFloat(10, 100), def: 50},
|
|
|
+ ]));
|
|
|
|
|
|
var props = ctx.properties.add(group, this, function(pname) {
|
|
|
- if( pname == "kind"){
|
|
|
+ if( pname == "kind" || pname == "cascade" ){
|
|
|
ctx.rebuildPrefab(this);
|
|
|
ctx.rebuildProperties();
|
|
|
}
|