2026-02-16
This commit is contained in:
@@ -635,6 +635,15 @@ def __load_save_state_marker_particle_data(fluidsim, save_state_directory, autos
|
||||
viscosity_data_file = os.path.join(d, autosave_info['marker_particle_viscosity_filedata'])
|
||||
load_viscosity_data = True
|
||||
|
||||
is_density_attribute_enabled = data.domain_data.world.enable_density_attribute.data
|
||||
load_density_data = False
|
||||
if is_density_attribute_enabled:
|
||||
density_path = 'marker_particle_density_filedata'
|
||||
is_density_data_available = (density_path in autosave_info) and autosave_info[density_path]
|
||||
if is_density_data_available:
|
||||
density_data_file = os.path.join(d, autosave_info['marker_particle_density_filedata'])
|
||||
load_density_data = True
|
||||
|
||||
is_id_attribute_enabled = data.domain_data.particles.enable_fluid_particle_output.data
|
||||
load_id_data = False
|
||||
if is_id_attribute_enabled:
|
||||
@@ -703,6 +712,10 @@ def __load_save_state_marker_particle_data(fluidsim, save_state_directory, autos
|
||||
viscosity_data = __read_save_state_file_data(viscosity_data_file, start_float_byte, end_float_byte)
|
||||
fluidsim.load_marker_particle_viscosity_data(particle_count, viscosity_data)
|
||||
|
||||
if load_density_data:
|
||||
density_data = __read_save_state_file_data(density_data_file, start_float_byte, end_float_byte)
|
||||
fluidsim.load_marker_particle_density_data(particle_count, density_data)
|
||||
|
||||
if load_id_data:
|
||||
id_data = __read_save_state_file_data(id_data_file, start_short_byte, end_short_byte)
|
||||
fluidsim.load_marker_particle_id_data(particle_count, id_data)
|
||||
@@ -1178,6 +1191,9 @@ def __initialize_fluid_simulation_settings(fluidsim, data):
|
||||
reused_uid_attribute = __get_parameter_data(particles.enable_fluid_particle_uid_attribute_reuse, frameno)
|
||||
fluidsim.enable_fluid_particle_uid_attribute_reuse = reused_uid_attribute
|
||||
|
||||
enable_density_attribute = __get_parameter_data(world.enable_density_attribute, frameno)
|
||||
fluidsim.enable_fluid_particle_density_attribute = enable_density_attribute
|
||||
|
||||
# Surface Settings
|
||||
|
||||
surface = dprops.surface
|
||||
@@ -1199,10 +1215,8 @@ def __initialize_fluid_simulation_settings(fluidsim, data):
|
||||
particle_scale *= surface.native_particle_scale
|
||||
fluidsim.marker_particle_scale = particle_scale
|
||||
|
||||
fluidsim.surface_smoothing_value = \
|
||||
__get_parameter_data(surface.smoothing_value, frameno)
|
||||
fluidsim.surface_smoothing_iterations = \
|
||||
__get_parameter_data(surface.smoothing_iterations, frameno)
|
||||
fluidsim.surface_smoothing_value = __get_parameter_data(surface.smoothing_value, frameno)
|
||||
fluidsim.surface_smoothing_iterations = __get_parameter_data(surface.smoothing_iterations, frameno)
|
||||
|
||||
enable_meshing_offset = __get_parameter_data(surface.enable_meshing_offset, frameno)
|
||||
fluidsim.enable_obstacle_meshing_offset = enable_meshing_offset
|
||||
@@ -1217,47 +1231,30 @@ def __initialize_fluid_simulation_settings(fluidsim, data):
|
||||
domain_sides = __get_parameter_data(surface.remove_mesh_near_domain_sides, frameno)
|
||||
fluidsim.remove_surface_near_domain_sides = domain_sides
|
||||
|
||||
fluidsim.enable_inverted_contact_normals = \
|
||||
__get_parameter_data(surface.invert_contact_normals, frameno)
|
||||
fluidsim.enable_surface_motion_blur = \
|
||||
__get_parameter_data(surface.generate_motion_blur_data, frameno)
|
||||
fluidsim.enable_inverted_contact_normals = __get_parameter_data(surface.invert_contact_normals, frameno)
|
||||
fluidsim.enable_surface_motion_blur = __get_parameter_data(surface.generate_motion_blur_data, frameno)
|
||||
|
||||
fluidsim.enable_surface_velocity_attribute = \
|
||||
__get_parameter_data(surface.enable_velocity_vector_attribute, frameno)
|
||||
fluidsim.enable_surface_velocity_attribute = __get_parameter_data(surface.enable_velocity_vector_attribute, frameno)
|
||||
|
||||
# Option should always be enabled
|
||||
# fluidsim.enable_surface_velocity_attribute_against_obstacles = \
|
||||
# __get_parameter_data(surface.enable_velocity_vector_attribute_against_obstacles, frameno)
|
||||
fluidsim.enable_surface_velocity_attribute_against_obstacles = True
|
||||
|
||||
fluidsim.enable_surface_speed_attribute = \
|
||||
__get_parameter_data(surface.enable_speed_attribute, frameno)
|
||||
fluidsim.enable_surface_vorticity_attribute = \
|
||||
__get_parameter_data(surface.enable_vorticity_vector_attribute, frameno)
|
||||
fluidsim.enable_surface_age_attribute = \
|
||||
__get_parameter_data(surface.enable_age_attribute, frameno)
|
||||
fluidsim.surface_age_attribute_radius = \
|
||||
__get_parameter_data(surface.age_attribute_radius, frameno)
|
||||
fluidsim.enable_surface_lifetime_attribute = \
|
||||
__get_parameter_data(surface.enable_lifetime_attribute, frameno)
|
||||
fluidsim.surface_lifetime_attribute_radius = \
|
||||
__get_parameter_data(surface.lifetime_attribute_radius, frameno)
|
||||
fluidsim.surface_lifetime_attribute_death_time = \
|
||||
__get_parameter_data(surface.lifetime_attribute_death_time, frameno)
|
||||
fluidsim.enable_surface_whitewater_proximity_attribute = \
|
||||
__get_parameter_data(surface.enable_whitewater_proximity_attribute, frameno)
|
||||
fluidsim.surface_whitewater_proximity_attribute_radius = \
|
||||
__get_parameter_data(surface.whitewater_proximity_attribute_radius, frameno)
|
||||
fluidsim.enable_surface_color_attribute = \
|
||||
__get_parameter_data(surface.enable_color_attribute, frameno)
|
||||
fluidsim.surface_color_attribute_radius = \
|
||||
__get_parameter_data(surface.color_attribute_radius, frameno)
|
||||
fluidsim.enable_surface_color_attribute_mixing = \
|
||||
__get_parameter_data(surface.enable_color_attribute_mixing, frameno)
|
||||
fluidsim.surface_color_attribute_mixing_rate = \
|
||||
__get_parameter_data(surface.color_attribute_mixing_rate, frameno)
|
||||
fluidsim.surface_color_attribute_mixing_radius = \
|
||||
__get_parameter_data(surface.color_attribute_mixing_radius, frameno)
|
||||
fluidsim.enable_surface_speed_attribute = __get_parameter_data(surface.enable_speed_attribute, frameno)
|
||||
fluidsim.enable_surface_vorticity_attribute = __get_parameter_data(surface.enable_vorticity_vector_attribute, frameno)
|
||||
fluidsim.enable_surface_age_attribute = __get_parameter_data(surface.enable_age_attribute, frameno)
|
||||
fluidsim.surface_age_attribute_radius = __get_parameter_data(surface.age_attribute_radius, frameno)
|
||||
fluidsim.enable_surface_lifetime_attribute = __get_parameter_data(surface.enable_lifetime_attribute, frameno)
|
||||
fluidsim.surface_lifetime_attribute_radius = __get_parameter_data(surface.lifetime_attribute_radius, frameno)
|
||||
fluidsim.surface_lifetime_attribute_death_time = __get_parameter_data(surface.lifetime_attribute_death_time, frameno)
|
||||
fluidsim.enable_surface_whitewater_proximity_attribute = __get_parameter_data(surface.enable_whitewater_proximity_attribute, frameno)
|
||||
fluidsim.surface_whitewater_proximity_attribute_radius = __get_parameter_data(surface.whitewater_proximity_attribute_radius, frameno)
|
||||
fluidsim.enable_surface_color_attribute = __get_parameter_data(surface.enable_color_attribute, frameno)
|
||||
fluidsim.surface_color_attribute_radius = __get_parameter_data(surface.color_attribute_radius, frameno)
|
||||
fluidsim.enable_surface_color_attribute_mixing = __get_parameter_data(surface.enable_color_attribute_mixing, frameno)
|
||||
fluidsim.surface_color_attribute_mixing_rate = __get_parameter_data(surface.color_attribute_mixing_rate, frameno)
|
||||
fluidsim.surface_color_attribute_mixing_radius = __get_parameter_data(surface.color_attribute_mixing_radius, frameno)
|
||||
|
||||
if fluidsim.enable_surface_color_attribute_mixing:
|
||||
mixing_mode = __get_parameter_data(surface.color_attribute_mixing_mode, frameno)
|
||||
@@ -1271,8 +1268,9 @@ def __initialize_fluid_simulation_settings(fluidsim, data):
|
||||
|
||||
is_viscosity_enabled = __get_parameter_data(world.enable_viscosity, frameno)
|
||||
if is_viscosity_enabled:
|
||||
fluidsim.enable_surface_viscosity_attribute = \
|
||||
__get_parameter_data(surface.enable_viscosity_attribute, frameno)
|
||||
fluidsim.enable_surface_viscosity_attribute = __get_parameter_data(surface.enable_viscosity_attribute, frameno)
|
||||
|
||||
fluidsim.enable_surface_density_attribute = __get_parameter_data(world.enable_density_attribute, frameno)
|
||||
|
||||
__set_meshing_volume_object(fluidsim, data, frameno)
|
||||
|
||||
@@ -1495,6 +1493,7 @@ def __add_fluid_objects(fluidsim, data, bakedata, frameid=0):
|
||||
fluid_object.priority = __get_parameter_data(obj.priority, frameid)
|
||||
fluid_object.source_id = __get_parameter_data(obj.source_id, frameid)
|
||||
fluid_object.viscosity = __get_parameter_data(obj.viscosity, frameid)
|
||||
fluid_object.density = __get_parameter_data(obj.density, frameid)
|
||||
fluid_object.lifetime = __get_parameter_data(obj.lifetime, frameid)
|
||||
fluid_object.lifetime_variance = __get_parameter_data(obj.lifetime_variance, frameid)
|
||||
fluid_object.set_source_color(__get_parameter_data(obj.color, frameid))
|
||||
@@ -1693,6 +1692,7 @@ def __update_animatable_inflow_properties(data, mesh_geometry_data, frameid):
|
||||
|
||||
inflow.source_id = __get_parameter_data(data.source_id, frameid)
|
||||
inflow.viscosity = __get_parameter_data(data.viscosity, frameid)
|
||||
inflow.density = __get_parameter_data(data.density, frameid)
|
||||
inflow.lifetime = __get_parameter_data(data.lifetime, frameid)
|
||||
inflow.lifetime_variance = __get_parameter_data(data.lifetime_variance, frameid)
|
||||
inflow.set_source_color(__get_parameter_data(data.color, frameid))
|
||||
@@ -2392,6 +2392,13 @@ def __write_surface_data(cache_directory, fluidsim, frameno):
|
||||
with open(viscosity_filepath, 'wb') as f:
|
||||
f.write(filedata)
|
||||
|
||||
if fluidsim.enable_surface_density_attribute:
|
||||
density_filename = "density" + fstring + ".data"
|
||||
density_filepath = os.path.join(cache_directory, "bakefiles", density_filename)
|
||||
filedata = fluidsim.get_surface_density_attribute_data()
|
||||
with open(density_filepath, 'wb') as f:
|
||||
f.write(filedata)
|
||||
|
||||
preview_filename = "preview" + fstring + ".bobj"
|
||||
preview_filepath = os.path.join(cache_directory, "bakefiles", preview_filename)
|
||||
filedata = fluidsim.get_surface_preview_data()
|
||||
@@ -2592,6 +2599,22 @@ def __write_fluid_particle_data(cache_directory, fluidsim, frameno):
|
||||
with open(particle_viscosity_filepath, 'wb') as f:
|
||||
f.write(filedata)
|
||||
|
||||
if fluidsim.enable_fluid_particle_density_attribute:
|
||||
particle_density_filename = "fluidparticlesdensity" + fstring + ".ffp3"
|
||||
particle_density_filepath = os.path.join(cache_directory, "bakefiles", particle_density_filename)
|
||||
filedata = fluidsim.get_fluid_particle_density_attribute_data()
|
||||
with open(particle_density_filepath, 'wb') as f:
|
||||
f.write(filedata)
|
||||
|
||||
# flip_density_average attribute needs some more work
|
||||
"""
|
||||
particle_density_average_filename = "fluidparticlesdensityaverage" + fstring + ".ffp3"
|
||||
particle_density_average_filepath = os.path.join(cache_directory, "bakefiles", particle_density_average_filename)
|
||||
filedata = fluidsim.get_fluid_particle_density_average_attribute_data()
|
||||
with open(particle_density_average_filepath, 'wb') as f:
|
||||
f.write(filedata)
|
||||
"""
|
||||
|
||||
if fluidsim.enable_fluid_particle_whitewater_proximity_attribute:
|
||||
whitewater_proximity_filename = "fluidparticleswhitewaterproximity" + fstring + ".ffp3"
|
||||
whitewater_proximity_filepath = os.path.join(cache_directory, "bakefiles", whitewater_proximity_filename)
|
||||
@@ -2710,6 +2733,7 @@ def __get_frame_stats_dict(cstats):
|
||||
stats["surfacecolor"] = __get_mesh_stats_dict(cstats.surfacecolor)
|
||||
stats["surfacesourceid"] = __get_mesh_stats_dict(cstats.surfacesourceid)
|
||||
stats["surfaceviscosity"] = __get_mesh_stats_dict(cstats.surfaceviscosity)
|
||||
stats["surfacedensity"] = __get_mesh_stats_dict(cstats.surfacedensity)
|
||||
stats["foam"] = __get_mesh_stats_dict(cstats.foam)
|
||||
stats["bubble"] = __get_mesh_stats_dict(cstats.bubble)
|
||||
stats["spray"] = __get_mesh_stats_dict(cstats.spray)
|
||||
@@ -2740,6 +2764,11 @@ def __get_frame_stats_dict(cstats):
|
||||
stats["fluidparticlesage"] = __get_mesh_stats_dict(cstats.fluidparticlesage)
|
||||
stats["fluidparticleslifetime"] = __get_mesh_stats_dict(cstats.fluidparticleslifetime)
|
||||
stats["fluidparticlesviscosity"] = __get_mesh_stats_dict(cstats.fluidparticlesviscosity)
|
||||
stats["fluidparticlesdensity"] = __get_mesh_stats_dict(cstats.fluidparticlesdensity)
|
||||
|
||||
# flip_density_average attribute needs some more work
|
||||
#stats["fluidparticlesdensityaverage"] = __get_mesh_stats_dict(cstats.fluidparticlesdensityaverage)
|
||||
|
||||
stats["fluidparticleswhitewaterproximity"] = __get_mesh_stats_dict(cstats.fluidparticleswhitewaterproximity)
|
||||
stats["fluidparticlessourceid"] = __get_mesh_stats_dict(cstats.fluidparticlessourceid)
|
||||
stats["particles"] = __get_mesh_stats_dict(cstats.particles)
|
||||
@@ -2779,6 +2808,7 @@ def __write_autosave_data(domain_data, cache_directory, fluidsim, frameno):
|
||||
source_id_data_path = os.path.join(autosave_dir, "marker_particle_source_id.data")
|
||||
uid_data_path = os.path.join(autosave_dir, "marker_particle_uid.data")
|
||||
viscosity_data_path = os.path.join(autosave_dir, "marker_particle_viscosity.data")
|
||||
density_data_path = os.path.join(autosave_dir, "marker_particle_density.data")
|
||||
id_data_path = os.path.join(autosave_dir, "marker_particle_id.data")
|
||||
|
||||
diffuse_position_data_path = os.path.join(autosave_dir, "diffuse_particle_position.data")
|
||||
@@ -2817,6 +2847,9 @@ def __write_autosave_data(domain_data, cache_directory, fluidsim, frameno):
|
||||
autosave_viscosity_filepaths = [
|
||||
viscosity_data_path
|
||||
]
|
||||
autosave_density_filepaths = [
|
||||
density_data_path
|
||||
]
|
||||
autosave_id_filepaths = [
|
||||
id_data_path
|
||||
]
|
||||
@@ -2875,6 +2908,10 @@ def __write_autosave_data(domain_data, cache_directory, fluidsim, frameno):
|
||||
data = fluidsim.get_marker_particle_viscosity_data_range(start_idx, end_idx)
|
||||
__write_save_state_file_data(viscosity_data_path + temp_extension, data, is_appending_data=is_appending)
|
||||
|
||||
if fluidsim.enable_surface_density_attribute or fluidsim.enable_fluid_particle_density_attribute:
|
||||
data = fluidsim.get_marker_particle_density_data_range(start_idx, end_idx)
|
||||
__write_save_state_file_data(density_data_path + temp_extension, data, is_appending_data=is_appending)
|
||||
|
||||
if fluidsim.enable_fluid_particle_output:
|
||||
data = fluidsim.get_marker_particle_id_data_range(start_idx, end_idx)
|
||||
__write_save_state_file_data(id_data_path + temp_extension, data, is_appending_data=is_appending)
|
||||
@@ -2929,6 +2966,7 @@ def __write_autosave_data(domain_data, cache_directory, fluidsim, frameno):
|
||||
autosave_info['marker_particle_source_id_filedata'] = ""
|
||||
autosave_info['marker_particle_uid_filedata'] = ""
|
||||
autosave_info['marker_particle_viscosity_filedata'] = ""
|
||||
autosave_info['marker_particle_density_filedata'] = ""
|
||||
autosave_info['marker_particle_id_filedata'] = ""
|
||||
|
||||
autosave_info['diffuse_particle_position_filedata'] = ""
|
||||
@@ -2960,6 +2998,9 @@ def __write_autosave_data(domain_data, cache_directory, fluidsim, frameno):
|
||||
if fluidsim.enable_surface_viscosity_attribute:
|
||||
autosave_info['marker_particle_viscosity_filedata'] = "marker_particle_viscosity.data"
|
||||
|
||||
if fluidsim.enable_surface_density_attribute or fluidsim.enable_fluid_particle_density_attribute:
|
||||
autosave_info['marker_particle_density_filedata'] = "marker_particle_density.data"
|
||||
|
||||
if fluidsim.enable_fluid_particle_output:
|
||||
autosave_info['marker_particle_id_filedata'] = "marker_particle_id.data"
|
||||
|
||||
@@ -2990,6 +3031,7 @@ def __write_autosave_data(domain_data, cache_directory, fluidsim, frameno):
|
||||
autosave_source_id_filepaths +
|
||||
autosave_uid_filepaths +
|
||||
autosave_viscosity_filepaths +
|
||||
autosave_density_filepaths +
|
||||
autosave_id_filepaths +
|
||||
autosave_diffuse_filepaths
|
||||
)
|
||||
@@ -3026,6 +3068,9 @@ def __write_autosave_data(domain_data, cache_directory, fluidsim, frameno):
|
||||
if fluidsim.enable_surface_viscosity_attribute:
|
||||
for filepath in autosave_viscosity_filepaths:
|
||||
os.rename(filepath + temp_extension, filepath)
|
||||
if fluidsim.enable_surface_density_attribute or fluidsim.enable_fluid_particle_density_attribute:
|
||||
for filepath in autosave_density_filepaths:
|
||||
os.rename(filepath + temp_extension, filepath)
|
||||
if fluidsim.enable_fluid_particle_output:
|
||||
for filepath in autosave_id_filepaths:
|
||||
os.rename(filepath + temp_extension, filepath)
|
||||
@@ -3062,6 +3107,24 @@ def __write_finished_file(cache_directory, frameno):
|
||||
f.write(filestring)
|
||||
|
||||
|
||||
def __write_metadata_file(domain_data, cache_directory, frameno):
|
||||
fstring = __frame_number_to_string(frameno)
|
||||
metadata_filename = "metadata" + fstring + ".json"
|
||||
metadata_filepath = os.path.join(cache_directory, "bakefiles", metadata_filename)
|
||||
|
||||
simdata = domain_data.simulation
|
||||
frame_id = __get_frame_id() - 1
|
||||
|
||||
data_dict = {}
|
||||
data_dict['time_scale'] = __get_parameter_data(simdata.time_scale, frame_id)
|
||||
data_dict['world_scale'] = __get_parameter_data(domain_data.world.world_scale_relative, frame_id)
|
||||
|
||||
json_string = json.dumps(data_dict)
|
||||
|
||||
with open(metadata_filepath, 'w') as f:
|
||||
f.write(json_string)
|
||||
|
||||
|
||||
def __write_simulation_output(domain_data, fluidsim, frameno, cache_directory):
|
||||
__write_bounds_data(cache_directory, fluidsim, frameno)
|
||||
|
||||
@@ -3086,6 +3149,7 @@ def __write_simulation_output(domain_data, fluidsim, frameno, cache_directory):
|
||||
__write_logfile_data(cache_directory, domain_data.initialize.logfile_name, fluidsim)
|
||||
__write_frame_stats_data(cache_directory, fluidsim, frameno)
|
||||
__write_autosave_data(domain_data, cache_directory, fluidsim, frameno)
|
||||
__write_metadata_file(domain_data, cache_directory, frameno)
|
||||
__write_finished_file(cache_directory, frameno)
|
||||
|
||||
|
||||
@@ -3150,14 +3214,7 @@ def set_console_output(boolval):
|
||||
|
||||
|
||||
def __get_addon_version():
|
||||
if vcu.is_blender_42():
|
||||
bl_info_dict = bl_info
|
||||
else:
|
||||
module_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
module_name = os.path.basename(os.path.normpath(module_dir))
|
||||
module = sys.modules[module_name]
|
||||
bl_info_dict = module.bl_info
|
||||
|
||||
bl_info_dict = bl_info
|
||||
addon_major, addon_minor, addon_revision = bl_info_dict.get('version', (-1, -1, -1))
|
||||
return str(addon_major) + "." + str(addon_minor) + "." + str(addon_revision)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user