Merge branch 'blender-v4.0-release'
This commit is contained in:
@@ -545,7 +545,8 @@ void BLO_update_defaults_startup_blend(Main *bmain, const char *app_template)
|
||||
LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
|
||||
blo_update_defaults_scene(bmain, scene);
|
||||
|
||||
if (app_template && STREQ(app_template, "Video_Editing")) {
|
||||
if (app_template &&
|
||||
(STREQ(app_template, "Video_Editing") || STREQ(app_template, "2D_Animation"))) {
|
||||
/* Filmic is too slow, use standard until it is optimized. */
|
||||
STRNCPY(scene->view_settings.view_transform, "Standard");
|
||||
STRNCPY(scene->view_settings.look, "None");
|
||||
@@ -553,7 +554,13 @@ void BLO_update_defaults_startup_blend(Main *bmain, const char *app_template)
|
||||
else {
|
||||
/* Default to AgX view transform. */
|
||||
STRNCPY(scene->view_settings.view_transform, "AgX");
|
||||
}
|
||||
|
||||
if (app_template && STREQ(app_template, "Video_Editing")) {
|
||||
/* Pass: no extra tweaks needed. Keep the view settings configured above, and rely on the
|
||||
* default state of enabled AV sync. */
|
||||
}
|
||||
else {
|
||||
/* AV Sync break physics sim caching, disable until that is fixed. */
|
||||
scene->audio.flag &= ~AUDIO_SYNC;
|
||||
scene->flag &= ~SCE_FRAME_DROP;
|
||||
|
||||
@@ -361,7 +361,7 @@ static void interpolate_curve_shapes(bke::CurvesGeometry &child_curves,
|
||||
const float neighbor_weight = neighbor_weights[neighbor_i];
|
||||
const IndexRange guide_points = guide_points_by_curve[neighbor_index];
|
||||
const Span<float3> neighbor_positions = guide_positions.slice(guide_points);
|
||||
const float3 &neighbor_root = neighbor_positions[0];
|
||||
const float3 &neighbor_root = neighbor_positions.first();
|
||||
const float3 neighbor_up = guides_up[neighbor_index];
|
||||
BLI_assert(math::is_unit_scale(neighbor_up));
|
||||
|
||||
@@ -390,8 +390,22 @@ static void interpolate_curve_shapes(bke::CurvesGeometry &child_curves,
|
||||
/* This method is used when guide curves have different amounts of control points. In
|
||||
* this case, some additional interpolation is necessary compared to the method above. */
|
||||
|
||||
const Span<float> lengths = parameterized_guide_lengths.slice(
|
||||
parameterized_guide_offsets[neighbor_index]);
|
||||
const IndexRange guide_offsets = parameterized_guide_offsets[neighbor_index];
|
||||
|
||||
if (guide_offsets.is_empty()) {
|
||||
/* Single point curve. */
|
||||
float3 rotated_relative = neighbor_root;
|
||||
if (!is_same_up_vector) {
|
||||
rotated_relative = normal_rotation * rotated_relative;
|
||||
}
|
||||
const float3 global_pos = rotated_relative * neighbor_weight;
|
||||
for (float3 &position : child_positions) {
|
||||
position += global_pos;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
const Span<float> lengths = parameterized_guide_lengths.slice(guide_offsets);
|
||||
const float neighbor_length = lengths.last();
|
||||
|
||||
sample_lengths.reinitialize(points.size());
|
||||
@@ -535,8 +549,17 @@ static void interpolate_curve_attributes(bke::CurvesGeometry &child_curves,
|
||||
}
|
||||
}
|
||||
else {
|
||||
const Span<float> lengths = parameterized_guide_lengths.slice(
|
||||
parameterized_guide_offsets[neighbor_index]);
|
||||
const IndexRange guide_offsets = parameterized_guide_offsets[neighbor_index];
|
||||
if (guide_offsets.is_empty()) {
|
||||
/* Single point curve. */
|
||||
const T &curve_value = src[guide_points.first()];
|
||||
for (const int i : points) {
|
||||
mixer.mix_in(i, curve_value, neighbor_weight);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
const Span<float> lengths = parameterized_guide_lengths.slice(guide_offsets);
|
||||
const float neighbor_length = lengths.last();
|
||||
|
||||
sample_lengths.reinitialize(points.size());
|
||||
|
||||
Reference in New Issue
Block a user