Files
metabuilder/gameengine/packages/seed/package.json
johndoe6345789 7ac5ef1d20 feat(gameengine): Windows/AMD build, SPIRV shaders, spotlight, volumetric beam, FPS flashlight
Build system:
- Fix generate_cmake.py backslash paths and UTF-8 encoding for Windows
- Auto C++20 in conan deps, auto-detect VS install location
- dev_commands.py: add generate, all --run commands, platform-aware bootstrap
- Add assimp to cmake_config.json link libraries
- Fix CMakeUserPresets.json duplicate preset issue

Cross-platform C++:
- UUID generation: Windows rpc.h/UuidCreate with #ifdef _WIN32
- HOME env var fallback to USERPROFILE on Windows
- Shader format detection for D3D12/DXIL Vulkan driver

Shader pipeline (12 new SPIRV shaders):
- Port all Metal shaders to Vulkan GLSL (PBR, shadows, post-FX, compute)
- SDL3 GPU descriptor set convention (set 0-3)
- Combined image samplers for Vulkan compatibility
- Bootstrap-driven shader path rewriting (msl↔spirv automatic per platform)

Rendering features:
- spotlight.setup: generic atomic workflow step, attach to camera or static
- PBR spotlight with cone attenuation, distance falloff, wrap lighting
- Volumetric light beam (16-step ray march through dust/fog in spotlight cone)
- geometry.create_flashlight: procedural flashlight mesh (cylinder + head + lens)
- draw.viewmodel: FPS weapon-style rendering locked to camera view
- model.load: Assimp-based 3D model loader (OBJ/GLB/FBX/BLEND)
- Indoor ambient lighting fix, SSAO bypass for Vulkan clip-space

Performance:
- Frame loop logging suppressed via _in_frame_loop context flag

Assets:
- Real PBR textures from ambientCG (CC0): wood floor, concrete ceiling
- Seed demo: dark room + flashlight beam + Quake-style viewmodel

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 08:33:35 +00:00

137 lines
3.6 KiB
JSON

{
"name": "seed",
"version": "1.0.0",
"description": "FPS demo: room with spinning cube, WASD movement, mouse look, jump. Bullet3 physics.",
"type": "game",
"category": "demo",
"config": {
"gpu": {
"renderer": "auto"
},
"window": {
"width": 1024,
"height": 768,
"title": "Seed Demo",
"resizable": true
},
"camera": {
"fov": 60.0,
"near": 0.1,
"far": 100.0,
"position": [0.0, 1.6, 8.0],
"lookAt": [0.0, 2.5, 0.0]
},
"render": {
"clearColor": [0.05, 0.05, 0.08, 1.0],
"maxFrames": 0,
"targetFps": 60
},
"input": {
"mouseGrab": false,
"mouseSensitivity": 0.3
}
},
"defaultWorkflow": "workflows/seed_game.json",
"workflows": [
"workflows/seed_game.json",
"workflows/frame_tick.json"
],
"scene": [
"scene/default_camera.json"
],
"shaders": [
{
"id": "constant_color",
"backendOrder": ["spirv", "msl"],
"backends": {
"spirv": {
"vertex": "shaders/spirv/constant_color.vert.spv",
"fragment": "shaders/spirv/constant_color.frag.spv"
},
"msl": {
"vertex": "shaders/msl/constant_color.vert.metal",
"fragment": "shaders/msl/constant_color.frag.metal"
}
}
},
{
"id": "textured",
"backendOrder": ["spirv", "msl"],
"backends": {
"spirv": {
"vertex": "shaders/spirv/textured.vert.spv",
"fragment": "shaders/spirv/textured.frag.spv"
},
"msl": {
"vertex": "shaders/msl/textured.vert.metal",
"fragment": "shaders/msl/textured.frag.metal"
}
}
},
{
"id": "shadow_depth",
"backendOrder": ["spirv", "msl"],
"backends": {
"spirv": {
"vertex": "shaders/spirv/shadow_depth.vert.spv",
"fragment": "shaders/spirv/shadow_depth.frag.spv"
},
"msl": {
"vertex": "shaders/msl/shadow_depth.vert.metal",
"fragment": "shaders/msl/shadow_depth.frag.metal"
}
}
},
{
"id": "postfx_fullscreen",
"backendOrder": ["spirv", "msl"],
"backends": {
"spirv": { "vertex": "shaders/spirv/postfx_fullscreen.vert.spv" },
"msl": { "vertex": "shaders/msl/postfx_fullscreen.vert.metal" }
}
},
{
"id": "postfx_bloom_blur",
"backendOrder": ["spirv", "msl"],
"backends": {
"spirv": { "fragment": "shaders/spirv/postfx_bloom_blur.frag.spv" },
"msl": { "fragment": "shaders/msl/postfx_bloom_blur.frag.metal" }
}
},
{
"id": "postfx_bloom_extract",
"backendOrder": ["spirv", "msl"],
"backends": {
"spirv": { "fragment": "shaders/spirv/postfx_bloom_extract.frag.spv" },
"msl": { "fragment": "shaders/msl/postfx_bloom_extract.frag.metal" }
}
},
{
"id": "postfx_composite",
"backendOrder": ["spirv", "msl"],
"backends": {
"spirv": { "fragment": "shaders/spirv/postfx_composite.frag.spv" },
"msl": { "fragment": "shaders/msl/postfx_composite.frag.metal" }
}
},
{
"id": "postfx_ssao",
"backendOrder": ["spirv", "msl"],
"backends": {
"spirv": { "fragment": "shaders/spirv/postfx_ssao.frag.spv" },
"msl": { "fragment": "shaders/msl/postfx_ssao.frag.metal" }
}
},
{
"id": "tessellate",
"backendOrder": ["spirv", "msl"],
"backends": {
"spirv": { "compute": "shaders/spirv/tessellate.comp.spv" },
"msl": { "compute": "shaders/msl/tessellate.comp.metal" }
}
}
],
"bundled": true,
"dependencies": []
}