From f0ac2db8294c1e1b824019061f9059da90e8e120 Mon Sep 17 00:00:00 2001 From: e2002e Date: Sun, 31 Mar 2024 20:57:21 +0200 Subject: [PATCH] bump ! --- Sources/iron/RenderPath.hx | 37 ++++++++++++++++++++++++++++-- Sources/iron/object/LightObject.hx | 4 ++++ Sources/iron/object/MeshObject.hx | 4 ++-- Sources/iron/object/Tilesheet.hx | 14 ++++++----- Sources/iron/object/Uniforms.hx | 9 ++++++-- 5 files changed, 56 insertions(+), 12 deletions(-) diff --git a/Sources/iron/RenderPath.hx b/Sources/iron/RenderPath.hx index 3d3132c7..7fb01d4a 100644 --- a/Sources/iron/RenderPath.hx +++ b/Sources/iron/RenderPath.hx @@ -62,7 +62,7 @@ class RenderPath { var lastFrameTime = 0.0; var loading = 0; var cachedShaderContexts: Map = new Map(); - var depthBuffers: Array<{name: String, format: String}> = []; + public var depthBuffers: Array<{name: String, format: String}> = []; var additionalTargets: Array; #if rp_voxels @@ -112,6 +112,34 @@ class RenderPath { numTrisShadow = 0; #end + #if (rp_voxels != "Off") + armory.renderpath.RenderPathCreator.clipmapLevel = (armory.renderpath.RenderPathCreator.clipmapLevel + 1) % Main.voxelgiClipmapCount; + var clipmap = armory.renderpath.RenderPathCreator.clipmaps[armory.renderpath.RenderPathCreator.clipmapLevel]; + + clipmap.voxelSize = armory.renderpath.RenderPathCreator.clipmaps[0].voxelSize * Math.pow(2.0, armory.renderpath.RenderPathCreator.clipmapLevel); + + var texelSize = 2.0 * clipmap.voxelSize; + var camera = iron.Scene.active.camera; + var center = new iron.math.Vec3( + Math.floor(camera.transform.worldx() / texelSize) * texelSize, + Math.floor(camera.transform.worldy() / texelSize) * texelSize, + Math.floor(camera.transform.worldz() / texelSize) * texelSize + ); + + clipmap.offset_prev.x = Std.int((clipmap.center.x - center.x) / texelSize); + clipmap.offset_prev.y = Std.int((clipmap.center.y - center.y) / texelSize); + clipmap.offset_prev.z = Std.int((clipmap.center.z - center.z) / texelSize); + clipmap.center = center; + + var res = armory.renderpath.Inc.getVoxelRes(); + var extents = new iron.math.Vec3(clipmap.voxelSize * res, clipmap.voxelSize * res, clipmap.voxelSize * res); + if (clipmap.extents.x != extents.x || clipmap.extents.y != extents.y || clipmap.extents.z != extents.z) + { + armory.renderpath.RenderPathCreator.pre_clear = true; + } + clipmap.extents = extents; + #end + // Render to screen or probe var cam = Scene.active.camera; isProbePlanar = cam != null && cam.renderTarget != null; @@ -534,7 +562,8 @@ class RenderPath { break; } - if (nodepth != null) { + if (nodepth != null && nodepth.raw.is_image != true) { + trace(nodepth.raw); rt.image.setDepthStencilFrom(nodepth.image); } } @@ -553,6 +582,10 @@ class RenderPath { rt.image.setDepthStencilFrom(depthToRenderTarget.get(rt.depthStencilFrom).image); } } + + #if (rp_voxels != "Off") + armory.renderpath.RenderPathCreator.res_pre_clear = true; + #end } public function createRenderTarget(t: RenderTargetRaw): RenderTarget { diff --git a/Sources/iron/object/LightObject.hx b/Sources/iron/object/LightObject.hx index 5323ceef..b9c3a8b1 100644 --- a/Sources/iron/object/LightObject.hx +++ b/Sources/iron/object/LightObject.hx @@ -634,6 +634,8 @@ class LightObject extends Object { return 8; #elseif (rp_max_lights == 16) return 16; + #elseif (rp_max_lights == 24) + return 24; #elseif (rp_max_lights == 32) return 32; #elseif (rp_max_lights == 64) @@ -648,6 +650,8 @@ class LightObject extends Object { return 8; #elseif (rp_max_lights_cluster == 16) return 16; + #elseif (rp_max_lights_cluster == 24) + return 24; #elseif (rp_max_lights_cluster == 32) return 32; #elseif (rp_max_lights_cluster == 64) diff --git a/Sources/iron/object/MeshObject.hx b/Sources/iron/object/MeshObject.hx index 089144fa..53b40858 100644 --- a/Sources/iron/object/MeshObject.hx +++ b/Sources/iron/object/MeshObject.hx @@ -168,7 +168,7 @@ class MeshObject extends Object { if (force_context != null && force_context != context) return setCulled(isShadow, true); #if (!arm_voxelgi_revox) // No revox - do not voxelize moving objects - if (context == "voxel" && raw != null && raw.mobile == true) return setCulled(isShadow, true); + //if (context == "voxel" && raw != null && raw.mobile == true) return setCulled(isShadow, true); #end return setCulled(isShadow, false); @@ -185,7 +185,7 @@ class MeshObject extends Object { // particleSystems for update, particleOwner for render if (particleSystems != null || particleOwner != null) radiusScale *= 1000; #end - if (context == "voxel") radiusScale *= 100; + //if (context == "voxel") radiusScale *= 100; if (data.geom.instanced) radiusScale *= 100; var isShadow = context == "shadowmap"; var frustumPlanes = isShadow ? light.frustumPlanes : camera.frustumPlanes; diff --git a/Sources/iron/object/Tilesheet.hx b/Sources/iron/object/Tilesheet.hx index 210f68aa..ea4e0201 100644 --- a/Sources/iron/object/Tilesheet.hx +++ b/Sources/iron/object/Tilesheet.hx @@ -45,6 +45,7 @@ class Tilesheet { } setFrame(action.start); paused = false; + time = 0.0; } public function pause() { @@ -100,16 +101,17 @@ class Tilesheet { function setFrame(f: Int) { frame = f; - var tx = frame % raw.tilesx; - var ty = Std.int(frame / raw.tilesx); - tileX = tx * (1 / raw.tilesx); - tileY = ty * (1 / raw.tilesy); - // Action end - if (frame >= action.end && action.start < action.end) { + if (frame > action.end && action.start < action.end) { if (onActionComplete != null) onActionComplete(); if (action.loop) setFrame(action.start); else paused = true; + return; } + + var tx = frame % raw.tilesx; + var ty = Std.int(frame / raw.tilesx); + tileX = tx * (1 / raw.tilesx); + tileY = ty * (1 / raw.tilesy); } } diff --git a/Sources/iron/object/Uniforms.hx b/Sources/iron/object/Uniforms.hx index 5eabdeba..9cdfb4f6 100644 --- a/Sources/iron/object/Uniforms.hx +++ b/Sources/iron/object/Uniforms.hx @@ -178,9 +178,14 @@ class Uniforms { } if (isImage) { - g.setImageTexture(context.textureUnits[j], rt.image); // image2D/3D // Multiple voxel volumes, always set params - g.setTexture3DParameters(context.textureUnits[j], TextureAddressing.Clamp, TextureAddressing.Clamp, TextureAddressing.Clamp, TextureFilter.LinearFilter, TextureFilter.PointFilter, MipMapFilter.LinearMipFilter); + g.setImageTexture(context.textureUnits[j], rt.image); // image2D/3D + if (rt.raw.depth <= 1) { + g.setTextureParameters(context.textureUnits[j], TextureAddressing.Clamp, TextureAddressing.Clamp, TextureFilter.LinearFilter, TextureFilter.LinearFilter, MipMapFilter.NoMipFilter); + } + else { + g.setTexture3DParameters(context.textureUnits[j], TextureAddressing.Clamp, TextureAddressing.Clamp, TextureAddressing.Clamp, TextureFilter.LinearFilter, TextureFilter.LinearFilter, MipMapFilter.LinearMipFilter); + } paramsSet = true; } else if (rt.isCubeMap) {