Update dxr shaders
This commit is contained in:
@@ -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);');
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user