Cameraf SynthRenderer::randomCamera(const Scene &s) { const float randomLookVariance = 0.2f; const float targetBBoxExpansion = 1.5f; const OBB3f objectOBB = s.objects[s.mainObjectIndex].worldBBox; bbox3f targetBBox; targetBBox.include(bbox3f(objectOBB)); const auto r = [&](float a, float b) { return (float)ml::util::randomUniform(a, b); }; const auto rA = [&]() { return (float)r(0.0f, 1.0f); }; const auto rB = [&]() { return (float)r(-1.0f, 1.0f); }; const vec3f lookAt = objectOBB.getCenter() + vec3f(rB(), rB(), rB()) * randomLookVariance; vec3f eye; eye.x = r(targetBBox.getMin().x - targetBBoxExpansion, targetBBox.getMax().x + targetBBoxExpansion); eye.y = r(targetBBox.getMin().y - targetBBoxExpansion, targetBBox.getMax().y + targetBBoxExpansion); eye.z = r(0.5f, 2.0f); return Cameraf(eye, lookAt - eye, vec3f::eZ, constants::fieldOfView, 1.0f, 0.01f, 100.0f); }
TriMeshf box(const OBBf &obb, const vec4f& color) { TriMeshf result = box(bbox3f(vec3f::origin, vec3f(1.0f, 1.0f, 1.0f)), color); result.transform(obb.getOBBToWorld()); return result; }
void Synthesizer::updateBaseColumns() { baseColumns.reset(sceneTemplate->geometry.columns); for (UINT objectIndex = 1; objectIndex < scene.objects.size(); objectIndex++) { const ObjectInstance &o = scene.objects[objectIndex]; const auto &accelerator = assets->loadModel(*graphics, o.object.modelId).getAcceleratorOriginal(); bool isSupport = database->categories.getCategory(o.categoryName()).isObjectSupport; baseColumns.includeObjectRayTracing(accelerator, bbox3f(o.worldBBox), o.modelToWorld, o.modelToWorld.getInverse(), isSupport); } columnsTemp = baseColumns; }