[Bf-blender-cvs] [1ff4fd4bb04] soc-2020-fluid-tools: Fluid: Added an option for color mapping pressure grid
Sriharsha Kotcharlakot
noreply at git.blender.org
Fri Jul 24 20:02:19 CEST 2020
Commit: 1ff4fd4bb043c3b3bc6183a0c89e23eb377b2855
Author: Sriharsha Kotcharlakot
Date: Fri Jul 24 23:31:26 2020 +0530
Branches: soc-2020-fluid-tools
https://developer.blender.org/rB1ff4fd4bb043c3b3bc6183a0c89e23eb377b2855
Fluid: Added an option for color mapping pressure grid
===================================================================
M intern/mantaflow/extern/manta_fluid_API.h
M intern/mantaflow/intern/MANTA_main.cpp
M intern/mantaflow/intern/MANTA_main.h
M intern/mantaflow/intern/manta_fluid_API.cpp
M release/scripts/startup/bl_ui/properties_physics_fluid.py
M source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
M source/blender/draw/engines/workbench/workbench_volume.c
M source/blender/gpu/intern/gpu_draw_smoke.c
M source/blender/makesdna/DNA_fluid_types.h
M source/blender/makesrna/intern/rna_fluid.c
===================================================================
diff --git a/intern/mantaflow/extern/manta_fluid_API.h b/intern/mantaflow/extern/manta_fluid_API.h
index a7018f638ec..9e3c23e0444 100644
--- a/intern/mantaflow/extern/manta_fluid_API.h
+++ b/intern/mantaflow/extern/manta_fluid_API.h
@@ -109,6 +109,7 @@ float *manta_get_phiobsstatic_in(struct MANTA *fluid);
float *manta_get_phiout_in(struct MANTA *fluid);
float *manta_get_phioutstatic_in(struct MANTA *fluid);
float *manta_get_phi(struct MANTA *fluid);
+float *manta_get_pressure(struct MANTA *fluid);
/* Smoke functions */
void manta_smoke_export_script(struct MANTA *smoke, struct FluidModifierData *fmd);
diff --git a/intern/mantaflow/intern/MANTA_main.cpp b/intern/mantaflow/intern/MANTA_main.cpp
index 676a2fd785e..55fb174bc5c 100644
--- a/intern/mantaflow/intern/MANTA_main.cpp
+++ b/intern/mantaflow/intern/MANTA_main.cpp
@@ -130,6 +130,7 @@ MANTA::MANTA(int *res, FluidModifierData *fmd) : mCurrentID(++solverID)
mFuelIn = nullptr;
mReactIn = nullptr;
mEmissionIn = nullptr;
+ mPressure = nullptr;
// Smoke high res grids
mDensityHigh = nullptr;
@@ -1986,6 +1987,7 @@ void MANTA::updatePointers()
mForceX = (float *)pyObjectToPointer(callPythonFunction("x_force" + solver_ext, func));
mForceY = (float *)pyObjectToPointer(callPythonFunction("y_force" + solver_ext, func));
mForceZ = (float *)pyObjectToPointer(callPythonFunction("z_force" + solver_ext, func));
+ mPressure = (float *)pyObjectToPointer(callPythonFunction("pressure" + solver_ext, func));
if (mUsingOutflow) {
mPhiOutIn = (float *)pyObjectToPointer(callPythonFunction("phiOutIn" + solver_ext, func));
diff --git a/intern/mantaflow/intern/MANTA_main.h b/intern/mantaflow/intern/MANTA_main.h
index dae2aea4e08..1644620fa75 100644
--- a/intern/mantaflow/intern/MANTA_main.h
+++ b/intern/mantaflow/intern/MANTA_main.h
@@ -420,6 +420,10 @@ struct MANTA {
{
return mPhi;
}
+ inline float *getPressure()
+ {
+ return mPressure;
+ }
static atomic<int> solverID;
static int with_debug; // on or off (1 or 0), also sets manta debug level
@@ -818,6 +822,7 @@ struct MANTA {
int *mFlags;
float *mNumObstacle;
float *mNumGuide;
+ float *mPressure;
// Smoke grids
float *mDensity;
diff --git a/intern/mantaflow/intern/manta_fluid_API.cpp b/intern/mantaflow/intern/manta_fluid_API.cpp
index 423c3c249c9..195a260d20d 100644
--- a/intern/mantaflow/intern/manta_fluid_API.cpp
+++ b/intern/mantaflow/intern/manta_fluid_API.cpp
@@ -363,6 +363,10 @@ float *manta_get_phi(MANTA *fluid)
{
return fluid->getPhi();
}
+float *manta_get_pressure(MANTA *fluid)
+{
+ return fluid->getPressure();
+}
/* Smoke functions */
void manta_smoke_export_script(MANTA *smoke, FluidModifierData *fmd)
diff --git a/release/scripts/startup/bl_ui/properties_physics_fluid.py b/release/scripts/startup/bl_ui/properties_physics_fluid.py
index 3fe40cac956..ff1716d39aa 100644
--- a/release/scripts/startup/bl_ui/properties_physics_fluid.py
+++ b/release/scripts/startup/bl_ui/properties_physics_fluid.py
@@ -1308,7 +1308,7 @@ class PHYSICS_PT_viewport_display_color(PhysicButtonsPanel, Panel):
col.use_property_split = False
- if (not (domain.coba_field[:3] == "PHI" or domain.coba_field == "FLAGS")):
+ if (not (domain.coba_field[:3] == "PHI" or domain.coba_field == "FLAGS" or domain.coba_field == "PRESSURE")):
col = col.column()
col.template_color_ramp(domain, "color_ramp", expand=True)
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
index 9c57ac760f1..e6a4e1d885b 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_volume_frag.glsl
@@ -26,6 +26,7 @@ uniform int sliceAxis; /* -1 is no slice, 0 is X, 1 is Y, 2 is Z. */
uniform bool showPhi = false;
uniform bool showFlags = false;
+uniform bool showPressure = false;
#ifdef VOLUME_SLICE
in vec3 localPos;
@@ -157,6 +158,17 @@ void volume_properties(vec3 ls_pos, out vec3 scattering, out float extinction)
tval.rgb += vec3(0.5, 0.0, 0.0); /* medium red */
}
}
+ else if (showPressure) {
+ /* Color mapping for pressure */
+ float val = sample_volume_texture(densityTexture, co).r * gridScale;
+
+ if (val > 0) {
+ tval = vec4(val, val, val, 0.06);
+ }
+ else {
+ tval = vec4(-val, 0.0, 0.0, 0.06);
+ }
+ }
else {
float val = sample_volume_texture(densityTexture, co).r * gridScale;
tval = texture(transferTexture, val);
diff --git a/source/blender/draw/engines/workbench/workbench_volume.c b/source/blender/draw/engines/workbench/workbench_volume.c
index 10c49e8c8cf..75ba0490829 100644
--- a/source/blender/draw/engines/workbench/workbench_volume.c
+++ b/source/blender/draw/engines/workbench/workbench_volume.c
@@ -100,6 +100,7 @@ static void workbench_volume_modifier_cache_populate(WORKBENCH_Data *vedata,
fds->coba_field == FLUID_DOMAIN_FIELD_PHI_OUT ||
fds->coba_field == FLUID_DOMAIN_FIELD_PHI_OBSTACLE);
const bool show_flags = (fds->coba_field == FLUID_DOMAIN_FIELD_FLAGS);
+ const bool show_pressure = (fds->coba_field == FLUID_DOMAIN_FIELD_PRESSURE);
GPUShader *sh = workbench_shader_volume_get(use_slice, fds->use_coba, cubic_interp, true);
if (use_slice) {
@@ -147,12 +148,13 @@ static void workbench_volume_modifier_cache_populate(WORKBENCH_Data *vedata,
else {
DRW_shgroup_uniform_texture(grp, "densityTexture", fds->tex_field);
}
- if (!show_phi && !show_flags) {
+ if (!show_phi && !show_flags && !show_pressure) {
DRW_shgroup_uniform_texture(grp, "transferTexture", fds->tex_coba);
}
DRW_shgroup_uniform_float_copy(grp, "gridScale", fds->grid_scale);
DRW_shgroup_uniform_bool_copy(grp, "showPhi", show_phi);
DRW_shgroup_uniform_bool_copy(grp, "showFlags", show_flags);
+ DRW_shgroup_uniform_bool_copy(grp, "showPressure", show_pressure);
}
else {
static float white[3] = {1.0f, 1.0f, 1.0f};
diff --git a/source/blender/gpu/intern/gpu_draw_smoke.c b/source/blender/gpu/intern/gpu_draw_smoke.c
index 878f5f5ccaf..70aac0809d8 100644
--- a/source/blender/gpu/intern/gpu_draw_smoke.c
+++ b/source/blender/gpu/intern/gpu_draw_smoke.c
@@ -206,6 +206,10 @@ static GPUTexture *create_field_texture(FluidDomainSettings *fds, bool singlePre
data_format = GPU_DATA_INT;
texture_format = GPU_R8UI;
break;
+ case FLUID_DOMAIN_FIELD_PRESSURE:
+ field = manta_get_pressure(fds->fluid);
+ texture_format = GPU_R16F;
+ break;
default:
return NULL;
}
@@ -385,7 +389,8 @@ void GPU_create_smoke_coba_field(FluidModifierData *fmd)
fds->coba_field == FLUID_DOMAIN_FIELD_PHI_IN ||
fds->coba_field == FLUID_DOMAIN_FIELD_PHI_OUT ||
fds->coba_field == FLUID_DOMAIN_FIELD_PHI_OBSTACLE ||
- fds->coba_field == FLUID_DOMAIN_FIELD_FLAGS)) {
+ fds->coba_field == FLUID_DOMAIN_FIELD_FLAGS ||
+ fds->coba_field == FLUID_DOMAIN_FIELD_PRESSURE)) {
fds->tex_coba = create_transfer_function(TFUNC_COLOR_RAMP, fds->coba);
}
}
diff --git a/source/blender/makesdna/DNA_fluid_types.h b/source/blender/makesdna/DNA_fluid_types.h
index c76ce110250..757f5c8de03 100644
--- a/source/blender/makesdna/DNA_fluid_types.h
+++ b/source/blender/makesdna/DNA_fluid_types.h
@@ -132,6 +132,7 @@ enum {
FLUID_DOMAIN_FIELD_PHI_OUT = 16,
FLUID_DOMAIN_FIELD_PHI_OBSTACLE = 17,
FLUID_DOMAIN_FIELD_FLAGS = 18,
+ FLUID_DOMAIN_FIELD_PRESSURE = 19,
};
/* Fluid gridline display color field types. */
diff --git a/source/blender/makesrna/intern/rna_fluid.c b/source/blender/makesrna/intern/rna_fluid.c
index 008da0572bb..2427c6f317c 100644
--- a/source/blender/makesrna/intern/rna_fluid.c
+++ b/source/blender/makesrna/intern/rna_fluid.c
@@ -1065,6 +1065,13 @@ static const EnumPropertyItem *rna_Fluid_cobafield_itemf(bContext *UNUSED(C),
tmp.description = "Flag grid of the fluid domain";
RNA_enum_item_add(&item, &totitem, &tmp);
+ tmp.value = FLUID_DOMAIN_FIELD_PRESSURE;
+ tmp.identifier = "PRESSURE";
+ tmp.icon = 0;
+ tmp.name = "Pressure";
+ tmp.description = "Pressure field of the fluid domain";
+ RNA_enum_item_add(&item, &totitem, &tmp);
+
tmp.value = FLUID_DOMAIN_FIELD_VELOCITY_X;
tmp.identifier = "VELOCITY_X";
tmp.icon = 0;
More information about the Bf-blender-cvs
mailing list