aboutsummaryrefslogtreecommitdiffhomepage
path: root/public
diff options
context:
space:
mode:
Diffstat (limited to 'public')
-rw-r--r--public/bluebey-studio/src/faceArt.js19
-rw-r--r--public/bluebey-studio/src/panel.js2
2 files changed, 11 insertions, 10 deletions
diff --git a/public/bluebey-studio/src/faceArt.js b/public/bluebey-studio/src/faceArt.js
index 6a870fa..fab975a 100644
--- a/public/bluebey-studio/src/faceArt.js
+++ b/public/bluebey-studio/src/faceArt.js
@@ -867,11 +867,11 @@ function drawHeadCover(ctx, spec, limits) {
const halfSpan = width / 2;
const boundary = (x) => {
const t = clamp((x - cx) / halfSpan, -1, 1);
- // まえがみ: falls towards the cheeks with a needle pulled down at the centre.
+ // まえがみ: 富士額 / M字 (a widow's peak).
if (shape === 'fringe') {
- const sweep = 420 * t * t;
- const needle = 500 * Math.max(0, 1 - Math.abs(t) * 6);
- return base - 100 + sweep + needle;
+ const m = (1 + Math.cos(2 * Math.PI * t)) / 2;
+ const peak = Math.max(0, 1 - Math.abs(t) * 3);
+ return base + 300 * m + 160 * peak;
}
// はちわれ: the same V upside down - a widow's peak.
if (shape === 'fringe-up') return base - 320 * Math.max(0, 1 - Math.abs(t) * 1.5);
@@ -958,12 +958,13 @@ export function drawHeadCoverWrap(ctx, spec, layout) {
const cx = layout.offsetX + span * 0.5 + clamp(spec.offsetX ?? 0, -600, 600);
const vBound = (x) => {
const t = clamp((x - cx) / half, -1, 1);
- // まえがみ: the hair falls towards the cheeks on both sides (a strong
- // concave sweep) with a narrow needle pulled down at the centre of the head.
+ // まえがみ: 富士額 / M字 (a widow's peak). The hairline comes down at the
+ // centre (the peak) and at the temples, with the corners between receded -
+ // the three peaks and two valleys of an "M". `t` is -1..1 across the front.
if (shape === 'fringe') {
- const sweep = 0.30 * t * t;
- const needle = 0.42 * Math.max(0, 1 - Math.abs(t) * 6);
- return base + sweep + needle;
+ const m = (1 + Math.cos(2 * Math.PI * t)) / 2; // peaks at t = 0, +-1
+ const peak = Math.max(0, 1 - Math.abs(t) * 3); // sharper central point
+ return base + 0.26 * m + 0.12 * peak;
}
// はちわれ: the same V upside down - a widow's peak.
if (shape === 'fringe-up') return base - 0.18 * Math.max(0, 1 - Math.abs(t) * 1.5);
diff --git a/public/bluebey-studio/src/panel.js b/public/bluebey-studio/src/panel.js
index 3c2dc15..5a231f6 100644
--- a/public/bluebey-studio/src/panel.js
+++ b/public/bluebey-studio/src/panel.js
@@ -1121,7 +1121,7 @@ export function buildPanel(app, root) {
});
headMarkBox.add(headMarkColor.el);
headMarkBox.add(headMarkColor2.el);
- headMarkBox.add(hint('「かぶせ」は頭にかぶせる丸い髪、「まえがみ」は中央が高くほっぺ側へ下がる前髪、'
+ headMarkBox.add(hint('「かぶせ」は頭にかぶせる丸い髪、「まえがみ」は中央とこめかみが下がるM字(富士額)の前髪、'
+ '「はちわれ」は中央が鋭く持ち上がった生え際、「カーブ」はドラえもんのように単純にカーブした髪、'
+ '「わけめ」は7:3に分けた髪です。「たかさ」で生え際を目の中心あたりまで下げられます。'
+ '「髪を目の前に出す」を切ると、髪が目の後ろに回ります。'));