Dynamic Paint: Fix random pixel flooding by absolute brush with spread.
If a very low wetness absolute alpha brush is used with spread and drying effects enabled, some pixels will rapidly accumulate paint. This happens because paint drying code applies a minimal wetness threshold that causes the paint to instantly dry out. Specifically, every frame the brush adds paint at the specified absolute alpha and wetness set to the minimal threshold, spread drops it below threshold, and finally drying moves all paint to the dry layer. This drastically accelerates the rate of flow of paint into the affected pixels. Fortunately, the reason paint spread actually ends up decreasing wetness turns out to be a simple floating point precision problem, which can be easily fixed by restructuring the affected expression.
This commit is contained in:
parent
a9163f7d22
commit
b86042f21a
|
@ -4737,7 +4737,7 @@ static void dynamic_paint_effect_spread_cb(void *userdata, const int index)
|
|||
CLAMP(w_factor, 0.0f, 1.0f);
|
||||
|
||||
/* mix new wetness and color */
|
||||
pPoint->wetness = (1.0f - w_factor) * pPoint->wetness + w_factor * pPoint_prev->wetness;
|
||||
pPoint->wetness = pPoint->wetness + w_factor * (pPoint_prev->wetness - pPoint->wetness);
|
||||
pPoint->e_color[3] = mixColors(pPoint->e_color, pPoint->e_color[3],
|
||||
pPoint_prev->e_color, pPoint_prev->e_color[3], w_factor);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue