SUI
SUI

羊貝貝的小屋

Client
solo build
Role
Character Design、3D Modeling、Front-end Dev
Timeline
2026
Category
web app

羊貝貝的小屋是一個 3D 互動網頁,也是一個可以寄羊年電子賀卡系統。

羊貝貝的小屋|Sui's 作品集
羊貝貝的小屋|Sui's 作品集
sui.funkuki.com

主角「羊貝貝」(baaaaa)是一隻約 2 頭身的小羊,住在粉嫩色系的剖面娃娃屋裡,就算沒人操作,牠也會自己寫卡片、吃點心、讀書、午睡、織毛線。訪客可以幫牠換裝,讓牠寫一張賀卡,用 LINE 寄給朋友;收件人拆完信,也能回寄一張自己的小羊卡。這樣就形成一個「寫卡 → 分享 → 收卡 → 回卡」的循環。 Sui 獨立完成整個專案的角色設定、像素版與 3D 造型探索、three.js 建模、角色動態與行為系統、寫卡與收卡的介面流程,以及部署。開發過程大量使用 Claude Code Opus 5.5 協作,Sui 負責定方向、定規格、審視覺,並把整套做法整理成可以重複使用的 Prompt 指南。

專案目標

  1. 作品集展示:用一個能實際操作的小產品,完整呈現角色設計、3D 建模、動態與互動開發的能力。
  1. 節慶傳播:讓收件人「回一張卡」帶進新訪客,形成自然擴散。
  1. 療癒陪伴:小屋本身就是「活的」,什麼都不做也讓人想多看一下。

視覺風格

視覺方向是剖面娃娃屋+粉嫩霧面玩具。所有物件只能從同一份色票(materials.js)取色,整體才不會亂。

部位顏色
牆粉紅 #f8d3cf,牆腳略深 #f3c6c1
地板淺蜂蜜木 #efcf9e,木紋用 canvas 即時繪製
收邊與底座奶油白 #fdf4e6 / #f6e7d2
點綴薄荷綠 #bfe0cc、粉紅 #f5b9c3、暖黃 #f6d58a、葉綠 #8fcf98
文字深咖啡 #4a3a2c
  • 字體:Zen Maru Gothic(圓體標題)、Montserrat(英文小標)
  • 介面:奶油白圓角卡片、柔和陰影
  • favicon:羊貝貝的頭像

技術重點

1. 用程式建模,不用外部 3D 檔

整間小屋和羊貝貝都在程式裡用基本幾何組成(圓角方塊、球、膠囊、圓環),沒有載入任何 .glb 模型。色票和比例都能直接在程式裡統一調整,改了立刻熱重載看到結果。

2. 平滑的下半身網格

身體、短褲和褲管原本是好幾塊幾何拼起來的,接縫很明顯。後來改用 SDF+Marching Cubes 生成一整塊平滑網格,再蒙皮到身體和雙腳的骨架;衣服的分色在 shader 裡依高度決定,看不出接縫。

3. 姿勢與自發動作分開

每個行動只負責設定「目標姿勢」(sheep.pose:坐下程度、手、頭、身體前傾、眼睛、耳朵),角色每一格會平滑過渡到目標,再疊上呼吸、眨眼、耳朵抖動、走路擺動。新增行動時只要描述姿勢,動作自然會是軟的。

4. 狀態機+A* 尋路

brain.js 是一個簡單的狀態機:待機 → 走路 → 做事 → 起身 → 待機。走路時用格子 A* 尋路,避開每件家具宣告的圓形障礙範圍。

5. 可擴充的結構

  • 一件家具一個檔案,匯出 { id, label, action, build() },build() 回傳模型、使用位置和障礙範圍
  • 一個行動一個檔案,匯出 enter / update / exit 等,加進清單後底部按鈕會自動出現
  • 新增鋼琴、彈琴這類內容,不必動到主程式

6. 不用後端的卡片連結

原型把卡片內容編成 base64url JSON 放在網址 #card=… 裡,不需要伺服器。讀取時只保留已知欄位並依字數上限截斷,避免被塞奇怪的資料。正式版會改成存進資料庫,網址只放隨機後綴。

Tech Stack

建置後的 JS 約 165 KB gzip,大部分是 three.js。

1. 前端(核心)

類別技術版本/備註
3DThree.js^0.186(OrbitControls、RoundedBoxGeometry、MarchingCubes)
建置Vite^8.3,HMR 時保留鏡頭角度和模式
語言JavaScript(ES Modules)不用框架,UI 用原生 DOM
樣式CSS手機優先、支援 safe-area

2. 渲染設定

項目設定
相機透視相機,FOV 約 30,接近等角俯瞰
光線暖白半球光+暖色平行光,柔和 PCF 陰影
色調Neutral tone mapping
材質MeshPhysicalMaterial,roughness 約 0.72、metalness 0、微微 sheen,模擬軟膠
貼圖木紋、筆電螢幕、封面大頭照都用 canvas 即時繪製

3. 素材與工具

用途工具
像素版角色Python+Pillow 腳本,輸出 PNG/SVG
概念圖Midjourney (作為配色與擺設參考)
開發Claude Code +瀏覽器即時預覽驗證
部署Vercel,網站路徑 /bestwishes/

Want to work with Sui?