#pragma once #include // Bella SDK includes - external libraries for 3D rendering #include "../bella_engine_sdk/src/bella_sdk/bella_engine.h" // For creating and manipulating 3D scenes in Bella #include "../oom/oom_bella_long.h" // This file is very large extern int s_oomBellaLogContext; // Declare the s_dlLogContext variable // Define the oom namespace namespace oom { namespace bella { // Function declaration dl::bella_sdk::Node defaultScene2025(dl::bella_sdk::Scene& belScene); //dl::bella_sdk::Node defaultSceneVoxel(dl::bella_sdk::Scene& belScene); std::tuple< dl::bella_sdk::Node, dl::bella_sdk::Node, dl::bella_sdk::Node, dl::bella_sdk::Node> defaultSceneVoxel(dl::bella_sdk::Scene& belScene); // @param belScene - the scene to create the essentials in // @return - the world node dl::bella_sdk::Node defaultScene2025(dl::bella_sdk::Scene& belScene) { // Create the basic scene elements in Bella // Each line creates a different type of node in the scene auto belBeautyPass = belScene.createNode("beautyPass","oomerBeautyPass","oomerBeautyPass"); auto belWorld = belScene.world(); // Get scene world root { dl::bella_sdk::Scene::EventScope es(belScene); // Configure camera auto belCamForm = belScene.createNode("xform","oomCameraXform","oomCameraXform"); auto belCam = belScene.createNode("camera","oomCamera","oomCamera"); auto belSensor = belScene.createNode("sensor","oomSensor","oomSensor"); auto belLens = belScene.createNode("thinLens","oomThinLens","oomThinLens"); belCam["resolution"] = dl::Vec2 {800, 800}; // Set resolution to 1080p belCam["lens"] = belLens; // Connect camera to lens belCam["sensor"] = belSensor; // Connect camera to sensor belCamForm.parentTo(belWorld); // Parent camera transform to world belCam.parentTo(belCamForm); // Parent camera to camera transform // Position the camera with a transformation matrix belCamForm["steps"][0]["xform"] = dl::Mat4 {0.525768608156, -0.850627633385, 0, 0, -0.234464751651, -0.144921468924, -0.961261695938, 0, 0.817675761479, 0.505401223947, -0.275637355817, 0, -88.12259018466, -54.468125200218, 50.706001690932, 1}; // Configure environment (image-based lighting) auto belImageDome = belScene.createNode("imageDome","oomImageDome","oomImageDome"); auto belColorDome = belScene.createNode("colorDome","oomColorDome","oomColorDome"); belImageDome["ext"] = ".jpg"; belImageDome["dir"] = "./res"; belImageDome["multiplier"] = 6.0f; belImageDome["file"] = "DayEnvironmentHDRI019_1K-TONEMAPPED"; belImageDome["overrides"]["background"] = belColorDome; belColorDome["zenith"] = dl::Rgba{1.0f, 1.0f, 1.0f, 1.0f}; belColorDome["horizon"] = dl::Rgba{.85f, 0.76f, 0.294f, 1.0f}; belColorDome["altitude"] = 14.0f; // Configure a metallic ground plane auto belGroundPlane = belScene.createNode("groundPlane","oomGroundPlane","oomGroundPlane"); auto belGroundMat = belScene.createNode("quickMaterial","oomGroundMat","oomGroundMat"); belGroundPlane["material"] = belGroundMat; belGroundMat["type"] = "metal"; belGroundMat["roughness"] = 22.0f; belGroundMat["color"] = dl::Rgba{0.138431623578, 0.5, 0.3, 1.0}; // Set up scene settings auto belSettings = belScene.settings(); // Get scene settings auto belBeautyPass = belScene.createNode("beautyPass","oomBeautyPass","oomBeautyPass"); belSettings["beautyPass"] = belBeautyPass; belSettings["camera"] = belCam; belSettings["environment"] = belColorDome; belSettings["iprScale"] = 100.0f; belSettings["threads"] = dl::bella_sdk::Input(0); // Auto-detect thread count belSettings["groundPlane"] = belGroundPlane; belSettings["iprNavigation"] = "maya"; // Use Maya-like navigation in viewer } return belWorld; } // @param belScene - the scene to create the essentials in // @return - the world node std::tuple< dl::bella_sdk::Node, dl::bella_sdk::Node, dl::bella_sdk::Node, dl::bella_sdk::Node> defaultSceneVoxel(dl::bella_sdk::Scene& belScene) { // Create basic scene elements in Bella for voxel rendering auto belWorld = belScene.world(); // Get scene world root auto belVoxel = belScene.createNode("box","oomVoxel","oomVoxel"); auto belLiqVoxel = belScene.createNode("box","oomLiqVoxel","oomLiqVoxel"); auto belMeshVoxel = addMeshCube(belScene, "oomMeshVoxel"); { dl::bella_sdk::Scene::EventScope es(belScene); // Configure camera auto belCamForm = belScene.createNode("xform","oomCameraXform","oomCameraXform"); auto belCam = belScene.createNode("camera","oomCamera","oomCamera"); auto belSensor = belScene.createNode("sensor","oomSensor","oomSensor"); auto belLens = belScene.createNode("thinLens","oomThinLens","oomThinLens"); belCam["resolution"] = dl::Vec2 {1920, 1080}; // Set resolution to 1080p belCam["lens"] = belLens; // Connect camera to lens belCam["sensor"] = belSensor; // Connect camera to sensor belCamForm.parentTo(belWorld); // Parent camera transform to world belCam.parentTo(belCamForm); // Parent camera to camera transform // Position the camera with a transformation matrix belCamForm["steps"][0]["xform"] = dl::Mat4 {0.525768608156, -0.850627633385, 0, 0, -0.234464751651, -0.144921468924, -0.961261695938, 0, 0.817675761479, 0.505401223947, -0.275637355817, 0, -88.12259018466, -54.468125200218, 50.706001690932, 1}; // Configure environment (image-based lighting) auto belImageDome = belScene.createNode("imageDome","oomImageDome","oomImageDome"); auto belColorDome = belScene.createNode("colorDome","oomColorDome","oomColorDome"); belImageDome["ext"] = ".jpg"; belImageDome["dir"] = "./res"; belImageDome["multiplier"] = 6.0f; belImageDome["file"] = "DayEnvironmentHDRI019_1K-TONEMAPPED"; belImageDome["overrides"]["background"] = belColorDome; belColorDome["zenith"] = dl::Rgba{1.0f, 1.0f, 1.0f, 1.0f}; belColorDome["horizon"] = dl::Rgba{.85f, 0.76f, 0.294f, 1.0f}; belColorDome["altitude"] = 14.0f; // Configure ground plane auto belGroundPlane = belScene.createNode("groundPlane","oomGroundPlane","oomGroundPlane"); auto belGroundMat = belScene.createNode("quickMaterial","oomGroundMat","oomGroundMat"); belGroundPlane["material"] = belGroundMat; belGroundMat["type"] = "metal"; belGroundMat["roughness"] = 22.0f; belGroundMat["color"] = dl::Rgba{0.138431623578, 0.5, 0.3, 1.0}; // Set up scene settings auto belSettings = belScene.settings(); // Get scene settings auto belBeautyPass = belScene.createNode("beautyPass","oomBeautyPass","oomBeautyPass"); belSettings["beautyPass"] = belBeautyPass; belSettings["camera"] = belCam; belSettings["environment"] = belColorDome; belSettings["iprScale"] = 100.0f; belSettings["threads"] = dl::bella_sdk::Input(0); // Auto-detect thread count belSettings["groundPlane"] = belGroundPlane; belSettings["iprNavigation"]= "maya"; // Use Maya-like navigation in viewer // Create voxel nodes //auto belVoxelForm = belScene.createNode("xform","oomVoxelXform","oomVoxelXform"); //auto belLiqVoxelForm = belScene.createNode("xform","oomLiqVoxelXform","oomLiqVoxelXform"); //auto belVoxelMat = belScene.createNode("orenNayar","oomVoxelMat","oomVoxelMat"); auto belBevel = belScene.createNode("bevel", "oomBevel", "oomBevel"); belBevel["radius"] = 90.0f; belBevel["samples"] =dl::UInt(6); belVoxel["radius"] = 0.33f; belVoxel["sizeX"] = 0.99f; belVoxel["sizeY"] = 0.99f; belVoxel["sizeZ"] = 0.99f; // Less gap to make liquid look better, allows more light to pass through belLiqVoxel["sizeX"] = 0.99945f; belLiqVoxel["sizeY"] = 0.99945f; belLiqVoxel["sizeZ"] = 0.99945f; //belVoxel.parentTo(belVoxelForm); //belVoxelForm["steps"][0]["xform"] = dl::Mat4 {0.999,0,0,0,0,0.999,0,0,0,0,0.999,0,0,0,0,1}; //belVoxelMat["reflectance"] = dl::Rgba{0.0, 0.0, 0.0, 1.0}; //belVoxelForm["material"] = belVoxelMat; } return std::make_tuple(belWorld, belMeshVoxel, belLiqVoxel, belVoxel); } } }