Update dxr shaders

This commit is contained in:
luboslenco
2019-09-30 13:42:54 +02:00
parent 32cab01e75
commit 8ad0bb4d93
15 changed files with 236 additions and 316 deletions
+13 -13
View File
@@ -33,24 +33,12 @@ class MaterialBuilder {
con_paint.data.color_writes_blue = [true, true, true, true];
con_paint.data.color_writes_alpha = [true, true, true, true];
if (Context.tool == ToolBake) {
// Bake into base color, disable other slots
con_paint.data.color_writes_red[1] = false;
con_paint.data.color_writes_green[1] = false;
con_paint.data.color_writes_blue[1] = false;
con_paint.data.color_writes_alpha[1] = false;
con_paint.data.color_writes_red[2] = false;
con_paint.data.color_writes_green[2] = false;
con_paint.data.color_writes_blue[2] = false;
con_paint.data.color_writes_alpha[2] = false;
}
var vert = con_paint.make_vert();
var frag = con_paint.make_frag();
frag.ins = vert.outs;
#if kha_direct3d12
if (UITrait.inst.bakeType == -1) {
if (Context.tool == ToolBake && UITrait.inst.bakeType == -1) {
// Init raytraced bake
vert.add_out('vec3 position');
vert.add_out('vec3 normal');
@@ -71,6 +59,18 @@ class MaterialBuilder {
}
#end
if (Context.tool == ToolBake) {
// Bake into base color, disable other slots
con_paint.data.color_writes_red[1] = false;
con_paint.data.color_writes_green[1] = false;
con_paint.data.color_writes_blue[1] = false;
con_paint.data.color_writes_alpha[1] = false;
con_paint.data.color_writes_red[2] = false;
con_paint.data.color_writes_green[2] = false;
con_paint.data.color_writes_blue[2] = false;
con_paint.data.color_writes_alpha[2] = false;
}
if (Context.tool == ToolColorId || Context.tool == ToolPicker) {
// Mangle vertices to form full screen triangle
vert.write('gl_Position = vec4(-1.0 + float((gl_VertexID & 1) << 2), -1.0 + float((gl_VertexID & 2) << 1), 0.0, 1.0);');
+45 -49
View File
@@ -625,6 +625,47 @@ class RenderPathDeferred {
Context.selectPaintObject(_paintObject);
if (isMerged) Context.mergedObject.visible = _visible;
}
#if kha_direct3d12
else if (UITrait.inst.bakeType == 0) { // AO (DXR)
if (path.renderTargets.get("baketex0") == null) {
{
var t = new RenderTargetRaw();
t.name = "baketex0";
t.width = Config.getTextureRes();
t.height = Config.getTextureRes();
t.format = "RGBA64";
path.createRenderTarget(t);
}
{
var t = new RenderTargetRaw();
t.name = "baketex1";
t.width = Config.getTextureRes();
t.height = Config.getTextureRes();
t.format = "RGBA64";
path.createRenderTarget(t);
}
{
var t = new RenderTargetRaw();
t.name = "baketex2";
t.width = Config.getTextureRes();
t.height = Config.getTextureRes();
t.format = "RGBA128"; // Match raytrace_target format
path.createRenderTarget(t);
}
}
if (!RenderPathRaytrace.ready) {
UITrait.inst.bakeType = -1;
MaterialParser.parsePaintMaterial();
for (i in 0...4) { // Jitter
path.setTarget("baketex0", ["baketex1"]);
path.drawMeshes("paint");
}
UITrait.inst.bakeType = 0;
// MaterialParser.parsePaintMaterial();
}
RenderPathRaytrace.commandsBake();
}
#end
else {
RenderPathPaint.commandsPaint();
}
@@ -662,56 +703,11 @@ class RenderPathDeferred {
}
#if kha_direct3d12
var bake = false;
if (Context.ddirty > 1 && !bake) {
RenderPathRaytrace.frame = 0.0;
}
if (bake) {
if (path.renderTargets.get("baketex0") == null) {
{
var t = new RenderTargetRaw();
t.name = "baketex0";
t.width = Config.getTextureRes();
t.height = Config.getTextureRes();
t.format = "RGBA64";
path.createRenderTarget(t);
}
{
var t = new RenderTargetRaw();
t.name = "baketex1";
t.width = Config.getTextureRes();
t.height = Config.getTextureRes();
t.format = "RGBA64";
path.createRenderTarget(t);
}
{
var t = new RenderTargetRaw();
t.name = "baketex2";
t.width = Config.getTextureRes();
t.height = Config.getTextureRes();
t.format = "RGBA128"; // Match raytrace_target format
path.createRenderTarget(t);
}
var viewport = false;
if (viewport) {
if (Context.ddirty > 1) {
RenderPathRaytrace.frame = 0.0;
}
if (!RenderPathRaytrace.ready) {
var _bakeType = UITrait.inst.bakeType;
UITrait.inst.bakeType = -1;
MaterialParser.parsePaintMaterial();
for (i in 0...4) { // Jitter
path.setTarget("baketex0", ["baketex1"]);
path.drawMeshes("paint");
}
UITrait.inst.bakeType = _bakeType;
// MaterialParser.parsePaintMaterial();
}
RenderPathRaytrace.commandsBake();
path.setTarget("texpaint" + Context.layer.id);
path.bindTarget("baketex2", "tex");
path.drawShader("shader_datas/copy_pass/copy_pass");
}
else {
RenderPathRaytrace.commands();
path.setTarget("taa");
drawCompass(path.currentG);
+5 -1
View File
@@ -46,7 +46,7 @@ class RenderPathPaint {
path.setTarget("texpaint_picker", ["texpaint_nor_picker", "texpaint_pack_picker"]);
path.clearTarget(0xff000000);
path.bindTarget("gbuffer2", "gbuffer2");
tid = Project.layers[0].id;
tid = Context.layer.id;
path.bindTarget("texpaint" + tid, "texpaint");
path.bindTarget("texpaint_nor" + tid, "texpaint_nor");
path.bindTarget("texpaint_pack" + tid, "texpaint_pack");
@@ -82,6 +82,7 @@ class RenderPathPaint {
}
}
else {
#if (!kha_direct3d12)
if (Context.tool == ToolBake && UITrait.inst.bakeType == 0) { // AO
if (initVoxels) {
initVoxels = false;
@@ -100,6 +101,7 @@ class RenderPathPaint {
path.drawMeshes("voxel");
path.generateMipmaps("voxels");
}
#end
var blendA = "texpaint_blend0";
var blendB = "texpaint_blend1";
@@ -114,9 +116,11 @@ class RenderPathPaint {
path.bindTarget("gbuffer0", "gbuffer0");
}
path.bindTarget(blendB, "paintmask");
#if (!kha_direct3d12)
if (Context.tool == ToolBake && UITrait.inst.bakeType == 0) { // AO
path.bindTarget("voxels", "voxels");
}
#end
if (UITrait.inst.colorIdPicked) {
path.bindTarget("texpaint_colorid", "texpaint_colorid");
}
+18 -10
View File
@@ -91,19 +91,27 @@ class RenderPathRaytrace {
public static function commandsBake() {
if (!ready) { ready = true; initBake(); return; }
f32[0] = frame;
frame += 1.0;
var path = RenderPathDeferred.path;
var baketex2 = path.renderTargets.get("baketex2").image;
if (Context.pdirty > 0) {
Krom.raytraceDispatchRays(baketex2.renderTarget_, f32.buffer);
f32[0] = frame;
frame = (Std.int(frame) % 30) + 1;
Context.ddirty = 1;
// Context.ddirty--;
Context.pdirty--;
// Context.rdirty--;
Context.rdirty = 2;
var path = RenderPathDeferred.path;
var baketex2 = path.renderTargets.get("baketex2").image;
Krom.raytraceDispatchRays(baketex2.renderTarget_, f32.buffer);
Context.ddirty = 1;
// Context.ddirty--;
Context.pdirty--;
// Context.rdirty--;
Context.rdirty = 2;
path.setTarget("texpaint" + Context.layer.id);
path.bindTarget("baketex2", "tex");
path.drawShader("shader_datas/copy_pass/copy_pass");
}
}
static function buildData() {
+2 -1
View File
@@ -999,7 +999,8 @@ class UITrait {
else if (Context.tool == ToolBake) {
ui.changed = false;
var bakeHandle = Id.handle({position: bakeType});
bakeType = ui.combo(bakeHandle, ["AO", "Curvature", "Normal (Tang)", "Normal (World)", "Position", "TexCoord", "Material ID", "Object ID"], "Bake");
var ao = #if kha_direct3d12 "AO (DXR)" #else "AO" #end;
bakeType = ui.combo(bakeHandle, [ao, "Curvature", "Normal (Tang)", "Normal (World)", "Position", "TexCoord", "Material ID", "Object ID"], "Bake");
if (bakeType == 0 || bakeType == 1) {
var bakeAxisHandle = Id.handle({position: bakeAxis});
bakeAxis = ui.combo(bakeAxisHandle, ["XYZ", "X", "Y", "Z", "-X", "-Y", "-Z"], "Axis");