|
|
|
|
@ -734,10 +734,12 @@ namespace AZ
|
|
|
|
|
RPI::ShaderInputContract::StreamChannelInfo tangentStreamChannelInfo;
|
|
|
|
|
tangentStreamChannelInfo.m_semantic = RHI::ShaderSemantic(AZ::Name(TangentSemantic));
|
|
|
|
|
tangentStreamChannelInfo.m_componentCount = RHI::GetFormatComponentCount(TangentStreamFormat);
|
|
|
|
|
tangentStreamChannelInfo.m_isOptional = true;
|
|
|
|
|
|
|
|
|
|
RPI::ShaderInputContract::StreamChannelInfo bitangentStreamChannelInfo;
|
|
|
|
|
bitangentStreamChannelInfo.m_semantic = RHI::ShaderSemantic(AZ::Name(BitangentSemantic));
|
|
|
|
|
bitangentStreamChannelInfo.m_componentCount = RHI::GetFormatComponentCount(BitangentStreamFormat);
|
|
|
|
|
bitangentStreamChannelInfo.m_isOptional = true;
|
|
|
|
|
|
|
|
|
|
RPI::ShaderInputContract::StreamChannelInfo uvStreamChannelInfo;
|
|
|
|
|
uvStreamChannelInfo.m_semantic = RHI::ShaderSemantic(AZ::Name(UVSemantic));
|
|
|
|
|
@ -776,7 +778,7 @@ namespace AZ
|
|
|
|
|
|
|
|
|
|
// retrieve vertex/index buffers
|
|
|
|
|
RPI::ModelLod::StreamBufferViewList streamBufferViews;
|
|
|
|
|
bool result = modelLod->GetStreamsForMesh(
|
|
|
|
|
[[maybe_unused]] bool result = modelLod->GetStreamsForMesh(
|
|
|
|
|
inputStreamLayout,
|
|
|
|
|
streamBufferViews,
|
|
|
|
|
nullptr,
|
|
|
|
|
@ -784,12 +786,7 @@ namespace AZ
|
|
|
|
|
meshIndex,
|
|
|
|
|
materialAssignment.m_matModUvOverrides,
|
|
|
|
|
material->GetAsset()->GetMaterialTypeAsset()->GetUvNameMap());
|
|
|
|
|
|
|
|
|
|
if (!result)
|
|
|
|
|
{
|
|
|
|
|
AZ_Warning("MeshFeatureProcessor", false, "Mesh is missing required vertex streams for RayTracing. Skipping.");
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
AZ_Assert(result, "Failed to retrieve mesh stream buffer views");
|
|
|
|
|
|
|
|
|
|
// note that the element count is the size of the entire buffer, even though this mesh may only
|
|
|
|
|
// occupy a portion of the vertex buffer. This is necessary since we are accessing it using
|
|
|
|
|
@ -828,13 +825,21 @@ namespace AZ
|
|
|
|
|
subMesh.m_normalVertexBufferView = streamBufferViews[1];
|
|
|
|
|
subMesh.m_normalShaderBufferView = const_cast<RHI::Buffer*>(streamBufferViews[1].GetBuffer())->GetBufferView(normalBufferDescriptor);
|
|
|
|
|
|
|
|
|
|
subMesh.m_tangentFormat = TangentStreamFormat;
|
|
|
|
|
subMesh.m_tangentVertexBufferView = streamBufferViews[2];
|
|
|
|
|
subMesh.m_tangentShaderBufferView = const_cast<RHI::Buffer*>(streamBufferViews[2].GetBuffer())->GetBufferView(tangentBufferDescriptor);
|
|
|
|
|
if (tangentBufferByteCount > 0)
|
|
|
|
|
{
|
|
|
|
|
subMesh.m_bufferFlags |= RayTracingSubMeshBufferFlags::Tangent;
|
|
|
|
|
subMesh.m_tangentFormat = TangentStreamFormat;
|
|
|
|
|
subMesh.m_tangentVertexBufferView = streamBufferViews[2];
|
|
|
|
|
subMesh.m_tangentShaderBufferView = const_cast<RHI::Buffer*>(streamBufferViews[2].GetBuffer())->GetBufferView(tangentBufferDescriptor);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
subMesh.m_bitangentFormat = BitangentStreamFormat;
|
|
|
|
|
subMesh.m_bitangentVertexBufferView = streamBufferViews[3];
|
|
|
|
|
subMesh.m_bitangentShaderBufferView = const_cast<RHI::Buffer*>(streamBufferViews[3].GetBuffer())->GetBufferView(bitangentBufferDescriptor);
|
|
|
|
|
if (bitangentBufferByteCount > 0)
|
|
|
|
|
{
|
|
|
|
|
subMesh.m_bufferFlags |= RayTracingSubMeshBufferFlags::Bitangent;
|
|
|
|
|
subMesh.m_bitangentFormat = BitangentStreamFormat;
|
|
|
|
|
subMesh.m_bitangentVertexBufferView = streamBufferViews[3];
|
|
|
|
|
subMesh.m_bitangentShaderBufferView = const_cast<RHI::Buffer*>(streamBufferViews[3].GetBuffer())->GetBufferView(bitangentBufferDescriptor);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (uvBufferByteCount > 0)
|
|
|
|
|
{
|
|
|
|
|
|