Changeset View
Changeset View
Standalone View
Standalone View
source/blender/render/intern/source/pointdensity.c
| Show First 20 Lines • Show All 939 Lines • ▼ Show 20 Lines | static void particle_system_minmax(EvaluationContext *eval_ctx, | ||||
| if (use_render_params) { | if (use_render_params) { | ||||
| psys_render_restore(object, psys); | psys_render_restore(object, psys); | ||||
| } | } | ||||
| } | } | ||||
| void RE_point_density_cache( | void RE_point_density_cache( | ||||
| Scene *scene, | Scene *scene, | ||||
| SceneLayer *scene_layer, | ViewLayer *view_layer, | ||||
| PointDensity *pd, | PointDensity *pd, | ||||
| const bool use_render_params) | const bool use_render_params) | ||||
| { | { | ||||
| EvaluationContext eval_ctx = {0}; | EvaluationContext eval_ctx = {0}; | ||||
| float mat[4][4]; | float mat[4][4]; | ||||
| DEG_evaluation_context_init(&eval_ctx, use_render_params ? DAG_EVAL_RENDER | DEG_evaluation_context_init(&eval_ctx, use_render_params ? DAG_EVAL_RENDER | ||||
| : DAG_EVAL_VIEWPORT); | : DAG_EVAL_VIEWPORT); | ||||
| eval_ctx.scene_layer = scene_layer; | eval_ctx.view_layer = view_layer; | ||||
| /* Same matricies/resolution as dupli_render_particle_set(). */ | /* Same matricies/resolution as dupli_render_particle_set(). */ | ||||
| unit_m4(mat); | unit_m4(mat); | ||||
| BLI_mutex_lock(&sample_mutex); | BLI_mutex_lock(&sample_mutex); | ||||
| cache_pointdensity_ex(&eval_ctx, scene, pd, mat, mat, 1, 1, use_render_params); | cache_pointdensity_ex(&eval_ctx, scene, pd, mat, mat, 1, 1, use_render_params); | ||||
| BLI_mutex_unlock(&sample_mutex); | BLI_mutex_unlock(&sample_mutex); | ||||
| } | } | ||||
| void RE_point_density_minmax( | void RE_point_density_minmax( | ||||
| struct Scene *scene, | struct Scene *scene, | ||||
| SceneLayer *scene_layer, | ViewLayer *view_layer, | ||||
| struct PointDensity *pd, | struct PointDensity *pd, | ||||
| const bool use_render_params, | const bool use_render_params, | ||||
| float r_min[3], float r_max[3]) | float r_min[3], float r_max[3]) | ||||
| { | { | ||||
| Object *object = pd->object; | Object *object = pd->object; | ||||
| if (object == NULL) { | if (object == NULL) { | ||||
| zero_v3(r_min); | zero_v3(r_min); | ||||
| zero_v3(r_max); | zero_v3(r_max); | ||||
| Show All 14 Lines | if (psys == NULL) { | ||||
| zero_v3(r_max); | zero_v3(r_max); | ||||
| return; | return; | ||||
| } | } | ||||
| DEG_evaluation_context_init(&eval_ctx, use_render_params ? DAG_EVAL_RENDER : | DEG_evaluation_context_init(&eval_ctx, use_render_params ? DAG_EVAL_RENDER : | ||||
| DAG_EVAL_VIEWPORT); | DAG_EVAL_VIEWPORT); | ||||
| eval_ctx.ctime = (float)scene->r.cfra + scene->r.subframe; | eval_ctx.ctime = (float)scene->r.cfra + scene->r.subframe; | ||||
| eval_ctx.scene_layer = scene_layer; | eval_ctx.view_layer = view_layer; | ||||
| particle_system_minmax(&eval_ctx, | particle_system_minmax(&eval_ctx, | ||||
| scene, | scene, | ||||
| object, | object, | ||||
| psys, | psys, | ||||
| pd->radius, | pd->radius, | ||||
| use_render_params, | use_render_params, | ||||
| r_min, r_max); | r_min, r_max); | ||||
| ▲ Show 20 Lines • Show All 56 Lines • ▼ Show 20 Lines | static void point_density_sample_func(void *data_v, const int iter) | ||||
| } | } | ||||
| } | } | ||||
| /* NOTE 1: Requires RE_point_density_cache() to be called first. | /* NOTE 1: Requires RE_point_density_cache() to be called first. | ||||
| * NOTE 2: Frees point density structure after sampling. | * NOTE 2: Frees point density structure after sampling. | ||||
| */ | */ | ||||
| void RE_point_density_sample( | void RE_point_density_sample( | ||||
| Scene *scene, | Scene *scene, | ||||
| SceneLayer *scene_layer, | ViewLayer *view_layer, | ||||
| PointDensity *pd, | PointDensity *pd, | ||||
| const int resolution, | const int resolution, | ||||
| const bool use_render_params, | const bool use_render_params, | ||||
| float *values) | float *values) | ||||
| { | { | ||||
| Object *object = pd->object; | Object *object = pd->object; | ||||
| float min[3], max[3], dim[3]; | float min[3], max[3], dim[3]; | ||||
| /* TODO(sergey): Implement some sort of assert() that point density | /* TODO(sergey): Implement some sort of assert() that point density | ||||
| * was cached already. | * was cached already. | ||||
| */ | */ | ||||
| if (object == NULL) { | if (object == NULL) { | ||||
| sample_dummy_point_density(resolution, values); | sample_dummy_point_density(resolution, values); | ||||
| return; | return; | ||||
| } | } | ||||
| BLI_mutex_lock(&sample_mutex); | BLI_mutex_lock(&sample_mutex); | ||||
| RE_point_density_minmax(scene, | RE_point_density_minmax(scene, | ||||
| scene_layer, | view_layer, | ||||
| pd, | pd, | ||||
| use_render_params, | use_render_params, | ||||
| min, | min, | ||||
| max); | max); | ||||
| BLI_mutex_unlock(&sample_mutex); | BLI_mutex_unlock(&sample_mutex); | ||||
| sub_v3_v3v3(dim, max, min); | sub_v3_v3v3(dim, max, min); | ||||
| if (dim[0] <= 0.0f || dim[1] <= 0.0f || dim[2] <= 0.0f) { | if (dim[0] <= 0.0f || dim[1] <= 0.0f || dim[2] <= 0.0f) { | ||||
| sample_dummy_point_density(resolution, values); | sample_dummy_point_density(resolution, values); | ||||
| Show All 22 Lines | |||||