---
title: "Workmelt"
url: "https://aigamehub.app/zh-tw/games/workmelt-b5072e"
source: "https://github.com/eriknomitch/workmelt"
source_type: "github"
play_url: "https://workmelt.com"
platform: "desktop"
login_required: false
pricing: "free"
origin: "original"
ai_tools: []
game_languages: ["en"]
author: "eriknomitch"
author_handle: "eriknomitch"
category: "動作"
categories: ["action"]
tags: ["browser", "fps", "multiplayer", "threejs", "webgl"]
added: "2026-10-24T02:45:29.827Z"
updated: "2026-10-24T02:46:04.206Z"
locale: "zh-tw"
content_locale: "zh-tw"
---

# Workmelt

一款以 Three.js 和 WebGL2 打造的瀏覽器多人第一人稱射擊遊戲，具備程序化生成的資源與機器人對戰；npm run dev 可在本機伺服器執行，並可於 workmelt.com 遊玩。

## Description

Workmelt 是一款在瀏覽器中執行的第一人稱射擊遊戲，以 Three.js r180 和 WebGL2 打造。所有紋理、網格和動畫都在載入時從程式碼程序化生成，音訊則混合了程序化合成與取樣效果；唯一的執行階段相依性是 three。玩家從對戰開始畫面開始，選擇地圖和機器人駐軍，或等待朋友加入房間並一起準備。控制方式使用 WASD 移動、滑鼠瞄準、左鍵射擊、右鍵或 X 進行 ADS、R 重新裝填、Shift 衝刺、Ctrl 蹲下、Space 跳躍以及 Q/E 傾身；另有專用的觸控板與 ADS 切換選項。圖形預設為首次啟動時校準的自動預設，並有顯示、紋理、著色、後處理和可見性設定的進階分頁。原始碼基於 MIT 授權，從 mshumer/Claude-of-Duty 分支而來。

## Original post

A multiplayer FPS shooter break with your co-workers in the browser

Topics: claude, claude-code, game, game-dev, html, html5-game, shooter, three, threejs

# Workmelt Forked from [mshumer/Claude-of-Duty]([url](https://github.com/mshumer/Claude-of-Duty)) A first-person shooter built in the browser with Three.js r180 and WebGL2. Roughly 55k lines across 13 subsystems, written by a fleet of AI agents under orchestration. Every texture, mesh and animation is generated procedurally at load time from code — no models, no HDRIs, no image files. Audio combines a procedural synthesis layer with sampled sound effects. The only runtime dependency is `three`. ```bash npm install npm run dev # http://127.0.0.1:5273 (override with OW_PORT) ``` The game opens on a **Match Start** screen rather than dropping you mid-firefight: pick a **map**, pick a bot garrison and start on your own, or wait for a friend to join your room and ready up together. Once the match is live, click the canvas to lock the cursor. WASD move, mouse aim, LMB fire, RMB hold to ADS, X to toggle ADS, R reload, Shift sprint, Ctrl crouch, Space jump, Q/E lean, Esc release. **On a trackpad**, aiming down sights has its own settings, because a two-finger click cannot be held while a one-finger click fires. The keyboard bind is the default fix: **X** raises the optic and a second tap lowers it, so aiming needs neither the pointer nor a hold out of the box (**ADS Key** rebinds it). For the mouse itself, **Aim (Mouse)** switches the right button between `hold` — the classic default — and `toggle`. Both are stored per browser. Graphics default to **Auto** per browser profile. On first launch the game estimates the active display cadence, calibrates a Performance/Low/Medium/High/Ultra pipeline, then adjusts internal resolution within that tier to pursue stable p95 frame pacing. Open the pause menu to choose a fixed preset or a target from 30–240 FPS; settings are stored locally and never synchronized in multiplayer. ### Advanced graphics Auto is a starting point, not a ceiling. The pause menu's graphics tabs expose every knob the renderer has, each of which follows the preset until you touch it: **Display** (internal resolution scale up to 200% supersampling, the device-pixel-ratio cap, anti-aliasing, weapon MSAA), **Textures & Detail** (world bake resolution, character bake resolution, anisotropic filtering, parallax occlusion, micro detail, particle and decal budgets), **Shading & Lighting** (cascade count and resolution, shadow distance and density, ambient occlusion, contact shadows, screen-space reflections, volumetrics), **Post-Processing** (bloom, motion blur, ADS depth of field, sharpening, grain, chromatic aberration, vignette, grade strength) and **Visibility** (brightness, auto-exposure lock, exposure key, shadow lift, lamp brightness, FOV). Anything the renderer can take mid-frame is applied as you move it. Anything that is built once at boot — a post pass, a render target, a texture bake — is marked `RESTART`, saved immediately, and applied when you press **Apply & Restart**. The Auto Status row reports the resolution you are actually render
