diff --git a/CMakeLists.txt b/CMakeLists.txt index 182b511..41b3f23 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,16 +4,17 @@ cmake_minimum_required(VERSION 3.13.0) set(CMAKE_CXX_STANDARD 14) set(BLENDER /home/slapin/blender-3.6.20-linux-x64/blender) set(CREATE_DIRECTORIES - ${CMAKE_SOURCE_DIR}/assets/blender/shapes/male - ${CMAKE_SOURCE_DIR}/assets/blender/shapes/female - ${CMAKE_SOURCE_DIR}/characters/shapes/male/chibi - ${CMAKE_SOURCE_DIR}/characters/shapes/female/chibi - ${CMAKE_SOURCE_DIR}/characters/male - ${CMAKE_SOURCE_DIR}/characters/female) -set(CREATE_SCENES - ${CMAKE_SOURCE_DIR}/characters/female/vroid-normal-female.scene - ${CMAKE_SOURCE_DIR}/characters/male/vroid-normal-male.scene - ) + ${CMAKE_BINARY_DIR}/assets/blender/shapes/male + ${CMAKE_BINARY_DIR}/assets/blender/shapes/female + ${CMAKE_BINARY_DIR}/assets/blender/scripts + ${CMAKE_BINARY_DIR}/characters/shapes/male/chibi + ${CMAKE_BINARY_DIR}/characters/shapes/female/chibi + ${CMAKE_BINARY_DIR}/characters/male + ${CMAKE_BINARY_DIR}/characters/female) +#set(CREATE_SCENES +# ${CMAKE_SOURCE_DIR}/characters/female/vroid-normal-female.scene +# ${CMAKE_SOURCE_DIR}/characters/male/vroid-normal-male.scene +# ) option(OGRE_DYNAMIC "Build against dynamic ogre" ON) @@ -78,16 +79,16 @@ add_executable(0_Bootstrap Bootstrap.cpp) # this also sets the includes and pulls third party dependencies target_link_libraries(0_Bootstrap OgreBites OgreBullet OgrePaging ${BULLET_DYNAMICS_LIBRARY} ${BULLET_COLLISION_LIBRARY} ${BULLET_MATH_LIBRARY} ${ASSIMP_LIBRARIES}) target_include_directories(0_Bootstrap PUBLIC OgreBites OgrePaging OgreBullet) -add_dependencies(0_Bootstrap stage_files) +add_dependencies(0_Bootstrap stage_files import_vrm) add_executable(Editor Editor.cpp ${TERRAIN_SRC} ${WATER_SRC} ${CHARACTERS_SRC}) target_link_libraries(Editor OgreBites OgreBullet OgrePaging OgreTerrain OgreMeshLodGenerator ${OgreProcedural_LIBRARIES} ${BULLET_DYNAMICS_LIBRARY} ${BULLET_COLLISION_LIBRARY} ${BULLET_MATH_LIBRARY}) target_include_directories(Editor PUBLIC OgreBites OgrePaging OgreBullet OgreTerrain OgreMeshLodGenerator ${OgreProcedural_INCLUDE_DIRS}) -add_dependencies(Editor stage_files import_buildings import_water_stuff import_vehicles) +add_dependencies(Editor stage_files import_buildings import_water_stuff import_vehicles import_vrm) add_executable(Game Game.cpp ${TERRAIN_SRC} ${WATER_SRC} ${CHARACTERS_SRC}) target_link_libraries(Game OgreBites OgreBullet OgrePaging OgreTerrain OgreMeshLodGenerator ${OgreProcedural_LIBRARIES} ${BULLET_DYNAMICS_LIBRARY} ${BULLET_COLLISION_LIBRARY} ${BULLET_MATH_LIBRARY}) target_include_directories(Game PUBLIC OgreBites OgrePaging OgreBullet OgreTerrain OgreMeshLodGenerator ${OgreProcedural_INCLUDE_DIRS}) -add_dependencies(Game stage_files import_buildings import_water_stuff import_vehicles) +add_dependencies(Game stage_files import_buildings import_water_stuff import_vehicles import_vrm) add_executable(Procedural Procedural.cpp ${TERRAIN_SRC}) target_link_libraries(Procedural OgreBites OgreBullet OgrePaging OgreTerrain OgreProcedural::OgreProcedural ${BULLET_DYNAMICS_LIBRARY} ${BULLET_COLLISION_LIBRARY} ${BULLET_MATH_LIBRARY}) @@ -243,32 +244,67 @@ foreach(MATERIAL_FILE ${MATERIAL_FILES}) list(APPEND MATERIALS_OUTPUT ${OUTPUT_FILE}) endforeach() +file(GLOB VRM_FILES RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/assets/vroid/*.vrm) +file(GLOB MIXAMO_FILES RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/assets/blender/mixamo/**/*.fbx) +file(GLOB EDITED_BLENDS RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/assets/blender/edited-*.blend) +set(VRM_SOURCE) +foreach(VRM_FILE ${VRM_FILES} ${MIXAMO_FILES} ${EDITED_BLENDS}) + set(OUTPUT_FILE "${CMAKE_BINARY_DIR}/${VRM_FILE}") + set(INPUT_FILE "${CMAKE_SOURCE_DIR}/${VRM_FILE}") + add_custom_command(OUTPUT "${OUTPUT_FILE}" + COMMAND ${CMAKE_COMMAND} -E copy "${INPUT_FILE}" "${OUTPUT_FILE}" + DEPENDS "${INPUT_FILE}" VERBATIM) + list(APPEND VRM_SOURCE "${OUTPUT_FILE}") +endforeach() + +set(VRM_IMPORTED_BLENDS + ${CMAKE_BINARY_DIR}/assets/blender/vrm-vroid-normal-female.blend + ${CMAKE_BINARY_DIR}/assets/blender/vrm-vroid-normal-male.blend + ${CMAKE_BINARY_DIR}/assets/blender/shapes/male/vrm-vroid-normal-male-chibi.blend +) + +add_custom_command(OUTPUT ${VRM_IMPORTED_BLENDS} + COMMAND ${CMAKE_COMMAND} -E make_directory ${CREATE_DIRECTORIES} + COMMAND ${BLENDER} -b -Y -P ${CMAKE_SOURCE_DIR}/assets/blender/scripts/import_vrm.py + COMMAND ${CMAKE_COMMAND} -E touch_nocreate ${VRM_IMPORTED_BLENDS} + DEPENDS ${CMAKE_SOURCE_DIR}/assets/blender/scripts/import_vrm.py + ${VRM_SOURCE} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + +set(CHARACTER_GLBS ${CMAKE_BINARY_DIR}/characters/male/normal-male.glb) add_custom_command( - OUTPUT ${CMAKE_SOURCE_DIR}/characters/female/vroid-normal-female.scene - ${CMAKE_SOURCE_DIR}/characters/male/vroid-normal-male.scene - ${CMAKE_SOURCE_DIR}/assets/blender/vrm-vroid-normal-female.blend - ${CMAKE_SOURCE_DIR}/assets/blender/vrm-vroid-normal-male.blend - ${CMAKE_SOURCE_DIR}/assets/blender/shapes/male/vrm-vroid-normal-male-chibi.blend - COMMAND mkdir -p ${CREATE_DIRECTORIES} - COMMAND ${BLENDER} -b -Y -P ${CMAKE_SOURCE_DIR}/assets/blender/scripts/import_vrm.py + OUTPUT ${CHARACTER_GLBS} + COMMAND ${CMAKE_COMMAND} -E make_directory ${CREATE_DIRECTORIES} COMMAND ${BLENDER} -b -Y -P ${CMAKE_SOURCE_DIR}/assets/blender/scripts/export_models.py -# COMMAND ${BLENDER} -b -Y -P ${CMAKE_SOURCE_DIR}/assets/blender/scripts/export_ogre_scene.py - COMMAND echo rm -Rf ${CMAKE_SOURCE_DIR}/characters/male/*.material ${CMAKE_SOURCE_DIR}/characters/female/*.material - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/characters - ${CMAKE_BINARY_DIR}/characters - DEPENDS ${CMAKE_SOURCE_DIR}/assets/blender/scripts/export_models.py ${CMAKE_SOURCE_DIR}/assets/blender/scripts/import_vrm.py - ${CMAKE_SOURCE_DIR}/assets/vroid/buch1.vrm - ${CMAKE_SOURCE_DIR}/assets/vroid/buch1-chibi.vrm - ${CMAKE_SOURCE_DIR}/assets/vroid/jane2-dress.vrm - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) + COMMAND ${CMAKE_COMMAND} -E touch ${CHARACTER_GLBS} + DEPENDS ${CMAKE_SOURCE_DIR}/assets/blender/scripts/export_models.py ${VRM_IMPORTED_BLENDS} ${EDITED_BLENDS} + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) +#add_custom_command( +# OUTPUT ${CMAKE_SOURCE_DIR}/characters/female/vroid-normal-female.scene +# ${CMAKE_SOURCE_DIR}/characters/male/vroid-normal-male.scene +# ${CMAKE_SOURCE_DIR}/assets/blender/vrm-vroid-normal-female.blend +# ${CMAKE_SOURCE_DIR}/assets/blender/vrm-vroid-normal-male.blend +# ${CMAKE_SOURCE_DIR}/assets/blender/shapes/male/vrm-vroid-normal-male-chibi.blend +# COMMAND mkdir -p ${CREATE_DIRECTORIES} +# COMMAND ${BLENDER} -b -Y -P ${CMAKE_SOURCE_DIR}/assets/blender/scripts/import_vrm.py +# COMMAND ${BLENDER} -b -Y -P ${CMAKE_SOURCE_DIR}/assets/blender/scripts/export_models.py +## COMMAND ${BLENDER} -b -Y -P ${CMAKE_SOURCE_DIR}/assets/blender/scripts/export_ogre_scene.py +# COMMAND echo rm -Rf ${CMAKE_SOURCE_DIR}/characters/male/*.material ${CMAKE_SOURCE_DIR}/characters/female/*.material +# COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/characters +# ${CMAKE_BINARY_DIR}/characters +# DEPENDS ${CMAKE_SOURCE_DIR}/assets/blender/scripts/export_models.py ${CMAKE_SOURCE_DIR}/assets/blender/scripts/import_vrm.py +# ${CMAKE_SOURCE_DIR}/assets/vroid/buch1.vrm +# ${CMAKE_SOURCE_DIR}/assets/vroid/buch1-chibi.vrm +# ${CMAKE_SOURCE_DIR}/assets/vroid/jane2-dress.vrm +# WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) add_custom_target(stage_files ALL DEPENDS ${CMAKE_BINARY_DIR}/resources.cfg ${MATERIALS_OUTPUT} ${CMAKE_BINARY_DIR}/resources/terrain/world_map.png ${CMAKE_BINARY_DIR}/resources/terrain/brushes.png) -add_custom_target(remove_scenes COMMAND rm -f ${CREATE_SCENES}) +add_custom_target(remove_scenes COMMAND rm -f ${VRM_SOURCE} ${VRM_IMPORTED_BLENDS} ${CHARACTER_GLBS}) -add_custom_target(import_vrm DEPENDS ${CREATE_SCENES}) +add_custom_target(import_vrm DEPENDS ${CHARACTER_GLBS}) install(TARGETS Editor DESTINATION bin) diff --git a/assets/blender/scripts/export_models.py b/assets/blender/scripts/export_models.py index 948e5d9..5b6f563 100644 --- a/assets/blender/scripts/export_models.py +++ b/assets/blender/scripts/export_models.py @@ -8,7 +8,7 @@ import shutil from mathutils import Vector, Matrix from math import radians, pi -sys.path.insert(0, os.getcwd() + "/assets/blender/scripts") +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from settings import ExportMappingFemale, ExportMappingMale, ExportMappingMaleBabyShape, ExportMappingMaleEdited basepath = os.getcwd() @@ -181,8 +181,9 @@ def extra_linear(angle, offset): for mapping in [ExportMappingFemale(), ExportMappingMale(), ExportMappingMaleBabyShape(), ExportMappingMaleEdited()]: if not os.path.exists(mapping.blend_path): + print("Skipping mapping: " + mapping.blend_path) continue -#for mapping in [ExportMappingFemale()]: + print("Processing mapping: from: " + mapping.blend_path + " to: " + mapping.gltf_path) print("Initializing...") bpy.ops.wm.read_homefile(use_empty=True) print("Preparing driver setup...") @@ -258,6 +259,7 @@ for mapping in [ExportMappingFemale(), ExportMappingMale(), ExportMappingMaleBab export_morph_tangent=True, export_lights=False, export_skins=True) + print("exported to: " + mapping.gltf_path) bpy.ops.wm.read_homefile(use_empty=True) time.sleep(2) diff --git a/assets/blender/scripts/import_vrm.py b/assets/blender/scripts/import_vrm.py index 4dc948a..dcdf93f 100644 --- a/assets/blender/scripts/import_vrm.py +++ b/assets/blender/scripts/import_vrm.py @@ -7,11 +7,12 @@ import glob import shutil from mathutils import Vector, Matrix from math import radians, pi + if bpy.app.version[0] == 3: - sys.path.insert(0, os.getcwd() + "/assets/blender/scripts/mixamo/3.6") + sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)) + "/mixamo/3.6") if bpy.app.version[0] == 4: - sys.path.insert(0, os.getcwd() + "/assets/blender/scripts/mixamo/4.3") -sys.path.insert(0, os.getcwd() + "/assets/blender/scripts") + sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)) + "/mixamo/4.3") +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from vrm import rename if bpy.app.version[0] == 3: from mixamo import mixamo_rig