|
@@ -2,6 +2,20 @@ package hide;
|
|
|
|
|
|
// ----- Default Rendering --------------------------------
|
|
|
|
|
|
+class DefaultForwardComposite extends h3d.shader.ScreenShader {
|
|
|
+ static var SRC = {
|
|
|
+ @param var texture : Sampler2D;
|
|
|
+ @param var outline : Sampler2D;
|
|
|
+
|
|
|
+ function fragment() {
|
|
|
+ pixelColor = texture.get(calculatedUV);
|
|
|
+ var outval = outline.get(calculatedUV).rgb;
|
|
|
+ if(outval.r > 0.1 && outval.r < 0.5)
|
|
|
+ pixelColor.rgb += outval.rgb * 3.0 + 0.1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
class MaterialSetup extends h3d.mat.MaterialSetup {
|
|
|
override public function createRenderer() {
|
|
|
return new Renderer();
|
|
@@ -20,8 +34,21 @@ class MaterialSetup extends h3d.mat.MaterialSetup {
|
|
|
|
|
|
class Renderer extends h3d.scene.DefaultRenderer {
|
|
|
|
|
|
+ var composite: h3d.pass.ScreenFx<DefaultForwardComposite>;
|
|
|
+ var outline = new ScreenOutline();
|
|
|
+ var outlineBlur = new h3d.pass.Blur(4);
|
|
|
+
|
|
|
+ public function new() {
|
|
|
+ super();
|
|
|
+ composite = new h3d.pass.ScreenFx(new DefaultForwardComposite());
|
|
|
+ }
|
|
|
+
|
|
|
override function render() {
|
|
|
|
|
|
+ var output = allocTarget("output");
|
|
|
+ setTarget(output);
|
|
|
+ clear(h3d.Engine.getCurrent().backgroundColor, 1, 0);
|
|
|
+
|
|
|
if( has("shadow") )
|
|
|
renderPass(shadow,get("shadow"));
|
|
|
|
|
@@ -36,8 +63,24 @@ class Renderer extends h3d.scene.DefaultRenderer {
|
|
|
renderPass(defaultPass, get("additive") );
|
|
|
renderPass(defaultPass, getSort("debuggeom") );
|
|
|
renderPass(defaultPass, getSort("debuggeom_alpha"));
|
|
|
- renderPass(defaultPass, get("outline"));
|
|
|
+ renderPass(defaultPass, getSort("overlay") );
|
|
|
renderPass(defaultPass, getSort("ui"));
|
|
|
+
|
|
|
+
|
|
|
+ var outlineTex = allocTarget("outlineBlur", false);
|
|
|
+ {
|
|
|
+ var outlineSrcTex = allocTarget("outline", false);
|
|
|
+ setTarget(outlineSrcTex);
|
|
|
+ clear(0);
|
|
|
+ draw("outline");
|
|
|
+ resetTarget();
|
|
|
+ outlineBlur.apply(ctx, outlineSrcTex, outlineTex);
|
|
|
+ }
|
|
|
+
|
|
|
+ resetTarget();
|
|
|
+ composite.shader.texture = output;
|
|
|
+ composite.shader.outline = outlineTex;
|
|
|
+ composite.render();
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -74,8 +117,33 @@ class PbrSetup extends h3d.mat.PbrMaterialSetup {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+class ScreenOutline extends h3d.shader.ScreenShader {
|
|
|
+ static var SRC = {
|
|
|
+
|
|
|
+ @param var texture: Sampler2D;
|
|
|
+
|
|
|
+ function vertex() {
|
|
|
+ }
|
|
|
+
|
|
|
+ function fragment() {
|
|
|
+ var uv = input.uv;
|
|
|
+ var outval = texture.get(uv).rgb;
|
|
|
+ if(outval.r > 0.1 && outval.r < 0.5)
|
|
|
+ pixelColor.rgb += outval.rgb*3.0 + 0.1;
|
|
|
+ }
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
class PbrRenderer extends h3d.scene.pbr.Renderer {
|
|
|
|
|
|
+ var outline = new ScreenOutline();
|
|
|
+ var outlineBlur = new h3d.pass.Blur(4);
|
|
|
+
|
|
|
+ public function new(env) {
|
|
|
+ super(env);
|
|
|
+ tonemap.addShader(outline);
|
|
|
+ }
|
|
|
+
|
|
|
override function getDefaultProps( ?kind : String ) : Any {
|
|
|
var props : h3d.scene.pbr.Renderer.RenderProps = super.getDefaultProps(kind);
|
|
|
props.sky = Background;
|
|
@@ -84,16 +152,24 @@ class PbrRenderer extends h3d.scene.pbr.Renderer {
|
|
|
|
|
|
override function mainDraw() {
|
|
|
output.draw(getSort("default", true));
|
|
|
- output.draw(get("outlined"));
|
|
|
output.draw(getSort("alpha"));
|
|
|
output.draw(get("additive"));
|
|
|
+
|
|
|
+
|
|
|
+ var outlineTex = allocTarget("outline", false);
|
|
|
+ setTarget(outlineTex);
|
|
|
+ clear(0);
|
|
|
+ draw("outline");
|
|
|
+
|
|
|
+ var outlineBlurTex = allocTarget("outlineBlur", false);
|
|
|
+ outlineBlur.apply(ctx, outlineTex, outlineBlurTex);
|
|
|
+ outline.texture = outlineBlurTex;
|
|
|
}
|
|
|
|
|
|
override function postDraw() {
|
|
|
defaultPass.draw(getSort("debuggeom"));
|
|
|
defaultPass.draw(getSort("debuggeom_alpha"));
|
|
|
defaultPass.draw(getSort("overlay"));
|
|
|
- draw("outline");
|
|
|
defaultPass.draw(getSort("ui"));
|
|
|
}
|
|
|
}
|