diff --git a/Hydrogent/src/HnRenderPass.cpp b/Hydrogent/src/HnRenderPass.cpp index b44da995..498bc4d3 100644 --- a/Hydrogent/src/HnRenderPass.cpp +++ b/Hydrogent/src/HnRenderPass.cpp @@ -675,6 +675,7 @@ HnRenderPass::EXECUTE_RESULT HnRenderPass::Execute(HnRenderPassState& RPState, c &Transform.PosBias, pSkinningData ? reinterpret_cast(pSkinningData->GeomBindXform.Data()) : nullptr, pSkinningData ? reinterpret_cast(pSkinningData->GeomBindXform.Data()) : nullptr, + &DisplayColor, &ListItem.MeshUID, // CustomData sizeof(ListItem.MeshUID), // CustomDataSize }; diff --git a/PBR/interface/GLTF_PBR_Renderer.hpp b/PBR/interface/GLTF_PBR_Renderer.hpp index a31d82d4..6cc09ecd 100644 --- a/PBR/interface/GLTF_PBR_Renderer.hpp +++ b/PBR/interface/GLTF_PBR_Renderer.hpp @@ -259,6 +259,7 @@ class GLTF_PBR_Renderer : public PBR_Renderer const float3* PosBias = nullptr; const float4x4* SkinPreTransform = nullptr; // #if USE_JOINTS && USE_SKIN_PRE_TRANSFORM const float4x4* PrevSkinPreTransform = nullptr; // #if USE_JOINTS && USE_SKIN_PRE_TRANSFORM && COMPUTE_MOTION_VECTORS + const float4* BaseColorFactor = nullptr; const void* CustomData = nullptr; size_t CustomDataSize = 0; }; diff --git a/PBR/src/GLTF_PBR_Renderer.cpp b/PBR/src/GLTF_PBR_Renderer.cpp index 5e04d1b3..ad00db5c 100644 --- a/PBR/src/GLTF_PBR_Renderer.cpp +++ b/PBR/src/GLTF_PBR_Renderer.cpp @@ -766,6 +766,7 @@ void* GLTF_PBR_Renderer::WritePBRPrimitiveShaderAttribs(void* // float4x4 PrevSkinPreTransform; // #if USE_JOINTS && USE_SKIN_PRE_TRANSFORM && COMPUTE_MOTION_VECTORS // } Transforms; // + // float4 BaseColorFactor; // UserDefined CustomData; //}; @@ -839,6 +840,12 @@ void* GLTF_PBR_Renderer::WritePBRPrimitiveShaderAttribs(void* } } + { + const float4& BaseColorFactor = AttribsData.BaseColorFactor != nullptr ? *AttribsData.BaseColorFactor : float4{1, 1, 1, 1}; + memcpy(pDstPtr, &BaseColorFactor, sizeof(BaseColorFactor)); + pDstPtr += sizeof(BaseColorFactor); + } + { if (AttribsData.CustomData != nullptr) { diff --git a/PBR/src/PBR_Renderer.cpp b/PBR/src/PBR_Renderer.cpp index 4275e5e5..67812878 100644 --- a/PBR/src/PBR_Renderer.cpp +++ b/PBR/src/PBR_Renderer.cpp @@ -2033,6 +2033,7 @@ Uint32 PBR_Renderer::GetPBRPrimitiveAttribsSize(PSO_FLAGS Flags, Uint32 CustomDa // float4x4 PrevSkinPreTransform; // #if USE_JOINTS && USE_SKIN_PRE_TRANSFORM && COMPUTE_MOTION_VECTORS // } Transforms; // + // float4 BaseColorFactor; // UserDefined CustomData; //}; @@ -2045,6 +2046,7 @@ Uint32 PBR_Renderer::GetPBRPrimitiveAttribsSize(PSO_FLAGS Flags, Uint32 CustomDa (UseSkinPreTransform ? sizeof(float4x4) : 0) + // Transforms.SkinPreTransform (UsePrevSkinPreTransform ? sizeof(float4x4) : 0) + // Transforms.PrevSkinPreTransform + sizeof(float4) + // BaseColorFactor CustomDataSize); } diff --git a/Shaders/PBR/private/RenderPBR.psh b/Shaders/PBR/private/RenderPBR.psh index 12ab17c2..35866589 100644 --- a/Shaders/PBR/private/RenderPBR.psh +++ b/Shaders/PBR/private/RenderPBR.psh @@ -379,6 +379,7 @@ PSOutput main(in VSOutput VSOut, in bool IsFrontFace : SV_IsFrontFace) { float4 BaseColor = GetBaseColor(VSOut, g_Material, g_Frame.Renderer.MipBias); + BaseColor *= PRIMITIVE.BaseColorFactor; #if USE_VERTEX_NORMALS float3 MeshNormal = VSOut.Normal; diff --git a/Shaders/PBR/private/RenderPBR_Structures.fxh b/Shaders/PBR/private/RenderPBR_Structures.fxh index 1d522b05..1830397b 100644 --- a/Shaders/PBR/private/RenderPBR_Structures.fxh +++ b/Shaders/PBR/private/RenderPBR_Structures.fxh @@ -31,6 +31,7 @@ struct PBRPrimitiveAttribs { GLTFNodeShaderTransforms Transforms; + float4 BaseColorFactor; float4 CustomData; }; #ifdef CHECK_STRUCT_ALIGNMENT