Fix raytracer
This commit is contained in:
parent
b0d076c30d
commit
9cd951819a
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue