Adding transparent geometry to ray tracing

This commit is contained in:
Dynamitos
2024-07-17 10:40:40 +02:00
parent 75e9bc899c
commit 12001152d4
6 changed files with 42 additions and 14 deletions
@@ -75,6 +75,24 @@ void RayTracingPass::render() {
}
}
}
for (const auto& transparentData : vertexData->getTransparentData()) {
PMaterial mat = transparentData.matInst->getBaseMaterial();
Gfx::ShaderPermutation permutation = graphics->getShaderCompiler()->getTemplate("RayTracing");
permutation.setMaterial(mat->getName());
permutation.setVertexData(vertexData->getTypeName());
const Gfx::ShaderCollection* collection = graphics->getShaderCompiler()->findShaders(Gfx::PermutationId(permutation));
assert(collection != nullptr);
Gfx::RayTracingHitGroup callableGroup = {
.closestHitShader = collection->callableShader,
};
callableGroup.parameters.resize(sizeof(VertexData::DrawCallOffsets));
std::memcpy(callableGroup.parameters.data(), &transparentData.offsets, sizeof(VertexData::DrawCallOffsets));
callableGroups.add(callableGroup);
instanceData.add(transparentData.instanceData);
accelerationStructures.add(transparentData.rayTracingScene);
}
}
pipeline = graphics->createRayTracingPipeline(Gfx::RayTracingPipelineCreateInfo{
.pipelineLayout = pipelineLayout, .rayGenGroup = {.shader = rayGen}, .hitGroups = callableGroups, .missGroups = {{.shader = miss}},