OhMyGame
OhMyGame은 AI로 게임을 만들 수 있는 오픈소스 스튜디오로, 디자인·구축·플레이테스트·출판을 하나의 앱에서 모델 키와 함께 수행합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기No WebAssembly engine: a 3D game engine for the browser with no WebAssembly at all (no WASM, WebAssembly-free, WebAssemblyless) — a game engine without WebAssembly, in plain TypeScript on three.js. Streaming levels, BVH collision, GPU particles, FSR 1, frame generation. Runs on low-end Chromebooks.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗No WebAssembly engine — a 3D game engine for the browser with no WebAssembly in it at all (no WASM, WebAssembly-free, WebAssemblyless): plain TypeScript on three.js. Live demo
A 3D game engine for the browser, written in TypeScript on three.js — with no WebAssembly anywhere in it. It is the engine underneath SANGUINE, a fast first-person shooter built to run on low-end machines like a school Chromebook, taken out on its own: just the engine, none of the game.
Many browser engines that do real physics or heavy geometry lean on WebAssembly: a physics library compiled from C++ or Rust, a mesh optimiser, a navigation library. Arterial does all of its work in plain JavaScript (TypeScript compiled down) and on the GPU, and that buys it a lot:
.wasm file does not start there at all; Arterial only needs JavaScript and WebGL 2..wasm to fetch and compile before
the first frame, and no async instantiation step to orchestrate at start-up. The engine is part of the same
JavaScript bundle as the game and is ready the moment the page is.npm install and
Vite are the whole toolchain.engine/ — the core.
World: entities, an event bus, a level format (LevelFile, plain JSON), loading and saving.StaticChunks): the level is cut into cells, each baked into merged meshes and
collision with hidden faces culled; cells are built as the camera nears them and let go as it leaves.boss:start,
boss:phase, boss:health, boss:defeated[:<id>], boss:reset). The boss itself — model, moves, attacks — is
the game's: an entity that owns a BossEncounter and acts on its state.LevelSet of levels in order (each a file in hand, or a function that fetches or builds
one), loaded by id, and gone on from by an event from anything in a level — level:exit to the next,
level:goto:<id> to a named one — with level:loading / level:loaded / level:complete / levels:finished
announced and reached/finished progress saved as plain data.physics/ — the collision system: a BVH over the baked level, moving bodies, ray casts, capsule tests.
core/ — a fixed-step loop (120 Hz simulation, interpolated rendering), input with pointer lock, persisted settings.
render/ — procedural surface textures and materials (no image files needed), the level material, a procedural sky, an AMD FidelityFX Super Resolution 1 port (EASU + RCAS), an upscaler, frame generation (reprojection), dynamic resolution, a GPU timer, mesh decimation for level-of-detail copies.
entities/ — the engine's own entity types: brush (level geometry), spawn, trigger (event volumes),
light. A game registers its own beside them with registerEntity.
prefabs/geometry — helpers for building placeable pieces out of parts laid out in fractions of their size.
npm install
npm run dev # the example scene: http://localhost:5173
npm run build # type-check and build
The example (example/main.ts) is the smallest useful program: a level loaded from JSON, baked and streamed, a
sky, a smoke stream and bursts of sparks, a camera circling it, and the fixed-step loop driving it all.
import { World, Loop, registerCoreEntities, applySky, prepareLevelMaterial } from './src'
registerCoreEntities()
const world = new World()
prepareLevelMaterial(renderer)
applySky(world.scene)
world.load(level) // a LevelFile: { name, version: 1, entities: [...] }
world.particles.register('sparks', { layers: [{ style: 'streak', count: 24, speed: 9, spread: 0.9, life: 0.6, size: 0.05, color: 0xffc070, gravity: 14 }] })
const loop = new Loop(
(dt) => world.update(dt),
() => {
world.updateLod(camera.position)
world.particles.update(loop.stats.frameMs / 1000, camera)
renderer.render(world.scene, camera)
},
)
loop.start()
A browser with WebGL 2. Dependencies: three and three-mesh-bvh (both MIT).
src/render/fsr1.ts, with AMD's
notice kept).