Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧩 we-scene:在浏览器里原样跑 Wallpaper Engine 场景壁纸

Steam 工坊 40 万张 Wallpaper Engine 场景壁纸的浏览器原生渲染引擎 + HLSL→GLSL 实时转译器。

Wallpaper Engine 的 scene.pkg 是编译后的特效程序:图层、父子层级、效果链、HLSL 着色器、视频纹理全打包在里面。这个项目把它们全部解开,在你的浏览器 GPU 上原汁原味重新渲染——不是录屏,不是截图,是每一帧真·执行原作者的 shader。

拿来即用:喂一个 scene.pkg,还你一个会动的 WebGL 画面。

✨ 核心能力

模块 能力
src/pkg/container.js scene.pkg 容器解析(PKGV 全版本),UTF-8 条目名(中文场景不白屏)
src/pkg/texture.js TEX 纹理解码:ARGB8888 / RGB888 / RGB565 / DXT1 / DXT3 / DXT5 / RG88 / R8 / LZ4,PNG/JPEG,视频容器(TEXV 内嵌 MP4)
src/render/hlsl2glsl.js HLSL→GLSL 转译器:#include/#define/#if 预处理、combo 语义展开、行向量 mul、标量广播、隐式 int→float、精度统一——独立可复用
src/render/renderer.js 通用 pass 管线:copy → 效果链(FBO 乒乓)→ 合成,与 WE 引擎同构
src/scene/parse.js 场景解析:父子层级世界坐标合并、效果链、parallaxDepth 视差
src/scene/effects-parse.js 效果 material 链解析(effect.json → materials → passes)

🚀 快速开始

node cli/serve.mjs
# 打开 http://localhost:8123/demo/?id=<WE工坊文件夹id>
# 例如:http://localhost:8123/demo/?id=<你的WE工坊文件夹id>

演示页左上角显示真实渲染帧率;demo/diagnostic.html 可检测 WebGL 是显卡还是 CPU 软件渲染(场景卡顿的头号元凶)。

作为库使用:

import { parsePkg, getEntry } from './src/pkg/container.js'
import { parseScene } from './src/scene/parse.js'
import { resolveEffectChain } from './src/scene/effects-parse.js'
import { createRenderer } from './src/render/renderer.js'

const pkg = parsePkg(bytes)
const scene = parseScene(JSON.parse(utf8(getEntry(pkg, 'scene.json'))), null)
const renderer = createRenderer(canvas, {
  shaderResolver: async (rel) => utf8(getEntry(pkg, rel)) // 或你自己的 shader 源供给
})
// 加载纹理后:
renderer.render(scene, textures, width, height, time)

单独用转译器:

import { hlsl2glsl } from './src/render/hlsl2glsl.js'
const glsl = hlsl2glsl(hlslSource, 'frag', { MY_COMBO: 1 }, async (f) => includeSource)

🛠️ 踩过的坑(都修了,开源出来免你再踩)

  • 不完整 mip 链采样恒黑:WE 容器可能只存部分 mip 级,WebGL 下纹理不完整采样返回纯黑——上传基础级 + generateMipmap 补齐;
  • HLSL 隐式类型转换:vec3 - 1、1 - g_Rough、smoothstep(.., 1, ..) 在 GLSL 全部非法,转译器按声明类型精确补 .0;
  • 行向量 mul 语义:mul(a, b) 自动转置为列向量语义;
  • 标识符保护:diffx1 * diffy2 不会被误伤成 diffx1.0;
  • 父子层级:WE 子对象坐标相对父级,不合并就部件满天飞;
  • 无纹理效果层:WE 空层是透明的,白兜底会画出纯白方块。

🗺️ 支持矩阵

✅ 2D 场景(图层 + 效果链 + 父子层级 + 视差 + 视频纹理层) 🔜 粒子系统 / 3D 模型 / 组件(时钟、天气)/ 文字对象 / 声音

📦 关联项目

  • dsh-aurora-wallpaper —— 把本引擎接入 DeepSeek Harness 的动态背景插件(本仓库即从中提取)

📄 许可

MIT —— 见 LICENSE。仓库只含代码,不含任何壁纸素材。

About

Wallpaper Engine 场景壁纸浏览器原生渲染引擎 + HLSL→GLSL 转译器(MIT,独立可用)

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages