Final skeletal fixes

This commit is contained in:
SirLynix 2022-08-17 20:03:52 +02:00 committed by Jérôme Leclercq
parent 3efe62ddbe
commit b37af6da31
4 changed files with 17 additions and 25 deletions

View File

@ -87,8 +87,6 @@ int main()
Nz::MeshParams meshParams;
meshParams.animated = true;
meshParams.center = true;
meshParams.vertexOffset = Nz::Vector3f(3.f, 0.f, 0.f);
meshParams.vertexRotation = Nz::EulerAnglesf(0.f, 0.f, 0.f);
meshParams.vertexScale = Nz::Vector3f(0.1f, 0.1f, 0.1f);
meshParams.vertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XYZ_Normal_UV_Tangent_Skinning);
@ -105,7 +103,7 @@ int main()
animParam.jointScale = meshParams.vertexScale;
animParam.jointOffset = meshParams.vertexOffset;
std::shared_ptr<Nz::Animation> bobAnim = Nz::Animation::LoadFromFile(resourceDir / "character/Wave Hip Hop Dance.fbx", animParam);
std::shared_ptr<Nz::Animation> bobAnim = Nz::Animation::LoadFromFile(resourceDir / "character/Gangnam Style.fbx", animParam);
if (!bobAnim)
{
NazaraError("Failed to load bob anim");
@ -253,6 +251,14 @@ int main()
window.EnableEventPolling(true);
renderSystem.GetFramePipeline().OnTransfer.Connect([&](Nz::FramePipeline* pipeline, Nz::RenderFrame& renderFrame, Nz::CommandBufferBuilder& builder)
{
auto& skeletalAllocation = renderFrame.GetUploadPool().Allocate(skeletalBufferMem.size());
std::memcpy(skeletalAllocation.mappedPtr, skeletalBufferMem.data(), skeletalBufferMem.size());
builder.CopyBuffer(skeletalAllocation, Nz::RenderBufferView(renderBuffer.get()));
});
Nz::Clock fpsClock, updateClock;
float incr = 0.f;
unsigned int currentFrame = 0;
@ -388,30 +394,9 @@ int main()
playerShipBody.AddForce(Nz::Vector3f::Down() * 3.f * mass, Nz::CoordSys::Local);*/
}
Nz::RenderFrame frame = window.AcquireFrame();
if (!frame)
continue;
frame.Execute([&](Nz::CommandBufferBuilder& builder)
{
builder.BeginDebugRegion("Skeletal UBO Update", Nz::Color::Yellow);
{
builder.PreTransferBarrier();
auto& skeletalAllocation = frame.GetUploadPool().Allocate(skeletalBufferMem.size());
std::memcpy(skeletalAllocation.mappedPtr, skeletalBufferMem.data(), skeletalBufferMem.size());
builder.CopyBuffer(skeletalAllocation, Nz::RenderBufferView(renderBuffer.get()));
builder.PostTransferBarrier();
}
builder.EndDebugRegion();
}, Nz::QueueType::Graphics);
systemGraph.Update();
frame.Present();
fps++;
if (fpsClock.GetMilliseconds() >= 1000)

View File

@ -214,6 +214,8 @@ namespace Nz
{
builder.PreTransferBarrier();
OnTransfer(this, renderFrame, builder);
for (std::size_t viewerIndex = m_invalidatedViewerInstances.FindFirst(); viewerIndex != m_invalidatedViewerInstances.npos; viewerIndex = m_invalidatedViewerInstances.FindNext(viewerIndex))
{
ViewerData* viewerData = m_viewerPool.RetrieveFromIndex(viewerIndex);

View File

@ -50,6 +50,10 @@ namespace Nz
#include <Nazara/Graphics/Resources/Shaders/Modules/Engine/LightData.nzslb.h>
};
const UInt8 r_skeletalDataModule[] = {
#include <Nazara/Graphics/Resources/Shaders/Modules/Engine/SkeletalData.nzslb.h>
};
const UInt8 r_viewerDataModule[] = {
#include <Nazara/Graphics/Resources/Shaders/Modules/Engine/ViewerData.nzslb.h>
};
@ -233,6 +237,7 @@ namespace Nz
RegisterEmbedShaderModule(r_mathCookTorrancePBRModule);
RegisterEmbedShaderModule(r_phongMaterialShader);
RegisterEmbedShaderModule(r_physicallyBasedMaterialShader);
RegisterEmbedShaderModule(r_skeletalDataModule);
RegisterEmbedShaderModule(r_textureBlitShader);
RegisterEmbedShaderModule(r_viewerDataModule);

View File

@ -156,7 +156,7 @@ fn billboardMain(input: VertIn) -> VertOut
fn main(input: VertIn) -> VertOut
{
let pos: vec3[f32];
const if (HasSkinning && false)
const if (HasSkinning)
{
pos = vec3[f32](0.0, 0.0, 0.0);