fixed BARYCENTRIC_CALCULATE because it was actually stemming from not using the actual camera UBO used to render the scene (even though nsight showed the values matching so who knows)
This commit is contained in:
parent
dc192064b1
commit
2afcacc9e1
@ -120,7 +120,7 @@
|
||||
"hdr": true,
|
||||
"vxgi": false, // to-do: fix issues
|
||||
"culling": false,
|
||||
"bloom": true,
|
||||
"bloom": false,
|
||||
"dof": false,
|
||||
"rt": false,
|
||||
"fsr": false,
|
||||
|
||||
@ -316,7 +316,7 @@ void populateSurfaceMaterial() {
|
||||
}
|
||||
#endif
|
||||
{
|
||||
surface.normal.eye = normalize(vec3( ubo.eyes[surface.pass].view * vec4(surface.normal.world, 0.0) ));
|
||||
surface.normal.eye = normalize(vec3( VIEW_MATRIX * vec4(surface.normal.world, 0.0) ));
|
||||
}
|
||||
|
||||
surface.light *= surface.material.albedo;
|
||||
@ -425,13 +425,13 @@ void populateSurface( InstanceAddresses instanceAddresses, uvec3 indices ) {
|
||||
#if 0 && BARYCENTRIC_CALCULATE
|
||||
{
|
||||
surface.position.world = vec3( surface.object.model * vec4(triangle.point.position, 1.0 ) );
|
||||
surface.position.eye = vec3( ubo.eyes[surface.pass].view * vec4(surface.position.world, 1.0) );
|
||||
surface.position.eye = vec3( VIEW_MATRIX * vec4(surface.position.world, 1.0) );
|
||||
}
|
||||
#endif
|
||||
// bind normals
|
||||
{
|
||||
surface.normal.world = normalize(vec3( surface.object.model * vec4(triangle.point.normal, 0.0 ) ));
|
||||
// surface.normal.eye = vec3( ubo.eyes[surface.pass].view * vec4(surface.normal.world, 0.0) );
|
||||
// surface.normal.eye = vec3( VIEW_MATRIX * vec4(surface.normal.world, 0.0) );
|
||||
}
|
||||
// bind UVs
|
||||
{
|
||||
|
||||
@ -21,7 +21,11 @@
|
||||
#define MAX_SHADOWS ubo.settings.lighting.maxShadows
|
||||
#endif
|
||||
#ifndef VIEW_MATRIX
|
||||
#if VXGI
|
||||
#define VIEW_MATRIX ubo.eyes[surface.pass].view
|
||||
#else
|
||||
#define VIEW_MATRIX camera.viewport[surface.pass].view
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// implicit shader settings
|
||||
@ -76,7 +80,7 @@
|
||||
#endif
|
||||
#if BARYCENTRIC
|
||||
#ifndef BARYCENTRIC_CALCULATE
|
||||
#define BARYCENTRIC_CALCULATE 0
|
||||
#define BARYCENTRIC_CALCULATE 1
|
||||
#endif
|
||||
#ifndef BUFFER_REFERENCE
|
||||
#define BUFFER_REFERENCE 1
|
||||
|
||||
@ -71,7 +71,7 @@ void pbr() {
|
||||
if ( light.power <= LIGHT_POWER_CUTOFF ) continue;
|
||||
if ( surface.material.lightmapped && light.type >= 0 ) continue;
|
||||
|
||||
const vec3 Liu = vec3(ubo.eyes[surface.pass].view * vec4(light.position, 1)) - surface.position.eye;
|
||||
const vec3 Liu = vec3(camera.viewport[surface.pass].view * vec4(light.position, 1)) - surface.position.eye;
|
||||
const float Ld = length(Liu);
|
||||
const float La = 1.0 / (1 + (PI * pow(Ld, 2.0)));
|
||||
if ( La <= LIGHT_POWER_CUTOFF ) continue;
|
||||
|
||||
@ -61,43 +61,46 @@ layout( push_constant ) uniform PushBlock {
|
||||
|
||||
#include "../../../common/structs.h"
|
||||
|
||||
layout (binding = 10) uniform UBO {
|
||||
layout (binding = 10) uniform Camera {
|
||||
Viewport viewport[2];
|
||||
} camera;
|
||||
|
||||
layout (binding = 11) uniform UBO {
|
||||
EyeMatrices eyes[2];
|
||||
|
||||
Settings settings;
|
||||
} ubo;
|
||||
/*
|
||||
*/
|
||||
layout (std140, binding = 11) readonly buffer DrawCommands {
|
||||
|
||||
layout (std140, binding = 12) readonly buffer DrawCommands {
|
||||
DrawCommand drawCommands[];
|
||||
};
|
||||
layout (std140, binding = 12) readonly buffer Instances {
|
||||
layout (std140, binding = 13) readonly buffer Instances {
|
||||
Instance instances[];
|
||||
};
|
||||
layout (std140, binding = 13) readonly buffer InstanceAddresseses {
|
||||
layout (std140, binding = 14) readonly buffer InstanceAddresseses {
|
||||
InstanceAddresses instanceAddresses[];
|
||||
};
|
||||
layout (std140, binding = 14) readonly buffer Objects {
|
||||
layout (std140, binding = 15) readonly buffer Objects {
|
||||
Object objects[];
|
||||
};
|
||||
layout (std140, binding = 15) readonly buffer Materials {
|
||||
layout (std140, binding = 16) readonly buffer Materials {
|
||||
Material materials[];
|
||||
};
|
||||
layout (std140, binding = 16) readonly buffer Textures {
|
||||
layout (std140, binding = 17) readonly buffer Textures {
|
||||
Texture textures[];
|
||||
};
|
||||
layout (std140, binding = 17) readonly buffer Lights {
|
||||
layout (std140, binding = 18) readonly buffer Lights {
|
||||
Light lights[];
|
||||
};
|
||||
|
||||
layout (binding = 18) uniform sampler2D samplerTextures[TEXTURES];
|
||||
layout (binding = 19) uniform samplerCube samplerCubemaps[CUBEMAPS];
|
||||
layout (binding = 20) uniform sampler3D samplerNoise;
|
||||
layout (binding = 19) uniform sampler2D samplerTextures[TEXTURES];
|
||||
layout (binding = 20) uniform samplerCube samplerCubemaps[CUBEMAPS];
|
||||
layout (binding = 21) uniform sampler3D samplerNoise;
|
||||
#if VXGI
|
||||
layout (binding = 21) uniform sampler3D voxelOutput[CASCADES];
|
||||
layout (binding = 22) uniform sampler3D voxelOutput[CASCADES];
|
||||
#endif
|
||||
#if RT
|
||||
layout (binding = 22) uniform accelerationStructureEXT tlas;
|
||||
layout (binding = 23) uniform accelerationStructureEXT tlas;
|
||||
#endif
|
||||
|
||||
#if BUFFER_REFERENCE
|
||||
@ -195,24 +198,26 @@ void populateSurface() {
|
||||
float depth = 0.0;
|
||||
{
|
||||
vec2 inUv = (vec2(gl_GlobalInvocationID.xy) / vec2(renderSize)) * 2.0f - 1.0f;
|
||||
const mat4 iProjectionView = inverse( ubo.eyes[surface.pass].projection * mat4(mat3(ubo.eyes[surface.pass].view)) );
|
||||
|
||||
const mat4 iProjection = inverse( camera.viewport[surface.pass].projection );
|
||||
const mat4 iView = inverse( camera.viewport[surface.pass].view );
|
||||
const mat4 iProjectionView = inverse( camera.viewport[surface.pass].projection * mat4(mat3(camera.viewport[surface.pass].view)) );
|
||||
|
||||
const vec4 near4 = iProjectionView * (vec4(inUv, -1.0, 1.0));
|
||||
const vec4 far4 = iProjectionView * (vec4(inUv, 1.0, 1.0));
|
||||
const vec3 near3 = near4.xyz / near4.w;
|
||||
const vec3 far3 = far4.xyz / far4.w;
|
||||
|
||||
surface.ray.direction = normalize( far3 - near3 );
|
||||
// surface.ray.origin = near3.xyz;
|
||||
surface.ray.origin = ubo.eyes[surface.pass].eyePos.xyz;
|
||||
// surface.ray.origin = vec3( -ubo.eyes[surface.pass].view[0][3], -ubo.eyes[surface.pass].view[1][3], -ubo.eyes[surface.pass].view[2][3] );
|
||||
surface.ray.origin = near3.xyz; // eyePos.xyz
|
||||
|
||||
depth = IMAGE_LOAD(samplerDepth).r;
|
||||
|
||||
vec4 eye = ubo.eyes[surface.pass].iProjection * vec4(inUv, depth, 1.0);
|
||||
|
||||
vec4 eye = iProjection * vec4(inUv, depth, 1.0);
|
||||
eye /= eye.w;
|
||||
|
||||
surface.position.eye = eye.xyz;
|
||||
surface.position.world = vec3( ubo.eyes[surface.pass].iView * eye );
|
||||
surface.position.world = vec3( iView * eye );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -34,38 +34,42 @@ layout (binding = 0) uniform accelerationStructureEXT tlas;
|
||||
|
||||
layout (binding = 1, rgba32f) uniform image2D outImage;
|
||||
|
||||
layout (binding = 2) uniform UBO {
|
||||
layout (binding = 2) uniform Camera {
|
||||
Viewport viewport[2];
|
||||
} camera;
|
||||
|
||||
layout (binding = 3) uniform UBO {
|
||||
EyeMatrices eyes[2];
|
||||
|
||||
Settings settings;
|
||||
} ubo;
|
||||
|
||||
layout (std140, binding = 3) readonly buffer Instances {
|
||||
layout (std140, binding = 4) readonly buffer Instances {
|
||||
Instance instances[];
|
||||
};
|
||||
layout (std140, binding = 4) readonly buffer InstanceAddresseses {
|
||||
layout (std140, binding = 5) readonly buffer InstanceAddresseses {
|
||||
InstanceAddresses instanceAddresses[];
|
||||
};
|
||||
layout (std140, binding = 5) readonly buffer Objects {
|
||||
layout (std140, binding = 6) readonly buffer Objects {
|
||||
Object objects[];
|
||||
};
|
||||
layout (std140, binding = 6) readonly buffer Materials {
|
||||
layout (std140, binding = 7) readonly buffer Materials {
|
||||
Material materials[];
|
||||
};
|
||||
layout (std140, binding = 7) readonly buffer Textures {
|
||||
layout (std140, binding = 8) readonly buffer Textures {
|
||||
Texture textures[];
|
||||
};
|
||||
layout (std140, binding = 8) readonly buffer Lights {
|
||||
layout (std140, binding = 9) readonly buffer Lights {
|
||||
Light lights[];
|
||||
};
|
||||
|
||||
layout (binding = 9) uniform sampler2D samplerTextures[TEXTURES];
|
||||
layout (binding = 10) uniform samplerCube samplerCubemaps[CUBEMAPS];
|
||||
layout (binding = 11) uniform sampler3D samplerNoise;
|
||||
layout (binding = 10) uniform sampler2D samplerTextures[TEXTURES];
|
||||
layout (binding = 11) uniform samplerCube samplerCubemaps[CUBEMAPS];
|
||||
layout (binding = 12) uniform sampler3D samplerNoise;
|
||||
#if VXGI
|
||||
layout (binding = 12) uniform usampler3D voxelId[CASCADES];
|
||||
layout (binding = 13) uniform sampler3D voxelNormal[CASCADES];
|
||||
layout (binding = 14) uniform sampler3D voxelRadiance[CASCADES];
|
||||
layout (binding = 13) uniform usampler3D voxelId[CASCADES];
|
||||
layout (binding = 14) uniform sampler3D voxelNormal[CASCADES];
|
||||
layout (binding = 15) uniform sampler3D voxelRadiance[CASCADES];
|
||||
#endif
|
||||
|
||||
layout (location = 0) rayPayloadEXT RayTracePayload payload;
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
#define USE_SHARED_PIPELINES 0
|
||||
|
||||
#define VK_DEBUG_VALIDATION_MESSAGE(...)\
|
||||
// VK_VALIDATION_MESSAGE(x);
|
||||
VK_VALIDATION_MESSAGE(__VA_ARGS__);
|
||||
|
||||
namespace {
|
||||
uint32_t VERTEX_BUFFER_BIND_ID = 0;
|
||||
@ -871,7 +871,7 @@ void ext::vulkan::DescriptorSet::update( const Graphic& graphic, const GraphicDe
|
||||
for ( size_t i = 0; i < descriptor.descriptorCount; ++i ) {
|
||||
if ( descriptor.pBufferInfo ) {
|
||||
if ( descriptor.pBufferInfo[i].offset % device->properties.limits.minUniformBufferOffsetAlignment != 0 ) {
|
||||
// VK_DEBUG_VALIDATION_MESSAGE("Invalid descriptor for buffer: " << descriptor.pBufferInfo[i].buffer << " (Offset: " << descriptor.pBufferInfo[i].offset << ", Range: " << descriptor.pBufferInfo[i].range << "), invalidating...");
|
||||
VK_DEBUG_VALIDATION_MESSAGE("Invalid descriptor for buffer: {} (Offset: {}, Range: {}), invalidating...", (void*) descriptor.pBufferInfo[i].buffer, descriptor.pBufferInfo[i].offset, descriptor.pBufferInfo[i].range);
|
||||
goto PIPELINE_UPDATE_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
#if BARYCENTRIC
|
||||
// 0 keeps a buffer for barycentric coordinates, 1 will reconstruct in the deferred pass
|
||||
#ifndef BARYCENTRIC_CALCULATE
|
||||
#define BARYCENTRIC_CALCULATE 0
|
||||
#define BARYCENTRIC_CALCULATE 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@ -507,7 +507,7 @@ void ext::vulkan::DeferredRenderMode::build( bool resized ) {
|
||||
auto& shader = blitter.material.getShader(DEFERRED_MODE, "deferred");
|
||||
|
||||
shader.metadata.aliases.buffers.clear();
|
||||
// shader.aliasBuffer( storage.buffers.camera );
|
||||
shader.aliasBuffer( storage.buffers.camera );
|
||||
// shader.aliasBuffer( storage.buffers.joint );
|
||||
shader.aliasBuffer( storage.buffers.drawCommands );
|
||||
shader.aliasBuffer( storage.buffers.instance );
|
||||
|
||||
Loading…
Reference in New Issue
Block a user