adjust HSV jitter, add average
This commit is contained in:
@@ -144,10 +144,11 @@ ui::StrokeSample ui::Stroke::randomize_sample(const glm::vec2& pos, float pressu
|
|||||||
s.size = 800.f * m_brush.m_tip_size * (1.f - rnd_nor() * m_brush.m_jitter_scale) * size_dyn;
|
s.size = 800.f * m_brush.m_tip_size * (1.f - rnd_nor() * m_brush.m_jitter_scale) * size_dyn;
|
||||||
s.flow = m_brush.m_tip_flow * (1.f - rnd_nor() * m_brush.m_jitter_flow) * flow_dyn;
|
s.flow = m_brush.m_tip_flow * (1.f - rnd_nor() * m_brush.m_jitter_flow) * flow_dyn;
|
||||||
auto hsv = convert_rgb2hsv(m_brush.m_tip_color);
|
auto hsv = convert_rgb2hsv(m_brush.m_tip_color);
|
||||||
hsv.x = hsv.x + (rnd_nor() - 0.5f) * m_brush.m_jitter_hue + (pressure * 2.0f - 0.5f) * m_brush.m_tip_hue * m_brush.m_tip_hue_pressure;
|
hsv.x = glm::clamp(glm::mix(hsv.x, (pressure - 0.5f) * 2.0f, m_brush.m_tip_hue * (float)m_brush.m_tip_hue_pressure) + (rnd_nor() - 0.5f) * m_brush.m_jitter_hue, 0.f, 1.f);
|
||||||
hsv.y = hsv.y + (rnd_nor() - 0.5f) * m_brush.m_jitter_sat + (pressure * 2.0f - 0.5f) * m_brush.m_tip_sat * m_brush.m_tip_sat_pressure;
|
hsv.y = glm::clamp(glm::mix(hsv.y, (pressure - 0.5f) * 2.0f, m_brush.m_tip_sat * (float)m_brush.m_tip_sat_pressure) + (rnd_nor() - 0.5f) * m_brush.m_jitter_sat, 0.f, 1.f);
|
||||||
hsv.z = hsv.z + (rnd_nor() - 0.5f) * m_brush.m_jitter_val + (pressure * 2.0f - 0.5f) * m_brush.m_tip_val * m_brush.m_tip_val_pressure;
|
hsv.z = glm::clamp(glm::mix(hsv.z, (pressure - 0.5f) * 2.0f, m_brush.m_tip_val * (float)m_brush.m_tip_val_pressure) + (rnd_nor() - 0.5f) * m_brush.m_jitter_val, 0.f, 1.f);
|
||||||
s.col = convert_hsv2rgb(hsv);
|
m_hsv_jitter.add(hsv);
|
||||||
|
s.col = convert_hsv2rgb(m_hsv_jitter.average());
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
std::vector<ui::StrokeSample> ui::Stroke::compute_samples()
|
std::vector<ui::StrokeSample> ui::Stroke::compute_samples()
|
||||||
@@ -204,6 +205,8 @@ void ui::Stroke::add_point(glm::vec2 pos, float pressure)
|
|||||||
m_curve = glm::min(m_curve + 0.1f, 1.f);
|
m_curve = glm::min(m_curve + 0.1f, 1.f);
|
||||||
pressure = pressure * glm::pow(m_curve, 2.f);
|
pressure = pressure * glm::pow(m_curve, 2.f);
|
||||||
#endif // __IOS__
|
#endif // __IOS__
|
||||||
|
m_pressure_buff.add(pressure);
|
||||||
|
pressure = m_pressure_buff.average();
|
||||||
|
|
||||||
if (m_brush.m_tip_size_pressure)
|
if (m_brush.m_tip_size_pressure)
|
||||||
m_step = glm::max(m_brush.m_tip_spacing * m_brush.m_tip_size * pressure * 800.f, 1.f);
|
m_step = glm::max(m_brush.m_tip_spacing * m_brush.m_tip_size * pressure * 800.f, 1.f);
|
||||||
@@ -222,6 +225,8 @@ void ui::Stroke::start(const ui::Brush& brush)
|
|||||||
{
|
{
|
||||||
m_curve = 0.f;
|
m_curve = 0.f;
|
||||||
m_curve_angles.clear();
|
m_curve_angles.clear();
|
||||||
|
m_pressure_buff.clear();
|
||||||
|
m_hsv_jitter.clear();
|
||||||
m_last_kp = 0;
|
m_last_kp = 0;
|
||||||
m_dist = 0.f;
|
m_dist = 0.f;
|
||||||
m_brush = brush;
|
m_brush = brush;
|
||||||
|
|||||||
@@ -83,6 +83,8 @@ public:
|
|||||||
Camera m_camera;
|
Camera m_camera;
|
||||||
ui::Brush m_brush;
|
ui::Brush m_brush;
|
||||||
cbuffer<float, 3> m_curve_angles;
|
cbuffer<float, 3> m_curve_angles;
|
||||||
|
cbuffer<float, 10> m_pressure_buff;
|
||||||
|
cbuffer<glm::vec3, 3> m_hsv_jitter;
|
||||||
StrokeSample m_prev_sample;
|
StrokeSample m_prev_sample;
|
||||||
std::vector<Keypoint> m_keypoints;
|
std::vector<Keypoint> m_keypoints;
|
||||||
std::vector<StrokeSample> m_samples;
|
std::vector<StrokeSample> m_samples;
|
||||||
|
|||||||
Reference in New Issue
Block a user