258 lines
7.9 KiB
C
258 lines
7.9 KiB
C
/*
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* Contributor(s): Miika Hämäläinen
|
|
*
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
*
|
|
*/
|
|
|
|
/** \file DNA_dynamicpaint_types.h
|
|
* \ingroup DNA
|
|
*/
|
|
|
|
#ifndef __DNA_DYNAMICPAINT_TYPES_H__
|
|
#define __DNA_DYNAMICPAINT_TYPES_H__
|
|
|
|
#include "DNA_listBase.h"
|
|
struct PaintSurfaceData;
|
|
|
|
/* surface format */
|
|
enum {
|
|
MOD_DPAINT_SURFACE_F_PTEX = 0,
|
|
MOD_DPAINT_SURFACE_F_VERTEX = 1,
|
|
MOD_DPAINT_SURFACE_F_IMAGESEQ = 2,
|
|
};
|
|
|
|
/* surface type */
|
|
enum {
|
|
MOD_DPAINT_SURFACE_T_PAINT = 0,
|
|
MOD_DPAINT_SURFACE_T_DISPLACE = 1,
|
|
MOD_DPAINT_SURFACE_T_WEIGHT = 2,
|
|
MOD_DPAINT_SURFACE_T_WAVE = 3,
|
|
};
|
|
|
|
/* surface flags */
|
|
enum {
|
|
MOD_DPAINT_ACTIVE = 1 << 0, /* Is surface enabled */
|
|
|
|
MOD_DPAINT_ANTIALIAS = 1 << 1, /* do antialiasing */
|
|
MOD_DPAINT_DISSOLVE = 1 << 2, /* do dissolve */
|
|
MOD_DPAINT_MULALPHA = 1 << 3, /* Multiply color by alpha when saving image */
|
|
MOD_DPAINT_DISSOLVE_LOG = 1 << 4, /* Use 1/x for surface dissolve */
|
|
MOD_DPAINT_DRY_LOG = 1 << 5, /* Use 1/x for drying paint */
|
|
MOD_DPAINT_PREVIEW = 1 << 6, /* preview this surface on viewport*/
|
|
|
|
MOD_DPAINT_WAVE_OPEN_BORDERS = 1 << 7, /* passes waves through mesh edges */
|
|
MOD_DPAINT_DISP_INCREMENTAL = 1 << 8, /* builds displace on top of earlier values */
|
|
MOD_DPAINT_USE_DRYING = 1 << 9, /* use drying */
|
|
|
|
MOD_DPAINT_OUT1 = 1 << 10, /* output primary surface */
|
|
MOD_DPAINT_OUT2 = 1 << 11, /* output secondary surface */
|
|
};
|
|
|
|
/* image_fileformat */
|
|
enum {
|
|
MOD_DPAINT_IMGFORMAT_PNG = 0,
|
|
MOD_DPAINT_IMGFORMAT_OPENEXR = 1,
|
|
};
|
|
|
|
/* disp_format */
|
|
enum {
|
|
MOD_DPAINT_DISP_DISPLACE = 0, /* displacement output displace map */
|
|
MOD_DPAINT_DISP_DEPTH = 1, /* displacement output depth data */
|
|
};
|
|
|
|
/* effect */
|
|
enum {
|
|
MOD_DPAINT_EFFECT_DO_SPREAD = 1 << 0, /* do spread effect */
|
|
MOD_DPAINT_EFFECT_DO_DRIP = 1 << 1, /* do drip effect */
|
|
MOD_DPAINT_EFFECT_DO_SHRINK = 1 << 2, /* do shrink effect */
|
|
};
|
|
|
|
/* preview_id */
|
|
enum {
|
|
MOD_DPAINT_SURFACE_PREV_PAINT = 0,
|
|
MOD_DPAINT_SURFACE_PREV_WETMAP = 1,
|
|
};
|
|
|
|
/* init_color_type */
|
|
enum {
|
|
MOD_DPAINT_INITIAL_NONE = 0,
|
|
MOD_DPAINT_INITIAL_COLOR = 1,
|
|
MOD_DPAINT_INITIAL_TEXTURE = 2,
|
|
MOD_DPAINT_INITIAL_VERTEXCOLOR = 3,
|
|
};
|
|
|
|
typedef struct DynamicPaintSurface {
|
|
|
|
struct DynamicPaintSurface *next, *prev;
|
|
struct DynamicPaintCanvasSettings *canvas; /* for fast RNA access */
|
|
struct PaintSurfaceData *data;
|
|
|
|
struct Collection *brush_group;
|
|
struct EffectorWeights *effector_weights;
|
|
|
|
/* cache */
|
|
struct PointCache *pointcache;
|
|
struct ListBase ptcaches;
|
|
int current_frame;
|
|
|
|
/* surface */
|
|
char name[64];
|
|
short format, type;
|
|
short disp_type, image_fileformat;
|
|
short effect_ui; /* ui selection box */
|
|
short preview_id; /* surface output id to preview */
|
|
short init_color_type, pad_s;
|
|
int flags, effect;
|
|
|
|
int image_resolution, substeps;
|
|
int start_frame, end_frame, pad;
|
|
|
|
/* initial color */
|
|
float init_color[4];
|
|
struct Tex *init_texture;
|
|
char init_layername[64]; /* MAX_CUSTOMDATA_LAYER_NAME */
|
|
|
|
int dry_speed, diss_speed;
|
|
float color_dry_threshold;
|
|
float depth_clamp, disp_factor;
|
|
|
|
float spread_speed, color_spread_speed, shrink_speed;
|
|
float drip_vel, drip_acc;
|
|
|
|
/* per surface brush settings */
|
|
float influence_scale, radius_scale;
|
|
|
|
/* wave settings */
|
|
float wave_damping, wave_speed, wave_timescale, wave_spring, wave_smoothness;
|
|
int pad2;
|
|
|
|
char uvlayer_name[64]; /* MAX_CUSTOMDATA_LAYER_NAME */
|
|
char image_output_path[1024]; /* 1024 = FILE_MAX */
|
|
char output_name[64]; /* MAX_CUSTOMDATA_LAYER_NAME */
|
|
char output_name2[64]; /* MAX_CUSTOMDATA_LAYER_NAME */ /* some surfaces have 2 outputs */
|
|
|
|
} DynamicPaintSurface;
|
|
|
|
/* canvas flags */
|
|
enum {
|
|
/* This should not be needed, having a valid WEIGHT_MCOL layer should be enough.
|
|
* And if not, should be a general flag. But seems unnecessary for now... */
|
|
#if 0
|
|
MOD_DPAINT_PREVIEW_READY = 1 << 0, /* if viewport preview is ready */
|
|
#endif
|
|
MOD_DPAINT_BAKING = 1 << 1, /* surface is already baking, so it wont get updated (loop) */
|
|
};
|
|
|
|
/* Canvas settings */
|
|
typedef struct DynamicPaintCanvasSettings {
|
|
struct DynamicPaintModifierData *pmd; /* for fast RNA access */
|
|
struct Mesh *mesh;
|
|
|
|
struct ListBase surfaces;
|
|
short active_sur, flags;
|
|
int pad;
|
|
|
|
char error[64]; /* Bake error description */
|
|
|
|
} DynamicPaintCanvasSettings;
|
|
|
|
|
|
/* flags */
|
|
enum {
|
|
MOD_DPAINT_PART_RAD = 1 << 0, /* use particle radius */
|
|
//MOD_DPAINT_USE_MATERIAL = 1 << 1, /* DNA_DEPRECATED */
|
|
MOD_DPAINT_ABS_ALPHA = 1 << 2, /* don't increase alpha unless paint alpha is higher than existing */
|
|
MOD_DPAINT_ERASE = 1 << 3, /* removes paint */
|
|
|
|
MOD_DPAINT_RAMP_ALPHA = 1 << 4, /* only read falloff ramp alpha */
|
|
MOD_DPAINT_PROX_PROJECT = 1 << 5, /* do proximity check only in defined dir */
|
|
MOD_DPAINT_INVERSE_PROX = 1 << 6, /* inverse proximity painting */
|
|
MOD_DPAINT_NEGATE_VOLUME = 1 << 7, /* negates volume influence on "volume + prox" mode */
|
|
|
|
MOD_DPAINT_DO_SMUDGE = 1 << 8, /* brush smudges existing paint */
|
|
MOD_DPAINT_VELOCITY_ALPHA = 1 << 9, /* multiply brush influence by velocity */
|
|
MOD_DPAINT_VELOCITY_COLOR = 1 << 10, /* replace brush color by velocity color ramp */
|
|
MOD_DPAINT_VELOCITY_DEPTH = 1 << 11, /* multiply brush intersection depth by velocity */
|
|
|
|
MOD_DPAINT_USES_VELOCITY = (MOD_DPAINT_DO_SMUDGE | MOD_DPAINT_VELOCITY_ALPHA |
|
|
MOD_DPAINT_VELOCITY_COLOR | MOD_DPAINT_VELOCITY_DEPTH),
|
|
};
|
|
|
|
/* collision type */
|
|
enum {
|
|
MOD_DPAINT_COL_VOLUME = 0, /* paint with mesh volume */
|
|
MOD_DPAINT_COL_DIST = 1, /* paint using distance to mesh surface */
|
|
MOD_DPAINT_COL_VOLDIST = 2, /* use both volume and distance */
|
|
MOD_DPAINT_COL_PSYS = 3, /* use particle system */
|
|
MOD_DPAINT_COL_POINT = 4, /* use distance to object center point */
|
|
};
|
|
|
|
/* proximity_falloff */
|
|
enum {
|
|
MOD_DPAINT_PRFALL_CONSTANT = 0, /* no-falloff */
|
|
MOD_DPAINT_PRFALL_SMOOTH = 1, /* smooth, linear falloff */
|
|
MOD_DPAINT_PRFALL_RAMP = 2, /* use color ramp */
|
|
};
|
|
|
|
/* wave_brush_type */
|
|
enum {
|
|
MOD_DPAINT_WAVEB_DEPTH = 0, /* use intersection depth */
|
|
MOD_DPAINT_WAVEB_FORCE = 1, /* act as a force on intersection area */
|
|
MOD_DPAINT_WAVEB_REFLECT = 2, /* obstacle that reflects waves */
|
|
MOD_DPAINT_WAVEB_CHANGE = 3, /* use change of intersection depth from previous frame */
|
|
};
|
|
|
|
/* brush ray_dir */
|
|
enum {
|
|
MOD_DPAINT_RAY_CANVAS = 0,
|
|
MOD_DPAINT_RAY_BRUSH_AVG = 1,
|
|
MOD_DPAINT_RAY_ZPLUS = 2,
|
|
};
|
|
|
|
/* Brush settings */
|
|
typedef struct DynamicPaintBrushSettings {
|
|
struct DynamicPaintModifierData *pmd; /* for fast RNA access */
|
|
struct Mesh *mesh;
|
|
struct ParticleSystem *psys;
|
|
|
|
int flags;
|
|
int collision;
|
|
|
|
float r, g, b, alpha;
|
|
float wetness;
|
|
|
|
float particle_radius, particle_smooth;
|
|
float paint_distance;
|
|
|
|
/* color ramps */
|
|
struct ColorBand *paint_ramp; /* Proximity paint falloff */
|
|
struct ColorBand *vel_ramp; /* Velocity paint ramp */
|
|
|
|
short proximity_falloff;
|
|
short wave_type;
|
|
short ray_dir;
|
|
short pad;
|
|
|
|
float wave_factor, wave_clamp;
|
|
float max_velocity, smudge_strength;
|
|
} DynamicPaintBrushSettings;
|
|
|
|
#endif
|