From 0c4b5e5c045092e650ca3fef8489d9823bf9b626 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Sun, 19 Oct 2025 13:31:54 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=E3=82=A6=E3=82=A9=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E3=83=BC=E3=83=9E=E3=83=BC=E3=82=AF=E3=82=92repeat=E3=81=97?= =?UTF-8?q?=E3=81=9F=E9=9A=9B=E3=81=AB=E3=83=9E=E3=83=BC=E3=82=B8=E3=83=B3?= =?UTF-8?q?=E3=81=8C=E5=90=84=E3=82=A6=E3=82=A9=E3=83=BC=E3=82=BF=E3=83=BC?= =?UTF-8?q?=E3=83=9E=E3=83=BC=E3=82=AF=E3=81=94=E3=81=A8=E3=81=AE=E3=83=9E?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=83=B3=E3=81=A8=E3=81=AA=E3=81=A3=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=AA=E3=81=84=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../image-effector/fxs/watermarkPlacement.ts | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/frontend/src/utility/image-effector/fxs/watermarkPlacement.ts b/packages/frontend/src/utility/image-effector/fxs/watermarkPlacement.ts index 6a9c576c54..28aa40931f 100644 --- a/packages/frontend/src/utility/image-effector/fxs/watermarkPlacement.ts +++ b/packages/frontend/src/utility/image-effector/fxs/watermarkPlacement.ts @@ -110,15 +110,25 @@ void main() { // アライメントに基づく中心で回転 vec2 q = rectCenter + rot(-theta) * (p - rectCenter); - // タイルサイズ(ウォーターマーク + マージン)で正規化してUV座標に変換 + // タイルサイズ(ウォーターマーク + マージン)で正規化 vec2 tile = wmSize + margin * 2.0; - vec2 uvWm = q / tile; + vec2 tileUv = q / tile; - // マージン部分を考慮してUVをオフセット・スケール - uvWm = (uvWm * tile - margin) / wmSize; + // タイル内のローカル座標(0..1)を取得 + vec2 localUv = fract(tileUv); - // テクスチャのWRAP_REPEATにより自動的にタイル化される - wmCol = texture(u_watermark, uvWm); + // ローカル座標をピクセル単位に変換 + vec2 localPos = localUv * tile; + + // マージン領域内かチェック + bool inMargin = any(lessThan(localPos, margin)) || any(greaterThanEqual(localPos, margin + wmSize)); + + if (!inMargin) { + // ウォーターマーク領域内: UV座標を計算 + vec2 uvWm = (localPos - margin) / wmSize; + wmCol = texture(u_watermark, uvWm); + } + // マージン領域の場合は透明(wmCol = vec4(0.0))のまま } else { // アライメントと回転に従い一枚だけ描画 vec2 q = rectCenter + rot(-theta) * (p - rectCenter);