lowpoly-3d
Verified @yijun/lowpoly-3d
With improvements from @siosan
Use it in Cohub
Paste this into your agent's chat — it fetches the skill and follows it.
Use the skill: lowpoly-3d. Run `npx -y @neta-art/neta-search-cli@latest skills use @yijun/lowpoly-3d --via site` and follow what it prints. Read its complete output, redirecting it to a temporary file first if necessary, and resolve relative paths from the skill directory it prints.copy
Install from a terminal
npx -y @neta-art/neta-search-cli@latest skills use @yijun/lowpoly-3dcopy
Summary
Turn one sentence into a low-poly 3D world you can walk into, or a single 3D model you can spin.
Describe a town, castle city, village or ancient capital and get a world to explore on foot in first person, in about 20 seconds. Pick from 11 looks: fantasy, vampire gothic, sci-fi, pirate, seaside, winter, Chinese ancient city, Roman, Japanese shrine town, desert, autumn. Villagers say lines about your own characters and places, and you can collect glowing gems, shoot fireballs at targets, climb towers, and switch day, night, rain or snow. Or make one thing, such as a vehicle, character, building or blocky Minecraft-style model, shown on a turntable with wireframe view and a downloadable 3D file. Works best with a clear theme, a few named characters and place names, and one city per request; free to build, no generation credits.
Improvements from other creators
Siosan @siosan 1 adopted suggestion
SKILL.md
# lowpoly-3d
一句话 → 一个可以走进去的 3D 世界(`.html` 网页)。**第一版用一条命令做完,不需要先读任何别的文件。**
## 第一步:直接跑这条命令(跑之前不要 ls、不要读示例、不要搜模型)
```bash
node SKILL_DIR/scripts/quick.mjs "<用户的原话>" --name "<世界 / 城市名>" --sub "<一句副标题>" --publish
```
约 20 秒:按需求选最接近的打磨过的世界(零穿模)→ 写 `<slug>.json` → build → 自查(穿模 + 页面报错)→ 发布 → 打印一段小结。**看到 `✓` 就直接回复用户**:不用看截图,不用开浏览器检查网页,不用再改。
- **语言**:自动跟随用户原话(有中文就是中文,否则英文);不对就加 `--lang zh|en`。`--name`、`--sub` 和台词用用户的语言写——**其他语言(阿拉伯语、日语、西语……)也一样直接写进去**,能正常显示;只有按钮等界面文字是英文。
- **主题**:从原话自动判断(用户的原话放进命令就行,一般不用写 `--theme`);判断错了再用 `--theme` 指定:`fantasy`(奇幻王城:山顶城堡,默认)`gothic`(吸血鬼 / 哥特夜城:血月大教堂、墓园、观星塔)`space`(科幻 / 太空 / 外星基地:穹顶舱、温室、停机坪、机甲)`pirate`(海盗港湾:海岛木寨、大帆船、灯塔、朗姆酒馆)`seaside`(海港小城:海港要塞、灯塔、渔船)`winter`(冰雪:冰霜堡、篝火广场)`chinese`(唐风古城:含元殿、明德门、大雁塔)`roman`(古罗马 / 希腊:神庙、凯旋门、柏树)`japanese`(日式神社町:鸟居、参道、五重塔,用精细素材,下载约 10 MB)`desert`(沙漠绿洲:沙岩要塞、宣礼塔、土坯房、集市)`autumn`(秋日:丰收磨坊、农庄、粮仓、南瓜田)。每个主题都有自己的主建筑、房前物件、景物、村民造型和台词。
- **布局**(可选):`--pattern hill|river|ring|axis|grid|winding|hamlets`(山城、河畔、环形广场、中轴大街、棋盘街区、沿路村落、田园散村),`--seed N` 换一种排布。**默认是小而精的世界**(城半径约 30 米,房子错落不死板;各主题布局不同:奇幻、哥特是山城(盘山路通到山顶城堡),日式是参道直通神社,冰雪是篝火环形广场,海盗是海岛港城(从码头上岸),科幻是棋盘式基地),打开快、不重复;用户明确要大城、大地图时才加 `--size small|medium|large`。
- **光线和天气**(可选):`--light golden|day|dusk|night|soft`,`--weather clear|rain|snow`。主城堡 / 宫殿名:`--palace "<名字>"`(默认按城市名起)。
- **把用户的设定放进去**(推荐,只写几行):`--people '[{"name":"Queen Lyra","role":"elder","say":["…","…"]}]'`,3–6 个村民,台词写用户设定里的人物、地名、传说。`role`:`merchant farmer baker girl child elder guard mage watchman villager`。台词里有单引号(如 it's)时,写进文件再用 `--people @people.json`。
- **`--publish`**:在 Neta 上(有 `/mods/neta/neta`)发布成作品,打印作品卡片和 3 个下一步按钮(两段 `<interaction-json>…</interaction-json>`),原样放在回复最后,不用再查平台的按钮格式;想自定按钮就在同一条命令里加 `--next '[["<title>","<what the user would say>"], …]'`;在 Cohub 上上传成一个公开链接,把链接给用户。两样都没有时,它会打印本地文件夹路径。**不要自己另找发布方式。**
- 其他任何字段:`--set '{"world":{"lakes":[{"at":[60,-40],"radius":14}]}}'` 或 `--set @extra.json`(字段见 REFERENCE.md)。
## 用户要好几个地方(几个王国的首都、一张地图上的几座城)
**每次回复只做一座城,这是硬规则,用户要「全部」「地图」时也一样。** 原因:新用户只有 100 免费积分,真实用户就是因为一次要做 10 座城,积分花光了也没拿到作品。做法:挑用户最先提到的那一座,用它的设定填 `--name` `--sub` `--people`,跑一次 quick.mjs 就回复。回复里说明先做了哪一座、其余的可以一座一座加(每座约 20 秒),用用户的语言写,把下一座作为第一个可以继续的方向(在 Neta 上用 `--next '[["<next place>","<what the user would say>"]]'`)。不为其他城写任何东西,不做地图页。(同一轮里第二次用 quick.mjs 建别的城会被拒绝。)
## 用户要「可玩的 3D 游戏」(任务、剧情步骤、第三人称、开门、坐车……)
**还是先用 quick.mjs 出一个能走进去的世界**,不要自己从头写 Three.js 游戏(真实用户就是这样把积分全花完、什么都没拿到)。世界里已经能玩的:第一人称行走和跑跳、和 NPC 对话(`--people` 的台词可以写成任务提示)、收集 10 颗发光宝石、火球打靶、登塔看风景、手机摇杆。回复里用用户的语言说清楚:这些已经能玩;用户列的步骤里哪些还不支持(第三人称、进屋、坐车等),作为下一步。
## 需求里除了世界还有别的(剧本、分镜、视频脚本、建模 / 引擎教程、代码……)
先用 quick.mjs 做世界(这是能马上看到的东西),然后在**同一条回复里用几句话简短回答**其余部分(比如 5–8 行的分镜要点),不要另外写长文件、长剧本或代码,也不要为此再调用工具。最后问用户要不要展开哪一部分。真实用户就是在世界发布之后,agent 去写长篇制作文档时把积分用完的。
## 不是一个世界:做一个 3D 东西(一辆车、一个角色、一座建筑、方块 / 体素模型、要 .glb)
同样一条命令,加 `--object`。出来的是一个 3D 模型查看页:放在展台上 360° 自动转,可以拖动旋转、滚轮缩放,右下角显示三角面数和文件大小,有「线框」和「下载 .glb」按钮;`.glb` 文件也会单独保存在同一个文件夹(发布时一起发布)。
1. **库里有的常见东西**(帆船、风车、机甲、石灯笼、推车……):直接跑,自动从 1,800 多个模型里挑最接近的:
`node SKILL_DIR/scripts/quick.mjs "<用户的原话>" --object --name "<名字>" --publish`
找不到合适的,或者用户要方块 / 体素 / Minecraft 风格,它会让你改用下面的 `--blocks`(并列出相近的库模型,可以用 `--model <id>` 指定)。
2. **定制的东西 / 方块风格**:先写一个方块文件,再跑一次(`--blocks @blocks.json`)。**不要先在脑子里设计细节**,直接写 15–40 行,先出第一版:
```json
{ "mirror": "x", "blocks": [
["#55585e", 0,1,-6, 3,1,6],
["#7a7f88", 0,2,-6, 4,5,-1],
["#6b6f77", 0,2,1, 4,6,6],
["#ffd25c", 3,3,7, 4,4,7, {"glow": 1.2}],
["#2a2a2e", 5,0,-5, 5,2,-3], ["#2a2a2e", 5,0,3, 5,2,5]
]}
```
- 每行 `[颜色, x0,y0,z0, x1,y1,z1]`:把这个范围内的每一格(1 格 = 1 个方块)都填满;只写一个点 `[颜色, x,y,z]` 就是单格。y 朝上、从 0 开始,正面朝 +z。
- `"mirror": "x"`:只写 x ≥ 0 的一半,自动对称到另一边(车、人、房子都对称,省一半)。
- 后写的覆盖先写的;颜色写 `"air"` 是挖空(窗户、车斗)。`{"glow": 1}` 发光(灯、岩浆、屏幕)。
- 大小随意(一般 10–30 格长),会自动缩放到展台上;每格自动带明暗和细微色差,看起来就是一块块方块。
3. 和世界一样:看到 `✓` 就回复,只写命令在 `for the reply` 里列出的内容(三角面数、文件大小、查看器功能)。用户要改颜色 / 形状:改 blocks 文件重跑。
两样都提了(世界 + 某个东西):先用 quick.mjs 做世界,再把那个东西用 `--set` 加成主地标。要做成精细的摆件场景(小岛、展台布景、多个物体)才读 `REFERENCE.md` 的「通用做法」「搭建法则」,写 JSON → `build.mjs`。
## 回复之后,用户要改
- 改名字、台词、主题、布局、光线:**重跑 quick.mjs**,加上对应的参数(约 20 秒),比手改 JSON 快。
- 要 quick.mjs 做不到的(自己摆河、湖、山、某个具体建筑或模型):改它生成的 `<slug>.json`,然后 `node SKILL_DIR/scripts/build.mjs <slug>.json <slug>.html`。这时才读 `REFERENCE.md` 里**用得上的那一节**,模型用 `find-models.mjs` 搜。
- 最多改 2 轮。不要改 `template/` 引擎代码,不要自己写截图或测试脚本,不要反复调光线。
## 交付
- 交付物是网页:`<slug>.html` + 旁边的 `<slug>.assets.js`。
- `--publish` 已经发布好了:Neta 上把作品卡片原样放在回复最后,Cohub 上给出它打印的链接。都没有时给出文件夹路径就结束。
- 自查截图(`*-check-*.png`)只给自己看,不交给用户。
## 规则
- **只需要一个输入:主题。** 用户说了想要什么就直接做到交付,中途不发问卷、不逐项确认。完全没说时只问一次「想要什么样的世界」。
- **第一版就是交付。** quick.mjs 出来的东西和需求有出入(少了某样建筑、某个细节)也先回复,把可以补的写成下一步,等用户说了再改。不要在第一轮里自己改 JSON、加模型、探坐标、反复截图。
- **发布后不要验证**:不要 curl 或用浏览器打开发布出来的页面(Neta 页面是外壳,截图要 1–2 分钟,也看不出东西),quick.mjs 已经检查过了。
- **省积分**:新用户只有很少的免费积分,大部分花在你读文件和来回调用上。第一版控制在 **2–3 次工具调用**以内:读这份文件 → quick.mjs → 回复(做单个东西时多一次:写 blocks 文件)。不要 ls,不要读 `scripts/` 源码、REFERENCE.md、示例 JSON、`assets/`、`template/`;不要另外截图、开浏览器、做缩略图或改生成的 HTML。
- 世界本身不花生成积分。会花积分的事(生成背景音乐、用 meshy 做 3D 模型)先问用户,不问就不做。
- 回复用用户的语言,简短说明做了什么、怎么玩。**只写 quick.mjs 在 `for the reply` 里列出的内容**(地标、村民、动物、操作方式),不要编世界里没有的东西或功能;不要把自查截图发给用户。最后给 2–3 个可以继续的方向(再加一座城、换成夜景、把用户设定里的角色放进去……)。
## 不在范围内(Out of scope)
- 不改 Skill 自己的文件(`template/`、`scripts/`、`assets/`)。
- 不删用户已有的文件。
- 不改世界设定(世界名、配置、角色卡),只做这个 3D 作品。
Show more