Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug fix for segment grouping. #65

Merged
merged 1 commit into from
Dec 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ class DsDynamicHashedGrid {
inline static std::shared_ptr<Shader> big_flip_shader;
inline static std::shared_ptr<Shader> local_disperse_shader;
inline static std::shared_ptr<Shader> global_disperse_shader;
float grid_cell_size = 0.03f;
float grid_cell_size = 0.1f;

DsDynamicHashedGrid();
bool OnInspect(const std::shared_ptr<EditorLayer>& editor_layer);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,11 @@ typedef StrandGroup<DtsStrandGroupData, DtsStrandData, DtsStrandSegmentData> Dts

class DynamicStrands {
bool wait_for_upload = true;
uint32_t frame_index = 0;

public:
DynamicStrands();
uint32_t GetFrameIndex() const;
[[nodiscard]] bool WaitForUpload() const;
#pragma region Initialization
struct InitializeParameters {
Expand Down Expand Up @@ -122,14 +124,14 @@ class DynamicStrands {
struct PhysicsParameters {
float time_step = 0.01f;
int sub_step = 10;
uint32_t frame_index = 0;

int constraint_iteration = 5;
bool enable_breaking = true;
float velocity_damping = 0.005f;
float angular_velocity_damping = 0.0005f;

bool enable_segment_collision = false;
bool enable_grouping = false;
bool enable_grouping = true;
bool OnInspect(const std::shared_ptr<EditorLayer>& editor_layer);
};

Expand All @@ -155,7 +157,7 @@ class DynamicStrands {
bool render_uniform_particles = true;

uint32_t particle_render_mode = 0;
uint32_t segment_render_mode = 0;
uint32_t segment_render_mode = 6;
uint32_t segment_pair_render_mode = 0;
uint32_t uniform_particle_render_mode = 0;

Expand Down Expand Up @@ -410,7 +412,7 @@ class DynamicStrands {
void Visualize(const std::shared_ptr<Camera>& target_camera,
const VisualizationParameters& visualization_parameters) const;
void Physics(const PhysicsParameters& physics_parameters, const std::function<void()>& pre_step_action,
const std::function<void()>& sub_step_action) const;
const std::function<void()>& sub_step_action);

private:
#ifdef USE_CGAL
Expand Down
4 changes: 2 additions & 2 deletions EvoEngine_Plugins/EcoSysLab/src/DsConstraints.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,11 +136,11 @@ void DsStiffRod::ProjectPositionConstraint(const DynamicStrands::PhysicsParamete
ShearStretchConstraintConstant stretch_shear_constraint_constant;
stretch_shear_constraint_constant.strand_size = target_dynamic_strands.strands.size();
stretch_shear_constraint_constant.inv_time_step = 1.f / (physics_parameters.time_step / physics_parameters.sub_step);
stretch_shear_constraint_constant.frame_index = physics_parameters.frame_index;
stretch_shear_constraint_constant.frame_index = target_dynamic_strands.GetFrameIndex();
BendTwistConstraintConstant bend_twist_constraint_constant;
bend_twist_constraint_constant.strand_size = target_dynamic_strands.strands.size();
bend_twist_constraint_constant.inv_time_step = 1.f / (physics_parameters.time_step / physics_parameters.sub_step);
bend_twist_constraint_constant.frame_index = physics_parameters.frame_index;
bend_twist_constraint_constant.frame_index = target_dynamic_strands.GetFrameIndex();
const uint32_t work_group_invocations = Platform::Constants::compute_work_group_invocations;
Platform::RecordCommandsMainQueue([&](const VkCommandBuffer vk_command_buffer) {
for (int sub_iteration_index = 0; sub_iteration_index < sub_iteration; sub_iteration_index++) {
Expand Down
10 changes: 8 additions & 2 deletions EvoEngine_Plugins/EcoSysLab/src/DynamicStrands.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ inline glm::vec3 cgal_to_glm(const Point_CGAL& p) {
}
#endif
void DynamicStrands::Physics(const PhysicsParameters& physics_parameters, const std::function<void()>& pre_step_action,
const std::function<void()>& sub_step_action) const {
const std::function<void()>& sub_step_action) {
pre_step_action();
for (int sub_step_index = 0; sub_step_index < physics_parameters.sub_step; sub_step_index++) {
if (pre_step)
Expand Down Expand Up @@ -65,9 +65,10 @@ void DynamicStrands::Physics(const PhysicsParameters& physics_parameters, const
segment_collision->Execute(physics_parameters, *this);
}

if (physics_parameters.enable_grouping) {
if (physics_parameters.enable_grouping && frame_index > 0) {
CalculateGroups(physics_parameters);
}
frame_index++;
}

DynamicStrands::DynamicStrands() {
Expand Down Expand Up @@ -129,6 +130,10 @@ DynamicStrands::DynamicStrands() {
segment_collision = std::make_shared<DsSegmentCollision>();
}

uint32_t DynamicStrands::GetFrameIndex() const {
return frame_index;
}

bool DynamicStrands::WaitForUpload() const {
return wait_for_upload;
}
Expand Down Expand Up @@ -197,6 +202,7 @@ void DynamicStrands::Initialize(const InitializeParameters& initialize_parameter
const StrandModelStrandGroup& strand_model_strand_group,
const DtsStrandGroup& strand_group) {
Clear();
frame_index = 0;
assert(initialize_parameters.root_transform.GetScale() == glm::vec3(1.0f));
const auto& target_strands = strand_group.PeekStrands();
const auto& target_strand_segments = strand_group.PeekStrandSegments();
Expand Down
1 change: 0 additions & 1 deletion EvoEngine_Plugins/EcoSysLab/src/EcoSysLabLayerPhysics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ void EcoSysLabLayer::StrandPhysics() {
if (dts->enable_physics)
dts->PhysicsStep(dynamic_strands_settings_.physics_parameters);
});
dynamic_strands_settings_.physics_parameters.frame_index++;
}
if (dynamic_strands_settings_.enable) {
for_each_dts_entity([&](const std::shared_ptr<DynamicTreeStrands>& dts) {
Expand Down
Loading