118 lines
5.6 KiB
Markdown
118 lines
5.6 KiB
Markdown
# 主题素材规格(shiroko)
|
||
|
||
给外部生成工具用的参数表。照着填尺寸/比例/雾度,导出后按「换图清单」替换即可。
|
||
所有尺寸都按 **2× 出图、1× 显示** 写,避免高分屏发虚。
|
||
|
||
## 一、总表
|
||
|
||
| 文件 | 用途 | 画布(生成) | 画布(导出) | 显示尺寸 | 透明 | 体积上限 |
|
||
| --- | --- | --- | --- | --- | --- | --- |
|
||
| `chibi/window.webp` | 人物 | 270 × 920 | 135 × 460 | 高 400px(宽 ≈117) | ✅ 需要 | 40 KB |
|
||
| `props/bike.webp` | 自行车 + 步枪 | 794 × 518 | 397 × 259 | 高 259px(宽 ≈397) | ✅ 需要 | 40 KB |
|
||
| `scene-desktop.webp` | 教室背景(桌面) | 3840 × 2160 | 1920 × 1080 | `cover` 铺满 | ❌ 不需要 | 40 KB |
|
||
| `scene-mobile.webp` | 教室背景(≤900px) | 1440 × 2006 | 720 × 1003 | `cover` 铺满 | ❌ 不需要 | 30 KB |
|
||
| `pattern-dark.svg` | 深色模式平铺纹样 | 240 × 240 | 240 × 240 | 平铺 | ❌ | 2 KB |
|
||
|
||
比例(认准这个,比像素更重要):
|
||
|
||
- 人物 **1 : 3.41**(宽 : 高 ≈ 0.293)
|
||
- 道具 **1.53 : 1**(397 : 259)
|
||
- 桌面背景 **16 : 9**
|
||
- 移动背景 **0.718 : 1**(≈ 9 : 12.5)
|
||
|
||
## 二、人物 `chibi/window.webp`
|
||
|
||
| 项 | 值 |
|
||
| --- | --- |
|
||
| 画布 | 270 × 920 px,透明背景 |
|
||
| 姿势 | 侧后方 3/4 视角、双手背在身后、头略向右(**不要正面直视**) |
|
||
| 脚底 | **贴画布底边**(误差 ±4px),不要留空白 |
|
||
| 头顶 | 贴画布上沿;若画光环,环心必须透明 |
|
||
| 左右余量 | 各留 10~20px,别让手臂被画布裁掉 |
|
||
| 雾度 | RGB 压白 **16%**:`v' = v×(1-0.16) + 255×0.16` |
|
||
| 色彩 | 下表是**压白 16% 之后**的显示值,生成时按 `原色 = (显示值 − 40.8) / 0.84` 反算 |
|
||
|
||
| 部位 | 显示值 | 生成时用 |
|
||
| --- | --- | --- |
|
||
| 头发 | `#c4c3c6` | `#b9b8bb` |
|
||
| 围巾 | `#8abbc6`(青绿,别用纯蓝) | `#8fc1c9` |
|
||
| 西装 / 上衣 | `#565e72` | `#3a4256` |
|
||
| 鞋 | `#4f4f4f` | `#3f3f3f` |
|
||
| 袜 | `#ffffff` | **用 `#ededed`**(纯白会和背景粘在一起,抠图会吃穿) |
|
||
| 光环 | `#8abbc6` 细环 | `#7fd3dc` |
|
||
|
||
要点:
|
||
|
||
- **不能有描边**。平涂色块、无 line art、无渐变。
|
||
- 抠图后检查三处必须透明:**手与背之间**、**两腿之间**、**光环环心**。
|
||
这三处是闭合区域,只从四角抹白是抹不掉的(我们踩过)。
|
||
- 白袜子是 `#ededed` 左右,背景是 `#fdfdfd`,两者只差 16 级——抠图时**不要把阈值开大**,否则袜子会被吃穿。
|
||
|
||
## 三、道具 `props/bike.webp`
|
||
|
||
| 项 | 值 |
|
||
| --- | --- |
|
||
| 画布 | 794 × 518 px,透明背景 |
|
||
| 内容 | 银色/白色城市自行车 + 一把细长步枪斜靠车架 |
|
||
| 朝向 | **车头朝右**(和人物同向) |
|
||
| 地面 | 轮子底线贴画布底部,下方留 12~16px 给接触阴影 |
|
||
| 阴影 | 可以在图内自带一层椭圆软影(不透明度 15~20%,模糊 8~12px) |
|
||
| 雾度 | RGB 压白 **26%**(比人物淡一档,它在人身后) |
|
||
|
||
要点:
|
||
|
||
- 侧视图即可,但不要画成“图标”——轮辐、脚踏、链条这些细节保留,否则缩到 259px 会变成一个圈。
|
||
- 枪要细长、冷色(灰蓝),**不要木色**(会像双管猎枪)。
|
||
|
||
## 四、场景 `scene-desktop.webp`
|
||
|
||
| 项 | 值 |
|
||
| --- | --- |
|
||
| 画布 | 3840 × 2160(16:9),不透明 |
|
||
| 导出 | 1920 × 1080,WebP q82 |
|
||
| 色调 | 灰蓝/暖白,均值亮度 **235~245**,标准差 6~9(几乎是白雾) |
|
||
| 处理 | 整体压白 30~38%,高斯模糊 1.2~1.4px |
|
||
|
||
**构图硬约束(这条最容易翻车):**
|
||
|
||
1. **左侧 0~22% 的前景必须是空地(地板)**,不能有课桌、椅子、书包。
|
||
人物是贴在最上层的独立图层,脚下必须有地面,否则会读成“站在课桌上”。
|
||
2. 课桌、椅子、黑板放在**中部偏右**,因为中间会被卡片完全盖住。
|
||
3. **不要有必须完整露出的元素**(`background-size: cover` 会按视口裁两侧,1080 高的屏裁掉约 5%)。
|
||
4. 不要出现人、文字、水印。自行车也不要画进背景——它要跟着人物一起移动。
|
||
5. 玻璃/窗框这类高频细节会干扰卡片可读性,右侧留白区尽量干净。
|
||
|
||
## 五、换图清单
|
||
|
||
1. 覆盖同名文件(格式 `WebP`,有透明的存 `q88`,场景存 `q82`)。
|
||
2. `static/css/themes/shiroko.css`:
|
||
- 若**显示尺寸不变**:只改三处 URL 的 `?v=`(图片不走 `StaticVersion`,缓存 1 天)。
|
||
- 若显示尺寸变了:改 `--tb-deco-size` 的 `auto 400px`(人) / `auto 259px`(车)。
|
||
3. `internal/conf/static.go` 的 `StaticVersion` +1(CSS 改了必须)。
|
||
4. 重新编译部署(静态资源是编译期 embed,只重启不重编不会变)。
|
||
|
||
### 定位公式(改比例时才需要算)
|
||
|
||
`background-position` 的百分比是相对 **(定位区宽 − 图片宽)**,不是视口宽:
|
||
|
||
```
|
||
实际 left = (视口宽 - 显示宽) × (pos%) + 偏移量
|
||
```
|
||
|
||
当前值(视口 1512 时:人物左沿 173px、车左沿 -55px,两者重叠区由人物遮住):
|
||
|
||
```css
|
||
/* 人物:显示高 400,显示宽 = 400 × 0.293 ≈ 117 */
|
||
left: max(10px, calc(50% - 524px)) bottom 36px;
|
||
/* 车:显示高 259,显示宽 ≈ 397 */
|
||
left: calc(50% - 612px) bottom 20px;
|
||
```
|
||
|
||
## 六、验收(不看代码也能查)
|
||
|
||
1. **白边**:放大 300% 看轮廓,出现 1px 白色描边就是没抠干净。
|
||
2. **闭合区域**:手内侧、腿间、环心应能透出背景色。
|
||
3. **接地**:脚底/轮底离画布底边 ≤ 4px;有阴影时阴影在轮子内侧。
|
||
4. **体积**:人 ≤40KB、车 ≤40KB、场景 ≤40KB(现在分别是 16 / 23 / 19 KB)。
|
||
5. **深色模式**:所有图片在深色下都不显示,不用管。
|