- 动画:HumanoidRig 三层架构(standard 标准槽 / dialects 方言映射 / mapper 配对), 指/趾统一走世界增量两遍式烘焙;AnimationAttach 拆为纯算法 + facade;修正 HumanoidBasis 行走基朝向与跨骨架去重、根运动通道 - 物理:CharacterController 角色互碰撞 / shapeOffset / 接触事件;PhysicsWorld 接触合成与 字符冲量判定 - 渲染与材质:Model 多材质按材质拆子 mesh 与贴图路径解析、DDS 直传、GLB 内嵌纹理落盘、 不透明通道 alpha 固定 1.0、glTF FlipUVs 对齐;SceneSerializer 支持 meshIndex 与材质覆盖 - 脚本:FractureLib 抽为共享库(HostView 桥接)、WallFracture 参数直绑、新增 ThirdPersonCamera / Follower / WASDMove 玩法;移除 GameDirector / PlayerController / Target - 编辑器:新增 GamepadPanel、LogPanel(LogRing),改进 Inspector / 材质 / 统计 / 视口面板 - 依赖:vendored ufbx(FBX 5.x/6.x/7.x 全版本解析,替代 assimp 对 FBX 6.1 的拒读)
96 lines
4.7 KiB
CMake
96 lines
4.7 KiB
CMake
cmake_minimum_required(VERSION 3.20)
|
||
project(HelloVulkan C CXX)
|
||
|
||
set(CMAKE_CXX_STANDARD 20)
|
||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||
|
||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||
set(CMAKE_BINARY_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
|
||
|
||
# 第三方库
|
||
add_subdirectory(Lib/glfw)
|
||
add_subdirectory(Lib/glm)
|
||
add_subdirectory(Lib/spdlog)
|
||
add_subdirectory(Lib/stb)
|
||
# meshoptimizer(submodule,LOD 网格简化;demo/gltfpack 默认关闭,install 不需要)
|
||
set(MESHOPT_INSTALL OFF CACHE BOOL "" FORCE)
|
||
add_subdirectory(Lib/meshoptimizer)
|
||
|
||
# ---- Jolt Physics(submodule v5.6,刚体/软体/角色/载具模拟)----
|
||
if(MSVC)
|
||
set(USE_STATIC_MSVC_RUNTIME_LIBRARY OFF CACHE BOOL "" FORCE)
|
||
endif ()
|
||
# 顶层 CMake 在 Build/ 子目录;只编 jolt 静态库,示例/测试目标默认全关
|
||
set(JPH_BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
|
||
set(INTERPROCEDURAL_OPTIMIZATION OFF CACHE BOOL "" FORCE) # LTO 拖慢开发迭代
|
||
set(OVERRIDE_CXX_FLAGS OFF CACHE BOOL "" FORCE) # 不动全局优化参数
|
||
set(FLOATING_POINT_EXCEPTIONS_ENABLED OFF CACHE BOOL "" FORCE) # NaN 进物理不炸,仅报警
|
||
# JPH_USE_CPU_COMPUTE 默认 ON,需要 DXC 把 Shaders/*.hlsl 编成 .spv(本机无
|
||
# 工具链);我们不使用 Jolt 的 GPU compute 路径,连同后端 shader 一并关掉
|
||
set(JPH_USE_CPU_COMPUTE OFF CACHE BOOL "" FORCE)
|
||
set(JPH_USE_DX12 OFF CACHE BOOL "" FORCE)
|
||
set(JPH_USE_VK OFF CACHE BOOL "" FORCE)
|
||
set(JPH_USE_MTL OFF CACHE BOOL "" FORCE)
|
||
# Jolt GENERATE_DEBUG_SYMBOLS 默认 ON,Release 也带 -g → Jolt 的 DWARF
|
||
# Debug/RelWithDebInfo 保留符号便于调试
|
||
if(CMAKE_BUILD_TYPE STREQUAL "Release")
|
||
set(GENERATE_DEBUG_SYMBOLS OFF CACHE BOOL "" FORCE)
|
||
endif()
|
||
add_subdirectory(Lib/JoltPhysics/Build)
|
||
|
||
# ---- Assimp(vendored submodule,模型导入;只编译需要的 importer) ----
|
||
set(BUILD_SHARED_LIBS OFF) # 静态链接
|
||
set(ASSIMP_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
||
set(ASSIMP_BUILD_ASSIMP_TOOLS OFF CACHE BOOL "" FORCE) # 不编 assimp_cmd 等工具
|
||
set(ASSIMP_INSTALL OFF CACHE BOOL "" FORCE)
|
||
set(ASSIMP_WARNINGS_AS_ERRORS OFF CACHE BOOL "" FORCE) # assimp 源码警告多
|
||
set(ASSIMP_INJECT_DEBUG_POSTFIX OFF CACHE BOOL "" FORCE)
|
||
set(ASSIMP_NO_EXPORT ON CACHE BOOL "" FORCE) # 彻底移除导出代码
|
||
set(ASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT OFF CACHE BOOL "" FORCE) # 全关,按需开
|
||
set(ASSIMP_BUILD_DRACO OFF CACHE BOOL "" FORCE)
|
||
# 用 assimp 自带 contrib zlib(而非系统 zlib)。原因:系统 zlib 会使 assimp 走
|
||
# pkg-config 找系统 minizip,而 Arch 的 minizip 头文件在 /usr/include/minizip/
|
||
# 子目录,与 assimp 的 #include <unzip.h> 不符 → ZipArchiveIOSystem 编译失败。
|
||
# 自带 zlib 后 ASSIMP_BUILD_MINIZIP=1,跳过 pkg-config,直接用 contrib/unzip。
|
||
set(ASSIMP_BUILD_ZLIB ON CACHE BOOL "" FORCE)
|
||
# 清除首次 configure 残留的 UNZIP_FOUND 缓存(INTERNAL=1 会持续生效,
|
||
# 使 assimp 误判系统 minizip 可用而不把 contrib/unzip 加进 include 路径)。
|
||
set(UNZIP_FOUND OFF CACHE INTERNAL "" FORCE)
|
||
# 需要的导入格式(按需增减,每关一个省编译时间):
|
||
set(ASSIMP_BUILD_OBJ_IMPORTER ON CACHE BOOL "" FORCE)
|
||
set(ASSIMP_BUILD_GLTF_IMPORTER ON CACHE BOOL "" FORCE) # glTF1+2 同一选项
|
||
set(ASSIMP_BUILD_FBX_IMPORTER ON CACHE BOOL "" FORCE)
|
||
set(ASSIMP_BUILD_STL_IMPORTER ON CACHE BOOL "" FORCE)
|
||
set(ASSIMP_BUILD_PLY_IMPORTER ON CACHE BOOL "" FORCE)
|
||
add_subdirectory(Lib/assimp)
|
||
|
||
# ---- yaml-cpp(submodule,场景序列化;只编静态库本体)----
|
||
set(YAML_CPP_BUILD_CONTRIB OFF CACHE BOOL "" FORCE)
|
||
set(YAML_CPP_BUILD_TOOLS OFF CACHE BOOL "" FORCE)
|
||
set(YAML_CPP_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
||
set(YAML_CPP_INSTALL OFF CACHE BOOL "" FORCE)
|
||
add_subdirectory(Lib/yaml-cpp)
|
||
|
||
|
||
|
||
# Vulkan
|
||
find_package(Vulkan REQUIRED)
|
||
|
||
# ---- editor/game 编译期分离(UE WITH_EDITOR / Unity UNITY_EDITOR 模式)----
|
||
# ON(默认):HELLO_EDITOR=1,材质球预览 tile 池 + App/editor 编辑器 UI 全量编译
|
||
# OFF:game 构建——预览 pass/atlas/请求池、previewEnvSets、App/editor 源码
|
||
# 整体不进编译产物(宏裁剪,非运行时判断)
|
||
option(HELLOVULKAN_EDITOR "Build editor modules (material preview, inspector UI)" ON)
|
||
|
||
|
||
if(MINGW)
|
||
set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -Wl,-Bdynamic -lucrt")
|
||
endif()
|
||
|
||
# Engine 和 App
|
||
add_subdirectory(Engine)
|
||
add_subdirectory(App)
|
||
|
||
file(GLOB ASSETS "assets")
|
||
file(COPY ${ASSETS} DESTINATION ${CMAKE_BINARY_DIR})
|