Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 20 additions & 33 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,8 @@ add_executable(
src/context/editor/dock-spaces/metrics/MetricsPanel.h
src/service/log/LogService.cpp
src/service/log/LogService.h
src/context/editor/dock-spaces/hierarchy/HierarchyPanel.cpp
src/context/editor/dock-spaces/hierarchy/HierarchyPanel.h
src/context/editor/dock-spaces/world/WorldPanel.cpp
src/context/editor/dock-spaces/world/WorldPanel.h
src/repository/abstract/RuntimeResource.h
src/util/ShaderUtil.cpp
src/util/ShaderUtil.h
Expand Down Expand Up @@ -151,19 +151,20 @@ add_executable(
src/service/camera/Camera.cpp
src/repository/world/WorldRepository.cpp
src/repository/world/WorldRepository.h
src/repository/world/impl/EntityComponent.h
src/repository/world/impl/MetadataComponent.h
src/enum/ComponentType.cpp
src/enum/ComponentType.h
src/repository/world/impl/AbstractComponent.h
src/repository/world/components/MeshComponent.h
src/repository/world/components/PrimitiveComponent.h
src/repository/world/components/TransformComponent.h
src/enum/ShadingMode.h
src/context/editor/dock-spaces/hierarchy/HierarchyHeaderPanel.cpp
src/context/editor/dock-spaces/hierarchy/HierarchyHeaderPanel.h
src/context/editor/dock-spaces/world/WorldHeaderPanel.cpp
src/context/editor/dock-spaces/world/WorldHeaderPanel.h
src/service/selection/SelectionService.cpp
src/service/selection/SelectionService.h
src/repository/world/impl/EntityComponent.cpp
src/repository/world/impl/MetadataComponent.cpp
src/repository/world/components/TransformComponent.cpp
src/repository/world/components/MeshComponent.cpp
src/repository/world/components/PrimitiveComponent.cpp
src/context/editor/abstract/form/types/ResourceField.cpp
src/context/editor/abstract/form/types/ResourceField.h
src/context/editor/abstract/form/types/ColorField.cpp
Expand Down Expand Up @@ -191,18 +192,13 @@ add_executable(
src/context/editor/abstract/form/types/QuatField.h
src/service/transform/TransformService.cpp
src/service/transform/TransformService.h
src/repository/world/impl/WorldGridRepository.cpp
src/repository/world/impl/WorldGridRepository.h
src/repository/world/impl/WorldTile.h
src/repository/world/impl/BoundingBox.h
src/service/voxel/impl/SparseVoxelOctreeBuilder.cpp
src/service/voxel/impl/SparseVoxelOctreeBuilder.h
src/service/voxel/impl/OctreeNode.cpp
src/service/voxel/impl/OctreeNode.h
src/service/voxel/impl/VoxelData.h
src/service/mesh/SceneData.h
src/service/mesh/EntityAssetData.h
src/service/material/MaterialFileData.h
src/context/engine/render-pass/impl/PostProcessingPass.cpp
src/context/engine/render-pass/impl/PostProcessingPass.h
src/context/engine/compute-pass/impl/HWRayTracingPass.cpp
Expand All @@ -221,40 +217,27 @@ add_executable(
src/dto/Notification.h
src/enum/NotificationSeverity.h
src/service/voxel/impl/SparseVoxelOctreeData.h
src/context/engine/render-pass/impl/tools/SelectedDotPass.cpp
src/context/engine/render-pass/impl/tools/SelectedDotPass.h
src/context/engine/render-pass/impl/tools/SelectionOutlinePass.cpp
src/context/engine/render-pass/impl/tools/SelectionOutlinePass.h
src/service/picking/PickingService.cpp
src/service/picking/PickingService.h
src/service/voxel/SVOInstance.h
src/service/world/WorldGridService.cpp
src/service/world/WorldGridService.h
src/dto/buffers/TileInfoUBO.h
src/dto/buffers/LightData.h
src/repository/world/components/LightComponent.cpp
src/repository/world/components/LightComponent.h
src/repository/world/components/SphereLightComponent.cpp
src/repository/world/components/SphereLightComponent.h
src/repository/world/components/PlaneLightComponent.h
src/context/engine/render-pass/impl/tools/IconsPass.cpp
src/context/engine/render-pass/impl/tools/IconsPass.h
src/context/engine/render-pass/impl/tools/SelectionIDPass.cpp
src/context/engine/render-pass/impl/tools/SelectionIDPass.h
src/repository/editor/EditorRepository.cpp
src/dto/push-constant/GridPushConstant.h
src/context/engine/compute-pass/AbstractComputePass.cpp
src/context/engine/compute-pass/AbstractComputePass.h
src/context/engine/passes/AbstractPass.cpp
src/context/engine/passes/AbstractPass.h
src/util/ImageUtils.h
src/service/material/MaterialInstance.h
src/service/material/MaterialService.cpp
src/service/material/MaterialService.h
src/service/material/MaterialFileData.cpp
src/repository/inspection/FilesRepository.cpp
src/repository/inspection/FilesRepository.h
src/context/editor/dock-spaces/inspector/MaterialEditPanel.cpp
src/context/editor/dock-spaces/inspector/MaterialEditPanel.h
src/enum/LightType.h
src/context/engine/compute-pass/impl/AccumulationPass.cpp
src/context/engine/compute-pass/impl/AccumulationPass.h
src/service/lights/LightService.cpp
src/service/lights/LightService.h
src/repository/world/components/VolumeComponent.cpp
Expand All @@ -263,10 +246,7 @@ add_executable(
src/service/notification/AsyncTask.h
src/service/voxel/VoxelImporterService.cpp
src/service/voxel/VoxelImporterService.h
src/dto/buffers/MaterialData.h
src/dto/buffers/VolumeData.h
src/service/volumes/VolumeService.cpp
src/service/volumes/VolumeService.h
src/service/voxel/VoxelService.cpp
src/service/voxel/VoxelService.h
src/util/Serializable.cpp
Expand Down Expand Up @@ -297,6 +277,13 @@ add_executable(
src/context/engine/compute-pass/impl/TemporalAccumulationPass.h
src/context/engine/compute-pass/impl/SpatialFilterPass.cpp
src/context/engine/compute-pass/impl/SpatialFilterPass.h
src/enum/ComponentType.cpp
src/service/mesh/SceneEntityData.h
src/context/editor/dock-spaces/repositories/RepositoriesPanel.cpp
src/context/editor/dock-spaces/repositories/RepositoriesPanel.h
src/service/volumes/VolumeService.cpp
src/service/volumes/VolumeService.h
src/repository/dock/DockRepository.cpp
)


Expand Down
1 change: 0 additions & 1 deletion resources/shaders/GlobalDataBuffer.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ layout (set = 0, binding = 0) uniform GlobalDataBlock {
vec3 cameraWorldPosition;
vec3 sunColor;
vec3 sunPosition;
vec2 outputRes;

uint volumeCount;
uint lightsCount;
Expand Down
26 changes: 0 additions & 26 deletions resources/shaders/MaterialBuffer.glsl

This file was deleted.

13 changes: 12 additions & 1 deletion resources/shaders/MeshMetadata.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,20 @@

struct MeshMetadata {
uint renderIndex;
uint materialIndex;
uint64_t vertexBufferAddress;
uint64_t indexBufferAddress;

vec3 albedo;
float roughness;
float metallic;
float transmission;
float thickness;
float ior;
uint isEmissive;

uint albedoTexture;
uint roughnessTexture;
uint metallicTexture;
};

layout (set = 0, binding = MESH_METADATA_SET) readonly buffer MeshMetadatas {
Expand Down
2 changes: 1 addition & 1 deletion resources/shaders/TemporalAccumulation.comp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ void main() {
prevNormal = imageLoad(previousNormalImage, prevCoord).rgb;
vec4 prevDenoised = imageLoad(previousDenoisedImage, prevCoord);
prevDenoisedColor = prevDenoised.rgb;
historyLen = prevDenoised.a;
historyLen = globalData.pathTracerAccumulationCount - 1;

// Validation checks
if (currentIdx != prevPositionIndex.a) valid = false;
Expand Down
61 changes: 29 additions & 32 deletions resources/shaders/rt/HWRayTracing.rchit
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
#extension GL_EXT_ray_tracing: require
#extension GL_EXT_nonuniform_qualifier: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require
#extension GL_EXT_buffer_reference2 : require
#extension GL_EXT_shader_explicit_arithmetic_types_int64: require
#extension GL_EXT_buffer_reference2: require

#include "../util/HWRayTracingUtil.glsl"
#define MATERIAL_SET 7
#include "../MaterialBuffer.glsl"
#define MESH_METADATA_SET 8
#define MESH_METADATA_SET 7
#include "../MeshMetadata.glsl"

layout (set = 0, binding = 9) uniform sampler2D textureArray[];
layout (set = 0, binding = 8) uniform sampler2D textureArray[];

layout (location = 0) rayPayloadInEXT RayPayload payload;
hitAttributeEXT vec2 attribs; // Barycentric coordinates for the hit
Expand All @@ -20,11 +18,11 @@ struct VertexData {
float u, v;
};

layout(buffer_reference, std430) readonly buffer Vertices {
layout (buffer_reference, std430) readonly buffer Vertices {
VertexData vertices[];
};

layout(buffer_reference, std430) readonly buffer Indices {
layout (buffer_reference, std430) readonly buffer Indices {
uint indices[];
};

Expand All @@ -44,11 +42,11 @@ void main() {
VertexData v2 = vBuffer.vertices[i2];

const vec3 barycentrics = vec3(1.0 - attribs.x - attribs.y, attribs.x, attribs.y);

vec3 n0 = vec3(v0.nx, v0.ny, v0.nz);
vec3 n1 = vec3(v1.nx, v1.ny, v1.nz);
vec3 n2 = vec3(v2.nx, v2.ny, v2.nz);

vec2 uv0 = vec2(v0.u, v0.v);
vec2 uv1 = vec2(v1.u, v1.v);
vec2 uv2 = vec2(v2.u, v2.v);
Expand All @@ -62,7 +60,6 @@ void main() {
payload.hitNormal = normalize(vec3(gl_ObjectToWorldEXT * vec4(normal, 0.0)));
payload.uv = uv;

uint matIndex = metadata.materialIndex;
payload.renderIndex = metadata.renderIndex;

vec3 baseColor = vec3(1.0);
Expand All @@ -73,28 +70,28 @@ void main() {
float ior = 1.45;
bool isEmissive = false;

if (matIndex != 0u) {
MaterialData mat = materialBuffer.items[matIndex];
if (mat.useAlbedoTexture == 1u) {
baseColor = texture(textureArray[nonuniformEXT(mat.albedoTexture)], uv).rgb;
} else {
baseColor = mat.albedo;
}
if (mat.useRoughnessTexture == 1u) {
roughness = texture(textureArray[nonuniformEXT(mat.roughnessTexture)], uv).r;
} else {
roughness = mat.roughness;
}
if (mat.useMetallicTexture == 1u) {
metallic = texture(textureArray[nonuniformEXT(mat.metallicTexture)], uv).r;
} else {
metallic = mat.metallic;
}
transmission = mat.transmission;
thickness = mat.thickness;
ior = mat.ior;
isEmissive = mat.isEmissive == 1u;
payload.alpha = 1.0;
if (metadata.albedoTexture != 0u) {
vec4 alb = texture(textureArray[nonuniformEXT(metadata.albedoTexture)], uv);
payload.alpha = alb.a;
baseColor = alb.rgb;
} else {
baseColor = metadata.albedo;
}
if (metadata.roughnessTexture != 0u) {
roughness = texture(textureArray[nonuniformEXT(metadata.roughnessTexture)], uv).r;
} else {
roughness = metadata.roughness;
}
if (metadata.metallicTexture != 0u) {
metallic = texture(textureArray[nonuniformEXT(metadata.metallicTexture)], uv).r;
} else {
metallic = metadata.metallic;
}
transmission = metadata.transmission;
thickness = metadata.thickness;
ior = metadata.ior;
isEmissive = metadata.isEmissive == 1u;

payload.material.baseColor = baseColor;
payload.material.roughness = max(roughness, 0.015);
Expand Down
34 changes: 24 additions & 10 deletions resources/shaders/rt/HWRayTracing.rgen
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,17 @@ layout (location = 0) rayPayloadEXT RayPayload payload;

#define LIGHT_SET 5
#include "../LightBuffer.glsl"

#define VOLUME_SET 6
#include "../VolumeBuffer.glsl"
#define MATERIAL_SET 7
#include "../MaterialBuffer.glsl"
#define MESH_METADATA_SET 8

#define MESH_METADATA_SET 7
#include "../MeshMetadata.glsl"

#include "../util/DisneyBSDF.glsl"
#include "../util/PixelShading.glsl"
#include "../util/VolumeRayTracer.glsl"


#include "../GBufferUtil.glsl"

#ifdef DEBUG
Expand Down Expand Up @@ -66,9 +65,19 @@ void main() {

payload.hit = false;
payload.renderIndex = 0;

if(pushConstants.shouldTrace == 1){
traceRayEXT(topLevelAS, gl_RayFlagsOpaqueEXT, 0xFF, 0, 0, 0, rayOrigin, 0.001, rayDirection, 10000.0, 0);
payload.alpha = 1.0;

if (pushConstants.shouldTrace == 1) {
float tMin = 0.001;
vec3 origin = rayOrigin;
for (int i = 0; i < 8; i++) {
traceRayEXT(topLevelAS, gl_RayFlagsOpaqueEXT, 0xFF, 0, 0, 0, origin, tMin, rayDirection, 10000.0, 0);
if (!payload.hit || payload.alpha > 0.0) {
break;
}
origin = payload.hitPosition;
tMin = 0.001;
}
}

if (!payload.hit) {
Expand All @@ -88,7 +97,7 @@ void main() {
interaction.anyHit = true;

#ifdef DEBUG
if (globalData.debugFlag != LIT) {
if (globalData.debugFlag != LIT) {
bool shouldReturn = true;
if (globalData.debugFlag == NORMAL) {
finalColor = interaction.normal;
Expand Down Expand Up @@ -134,6 +143,11 @@ void main() {
finalColor = volumetricColor.rgb * volumetricColor.a + finalColor * (1.0 - volumetricColor.a);
}

finalColor = max(vec3(0), finalColor);
imageStore(outputImage, ivec2(gl_LaunchIDEXT.xy), vec4(finalColor, 1));
vec4 prev = imageLoad(outputImage, ivec2(gl_LaunchIDEXT.xy));
float count = min(float(globalData.pathTracerMaxSamples), max(globalData.pathTracerAccumulationCount, 1.0));
vec3 color = prev.rgb * (1.0 - 1.0 / count) + finalColor.rgb * (1.0 / count);

imageStore(outputImage, ivec2(gl_LaunchIDEXT.xy), vec4(color, 1));


}
Loading