Skip to content

Commit 1aed83a

Browse files
committed
new demo version 1.8.5!
1 parent 0c1fd9a commit 1aed83a

File tree

165 files changed

+31909
-5393
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

165 files changed

+31909
-5393
lines changed

CMakeLists.txt

Lines changed: 123 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2222
SOFTWARE.
2323
]]
2424

25-
cmake_minimum_required(VERSION 3.5...4.0.2)
25+
cmake_minimum_required(VERSION 3.5...4.2.0)
2626

2727
function(set_output_directories DIR)
2828
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${DIR} PARENT_SCOPE)
@@ -39,37 +39,54 @@ include(CheckLinkerFlag)
3939
set(BUILD_DEBUG OFF CACHE BOOL "Turn on to build a debug release")
4040
option(DISTRIBUTE_SOURCE "Include source code in addon" ON)
4141
option(WITH_MIXBOX "Compile with Mixbox pigment mixing feature" OFF)
42-
set(LIBRARY_SUFFIX "" CACHE STRING "Optional suffix to add to the end of the library name")
4342

4443
# Configure Project
4544
project(bl_flip_fluids)
4645
set(CMAKE_BUILD_TYPE Release)
46+
4747
if(APPLE)
4848
set(MACOSX_DEPLOYMENT_TARGET 10.10) # OS X Yosemite
4949
endif()
5050

5151
# Set Version Info
52-
set(FLUIDENGINE_VERSION_TYPE_IS_STABLE_BUILD TRUE)
53-
set(FLUIDENGINE_VERSION_MAJOR 1)
54-
set(FLUIDENGINE_VERSION_MINOR 8)
55-
set(FLUIDENGINE_VERSION_REVISION 4)
56-
set(FLUIDENGINE_VERSION_DATE_YYYY "2025")
57-
set(FLUIDENGINE_VERSION_DATE_MM "07")
58-
set(FLUIDENGINE_VERSION_DATE_DD "14")
59-
60-
if(FLUIDENGINE_VERSION_TYPE_IS_STABLE_BUILD)
61-
set(FLUIDENGINE_VERSION_TYPE_LABEL "Demo")
62-
set(FLUIDENGINE_VERSION_TYPE_IS_STABLE_BUILD_PYTHON "True")
52+
set(FFENGINE_VERSION_TYPE_IS_STABLE_BUILD TRUE)
53+
set(FFENGINE_VERSION_MAJOR 1)
54+
set(FFENGINE_VERSION_MINOR 8)
55+
set(FFENGINE_VERSION_REVISION 5)
56+
set(FFENGINE_VERSION_DATE_YYYY "2025")
57+
set(FFENGINE_VERSION_DATE_MM "11")
58+
set(FFENGINE_VERSION_DATE_DD "18")
59+
set(FFENGINE_VERSION_SUPPORT_LICENSE_TYPE "Demo")
60+
set(FFENGINE_VERSION_RELEASE_TYPE "Release")
61+
62+
# Format Version Info
63+
if(FFENGINE_VERSION_TYPE_IS_STABLE_BUILD)
64+
if(FFENGINE_VERSION_IS_FULL_RELEASE)
65+
else()
66+
endif()
67+
set(FFENGINE_VERSION_TYPE_LABEL ${FFENGINE_VERSION_RELEASE_TYPE})
68+
set(FFENGINE_VERSION_TYPE_IS_STABLE_BUILD_PYTHON "True")
6369
else()
64-
set(FLUIDENGINE_VERSION_TYPE_LABEL "Experimental")
65-
set(FLUIDENGINE_VERSION_TYPE_IS_STABLE_BUILD_PYTHON "False")
70+
set(FFENGINE_VERSION_TYPE_LABEL "Experimental")
71+
set(FFENGINE_VERSION_TYPE_IS_STABLE_BUILD_PYTHON "False")
6672
endif()
6773

68-
set(FLUIDENGINE_VERSION_DATE "${FLUIDENGINE_VERSION_DATE_YYYY}-${FLUIDENGINE_VERSION_DATE_MM}-${FLUIDENGINE_VERSION_DATE_DD}")
69-
set(FLUIDENGINE_VERSION_LABEL "${FLUIDENGINE_VERSION_MAJOR}.${FLUIDENGINE_VERSION_MINOR}.${FLUIDENGINE_VERSION_REVISION} ${FLUIDENGINE_VERSION_TYPE_LABEL} ${FLUIDENGINE_VERSION_DATE}")
74+
set(FFENGINE_VERSION_DATE "${FFENGINE_VERSION_DATE_YYYY}-${FFENGINE_VERSION_DATE_MM}-${FFENGINE_VERSION_DATE_DD}")
75+
set(FFENGINE_VERSION_LABEL "\
76+
${FFENGINE_VERSION_MAJOR}.${FFENGINE_VERSION_MINOR}.${FFENGINE_VERSION_REVISION} \
77+
${FFENGINE_VERSION_SUPPORT_LICENSE_TYPE} \
78+
${FFENGINE_VERSION_TYPE_LABEL} \
79+
${FFENGINE_VERSION_DATE}\
80+
")
81+
82+
string(RANDOM LENGTH 1 ALPHABET "123456789" RANDOM_DIGITS_1)
83+
string(RANDOM LENGTH 2 ALPHABET "0123456789" RANDOM_DIGITS_2)
84+
string(RANDOM LENGTH 1 ALPHABET "ABCEGJKLMNPRTVXY" RANDOM_LETTERS_1)
85+
string(RANDOM LENGTH 1 ALPHABET "ABCEGJKLMNPRTVWXYZ" RANDOM_LETTERS_2)
86+
set(FFENGINE_VERSION_SUPPORT_LICENSE_ID "${RANDOM_DIGITS_1}${RANDOM_DIGITS_2}${RANDOM_LETTERS_1}${RANDOM_LETTERS_2}")
7087

7188
# Begin Build
72-
message(STATUS "FLIP Fluids version ${FLUIDENGINE_VERSION_LABEL}")
89+
message(STATUS "FLIP Fluids Version ${FFENGINE_VERSION_LABEL}")
7390
if(BUILD_DEBUG)
7491
message(STATUS "Building in debug mode")
7592
else()
@@ -78,11 +95,11 @@ endif()
7895

7996
# Configure Mixbox
8097
if(WITH_MIXBOX)
81-
set(FLUIDENGINE_IS_MIXBOX_SUPPORTED "True")
98+
set(FFENGINE_IS_MIXBOX_SUPPORTED "True")
8299
add_definitions(-DWITH_MIXBOX=1)
83100
set(MIXBOX_SOURCE_CPP "src/engine/mixbox/mixbox.cpp")
84101
else()
85-
set(FLUIDENGINE_IS_MIXBOX_SUPPORTED "False")
102+
set(FFENGINE_IS_MIXBOX_SUPPORTED "False")
86103
add_definitions(-DWITH_MIXBOX=0)
87104
set(MIXBOX_SOURCE_CPP "src/engine/mixbox/mixbox_stub.cpp")
88105
endif()
@@ -100,6 +117,9 @@ elseif(MINGW)
100117
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--enable-stdcall-fixup")
101118
elseif(APPLE)
102119
set(CMAKE_MACOSX_RPATH ON)
120+
set(CMAKE_SKIP_BUILD_RPATH FALSE)
121+
set(CMAKE_INSTALL_RPATH "@loader_path")
122+
set(CMAKE_BUILD_RPATH "@loader_path")
103123
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -std=c++17 -Wall -Wno-return-type-c-linkage")
104124

105125
# Older compiler versions may not support or require -lstdc++fs linker flag
@@ -108,6 +128,12 @@ elseif(APPLE)
108128
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lstdc++fs")
109129
endif()
110130
elseif(UNIX AND NOT APPLE)
131+
set(CMAKE_SKIP_BUILD_RPATH FALSE)
132+
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
133+
set(CMAKE_INSTALL_RPATH "$ORIGIN")
134+
set(CMAKE_BUILD_RPATH "$ORIGIN")
135+
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
136+
111137
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -lstdc++fs -D_GLIBCXX_USE_NANOSLEEP -fopenmp -O3 -Wall -fPIC -pthread")
112138
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include ${PROJECT_SOURCE_DIR}/src/engine/glibc_version_header/force_link_glibc_2.5.h")
113139
else()
@@ -143,67 +169,109 @@ configure_file(
143169
"${PROJECT_SOURCE_DIR}/src/addon/utils/installation_utils.py"
144170
)
145171

172+
# Sources
173+
set(SOURCES_FLUID_ENGINE_LIBRARY
174+
src/engine/aabb.cpp
175+
src/engine/collision.cpp
176+
src/engine/diffuseparticlesimulation.cpp
177+
src/engine/fluidmaterialgrid.cpp
178+
src/engine/fluidsimulation.cpp
179+
src/engine/forcefield.cpp
180+
src/engine/forcefieldcurve.cpp
181+
src/engine/forcefieldgrid.cpp
182+
src/engine/forcefieldpoint.cpp
183+
src/engine/forcefieldsurface.cpp
184+
src/engine/forcefieldutils.cpp
185+
src/engine/forcefieldvolume.cpp
186+
src/engine/gridindexkeymap.cpp
187+
src/engine/gridindexvector.cpp
188+
src/engine/gridutils.cpp
189+
src/engine/influencegrid.cpp
190+
src/engine/interpolation.cpp
191+
src/engine/levelsetsolver.cpp
192+
src/engine/levelsetutils.cpp
193+
src/engine/logfile.cpp
194+
src/engine/macvelocityfield.cpp
195+
src/engine/meshfluidsource.cpp
196+
src/engine/meshlevelset.cpp
197+
src/engine/meshobject.cpp
198+
src/engine/meshutils.cpp
199+
src/engine/noisegenerationutils.cpp
200+
src/engine/particlelevelset.cpp
201+
src/engine/particlemaskgrid.cpp
202+
src/engine/particlemesher.cpp
203+
src/engine/particlesheeter.cpp
204+
src/engine/particlesystem.cpp
205+
src/engine/polygonizer3d.cpp
206+
src/engine/pressuresolver.cpp
207+
src/engine/scalarfield.cpp
208+
src/engine/spatialpointgrid.cpp
209+
src/engine/stopwatch.cpp
210+
src/engine/threadutils.cpp
211+
src/engine/trianglemesh.cpp
212+
src/engine/turbulencefield.cpp
213+
src/engine/velocityadvector.cpp
214+
src/engine/versionutils.cpp
215+
src/engine/viscositysolver.cpp
216+
src/engine/vmath.cpp
217+
src/engine/c_bindings/cbindings.cpp
218+
src/engine/c_bindings/fluidsimulation_c.cpp
219+
src/engine/c_bindings/forcefield_c.cpp
220+
src/engine/c_bindings/forcefieldcurve_c.cpp
221+
src/engine/c_bindings/forcefieldgrid_c.cpp
222+
src/engine/c_bindings/forcefieldpoint_c.cpp
223+
src/engine/c_bindings/forcefieldsurface_c.cpp
224+
src/engine/c_bindings/forcefieldvolume_c.cpp
225+
src/engine/c_bindings/meshfluidsource_c.cpp
226+
src/engine/c_bindings/meshobject_c.cpp
227+
src/engine/c_bindings/mixbox_c.cpp
228+
${MIXBOX_SOURCE_CPP}
229+
)
230+
231+
set(SOURCES_ALEMBIC_IO
232+
src/alembic_io/src/alembic_io.cpp
233+
src/alembic_io/src/c_bindings/alembic_io_c.cpp
234+
)
235+
236+
set(SOURCES_ALEMBIC_IO_LIBRARY
237+
${SOURCES_FLUID_ENGINE_LIBRARY}
238+
${SOURCES_ALEMBIC_IO}
239+
)
240+
146241
# Configure Output Directories
147242
set(BLENDER_ADDON_DIR "${CMAKE_BINARY_DIR}/bl_flip_fluids/flip_fluids_addon")
148243
set_output_directories("${BLENDER_ADDON_DIR}/ffengine/lib")
149244

150-
# Alembic Exporter
151-
set(CMAKE_SKIP_BUILD_RPATH FALSE)
152-
set(CMAKE_INSTALL_RPATH "@executable_path")
153-
245+
# Add Alembic Dependency
154246
if(ALEMBIC_PACKAGE_ROOT)
155247
message(STATUS "Using ALEMBIC_PACKAGE_ROOT=" ${ALEMBIC_PACKAGE_ROOT})
156248
find_package(Alembic REQUIRED PATHS ${ALEMBIC_PACKAGE_ROOT} NO_DEFAULT_PATH)
157249
else()
158250
find_package(Alembic REQUIRED)
159251
endif()
160252

161-
file(GLOB ALEMBIC_IO_SOURCES "src/alembic_io/src/*.cpp")
162-
163-
add_library(alembic_io_objects OBJECT ${ALEMBIC_IO_SOURCES})
164-
set_target_properties(alembic_io_objects PROPERTIES INSTALL_RPATH "@executable_path")
165-
set_target_properties(alembic_io_objects PROPERTIES BUILD_RPATH "@executable_path")
166-
target_link_libraries(alembic_io_objects PUBLIC Alembic::Alembic)
167-
target_compile_features(alembic_io_objects PRIVATE cxx_std_17)
168-
169-
if(MSVC OR MSYS OR MINGW)
170-
set(ALEMBIC_EXECUTABLE_NAME "ff_alembic_exporter_windows")
171-
elseif(APPLE)
172-
set(ALEMBIC_EXECUTABLE_NAME "ff_alembic_exporter_macos")
173-
elseif(UNIX AND NOT APPLE)
174-
set(ALEMBIC_EXECUTABLE_NAME "ff_alembic_exporter_linux")
175-
endif()
176-
177-
add_executable(${ALEMBIC_EXECUTABLE_NAME} $<TARGET_OBJECTS:alembic_io_objects>)
178-
set_target_properties(${ALEMBIC_EXECUTABLE_NAME} PROPERTIES INSTALL_RPATH "@executable_path")
179-
set_target_properties(${ALEMBIC_EXECUTABLE_NAME} PROPERTIES BUILD_RPATH "@executable_path")
180-
target_link_libraries(${ALEMBIC_EXECUTABLE_NAME} PUBLIC Alembic::Alembic)
181-
182253
# Alembic IO Engine Objects
183254
file(GLOB ALEMBIC_IO_LIBRARY_SOURCES
184255
"src/engine/*.cpp"
185256
"src/engine/c_bindings/*.cpp"
186257
"src/alembic_io/src/alembic_io.cpp"
187258
"src/alembic_io/src/c_bindings/*.cpp"
188-
${MIXBOX_SOURCE_CPP})
259+
${MIXBOX_SOURCE_CPP}
260+
)
189261

190262
add_library(alembic_objects OBJECT ${ALEMBIC_IO_LIBRARY_SOURCES})
191-
target_link_libraries(alembic_objects PUBLIC Alembic::Alembic)
263+
target_link_libraries(alembic_objects PRIVATE Alembic::Alembic)
192264
target_compile_features(alembic_objects PRIVATE cxx_std_17)
193265

194266
# Alembic IO Engine Library
195-
add_library("ffalembicengine${LIBRARY_SUFFIX}" SHARED $<TARGET_OBJECTS:alembic_objects>)
196-
target_link_libraries("ffalembicengine${LIBRARY_SUFFIX}" PUBLIC Alembic::Alembic)
267+
add_library(ffalembicengine SHARED $<TARGET_OBJECTS:alembic_objects>)
268+
target_link_libraries(ffalembicengine PRIVATE Alembic::Alembic)
197269

198270
# FLIP Fluids Engine Objects
199-
file(GLOB SOURCES
200-
"src/engine/*.cpp"
201-
"src/engine/c_bindings/*.cpp"
202-
${MIXBOX_SOURCE_CPP})
203-
add_library(objects OBJECT ${SOURCES})
271+
add_library(fluid_engine_objects OBJECT ${SOURCES_FLUID_ENGINE_LIBRARY})
204272

205273
# FLIP Fluids Engine Library
206-
add_library("ffengine${LIBRARY_SUFFIX}" SHARED $<TARGET_OBJECTS:objects>)
274+
add_library(ffengine SHARED $<TARGET_OBJECTS:fluid_engine_objects>)
207275

208276
# Copy Libraries To Addon
209277
file(COPY "${CMAKE_SOURCE_DIR}/src/addon/" DESTINATION "${BLENDER_ADDON_DIR}")

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Want to try the FLIP Fluids addon before buying the [full marketplace product](h
1111

1212
### Getting Started
1313

14-
1. **Download** the latest FLIP Fluids Demo: [FLIP_Fluids_addon_1.8.4_demo_(2025-07-14.zip)](https://github.com/rlguy/Blender-FLIP-Fluids/releases/download/v1.8.3/FLIP_Fluids_addon_1.8.3_demo_.2025-07-14.zip)
14+
1. **Download** the latest FLIP Fluids Demo: [FLIP_Fluids_addon_1.8.5_demo_(2025-11-18.zip)](https://github.com/rlguy/Blender-FLIP-Fluids/releases/download/v1.8.5/FLIP_Fluids_addon_1.8.5_demo_.2025-11-18.zip)
1515
2. **Install** the FLIP Fluids Demo: [Installation Instructions](https://github.com/rlguy/Blender-FLIP-Fluids/wiki/Addon-Installation-and-Uninstallation)
1616
3. **Get Started** with creating your first FLIP Fluids addon simulation:
1717
- [Video Learning Series](https://github.com/rlguy/Blender-FLIP-Fluids/wiki/Video-Learning-Series)

build.py

Lines changed: 18 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import os, shutil, subprocess, platform, argparse
2424

2525

26-
def cmake_make(cmakelists_dir, cmake_path, make_path, alembic_package_root=None, build_debug=False, make_build=True, darwin_arch="", library_suffix=""):
26+
def cmake_make(cmakelists_dir, cmake_path, make_path, alembic_package_root=None, build_debug=False, make_build=True, darwin_arch=""):
2727
if build_debug:
2828
build_debug_flag = "-DBUILD_DEBUG=ON"
2929
else:
@@ -39,9 +39,6 @@ def cmake_make(cmakelists_dir, cmake_path, make_path, alembic_package_root=None,
3939
elif system == "Linux":
4040
cmake_command = [cmake_path, cmakelists_dir, build_debug_flag]
4141

42-
if library_suffix:
43-
cmake_command.append("-DLIBRARY_SUFFIX=" + library_suffix)
44-
4542
if alembic_package_root is not None:
4643
cmake_command.append("-DALEMBIC_PACKAGE_ROOT=" + alembic_package_root)
4744

@@ -82,12 +79,12 @@ def main():
8279
parser = argparse.ArgumentParser(description="FLIP Fluids Addon build and compile script")
8380
parser.add_argument("-build-directory", help="Path to destination build directory")
8481
parser.add_argument("-darwin-arch", help="Target architecture to set for CMAKE_OSX_ARCHITECTURES")
85-
parser.add_argument("-library-suffix", help="Specify suffix to add to the generated library name")
8682
parser.add_argument("-cmake-path", help="Specify path to CMake binary (www.cmake.org)")
8783
parser.add_argument("-make-path", help="Specify path to GNU Make binary (www.gnu.org/software/make)")
8884
parser.add_argument("-alembic-path", help="Specify path to Alembic root directory")
8985
parser.add_argument("-package-imath-library", help="Specify path to Imath library and package with add-on")
9086
parser.add_argument("-package-alembic-library", help="Specify path to Alembic library and package with add-on")
87+
parser.add_argument("-package-dependencies", nargs='*', help="Specify list of dependency filepaths to package with add-on")
9188
parser.add_argument('--clean', action="store_true", help="Clear generated files in the build directory before building")
9289
parser.add_argument('-no-compile', action="store_true", help="Do not compile libraries")
9390
parser.add_argument('-no-zip', action="store_true", help="After building, do not package the add-on folder into a zip for Blender install")
@@ -102,10 +99,6 @@ def main():
10299
if args.darwin_arch:
103100
darwin_arch = args.darwin_arch
104101

105-
library_suffix = ""
106-
if args.library_suffix:
107-
library_suffix = args.library_suffix
108-
109102
cmake_path = "cmake"
110103
if args.cmake_path:
111104
cmake_path = process_path(args.cmake_path)
@@ -134,21 +127,18 @@ def main():
134127
if args.alembic_path:
135128
alembic_package_root = process_path(args.alembic_path)
136129

137-
imath_library_path = None
138-
if args.package_imath_library:
139-
libpath = process_path(args.package_imath_library)
140-
if os.path.isfile(libpath):
141-
imath_library_path = libpath
142-
else:
143-
print("\n***ERROR: Imath library filepath not found:\n\t -package-imath-library <" + libpath + ">***\n")
144-
145-
alembic_library_path = None
146-
if args.package_alembic_library:
147-
libpath = process_path(args.package_alembic_library)
148-
if os.path.isfile(libpath):
149-
alembic_library_path = libpath
150-
else:
151-
print("\n***ERROR: Alembic library filepath not found:\n\t -package-alembic-library <" + libpath + ">***\n")
130+
dependency_filepaths = []
131+
if args.package_dependencies:
132+
dependency_filepaths = args.package_dependencies
133+
134+
dependency_error_encountered = False
135+
for filepath in dependency_filepaths:
136+
libpath = process_path(filepath)
137+
if not os.path.isfile(libpath):
138+
dependency_error_encountered = True
139+
print("***ERROR: Dependency filepath not found <" + libpath + ">")
140+
if dependency_error_encountered:
141+
return
152142

153143
try:
154144
original_cwd = os.getcwd()
@@ -166,8 +156,7 @@ def main():
166156
alembic_package_root=alembic_package_root,
167157
build_debug=False,
168158
make_build=not args.no_compile,
169-
darwin_arch=darwin_arch,
170-
library_suffix=library_suffix)
159+
darwin_arch=darwin_arch)
171160

172161
lib_dir = os.path.join(build_dir, "bl_flip_fluids", "flip_fluids_addon", "ffengine", "lib")
173162
if os.path.isdir(lib_dir):
@@ -187,13 +176,9 @@ def main():
187176
print("\t<" + addon_dir + ">")
188177

189178
addon_libs_dir = os.path.join(addon_dir, "ffengine", "lib")
190-
if imath_library_path is not None:
191-
shutil.copy(imath_library_path, addon_libs_dir)
192-
print("Packaged <" + imath_library_path + "> to <" + addon_libs_dir + ">")
193-
194-
if alembic_library_path is not None:
195-
shutil.copy(alembic_library_path, addon_libs_dir)
196-
print("Packaged <" + alembic_library_path + "> to <" + addon_libs_dir + ">")
179+
for filepath in dependency_filepaths:
180+
shutil.copy(filepath, addon_libs_dir)
181+
print("Packaged <" + filepath + "> to <" + addon_libs_dir + ">")
197182

198183
if not args.no_zip:
199184
# To create a .zip whose name is ".../flip_fluids_addon.zip".

0 commit comments

Comments
 (0)