aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYasutake Yohei <61961825+yasutakeyohei@users.noreply.github.com>2026-10-04 19:21:55 +0900
committerYasutake Yohei <61961825+yasutakeyohei@users.noreply.github.com>2026-10-04 19:21:55 +0900
commit2d5a61b98f9ab25b3a7e5dc5bee11cb98c5156df (patch)
tree598a166f7cb29844ea94753201cbbcd72e888978
parent33557794b50815ff43204a81dfce71d3d95fa1c3 (diff)
bluebey-studio: まえがみをM字(富士額)の形に
中央の尖り(未亡人の尖り)と左右のこめかみの山、その間の後退という3山2谷のM字にした。
-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に分けた髪です。「たかさ」で生え際を目の中心あたりまで下げられます。'
+ '「髪を目の前に出す」を切ると、髪が目の後ろに回ります。'));