Update raytracing interface

This commit is contained in:
luboslenco
2019-10-08 22:10:23 +02:00
parent 04776499a5
commit 8caae0bd61
6 changed files with 96 additions and 71 deletions
Binary file not shown.
+5 -2
View File
@@ -12,6 +12,7 @@ struct Vertex {
struct RayGenConstantBuffer {
float4 eye; // xyz, frame
float4x4 inv_vp;
float4 params; // envstr, envshow
};
struct RayPayload {
@@ -76,7 +77,9 @@ void raygeneration() {
if (payload.color.a < 0) {
if (i == 0) {
// return;
payload.color.rgb = float3(0.05, 0.05, 0.05);
if (constant_buffer.params.y == 0) {
payload.color.rgb = float3(0.05, 0.05, 0.05);
}
}
break;
}
@@ -157,6 +160,6 @@ void closesthit(inout RayPayload payload, in BuiltInTriangleIntersectionAttribut
[shader("miss")]
void miss(inout RayPayload payload) {
float2 tex_coord = equirect(WorldRayDirection());
float3 texenv = mytexture_env.Load(uint3(tex_coord.x * 1024, tex_coord.y * 512, 0)).rgb * 3;
float3 texenv = mytexture_env.Load(uint3(tex_coord.x * 4096, tex_coord.y * 2048, 0)).rgb * constant_buffer.params.x;
payload.color = float4(payload.color.rgb * texenv.rgb, -1);
}
-3
View File
@@ -117,9 +117,6 @@ class ImportEnvmap {
Scene.active.world.probe.radiance = image;
Scene.active.world.probe.radianceMipmaps = mips;
Context.ddirty = 2;
#if kha_direct3d12
arm.render.RenderPathRaytrace.ready = false;
#end
}
}, true); // Readable
mw = Std.int(mw / 2);
-33
View File
@@ -190,39 +190,6 @@ class RenderPathDeferred {
}
#end
#if kha_direct3d12
{
Scene.active.embedData("bnoise_sobol.png", function() {});
Scene.active.embedData("bnoise_scramble.png", function() {});
Scene.active.embedData("bnoise_rank.png", function() {});
{
var t = new RenderTargetRaw();
t.name = "bsobol";
t.width = 256;
t.height = 256;
t.format = "RGBA32";
path.createRenderTarget(t);
}
{
var t = new RenderTargetRaw();
t.name = "bscramble";
t.width = 128;
t.height = 1024;
t.format = "RGBA32";
path.createRenderTarget(t);
}
{
var t = new RenderTargetRaw();
t.name = "brank";
t.width = 128;
t.height = 1024;
t.format = "RGBA32";
path.createRenderTarget(t);
}
}
#end
{
var t = new RenderTargetRaw();
t.name = "bloomtex";
+89 -33
View File
@@ -13,7 +13,8 @@ class RenderPathRaytrace {
public static var raysPix = 0;
public static var raysSec = 0;
public static var ready = false;
static var f32 = new kha.arrays.Float32Array(20);
static var first = true;
static var f32 = new kha.arrays.Float32Array(24);
static var helpMat = iron.math.Mat4.identity();
static var vb:kha.arrays.Float32Array;
static var ib:kha.arrays.Uint32Array;
@@ -22,23 +23,87 @@ class RenderPathRaytrace {
static var brank:kha.Image;
static var raysTimer = 0.0;
static var raysCounter = 0;
static var lastLayer:kha.Image = null;
static var lastEnvmap:kha.Image = null;
static function init() {
iron.data.Data.getBlob("raytrace_brute.cso", function(shader:kha.Blob) {
static function init(shaderName:String, targetW:Int, targetH:Int) {
if (first) {
Scene.active.embedData("bnoise_sobol.png", function() {});
Scene.active.embedData("bnoise_scramble.png", function() {});
Scene.active.embedData("bnoise_rank.png", function() {});
var path = RenderPathDeferred.path;
{
var t = new RenderTargetRaw();
t.name = "bsobol";
t.width = 256;
t.height = 256;
t.format = "RGBA32";
path.createRenderTarget(t);
}
{
var t = new RenderTargetRaw();
t.name = "bscramble";
t.width = 128;
t.height = 1024;
t.format = "RGBA32";
path.createRenderTarget(t);
}
{
var t = new RenderTargetRaw();
t.name = "brank";
t.width = 128;
t.height = 1024;
t.format = "RGBA32";
path.createRenderTarget(t);
}
{
var t = new RenderTargetRaw();
t.name = "envrt";
t.width = 4096;
t.height = 2048;
t.format = "RGBA128";
path.createRenderTarget(t);
}
}
iron.data.Data.getBlob(shaderName, function(shader:kha.Blob) {
buildData();
var layer = Context.layer;
var savedEnvmap = Scene.active.world.probe.radiance;
Krom.raytraceInit(
shader.bytes.getData(), untyped vb.buffer, untyped ib.buffer, iron.App.w(), iron.App.h(),
layer.texpaint.renderTarget_, layer.texpaint_nor.renderTarget_, layer.texpaint_pack.renderTarget_,
savedEnvmap.texture_, bsobol.renderTarget_, bscramble.renderTarget_, brank.renderTarget_);
shader.bytes.getData(), untyped vb.buffer, untyped ib.buffer, targetW, targetH,
bsobol.renderTarget_, bscramble.renderTarget_, brank.renderTarget_);
});
}
public static function commands() {
if (!ready) { ready = true; init(); return; }
if (!ready) {
ready = true;
init("raytrace_brute.cso", iron.App.w(), iron.App.h());
lastEnvmap = null;
lastLayer = null;
}
var path = RenderPathDeferred.path;
var savedEnvmap = Scene.active.world.probe.radiance;
if (lastEnvmap != savedEnvmap) {
lastEnvmap = savedEnvmap;
lastLayer = null;
var envrt = path.renderTargets.get("envrt").image;
envrt.g2.begin(false);
envrt.g2.drawScaledImage(savedEnvmap, 0, 0, envrt.width, envrt.height);
envrt.g2.end();
}
var layer = Context.layer;
if (lastLayer != layer.texpaint) {
lastLayer = layer.texpaint;
var envrt = path.renderTargets.get("envrt").image;
Krom.raytraceSetTextures(layer.texpaint.renderTarget_, layer.texpaint_nor.renderTarget_, layer.texpaint_pack.renderTarget_, envrt.renderTarget_);
}
var cam = Scene.active.camera;
var ct = cam.transform;
helpMat.setFrom(cam.V);
@@ -65,6 +130,8 @@ class RenderPathRaytrace {
f32[17] = helpMat._31;
f32[18] = helpMat._32;
f32[19] = helpMat._33;
f32[20] = Scene.active.world.probe.raw.strength;
f32[21] = UITrait.inst.showEnvmap ? 1.0 : 0.0;
var path = RenderPathDeferred.path;
var framebuffer = path.renderTargets.get("taa").image;
@@ -77,24 +144,6 @@ class RenderPathRaytrace {
Context.rdirty--;
}
public static function initBake() {
iron.data.Data.getBlob("raytrace_bake.cso", function(shader:kha.Blob) {
buildData();
var path = RenderPathDeferred.path;
var baketex0 = path.renderTargets.get("baketex0").image;
var baketex1 = path.renderTargets.get("baketex1").image;
var baketex2 = path.renderTargets.get("baketex2").image;
var savedEnvmap = Scene.active.world.probe.radiance;
var layer = Context.layer;
Krom.raytraceInit(
shader.bytes.getData(), untyped vb.buffer, untyped ib.buffer, layer.texpaint.width, layer.texpaint.height,
baketex0.renderTarget_, baketex1.renderTarget_, baketex2.renderTarget_,
savedEnvmap.texture_, bsobol.renderTarget_, bscramble.renderTarget_, brank.renderTarget_);
});
}
public static function commandsBake() {
var path = RenderPathDeferred.path;
@@ -142,7 +191,14 @@ class RenderPathRaytrace {
UITrait.inst.bakeType = 0;
// MaterialParser.parsePaintMaterial();
initBake();
init("raytrace_bake.cso", Config.getTextureRes(), Config.getTextureRes());
var baketex0 = path.renderTargets.get("baketex0").image;
var baketex1 = path.renderTargets.get("baketex1").image;
var baketex2 = path.renderTargets.get("baketex2").image;
var savedEnvmap = Scene.active.world.probe.radiance;
Krom.raytraceSetTextures(baketex0.renderTarget_, baketex1.renderTarget_, baketex2.renderTarget_, savedEnvmap.texture_);
return;
}
@@ -213,13 +269,13 @@ class RenderPathRaytrace {
bscramble = path.renderTargets.get("bscramble").image;
brank = path.renderTargets.get("brank").image;
bsobol.g2.begin();
bsobol.g2.begin(false);
bsobol.g2.drawImage(bnoise_sobol, 0, 0);
bsobol.g2.end();
bscramble.g2.begin();
bscramble.g2.begin(false);
bscramble.g2.drawImage(bnoise_scramble, 0, 0);
bscramble.g2.end();
brank.g2.begin();
brank.g2.begin(false);
brank.g2.drawImage(bnoise_rank, 0, 0);
brank.g2.end();
}
+2
View File
@@ -43,6 +43,7 @@ class TabViewport {
p.raw.strength = ui.slider(envHandle, "Environment", 0.0, 8.0, true);
if (envHandle.changed) Context.ddirty = 2;
#if (!kha_direct3d12)
ui.row([1/2, 1/2]);
if (Scene.active.lights.length > 0) {
var light = Scene.active.lights[0];
@@ -68,6 +69,7 @@ class TabViewport {
light.data.raw.strength = ui.slider(lhandle, "Light", 0.0, 4.0, true) * scale;
if (lhandle.changed) Context.ddirty = 2;
}
#end
ui.row([1/2, 1/2]);
var cam = Scene.active.camera.data.raw;