mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-10-02 10:53:44 +00:00
UgcRays::Scene answers the two ray queries the UGC server makes: the nearest hit for the hidden faces' paths (never the triangle a path leaves) and any hit for the ambient occlusion rays. Two backends: - builtin: the two hierarchies the queries had before, moved unchanged (each built the first time it is asked), so the files made are the same bytes - embree: Embree 4 on the job's thread (a device per worker thread, no threads of its own, so its time counts in the CPU budget), watertight, the skipped triangle filtered out UgcHsr::Options::rays and UgcRender::AoOptions::rays pick the backend; both default to builtin, and nothing sets them yet. Check: the UGC tests (builtin's files keep their hashes; UgcRays tests compare embree's hits, hidden faces and occlusion with builtin's). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
57 lines
2.5 KiB
CMake
57 lines
2.5 KiB
CMake
# The UGC server (docs/UgcServer.md), in folders by role:
|
|
# Bricks/ the client's brick data: primitives, Materials.xml, LU Toolbox's palette, the CDClient's module data
|
|
# Model/ player models built from LXFML, car and rocket module combinations, glitter
|
|
# Render/ the software rasterizer, ambient occlusion, hidden-face removal, rays, icon parameters and pose
|
|
# Formats/ the files written for the client and the dashboard (NIF, DDS, PNG, sd0)
|
|
# Processing/ the job queue and workers, the CPU budget, stored files
|
|
# UgcServer.cpp the server: settings, the master link, HTTP routes
|
|
|
|
# The pure part of the UGC server (brick data, meshes, rendering, file formats, storage), shared with the tests
|
|
set(DUGC_SOURCES
|
|
"Bricks/UgcBricks.cpp"
|
|
"Bricks/UgcPalette.cpp"
|
|
"Formats/UgcFormats.cpp"
|
|
"Model/UgcGlitter.cpp"
|
|
"Model/UgcModel.cpp"
|
|
"Model/UgcModular.cpp"
|
|
"Processing/UgcJobs.cpp"
|
|
"Processing/UgcStorage.cpp"
|
|
"Processing/UgcThrottle.cpp"
|
|
"Render/UgcHsr.cpp"
|
|
"Render/UgcIconParams.cpp"
|
|
"Render/UgcIconPose.cpp"
|
|
"Render/UgcRays.cpp"
|
|
"Render/UgcRender.cpp"
|
|
)
|
|
|
|
add_library(dUgc STATIC ${DUGC_SOURCES})
|
|
target_include_directories(dUgc PUBLIC "." "Bricks" "Formats" "Model" "Processing" "Render"
|
|
"${PROJECT_SOURCE_DIR}/thirdparty/MD5" "${PROJECT_SOURCE_DIR}/thirdparty/nlohmann")
|
|
target_link_libraries(dUgc PUBLIC dCommon glm::glm tinyxml2 MD5 PRIVATE embree)
|
|
|
|
add_executable(UgcServer "UgcServer.cpp" "Processing/UgcProcessor.cpp" "Bricks/UgcCdClient.cpp")
|
|
|
|
target_include_directories(UgcServer PRIVATE
|
|
"${PROJECT_SOURCE_DIR}/dCommon"
|
|
"${PROJECT_SOURCE_DIR}/dCommon/dClient"
|
|
"${PROJECT_SOURCE_DIR}/dCommon/dEnums"
|
|
"${PROJECT_SOURCE_DIR}/dDatabase"
|
|
"${PROJECT_SOURCE_DIR}/dDatabase/CDClientDatabase"
|
|
"${PROJECT_SOURCE_DIR}/dDatabase/CDClientDatabase/CDClientTables"
|
|
"${PROJECT_SOURCE_DIR}/dDatabase/GameDatabase"
|
|
"${PROJECT_SOURCE_DIR}/dDatabase/GameDatabase/ITables"
|
|
"${PROJECT_SOURCE_DIR}/dNet"
|
|
"${PROJECT_SOURCE_DIR}/dWeb"
|
|
"${PROJECT_SOURCE_DIR}/dServer"
|
|
"${PROJECT_SOURCE_DIR}/thirdparty"
|
|
"${PROJECT_SOURCE_DIR}/thirdparty/nlohmann"
|
|
)
|
|
|
|
target_compile_definitions(UgcServer PRIVATE PROJECT_VERSION="\"${PROJECT_VERSION}\"")
|
|
target_link_libraries(UgcServer ${COMMON_LIBRARIES} dWeb dServer dUgc)
|
|
|
|
# Rendering is far too slow unoptimized (minutes a model instead of seconds), so it is optimized in every build type
|
|
if(NOT MSVC)
|
|
set_source_files_properties("Render/UgcRender.cpp" "Render/UgcHsr.cpp" "Render/UgcRays.cpp" "Model/UgcModel.cpp" "Bricks/UgcPalette.cpp" "Model/UgcGlitter.cpp" PROPERTIES COMPILE_OPTIONS "-O2")
|
|
endif()
|