Fix raytracer

This commit is contained in:
luboslenco 2019-02-19 10:09:42 +01:00
parent b0d076c30d
commit 9cd951819a
4 changed files with 47 additions and 39 deletions

View file

@ -40,44 +40,51 @@ class RenderPathRaytracer {
kha.Assets.loadBlobFromPath("pt_raygeneration.o", function(rayShader:kha.Blob) {
kha.Assets.loadBlobFromPath("pt_closesthit.o", function(hitShader:kha.Blob) {
kha.Assets.loadBlobFromPath("pt_miss.o", function(missShader:kha.Blob) {
iron.system.Tween.timer(0.2, function() {
ready = true;
// Command list
commandList = new CommandList();
for (i in 0...bufferCount) {
framebuffers[i] = new kha.graphics5.RenderTarget(iron.App.w(), iron.App.h(), 16, false, TextureFormat.RGBA32,
-1, -i - 1 /* hack in an index for backbuffer render targets */);
}
commandList.end(); // TODO: Otherwise "Reset fails because the command list was not closed"
ready = true;
// Command list
commandList = new CommandList();
for (i in 0...bufferCount) {
framebuffers[i] = new kha.graphics5.RenderTarget(iron.App.w(), iron.App.h(), 16, false, TextureFormat.RGBA32,
-1, -i - 1 /* hack in an index for backbuffer render targets */);
}
commandList.end(); // TODO: Otherwise "Reset fails because the command list was not closed"
// Pipeline
constantBuffer = new ConstantBuffer(21 * 4);
pipeline = new RayTracePipeline(commandList, rayShader, hitShader, missShader, constantBuffer);
// Pipeline
constantBuffer = new ConstantBuffer(21 * 4);
pipeline = new RayTracePipeline(commandList, rayShader, hitShader, missShader, constantBuffer);
// Acceleration structure
var structure = new VertexStructure();
structure.add("pos", VertexData.Float3);
structure.add("nor", VertexData.Float3);
var geom = iron.Scene.active.meshes[0].data.geom;
// Acceleration structure
var structure = new VertexStructure();
structure.add("pos", VertexData.Float3);
structure.add("nor", VertexData.Float3);
var md = iron.Scene.active.meshes[0].data;
var geom = md.geom;
var verts = Std.int(geom.positions.length / 3);
var vb = new VertexBuffer(verts, structure, kha.graphics5.Usage.StaticUsage);
var vba = vb.lock();
// iron.data.Geometry.buildVertices(vba, geom.positions, geom.normals);
for (i in 0...verts) {
vba[i * 6 ] = (geom.positions[i * 4 ] / 32767) * md.scalePos;
vba[i * 6 + 1] = (geom.positions[i * 4 + 1] / 32767) * md.scalePos;
vba[i * 6 + 2] = (geom.positions[i * 4 + 2] / 32767) * md.scalePos;
vba[i * 6 + 3] = geom.normals [i * 2 ] / 32767;
vba[i * 6 + 4] = geom.normals [i * 2 + 1] / 32767;
vba[i * 6 + 5] = geom.positions[i * 4 + 3] / 32767;
}
vb.unlock();
var vb = new VertexBuffer(Std.int(geom.positions.length / 4), structure, kha.graphics5.Usage.StaticUsage);
var vba = vb.lock();
iron.data.Geometry.buildVertices(vba, geom.positions, geom.normals);
vb.unlock();
var id = geom.indices[0];
var ib = new IndexBuffer(id.length, kha.graphics5.Usage.StaticUsage);
var iba = ib.lock();
for (i in 0...iba.length) iba[i] = id[i];
ib.unlock();
var id = geom.indices[0];
var ib = new IndexBuffer(id.length, kha.graphics5.Usage.StaticUsage);
var iba = ib.lock();
for (i in 0...iba.length) iba[i] = id[i];
ib.unlock();
accel = new AccelerationStructure(commandList, vb, ib);
accel = new AccelerationStructure(commandList, vb, ib);
// Output
target = new RayTraceTarget(iron.App.w(), iron.App.h());
});
// Output
target = new RayTraceTarget(iron.App.w(), iron.App.h());
});
});
});
@ -136,7 +143,7 @@ class RenderPathRaytracer {
commandList.end();
g.end();
g.swapBuffers();
// g.swapBuffers();
}
#end
}

View file

@ -260,10 +260,10 @@ def compile(assets_only=False):
if arm.utils.get_rp().rp_renderer == 'Raytracer':
cmd.append('--raytrace')
cmd.append('dxr')
dxc_path = fp + '/HlslShaders/fxc.exe'
subprocess.Popen([dxc_path, '-Zpr', '-Fo', fp + '/Bundled/pt_raygeneration.o', '-T', 'lib_6_1', fp + '/HlslShaders/pt_raygeneration.hlsl'])
subprocess.Popen([dxc_path, '-Zpr', '-Fo', fp + '/Bundled/pt_closesthit.o', '-T', 'lib_6_1', fp + '/HlslShaders/pt_closesthit.hlsl'])
subprocess.Popen([dxc_path, '-Zpr', '-Fo', fp + '/Bundled/pt_miss.o', '-T', 'lib_6_1', fp + '/HlslShaders/pt_miss.hlsl'])
dxc_path = fp + '/HlslShaders/dxc.exe'
subprocess.Popen([dxc_path, '-Zpr', '-Fo', fp + '/Bundled/pt_raygeneration.o', '-T', 'lib_6_1', fp + '/HlslShaders/pt_raygeneration.hlsl']).wait()
subprocess.Popen([dxc_path, '-Zpr', '-Fo', fp + '/Bundled/pt_closesthit.o', '-T', 'lib_6_1', fp + '/HlslShaders/pt_closesthit.hlsl']).wait()
subprocess.Popen([dxc_path, '-Zpr', '-Fo', fp + '/Bundled/pt_miss.o', '-T', 'lib_6_1', fp + '/HlslShaders/pt_miss.hlsl']).wait()
if arm.utils.get_khamake_threads() > 1:
cmd.append('--parallelAssetConversion')

View file

@ -266,6 +266,7 @@ def make_deferred(con_mesh, rpasses):
return con_mesh
def make_raytracer(con_mesh):
con_mesh.data['vertex_elements'] = [{'name': 'pos', 'data': 'float3'}, {'name': 'nor', 'data': 'float3'}]
wrd = bpy.data.worlds['Arm']
vert = con_mesh.make_vert()
frag = con_mesh.make_frag()

View file

@ -216,7 +216,7 @@ class ArmRPListItem(bpy.types.PropertyGroup):
rp_renderer: EnumProperty(
items=[('Forward', 'Forward Clustered', 'Forward'),
('Deferred', 'Deferred Clustered', 'Deferred'),
# ('Raytracer', 'Raytracer', 'Raytracer'),
# ('Raytracer', 'Raytracer', 'Raytracer', 'ERROR', 2),
],
name="Renderer", description="Renderer type", default='Deferred', update=update_renderpath)
rp_depthprepass: BoolProperty(name="Depth Prepass", description="Depth Prepass for mesh context", default=False, update=update_renderpath)