Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorMiika Hamalainen <blender@miikah.org>2011-11-02 15:32:22 +0400
committerMiika Hamalainen <blender@miikah.org>2011-11-02 15:32:22 +0400
commitb3dd11821f33973c07238b1f9c9e0998666de6b2 (patch)
treea5a398cff4241d50e11aee561c1e4419bc6cf468 /source
parentcd338a4130011ed9eccc7b131b11e4261b9dc269 (diff)
Dynamic Paint:
* Some fixes and tweaking for the previous commit.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/dynamicpaint.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c
index 9185786092c..d7bdbf34b69 100644
--- a/source/blender/blenkernel/intern/dynamicpaint.c
+++ b/source/blender/blenkernel/intern/dynamicpaint.c
@@ -2794,25 +2794,28 @@ static void dynamicPaint_mixPaintColors(DynamicPaintSurface *surface, int index,
/* Add paint */
if (!(paintFlags & MOD_DPAINT_ERASE)) {
- float wetness, mix[4];
+ float mix[4];
float temp_alpha = (*paintAlpha) * ((paintFlags & MOD_DPAINT_ABS_ALPHA) ? 1.0f : (*timescale));
/* mix brush color with wet layer color */
blendColors(pPoint->e_color, pPoint->e_alpha, paintColor, temp_alpha, mix);
copy_v3_v3(pPoint->e_color, mix);
- /* alpha */
+ /* mix wetness and alpha depending on selected alpha mode */
if (paintFlags & MOD_DPAINT_ABS_ALPHA) {
+ /* update values to the brush level unless theyre higher already */
if (pPoint->e_alpha < (*paintAlpha)) pPoint->e_alpha = (*paintAlpha);
+ if (pPoint->wetness < (*paintWetness)) pPoint->wetness = (*paintWetness);
}
else {
+ float wetness = (*paintWetness);
+ CLAMP(wetness, 0.0f, 1.0f);
pPoint->e_alpha = mix[3];
+ pPoint->wetness = pPoint->wetness*(1.0f-wetness) + wetness;
}
- /* only increase wetness if it's below paint level */
- wetness = (*paintWetness) * pPoint->e_alpha;
- CLAMP(wetness, 0.0f, 1.0f);
- if (pPoint->wetness < wetness) pPoint->wetness = wetness;
+ if (pPoint->wetness<MIN_WETNESS) pPoint->wetness = MIN_WETNESS;
+
pPoint->state = DPAINT_PAINT_NEW;
}
/* Erase paint */
@@ -2879,6 +2882,7 @@ static void dynamicPaint_updatePointData(DynamicPaintSurface *surface, unsigned
{
PaintSurfaceData *sData = surface->data;
float strength = influence * brush->alpha;
+ CLAMP(strength, 0.0f, 1.0f);
/* Sample velocity colorband if required */
if (brush->flags & (MOD_DPAINT_VELOCITY_ALPHA|MOD_DPAINT_VELOCITY_COLOR|MOD_DPAINT_VELOCITY_DEPTH)) {
@@ -2904,7 +2908,6 @@ static void dynamicPaint_updatePointData(DynamicPaintSurface *surface, unsigned
float paintWetness = brush->wetness * strength;
float paintAlpha = strength;
- if (paintAlpha > 1.0f) paintAlpha = 1.0f;
dynamicPaint_mixPaintColors(surface, index, brush->flags, paint, &paintAlpha, &paintWetness, &timescale);
@@ -4363,7 +4366,7 @@ static void dynamicPaint_surfacePreStep(DynamicPaintSurface *surface, float time
if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
PaintPoint *pPoint = &((PaintPoint*)sData->type_data)[index];
/* drying */
- if (pPoint->wetness > MIN_WETNESS) {
+ if (pPoint->wetness >= MIN_WETNESS) {
int i;
float dry_ratio, f_color[4];
float p_wetness = pPoint->wetness;