Ploy3D是一个基于JavaScript、WebAssembly、WebGPU的国产自研3D引擎。可以在Deno运行时下作为本机应用运行,也可以在支持WebGPU的浏览器环境下运行。当然,在不支持WebGPU的浏览器环境下(如移动端微信),Ploy3D可降级为WebGL2.0运行。


| 预览 | 链接 | 预览 | 链接 |
|---|---|---|---|
![]() | 角色渲染 | ![]() | 倾斜摄影模型 |
![]() | 骨骼蒙皮动画 | ![]() | GIS地图 |
![]() | 后期特效 | ![]() | GIS+倾斜摄影模型 |
![]() | GIS+矢量瓦片 |
本存储库代码基于MIT协议开源。注意,项目依赖的PLOYCLOUD内核为商业软件,请在同意其有关使用条款的前提下使用。
MacOS : curl -fsSL https://deno.land/install.sh | sh
Linux : curl -fsSL https://deno.land/install.sh | sh
Windows : irm https://deno.land/install.ps1 | iex
MacOS : brew install sdl2
Linux : sudo apt install libsdl2-dev
git clone https://github.com/littledivy/deno_sdl2
tsc --declaration true --emitDeclarationOnly true sdl2.ts
# 1、必要时清除外部依赖缓存(请手动删除Deno缓存目录)
deno info
npm cache clean --force
# 2、输出引擎ES6模块的js文件(输出到./dist/esm/路径)
tsc -p ./
# 3、输出引擎ES6模块的.d.ts文件(输出到./dist/esm/路径)
tsc --declaration true --emitDeclarationOnly true --removeComments false -p ./tsconfig.json
# 4、生成API文档
npm install -g typedoc typedoc-plugin-markdown
cd ./docs
npx typedoc --plugin typedoc-plugin-markdown --options ./typedoc.json
deno run --allow-env --allow-read --allow-write --allow-net --allow-ffi --unstable-ffi --unstable-webgpu --unstable-sloppy-imports ./native.js
msdf-atlas-gen -font simhei.ttf -charset chinese.txt -format png -imageout simhei.png -json simhei.json
# 不能直接使用HDR贴图直接压缩生成MIPMAP,原理是不同的
# 使用我们定制修改的CMGEN工具生成,会同步生成球谐系数文���
# 生成后使用PVRTexTool压缩为我们引擎支持的BASISU ETC1S UINT SRGB KTX2格式
# 压缩时不要勾选Generate MIPMaps,工具会在原MIPMaps各级内容上压缩
# 我们修改了cmgen的源码实现,使--format=ktx时,默认使用equirect投影而非cube的投影
cmgen --type=equirect --format=ktx --size=1024 --deploy=.\noon_grass_2k .\noon_grass_2k.hdr
# 单独生成球谐系数
cmgen --sh-shader --sh-irradiance --sh-output=sh.txt color_box.hdr
笛卡尔坐标系:使用X轴朝右,Y轴朝上,Z轴朝外的右手坐标系(与WebGL,ThreeJS,Filament相同);
相机观察方向:默认状态下相机朝屏幕里观察对象,所以观察向量为相机空间Z-方向。
模型坐标系:与笛卡尔坐标系一样采样右手坐标系(与GLTF相同),左手坐标系模型导入时须转换为右手坐标系;
切线空间:与笛卡尔坐标系一样采样右手坐标系(主流选择);
NDC空间(WebGPU):使用X轴朝右,Y轴朝上,Z轴朝里的左手坐标系。左下角[-1, -1],右上角[1, 1],Z值范围[0, 1]。
NDC空间中,Z值近0远1,Z数值大部分精度范围被用在靠近相机近的部分。翻转Z轴后,Z轴朝外(变成右手坐标系,WebGL);
NDC空间(WebGL):使用X轴朝右,Y轴朝上,Z轴朝外的右��坐标系。左下角[-1, -1],右上角[1, 1],Z值范围[-1, 1]。
引擎所用相机->裁剪变换矩阵,裁剪空间Z值范围[近1, 远0],在WebGL着色器中需要将Z值转换为[近1, 远-1]。
图像空间(WebGPU,视窗画布、帧缓存、视口、纹理采样)Y轴向下,左上角(0, 0),(0, 0)为纹理内存最低地址;
空间下标:世界空间w,观察空间v,裁剪空间c,NDC空间n