From a1a620e5d07ca7f04b2bab46802fff79739b02fe Mon Sep 17 00:00:00 2001 From: luboslenco Date: Sat, 7 Dec 2019 16:49:28 +0100 Subject: [PATCH] Add dilate pass --- Assets/common/shader_datas.arm | Bin 15585 -> 15585 bytes Shaders/common/dilate_pass.frag.glsl | 56 +++++++++++++++++++++++ Sources/arm/Layers.hx | 39 +++++++++++++--- Sources/arm/render/RenderPathDeferred.hx | 1 + Sources/arm/render/RenderPathForward.hx | 1 + Sources/arm/render/RenderPathPaint.hx | 23 ++++++++++ Sources/arm/render/Uniforms.hx | 7 +++ Sources/arm/ui/BoxPreferences.hx | 3 ++ Sources/arm/ui/UITrait.hx | 1 + 9 files changed, 125 insertions(+), 6 deletions(-) create mode 100644 Shaders/common/dilate_pass.frag.glsl diff --git a/Assets/common/shader_datas.arm b/Assets/common/shader_datas.arm index 4985ae7d545434132cb0323fabb544b764b34afc..5e00b1a92ae46deebc19138f60852241c0bcc1c0 100644 GIT binary patch delta 120 zcmaD@`LJ?=I2%6$1H*l$iGhk6?F_Xi8z}N~aRWtCGIJ73QYU}pR72uU%(2quflCG@ rreu~D-(~>{ = null; static var mergedObjectVisible = false; static var savedFov = 0.0; + static var dilated = true; public static function init(_path:RenderPath) { path = _path; @@ -64,6 +65,7 @@ class RenderPathPaint { } path.loadShader("shader_datas/copy_mrt3_pass/copy_mrt3_pass"); + path.loadShader("shader_datas/dilate_pass/dilate_pass"); } @:access(iron.RenderPath) @@ -161,11 +163,18 @@ class RenderPathPaint { } #end + if (Context.tool == ToolBake && UITrait.inst.brushTime == iron.system.Time.delta) { + // Clear to black on bake start + path.setTarget("texpaint" + tid); + path.clearTarget(0xff000000); + } + var blendA = "texpaint_blend0"; var blendB = "texpaint_blend1"; path.setTarget(blendB); path.bindTarget(blendA, "tex"); path.drawShader("shader_datas/copy_pass/copy_pass"); + var isMask = Context.layerIsMask; var texpaint = isMask ? "texpaint_mask" + tid : "texpaint" + tid; path.setTarget(texpaint, ["texpaint_nor" + tid, "texpaint_pack" + tid, blendA]); @@ -379,6 +388,7 @@ class RenderPathPaint { } if (Context.tool == ToolBake) { + if (Context.pdirty > 0) dilated = false; if (UITrait.inst.bakeType == 2) { // Normal (Tangent) UITrait.inst.bakeType = 3; // Bake high poly world normals MaterialParser.parsePaintMaterial(); @@ -475,6 +485,19 @@ class RenderPathPaint { } } } + + public static function finishPaint() { + if (Context.tool == ToolBake && !dilated && UITrait.inst.dilateRadius > 0) { + if (Layers.imga == null) Layers.makeTempImg(); + dilated = true; + path.setTarget("temptex0"); + path.bindTarget("texpaint0", "tex"); + path.drawShader("shader_datas/copy_pass/copy_pass"); + path.setTarget("texpaint0"); + path.bindTarget("temptex0", "tex"); + path.drawShader("shader_datas/dilate_pass/dilate_pass"); + } + } } #end diff --git a/Sources/arm/render/Uniforms.hx b/Sources/arm/render/Uniforms.hx index b73d8de5..dae3bff0 100644 --- a/Sources/arm/render/Uniforms.hx +++ b/Sources/arm/render/Uniforms.hx @@ -95,6 +95,13 @@ class Uniforms { return 1.2; #end } + if (link == "_dilateRadius") { + #if arm_painter + return UITrait.inst.dilateRadius; + #else + return 8.0; + #end + } return null; } diff --git a/Sources/arm/ui/BoxPreferences.hx b/Sources/arm/ui/BoxPreferences.hx index 04e6f77c..f2663ef0 100644 --- a/Sources/arm/ui/BoxPreferences.hx +++ b/Sources/arm/ui/BoxPreferences.hx @@ -107,6 +107,9 @@ class BoxPreferences { UITrait.inst.brushBias = ui.slider(Id.handle({value: UITrait.inst.brushBias}), "Paint Bleed", 0.0, 2.0, true); if (ui.isHovered) ui.tooltip("Stretch brush strokes on the uv map to prevent seams"); + UITrait.inst.dilateRadius = ui.slider(Id.handle({value: UITrait.inst.dilateRadius}), "Dilate Radius", 0.0, 64.0, true, 1); + if (ui.isHovered) ui.tooltip("Dilate baked textures to prevent seams"); + var brush3dHandle = Id.handle({selected: UITrait.inst.brush3d}); UITrait.inst.brush3d = ui.check(brush3dHandle, "3D Cursor"); if (brush3dHandle.changed) MaterialParser.parsePaintMaterial(); diff --git a/Sources/arm/ui/UITrait.hx b/Sources/arm/ui/UITrait.hx index 1aa1f3f2..f2172a4e 100644 --- a/Sources/arm/ui/UITrait.hx +++ b/Sources/arm/ui/UITrait.hx @@ -200,6 +200,7 @@ class UITrait { public var bakeCurvOffset = 0.0; public var bakeCurvSmooth = 1; public var bakeHighPoly = 0; + public var dilateRadius = 8.0; public var xray = false; public var symX = false;