diff --git a/.gitignore b/.gitignore
index 1fd0ea2e..1b35719f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,20 +1,12 @@
-# VuePress files
-docs/.vuepress/.temp/
-docs/.vuepress/.cache/
-docs/.vuepress/dist/
-
-# Dist files
-lib/
-
-# Test temp files
-**/__fixtures__/.temp/
-
-# Test coverage files
-coverage/
+# vitepress files
+docs/.vitepress/dist/
+docs/.vitepress/cache
+.nojekyll
# Node modules
node_modules/
package-lock.json
+yarn.lock
# MacOS Desktop Services Store
.DS_Store
@@ -27,4 +19,11 @@ package-lock.json
#webgpu
/webgpu/**/index.html
+/webgpu/**/index.pre.html
/webgpu/**/*.idl
+/webgpu/**/*.pre
+
+#editor
+.idea
+.vitepress
+.vscode
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 00000000..3674db73
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,8 @@
+*.md
+*.vue
+dist
+pnpm-lock.yaml
+cache
+template
+temp
+webgpu
\ No newline at end of file
diff --git a/.prettierrc.yml b/.prettierrc.yml
new file mode 100644
index 00000000..81f5cf35
--- /dev/null
+++ b/.prettierrc.yml
@@ -0,0 +1,5 @@
+semi: false
+singleQuote: true
+printWidth: 300
+trailingComma: none
+tabWidth: 4
diff --git a/README.md b/README.md
index da854f22..dfd30935 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,12 @@
# Orillusion
-This is the official doc website of Orillusion, built with [VuePress](https://vuepress.vuejs.org/).
+This is the official doc website of Orillusion, built with [VitePress](https://vitepress.vuejs.org/).
Site content is written in Markdown format located in [docs](https://github.com/Orillusion/orillusion-web/tree/master/docs).
WebGPU specification is written in [Bikeshed](https://tabatkins.github.io/bikeshed) format located in [webgpu](https://github.com/Orillusion/orillusion-web/tree/master/webgpu).
## Writing
-See the [VuePress Markdown Guide](https://v2.vuepress.vuejs.org/guide/markdown.html) for our rules and recommendations on writing and maintaining documentation.
+See the [VitePress Markdown Guide](https://vitepress.vuejs.org/guide/markdown.html) for our rules and recommendations on writing and maintaining documentation.
## Developing
@@ -19,11 +19,17 @@ git clone https://github.com/Orillusion/orillusion-web.git
2. Install dependencies
```bash
-yarn # or npm install
+$ pnpm i
```
3. Start local development environment
```bash
-yarn dev # or npm run dev
+$ pnpm dev
+```
+
+## Build Site
+
+```bash
+$ pnpm build
```
diff --git a/docs/.vitepress/components/Demo.vue b/docs/.vitepress/components/Demo.vue
new file mode 100644
index 00000000..2db93c12
--- /dev/null
+++ b/docs/.vitepress/components/Demo.vue
@@ -0,0 +1,258 @@
+
+
+
+
+
+ WebGPU is not supported in your browser
+ Please upgrade to latest Chrome /Edge
+
+
{{ full ? '>': '<'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/.vitepress/components/Logo.vue b/docs/.vitepress/components/Logo.vue
new file mode 100644
index 00000000..20613eb4
--- /dev/null
+++ b/docs/.vitepress/components/Logo.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/.vuepress/public/images/logo.svg b/docs/.vitepress/components/logo.svg
similarity index 100%
rename from docs/.vuepress/public/images/logo.svg
rename to docs/.vitepress/components/logo.svg
diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts
new file mode 100644
index 00000000..900028e2
--- /dev/null
+++ b/docs/.vitepress/config.ts
@@ -0,0 +1,584 @@
+import { defineConfig } from 'vitepress';
+import { readFileSync, readdirSync } from 'fs';
+type SidebarItem = {
+ text: string;
+ collapsible?: boolean;
+ collapsed?: boolean;
+ items: {
+ text: string;
+ link: string;
+ items?: { text: string; link: string }[];
+ }[];
+}[];
+export default async () =>
+ defineConfig({
+ base: '/',
+ lang: 'zh',
+ title: 'Orillusion',
+ description: '次时代 WebGPU 引擎, 简单易用,永久开源,为 Web3D 提供完善开发工具',
+ lastUpdated: true,
+ ignoreDeadLinks: true,
+ appearance: 'dark',
+ head: [
+ ['link', { rel: 'shortcut icon', type: 'image/png', href: '/images/icons/icon-192.png' }],
+ ['link', { rel: 'dns-prefetch', href: 'https://cdn.orillusion.com' }],
+ ['link', { rel: 'prefetch', href: 'https://registry.npmmirror.com/dat.gui/0.7.9/files/build/dat.gui.module.js' }],
+ ['script', { async: 'true', src: 'https://www.googletagmanager.com/gtag/js?id=G-0H9189CS0W' }],
+ ['meta', { name: 'viewport', content: 'width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no' }],
+ ['meta', { name: 'mobile-web-app-capable', content: 'yes' }],
+ ['meta', { name: 'apple-mobile-web-app-capable', content: 'yes' }],
+ ['link', { rel: 'apple-touch-icon', href: '/images/icons/icon-512.png' }],
+ ['meta', { name: 'theme-color', content: '#242424' }],
+ ['link', { rel: 'manifest', href: '/manifest.json' }]
+ ],
+ locales: {
+ root: { label: '简体中文' },
+ en: { label: 'English', link: 'https://www.orillusion.com/en/' }
+ },
+ themeConfig: {
+ logo: {
+ light: '/images/logo_black.png',
+ dark: '/images/logo_white.png'
+ },
+ outlineTitle: '本页内容',
+ outline: [2, 3],
+ nav: nav(),
+ sidebar: {
+ '/guide/': sidebarGuide(),
+ '/api/': sidebar('', 'api'),
+ '/physics/': sidebar('', 'physics'),
+ '/stats/': sidebar('', 'stats'),
+ '/media-extention/': sidebar('', 'media-extention'),
+ '/particle/': sidebar('', 'particle'),
+ '/graphic/': sidebar('', 'graphic'),
+ '/geometry/': sidebar('', 'geometry'),
+ '/example/': sidebarExample(),
+ '/cdn/': [
+ {
+ text: '3DHub CDN',
+ items: [
+ {
+ text: '认证与授权',
+ link: '/cdn/index.md'
+ },
+ {
+ text: '模型 API',
+ link: '/cdn/models.md'
+ },
+ {
+ text: '分享 API',
+ link: '/cdn/links.md'
+ },
+ {
+ text: '场景 API',
+ link: '/cdn/scenes.md'
+ }
+ ]
+ }
+ ]
+ },
+
+ editLink: {
+ pattern: 'https://github.com/Orillusion/orillusion-web/edit/master/docs/:path',
+ text: '为此页提供修改建议'
+ },
+
+ socialLinks: [
+ {
+ icon: 'github',
+ link: 'https://github.com/Orillusion/orillusion'
+ },
+ {
+ icon: {
+ svg: ' '
+ },
+ link: 'mailto:business@orillusion.com'
+ }
+ ],
+
+ footer: {
+ message: '京ICP备2021027896号 ',
+ copyright: 'Copyright © 2021-Present Orillusion '
+ },
+ // search: {
+ // provider: 'local',
+ // options: {
+ // translations: {
+ // button: {
+ // buttonText: '搜索文档',
+ // buttonAriaLabel: '搜索文档'
+ // },
+ // modal: {
+ // noResultsText: '无法找到相关结果',
+ // resetButtonTitle: '清除查询条件',
+ // footer: {
+ // selectText: '选择',
+ // navigateText: '切换',
+ // closeText: '关闭'
+ // }
+ // }
+ // }
+ // }
+ // },
+
+ algolia: {
+ appId: 'A4SU9IUJ2M',
+ apiKey: '1a3b57b41821e82cafdd80621f042c9c',
+ indexName: 'orillusion',
+ searchParameters: {
+ facetFilters: ['tags:latest']
+ },
+ placeholder: '搜索文档',
+ translations: {
+ button: {
+ buttonText: '搜索文档',
+ buttonAriaLabel: '搜索文档'
+ },
+ modal: {
+ searchBox: {
+ resetButtonTitle: '清除查询条件',
+ resetButtonAriaLabel: '清除查询条件',
+ cancelButtonText: '取消',
+ cancelButtonAriaLabel: '取消'
+ },
+ startScreen: {
+ recentSearchesTitle: '搜索历史',
+ noRecentSearchesText: '没有搜索历史',
+ saveRecentSearchButtonTitle: '保存至搜索历史',
+ removeRecentSearchButtonTitle: '从搜索历史中移除',
+ favoriteSearchesTitle: '收藏',
+ removeFavoriteSearchButtonTitle: '从收藏中移除'
+ },
+ errorScreen: {
+ titleText: '无法获取结果',
+ helpText: '你可能需要检查你的网络连接'
+ },
+ footer: {
+ selectText: '选择',
+ navigateText: '切换',
+ closeText: '关闭',
+ searchByText: '搜索提供者'
+ },
+ noResultsScreen: {
+ noResultsText: '无法找到相关结果',
+ suggestedQueryText: '你可以尝试查询',
+ reportMissingResultsText: '你认为该查询应该有结果?',
+ reportMissingResultsLinkText: '点击反馈'
+ }
+ }
+ }
+ },
+
+ lastUpdatedText: '最后更新',
+
+ docFooter: {
+ prev: '上一篇',
+ next: '下一篇'
+ }
+ },
+ markdown: {
+ lineNumbers: true,
+ attrs: { disable: true }
+ },
+ router: {
+ prefetchLinks: false
+ },
+ vite: {
+ build: {
+ target: 'esnext'
+ }
+ }
+ });
+
+function nav() {
+ return [
+ {
+ text: '文档',
+ activeMatch: '/guide|example/',
+ items: [
+ {
+ text: '教程',
+ link: '/guide/',
+ activeMatch: '/guide/'
+ },
+ {
+ text: '示例',
+ link: '/example/base/AddRemove',
+ target: '',
+ activeMatch: '/example/'
+ }
+ ]
+ },
+ {
+ text: 'API',
+ activeMatch: '/api|physics|media-extention|stats|particle|graphic/',
+ items: [
+ {
+ text: 'Orillusion',
+ items: [
+ { text: 'Core', link: '/api/', activeMatch: '/api/' },
+ { text: 'Physics', link: '/physics/', activeMatch: '/physics/' },
+ { text: 'Media Extention', link: '/media-extention/', activeMatch: '/media-extention/' },
+ { text: 'Stats', link: '/stats/', activeMatch: '/stats/' },
+ { text: 'Particle', link: '/particle/', activeMatch: '/particle/' },
+ { text: 'Graphic', link: '/graphic/', activeMatch: '/graphic/' },
+ { text: 'Geometry', link: '/geometry/', activeMatch: '/geometry/' }
+ ]
+ },
+ {
+ text: 'WebGPU',
+ items: [
+ {
+ text: '规范标准',
+ link: 'https://www.orillusion.com/zh/webgpu.html'
+ },
+ {
+ text: '着色器语言',
+ link: 'https://www.orillusion.com/zh/wgsl.html'
+ },
+ {
+ text: '说明',
+ link: 'https://www.orillusion.com/zh/explainer.html'
+ }
+ ]
+ }
+ ]
+ },
+ // {
+ // text: '3DHub',
+ // link: 'https://3dhub.orillusion.com'
+ // },
+ {
+ text: '论坛',
+ link: 'https://forum.orillusion.com'
+ },
+ {
+ text: 'v0.8',
+ items: [
+ {
+ text: '更新日志',
+ link: 'https://github.com/Orillusion/orillusion/releases'
+ },
+ {
+ text: 'NPM',
+ link: 'https://www.npmjs.com/package/@orillusion/core'
+ },
+ {
+ text: '贡献代码',
+ link: 'https://github.com/Orillusion/orillusion/blob/main/.github/contributing.md'
+ }
+ ]
+ }
+ ];
+}
+
+function sidebarGuide(): SidebarItem {
+ return [
+ {
+ text: '快速入门',
+ collapsible: true,
+ items: [
+ { text: '引擎特点', link: '/guide/index.md' },
+ { text: '安装', link: '/guide/getting_start/install.md' },
+ {
+ text: '初始化引擎',
+ link: '/guide/getting_start/initialization.md'
+ },
+ {
+ text: '绘制立方体',
+ link: '/guide/getting_start/draw_cube.md'
+ },
+ {
+ text: '加载3D模型',
+ link: '/guide/getting_start/load_model.md'
+ },
+ {
+ text: '第一个脚本组件',
+ link: '/guide/getting_start/script.md'
+ }
+ ]
+ },
+ {
+ text: '核心',
+ collapsible: true,
+ items: [
+ { text: '实体与组件', link: '/guide/core/component.md' },
+ { text: 'Object3D', link: '/guide/core/object.md' },
+ { text: 'Scene3D', link: '/guide/core/scene.md' },
+ { text: '坐标变换', link: '/guide/core/transform.md' },
+ { text: '脚本组件', link: '/guide/core/script.md' },
+ { text: 'Engine3D', link: '/guide/core/engine.md' },
+ { text: '配置', link: '/guide/core/config.md' }
+ ]
+ },
+ {
+ text: '图形',
+ collapsible: true,
+ items: [
+ { text: '摄像机', link: '/guide/graphics/camera.md' },
+ { text: '光照', link: '/guide/graphics/lighting.md' },
+ { text: '阴影', link: '/guide/graphics/shadow.md' },
+ { text: '网格', link: '/guide/graphics/mesh.md' },
+ { text: '材质', link: '/guide/graphics/materials.md' },
+ { text: '纹理', link: '/guide/graphics/texture.md' },
+ { text: '图形绘制', link: '/guide/graphics/graphics.md' }
+ ]
+ },
+ {
+ text: '动画',
+ collapsible: true,
+ items: [
+ { text: '骨骼动画', link: '/guide/animation/skeleton.md' },
+ { text: '属性动画', link: '/guide/animation/property.md' },
+ { text: 'Morph动画', link: '/guide/animation/morph.md' }
+ ]
+ },
+ {
+ text: '粒子',
+ collapsible: true,
+ items: [
+ { text: '简介', link: '/guide/particle/Readme.md' },
+ { text: '发射器', link: '/guide/particle/emitter.md' },
+ // { text: '渲染器', link: '/guide/particle/renderer.md' },
+ { text: '基本模块', link: '/guide/particle/baseModule.md' }
+ ]
+ },
+ {
+ text: '物理',
+ collapsible: true,
+ items: [
+ { text: '物理总览', link: '/guide/physics/Readme.md' },
+ { text: '碰撞体', link: '/guide/physics/collisionShape.md' },
+ { text: '刚体', link: '/guide/physics/rigidbody.md' },
+ { text: '软体', link: '/guide/physics/softbody.md' },
+ { text: '约束', link: '/guide/physics/constraint.md' },
+ ]
+ },
+ {
+ text: '交互',
+ collapsible: true,
+ items: [
+ { text: '触控', link: '/guide/interaction/pointer.md' },
+ { text: '键盘', link: '/guide/interaction/keyboard.md' },
+ { text: '拾取事件', link: '/guide/interaction/pickfire.md' },
+ { text: '自定义事件', link: '/guide/interaction/event.md' }
+ ]
+ },
+ {
+ text: '媒体扩展',
+ collapsible: true,
+ items: [
+ { text: '安装', link: '/guide/media/Readme.md' },
+ { text: '图片', link: '/guide/media/image.md' },
+ { text: '视频', link: '/guide/media/video.md' },
+ { text: '视频(背景过滤)', link: '/guide/media/chromakey.md' },
+ { text: '音频', link: '/guide/media/audio.md' }
+ ]
+ },
+ {
+ text: '资源',
+ collapsible: true,
+ items: [
+ { text: '资源加载', link: '/guide/resource/Readme.md' },
+ { text: 'GLTF', link: '/guide/resource/gltf.md' }
+ ]
+ },
+ {
+ text: '用户界面',
+ collapsible: true,
+ items: [
+ { text: '简介', link: '/guide/gui/Readme.md' },
+ { text: '图片', link: '/guide/gui/image.md' },
+ { text: '图片组', link: '/guide/gui/imageGroup.md' },
+ { text: '文本', link: '/guide/gui/textfield.md' },
+ { text: '按钮', link: '/guide/gui/button.md' },
+ { text: '投影', link: '/guide/gui/shadow.md' },
+ { text: '多面板示例', link: '/guide/gui/demo.md' }
+ ]
+ },
+ {
+ text: '性能调试',
+ collapsible: true,
+ items: [{ text: '统计面板', link: '/guide/performance/Readme.md' }]
+ },
+ {
+ text: '工具库',
+ collapsible: true,
+ items: [{ text: '数学', link: '/guide/tools/math.md' }]
+ },
+ {
+ text: '高级功能',
+ collapsible: true,
+ items: [
+ {
+ text: 'WebGPU Shader',
+ link: '/guide/advanced/shader/shader_intro.md',
+ items: [
+ {
+ text: 'RenderShader',
+ link: '/guide/advanced/shader/shader_material.md'
+ },
+ {
+ text: '代码引用',
+ link: '/guide/advanced/shader/shader_include.md'
+ },
+ {
+ text: '着色器宏定义',
+ link: '/guide/advanced/shader/shader_define.md'
+ },
+ {
+ text: '着色器变体',
+ link: '/guide/advanced/shader/shader_variants.md'
+ },
+ {
+ text: '着色器内置变量',
+ link: '/guide/advanced/shader/shader_internal.md'
+ },
+ {
+ text: '自定义材质示例',
+ link: '/guide/advanced/shader/shader_unlit.md'
+ },
+ {
+ text: 'ComputeShader',
+ link: '/guide/advanced/shader/shader_compute.md'
+ }
+ ]
+ },
+ {
+ text: '后处理特效',
+ link: '/guide/advanced/posteffect.md',
+ items: [
+ {
+ text: 'DepthOfFieldPost',
+ link: '/guide/advanced/post_depthOfField.md'
+ },
+ {
+ text: 'SSRPost',
+ link: '/guide/advanced/post_ssr.md'
+ },
+ {
+ text: 'OutlinePost',
+ link: '/guide/advanced/post_outline.md'
+ },
+ {
+ text: 'GlobalFog',
+ link: '/guide/advanced/post_globalfog.md'
+ },
+ {
+ text: 'BloomPost',
+ link: '/guide/advanced/post_bloom.md'
+ },
+ {
+ text: 'GTAOPost',
+ link: '/guide/advanced/post_gtao.md'
+ },
+ { text: 'TAAPost', link: '/guide/advanced/post_taa.md' },
+ { text: 'GodRayPost', link: '/guide/advanced/post_godRay.md' }
+ ]
+ },
+ { text: '全局光照', link: '/guide/advanced/gi.md' }
+ ]
+ }
+ ];
+}
+
+function sidebar(root: string = '', packages: string) {
+ const index: { [key: string]: { text: string; link: string }[] } = {};
+ const mds = readFileSync(`${__dirname}/../${packages}/index.md`, 'utf-8').match(/.*.(\n|\r)/g) as string[];
+ let lastTitle = '';
+ for (let line of mds) {
+ if (line.match(/# @/)) continue;
+ else if (line.match(/##\s\w+/)) {
+ lastTitle = line.slice(3, -1).trim();
+ index[lastTitle] = [];
+ } else {
+ let text = line.match(/\w+/);
+ let md = line.match(/\w+\/\w+\.md/);
+ if (md && text) {
+ index[lastTitle].push({
+ text: text[0],
+ link: `${root}/${packages}/${md[0]}`
+ });
+ }
+ }
+ }
+ const sidebar: SidebarItem = [
+ {
+ text: 'Packages',
+ items: [
+ {
+ text: '@orillusion/core',
+ link: '/api/'
+ },
+ {
+ text: '@orillusion/physics',
+ link: '/physics/'
+ },
+ {
+ text: '@orillusion/stats',
+ link: '/stats/'
+ },
+ {
+ text: '@orillusion/media-extention',
+ link: '/media-extention/'
+ },
+ {
+ text: '@orillusion/particle',
+ link: '/particle/'
+ },
+ {
+ text: '@orillusion/graphic',
+ link: '/graphic/'
+ },
+ {
+ text: '@orillusion/geometry',
+ link: '/geometry/'
+ }
+ ]
+ }
+ ];
+ for (let i in index) {
+ sidebar.push({
+ text: i,
+ collapsible: true,
+ collapsed: false,
+ items: index[i]
+ });
+ }
+ return sidebar;
+}
+function sidebarExample(root: string = '') {
+ const index: { [key: string]: string[] } = {
+ Base: [],
+ Animation: [],
+ Graphic: [],
+ GUI: [],
+ Geometry: [],
+ Material: [],
+ Benchmark: [],
+ Lights: [],
+ Loader: [],
+ Particle: [],
+ Compute: [],
+ Physics: [],
+ GI: []
+ };
+
+ const examples: SidebarItem = [];
+ for (let i in index) {
+ const dir = i.toLowerCase();
+ const mds = readdirSync(__dirname + '/../example/' + dir, 'utf-8').filter((v) => /\.md$/.test(v));
+ examples.push({
+ text: i,
+ collapsible: true,
+ collapsed: false,
+ items: mds.map((v: string) => {
+ return {
+ text: v.slice(0, -3),
+ link: `${root}/example/${dir}/${v}`
+ };
+ })
+ });
+ }
+ return examples;
+}
diff --git a/docs/.vitepress/theme/custom.css b/docs/.vitepress/theme/custom.css
new file mode 100644
index 00000000..50965cdf
--- /dev/null
+++ b/docs/.vitepress/theme/custom.css
@@ -0,0 +1,162 @@
+:root {
+ --vp-layout-max-width: 1920px;
+ /* scroll-behavior: smooth; */
+}
+.content-container {
+ width: 90%;
+ max-width: 1440px !important;
+}
+
+@media (max-width: 600px) {
+ .content-container {
+ width: 100%;
+ }
+}
+@media (min-width: 1440px) and (max-width: 1919px) {
+ .VPSidebar {
+ padding-left: 32px !important;
+ width: auto !important;
+ }
+ .VPContent.has-sidebar {
+ padding-left: var(--vp-sidebar-width) !important;
+ padding-right: none !important;
+ }
+ .VPNavBar.has-sidebar .container > .content {
+ padding-left: var(--vp-sidebar-width) !important;
+ padding-right: 32px !important;
+ }
+ .VPNavBar.has-sidebar .curtain {
+ width: calc(100% - var(--vp-sidebar-width) - 32px) !important;
+ }
+ .VPNavBar.has-sidebar .container > .title {
+ width: var(--vp-sidebar-width) !important;
+ }
+}
+.heroDemos {
+ padding: 0 24px;
+ margin-top: 48px;
+}
+.heroDemos > .container {
+ margin: 0 auto;
+ max-width: 1152px;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 2em;
+}
+@media (min-width: 640px) {
+ .heroDemos {
+ padding: 0 48px;
+ }
+}
+@media (min-width: 960px) {
+ .heroDemos {
+ padding: 0 64px;
+ }
+}
+.heroDemos .demo {
+ width: calc(50% - 1em);
+}
+/* .heroDemos .demo+.demo{
+ margin-left: 16px;
+} */
+.heroDemos .demo > iframe {
+ border-radius: 0;
+}
+@media (max-width: 499px) {
+ .heroDemos .demo {
+ width: 100%;
+ }
+ .heroDemos .demo + .demo {
+ margin-left: 0;
+ }
+}
+.VPHome {
+ padding-bottom: 36px !important;
+}
+.vp-doc p {
+ text-align: justify;
+}
+.vp-doc table {
+ width: 100%;
+ display: table;
+ table-layout: auto;
+}
+.details > table {
+ display: block;
+}
+thead,
+tbody {
+ width: 100%;
+}
+tr {
+ width: 100%;
+}
+td,
+th {
+ max-width: 50%;
+ overflow: auto;
+ word-break: normal;
+}
+td > code {
+ word-break: normal;
+}
+
+#type-alias-engineconfig ~ table {
+ table-layout: fixed;
+}
+
+#orillusion-core ~ ul {
+ list-style-type: none;
+ padding: 0;
+ display: flex;
+ flex-wrap: wrap;
+ column-gap: 2em;
+}
+#orillusion-core ~ ul > li {
+ width: calc(33% - 2em);
+ display: flex;
+ margin-top: 8px;
+}
+#orillusion-core ~ ul > li > a {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.aside-curtain {
+ display: none;
+}
+
+.VPNavBar .VPNavBarTranslations span.option-icon {
+ margin-right: 2.5em;
+}
+.VPNavBar .VPNavBarTranslations > .button > .text::before {
+ content: '中文';
+ position: absolute;
+ left: 3.75em;
+}
+.VPNavBar .VPLink > svg {
+ pointer-events: none;
+}
+
+body.loading::before{
+ content: '';
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ border-top: 2px solid var(--vp-c-brand-3);
+ z-index: 1000000;
+ animation: loading 2s ease-in-out 1 forwards;
+ transition: right 0.2s ease-in;
+}
+body.loading.done::before{
+ animation: none;
+}
+@keyframes loading {
+ 0% {
+ right: 100%;
+ }
+ 100% {
+ right: 0;
+ }
+}
diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts
new file mode 100644
index 00000000..1bea3d02
--- /dev/null
+++ b/docs/.vitepress/theme/index.ts
@@ -0,0 +1,60 @@
+// @ts-nocheck
+import DefaultTheme from 'vitepress/theme';
+import Demo from '../components/Demo.vue';
+import Logo from '../components/Logo.vue';
+import './custom.css';
+
+export default {
+ ...DefaultTheme,
+ enhanceApp({ app, router, siteData }) {
+ app.component('Demo', Demo);
+ app.component('Logo', Logo);
+
+ // ga
+ globalThis.dataLayer = globalThis.dataLayer || [];
+ function gtag() {
+ dataLayer.push(arguments);
+ }
+ gtag('js', new Date());
+ gtag('config', 'G-0H9189CS0W');
+
+ // inject esbuild for dev
+ if (globalThis.location && globalThis.location.hostname.match(/localhost/) && !globalThis.esbuild && !globalThis._esbuild) {
+ globalThis._esbuild = true;
+ import('https://cdn.orillusion.com/esbuild.js').then(async (esbuild) => {
+ await esbuild.initialize({
+ wasmURL: 'https://cdn.orillusion.com/esbuild.wasm'
+ });
+ globalThis.esbuild = esbuild;
+ });
+ return;
+ }
+
+ if (globalThis.document){
+ router.onBeforeRouteChange = () => {
+ document.body.classList.add('loading')
+ }
+ router.onAfterRouteChanged = () => {
+ document.body.classList.add('done')
+ setTimeout(()=>document.body.classList.remove('loading', 'done'), 100)
+ if (!globalThis._translation)
+ setTimeout(() => {
+ const host = 'https://www.orillusion.com/en/';
+ globalThis.document.querySelector('.VPNav')?.addEventListener('click', (e) => {
+ if (e.target.href && e.target.href.startsWith(host)) {
+ e.preventDefault();
+ globalThis.localStorage._lang = 'en';
+ globalThis.location.href = e.target.href.replace(host, location.origin + '/en/');
+ }
+ });
+ globalThis._translation = true;
+ });
+ };
+ }
+ // redirect to /en
+ if (globalThis.localStorage && globalThis.localStorage?._lang !== 'zh' && !/googlebot/i.test(globalThis.navigator.userAgent) && !/zh/i.test(globalThis.navigator.language)) {
+ globalThis.localStorage._lang = 'en';
+ globalThis.location.href = globalThis.location.origin + '/en' + globalThis.location.pathname;
+ }
+ }
+};
diff --git a/docs/.vuepress/components/Codepen.vue b/docs/.vuepress/components/Codepen.vue
deleted file mode 100644
index d10868c9..00000000
--- a/docs/.vuepress/components/Codepen.vue
+++ /dev/null
@@ -1,104 +0,0 @@
-
-
- See the Pen {{ title }}
- by {{ name || user }} (@{{user}} )
- on CodePen .
-
-
-
-
-
-
diff --git a/docs/.vuepress/components/NpmBadge.vue b/docs/.vuepress/components/NpmBadge.vue
deleted file mode 100755
index e2d26e9b..00000000
--- a/docs/.vuepress/components/NpmBadge.vue
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/docs/.vuepress/config.ts b/docs/.vuepress/config.ts
deleted file mode 100644
index 66738906..00000000
--- a/docs/.vuepress/config.ts
+++ /dev/null
@@ -1,162 +0,0 @@
-
-
-import { viteBundler } from '@vuepress/bundler-vite'
-import { webpackBundler } from '@vuepress/bundler-webpack'
-import { defineUserConfig } from '@vuepress/cli'
-import { docsearchPlugin } from '@vuepress/plugin-docsearch'
-import { googleAnalyticsPlugin } from '@vuepress/plugin-google-analytics'
-import { registerComponentsPlugin } from '@vuepress/plugin-register-components'
-import { shikiPlugin } from '@vuepress/plugin-shiki'
-import { path } from '@vuepress/utils'
-import { localTheme } from './theme'
-// import { head, navbarEn, navbarZh, sidebarEn, sidebarZh } from './configs'
-
-// import { defineUserConfig } from 'vuepress'
-// import type { DefaultThemeOptions } from 'vuepress'
-// import { path } from '@vuepress/utils'
-import { head, navbar, sidebar } from './configs'
-
-const isProd = process.env.NODE_ENV === 'production'
-console.log(path.resolve(__dirname, './theme'))
-export default defineUserConfig({
- base: '/',
- head,
- // site-level locales config
- locales: {
- '/': {
- lang: 'en-US',
- title: 'Orillusion | Link Uncharted',
- description: 'The Next Generation WebGPU Engine',
- },
- '/zh/': {
- lang: 'zh-CN',
- title: 'Orillusion | 链接未来世界',
- description: 'Orillusion 次时代 WebGPU 引擎, 链接未来世界',
- },
- },
- bundler: isProd ? webpackBundler() : viteBundler(), // use vite in dev, use webpack in prod
- theme: localTheme({
- darkMode: true,
- logo: '/images/logo_black.png',
- logoDark: '/images/logo_white.png',
- repo: 'Orillusion/orillusion-web',
- docsDir: 'docs',
-
- // theme-level locales config
- locales: {
- /**
- * English locale config
- *
- * As the default locale of @vuepress/theme-default is English,
- * we don't need to set all of the locale fields
- */
- '/': {
- // navbar
- navbar: navbar.en,
- // sidebar
- sidebar: sidebar.en,
- // page meta
- editLinkText: 'Edit this page on GitHub',
- },
-
- /**
- * Chinese locale config
- */
- '/zh/': {
- // navbar
- navbar: navbar.zh,
- selectLanguageName: '简体中文',
- selectLanguageText: '选择语言',
- selectLanguageAriaLabel: '选择语言',
-
- // sidebar
- sidebar: sidebar.zh,
-
- // page meta
- editLinkText: '在 GitHub 上编辑此页',
- lastUpdatedText: '上次更新',
- contributorsText: '贡献者',
-
- // custom containers
- tip: '提示',
- warning: '注意',
- danger: '警告',
-
- // 404 page
- notFound: [
- '这里什么都没有',
- '我们怎么到这来了?',
- '这是一个 404 页面',
- '看起来我们进入了错误的链接',
- ],
- backToHome: '返回首页',
-
- // a11y
- openInNewWindow: '在新窗口打开',
- toggleDarkMode: '切换夜间模式',
- toggleSidebar: '切换侧边栏',
- },
- },
- }),
- plugins: [
- docsearchPlugin({
- appId: 'A4SU9IUJ2M',
- apiKey: '1a3b57b41821e82cafdd80621f042c9c',
- indexName: 'orillusion',
- searchParameters: {
- facetFilters: ['tags:v2'],
- },
- locales: {
- '/zh/': {
- placeholder: '搜索文档',
- translations: {
- button: {
- buttonText: '搜索文档',
- buttonAriaLabel: '搜索文档',
- },
- modal: {
- searchBox: {
- resetButtonTitle: '清除查询条件',
- resetButtonAriaLabel: '清除查询条件',
- cancelButtonText: '取消',
- cancelButtonAriaLabel: '取消',
- },
- startScreen: {
- recentSearchesTitle: '搜索历史',
- noRecentSearchesText: '没有搜索历史',
- saveRecentSearchButtonTitle: '保存至搜索历史',
- removeRecentSearchButtonTitle: '从搜索历史中移除',
- favoriteSearchesTitle: '收藏',
- removeFavoriteSearchButtonTitle: '从收藏中移除',
- },
- errorScreen: {
- titleText: '无法获取结果',
- helpText: '你可能需要检查你的网络连接',
- },
- footer: {
- selectText: '选择',
- navigateText: '切换',
- closeText: '关闭',
- searchByText: '搜索提供者',
- },
- noResultsScreen: {
- noResultsText: '无法找到相关结果',
- suggestedQueryText: '你可以尝试查询',
- reportMissingResultsText: '你认为该查询应该有结果?',
- reportMissingResultsLinkText: '点击反馈',
- },
- },
- }
- }
- }
- }),
- googleAnalyticsPlugin({
- id: 'G-0H9189CS0W',
- }),
- registerComponentsPlugin({
- componentsDir: path.resolve(__dirname, './components'),
- }),
- // only enable shiki plugin in production mode
- isProd ? shikiPlugin({ theme: 'dark-plus' }) : [],
- ]
-})
\ No newline at end of file
diff --git a/docs/.vuepress/configs/head.ts b/docs/.vuepress/configs/head.ts
deleted file mode 100644
index 0b659894..00000000
--- a/docs/.vuepress/configs/head.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import type { HeadConfig } from '@vuepress/core'
-export const head: HeadConfig[] = [
- [
- 'link',
- {
- rel: 'icon',
- type: 'image/png',
- href: `/images/icons/icon-192.png`,
- },
- ],
- ['link', { rel: 'manifest', href: '/manifest.webmanifest' }],
- ['meta', { name: 'application-name', content: 'Orillusion' }],
- ['meta', { name: 'apple-mobile-web-app-title', content: 'Orillusion' }],
- [
- 'meta',
- { name: 'apple-mobile-web-app-status-bar-style', content: 'black-translucent' },
- ],
- [
- 'link',
- { rel: 'apple-touch-icon', href: `/images/icons/icon-512.png` },
- ],
- ['meta', { name: 'msapplication-TileColor', content: '#22272e' }],
- ['meta', { name: 'theme-color', content: '#22272e' }],
- ['meta', { name: 'keywords', content: 'webgpu,orillusion,gfx,engine,ecs,3d' }],
- ['script', {src: "https://zz.bdstatic.com/linksubmit/push.js"}],
- ['link', {rel:'prefetch', href: 'https://demo.orillusion.com/ecs/example/asteroids.html'}]
-]
\ No newline at end of file
diff --git a/docs/.vuepress/configs/index.ts b/docs/.vuepress/configs/index.ts
deleted file mode 100755
index 6051c41e..00000000
--- a/docs/.vuepress/configs/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export * as navbar from './navbar'
-export * as sidebar from './sidebar'
-export * from './head'
\ No newline at end of file
diff --git a/docs/.vuepress/configs/navbar/en.ts b/docs/.vuepress/configs/navbar/en.ts
deleted file mode 100755
index 4576880c..00000000
--- a/docs/.vuepress/configs/navbar/en.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import type { NavbarConfig } from '@vuepress/theme-default'
-
-export const en: NavbarConfig = [
- {
- text: 'Guide',
- link: '/guide/'
- },
- {
- text: 'Reference',
- children: [
- {
- text: 'Orillusion',
- children: [
- '/reference/index.md'
- ],
- },
- {
- text: 'WebGPU',
- children: [
- {text:'Specification', link: 'https://www.orillusion.com/webgpu.html'},
- {text:'Shading Language', link: 'https://www.orillusion.com/wgsl.html'},
- {text:'Explainer', link: 'https://www.orillusion.com/explainer.html'},
- ],
- },
- ]
- },
- {
- text: 'Forum',
- link: 'https://forum.orillusion.com',
- }
-]
diff --git a/docs/.vuepress/configs/navbar/index.ts b/docs/.vuepress/configs/navbar/index.ts
deleted file mode 100755
index c0955176..00000000
--- a/docs/.vuepress/configs/navbar/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './en'
-export * from './zh'
diff --git a/docs/.vuepress/configs/navbar/zh.ts b/docs/.vuepress/configs/navbar/zh.ts
deleted file mode 100755
index bd489f24..00000000
--- a/docs/.vuepress/configs/navbar/zh.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import type { NavbarConfig } from '@vuepress/theme-default'
-
-export const zh: NavbarConfig = [
- {
- text: '指南',
- link: '/zh/guide/',
- },
- {
- text: '参考',
- children: [
- {
- text: 'Orillusion',
- children: [
- '/zh/reference/index.md'
- ],
- },
- {
- text: 'WebGPU',
- children: [
- {text:'规范标准', link: 'https://www.orillusion.com/zh/webgpu.html'},
- {text:'着色器语言', link: 'https://www.orillusion.com/zh/wgsl.html'},
- {text:'说明', link: 'https://www.orillusion.com/zh/explainer.html'},
- ],
- },
- ]
- },
- {
- text: '论坛',
- link: 'https://forum.orillusion.com',
- },
- {
- text: '招聘',
- link: '/zh/jobs.md',
- }
-]
diff --git a/docs/.vuepress/configs/sidebar/en.ts b/docs/.vuepress/configs/sidebar/en.ts
deleted file mode 100755
index 7ad58d9c..00000000
--- a/docs/.vuepress/configs/sidebar/en.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import type { SidebarConfig } from '@vuepress/theme-default'
-
-export const en: SidebarConfig = {
- '/guide/': [
- {
- text: 'Guide',
- children: [
- '/guide/README.md',
- '/guide/getting-started.md'
- ],
- },
- ],
- '/reference/': [
- {
- text: 'Orillusion Reference',
- children: [
- '/reference/index.md',
- {
- text: 'WebGPU',
- children: [
- {text: 'Specification', link: 'https://www.orillusion.com/webgpu.html'},
- {text: 'Shading Language', link: 'https://www.orillusion.com/wgsl.html'},
- {text: 'Explainer', link: 'https://www.orillusion.com/explainer.html'},
- ],
- }
- ],
- },
- ],
- // '/reference/webgpu': [
- // {
- // text: 'WebGPU',
- // children: [
- // '/reference/webgpu/index.md',
- // '/reference/webgpu/wgsl.md',
- // ],
- // },
- // ]
-}
diff --git a/docs/.vuepress/configs/sidebar/index.ts b/docs/.vuepress/configs/sidebar/index.ts
deleted file mode 100755
index c0955176..00000000
--- a/docs/.vuepress/configs/sidebar/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './en'
-export * from './zh'
diff --git a/docs/.vuepress/configs/sidebar/zh.ts b/docs/.vuepress/configs/sidebar/zh.ts
deleted file mode 100755
index 2e7610e6..00000000
--- a/docs/.vuepress/configs/sidebar/zh.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import type { SidebarConfig } from '@vuepress/theme-default'
-
-export const zh: SidebarConfig = {
- '/zh/guide/': [
- {
- text: '指南',
- children: [
- '/zh/guide/README.md',
- '/zh/guide/getting-started.md'
- ],
- },
- ],
- '/zh/reference/': [
- {
- text: 'API 参考',
- children: [
- '/zh/reference/index.md',
- {
- text: 'WebGPU',
- children: [
- {text: '规范标准', link: 'https://www.orillusion.com/zh/webgpu.html'},
- {text: '着色器语言', link: 'https://www.orillusion.com/zh/wgsl.html'},
- {text: '说明', link: 'https://www.orillusion.com/zh/explainer.html'},
- ],
- }
- ],
- },
- ],
- // '/zh/reference/webgpu': [
- // {
- // text: 'WebGPU',
- // children: [
- // '/zh/reference/webgpu/index.md',
- // '/zh/reference/webgpu/wgsl.md',
- // ],
- // },
- // ]
-}
diff --git a/docs/.vuepress/public/manifest.webmanifest b/docs/.vuepress/public/manifest.webmanifest
deleted file mode 100755
index dd3961c8..00000000
--- a/docs/.vuepress/public/manifest.webmanifest
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "Orillusion",
- "short_name": "Orillusion",
- "description": "The Next Generation WebGPU Engine",
- "start_url": "/index.html",
- "display": "standalone",
- "background_color": "#fff",
- "theme_color": "#22272e",
- "icons": [
- {
- "src": "/images/icons/icon-192.png",
- "sizes": "192x192",
- "type": "image/png"
- },
- {
- "src": "/images/icons/icon-512.png",
- "sizes": "512x512",
- "type": "image/png"
- }
- ]
-}
diff --git a/docs/.vuepress/styles/index.scss b/docs/.vuepress/styles/index.scss
deleted file mode 100755
index d5fa5c44..00000000
--- a/docs/.vuepress/styles/index.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-:root {
- scroll-behavior: smooth;
-}
diff --git a/docs/.vuepress/theme/components/Home.vue b/docs/.vuepress/theme/components/Home.vue
deleted file mode 100644
index f6f04c9e..00000000
--- a/docs/.vuepress/theme/components/Home.vue
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/.vuepress/theme/components/HomeHero.vue b/docs/.vuepress/theme/components/HomeHero.vue
deleted file mode 100644
index bb859344..00000000
--- a/docs/.vuepress/theme/components/HomeHero.vue
+++ /dev/null
@@ -1,140 +0,0 @@
-
-
-
-
-
-
-
diff --git a/docs/.vuepress/theme/components/Logo.vue b/docs/.vuepress/theme/components/Logo.vue
deleted file mode 100644
index c9ecb9b4..00000000
--- a/docs/.vuepress/theme/components/Logo.vue
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/.vuepress/theme/index.ts b/docs/.vuepress/theme/index.ts
deleted file mode 100644
index d4ff2677..00000000
--- a/docs/.vuepress/theme/index.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import type { Theme } from '@vuepress/core'
-import { defaultTheme } from '@vuepress/theme-default'
-import type { DefaultThemeOptions } from '@vuepress/theme-default'
-import { path } from '@vuepress/utils'
-
-export const localTheme = (options: DefaultThemeOptions): Theme => {
- return {
- name: 'vuepress-theme-local',
- extends: defaultTheme(options),
- layouts: {
- Layout: path.resolve(__dirname, 'layouts/Layout.vue'),
- 404: path.resolve(__dirname, 'layouts/404.vue')
- },
- }
-}
\ No newline at end of file
diff --git a/docs/.vuepress/theme/layouts/404.vue b/docs/.vuepress/theme/layouts/404.vue
deleted file mode 100644
index 319a899d..00000000
--- a/docs/.vuepress/theme/layouts/404.vue
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
404
-
-
{{ getMsg() }}
-
-
{{ homeText }}
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/.vuepress/theme/layouts/Layout.vue b/docs/.vuepress/theme/layouts/Layout.vue
deleted file mode 100644
index e2377092..00000000
--- a/docs/.vuepress/theme/layouts/Layout.vue
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/README.md b/docs/README.md
deleted file mode 100644
index 534ba47e..00000000
--- a/docs/README.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-home: true
-title: Fisrt WebGPU Community
-heroText: Orillusion
-tagline: The Next Generation WebGPU Engine
-heroImage: /images/logo.svg
-actions:
- - text: Get Started
- link: /guide/getting-started.html
- type: primary
- - text: Introduction
- link: /guide/
- type: secondary
-features:
- - title: Approachable
- details:
- A refreshingly simple data-driven 3D engine built in JavaScript. Free and Open Source Forever!
- - title: Versatile
- details:
- An incrementally extensible ECS framework that scales between a library and a full-featured product
- - title: Performant
- details:
- Pure Web Cross-Platform Runtime.
- Blazing Fast WebGPU Renderer.
- Minimal Optimization Efforts
-footerHtml: true
-footer:
-
Released under MIT License
- Copyright © 2021 Orillusion
- 京ICP备2021027896号
----
\ No newline at end of file
diff --git a/docs/api/classes/APatch.md b/docs/api/classes/APatch.md
new file mode 100644
index 00000000..73ea7996
--- /dev/null
+++ b/docs/api/classes/APatch.md
@@ -0,0 +1,678 @@
+# Class: APatch
+
+Components are used to attach functionality to object3D, it has an owner object3D.
+The component can receive update events at each frame.
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`APatch`**
+
+### Constructors
+
+- [constructor](APatch.md#constructor)
+
+### Properties
+
+- [object3D](APatch.md#object3d)
+- [isDestroyed](APatch.md#isdestroyed)
+- [size](APatch.md#size)
+- [blockSize](APatch.md#blocksize)
+- [walk](APatch.md#walk)
+- [obs](APatch.md#obs)
+- [colors](APatch.md#colors)
+- [aPaths](APatch.md#apaths)
+
+### Accessors
+
+- [eventDispatcher](APatch.md#eventdispatcher)
+- [isStart](APatch.md#isstart)
+- [transform](APatch.md#transform)
+- [enable](APatch.md#enable)
+
+### Methods
+
+- [init](APatch.md#init)
+- [start](APatch.md#start)
+- [stop](APatch.md#stop)
+- [onEnable](APatch.md#onenable)
+- [onDisable](APatch.md#ondisable)
+- [onUpdate](APatch.md#onupdate)
+- [onLateUpdate](APatch.md#onlateupdate)
+- [onBeforeUpdate](APatch.md#onbeforeupdate)
+- [onCompute](APatch.md#oncompute)
+- [onParentChange](APatch.md#onparentchange)
+- [onAddChild](APatch.md#onaddchild)
+- [onRemoveChild](APatch.md#onremovechild)
+- [cloneTo](APatch.md#cloneto)
+- [copyComponent](APatch.md#copycomponent)
+- [beforeDestroy](APatch.md#beforedestroy)
+- [destroy](APatch.md#destroy)
+- [onGraphic](APatch.md#ongraphic)
+
+## Constructors
+
+### constructor
+
+• **new APatch**(): [`APatch`](APatch.md)
+
+#### Returns
+
+[`APatch`](APatch.md)
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### size
+
+• **size**: [`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/APatch.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/APatch.ts#L9)
+
+___
+
+### blockSize
+
+• **blockSize**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/APatch.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/APatch.ts#L10)
+
+___
+
+### walk
+
+• **walk**: [`Color`](Color.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/APatch.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/APatch.ts#L11)
+
+___
+
+### obs
+
+• **obs**: [`Color`](Color.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/APatch.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/APatch.ts#L12)
+
+___
+
+### colors
+
+• **colors**: [`Color`](Color.md)[]
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/APatch.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/APatch.ts#L14)
+
+___
+
+### aPaths
+
+• **aPaths**: `number`[]
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/APatch.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/APatch.ts#L16)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[init](ComponentBase.md#init)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[start](ComponentBase.md#start)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onEnable](ComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onDisable](ComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onUpdate](ComponentBase.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[destroy](ComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/APatch.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/APatch.ts#L18)
diff --git a/docs/api/classes/AnimationCurve.md b/docs/api/classes/AnimationCurve.md
new file mode 100644
index 00000000..2b843c5a
--- /dev/null
+++ b/docs/api/classes/AnimationCurve.md
@@ -0,0 +1,418 @@
+# Class: AnimationCurve
+
+Animation Cureve
+has frame list data
+
+### Constructors
+
+- [constructor](AnimationCurve.md#constructor)
+
+### Properties
+
+- [curve](AnimationCurve.md#curve)
+- [serializedVersion](AnimationCurve.md#serializedversion)
+- [preWarpMode](AnimationCurve.md#prewarpmode)
+- [postWarpMode](AnimationCurve.md#postwarpmode)
+- [rotationOrder](AnimationCurve.md#rotationorder)
+
+### Accessors
+
+- [cacheOut](AnimationCurve.md#cacheout)
+- [totalTime](AnimationCurve.md#totaltime)
+- [first](AnimationCurve.md#first)
+- [last](AnimationCurve.md#last)
+
+### Methods
+
+- [addKeyFrame](AnimationCurve.md#addkeyframe)
+- [removeKeyFrame](AnimationCurve.md#removekeyframe)
+- [calculateCacheData](AnimationCurve.md#calculatecachedata)
+- [getValue](AnimationCurve.md#getvalue)
+- [getCurveFramesExtent](AnimationCurve.md#getcurveframesextent)
+- [getKeyCount](AnimationCurve.md#getkeycount)
+- [getKey](AnimationCurve.md#getkey)
+- [unSerialized](AnimationCurve.md#unserialized)
+- [unSerialized2](AnimationCurve.md#unserialized2)
+- [wrapTime](AnimationCurve.md#wraptime)
+- [scaleCurveValue](AnimationCurve.md#scalecurvevalue)
+
+## Constructors
+
+### constructor
+
+• **new AnimationCurve**(`frames?`, `preWarpMode?`, `postWarpMode?`): [`AnimationCurve`](AnimationCurve.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `frames?` | [`Keyframe`](Keyframe.md)[] | `undefined` |
+| `preWarpMode` | [`WrapTimeMode`](../enums/WrapTimeMode.md) | `WrapTimeMode.Repeat` |
+| `postWarpMode` | [`WrapTimeMode`](../enums/WrapTimeMode.md) | `WrapTimeMode.Repeat` |
+
+#### Returns
+
+[`AnimationCurve`](AnimationCurve.md)
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L37)
+
+## Properties
+
+### curve
+
+• **curve**: [`Keyframe`](Keyframe.md)[] = `[]`
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L23)
+
+___
+
+### serializedVersion
+
+• **serializedVersion**: `number`
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L25)
+
+___
+
+### preWarpMode
+
+• **preWarpMode**: `number`
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L27)
+
+___
+
+### postWarpMode
+
+• **postWarpMode**: `number`
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L29)
+
+___
+
+### rotationOrder
+
+• **rotationOrder**: `number`
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L31)
+
+## Accessors
+
+### cacheOut
+
+• `get` **cacheOut**(): `Object`
+
+#### Returns
+
+`Object`
+
+| Name | Type |
+| :------ | :------ |
+| `lhsIndex` | `number` |
+| `rhsIndex` | `number` |
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:33](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L33)
+
+___
+
+### totalTime
+
+• `get` **totalTime**(): `number`
+
+return this curve use total time
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L49)
+
+___
+
+### first
+
+• `get` **first**(): [`Keyframe`](Keyframe.md)
+
+get curve first keframe time
+
+#### Returns
+
+[`Keyframe`](Keyframe.md)
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L56)
+
+___
+
+### last
+
+• `get` **last**(): [`Keyframe`](Keyframe.md)
+
+get curve last keyframe time
+
+#### Returns
+
+[`Keyframe`](Keyframe.md)
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L63)
+
+## Methods
+
+### addKeyFrame
+
+▸ **addKeyFrame**(`keyFrame`): `void`
+
+add keyFrame to curve keyframe last and calcTotalTime
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `keyFrame` | [`Keyframe`](Keyframe.md) | [Keyframe](Keyframe.md) sea: one key frame data |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L71)
+
+___
+
+### removeKeyFrame
+
+▸ **removeKeyFrame**(`keyFrame`): `void`
+
+remove keyframe from this curve
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `keyFrame` | [`Keyframe`](Keyframe.md) | [Keyframe](Keyframe.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:82](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L82)
+
+___
+
+### calculateCacheData
+
+▸ **calculateCacheData**(`cache`, `lhsIndex`, `rhsIndex`, `timeOffset?`): `void`
+
+calculate keyframe list in to timeline
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `cache` | `FrameCache` | `undefined` | FrameCache |
+| `lhsIndex` | `number` | `undefined` | left frame index |
+| `rhsIndex` | `number` | `undefined` | right frame index |
+| `timeOffset` | `number` | `0` | offset time default 0.0 |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L98)
+
+___
+
+### getValue
+
+▸ **getValue**(`time`): `number`
+
+get caculate frames value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `time` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:134](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L134)
+
+___
+
+### getCurveFramesExtent
+
+▸ **getCurveFramesExtent**(`time`): `Object`
+
+get caculate frames extent
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `time` | `number` |
+
+#### Returns
+
+`Object`
+
+| Name | Type |
+| :------ | :------ |
+| `lhsIndex` | `number` |
+| `rhsIndex` | `number` |
+| `time` | `number` |
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:149](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L149)
+
+___
+
+### getKeyCount
+
+▸ **getKeyCount**(): `number`
+
+get has Keyframe list count
+
+#### Returns
+
+`number`
+
+int
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L161)
+
+___
+
+### getKey
+
+▸ **getKey**(`index`): [`Keyframe`](Keyframe.md)
+
+Get a Keyframe Data by Index
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index` | `number` | must int |
+
+#### Returns
+
+[`Keyframe`](Keyframe.md)
+
+Keyframe [Keyframe](Keyframe.md)
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:170](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L170)
+
+___
+
+### unSerialized
+
+▸ **unSerialized**(`data`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `any` |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L174)
+
+___
+
+### unSerialized2
+
+▸ **unSerialized2**(`data`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `Object` |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:188](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L188)
+
+___
+
+### wrapTime
+
+▸ **wrapTime**(`curveT`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `curveT` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:202](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L202)
+
+___
+
+### scaleCurveValue
+
+▸ **scaleCurveValue**(`curve`, `scale`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `curve` | [`AnimationCurve`](AnimationCurve.md) |
+| `scale` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/AnimationCurve.ts:262](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurve.ts#L262)
diff --git a/docs/api/classes/AnimationCurveT.md b/docs/api/classes/AnimationCurveT.md
new file mode 100644
index 00000000..a6e36262
--- /dev/null
+++ b/docs/api/classes/AnimationCurveT.md
@@ -0,0 +1,265 @@
+# Class: AnimationCurveT
+
+Animation Cureve
+has frame list data
+
+### Constructors
+
+- [constructor](AnimationCurveT.md#constructor)
+
+### Properties
+
+- [path](AnimationCurveT.md#path)
+- [attribute](AnimationCurveT.md#attribute)
+- [propertys](AnimationCurveT.md#propertys)
+- [preInfinity](AnimationCurveT.md#preinfinity)
+- [postInfinity](AnimationCurveT.md#postinfinity)
+- [rotationOrder](AnimationCurveT.md#rotationorder)
+- [m\_curves](AnimationCurveT.md#m_curves)
+
+### Accessors
+
+- [totalTime](AnimationCurveT.md#totaltime)
+
+### Methods
+
+- [addKeyFrame](AnimationCurveT.md#addkeyframe)
+- [removeKeyFrame](AnimationCurveT.md#removekeyframe)
+- [getValue](AnimationCurveT.md#getvalue)
+- [getKeyCount](AnimationCurveT.md#getkeycount)
+- [getKey](AnimationCurveT.md#getkey)
+- [formBytes](AnimationCurveT.md#formbytes)
+
+## Constructors
+
+### constructor
+
+• **new AnimationCurveT**(`k?`): [`AnimationCurveT`](AnimationCurveT.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `k` | `number` | `1` |
+
+#### Returns
+
+[`AnimationCurveT`](AnimationCurveT.md)
+
+#### Defined in
+
+[src/math/AnimationCurveT.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveT.ts#L26)
+
+## Properties
+
+### path
+
+• **path**: `string`
+
+#### Defined in
+
+[src/math/AnimationCurveT.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveT.ts#L14)
+
+___
+
+### attribute
+
+• **attribute**: `string`
+
+#### Defined in
+
+[src/math/AnimationCurveT.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveT.ts#L15)
+
+___
+
+### propertys
+
+• **propertys**: `string`[]
+
+#### Defined in
+
+[src/math/AnimationCurveT.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveT.ts#L16)
+
+___
+
+### preInfinity
+
+• **preInfinity**: `number`
+
+#### Defined in
+
+[src/math/AnimationCurveT.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveT.ts#L17)
+
+___
+
+### postInfinity
+
+• **postInfinity**: `number`
+
+#### Defined in
+
+[src/math/AnimationCurveT.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveT.ts#L18)
+
+___
+
+### rotationOrder
+
+• **rotationOrder**: `number`
+
+#### Defined in
+
+[src/math/AnimationCurveT.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveT.ts#L19)
+
+___
+
+### m\_curves
+
+• **m\_curves**: [`AnimationCurve`](AnimationCurve.md)[]
+
+#### Defined in
+
+[src/math/AnimationCurveT.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveT.ts#L20)
+
+## Accessors
+
+### totalTime
+
+• `get` **totalTime**(): `number`
+
+return this curve use total time
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/AnimationCurveT.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveT.ts#L57)
+
+## Methods
+
+### addKeyFrame
+
+▸ **addKeyFrame**(`keyFrame`): `void`
+
+add keyFrame to curve keyframe last and calcTotalTime
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `keyFrame` | [`KeyframeT`](KeyframeT.md) | [Keyframe](Keyframe.md) sea: one key frame data |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/AnimationCurveT.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveT.ts#L65)
+
+___
+
+### removeKeyFrame
+
+▸ **removeKeyFrame**(`keyFrame`): `void`
+
+remove keyframe from this curve
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `keyFrame` | [`KeyframeT`](KeyframeT.md) | [Keyframe](Keyframe.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/AnimationCurveT.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveT.ts#L75)
+
+___
+
+### getValue
+
+▸ **getValue**(`time`): [`CurveValueT`](../types/CurveValueT.md)
+
+get caculate frames value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `time` | `number` |
+
+#### Returns
+
+[`CurveValueT`](../types/CurveValueT.md)
+
+#### Defined in
+
+[src/math/AnimationCurveT.ts:86](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveT.ts#L86)
+
+___
+
+### getKeyCount
+
+▸ **getKeyCount**(): `number`
+
+get has Keyframe list count
+
+#### Returns
+
+`number`
+
+int
+
+#### Defined in
+
+[src/math/AnimationCurveT.ts:146](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveT.ts#L146)
+
+___
+
+### getKey
+
+▸ **getKey**(`index`): [`Keyframe`](Keyframe.md)[]
+
+Get a Keyframe Data by Index
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index` | `number` | must int |
+
+#### Returns
+
+[`Keyframe`](Keyframe.md)[]
+
+Keyframe [Keyframe](Keyframe.md)
+
+#### Defined in
+
+[src/math/AnimationCurveT.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveT.ts#L155)
+
+___
+
+### formBytes
+
+▸ **formBytes**(`bytes`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bytes` | `BytesArray` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/AnimationCurveT.ts:163](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveT.ts#L163)
diff --git a/docs/api/classes/AnimatorComponent.md b/docs/api/classes/AnimatorComponent.md
new file mode 100644
index 00000000..005e068a
--- /dev/null
+++ b/docs/api/classes/AnimatorComponent.md
@@ -0,0 +1,890 @@
+# Class: AnimatorComponent
+
+Components are used to attach functionality to object3D, it has an owner object3D.
+The component can receive update events at each frame.
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`AnimatorComponent`**
+
+### Constructors
+
+- [constructor](AnimatorComponent.md#constructor)
+
+### Properties
+
+- [object3D](AnimatorComponent.md#object3d)
+- [isDestroyed](AnimatorComponent.md#isdestroyed)
+- [timeScale](AnimatorComponent.md#timescale)
+- [jointMatrixIndexTableBuffer](AnimatorComponent.md#jointmatrixindextablebuffer)
+- [playBlendShapeLoop](AnimatorComponent.md#playblendshapeloop)
+- [root](AnimatorComponent.md#root)
+
+### Accessors
+
+- [eventDispatcher](AnimatorComponent.md#eventdispatcher)
+- [isStart](AnimatorComponent.md#isstart)
+- [transform](AnimatorComponent.md#transform)
+- [enable](AnimatorComponent.md#enable)
+- [avatar](AnimatorComponent.md#avatar)
+- [numJoint](AnimatorComponent.md#numjoint)
+- [clips](AnimatorComponent.md#clips)
+- [clipsState](AnimatorComponent.md#clipsstate)
+
+### Methods
+
+- [stop](AnimatorComponent.md#stop)
+- [onEnable](AnimatorComponent.md#onenable)
+- [onDisable](AnimatorComponent.md#ondisable)
+- [onLateUpdate](AnimatorComponent.md#onlateupdate)
+- [onBeforeUpdate](AnimatorComponent.md#onbeforeupdate)
+- [onCompute](AnimatorComponent.md#oncompute)
+- [onGraphic](AnimatorComponent.md#ongraphic)
+- [onParentChange](AnimatorComponent.md#onparentchange)
+- [onAddChild](AnimatorComponent.md#onaddchild)
+- [onRemoveChild](AnimatorComponent.md#onremovechild)
+- [copyComponent](AnimatorComponent.md#copycomponent)
+- [beforeDestroy](AnimatorComponent.md#beforedestroy)
+- [destroy](AnimatorComponent.md#destroy)
+- [init](AnimatorComponent.md#init)
+- [start](AnimatorComponent.md#start)
+- [playAnim](AnimatorComponent.md#playanim)
+- [crossFade](AnimatorComponent.md#crossfade)
+- [playBlendShape](AnimatorComponent.md#playblendshape)
+- [getJointIndexTable](AnimatorComponent.md#getjointindextable)
+- [cloneTo](AnimatorComponent.md#cloneto)
+- [onUpdate](AnimatorComponent.md#onupdate)
+- [updateBlendShape](AnimatorComponent.md#updateblendshape)
+- [getAnimationClipState](AnimatorComponent.md#getanimationclipstate)
+- [cloneMorphRenderers](AnimatorComponent.md#clonemorphrenderers)
+
+## Constructors
+
+### constructor
+
+• **new AnimatorComponent**(): [`AnimatorComponent`](AnimatorComponent.md)
+
+#### Returns
+
+[`AnimatorComponent`](AnimatorComponent.md)
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### timeScale
+
+• **timeScale**: `number` = `1.0`
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L8)
+
+___
+
+### jointMatrixIndexTableBuffer
+
+• **jointMatrixIndexTableBuffer**: [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L9)
+
+___
+
+### playBlendShapeLoop
+
+• **playBlendShapeLoop**: `boolean` = `false`
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L10)
+
+___
+
+### root
+
+• **root**: [`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L28)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### avatar
+
+• `set` **avatar**(`name`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:125](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L125)
+
+___
+
+### numJoint
+
+• `get` **numJoint**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L136)
+
+___
+
+### clips
+
+• `get` **clips**(): [`PropertyAnimationClip`](PropertyAnimationClip.md)[]
+
+#### Returns
+
+[`PropertyAnimationClip`](PropertyAnimationClip.md)[]
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L200)
+
+• `set` **clips**(`clips`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `clips` | [`PropertyAnimationClip`](PropertyAnimationClip.md)[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L186)
+
+___
+
+### clipsState
+
+• `get` **clipsState**(): [`PropertyAnimationClipState`](PropertyAnimationClipState.md)[]
+
+#### Returns
+
+[`PropertyAnimationClipState`](PropertyAnimationClipState.md)[]
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:204](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L204)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onEnable](ComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onDisable](ComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[destroy](ComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[init](ComponentBase.md#init)
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L36)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[start](ComponentBase.md#start)
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L57)
+
+___
+
+### playAnim
+
+▸ **playAnim**(`anim`, `time?`, `speed?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `anim` | `string` | `undefined` |
+| `time` | `number` | `0` |
+| `speed` | `number` | `1` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L64)
+
+___
+
+### crossFade
+
+▸ **crossFade**(`anim`, `crossTime`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `anim` | `string` |
+| `crossTime` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L80)
+
+___
+
+### playBlendShape
+
+▸ **playBlendShape**(`shapeName`, `time?`, `speed?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `shapeName` | `string` | `undefined` |
+| `time` | `number` | `0` |
+| `speed` | `number` | `1` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L114)
+
+___
+
+### getJointIndexTable
+
+▸ **getJointIndexTable**(`skinJointsName`): `number`[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `skinJointsName` | `string`[] |
+
+#### Returns
+
+`number`[]
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L140)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:208](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L208)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[onUpdate](ComponentBase.md#onupdate)
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L240)
+
+___
+
+### updateBlendShape
+
+▸ **updateBlendShape**(`attributes`, `key`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attributes` | `string`[] |
+| `key` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:305](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L305)
+
+___
+
+### getAnimationClipState
+
+▸ **getAnimationClipState**(`name`): [`PropertyAnimationClipState`](PropertyAnimationClipState.md)
+
+Gets the animation clip data object with the specified name
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | Name of animation |
+
+#### Returns
+
+[`PropertyAnimationClipState`](PropertyAnimationClipState.md)
+
+Animation clip data object
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:413](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L413)
+
+___
+
+### cloneMorphRenderers
+
+▸ **cloneMorphRenderers**(): `Object`
+
+#### Returns
+
+`Object`
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:422](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L422)
diff --git a/docs/api/classes/AtlasParser.md b/docs/api/classes/AtlasParser.md
new file mode 100644
index 00000000..5ebdf70b
--- /dev/null
+++ b/docs/api/classes/AtlasParser.md
@@ -0,0 +1,267 @@
+# Class: AtlasParser
+
+## Hierarchy
+
+- `ParserBase`
+
+ ↳ **`AtlasParser`**
+
+### Constructors
+
+- [constructor](AtlasParser.md#constructor)
+
+### Properties
+
+- [format](AtlasParser.md#format)
+- [baseUrl](AtlasParser.md#baseurl)
+- [initUrl](AtlasParser.md#initurl)
+- [loaderFunctions](AtlasParser.md#loaderfunctions)
+- [userData](AtlasParser.md#userdata)
+- [data](AtlasParser.md#data)
+
+### Methods
+
+- [parseString](AtlasParser.md#parsestring)
+- [verification](AtlasParser.md#verification)
+- [parseJson](AtlasParser.md#parsejson)
+- [parseBuffer](AtlasParser.md#parsebuffer)
+- [parseTexture](AtlasParser.md#parsetexture)
+- [parse](AtlasParser.md#parse)
+
+## Constructors
+
+### constructor
+
+• **new AtlasParser**(): [`AtlasParser`](AtlasParser.md)
+
+#### Returns
+
+[`AtlasParser`](AtlasParser.md)
+
+#### Inherited from
+
+ParserBase.constructor
+
+## Properties
+
+### format
+
+▪ `Static` **format**: [`ParserFormat`](../enums/ParserFormat.md) = `ParserFormat.TEXT`
+
+#### Overrides
+
+ParserBase.format
+
+#### Defined in
+
+[src/loader/parser/AtlasParser.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/AtlasParser.ts#L9)
+
+___
+
+### baseUrl
+
+• **baseUrl**: `string`
+
+#### Inherited from
+
+ParserBase.baseUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L11)
+
+___
+
+### initUrl
+
+• **initUrl**: `string`
+
+#### Inherited from
+
+ParserBase.initUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L12)
+
+___
+
+### loaderFunctions
+
+• `Optional` **loaderFunctions**: [`LoaderFunctions`](../types/LoaderFunctions.md)
+
+#### Inherited from
+
+ParserBase.loaderFunctions
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L13)
+
+___
+
+### userData
+
+• `Optional` **userData**: `any`
+
+#### Inherited from
+
+ParserBase.userData
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L14)
+
+___
+
+### data
+
+• **data**: `any`
+
+#### Inherited from
+
+ParserBase.data
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L15)
+
+## Methods
+
+### parseString
+
+▸ **parseString**(`data`): `Promise`\<`void`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `string` |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Overrides
+
+ParserBase.parseString
+
+#### Defined in
+
+[src/loader/parser/AtlasParser.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/AtlasParser.ts#L14)
+
+___
+
+### verification
+
+▸ **verification**(): `boolean`
+
+Verify parsing validity
+
+#### Returns
+
+`boolean`
+
+#### Overrides
+
+ParserBase.verification
+
+#### Defined in
+
+[src/loader/parser/AtlasParser.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/AtlasParser.ts#L28)
+
+___
+
+### parseJson
+
+▸ **parseJson**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `object` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseJson
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L19)
+
+___
+
+### parseBuffer
+
+▸ **parseBuffer**(`buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseBuffer
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L21)
+
+___
+
+### parseTexture
+
+▸ **parseTexture**(`buffer`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+ParserBase.parseTexture
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L23)
+
+___
+
+### parse
+
+▸ **parse**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parse
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L27)
diff --git a/docs/api/classes/AtmosphericComponent.md b/docs/api/classes/AtmosphericComponent.md
new file mode 100644
index 00000000..ec2b2ba1
--- /dev/null
+++ b/docs/api/classes/AtmosphericComponent.md
@@ -0,0 +1,1899 @@
+# Class: AtmosphericComponent
+
+Atmospheric Sky Box Component
+
+## Hierarchy
+
+- [`SkyRenderer`](SkyRenderer.md)
+
+ ↳ **`AtmosphericComponent`**
+
+### Constructors
+
+- [constructor](AtmosphericComponent.md#constructor)
+
+### Properties
+
+- [object3D](AtmosphericComponent.md#object3d)
+- [isDestroyed](AtmosphericComponent.md#isdestroyed)
+- [receiveShadow](AtmosphericComponent.md#receiveshadow)
+- [morphData](AtmosphericComponent.md#morphdata)
+- [instanceCount](AtmosphericComponent.md#instancecount)
+- [lodLevel](AtmosphericComponent.md#lodlevel)
+- [alwaysRender](AtmosphericComponent.md#alwaysrender)
+- [instanceID](AtmosphericComponent.md#instanceid)
+- [drawType](AtmosphericComponent.md#drawtype)
+- [isRenderOrderChange](AtmosphericComponent.md#isrenderorderchange)
+- [needSortOnCameraZ](AtmosphericComponent.md#needsortoncameraz)
+- [isRecievePostEffectUI](AtmosphericComponent.md#isrecieveposteffectui)
+- [skyMaterial](AtmosphericComponent.md#skymaterial)
+
+### Accessors
+
+- [sunX](AtmosphericComponent.md#sunx)
+- [sunY](AtmosphericComponent.md#suny)
+- [eyePos](AtmosphericComponent.md#eyepos)
+- [sunRadius](AtmosphericComponent.md#sunradius)
+- [sunRadiance](AtmosphericComponent.md#sunradiance)
+- [sunBrightness](AtmosphericComponent.md#sunbrightness)
+- [displaySun](AtmosphericComponent.md#displaysun)
+- [relativeTransform](AtmosphericComponent.md#relativetransform)
+- [eventDispatcher](AtmosphericComponent.md#eventdispatcher)
+- [isStart](AtmosphericComponent.md#isstart)
+- [transform](AtmosphericComponent.md#transform)
+- [enable](AtmosphericComponent.md#enable)
+- [geometry](AtmosphericComponent.md#geometry)
+- [material](AtmosphericComponent.md#material)
+- [renderLayer](AtmosphericComponent.md#renderlayer)
+- [rendererMask](AtmosphericComponent.md#renderermask)
+- [renderOrder](AtmosphericComponent.md#renderorder)
+- [materials](AtmosphericComponent.md#materials)
+- [castShadow](AtmosphericComponent.md#castshadow)
+- [castGI](AtmosphericComponent.md#castgi)
+- [castReflection](AtmosphericComponent.md#castreflection)
+- [map](AtmosphericComponent.md#map)
+- [exposure](AtmosphericComponent.md#exposure)
+- [roughness](AtmosphericComponent.md#roughness)
+
+### Methods
+
+- [init](AtmosphericComponent.md#init)
+- [start](AtmosphericComponent.md#start)
+- [onUpdate](AtmosphericComponent.md#onupdate)
+- [destroy](AtmosphericComponent.md#destroy)
+- [stop](AtmosphericComponent.md#stop)
+- [onLateUpdate](AtmosphericComponent.md#onlateupdate)
+- [onBeforeUpdate](AtmosphericComponent.md#onbeforeupdate)
+- [onGraphic](AtmosphericComponent.md#ongraphic)
+- [onParentChange](AtmosphericComponent.md#onparentchange)
+- [onAddChild](AtmosphericComponent.md#onaddchild)
+- [onRemoveChild](AtmosphericComponent.md#onremovechild)
+- [cloneTo](AtmosphericComponent.md#cloneto)
+- [copyComponent](AtmosphericComponent.md#copycomponent)
+- [setMorphInfluence](AtmosphericComponent.md#setmorphinfluence)
+- [setMorphInfluenceIndex](AtmosphericComponent.md#setmorphinfluenceindex)
+- [onCompute](AtmosphericComponent.md#oncompute)
+- [attachSceneOctree](AtmosphericComponent.md#attachsceneoctree)
+- [detachSceneOctree](AtmosphericComponent.md#detachsceneoctree)
+- [addMask](AtmosphericComponent.md#addmask)
+- [removeMask](AtmosphericComponent.md#removemask)
+- [hasMask](AtmosphericComponent.md#hasmask)
+- [addRendererMask](AtmosphericComponent.md#addrenderermask)
+- [removeRendererMask](AtmosphericComponent.md#removerenderermask)
+- [selfCloneMaterials](AtmosphericComponent.md#selfclonematerials)
+- [renderPass](AtmosphericComponent.md#renderpass)
+- [recordRenderPass2](AtmosphericComponent.md#recordrenderpass2)
+- [preInit](AtmosphericComponent.md#preinit)
+- [beforeDestroy](AtmosphericComponent.md#beforedestroy)
+- [onEnable](AtmosphericComponent.md#onenable)
+- [onDisable](AtmosphericComponent.md#ondisable)
+- [nodeUpdate](AtmosphericComponent.md#nodeupdate)
+- [renderPass2](AtmosphericComponent.md#renderpass2)
+- [useSkyReflection](AtmosphericComponent.md#useskyreflection)
+
+## Constructors
+
+### constructor
+
+• **new AtmosphericComponent**(): [`AtmosphericComponent`](AtmosphericComponent.md)
+
+#### Returns
+
+[`AtmosphericComponent`](AtmosphericComponent.md)
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[constructor](SkyRenderer.md#constructor)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L26)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[object3D](SkyRenderer.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[isDestroyed](SkyRenderer.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### receiveShadow
+
+• **receiveShadow**: `boolean`
+
+Enabling this option allows the grid to display any shadows cast on the grid.
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[receiveShadow](SkyRenderer.md#receiveshadow)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L23)
+
+___
+
+### morphData
+
+• **morphData**: [`MorphTargetData`](MorphTargetData.md)
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[morphData](SkyRenderer.md#morphdata)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L24)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[instanceCount](SkyRenderer.md#instancecount)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[lodLevel](SkyRenderer.md#lodlevel)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[alwaysRender](SkyRenderer.md#alwaysrender)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[instanceID](SkyRenderer.md#instanceid)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[drawType](SkyRenderer.md#drawtype)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[isRenderOrderChange](SkyRenderer.md#isrenderorderchange)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[needSortOnCameraZ](SkyRenderer.md#needsortoncameraz)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[isRecievePostEffectUI](SkyRenderer.md#isrecieveposteffectui)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+___
+
+### skyMaterial
+
+• **skyMaterial**: `SkyMaterial`
+
+The material used in the Sky Box.
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[skyMaterial](SkyRenderer.md#skymaterial)
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L27)
+
+## Accessors
+
+### sunX
+
+• `get` **sunX**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L50)
+
+• `set` **sunX**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L54)
+
+___
+
+### sunY
+
+• `get` **sunY**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:61](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L61)
+
+• `set` **sunY**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L65)
+
+___
+
+### eyePos
+
+• `get` **eyePos**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L72)
+
+• `set` **eyePos**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L76)
+
+___
+
+### sunRadius
+
+• `get` **sunRadius**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L83)
+
+• `set` **sunRadius**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L87)
+
+___
+
+### sunRadiance
+
+• `get` **sunRadiance**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L94)
+
+• `set` **sunRadiance**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L98)
+
+___
+
+### sunBrightness
+
+• `get` **sunBrightness**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:105](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L105)
+
+• `set` **sunBrightness**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:109](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L109)
+
+___
+
+### displaySun
+
+• `get` **displaySun**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L116)
+
+• `set` **displaySun**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L120)
+
+___
+
+### relativeTransform
+
+• `get` **relativeTransform**(): [`Transform`](Transform.md)
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L147)
+
+• `set` **relativeTransform**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Transform`](Transform.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:151](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L151)
+
+___
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+SkyRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SkyRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+SkyRenderer.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+SkyRenderer.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+SkyRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SkyRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### geometry
+
+• `get` **geometry**(): [`GeometryBase`](GeometryBase.md)
+
+The geometry of the mesh determines its shape
+
+#### Returns
+
+[`GeometryBase`](GeometryBase.md)
+
+#### Inherited from
+
+SkyRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L53)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryBase`](GeometryBase.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SkyRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L57)
+
+___
+
+### material
+
+• `get` **material**(): [`Material`](Material.md)
+
+material
+
+#### Returns
+
+[`Material`](Material.md)
+
+#### Inherited from
+
+SkyRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L99)
+
+• `set` **material**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Material`](Material.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SkyRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L103)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+SkyRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SkyRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+SkyRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SkyRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+SkyRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SkyRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): [`Material`](Material.md)[]
+
+#### Returns
+
+[`Material`](Material.md)[]
+
+#### Inherited from
+
+SkyRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Material`](Material.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SkyRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+SkyRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SkyRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+SkyRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SkyRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+SkyRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SkyRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+___
+
+### map
+
+• `get` **map**(): [`Texture`](Texture.md)
+
+get environment texture
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+SkyRenderer.map
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L87)
+
+• `set` **map**(`texture`): `void`
+
+set environment texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SkyRenderer.map
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L75)
+
+___
+
+### exposure
+
+• `get` **exposure**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+SkyRenderer.exposure
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L91)
+
+• `set` **exposure**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SkyRenderer.exposure
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:95](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L95)
+
+___
+
+### roughness
+
+• `get` **roughness**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+SkyRenderer.roughness
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:100](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L100)
+
+• `set` **roughness**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SkyRenderer.roughness
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L104)
+
+## Methods
+
+### init
+
+▸ **init**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[SkyRenderer](SkyRenderer.md).[init](SkyRenderer.md#init)
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L128)
+
+___
+
+### start
+
+▸ **start**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[SkyRenderer](SkyRenderer.md).[start](SkyRenderer.md#start)
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L140)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[SkyRenderer](SkyRenderer.md).[onUpdate](SkyRenderer.md#onupdate)
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L156)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[SkyRenderer](SkyRenderer.md).[destroy](SkyRenderer.md#destroy)
+
+#### Defined in
+
+[src/components/AtmosphericComponent.ts:176](https://github.com/Orillusion/orillusion/blob/main/src/components/AtmosphericComponent.ts#L176)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[stop](SkyRenderer.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[onLateUpdate](SkyRenderer.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[onBeforeUpdate](SkyRenderer.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[onGraphic](SkyRenderer.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[onParentChange](SkyRenderer.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[onAddChild](SkyRenderer.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[onRemoveChild](SkyRenderer.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[cloneTo](SkyRenderer.md#cloneto)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L38)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[copyComponent](SkyRenderer.md#copycomponent)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L43)
+
+___
+
+### setMorphInfluence
+
+▸ **setMorphInfluence**(`key`, `value`): `void`
+
+Set deformation animation parameters
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[setMorphInfluence](SkyRenderer.md#setmorphinfluence)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L110)
+
+___
+
+### setMorphInfluenceIndex
+
+▸ **setMorphInfluenceIndex**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[setMorphInfluenceIndex](SkyRenderer.md#setmorphinfluenceindex)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view`, `command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[onCompute](SkyRenderer.md#oncompute)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L128)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | [`Octree`](Octree.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[attachSceneOctree](SkyRenderer.md#attachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[detachSceneOctree](SkyRenderer.md#detachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[addMask](SkyRenderer.md#addmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[removeMask](SkyRenderer.md#removemask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[hasMask](SkyRenderer.md#hasmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[addRendererMask](SkyRenderer.md#addrenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[removeRendererMask](SkyRenderer.md#removerenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[selfCloneMaterials](SkyRenderer.md#selfclonematerials)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `passType` | `PassType` |
+| `renderContext` | [`RenderContext`](RenderContext.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[renderPass](SkyRenderer.md#renderpass)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L370)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[recordRenderPass2](SkyRenderer.md#recordrenderpass2)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[preInit](SkyRenderer.md#preinit)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[beforeDestroy](SkyRenderer.md#beforedestroy)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[onEnable](SkyRenderer.md#onenable)
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L41)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[onDisable](SkyRenderer.md#ondisable)
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L54)
+
+___
+
+### nodeUpdate
+
+▸ **nodeUpdate**(`view`, `passType`, `renderPassState`, `clusterLightingBuffer?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `passType` | `PassType` |
+| `renderPassState` | `RendererPassState` |
+| `clusterLightingBuffer?` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[nodeUpdate](SkyRenderer.md#nodeupdate)
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L62)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+render pass at passType
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[renderPass2](SkyRenderer.md#renderpass2)
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:66](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L66)
+
+___
+
+### useSkyReflection
+
+▸ **useSkyReflection**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[SkyRenderer](SkyRenderer.md).[useSkyReflection](SkyRenderer.md#useskyreflection)
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:109](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L109)
diff --git a/docs/api/classes/AtmosphericScatteringSky.md b/docs/api/classes/AtmosphericScatteringSky.md
new file mode 100644
index 00000000..e26f29f0
--- /dev/null
+++ b/docs/api/classes/AtmosphericScatteringSky.md
@@ -0,0 +1,1185 @@
+# Class: AtmosphericScatteringSky
+
+Atmospheric Scattering Sky Texture
+
+## Hierarchy
+
+- [`LDRTextureCube`](LDRTextureCube.md)
+
+ ↳ **`AtmosphericScatteringSky`**
+
+### Constructors
+
+- [constructor](AtmosphericScatteringSky.md#constructor)
+
+### Properties
+
+- [name](AtmosphericScatteringSky.md#name)
+- [url](AtmosphericScatteringSky.md#url)
+- [pid](AtmosphericScatteringSky.md#pid)
+- [view](AtmosphericScatteringSky.md#view)
+- [gpuSampler](AtmosphericScatteringSky.md#gpusampler)
+- [gpuSampler\_comparison](AtmosphericScatteringSky.md#gpusampler_comparison)
+- [format](AtmosphericScatteringSky.md#format)
+- [usage](AtmosphericScatteringSky.md#usage)
+- [numberLayer](AtmosphericScatteringSky.md#numberlayer)
+- [viewDescriptor](AtmosphericScatteringSky.md#viewdescriptor)
+- [textureDescriptor](AtmosphericScatteringSky.md#texturedescriptor)
+- [sampler\_comparisonBindingLayout](AtmosphericScatteringSky.md#sampler_comparisonbindinglayout)
+- [flipY](AtmosphericScatteringSky.md#flipy)
+- [isVideoTexture](AtmosphericScatteringSky.md#isvideotexture)
+- [isHDRTexture](AtmosphericScatteringSky.md#ishdrtexture)
+- [mipmapCount](AtmosphericScatteringSky.md#mipmapcount)
+- [width](AtmosphericScatteringSky.md#width)
+- [height](AtmosphericScatteringSky.md#height)
+- [depthOrArrayLayers](AtmosphericScatteringSky.md#depthorarraylayers)
+- [visibility](AtmosphericScatteringSky.md#visibility)
+- [textureBindingLayout](AtmosphericScatteringSky.md#texturebindinglayout)
+- [samplerBindingLayout](AtmosphericScatteringSky.md#samplerbindinglayout)
+- [setting](AtmosphericScatteringSky.md#setting)
+
+### Accessors
+
+- [useMipmap](AtmosphericScatteringSky.md#usemipmap)
+- [sourceImageData](AtmosphericScatteringSky.md#sourceimagedata)
+- [addressModeU](AtmosphericScatteringSky.md#addressmodeu)
+- [addressModeV](AtmosphericScatteringSky.md#addressmodev)
+- [addressModeW](AtmosphericScatteringSky.md#addressmodew)
+- [magFilter](AtmosphericScatteringSky.md#magfilter)
+- [minFilter](AtmosphericScatteringSky.md#minfilter)
+- [mipmapFilter](AtmosphericScatteringSky.md#mipmapfilter)
+- [lodMinClamp](AtmosphericScatteringSky.md#lodminclamp)
+- [lodMaxClamp](AtmosphericScatteringSky.md#lodmaxclamp)
+- [compare](AtmosphericScatteringSky.md#compare)
+- [maxAnisotropy](AtmosphericScatteringSky.md#maxanisotropy)
+- [texture2D](AtmosphericScatteringSky.md#texture2d)
+- [ldrImageUrl](AtmosphericScatteringSky.md#ldrimageurl)
+
+### Methods
+
+- [init](AtmosphericScatteringSky.md#init)
+- [getMipmapCount](AtmosphericScatteringSky.md#getmipmapcount)
+- [getGPUTexture](AtmosphericScatteringSky.md#getgputexture)
+- [getGPUView](AtmosphericScatteringSky.md#getgpuview)
+- [bindStateChange](AtmosphericScatteringSky.md#bindstatechange)
+- [unBindStateChange](AtmosphericScatteringSky.md#unbindstatechange)
+- [destroy](AtmosphericScatteringSky.md#destroy)
+- [delayDestroyTexture](AtmosphericScatteringSky.md#delaydestroytexture)
+- [destroyTexture](AtmosphericScatteringSky.md#destroytexture)
+- [load](AtmosphericScatteringSky.md#load)
+- [createFromTexture](AtmosphericScatteringSky.md#createfromtexture)
+
+## Constructors
+
+### constructor
+
+• **new AtmosphericScatteringSky**(`setting`): [`AtmosphericScatteringSky`](AtmosphericScatteringSky.md)
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `setting` | [`AtmosphericScatteringSkySetting`](AtmosphericScatteringSkySetting.md) | AtmosphericScatteringSkySetting |
+
+#### Returns
+
+[`AtmosphericScatteringSky`](AtmosphericScatteringSky.md)
+
+#### Overrides
+
+[LDRTextureCube](LDRTextureCube.md).[constructor](LDRTextureCube.md#constructor)
+
+#### Defined in
+
+[src/textures/AtmosphericScatteringSky.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/textures/AtmosphericScatteringSky.ts#L43)
+
+## Properties
+
+### name
+
+• **name**: `string`
+
+name of texture
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[name](LDRTextureCube.md#name)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L15)
+
+___
+
+### url
+
+• **url**: `string`
+
+source url
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[url](LDRTextureCube.md#url)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L20)
+
+___
+
+### pid
+
+• **pid**: `number`
+
+Return index in texture array
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[pid](LDRTextureCube.md#pid)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L30)
+
+___
+
+### view
+
+• **view**: `GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[view](LDRTextureCube.md#view)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L35)
+
+___
+
+### gpuSampler
+
+• **gpuSampler**: `GPUSampler`
+
+GPUSampler
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[gpuSampler](LDRTextureCube.md#gpusampler)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L40)
+
+___
+
+### gpuSampler\_comparison
+
+• **gpuSampler\_comparison**: `GPUSampler`
+
+GPUSampler for comparison
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[gpuSampler_comparison](LDRTextureCube.md#gpusampler_comparison)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L45)
+
+___
+
+### format
+
+• **format**: `GPUTextureFormat`
+
+GPUTextureFormat
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[format](LDRTextureCube.md#format)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L50)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+GPUTextureUsage
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[usage](LDRTextureCube.md#usage)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L55)
+
+___
+
+### numberLayer
+
+• **numberLayer**: `number` = `1`
+
+depth or layers, default value is 1
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[numberLayer](LDRTextureCube.md#numberlayer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L75)
+
+___
+
+### viewDescriptor
+
+• **viewDescriptor**: `GPUTextureViewDescriptor`
+
+GPUTextureViewDescriptor
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[viewDescriptor](LDRTextureCube.md#viewdescriptor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L80)
+
+___
+
+### textureDescriptor
+
+• **textureDescriptor**: `GPUTextureDescriptor`
+
+GPUTextureDescriptor
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[textureDescriptor](LDRTextureCube.md#texturedescriptor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L85)
+
+___
+
+### sampler\_comparisonBindingLayout
+
+• **sampler\_comparisonBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[sampler_comparisonBindingLayout](LDRTextureCube.md#sampler_comparisonbindinglayout)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L111)
+
+___
+
+### flipY
+
+• **flipY**: `boolean`
+
+whether to flip the image on the y-axis
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[flipY](LDRTextureCube.md#flipy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L118)
+
+___
+
+### isVideoTexture
+
+• `Optional` **isVideoTexture**: `boolean`
+
+whether is video texture
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[isVideoTexture](LDRTextureCube.md#isvideotexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L123)
+
+___
+
+### isHDRTexture
+
+• `Optional` **isHDRTexture**: `boolean`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[isHDRTexture](LDRTextureCube.md#ishdrtexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L124)
+
+___
+
+### mipmapCount
+
+• **mipmapCount**: `number` = `1`
+
+mipmap Count, default value is 1
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[mipmapCount](LDRTextureCube.md#mipmapcount)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L191)
+
+___
+
+### width
+
+• **width**: `number` = `4`
+
+texture width, default value is 4
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[width](LDRTextureCube.md#width)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L12)
+
+___
+
+### height
+
+• **height**: `number` = `4`
+
+texture height, default value is 4
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[height](LDRTextureCube.md#height)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L16)
+
+___
+
+### depthOrArrayLayers
+
+• **depthOrArrayLayers**: `number` = `6`
+
+depth or array layers, default value is 6
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[depthOrArrayLayers](LDRTextureCube.md#depthorarraylayers)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L20)
+
+___
+
+### visibility
+
+• **visibility**: `number` = `GPUShaderStage.FRAGMENT`
+
+GPUShaderStage
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[visibility](LDRTextureCube.md#visibility)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L25)
+
+___
+
+### textureBindingLayout
+
+• **textureBindingLayout**: `GPUTextureBindingLayout`
+
+GPUTextureBindingLayout
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[textureBindingLayout](LDRTextureCube.md#texturebindinglayout)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L30)
+
+___
+
+### samplerBindingLayout
+
+• **samplerBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[samplerBindingLayout](LDRTextureCube.md#samplerbindinglayout)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L38)
+
+___
+
+### setting
+
+• `Readonly` **setting**: [`AtmosphericScatteringSkySetting`](AtmosphericScatteringSkySetting.md)
+
+#### Defined in
+
+[src/textures/AtmosphericScatteringSky.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/textures/AtmosphericScatteringSky.ts#L36)
+
+## Accessors
+
+### useMipmap
+
+• `get` **useMipmap**(): `boolean`
+
+enable/disable mipmap
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LDRTextureCube.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L315)
+
+• `set` **useMipmap**(`value`): `void`
+
+get mipmap
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:322](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L322)
+
+___
+
+### sourceImageData
+
+• `get` **sourceImageData**(): `HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Returns
+
+`HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Inherited from
+
+LDRTextureCube.sourceImageData
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:353](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L353)
+
+___
+
+### addressModeU
+
+• `get` **addressModeU**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+LDRTextureCube.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L438)
+
+• `set` **addressModeU**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:442](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L442)
+
+___
+
+### addressModeV
+
+• `get` **addressModeV**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+LDRTextureCube.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:449](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L449)
+
+• `set` **addressModeV**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:453](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L453)
+
+___
+
+### addressModeW
+
+• `get` **addressModeW**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+LDRTextureCube.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:460](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L460)
+
+• `set` **addressModeW**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:464](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L464)
+
+___
+
+### magFilter
+
+• `get` **magFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+LDRTextureCube.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:471](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L471)
+
+• `set` **magFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:475](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L475)
+
+___
+
+### minFilter
+
+• `get` **minFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+LDRTextureCube.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:482](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L482)
+
+• `set` **minFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L486)
+
+___
+
+### mipmapFilter
+
+• `get` **mipmapFilter**(): `GPUMipmapFilterMode`
+
+#### Returns
+
+`GPUMipmapFilterMode`
+
+#### Inherited from
+
+LDRTextureCube.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:493](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L493)
+
+• `set` **mipmapFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUMipmapFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:497](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L497)
+
+___
+
+### lodMinClamp
+
+• `get` **lodMinClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LDRTextureCube.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:504](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L504)
+
+• `set` **lodMinClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:508](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L508)
+
+___
+
+### lodMaxClamp
+
+• `get` **lodMaxClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LDRTextureCube.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:515](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L515)
+
+• `set` **lodMaxClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L519)
+
+___
+
+### compare
+
+• `get` **compare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+LDRTextureCube.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:526](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L526)
+
+• `set` **compare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:530](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L530)
+
+___
+
+### maxAnisotropy
+
+• `get` **maxAnisotropy**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LDRTextureCube.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:537](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L537)
+
+• `set` **maxAnisotropy**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:541](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L541)
+
+___
+
+### texture2D
+
+• `get` **texture2D**(): [`Texture`](Texture.md)
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/textures/AtmosphericScatteringSky.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/textures/AtmosphericScatteringSky.ts#L54)
+
+___
+
+### ldrImageUrl
+
+• `get` **ldrImageUrl**(): `string`
+
+constructor: create a cube texture, it's low dynamic range texture
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+LDRTextureCube.ldrImageUrl
+
+#### Defined in
+
+[src/textures/LDRTextureCube.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/textures/LDRTextureCube.ts#L21)
+
+## Methods
+
+### init
+
+▸ **init**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[init](LDRTextureCube.md#init)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L215)
+
+___
+
+### getMipmapCount
+
+▸ **getMipmapCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[getMipmapCount](LDRTextureCube.md#getmipmapcount)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:357](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L357)
+
+___
+
+### getGPUTexture
+
+▸ **getGPUTexture**(): `GPUTexture`
+
+create or get GPUTexture
+
+#### Returns
+
+`GPUTexture`
+
+GPUTexture
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[getGPUTexture](LDRTextureCube.md#getgputexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:384](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L384)
+
+___
+
+### getGPUView
+
+▸ **getGPUView**(`index?`): `GPUTextureView` \| `GPUExternalTexture`
+
+create or get GPUTextureView
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `index` | `number` | `0` |
+
+#### Returns
+
+`GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView | GPUExternalTexture
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[getGPUView](LDRTextureCube.md#getgpuview)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:395](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L395)
+
+___
+
+### bindStateChange
+
+▸ **bindStateChange**(`fun`, `ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `fun` | `Function` |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[bindStateChange](LDRTextureCube.md#bindstatechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L408)
+
+___
+
+### unBindStateChange
+
+▸ **unBindStateChange**(`ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[unBindStateChange](LDRTextureCube.md#unbindstatechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L412)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release the texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[destroy](LDRTextureCube.md#destroy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:426](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L426)
+
+___
+
+### delayDestroyTexture
+
+▸ **delayDestroyTexture**(`tex`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tex` | `GPUTexture` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[delayDestroyTexture](LDRTextureCube.md#delaydestroytexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:549](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L549)
+
+___
+
+### destroyTexture
+
+▸ **destroyTexture**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[destroyTexture](LDRTextureCube.md#destroytexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:555](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L555)
+
+___
+
+### load
+
+▸ **load**(`url`, `loaderFunctions?`): `Promise`\<[`LDRTextureCube`](LDRTextureCube.md)\>
+
+load texture data from web url, which is a 360 panorama image
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | web url |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | callback function when load complete |
+
+#### Returns
+
+`Promise`\<[`LDRTextureCube`](LDRTextureCube.md)\>
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[load](LDRTextureCube.md#load)
+
+#### Defined in
+
+[src/textures/LDRTextureCube.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/textures/LDRTextureCube.ts#L37)
+
+___
+
+### createFromTexture
+
+▸ **createFromTexture**(`size`, `texture`): `this`
+
+create cube texture by environment image
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `size` | `number` | size of cube texture |
+| `texture` | [`Texture`](Texture.md) | source texture |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[createFromTexture](LDRTextureCube.md#createfromtexture)
+
+#### Defined in
+
+[src/textures/LDRTextureCube.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/textures/LDRTextureCube.ts#L64)
diff --git a/docs/api/classes/AtmosphericScatteringSkySetting.md b/docs/api/classes/AtmosphericScatteringSkySetting.md
new file mode 100644
index 00000000..33c34f1e
--- /dev/null
+++ b/docs/api/classes/AtmosphericScatteringSkySetting.md
@@ -0,0 +1,152 @@
+# Class: AtmosphericScatteringSkySetting
+
+AtmosphericScattering Sky Setting
+
+### Constructors
+
+- [constructor](AtmosphericScatteringSkySetting.md#constructor)
+
+### Properties
+
+- [sunRadius](AtmosphericScatteringSkySetting.md#sunradius)
+- [sunRadiance](AtmosphericScatteringSkySetting.md#sunradiance)
+- [mieG](AtmosphericScatteringSkySetting.md#mieg)
+- [mieHeight](AtmosphericScatteringSkySetting.md#mieheight)
+- [eyePos](AtmosphericScatteringSkySetting.md#eyepos)
+- [sunX](AtmosphericScatteringSkySetting.md#sunx)
+- [sunY](AtmosphericScatteringSkySetting.md#suny)
+- [sunBrightness](AtmosphericScatteringSkySetting.md#sunbrightness)
+- [displaySun](AtmosphericScatteringSkySetting.md#displaysun)
+- [defaultTextureCubeSize](AtmosphericScatteringSkySetting.md#defaulttexturecubesize)
+- [defaultTexture2DSize](AtmosphericScatteringSkySetting.md#defaulttexture2dsize)
+- [skyColor](AtmosphericScatteringSkySetting.md#skycolor)
+
+## Constructors
+
+### constructor
+
+• **new AtmosphericScatteringSkySetting**(): [`AtmosphericScatteringSkySetting`](AtmosphericScatteringSkySetting.md)
+
+#### Returns
+
+[`AtmosphericScatteringSkySetting`](AtmosphericScatteringSkySetting.md)
+
+## Properties
+
+### sunRadius
+
+• **sunRadius**: `number` = `500.0`
+
+#### Defined in
+
+[src/textures/AtmosphericScatteringSky.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/textures/AtmosphericScatteringSky.ts#L15)
+
+___
+
+### sunRadiance
+
+• **sunRadiance**: `number` = `11.0`
+
+#### Defined in
+
+[src/textures/AtmosphericScatteringSky.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/textures/AtmosphericScatteringSky.ts#L16)
+
+___
+
+### mieG
+
+• **mieG**: `number` = `0.76`
+
+#### Defined in
+
+[src/textures/AtmosphericScatteringSky.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/textures/AtmosphericScatteringSky.ts#L17)
+
+___
+
+### mieHeight
+
+• **mieHeight**: `number` = `1200`
+
+#### Defined in
+
+[src/textures/AtmosphericScatteringSky.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/textures/AtmosphericScatteringSky.ts#L18)
+
+___
+
+### eyePos
+
+• **eyePos**: `number` = `1500`
+
+#### Defined in
+
+[src/textures/AtmosphericScatteringSky.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/textures/AtmosphericScatteringSky.ts#L19)
+
+___
+
+### sunX
+
+• **sunX**: `number` = `0.71`
+
+#### Defined in
+
+[src/textures/AtmosphericScatteringSky.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/textures/AtmosphericScatteringSky.ts#L20)
+
+___
+
+### sunY
+
+• **sunY**: `number` = `0.56`
+
+#### Defined in
+
+[src/textures/AtmosphericScatteringSky.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/textures/AtmosphericScatteringSky.ts#L21)
+
+___
+
+### sunBrightness
+
+• **sunBrightness**: `number` = `1.0`
+
+#### Defined in
+
+[src/textures/AtmosphericScatteringSky.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/textures/AtmosphericScatteringSky.ts#L22)
+
+___
+
+### displaySun
+
+• **displaySun**: `boolean` = `true`
+
+#### Defined in
+
+[src/textures/AtmosphericScatteringSky.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/textures/AtmosphericScatteringSky.ts#L23)
+
+___
+
+### defaultTextureCubeSize
+
+• **defaultTextureCubeSize**: `number` = `512`
+
+#### Defined in
+
+[src/textures/AtmosphericScatteringSky.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/textures/AtmosphericScatteringSky.ts#L24)
+
+___
+
+### defaultTexture2DSize
+
+• **defaultTexture2DSize**: `number` = `1024`
+
+#### Defined in
+
+[src/textures/AtmosphericScatteringSky.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/textures/AtmosphericScatteringSky.ts#L25)
+
+___
+
+### skyColor
+
+• **skyColor**: [`Color`](Color.md)
+
+#### Defined in
+
+[src/textures/AtmosphericScatteringSky.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/textures/AtmosphericScatteringSky.ts#L26)
diff --git a/docs/api/classes/B3DMLoader.md b/docs/api/classes/B3DMLoader.md
new file mode 100644
index 00000000..ffb69587
--- /dev/null
+++ b/docs/api/classes/B3DMLoader.md
@@ -0,0 +1,92 @@
+# Class: B3DMLoader
+
+## Hierarchy
+
+- [`B3DMLoaderBase`](B3DMLoaderBase.md)
+
+ ↳ **`B3DMLoader`**
+
+### Constructors
+
+- [constructor](B3DMLoader.md#constructor)
+
+### Properties
+
+- [adjustmentTransform](B3DMLoader.md#adjustmenttransform)
+
+### Methods
+
+- [parse](B3DMLoader.md#parse)
+- [decodeText](B3DMLoader.md#decodetext)
+
+## Constructors
+
+### constructor
+
+• **new B3DMLoader**(): [`B3DMLoader`](B3DMLoader.md)
+
+#### Returns
+
+[`B3DMLoader`](B3DMLoader.md)
+
+#### Overrides
+
+[B3DMLoaderBase](B3DMLoaderBase.md).[constructor](B3DMLoaderBase.md#constructor)
+
+#### Defined in
+
+[src/loader/parser/b3dm/B3DMLoader.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/b3dm/B3DMLoader.ts#L14)
+
+## Properties
+
+### adjustmentTransform
+
+• **adjustmentTransform**: [`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/loader/parser/b3dm/B3DMLoader.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/b3dm/B3DMLoader.ts#L10)
+
+## Methods
+
+### parse
+
+▸ **parse**(`buffer`): `Promise`\<`any`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+`Promise`\<`any`\>
+
+#### Overrides
+
+[B3DMLoaderBase](B3DMLoaderBase.md).[parse](B3DMLoaderBase.md#parse)
+
+#### Defined in
+
+[src/loader/parser/b3dm/B3DMLoader.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/b3dm/B3DMLoader.ts#L20)
+
+___
+
+### decodeText
+
+▸ **decodeText**(`array`): `string`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `array` | `any` |
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/loader/parser/b3dm/B3DMLoader.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/b3dm/B3DMLoader.ts#L64)
diff --git a/docs/api/classes/B3DMLoaderBase.md b/docs/api/classes/B3DMLoaderBase.md
new file mode 100644
index 00000000..e1a40f95
--- /dev/null
+++ b/docs/api/classes/B3DMLoaderBase.md
@@ -0,0 +1,45 @@
+# Class: B3DMLoaderBase
+
+## Hierarchy
+
+- **`B3DMLoaderBase`**
+
+ ↳ [`B3DMLoader`](B3DMLoader.md)
+
+### Constructors
+
+- [constructor](B3DMLoaderBase.md#constructor)
+
+### Methods
+
+- [parse](B3DMLoaderBase.md#parse)
+
+## Constructors
+
+### constructor
+
+• **new B3DMLoaderBase**(): [`B3DMLoaderBase`](B3DMLoaderBase.md)
+
+#### Returns
+
+[`B3DMLoaderBase`](B3DMLoaderBase.md)
+
+## Methods
+
+### parse
+
+▸ **parse**(`buffer`): `Promise`\<\{ `version`: `number` ; `featureTable`: [`FeatureTable`](FeatureTable.md) ; `batchTable`: [`BatchTable`](BatchTable.md) ; `glbBytes`: `Uint8Array` }\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+`Promise`\<\{ `version`: `number` ; `featureTable`: [`FeatureTable`](FeatureTable.md) ; `batchTable`: [`BatchTable`](BatchTable.md) ; `glbBytes`: `Uint8Array` }\>
+
+#### Defined in
+
+[src/loader/parser/b3dm/B3DMLoaderBase.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/b3dm/B3DMLoaderBase.ts#L6)
diff --git a/docs/api/classes/B3DMParseUtil.md b/docs/api/classes/B3DMParseUtil.md
new file mode 100644
index 00000000..18e4d049
--- /dev/null
+++ b/docs/api/classes/B3DMParseUtil.md
@@ -0,0 +1,39 @@
+# Class: B3DMParseUtil
+
+### Constructors
+
+- [constructor](B3DMParseUtil.md#constructor)
+
+### Methods
+
+- [parseBinary](B3DMParseUtil.md#parsebinary)
+
+## Constructors
+
+### constructor
+
+• **new B3DMParseUtil**(): [`B3DMParseUtil`](B3DMParseUtil.md)
+
+#### Returns
+
+[`B3DMParseUtil`](B3DMParseUtil.md)
+
+## Methods
+
+### parseBinary
+
+▸ **parseBinary**(`bytes`): `Promise`\<[`Object3D`](Object3D.md)\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bytes` | `ArrayBuffer` |
+
+#### Returns
+
+`Promise`\<[`Object3D`](Object3D.md)\>
+
+#### Defined in
+
+[src/loader/parser/B3DMParser.ts:108](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/B3DMParser.ts#L108)
diff --git a/docs/api/classes/B3DMParser.md b/docs/api/classes/B3DMParser.md
new file mode 100644
index 00000000..774f6e27
--- /dev/null
+++ b/docs/api/classes/B3DMParser.md
@@ -0,0 +1,267 @@
+# Class: B3DMParser
+
+## Hierarchy
+
+- `ParserBase`
+
+ ↳ **`B3DMParser`**
+
+### Constructors
+
+- [constructor](B3DMParser.md#constructor)
+
+### Properties
+
+- [format](B3DMParser.md#format)
+- [baseUrl](B3DMParser.md#baseurl)
+- [initUrl](B3DMParser.md#initurl)
+- [loaderFunctions](B3DMParser.md#loaderfunctions)
+- [userData](B3DMParser.md#userdata)
+- [data](B3DMParser.md#data)
+
+### Methods
+
+- [parseBuffer](B3DMParser.md#parsebuffer)
+- [verification](B3DMParser.md#verification)
+- [parseString](B3DMParser.md#parsestring)
+- [parseJson](B3DMParser.md#parsejson)
+- [parseTexture](B3DMParser.md#parsetexture)
+- [parse](B3DMParser.md#parse)
+
+## Constructors
+
+### constructor
+
+• **new B3DMParser**(): [`B3DMParser`](B3DMParser.md)
+
+#### Returns
+
+[`B3DMParser`](B3DMParser.md)
+
+#### Inherited from
+
+ParserBase.constructor
+
+## Properties
+
+### format
+
+▪ `Static` **format**: [`ParserFormat`](../enums/ParserFormat.md) = `ParserFormat.JSON`
+
+#### Overrides
+
+ParserBase.format
+
+#### Defined in
+
+[src/loader/parser/B3DMParser.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/B3DMParser.ts#L6)
+
+___
+
+### baseUrl
+
+• **baseUrl**: `string`
+
+#### Inherited from
+
+ParserBase.baseUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L11)
+
+___
+
+### initUrl
+
+• **initUrl**: `string`
+
+#### Inherited from
+
+ParserBase.initUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L12)
+
+___
+
+### loaderFunctions
+
+• `Optional` **loaderFunctions**: [`LoaderFunctions`](../types/LoaderFunctions.md)
+
+#### Inherited from
+
+ParserBase.loaderFunctions
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L13)
+
+___
+
+### userData
+
+• `Optional` **userData**: `any`
+
+#### Inherited from
+
+ParserBase.userData
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L14)
+
+___
+
+### data
+
+• **data**: `any`
+
+#### Inherited from
+
+ParserBase.data
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L15)
+
+## Methods
+
+### parseBuffer
+
+▸ **parseBuffer**(`buffer`): `Promise`\<`void`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Overrides
+
+ParserBase.parseBuffer
+
+#### Defined in
+
+[src/loader/parser/B3DMParser.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/B3DMParser.ts#L8)
+
+___
+
+### verification
+
+▸ **verification**(): `boolean`
+
+Verify parsing validity
+
+#### Returns
+
+`boolean`
+
+#### Overrides
+
+ParserBase.verification
+
+#### Defined in
+
+[src/loader/parser/B3DMParser.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/B3DMParser.ts#L19)
+
+___
+
+### parseString
+
+▸ **parseString**(`str`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseString
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L17)
+
+___
+
+### parseJson
+
+▸ **parseJson**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `object` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseJson
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L19)
+
+___
+
+### parseTexture
+
+▸ **parseTexture**(`buffer`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+ParserBase.parseTexture
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L23)
+
+___
+
+### parse
+
+▸ **parse**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parse
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L27)
diff --git a/docs/api/classes/BatchTable.md b/docs/api/classes/BatchTable.md
new file mode 100644
index 00000000..3bf3fda2
--- /dev/null
+++ b/docs/api/classes/BatchTable.md
@@ -0,0 +1,88 @@
+# Class: BatchTable
+
+## Hierarchy
+
+- [`FeatureTable`](FeatureTable.md)
+
+ ↳ **`BatchTable`**
+
+### Constructors
+
+- [constructor](BatchTable.md#constructor)
+
+### Methods
+
+- [getKeys](BatchTable.md#getkeys)
+- [getData](BatchTable.md#getdata)
+
+## Constructors
+
+### constructor
+
+• **new BatchTable**(`buffer`, `batchSize`, `start`, `headerLength`, `binLength`): [`BatchTable`](BatchTable.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `any` |
+| `batchSize` | `any` |
+| `start` | `any` |
+| `headerLength` | `any` |
+| `binLength` | `any` |
+
+#### Returns
+
+[`BatchTable`](BatchTable.md)
+
+#### Overrides
+
+[FeatureTable](FeatureTable.md).[constructor](FeatureTable.md#constructor)
+
+#### Defined in
+
+[src/loader/parser/b3dm/FeatureTable.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/b3dm/FeatureTable.ts#L153)
+
+## Methods
+
+### getKeys
+
+▸ **getKeys**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+[FeatureTable](FeatureTable.md).[getKeys](FeatureTable.md#getkeys)
+
+#### Defined in
+
+[src/loader/parser/b3dm/FeatureTable.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/b3dm/FeatureTable.ts#L30)
+
+___
+
+### getData
+
+▸ **getData**(`key`, `componentType?`, `type?`): `any`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `key` | `any` | `undefined` |
+| `componentType` | `any` | `null` |
+| `type` | `any` | `null` |
+
+#### Returns
+
+`any`
+
+#### Overrides
+
+[FeatureTable](FeatureTable.md).[getData](FeatureTable.md#getdata)
+
+#### Defined in
+
+[src/loader/parser/b3dm/FeatureTable.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/b3dm/FeatureTable.ts#L160)
diff --git a/docs/api/classes/Bezier2D.md b/docs/api/classes/Bezier2D.md
new file mode 100644
index 00000000..1646cec8
--- /dev/null
+++ b/docs/api/classes/Bezier2D.md
@@ -0,0 +1,121 @@
+# Class: Bezier2D
+
+2D Bezier Curve
+
+### Constructors
+
+- [constructor](Bezier2D.md#constructor)
+
+### Accessors
+
+- [points](Bezier2D.md#points)
+
+### Methods
+
+- [getValue](Bezier2D.md#getvalue)
+- [createBezierPoints](Bezier2D.md#createbezierpoints)
+
+## Constructors
+
+### constructor
+
+• **new Bezier2D**(`vec2Ds?`): [`Bezier2D`](Bezier2D.md)
+
+instance bezier class
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `vec2Ds` | [`Vector2`](Vector2.md)[] | `[]` |
+
+#### Returns
+
+[`Bezier2D`](Bezier2D.md)
+
+#### Defined in
+
+[src/math/Bezier2D.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/math/Bezier2D.ts#L16)
+
+## Accessors
+
+### points
+
+• `get` **points**(): [`Vector2`](Vector2.md)[]
+
+get all bezier 2d points
+
+#### Returns
+
+[`Vector2`](Vector2.md)[]
+
+#### Defined in
+
+[src/math/Bezier2D.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/math/Bezier2D.ts#L24)
+
+• `set` **points**(`value`): `void`
+
+set bezier 2d point[x,y] list must great 4
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector2`](Vector2.md)[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Bezier2D.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/math/Bezier2D.ts#L31)
+
+## Methods
+
+### getValue
+
+▸ **getValue**(`v`): [`Vector2`](Vector2.md)
+
+get point2d at curve
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | `number` | 0.0 ~ 1.0 |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+return point2D at curve
+
+#### Defined in
+
+[src/math/Bezier2D.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/math/Bezier2D.ts#L40)
+
+___
+
+### createBezierPoints
+
+▸ **createBezierPoints**(`anchorpoints`, `pointsAmount`): [`Bezier2D`](Bezier2D.md)
+
+caclute bezier curve points at line [ 0.0 , 1.0 ]
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `anchorpoints` | [`Vector2`](Vector2.md)[] | bezier anchor |
+| `pointsAmount` | `number` | point count |
+
+#### Returns
+
+[`Bezier2D`](Bezier2D.md)
+
+get a bezier curve [Bezier2D]
+
+#### Defined in
+
+[src/math/Bezier2D.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/math/Bezier2D.ts#L64)
diff --git a/docs/api/classes/Bezier3D.md b/docs/api/classes/Bezier3D.md
new file mode 100644
index 00000000..f95db93b
--- /dev/null
+++ b/docs/api/classes/Bezier3D.md
@@ -0,0 +1,77 @@
+# Class: Bezier3D
+
+3D Bezier Curve
+
+### Constructors
+
+- [constructor](Bezier3D.md#constructor)
+
+### Methods
+
+- [calculateCubicBezierPoint](Bezier3D.md#calculatecubicbezierpoint)
+- [bezierPoint](Bezier3D.md#bezierpoint)
+
+## Constructors
+
+### constructor
+
+• **new Bezier3D**(): [`Bezier3D`](Bezier3D.md)
+
+#### Returns
+
+[`Bezier3D`](Bezier3D.md)
+
+## Methods
+
+### calculateCubicBezierPoint
+
+▸ **calculateCubicBezierPoint**(`t`, `p0`, `c1`, `c2`, `p3`): [`Vector3`](Vector3.md)
+
+get cubic curve point value from t at bezier data
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `t` | `number` | interval value |
+| `p0` | [`Vector3`](Vector3.md) | start point |
+| `c1` | [`Vector3`](Vector3.md) | left control point |
+| `c2` | [`Vector3`](Vector3.md) | right control point |
+| `p3` | [`Vector3`](Vector3.md) | end point |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+cubic curve point
+
+#### Defined in
+
+[src/math/Bezier3D.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/math/Bezier3D.ts#L18)
+
+___
+
+### bezierPoint
+
+▸ **bezierPoint**(`t`, `p0`, `c1`, `p1`): [`Vector3`](Vector3.md)
+
+get curve point from three point bezier curve
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `t` | `number` | interval value |
+| `p0` | [`Vector3`](Vector3.md) | start point |
+| `c1` | [`Vector3`](Vector3.md) | contrl point |
+| `p1` | [`Vector3`](Vector3.md) | end point |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+get bezier point at curve
+
+#### Defined in
+
+[src/math/Bezier3D.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/math/Bezier3D.ts#L50)
diff --git a/docs/api/classes/BiMap.md b/docs/api/classes/BiMap.md
new file mode 100644
index 00000000..1fe50267
--- /dev/null
+++ b/docs/api/classes/BiMap.md
@@ -0,0 +1,380 @@
+# Class: BiMap\
+
+## Type parameters
+
+| Name |
+| :------ |
+| `K` |
+| `V` |
+
+## Hierarchy
+
+- `Map`\<`K`, `V`\>
+
+ ↳ **`BiMap`**
+
+### Constructors
+
+- [constructor](BiMap.md#constructor)
+
+### Properties
+
+- [size](BiMap.md#size)
+- [[toStringTag]](BiMap.md#[tostringtag])
+- [[species]](BiMap.md#[species])
+
+### Methods
+
+- [forEach](BiMap.md#foreach)
+- [get](BiMap.md#get)
+- [has](BiMap.md#has)
+- [[iterator]](BiMap.md#[iterator])
+- [entries](BiMap.md#entries)
+- [keys](BiMap.md#keys)
+- [values](BiMap.md#values)
+- [delete](BiMap.md#delete)
+- [getKey](BiMap.md#getkey)
+- [deleteValue](BiMap.md#deletevalue)
+- [set](BiMap.md#set)
+- [clear](BiMap.md#clear)
+
+## Constructors
+
+### constructor
+
+• **new BiMap**\<`K`, `V`\>(`iterable?`): [`BiMap`](BiMap.md)\<`K`, `V`\>
+
+#### Type parameters
+
+| Name |
+| :------ |
+| `K` |
+| `V` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `iterable?` | `Iterable`\ |
+
+#### Returns
+
+[`BiMap`](BiMap.md)\<`K`, `V`\>
+
+#### Overrides
+
+Map\<K, V\>.constructor
+
+#### Defined in
+
+[src/math/BiMap.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/math/BiMap.ts#L4)
+
+## Properties
+
+### size
+
+• `Readonly` **size**: `number`
+
+#### Inherited from
+
+Map.size
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.collection.d.ts:45
+
+___
+
+### [toStringTag]
+
+• `Readonly` **[toStringTag]**: `string`
+
+#### Inherited from
+
+Map.[toStringTag]
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts:137
+
+___
+
+### [species]
+
+▪ `Static` `Readonly` **[species]**: `MapConstructor`
+
+#### Inherited from
+
+Map.[species]
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts:319
+
+## Methods
+
+### forEach
+
+▸ **forEach**(`callbackfn`, `thisArg?`): `void`
+
+Executes a provided function once per each key/value pair in the Map, in insertion order.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `callbackfn` | (`value`: `V`, `key`: `K`, `map`: `Map`\<`K`, `V`\>) => `void` |
+| `thisArg?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Map.forEach
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.collection.d.ts:28
+
+___
+
+### get
+
+▸ **get**(`key`): `V`
+
+Returns a specified element from the Map object. If the value that is associated to the provided key is an object, then you will get a reference to that object and any change made to that object will effectively modify it inside the Map.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `K` |
+
+#### Returns
+
+`V`
+
+Returns the element associated with the specified key. If no element is associated with the specified key, undefined is returned.
+
+#### Inherited from
+
+Map.get
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.collection.d.ts:33
+
+___
+
+### has
+
+▸ **has**(`key`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `K` |
+
+#### Returns
+
+`boolean`
+
+boolean indicating whether an element with the specified key exists or not.
+
+#### Inherited from
+
+Map.has
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.collection.d.ts:37
+
+___
+
+### [iterator]
+
+▸ **[iterator]**(): `IterableIterator`\<[`K`, `V`]\>
+
+Returns an iterable of entries in the map.
+
+#### Returns
+
+`IterableIterator`\<[`K`, `V`]\>
+
+#### Inherited from
+
+Map.[iterator]
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts:119
+
+___
+
+### entries
+
+▸ **entries**(): `IterableIterator`\<[`K`, `V`]\>
+
+Returns an iterable of key, value pairs for every entry in the map.
+
+#### Returns
+
+`IterableIterator`\<[`K`, `V`]\>
+
+#### Inherited from
+
+Map.entries
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts:124
+
+___
+
+### keys
+
+▸ **keys**(): `IterableIterator`\<`K`\>
+
+Returns an iterable of keys in the map
+
+#### Returns
+
+`IterableIterator`\<`K`\>
+
+#### Inherited from
+
+Map.keys
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts:129
+
+___
+
+### values
+
+▸ **values**(): `IterableIterator`\<`V`\>
+
+Returns an iterable of values in the map
+
+#### Returns
+
+`IterableIterator`\<`V`\>
+
+#### Inherited from
+
+Map.values
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts:134
+
+___
+
+### delete
+
+▸ **delete**(`key`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `K` |
+
+#### Returns
+
+`boolean`
+
+#### Overrides
+
+Map.delete
+
+#### Defined in
+
+[src/math/BiMap.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/math/BiMap.ts#L13)
+
+___
+
+### getKey
+
+▸ **getKey**(`value`): `K`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `V` |
+
+#### Returns
+
+`K`
+
+#### Defined in
+
+[src/math/BiMap.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/math/BiMap.ts#L22)
+
+___
+
+### deleteValue
+
+▸ **deleteValue**(`value`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `V` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/BiMap.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/math/BiMap.ts#L26)
+
+___
+
+### set
+
+▸ **set**(`key`, `value`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `K` |
+| `value` | `V` |
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+Map.set
+
+#### Defined in
+
+[src/math/BiMap.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/math/BiMap.ts#L32)
+
+___
+
+### clear
+
+▸ **clear**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+Map.clear
+
+#### Defined in
+
+[src/math/BiMap.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/math/BiMap.ts#L38)
diff --git a/docs/api/classes/BillboardComponent.md b/docs/api/classes/BillboardComponent.md
new file mode 100644
index 00000000..8333427e
--- /dev/null
+++ b/docs/api/classes/BillboardComponent.md
@@ -0,0 +1,632 @@
+# Class: BillboardComponent
+
+Components are used to attach functionality to object3D, it has an owner object3D.
+The component can receive update events at each frame.
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`BillboardComponent`**
+
+### Constructors
+
+- [constructor](BillboardComponent.md#constructor)
+
+### Properties
+
+- [type](BillboardComponent.md#type)
+- [camera](BillboardComponent.md#camera)
+- [object3D](BillboardComponent.md#object3d)
+- [isDestroyed](BillboardComponent.md#isdestroyed)
+
+### Accessors
+
+- [eventDispatcher](BillboardComponent.md#eventdispatcher)
+- [isStart](BillboardComponent.md#isstart)
+- [transform](BillboardComponent.md#transform)
+- [enable](BillboardComponent.md#enable)
+
+### Methods
+
+- [onUpdate](BillboardComponent.md#onupdate)
+- [cloneTo](BillboardComponent.md#cloneto)
+- [init](BillboardComponent.md#init)
+- [start](BillboardComponent.md#start)
+- [stop](BillboardComponent.md#stop)
+- [onEnable](BillboardComponent.md#onenable)
+- [onDisable](BillboardComponent.md#ondisable)
+- [onLateUpdate](BillboardComponent.md#onlateupdate)
+- [onBeforeUpdate](BillboardComponent.md#onbeforeupdate)
+- [onCompute](BillboardComponent.md#oncompute)
+- [onGraphic](BillboardComponent.md#ongraphic)
+- [onParentChange](BillboardComponent.md#onparentchange)
+- [onAddChild](BillboardComponent.md#onaddchild)
+- [onRemoveChild](BillboardComponent.md#onremovechild)
+- [copyComponent](BillboardComponent.md#copycomponent)
+- [beforeDestroy](BillboardComponent.md#beforedestroy)
+- [destroy](BillboardComponent.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new BillboardComponent**(): [`BillboardComponent`](BillboardComponent.md)
+
+#### Returns
+
+[`BillboardComponent`](BillboardComponent.md)
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+#### Defined in
+
+[src/components/BillboardComponent.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/BillboardComponent.ts#L12)
+
+## Properties
+
+### type
+
+• **type**: [`BillboardType`](../enums/BillboardType.md)
+
+#### Defined in
+
+[src/components/BillboardComponent.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/components/BillboardComponent.ts#L8)
+
+___
+
+### camera
+
+• **camera**: [`Camera3D`](Camera3D.md)
+
+#### Defined in
+
+[src/components/BillboardComponent.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/components/BillboardComponent.ts#L9)
+
+___
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### onUpdate
+
+▸ **onUpdate**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[onUpdate](ComponentBase.md#onupdate)
+
+#### Defined in
+
+[src/components/BillboardComponent.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/BillboardComponent.ts#L17)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/BillboardComponent.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/BillboardComponent.ts#L35)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[init](ComponentBase.md#init)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[start](ComponentBase.md#start)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onEnable](ComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onDisable](ComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[destroy](ComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
diff --git a/docs/api/classes/BitmapTexture2D.md b/docs/api/classes/BitmapTexture2D.md
new file mode 100644
index 00000000..0e591e7f
--- /dev/null
+++ b/docs/api/classes/BitmapTexture2D.md
@@ -0,0 +1,1175 @@
+# Class: BitmapTexture2D
+
+bitmap texture
+
+## Hierarchy
+
+- [`Texture`](Texture.md)
+
+ ↳ **`BitmapTexture2D`**
+
+### Constructors
+
+- [constructor](BitmapTexture2D.md#constructor)
+
+### Properties
+
+- [name](BitmapTexture2D.md#name)
+- [url](BitmapTexture2D.md#url)
+- [pid](BitmapTexture2D.md#pid)
+- [view](BitmapTexture2D.md#view)
+- [gpuSampler](BitmapTexture2D.md#gpusampler)
+- [gpuSampler\_comparison](BitmapTexture2D.md#gpusampler_comparison)
+- [format](BitmapTexture2D.md#format)
+- [usage](BitmapTexture2D.md#usage)
+- [width](BitmapTexture2D.md#width)
+- [height](BitmapTexture2D.md#height)
+- [depthOrArrayLayers](BitmapTexture2D.md#depthorarraylayers)
+- [numberLayer](BitmapTexture2D.md#numberlayer)
+- [viewDescriptor](BitmapTexture2D.md#viewdescriptor)
+- [textureDescriptor](BitmapTexture2D.md#texturedescriptor)
+- [visibility](BitmapTexture2D.md#visibility)
+- [textureBindingLayout](BitmapTexture2D.md#texturebindinglayout)
+- [samplerBindingLayout](BitmapTexture2D.md#samplerbindinglayout)
+- [sampler\_comparisonBindingLayout](BitmapTexture2D.md#sampler_comparisonbindinglayout)
+- [flipY](BitmapTexture2D.md#flipy)
+- [isVideoTexture](BitmapTexture2D.md#isvideotexture)
+- [isHDRTexture](BitmapTexture2D.md#ishdrtexture)
+- [mipmapCount](BitmapTexture2D.md#mipmapcount)
+- [premultiplyAlpha](BitmapTexture2D.md#premultiplyalpha)
+
+### Accessors
+
+- [useMipmap](BitmapTexture2D.md#usemipmap)
+- [sourceImageData](BitmapTexture2D.md#sourceimagedata)
+- [addressModeU](BitmapTexture2D.md#addressmodeu)
+- [addressModeV](BitmapTexture2D.md#addressmodev)
+- [addressModeW](BitmapTexture2D.md#addressmodew)
+- [magFilter](BitmapTexture2D.md#magfilter)
+- [minFilter](BitmapTexture2D.md#minfilter)
+- [mipmapFilter](BitmapTexture2D.md#mipmapfilter)
+- [lodMinClamp](BitmapTexture2D.md#lodminclamp)
+- [lodMaxClamp](BitmapTexture2D.md#lodmaxclamp)
+- [compare](BitmapTexture2D.md#compare)
+- [maxAnisotropy](BitmapTexture2D.md#maxanisotropy)
+- [source](BitmapTexture2D.md#source)
+
+### Methods
+
+- [init](BitmapTexture2D.md#init)
+- [getMipmapCount](BitmapTexture2D.md#getmipmapcount)
+- [getGPUTexture](BitmapTexture2D.md#getgputexture)
+- [getGPUView](BitmapTexture2D.md#getgpuview)
+- [bindStateChange](BitmapTexture2D.md#bindstatechange)
+- [unBindStateChange](BitmapTexture2D.md#unbindstatechange)
+- [destroy](BitmapTexture2D.md#destroy)
+- [delayDestroyTexture](BitmapTexture2D.md#delaydestroytexture)
+- [destroyTexture](BitmapTexture2D.md#destroytexture)
+- [load](BitmapTexture2D.md#load)
+- [loadFromBlob](BitmapTexture2D.md#loadfromblob)
+
+## Constructors
+
+### constructor
+
+• **new BitmapTexture2D**(`useMipmap?`): [`BitmapTexture2D`](BitmapTexture2D.md)
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `useMipmap` | `boolean` | `true` | Set whether to use mipmap |
+
+#### Returns
+
+[`BitmapTexture2D`](BitmapTexture2D.md)
+
+#### Overrides
+
+[Texture](Texture.md).[constructor](Texture.md#constructor)
+
+#### Defined in
+
+[src/textures/BitmapTexture2D.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/textures/BitmapTexture2D.ts#L19)
+
+## Properties
+
+### name
+
+• **name**: `string`
+
+name of texture
+
+#### Inherited from
+
+[Texture](Texture.md).[name](Texture.md#name)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L15)
+
+___
+
+### url
+
+• **url**: `string`
+
+source url
+
+#### Inherited from
+
+[Texture](Texture.md).[url](Texture.md#url)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L20)
+
+___
+
+### pid
+
+• **pid**: `number`
+
+Return index in texture array
+
+#### Inherited from
+
+[Texture](Texture.md).[pid](Texture.md#pid)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L30)
+
+___
+
+### view
+
+• **view**: `GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView
+
+#### Inherited from
+
+[Texture](Texture.md).[view](Texture.md#view)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L35)
+
+___
+
+### gpuSampler
+
+• **gpuSampler**: `GPUSampler`
+
+GPUSampler
+
+#### Inherited from
+
+[Texture](Texture.md).[gpuSampler](Texture.md#gpusampler)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L40)
+
+___
+
+### gpuSampler\_comparison
+
+• **gpuSampler\_comparison**: `GPUSampler`
+
+GPUSampler for comparison
+
+#### Inherited from
+
+[Texture](Texture.md).[gpuSampler_comparison](Texture.md#gpusampler_comparison)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L45)
+
+___
+
+### format
+
+• **format**: `GPUTextureFormat`
+
+GPUTextureFormat
+
+#### Inherited from
+
+[Texture](Texture.md).[format](Texture.md#format)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L50)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+GPUTextureUsage
+
+#### Inherited from
+
+[Texture](Texture.md).[usage](Texture.md#usage)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L55)
+
+___
+
+### width
+
+• **width**: `number` = `4`
+
+texture width
+
+#### Inherited from
+
+[Texture](Texture.md).[width](Texture.md#width)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:60](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L60)
+
+___
+
+### height
+
+• **height**: `number` = `4`
+
+texture height
+
+#### Inherited from
+
+[Texture](Texture.md).[height](Texture.md#height)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L65)
+
+___
+
+### depthOrArrayLayers
+
+• **depthOrArrayLayers**: `number` = `1`
+
+depth or layers, default value is 1
+
+#### Inherited from
+
+[Texture](Texture.md).[depthOrArrayLayers](Texture.md#depthorarraylayers)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L70)
+
+___
+
+### numberLayer
+
+• **numberLayer**: `number` = `1`
+
+depth or layers, default value is 1
+
+#### Inherited from
+
+[Texture](Texture.md).[numberLayer](Texture.md#numberlayer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L75)
+
+___
+
+### viewDescriptor
+
+• **viewDescriptor**: `GPUTextureViewDescriptor`
+
+GPUTextureViewDescriptor
+
+#### Inherited from
+
+[Texture](Texture.md).[viewDescriptor](Texture.md#viewdescriptor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L80)
+
+___
+
+### textureDescriptor
+
+• **textureDescriptor**: `GPUTextureDescriptor`
+
+GPUTextureDescriptor
+
+#### Inherited from
+
+[Texture](Texture.md).[textureDescriptor](Texture.md#texturedescriptor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L85)
+
+___
+
+### visibility
+
+• **visibility**: `number`
+
+GPUShaderStage
+
+#### Inherited from
+
+[Texture](Texture.md).[visibility](Texture.md#visibility)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L90)
+
+___
+
+### textureBindingLayout
+
+• **textureBindingLayout**: `GPUTextureBindingLayout`
+
+GPUTextureBindingLayout, contains viewDimension and multisampled
+
+#### Inherited from
+
+[Texture](Texture.md).[textureBindingLayout](Texture.md#texturebindinglayout)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L96)
+
+___
+
+### samplerBindingLayout
+
+• **samplerBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+[Texture](Texture.md).[samplerBindingLayout](Texture.md#samplerbindinglayout)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L104)
+
+___
+
+### sampler\_comparisonBindingLayout
+
+• **sampler\_comparisonBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+[Texture](Texture.md).[sampler_comparisonBindingLayout](Texture.md#sampler_comparisonbindinglayout)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L111)
+
+___
+
+### flipY
+
+• **flipY**: `boolean`
+
+whether to flip the image on the y-axis
+
+#### Inherited from
+
+[Texture](Texture.md).[flipY](Texture.md#flipy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L118)
+
+___
+
+### isVideoTexture
+
+• `Optional` **isVideoTexture**: `boolean`
+
+whether is video texture
+
+#### Inherited from
+
+[Texture](Texture.md).[isVideoTexture](Texture.md#isvideotexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L123)
+
+___
+
+### isHDRTexture
+
+• `Optional` **isHDRTexture**: `boolean`
+
+#### Inherited from
+
+[Texture](Texture.md).[isHDRTexture](Texture.md#ishdrtexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L124)
+
+___
+
+### mipmapCount
+
+• **mipmapCount**: `number` = `1`
+
+mipmap Count, default value is 1
+
+#### Inherited from
+
+[Texture](Texture.md).[mipmapCount](Texture.md#mipmapcount)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L191)
+
+___
+
+### premultiplyAlpha
+
+• **premultiplyAlpha**: `PremultiplyAlpha` = `'none'`
+
+#### Defined in
+
+[src/textures/BitmapTexture2D.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/textures/BitmapTexture2D.ts#L13)
+
+## Accessors
+
+### useMipmap
+
+• `get` **useMipmap**(): `boolean`
+
+enable/disable mipmap
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Texture.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L315)
+
+• `set` **useMipmap**(`value`): `void`
+
+get mipmap
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:322](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L322)
+
+___
+
+### sourceImageData
+
+• `get` **sourceImageData**(): `HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Returns
+
+`HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Inherited from
+
+Texture.sourceImageData
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:353](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L353)
+
+___
+
+### addressModeU
+
+• `get` **addressModeU**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+Texture.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L438)
+
+• `set` **addressModeU**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:442](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L442)
+
+___
+
+### addressModeV
+
+• `get` **addressModeV**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+Texture.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:449](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L449)
+
+• `set` **addressModeV**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:453](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L453)
+
+___
+
+### addressModeW
+
+• `get` **addressModeW**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+Texture.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:460](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L460)
+
+• `set` **addressModeW**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:464](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L464)
+
+___
+
+### magFilter
+
+• `get` **magFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+Texture.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:471](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L471)
+
+• `set` **magFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:475](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L475)
+
+___
+
+### minFilter
+
+• `get` **minFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+Texture.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:482](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L482)
+
+• `set` **minFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L486)
+
+___
+
+### mipmapFilter
+
+• `get` **mipmapFilter**(): `GPUMipmapFilterMode`
+
+#### Returns
+
+`GPUMipmapFilterMode`
+
+#### Inherited from
+
+Texture.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:493](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L493)
+
+• `set` **mipmapFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUMipmapFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:497](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L497)
+
+___
+
+### lodMinClamp
+
+• `get` **lodMinClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Texture.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:504](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L504)
+
+• `set` **lodMinClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:508](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L508)
+
+___
+
+### lodMaxClamp
+
+• `get` **lodMaxClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Texture.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:515](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L515)
+
+• `set` **lodMaxClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L519)
+
+___
+
+### compare
+
+• `get` **compare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Texture.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:526](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L526)
+
+• `set` **compare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:530](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L530)
+
+___
+
+### maxAnisotropy
+
+• `get` **maxAnisotropy**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Texture.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:537](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L537)
+
+• `set` **maxAnisotropy**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:541](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L541)
+
+___
+
+### source
+
+• `get` **source**(): `HTMLCanvasElement` \| `HTMLImageElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+get raw data of this texture
+
+#### Returns
+
+`HTMLCanvasElement` \| `HTMLImageElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Defined in
+
+[src/textures/BitmapTexture2D.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/textures/BitmapTexture2D.ts#L32)
+
+• `set` **source**(`value`): `void`
+
+set raw data of this texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `HTMLCanvasElement` \| `HTMLImageElement` \| `ImageBitmap` \| `OffscreenCanvas` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/textures/BitmapTexture2D.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/textures/BitmapTexture2D.ts#L39)
+
+## Methods
+
+### init
+
+▸ **init**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[Texture](Texture.md).[init](Texture.md#init)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L215)
+
+___
+
+### getMipmapCount
+
+▸ **getMipmapCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Texture](Texture.md).[getMipmapCount](Texture.md#getmipmapcount)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:357](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L357)
+
+___
+
+### getGPUTexture
+
+▸ **getGPUTexture**(): `GPUTexture`
+
+create or get GPUTexture
+
+#### Returns
+
+`GPUTexture`
+
+GPUTexture
+
+#### Inherited from
+
+[Texture](Texture.md).[getGPUTexture](Texture.md#getgputexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:384](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L384)
+
+___
+
+### getGPUView
+
+▸ **getGPUView**(`index?`): `GPUTextureView` \| `GPUExternalTexture`
+
+create or get GPUTextureView
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `index` | `number` | `0` |
+
+#### Returns
+
+`GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView | GPUExternalTexture
+
+#### Inherited from
+
+[Texture](Texture.md).[getGPUView](Texture.md#getgpuview)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:395](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L395)
+
+___
+
+### bindStateChange
+
+▸ **bindStateChange**(`fun`, `ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `fun` | `Function` |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Texture](Texture.md).[bindStateChange](Texture.md#bindstatechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L408)
+
+___
+
+### unBindStateChange
+
+▸ **unBindStateChange**(`ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Texture](Texture.md).[unBindStateChange](Texture.md#unbindstatechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L412)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release the texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Texture](Texture.md).[destroy](Texture.md#destroy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:426](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L426)
+
+___
+
+### delayDestroyTexture
+
+▸ **delayDestroyTexture**(`tex`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tex` | `GPUTexture` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Texture](Texture.md).[delayDestroyTexture](Texture.md#delaydestroytexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:549](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L549)
+
+___
+
+### destroyTexture
+
+▸ **destroyTexture**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Texture](Texture.md).[destroyTexture](Texture.md#destroytexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:555](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L555)
+
+___
+
+### load
+
+▸ **load**(`url`, `loaderFunctions?`): `Promise`\<`unknown`\>
+
+load texture data from web url
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | web url |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | callback function when load complete |
+
+#### Returns
+
+`Promise`\<`unknown`\>
+
+#### Defined in
+
+[src/textures/BitmapTexture2D.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/textures/BitmapTexture2D.ts#L62)
+
+___
+
+### loadFromBlob
+
+▸ **loadFromBlob**(`imgData`): `Promise`\<`boolean`\>
+
+load data from Blob
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `imgData` | `Blob` | blob data which contains image |
+
+#### Returns
+
+`Promise`\<`boolean`\>
+
+#### Defined in
+
+[src/textures/BitmapTexture2D.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/textures/BitmapTexture2D.ts#L110)
diff --git a/docs/api/classes/BitmapTextureCube.md b/docs/api/classes/BitmapTextureCube.md
new file mode 100644
index 00000000..96621ce0
--- /dev/null
+++ b/docs/api/classes/BitmapTextureCube.md
@@ -0,0 +1,1158 @@
+# Class: BitmapTextureCube
+
+## Hierarchy
+
+- `TextureCube`
+
+ ↳ **`BitmapTextureCube`**
+
+### Constructors
+
+- [constructor](BitmapTextureCube.md#constructor)
+
+### Properties
+
+- [name](BitmapTextureCube.md#name)
+- [url](BitmapTextureCube.md#url)
+- [pid](BitmapTextureCube.md#pid)
+- [view](BitmapTextureCube.md#view)
+- [gpuSampler](BitmapTextureCube.md#gpusampler)
+- [gpuSampler\_comparison](BitmapTextureCube.md#gpusampler_comparison)
+- [format](BitmapTextureCube.md#format)
+- [usage](BitmapTextureCube.md#usage)
+- [numberLayer](BitmapTextureCube.md#numberlayer)
+- [viewDescriptor](BitmapTextureCube.md#viewdescriptor)
+- [textureDescriptor](BitmapTextureCube.md#texturedescriptor)
+- [sampler\_comparisonBindingLayout](BitmapTextureCube.md#sampler_comparisonbindinglayout)
+- [flipY](BitmapTextureCube.md#flipy)
+- [isVideoTexture](BitmapTextureCube.md#isvideotexture)
+- [isHDRTexture](BitmapTextureCube.md#ishdrtexture)
+- [mipmapCount](BitmapTextureCube.md#mipmapcount)
+- [width](BitmapTextureCube.md#width)
+- [height](BitmapTextureCube.md#height)
+- [depthOrArrayLayers](BitmapTextureCube.md#depthorarraylayers)
+- [visibility](BitmapTextureCube.md#visibility)
+- [textureBindingLayout](BitmapTextureCube.md#texturebindinglayout)
+- [samplerBindingLayout](BitmapTextureCube.md#samplerbindinglayout)
+
+### Accessors
+
+- [useMipmap](BitmapTextureCube.md#usemipmap)
+- [sourceImageData](BitmapTextureCube.md#sourceimagedata)
+- [addressModeU](BitmapTextureCube.md#addressmodeu)
+- [addressModeV](BitmapTextureCube.md#addressmodev)
+- [addressModeW](BitmapTextureCube.md#addressmodew)
+- [magFilter](BitmapTextureCube.md#magfilter)
+- [minFilter](BitmapTextureCube.md#minfilter)
+- [mipmapFilter](BitmapTextureCube.md#mipmapfilter)
+- [lodMinClamp](BitmapTextureCube.md#lodminclamp)
+- [lodMaxClamp](BitmapTextureCube.md#lodmaxclamp)
+- [compare](BitmapTextureCube.md#compare)
+- [maxAnisotropy](BitmapTextureCube.md#maxanisotropy)
+- [images](BitmapTextureCube.md#images)
+
+### Methods
+
+- [init](BitmapTextureCube.md#init)
+- [getMipmapCount](BitmapTextureCube.md#getmipmapcount)
+- [getGPUTexture](BitmapTextureCube.md#getgputexture)
+- [getGPUView](BitmapTextureCube.md#getgpuview)
+- [bindStateChange](BitmapTextureCube.md#bindstatechange)
+- [unBindStateChange](BitmapTextureCube.md#unbindstatechange)
+- [destroy](BitmapTextureCube.md#destroy)
+- [delayDestroyTexture](BitmapTextureCube.md#delaydestroytexture)
+- [destroyTexture](BitmapTextureCube.md#destroytexture)
+- [load](BitmapTextureCube.md#load)
+- [loadStd](BitmapTextureCube.md#loadstd)
+
+## Constructors
+
+### constructor
+
+• **new BitmapTextureCube**(): [`BitmapTextureCube`](BitmapTextureCube.md)
+
+#### Returns
+
+[`BitmapTextureCube`](BitmapTextureCube.md)
+
+#### Overrides
+
+TextureCube.constructor
+
+#### Defined in
+
+[src/textures/BitmapTextureCube.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/textures/BitmapTextureCube.ts#L20)
+
+## Properties
+
+### name
+
+• **name**: `string`
+
+name of texture
+
+#### Inherited from
+
+TextureCube.name
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L15)
+
+___
+
+### url
+
+• **url**: `string`
+
+source url
+
+#### Inherited from
+
+TextureCube.url
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L20)
+
+___
+
+### pid
+
+• **pid**: `number`
+
+Return index in texture array
+
+#### Inherited from
+
+TextureCube.pid
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L30)
+
+___
+
+### view
+
+• **view**: `GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView
+
+#### Inherited from
+
+TextureCube.view
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L35)
+
+___
+
+### gpuSampler
+
+• **gpuSampler**: `GPUSampler`
+
+GPUSampler
+
+#### Inherited from
+
+TextureCube.gpuSampler
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L40)
+
+___
+
+### gpuSampler\_comparison
+
+• **gpuSampler\_comparison**: `GPUSampler`
+
+GPUSampler for comparison
+
+#### Inherited from
+
+TextureCube.gpuSampler\_comparison
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L45)
+
+___
+
+### format
+
+• **format**: `GPUTextureFormat`
+
+GPUTextureFormat
+
+#### Inherited from
+
+TextureCube.format
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L50)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+GPUTextureUsage
+
+#### Inherited from
+
+TextureCube.usage
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L55)
+
+___
+
+### numberLayer
+
+• **numberLayer**: `number` = `1`
+
+depth or layers, default value is 1
+
+#### Inherited from
+
+TextureCube.numberLayer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L75)
+
+___
+
+### viewDescriptor
+
+• **viewDescriptor**: `GPUTextureViewDescriptor`
+
+GPUTextureViewDescriptor
+
+#### Inherited from
+
+TextureCube.viewDescriptor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L80)
+
+___
+
+### textureDescriptor
+
+• **textureDescriptor**: `GPUTextureDescriptor`
+
+GPUTextureDescriptor
+
+#### Inherited from
+
+TextureCube.textureDescriptor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L85)
+
+___
+
+### sampler\_comparisonBindingLayout
+
+• **sampler\_comparisonBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+TextureCube.sampler\_comparisonBindingLayout
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L111)
+
+___
+
+### flipY
+
+• **flipY**: `boolean`
+
+whether to flip the image on the y-axis
+
+#### Inherited from
+
+TextureCube.flipY
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L118)
+
+___
+
+### isVideoTexture
+
+• `Optional` **isVideoTexture**: `boolean`
+
+whether is video texture
+
+#### Inherited from
+
+TextureCube.isVideoTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L123)
+
+___
+
+### isHDRTexture
+
+• `Optional` **isHDRTexture**: `boolean`
+
+#### Inherited from
+
+TextureCube.isHDRTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L124)
+
+___
+
+### mipmapCount
+
+• **mipmapCount**: `number` = `1`
+
+mipmap Count, default value is 1
+
+#### Inherited from
+
+TextureCube.mipmapCount
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L191)
+
+___
+
+### width
+
+• **width**: `number` = `4`
+
+texture width, default value is 4
+
+#### Inherited from
+
+TextureCube.width
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L12)
+
+___
+
+### height
+
+• **height**: `number` = `4`
+
+texture height, default value is 4
+
+#### Inherited from
+
+TextureCube.height
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L16)
+
+___
+
+### depthOrArrayLayers
+
+• **depthOrArrayLayers**: `number` = `6`
+
+depth or array layers, default value is 6
+
+#### Inherited from
+
+TextureCube.depthOrArrayLayers
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L20)
+
+___
+
+### visibility
+
+• **visibility**: `number` = `GPUShaderStage.FRAGMENT`
+
+GPUShaderStage
+
+#### Inherited from
+
+TextureCube.visibility
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L25)
+
+___
+
+### textureBindingLayout
+
+• **textureBindingLayout**: `GPUTextureBindingLayout`
+
+GPUTextureBindingLayout
+
+#### Inherited from
+
+TextureCube.textureBindingLayout
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L30)
+
+___
+
+### samplerBindingLayout
+
+• **samplerBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+TextureCube.samplerBindingLayout
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L38)
+
+## Accessors
+
+### useMipmap
+
+• `get` **useMipmap**(): `boolean`
+
+enable/disable mipmap
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+TextureCube.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L315)
+
+• `set` **useMipmap**(`value`): `void`
+
+get mipmap
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:322](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L322)
+
+___
+
+### sourceImageData
+
+• `get` **sourceImageData**(): `HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Returns
+
+`HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Inherited from
+
+TextureCube.sourceImageData
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:353](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L353)
+
+___
+
+### addressModeU
+
+• `get` **addressModeU**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+TextureCube.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L438)
+
+• `set` **addressModeU**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:442](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L442)
+
+___
+
+### addressModeV
+
+• `get` **addressModeV**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+TextureCube.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:449](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L449)
+
+• `set` **addressModeV**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:453](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L453)
+
+___
+
+### addressModeW
+
+• `get` **addressModeW**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+TextureCube.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:460](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L460)
+
+• `set` **addressModeW**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:464](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L464)
+
+___
+
+### magFilter
+
+• `get` **magFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+TextureCube.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:471](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L471)
+
+• `set` **magFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:475](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L475)
+
+___
+
+### minFilter
+
+• `get` **minFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+TextureCube.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:482](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L482)
+
+• `set` **minFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L486)
+
+___
+
+### mipmapFilter
+
+• `get` **mipmapFilter**(): `GPUMipmapFilterMode`
+
+#### Returns
+
+`GPUMipmapFilterMode`
+
+#### Inherited from
+
+TextureCube.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:493](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L493)
+
+• `set` **mipmapFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUMipmapFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:497](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L497)
+
+___
+
+### lodMinClamp
+
+• `get` **lodMinClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+TextureCube.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:504](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L504)
+
+• `set` **lodMinClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:508](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L508)
+
+___
+
+### lodMaxClamp
+
+• `get` **lodMaxClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+TextureCube.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:515](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L515)
+
+• `set` **lodMaxClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L519)
+
+___
+
+### compare
+
+• `get` **compare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+TextureCube.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:526](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L526)
+
+• `set` **compare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:530](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L530)
+
+___
+
+### maxAnisotropy
+
+• `get` **maxAnisotropy**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+TextureCube.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:537](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L537)
+
+• `set` **maxAnisotropy**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:541](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L541)
+
+___
+
+### images
+
+• `get` **images**(): `HTMLCanvasElement`[] \| `ImageBitmap`[] \| `OffscreenCanvas`[]
+
+get images of this texture
+
+#### Returns
+
+`HTMLCanvasElement`[] \| `ImageBitmap`[] \| `OffscreenCanvas`[]
+
+#### Defined in
+
+[src/textures/BitmapTextureCube.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/textures/BitmapTextureCube.ts#L131)
+
+• `set` **images**(`value`): `void`
+
+set images of this texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `HTMLCanvasElement`[] \| `ImageBitmap`[] \| `OffscreenCanvas`[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/textures/BitmapTextureCube.ts:138](https://github.com/Orillusion/orillusion/blob/main/src/textures/BitmapTextureCube.ts#L138)
+
+## Methods
+
+### init
+
+▸ **init**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+TextureCube.init
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L215)
+
+___
+
+### getMipmapCount
+
+▸ **getMipmapCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+TextureCube.getMipmapCount
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:357](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L357)
+
+___
+
+### getGPUTexture
+
+▸ **getGPUTexture**(): `GPUTexture`
+
+create or get GPUTexture
+
+#### Returns
+
+`GPUTexture`
+
+GPUTexture
+
+#### Inherited from
+
+TextureCube.getGPUTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:384](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L384)
+
+___
+
+### getGPUView
+
+▸ **getGPUView**(`index?`): `GPUTextureView` \| `GPUExternalTexture`
+
+create or get GPUTextureView
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `index` | `number` | `0` |
+
+#### Returns
+
+`GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView | GPUExternalTexture
+
+#### Inherited from
+
+TextureCube.getGPUView
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:395](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L395)
+
+___
+
+### bindStateChange
+
+▸ **bindStateChange**(`fun`, `ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `fun` | `Function` |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.bindStateChange
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L408)
+
+___
+
+### unBindStateChange
+
+▸ **unBindStateChange**(`ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.unBindStateChange
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L412)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release the texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.destroy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:426](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L426)
+
+___
+
+### delayDestroyTexture
+
+▸ **delayDestroyTexture**(`tex`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tex` | `GPUTexture` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.delayDestroyTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:549](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L549)
+
+___
+
+### destroyTexture
+
+▸ **destroyTexture**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.destroyTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:555](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L555)
+
+___
+
+### load
+
+▸ **load**(`urls`): `Promise`\<`boolean`\>
+
+load texture data from array of web url.
+make sure there are six images in a group,
+and the order is: [+X, -X, +Y, -Y, +Z, -Z]
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `urls` | `string`[] | array of image url |
+
+#### Returns
+
+`Promise`\<`boolean`\>
+
+#### Defined in
+
+[src/textures/BitmapTextureCube.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/textures/BitmapTextureCube.ts#L173)
+
+___
+
+### loadStd
+
+▸ **loadStd**(`url`): `Promise`\<`boolean`\>
+
+load texture data from url.
+the image is assembled from six images into cross shaped image.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | the path of image |
+
+#### Returns
+
+`Promise`\<`boolean`\>
+
+#### Defined in
+
+[src/textures/BitmapTextureCube.ts:204](https://github.com/Orillusion/orillusion/blob/main/src/textures/BitmapTextureCube.ts#L204)
diff --git a/docs/api/classes/BlendShapeData.md b/docs/api/classes/BlendShapeData.md
new file mode 100644
index 00000000..4139027f
--- /dev/null
+++ b/docs/api/classes/BlendShapeData.md
@@ -0,0 +1,108 @@
+# Class: BlendShapeData
+
+### Constructors
+
+- [constructor](BlendShapeData.md#constructor)
+
+### Properties
+
+- [vertexCount](BlendShapeData.md#vertexcount)
+- [shapeNames](BlendShapeData.md#shapenames)
+- [shapeIndexs](BlendShapeData.md#shapeindexs)
+- [blendCount](BlendShapeData.md#blendcount)
+- [blendShapePropertyDatas](BlendShapeData.md#blendshapepropertydatas)
+- [blendShapeMap](BlendShapeData.md#blendshapemap)
+
+### Methods
+
+- [formBytes](BlendShapeData.md#formbytes)
+
+## Constructors
+
+### constructor
+
+• **new BlendShapeData**(): [`BlendShapeData`](BlendShapeData.md)
+
+#### Returns
+
+[`BlendShapeData`](BlendShapeData.md)
+
+## Properties
+
+### vertexCount
+
+• **vertexCount**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapeData.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapeData.ts#L5)
+
+___
+
+### shapeNames
+
+• **shapeNames**: `string`[]
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapeData.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapeData.ts#L6)
+
+___
+
+### shapeIndexs
+
+• **shapeIndexs**: `number`[]
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapeData.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapeData.ts#L7)
+
+___
+
+### blendCount
+
+• **blendCount**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapeData.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapeData.ts#L9)
+
+___
+
+### blendShapePropertyDatas
+
+• **blendShapePropertyDatas**: [`BlendShapePropertyData`](BlendShapePropertyData.md)[]
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapeData.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapeData.ts#L14)
+
+___
+
+### blendShapeMap
+
+• **blendShapeMap**: `Map`\<`string`, [`BlendShapePropertyData`](BlendShapePropertyData.md)\>
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapeData.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapeData.ts#L15)
+
+## Methods
+
+### formBytes
+
+▸ **formBytes**(`byteArray`): `BytesArray`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `byteArray` | `BytesArray` |
+
+#### Returns
+
+`BytesArray`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapeData.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapeData.ts#L17)
diff --git a/docs/api/classes/BlendShapeFrameData.md b/docs/api/classes/BlendShapeFrameData.md
new file mode 100644
index 00000000..a7ddd5ab
--- /dev/null
+++ b/docs/api/classes/BlendShapeFrameData.md
@@ -0,0 +1,86 @@
+# Class: BlendShapeFrameData
+
+### Constructors
+
+- [constructor](BlendShapeFrameData.md#constructor)
+
+### Properties
+
+- [weight](BlendShapeFrameData.md#weight)
+- [deltaVertices](BlendShapeFrameData.md#deltavertices)
+- [deltaNormals](BlendShapeFrameData.md#deltanormals)
+- [deltaTangents](BlendShapeFrameData.md#deltatangents)
+
+### Methods
+
+- [formBytes](BlendShapeFrameData.md#formbytes)
+
+## Constructors
+
+### constructor
+
+• **new BlendShapeFrameData**(): [`BlendShapeFrameData`](BlendShapeFrameData.md)
+
+#### Returns
+
+[`BlendShapeFrameData`](BlendShapeFrameData.md)
+
+## Properties
+
+### weight
+
+• **weight**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapeFrameData.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapeFrameData.ts#L6)
+
+___
+
+### deltaVertices
+
+• **deltaVertices**: `Float32Array`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapeFrameData.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapeFrameData.ts#L12)
+
+___
+
+### deltaNormals
+
+• **deltaNormals**: `Float32Array`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapeFrameData.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapeFrameData.ts#L13)
+
+___
+
+### deltaTangents
+
+• **deltaTangents**: `Float32Array`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapeFrameData.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapeFrameData.ts#L14)
+
+## Methods
+
+### formBytes
+
+▸ **formBytes**(`byteArray`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `byteArray` | `BytesArray` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapeFrameData.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapeFrameData.ts#L16)
diff --git a/docs/api/classes/BlendShapePropertyData.md b/docs/api/classes/BlendShapePropertyData.md
new file mode 100644
index 00000000..3128361e
--- /dev/null
+++ b/docs/api/classes/BlendShapePropertyData.md
@@ -0,0 +1,97 @@
+# Class: BlendShapePropertyData
+
+### Constructors
+
+- [constructor](BlendShapePropertyData.md#constructor)
+
+### Properties
+
+- [shapeName](BlendShapePropertyData.md#shapename)
+- [shapeIndex](BlendShapePropertyData.md#shapeindex)
+- [frameCount](BlendShapePropertyData.md#framecount)
+- [blendPositionList](BlendShapePropertyData.md#blendpositionlist)
+- [blendNormalList](BlendShapePropertyData.md#blendnormallist)
+
+### Methods
+
+- [formBytes](BlendShapePropertyData.md#formbytes)
+
+## Constructors
+
+### constructor
+
+• **new BlendShapePropertyData**(): [`BlendShapePropertyData`](BlendShapePropertyData.md)
+
+#### Returns
+
+[`BlendShapePropertyData`](BlendShapePropertyData.md)
+
+## Properties
+
+### shapeName
+
+• **shapeName**: `string`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapePropertyData.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapePropertyData.ts#L5)
+
+___
+
+### shapeIndex
+
+• **shapeIndex**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapePropertyData.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapePropertyData.ts#L6)
+
+___
+
+### frameCount
+
+• **frameCount**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapePropertyData.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapePropertyData.ts#L7)
+
+___
+
+### blendPositionList
+
+• **blendPositionList**: `Float32Array`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapePropertyData.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapePropertyData.ts#L9)
+
+___
+
+### blendNormalList
+
+• **blendNormalList**: `Float32Array`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapePropertyData.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapePropertyData.ts#L10)
+
+## Methods
+
+### formBytes
+
+▸ **formBytes**(`byteArray`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `byteArray` | `BytesArray` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/BlendShapePropertyData.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/BlendShapePropertyData.ts#L11)
diff --git a/docs/api/classes/BloomPost.md b/docs/api/classes/BloomPost.md
new file mode 100644
index 00000000..5de4d8a6
--- /dev/null
+++ b/docs/api/classes/BloomPost.md
@@ -0,0 +1,415 @@
+# Class: BloomPost
+
+Bloom Effects
+```
+bloom setting
+let cfg = {@link Engine3D.setting.render.postProcessing.bloom};
+```
+
+## Hierarchy
+
+- `PostBase`
+
+ ↳ **`BloomPost`**
+
+### Constructors
+
+- [constructor](BloomPost.md#constructor)
+
+### Properties
+
+- [RT\_BloomDown](BloomPost.md#rt_bloomdown)
+- [RT\_threshold](BloomPost.md#rt_threshold)
+- [downSampleComputes](BloomPost.md#downsamplecomputes)
+- [upSampleComputes](BloomPost.md#upsamplecomputes)
+- [postCompute](BloomPost.md#postcompute)
+- [enable](BloomPost.md#enable)
+- [postRenderer](BloomPost.md#postrenderer)
+
+### Accessors
+
+- [downSampleBlurSize](BloomPost.md#downsampleblursize)
+- [downSampleBlurSigma](BloomPost.md#downsampleblursigma)
+- [upSampleBlurSize](BloomPost.md#upsampleblursize)
+- [upSampleBlurSigma](BloomPost.md#upsampleblursigma)
+- [luminanceThreshole](BloomPost.md#luminancethreshole)
+- [bloomIntensity](BloomPost.md#bloomintensity)
+- [hdr](BloomPost.md#hdr)
+
+### Methods
+
+- [onDetach](BloomPost.md#ondetach)
+- [onResize](BloomPost.md#onresize)
+- [destroy](BloomPost.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new BloomPost**(): [`BloomPost`](BloomPost.md)
+
+#### Returns
+
+[`BloomPost`](BloomPost.md)
+
+#### Overrides
+
+PostBase.constructor
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:51](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L51)
+
+## Properties
+
+### RT\_BloomDown
+
+• **RT\_BloomDown**: `VirtualTexture`[]
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L29)
+
+___
+
+### RT\_threshold
+
+• **RT\_threshold**: `VirtualTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L30)
+
+___
+
+### downSampleComputes
+
+• **downSampleComputes**: `ComputeShader`[]
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L39)
+
+___
+
+### upSampleComputes
+
+• **upSampleComputes**: `ComputeShader`[]
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L40)
+
+___
+
+### postCompute
+
+• **postCompute**: `ComputeShader`
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L41)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+PostBase.enable
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L20)
+
+___
+
+### postRenderer
+
+• **postRenderer**: `PostRenderer`
+
+#### Inherited from
+
+PostBase.postRenderer
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L21)
+
+## Accessors
+
+### downSampleBlurSize
+
+• `get` **downSampleBlurSize**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L76)
+
+• `set` **downSampleBlurSize**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L79)
+
+___
+
+### downSampleBlurSigma
+
+• `get` **downSampleBlurSigma**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L83)
+
+• `set` **downSampleBlurSigma**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L87)
+
+___
+
+### upSampleBlurSize
+
+• `get` **upSampleBlurSize**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L91)
+
+• `set` **upSampleBlurSize**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:95](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L95)
+
+___
+
+### upSampleBlurSigma
+
+• `get` **upSampleBlurSigma**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L99)
+
+• `set` **upSampleBlurSigma**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L103)
+
+___
+
+### luminanceThreshole
+
+• `get` **luminanceThreshole**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L107)
+
+• `set` **luminanceThreshole**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L111)
+
+___
+
+### bloomIntensity
+
+• `get` **bloomIntensity**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L115)
+
+• `set` **bloomIntensity**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L119)
+
+___
+
+### hdr
+
+• `get` **hdr**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L123)
+
+• `set` **hdr**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:127](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L127)
+
+## Methods
+
+### onDetach
+
+▸ **onDetach**(`view`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.onDetach
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L65)
+
+___
+
+### onResize
+
+▸ **onResize**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.onResize
+
+#### Defined in
+
+[src/gfx/renderJob/post/BloomPost.ts:280](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/BloomPost.ts#L280)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PostBase.destroy
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L87)
diff --git a/docs/api/classes/BoundUtil.md b/docs/api/classes/BoundUtil.md
new file mode 100644
index 00000000..aed91a38
--- /dev/null
+++ b/docs/api/classes/BoundUtil.md
@@ -0,0 +1,65 @@
+# Class: BoundUtil
+
+### Constructors
+
+- [constructor](BoundUtil.md#constructor)
+
+### Methods
+
+- [genMeshBounds](BoundUtil.md#genmeshbounds)
+- [transformBound](BoundUtil.md#transformbound)
+
+## Constructors
+
+### constructor
+
+• **new BoundUtil**(): [`BoundUtil`](BoundUtil.md)
+
+#### Returns
+
+[`BoundUtil`](BoundUtil.md)
+
+## Methods
+
+### genMeshBounds
+
+▸ **genMeshBounds**(`obj`, `bound?`): `BoundingBox`
+
+Merge the bounding boxes that have been added to the world matrix based on the mesh of the children node
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) |
+| `bound?` | `BoundingBox` |
+
+#### Returns
+
+`BoundingBox`
+
+#### Defined in
+
+[src/util/BoundUtil.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/util/BoundUtil.ts#L17)
+
+___
+
+### transformBound
+
+▸ **transformBound**(`matrix`, `source`, `bound?`): `BoundingBox`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `matrix` | [`Matrix4`](Matrix4.md) |
+| `source` | `BoundingBox` |
+| `bound?` | `BoundingBox` |
+
+#### Returns
+
+`BoundingBox`
+
+#### Defined in
+
+[src/util/BoundUtil.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/util/BoundUtil.ts#L57)
diff --git a/docs/api/classes/BoxColliderShape.md b/docs/api/classes/BoxColliderShape.md
new file mode 100644
index 00000000..02aaab3c
--- /dev/null
+++ b/docs/api/classes/BoxColliderShape.md
@@ -0,0 +1,190 @@
+# Class: BoxColliderShape
+
+Box shaped collision body.
+It is a basic box shaped primitive collision body.
+
+## Hierarchy
+
+- [`ColliderShape`](ColliderShape.md)
+
+ ↳ **`BoxColliderShape`**
+
+### Constructors
+
+- [constructor](BoxColliderShape.md#constructor)
+
+### Accessors
+
+- [shapeType](BoxColliderShape.md#shapetype)
+- [center](BoxColliderShape.md#center)
+- [size](BoxColliderShape.md#size)
+- [halfSize](BoxColliderShape.md#halfsize)
+
+### Methods
+
+- [setFromCenterAndSize](BoxColliderShape.md#setfromcenterandsize)
+
+## Constructors
+
+### constructor
+
+• **new BoxColliderShape**(): [`BoxColliderShape`](BoxColliderShape.md)
+
+#### Returns
+
+[`BoxColliderShape`](BoxColliderShape.md)
+
+#### Overrides
+
+[ColliderShape](ColliderShape.md).[constructor](ColliderShape.md#constructor)
+
+#### Defined in
+
+[src/components/shape/BoxColliderShape.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/BoxColliderShape.ts#L20)
+
+## Accessors
+
+### shapeType
+
+• `get` **shapeType**(): [`ColliderShapeType`](../enums/ColliderShapeType.md)
+
+#### Returns
+
+[`ColliderShapeType`](../enums/ColliderShapeType.md)
+
+#### Inherited from
+
+ColliderShape.shapeType
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L40)
+
+___
+
+### center
+
+• `get` **center**(): [`Vector3`](Vector3.md)
+
+The position of the collision object in the local space of the object.
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+ColliderShape.center
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L59)
+
+• `set` **center**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ColliderShape.center
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L63)
+
+___
+
+### size
+
+• `get` **size**(): [`Vector3`](Vector3.md)
+
+The size of the collision body in the X, Y, and Z directions.
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3
+
+#### Inherited from
+
+ColliderShape.size
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L72)
+
+• `set` **size**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ColliderShape.size
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L76)
+
+___
+
+### halfSize
+
+• `get` **halfSize**(): [`Vector3`](Vector3.md)
+
+Half the size of the collision body.
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+ColliderShape.halfSize
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L84)
+
+## Methods
+
+### setFromCenterAndSize
+
+▸ **setFromCenterAndSize**(`ct?`, `sz?`): `this`
+
+Set the position and size of collision objects
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `ct?` | [`Vector3`](Vector3.md) | The position of the collision object in the local space of the object. |
+| `sz?` | [`Vector3`](Vector3.md) | The size of the collision body in the X, Y, and Z directions. |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ColliderShape](ColliderShape.md).[setFromCenterAndSize](ColliderShape.md#setfromcenterandsize)
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L50)
diff --git a/docs/api/classes/BoxGeometry.md b/docs/api/classes/BoxGeometry.md
new file mode 100644
index 00000000..eff15b6f
--- /dev/null
+++ b/docs/api/classes/BoxGeometry.md
@@ -0,0 +1,655 @@
+# Class: BoxGeometry
+
+Box geometry
+
+## Hierarchy
+
+- [`GeometryBase`](GeometryBase.md)
+
+ ↳ **`BoxGeometry`**
+
+### Constructors
+
+- [constructor](BoxGeometry.md#constructor)
+
+### Properties
+
+- [instanceID](BoxGeometry.md#instanceid)
+- [name](BoxGeometry.md#name)
+- [subGeometries](BoxGeometry.md#subgeometries)
+- [morphTargetsRelative](BoxGeometry.md#morphtargetsrelative)
+- [morphTargetDictionary](BoxGeometry.md#morphtargetdictionary)
+- [skinNames](BoxGeometry.md#skinnames)
+- [bindPose](BoxGeometry.md#bindpose)
+- [blendShapeData](BoxGeometry.md#blendshapedata)
+- [vertexDim](BoxGeometry.md#vertexdim)
+- [vertexCount](BoxGeometry.md#vertexcount)
+- [width](BoxGeometry.md#width)
+- [height](BoxGeometry.md#height)
+- [depth](BoxGeometry.md#depth)
+
+### Accessors
+
+- [indicesBuffer](BoxGeometry.md#indicesbuffer)
+- [vertexBuffer](BoxGeometry.md#vertexbuffer)
+- [vertexAttributes](BoxGeometry.md#vertexattributes)
+- [vertexAttributeMap](BoxGeometry.md#vertexattributemap)
+- [geometryType](BoxGeometry.md#geometrytype)
+- [bounds](BoxGeometry.md#bounds)
+
+### Methods
+
+- [addSubGeometry](BoxGeometry.md#addsubgeometry)
+- [generate](BoxGeometry.md#generate)
+- [setIndices](BoxGeometry.md#setindices)
+- [setAttribute](BoxGeometry.md#setattribute)
+- [getAttribute](BoxGeometry.md#getattribute)
+- [hasAttribute](BoxGeometry.md#hasattribute)
+- [genWireframe](BoxGeometry.md#genwireframe)
+- [compute](BoxGeometry.md#compute)
+- [computeNormals](BoxGeometry.md#computenormals)
+- [isPrimitive](BoxGeometry.md#isprimitive)
+- [destroy](BoxGeometry.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new BoxGeometry**(`width?`, `height?`, `depth?`): [`BoxGeometry`](BoxGeometry.md)
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `width` | `number` | `1` | {number} box width, default value is 1 |
+| `height` | `number` | `1` | {number} box height, default value is 1 |
+| `depth` | `number` | `1` | {number} box depth, default value is 1 |
+
+#### Returns
+
+[`BoxGeometry`](BoxGeometry.md)
+
+#### Overrides
+
+[GeometryBase](GeometryBase.md).[constructor](GeometryBase.md#constructor)
+
+#### Defined in
+
+[src/shape/BoxGeometry.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/shape/BoxGeometry.ts#L30)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[instanceID](GeometryBase.md#instanceid)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L39)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[name](GeometryBase.md#name)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L40)
+
+___
+
+### subGeometries
+
+• **subGeometries**: [`SubGeometry`](SubGeometry.md)[] = `[]`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[subGeometries](GeometryBase.md#subgeometries)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L41)
+
+___
+
+### morphTargetsRelative
+
+• **morphTargetsRelative**: `boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetsRelative](GeometryBase.md#morphtargetsrelative)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L42)
+
+___
+
+### morphTargetDictionary
+
+• **morphTargetDictionary**: `Object`
+
+#### Index signature
+
+▪ [blenderName: `string`]: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetDictionary](GeometryBase.md#morphtargetdictionary)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L43)
+
+___
+
+### skinNames
+
+• **skinNames**: `string`[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[skinNames](GeometryBase.md#skinnames)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L44)
+
+___
+
+### bindPose
+
+• **bindPose**: [`Matrix4`](Matrix4.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[bindPose](GeometryBase.md#bindpose)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L45)
+
+___
+
+### blendShapeData
+
+• **blendShapeData**: [`BlendShapeData`](BlendShapeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[blendShapeData](GeometryBase.md#blendshapedata)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L46)
+
+___
+
+### vertexDim
+
+• **vertexDim**: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexDim](GeometryBase.md#vertexdim)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L47)
+
+___
+
+### vertexCount
+
+• **vertexCount**: `number` = `0`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexCount](GeometryBase.md#vertexcount)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L48)
+
+___
+
+### width
+
+• **width**: `number`
+
+box width
+
+#### Defined in
+
+[src/shape/BoxGeometry.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/shape/BoxGeometry.ts#L14)
+
+___
+
+### height
+
+• **height**: `number`
+
+box height
+
+#### Defined in
+
+[src/shape/BoxGeometry.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/shape/BoxGeometry.ts#L18)
+
+___
+
+### depth
+
+• **depth**: `number`
+
+box depth
+
+#### Defined in
+
+[src/shape/BoxGeometry.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/shape/BoxGeometry.ts#L22)
+
+## Accessors
+
+### indicesBuffer
+
+• `get` **indicesBuffer**(): [`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Returns
+
+[`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Inherited from
+
+GeometryBase.indicesBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L69)
+
+___
+
+### vertexBuffer
+
+• `get` **vertexBuffer**(): [`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Returns
+
+[`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Inherited from
+
+GeometryBase.vertexBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L73)
+
+___
+
+### vertexAttributes
+
+• `get` **vertexAttributes**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+GeometryBase.vertexAttributes
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L77)
+
+___
+
+### vertexAttributeMap
+
+• `get` **vertexAttributeMap**(): `Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Returns
+
+`Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Inherited from
+
+GeometryBase.vertexAttributeMap
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L81)
+
+___
+
+### geometryType
+
+• `get` **geometryType**(): [`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Returns
+
+[`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L85)
+
+• `set` **geometryType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryVertexType`](../enums/GeometryVertexType.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L88)
+
+___
+
+### bounds
+
+• `get` **bounds**(): `BoundingBox`
+
+#### Returns
+
+`BoundingBox`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L92)
+
+• `set` **bounds**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BoundingBox` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L135)
+
+## Methods
+
+### addSubGeometry
+
+▸ **addSubGeometry**(`...lodLevels`): [`SubGeometry`](SubGeometry.md)
+
+add subGeometry from lod level
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `...lodLevels` | [`LODDescriptor`](../types/LODDescriptor.md)[] |
+
+#### Returns
+
+[`SubGeometry`](SubGeometry.md)
+
+**`See`**
+
+LODDescriptor
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[addSubGeometry](GeometryBase.md#addsubgeometry)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L144)
+
+___
+
+### generate
+
+▸ **generate**(`shaderReflection`): `void`
+
+create geometry by shaderReflection
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `shaderReflection` | `ShaderReflection` | ShaderReflection |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[generate](GeometryBase.md#generate)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L155)
+
+___
+
+### setIndices
+
+▸ **setIndices**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setIndices](GeometryBase.md#setindices)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L165)
+
+___
+
+### setAttribute
+
+▸ **setAttribute**(`attribute`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setAttribute](GeometryBase.md#setattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L177)
+
+___
+
+### getAttribute
+
+▸ **getAttribute**(`attribute`): [`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+[`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[getAttribute](GeometryBase.md#getattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L190)
+
+___
+
+### hasAttribute
+
+▸ **hasAttribute**(`attribute`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[hasAttribute](GeometryBase.md#hasattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L194)
+
+___
+
+### genWireframe
+
+▸ **genWireframe**(): [`Vector3`](Vector3.md)[]
+
+#### Returns
+
+[`Vector3`](Vector3.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[genWireframe](GeometryBase.md#genwireframe)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L198)
+
+___
+
+### compute
+
+▸ **compute**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[compute](GeometryBase.md#compute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L251)
+
+___
+
+### computeNormals
+
+▸ **computeNormals**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[computeNormals](GeometryBase.md#computenormals)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:270](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L270)
+
+___
+
+### isPrimitive
+
+▸ **isPrimitive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[isPrimitive](GeometryBase.md#isprimitive)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L312)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[destroy](GeometryBase.md#destroy)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:316](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L316)
diff --git a/docs/api/classes/CEvent.md b/docs/api/classes/CEvent.md
new file mode 100644
index 00000000..710bcacc
--- /dev/null
+++ b/docs/api/classes/CEvent.md
@@ -0,0 +1,295 @@
+# Class: CEvent
+
+Basic class of Event
+
+## Hierarchy
+
+- **`CEvent`**
+
+ ↳ [`OAnimationEvent`](OAnimationEvent.md)
+
+ ↳ [`KeyEvent`](KeyEvent.md)
+
+ ↳ [`PointerEvent3D`](PointerEvent3D.md)
+
+### Constructors
+
+- [constructor](CEvent.md#constructor)
+
+### Properties
+
+- [target](CEvent.md#target)
+- [currentTarget](CEvent.md#currenttarget)
+- [type](CEvent.md#type)
+- [data](CEvent.md#data)
+- [param](CEvent.md#param)
+- [time](CEvent.md#time)
+- [delay](CEvent.md#delay)
+- [mouseCode](CEvent.md#mousecode)
+- [ctrlKey](CEvent.md#ctrlkey)
+- [metaKey](CEvent.md#metakey)
+- [altKey](CEvent.md#altkey)
+- [shiftKey](CEvent.md#shiftkey)
+- [targetTouches](CEvent.md#targettouches)
+- [changedTouches](CEvent.md#changedtouches)
+- [touches](CEvent.md#touches)
+- [view](CEvent.md#view)
+
+### Accessors
+
+- [isStopImmediatePropagation](CEvent.md#isstopimmediatepropagation)
+
+### Methods
+
+- [stopImmediatePropagation](CEvent.md#stopimmediatepropagation)
+
+## Constructors
+
+### constructor
+
+• **new CEvent**(`eventType?`, `data?`): [`CEvent`](CEvent.md)
+
+Create a new event, with type and data
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `eventType` | `string` | `null` | {any} eventType |
+| `data` | `any` | `null` | {any} param |
+
+#### Returns
+
+[`CEvent`](CEvent.md)
+
+#### Defined in
+
+[src/event/CEvent.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L102)
+
+## Properties
+
+### target
+
+• **target**: [`Object3D`](Object3D.md)
+
+Event target, it's usually event dispatcher
+
+#### Defined in
+
+[src/event/CEvent.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L13)
+
+___
+
+### currentTarget
+
+• **currentTarget**: `CEventListener`
+
+Current event target, it's current bubble object
+
+#### Defined in
+
+[src/event/CEvent.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L18)
+
+___
+
+### type
+
+• **type**: `string`
+
+event type, it's registered string of key
+
+#### Defined in
+
+[src/event/CEvent.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L23)
+
+___
+
+### data
+
+• **data**: `any`
+
+extra data.Used for the transmission process of events, carrying data
+
+#### Defined in
+
+[src/event/CEvent.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L28)
+
+___
+
+### param
+
+• **param**: `any`
+
+The param data when event is registered
+
+#### Defined in
+
+[src/event/CEvent.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L34)
+
+___
+
+### time
+
+• **time**: `number` = `0`
+
+the time when event is
+
+#### Defined in
+
+[src/event/CEvent.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L40)
+
+___
+
+### delay
+
+• **delay**: `number` = `0`
+
+the delay time when event is dispatched.
+
+#### Defined in
+
+[src/event/CEvent.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L46)
+
+___
+
+### mouseCode
+
+• **mouseCode**: `number` = `0`
+
+mouse code, see
+
+**`Mouse Code`**
+
+[MouseCode](../enums/MouseCode.md)
+
+#### Defined in
+
+[src/event/CEvent.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L52)
+
+___
+
+### ctrlKey
+
+• **ctrlKey**: `boolean`
+
+Is Ctrl key pressed when the event occurs
+
+#### Defined in
+
+[src/event/CEvent.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L57)
+
+___
+
+### metaKey
+
+• **metaKey**: `boolean`
+
+Is Meta key pressed when the event occurs
+
+#### Defined in
+
+[src/event/CEvent.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L62)
+
+___
+
+### altKey
+
+• **altKey**: `boolean`
+
+Is Alt key pressed when the event occurs
+
+#### Defined in
+
+[src/event/CEvent.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L67)
+
+___
+
+### shiftKey
+
+• **shiftKey**: `boolean`
+
+Is Shift key pressed when the event occurs
+
+#### Defined in
+
+[src/event/CEvent.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L72)
+
+___
+
+### targetTouches
+
+• **targetTouches**: `TouchData`[]
+
+Collection of finger touch points, which registered
+
+#### Defined in
+
+[src/event/CEvent.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L77)
+
+___
+
+### changedTouches
+
+• **changedTouches**: `TouchData`[]
+
+Collection of finger touch points changed
+
+#### Defined in
+
+[src/event/CEvent.ts:82](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L82)
+
+___
+
+### touches
+
+• **touches**: `TouchData`[]
+
+Collection of finger touch points
+
+#### Defined in
+
+[src/event/CEvent.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L87)
+
+___
+
+### view
+
+• **view**: [`View3D`](View3D.md)
+
+binded view3D object in event.
+
+#### Defined in
+
+[src/event/CEvent.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L94)
+
+## Accessors
+
+### isStopImmediatePropagation
+
+• `get` **isStopImmediatePropagation**(): `boolean`
+
+Returns stopImmediatePropagation value
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/event/CEvent.ts:125](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L125)
+
+## Methods
+
+### stopImmediatePropagation
+
+▸ **stopImmediatePropagation**(): `void`
+
+Prevent bubbling of all event listeners in subsequent nodes of the current node in the event flow.
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/event/CEvent.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L110)
diff --git a/docs/api/classes/CEventDispatcher.md b/docs/api/classes/CEventDispatcher.md
new file mode 100644
index 00000000..35dd78d1
--- /dev/null
+++ b/docs/api/classes/CEventDispatcher.md
@@ -0,0 +1,227 @@
+# Class: CEventDispatcher
+
+Basic class of event diapatcher.
+It includes the implementation of functions such as event registration,
+deregistration, distribution, and unregister.
+
+## Hierarchy
+
+- **`CEventDispatcher`**
+
+ ↳ [`Entity`](Entity.md)
+
+ ↳ [`DDGIIrradianceGPUBufferReader`](DDGIIrradianceGPUBufferReader.md)
+
+ ↳ [`InputSystem`](InputSystem.md)
+
+ ↳ [`PickFire`](PickFire.md)
+
+### Constructors
+
+- [constructor](CEventDispatcher.md#constructor)
+
+### Methods
+
+- [dispatchEvent](CEventDispatcher.md#dispatchevent)
+- [destroy](CEventDispatcher.md#destroy)
+- [addEventListener](CEventDispatcher.md#addeventlistener)
+- [removeEventListener](CEventDispatcher.md#removeeventlistener)
+- [removeEventListenerAt](CEventDispatcher.md#removeeventlistenerat)
+- [removeAllEventListener](CEventDispatcher.md#removealleventlistener)
+- [containEventListener](CEventDispatcher.md#containeventlistener)
+- [hasEventListener](CEventDispatcher.md#haseventlistener)
+
+## Constructors
+
+### constructor
+
+• **new CEventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+## Methods
+
+### dispatchEvent
+
+▸ **dispatchEvent**(`event`): `void`
+
+Dispatch an event to all registered objects with a specific type of listener.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `event` | [`CEvent`](CEvent.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L24)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+release all registered event.
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L55)
+
+___
+
+### addEventListener
+
+▸ **addEventListener**(`type`, `callback`, `thisObject`, `param?`, `priority?`): `number`
+
+register an event listener to event distancher.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event type. |
+| `callback` | `Function` | `undefined` | {Function} The callback function that handles events. This function must accept an Event3D object as its unique parameter and cannot return any result. for example: function(evt:Event3D):void. |
+| `thisObject` | `any` | `undefined` | {any} Current registration object, it'll call callback function. |
+| `param` | `any` | `null` | {any} the data binded to registered event, the default value is null. |
+| `priority` | `number` | `0` | {number} The priority of callback function execution, with a larger set value having priority to call |
+
+#### Returns
+
+`number`
+
+Returns register event id
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L79)
+
+___
+
+### removeEventListener
+
+▸ **removeEventListener**(`type`, `callback`, `thisObject`): `void`
+
+Remove Event Listening
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` \| `number` | {string} event type |
+| `callback` | `Function` | {Function} callback function of event register |
+| `thisObject` | `any` | {any} The current registered object. |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L113)
+
+___
+
+### removeEventListenerAt
+
+▸ **removeEventListenerAt**(`id`): `boolean`
+
+Remove an event Listening with id
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L133)
+
+___
+
+### removeAllEventListener
+
+▸ **removeAllEventListener**(`eventType?`): `void`
+
+Specify a event type to remove all related event listeners
+eventType event type, set null to remove all event listeners
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `eventType` | `string` \| `number` | `null` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L153)
+
+___
+
+### containEventListener
+
+▸ **containEventListener**(`type`): `boolean`
+
+whether the target presence of a listener with event type.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` | {string} event type. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:185](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L185)
+
+___
+
+### hasEventListener
+
+▸ **hasEventListener**(`type`, `callback?`, `thisObject?`): `boolean`
+
+whether the target presence of a listener with event type. it associate more registration parameters.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event name. |
+| `callback` | `Function` | `null` | {Function} callback function of event register. |
+| `thisObject` | `any` | `null` | {any} The registered object. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L198)
diff --git a/docs/api/classes/CSM.md b/docs/api/classes/CSM.md
new file mode 100644
index 00000000..1fb5971f
--- /dev/null
+++ b/docs/api/classes/CSM.md
@@ -0,0 +1,29 @@
+# Class: CSM
+
+### Constructors
+
+- [constructor](CSM.md#constructor)
+
+### Properties
+
+- [Cascades](CSM.md#cascades)
+
+## Constructors
+
+### constructor
+
+• **new CSM**(): [`CSM`](CSM.md)
+
+#### Returns
+
+[`CSM`](CSM.md)
+
+## Properties
+
+### Cascades
+
+▪ `Static` `Readonly` **Cascades**: ``4``
+
+#### Defined in
+
+[src/core/csm/CSM.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/core/csm/CSM.ts#L2)
diff --git a/docs/api/classes/Camera3D.md b/docs/api/classes/Camera3D.md
new file mode 100644
index 00000000..d5f6043f
--- /dev/null
+++ b/docs/api/classes/Camera3D.md
@@ -0,0 +1,1406 @@
+# Class: Camera3D
+
+Camera components
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`Camera3D`**
+
+### Constructors
+
+- [constructor](Camera3D.md#constructor)
+
+### Properties
+
+- [object3D](Camera3D.md#object3d)
+- [isDestroyed](Camera3D.md#isdestroyed)
+- [fov](Camera3D.md#fov)
+- [name](Camera3D.md#name)
+- [aspect](Camera3D.md#aspect)
+- [near](Camera3D.md#near)
+- [far](Camera3D.md#far)
+- [viewPort](Camera3D.md#viewport)
+- [frustum](Camera3D.md#frustum)
+- [sh\_bak](Camera3D.md#sh_bak)
+- [sh](Camera3D.md#sh)
+- [isShadowCamera](Camera3D.md#isshadowcamera)
+- [mainCamera](Camera3D.md#maincamera)
+- [lookTarget](Camera3D.md#looktarget)
+- [type](Camera3D.md#type)
+- [csm](Camera3D.md#csm)
+
+### Accessors
+
+- [eventDispatcher](Camera3D.md#eventdispatcher)
+- [isStart](Camera3D.md#isstart)
+- [transform](Camera3D.md#transform)
+- [enable](Camera3D.md#enable)
+- [enableCSM](Camera3D.md#enablecsm)
+- [viewMatrix](Camera3D.md#viewmatrix)
+- [shadowViewMatrix](Camera3D.md#shadowviewmatrix)
+- [pvMatrix](Camera3D.md#pvmatrix)
+- [pvMatrix2](Camera3D.md#pvmatrix2)
+- [pvMatrixInv](Camera3D.md#pvmatrixinv)
+- [vMatrixInv](Camera3D.md#vmatrixinv)
+- [cameraToWorld](Camera3D.md#cameratoworld)
+- [ndcToView](Camera3D.md#ndctoview)
+- [projectionMatrixInv](Camera3D.md#projectionmatrixinv)
+- [jitterFrameIndex](Camera3D.md#jitterframeindex)
+- [jitterX](Camera3D.md#jitterx)
+- [jitterY](Camera3D.md#jittery)
+
+### Methods
+
+- [start](Camera3D.md#start)
+- [stop](Camera3D.md#stop)
+- [onEnable](Camera3D.md#onenable)
+- [onDisable](Camera3D.md#ondisable)
+- [onLateUpdate](Camera3D.md#onlateupdate)
+- [onBeforeUpdate](Camera3D.md#onbeforeupdate)
+- [onCompute](Camera3D.md#oncompute)
+- [onGraphic](Camera3D.md#ongraphic)
+- [onParentChange](Camera3D.md#onparentchange)
+- [onAddChild](Camera3D.md#onaddchild)
+- [onRemoveChild](Camera3D.md#onremovechild)
+- [cloneTo](Camera3D.md#cloneto)
+- [copyComponent](Camera3D.md#copycomponent)
+- [beforeDestroy](Camera3D.md#beforedestroy)
+- [destroy](Camera3D.md#destroy)
+- [init](Camera3D.md#init)
+- [getShadowBias](Camera3D.md#getshadowbias)
+- [getShadowWorldExtents](Camera3D.md#getshadowworldextents)
+- [getCSMShadowBiasScale](Camera3D.md#getcsmshadowbiasscale)
+- [getCSMShadowWorldExtents](Camera3D.md#getcsmshadowworldextents)
+- [perspective](Camera3D.md#perspective)
+- [resetPerspective](Camera3D.md#resetperspective)
+- [ortho](Camera3D.md#ortho)
+- [orthoOffCenter](Camera3D.md#orthooffcenter)
+- [orthoZo](Camera3D.md#orthozo)
+- [object3DToScreenRay](Camera3D.md#object3dtoscreenray)
+- [screenRayToObject3D](Camera3D.md#screenraytoobject3d)
+- [unProject](Camera3D.md#unproject)
+- [screenPointToRay](Camera3D.md#screenpointtoray)
+- [screenPointToWorld](Camera3D.md#screenpointtoworld)
+- [worldToScreenPoint](Camera3D.md#worldtoscreenpoint)
+- [lookAt](Camera3D.md#lookat)
+- [enableJitterProjection](Camera3D.md#enablejitterprojection)
+- [getWorldDirection](Camera3D.md#getworlddirection)
+
+## Constructors
+
+### constructor
+
+• **new Camera3D**(): [`Camera3D`](Camera3D.md)
+
+#### Returns
+
+[`Camera3D`](Camera3D.md)
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+#### Defined in
+
+[src/core/Camera3D.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L128)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### fov
+
+• **fov**: `number` = `1`
+
+camera Perspective
+
+#### Defined in
+
+[src/core/Camera3D.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L27)
+
+___
+
+### name
+
+• **name**: `string`
+
+camera use name
+
+#### Defined in
+
+[src/core/Camera3D.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L32)
+
+___
+
+### aspect
+
+• **aspect**: `number` = `1`
+
+Viewport width and height Scale
+
+#### Defined in
+
+[src/core/Camera3D.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L37)
+
+___
+
+### near
+
+• **near**: `number` = `1`
+
+camera near plane
+
+#### Defined in
+
+[src/core/Camera3D.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L42)
+
+___
+
+### far
+
+• **far**: `number` = `5000`
+
+camera far plane
+
+#### Defined in
+
+[src/core/Camera3D.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L47)
+
+___
+
+### viewPort
+
+• **viewPort**: [`Rect`](Rect.md)
+
+camera view port size
+
+#### Defined in
+
+[src/core/Camera3D.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L52)
+
+___
+
+### frustum
+
+• **frustum**: `Frustum`
+
+camera frustum
+
+#### Defined in
+
+[src/core/Camera3D.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L57)
+
+___
+
+### sh\_bak
+
+• **sh\_bak**: `Float32Array`
+
+#### Defined in
+
+[src/core/Camera3D.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L59)
+
+___
+
+### sh
+
+• **sh**: `Float32Array`
+
+#### Defined in
+
+[src/core/Camera3D.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L71)
+
+___
+
+### isShadowCamera
+
+• **isShadowCamera**: `boolean` = `false`
+
+this camera is shadow camera
+
+#### Defined in
+
+[src/core/Camera3D.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L76)
+
+___
+
+### mainCamera
+
+• **mainCamera**: [`Camera3D`](Camera3D.md)
+
+#### Defined in
+
+[src/core/Camera3D.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L92)
+
+___
+
+### lookTarget
+
+• **lookTarget**: [`Vector3`](Vector3.md)
+
+camera look at from where point
+
+#### Defined in
+
+[src/core/Camera3D.ts:105](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L105)
+
+___
+
+### type
+
+• **type**: [`CameraType`](../enums/CameraType.md) = `CameraType.perspective`
+
+camera type
+
+#### Defined in
+
+[src/core/Camera3D.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L110)
+
+___
+
+### csm
+
+• **csm**: [`FrustumCSM`](FrustumCSM.md)
+
+#### Defined in
+
+[src/core/Camera3D.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L112)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### enableCSM
+
+• `get` **enableCSM**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/Camera3D.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L119)
+
+• `set` **enableCSM**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/Camera3D.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L122)
+
+___
+
+### viewMatrix
+
+• `get` **viewMatrix**(): [`Matrix4`](Matrix4.md)
+
+view invert matrix
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/core/Camera3D.ts:246](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L246)
+
+___
+
+### shadowViewMatrix
+
+• `get` **shadowViewMatrix**(): [`Matrix4`](Matrix4.md)
+
+shadow camera view invert matrix
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/core/Camera3D.ts:256](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L256)
+
+___
+
+### pvMatrix
+
+• `get` **pvMatrix**(): [`Matrix4`](Matrix4.md)
+
+get project * view matrix
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/core/Camera3D.ts:307](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L307)
+
+___
+
+### pvMatrix2
+
+• `get` **pvMatrix2**(): [`Matrix4`](Matrix4.md)
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/core/Camera3D.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L312)
+
+___
+
+### pvMatrixInv
+
+• `get` **pvMatrixInv**(): [`Matrix4`](Matrix4.md)
+
+get (project * view) invert matrix
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/core/Camera3D.ts:322](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L322)
+
+___
+
+### vMatrixInv
+
+• `get` **vMatrixInv**(): [`Matrix4`](Matrix4.md)
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/core/Camera3D.ts:328](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L328)
+
+___
+
+### cameraToWorld
+
+• `get` **cameraToWorld**(): [`Matrix4`](Matrix4.md)
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/core/Camera3D.ts:334](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L334)
+
+___
+
+### ndcToView
+
+• `get` **ndcToView**(): [`Matrix4`](Matrix4.md)
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/core/Camera3D.ts:342](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L342)
+
+___
+
+### projectionMatrixInv
+
+• `get` **projectionMatrixInv**(): [`Matrix4`](Matrix4.md)
+
+get project invert matrix
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/core/Camera3D.ts:352](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L352)
+
+___
+
+### jitterFrameIndex
+
+• `get` **jitterFrameIndex**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/Camera3D.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L486)
+
+___
+
+### jitterX
+
+• `get` **jitterX**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/Camera3D.ts:490](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L490)
+
+___
+
+### jitterY
+
+• `get` **jitterY**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/Camera3D.ts:494](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L494)
+
+## Methods
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[start](ComponentBase.md#start)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onEnable](ComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onDisable](ComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[destroy](ComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
+
+___
+
+### init
+
+▸ **init**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[init](ComponentBase.md#init)
+
+#### Defined in
+
+[src/core/Camera3D.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L132)
+
+___
+
+### getShadowBias
+
+▸ **getShadowBias**(`depthTexSize`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `depthTexSize` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/Camera3D.ts:146](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L146)
+
+___
+
+### getShadowWorldExtents
+
+▸ **getShadowWorldExtents**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/Camera3D.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L152)
+
+___
+
+### getCSMShadowBiasScale
+
+▸ **getCSMShadowBiasScale**(`shadowCamera`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shadowCamera` | [`Camera3D`](Camera3D.md) |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/Camera3D.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L168)
+
+___
+
+### getCSMShadowWorldExtents
+
+▸ **getCSMShadowWorldExtents**(`index`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/Camera3D.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L178)
+
+___
+
+### perspective
+
+▸ **perspective**(`fov`, `aspect`, `near`, `far`): `void`
+
+Create a perspective camera
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `fov` | `number` |
+| `aspect` | `number` |
+| `near` | `number` |
+| `far` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/Camera3D.ts:189](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L189)
+
+___
+
+### resetPerspective
+
+▸ **resetPerspective**(`aspect`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `aspect` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/Camera3D.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L198)
+
+___
+
+### ortho
+
+▸ **ortho**(`width`, `height`, `znear`, `zfar`): `void`
+
+Create an orthographic camera
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `width` | `number` | screen width |
+| `height` | `number` | screen height |
+| `znear` | `number` | camera near plane |
+| `zfar` | `number` | camera far plane |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/Camera3D.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L211)
+
+___
+
+### orthoOffCenter
+
+▸ **orthoOffCenter**(`l`, `r`, `b`, `t`, `zn`, `zf`): `void`
+
+Create an orthographic camera
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `l` | `number` | |
+| `r` | `number` | |
+| `b` | `number` | |
+| `t` | `number` | |
+| `zn` | `number` | camera near plane |
+| `zf` | `number` | camera far plane |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/Camera3D.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L228)
+
+___
+
+### orthoZo
+
+▸ **orthoZo**(`l`, `r`, `b`, `t`, `zn`, `zf`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `l` | `number` |
+| `r` | `number` |
+| `b` | `number` |
+| `t` | `number` |
+| `zn` | `number` |
+| `zf` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/Camera3D.ts:235](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L235)
+
+___
+
+### object3DToScreenRay
+
+▸ **object3DToScreenRay**(`n`, `target?`): [`Vector3`](Vector3.md)
+
+world space object to screen
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `n` | [`Vector3`](Vector3.md) | `undefined` | world space |
+| `target` | [`Vector3`](Vector3.md) | `null` | Creating an orthogonal camera with 2D screen coordinates that default to null will return a new object |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/core/Camera3D.ts:268](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L268)
+
+___
+
+### screenRayToObject3D
+
+▸ **screenRayToObject3D**(`n`, `target?`): [`Vector3`](Vector3.md)
+
+Convert 2D screen coordinates to 3D coordinates as world space
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `n` | [`Vector3`](Vector3.md) | `undefined` | 2D screen coordinates |
+| `target` | [`Vector3`](Vector3.md) | `null` | 3D coordinates as world space |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/core/Camera3D.ts:288](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L288)
+
+___
+
+### unProject
+
+▸ **unProject**(`nX`, `nY`, `sZ`, `target?`): [`Vector3`](Vector3.md)
+
+Enter a 3D coordinate point to obtain the projected coordinate point
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `nX` | `number` | 3D x |
+| `nY` | `number` | 3D y |
+| `sZ` | `number` | 3D z |
+| `target?` | [`Vector3`](Vector3.md) | The projected coordinate point can be empty |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Coordinates after projection
+
+#### Defined in
+
+[src/core/Camera3D.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L366)
+
+___
+
+### screenPointToRay
+
+▸ **screenPointToRay**(`viewPortPosX`, `viewPortPosY`): [`Ray`](Ray.md)
+
+Enter the 2D coordinates of the screen to obtain a ray that starts from the camera position and passes through the corresponding 3D position of the screen.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `viewPortPosX` | `number` | Screen x coordinate |
+| `viewPortPosY` | `number` | Screen y coordinate |
+
+#### Returns
+
+[`Ray`](Ray.md)
+
+ray
+
+#### Defined in
+
+[src/core/Camera3D.ts:405](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L405)
+
+___
+
+### screenPointToWorld
+
+▸ **screenPointToWorld**(`viewPortPosX`, `viewPortPosY`, `z`): [`Vector3`](Vector3.md)
+
+Convert screen coordinates to world coordinates
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `viewPortPosX` | `number` | Screen x coordinate |
+| `viewPortPosY` | `number` | Screen y coordinate |
+| `z` | `number` | Screen z coordinate |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+World coordinates
+
+#### Defined in
+
+[src/core/Camera3D.ts:426](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L426)
+
+___
+
+### worldToScreenPoint
+
+▸ **worldToScreenPoint**(`point`, `target?`): [`Vector3`](Vector3.md)
+
+Convert world coordinates to screen coordinates
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `point` | [`Vector3`](Vector3.md) |
+| `target?` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+World coordinates
+
+#### Defined in
+
+[src/core/Camera3D.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L438)
+
+___
+
+### lookAt
+
+▸ **lookAt**(`pos`, `target`, `up?`): `void`
+
+Current object's gaze position (global) (modified by its own global transformation)
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `pos` | [`Vector3`](Vector3.md) | `undefined` | Own position (global) |
+| `target` | [`Vector3`](Vector3.md) | `undefined` | Location of the target (global) |
+| `up` | [`Vector3`](Vector3.md) | `Vector3.Y_AXIS` | Upward direction |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/Camera3D.ts:449](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L449)
+
+___
+
+### enableJitterProjection
+
+▸ **enableJitterProjection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/Camera3D.ts:498](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L498)
+
+___
+
+### getWorldDirection
+
+▸ **getWorldDirection**(`target?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `target?` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/core/Camera3D.ts:603](https://github.com/Orillusion/orillusion/blob/main/src/core/Camera3D.ts#L603)
diff --git a/docs/api/classes/CameraUtil.md b/docs/api/classes/CameraUtil.md
new file mode 100644
index 00000000..beb977b0
--- /dev/null
+++ b/docs/api/classes/CameraUtil.md
@@ -0,0 +1,44 @@
+# Class: CameraUtil
+
+Camera3D tool class
+
+### Constructors
+
+- [constructor](CameraUtil.md#constructor)
+
+### Methods
+
+- [createCamera3DObject](CameraUtil.md#createcamera3dobject)
+
+## Constructors
+
+### constructor
+
+• **new CameraUtil**(): [`CameraUtil`](CameraUtil.md)
+
+#### Returns
+
+[`CameraUtil`](CameraUtil.md)
+
+## Methods
+
+### createCamera3DObject
+
+▸ **createCamera3DObject**(`parent?`, `name?`): [`Camera3D`](Camera3D.md)
+
+create a Camera3D component
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `parent?` | [`Object3D`](Object3D.md) | parent object3D |
+| `name?` | `string` | set name to the owner of this camera3D |
+
+#### Returns
+
+[`Camera3D`](Camera3D.md)
+
+#### Defined in
+
+[src/util/CameraUtil.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/util/CameraUtil.ts#L18)
diff --git a/docs/api/classes/CapsuleColliderShape.md b/docs/api/classes/CapsuleColliderShape.md
new file mode 100644
index 00000000..ac1d99f9
--- /dev/null
+++ b/docs/api/classes/CapsuleColliderShape.md
@@ -0,0 +1,251 @@
+# Class: CapsuleColliderShape
+
+Capsule collision body.
+Composed of two hemispheres connected to a cylinder.
+
+## Hierarchy
+
+- [`ColliderShape`](ColliderShape.md)
+
+ ↳ **`CapsuleColliderShape`**
+
+### Constructors
+
+- [constructor](CapsuleColliderShape.md#constructor)
+
+### Properties
+
+- [radius](CapsuleColliderShape.md#radius)
+- [height](CapsuleColliderShape.md#height)
+
+### Accessors
+
+- [shapeType](CapsuleColliderShape.md#shapetype)
+- [center](CapsuleColliderShape.md#center)
+- [size](CapsuleColliderShape.md#size)
+- [halfSize](CapsuleColliderShape.md#halfsize)
+
+### Methods
+
+- [setFromCenterAndSize](CapsuleColliderShape.md#setfromcenterandsize)
+- [rayPick](CapsuleColliderShape.md#raypick)
+
+## Constructors
+
+### constructor
+
+• **new CapsuleColliderShape**(): [`CapsuleColliderShape`](CapsuleColliderShape.md)
+
+#### Returns
+
+[`CapsuleColliderShape`](CapsuleColliderShape.md)
+
+#### Overrides
+
+[ColliderShape](ColliderShape.md).[constructor](ColliderShape.md#constructor)
+
+#### Defined in
+
+[src/components/shape/CapsuleColliderShape.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/CapsuleColliderShape.ts#L17)
+
+## Properties
+
+### radius
+
+• **radius**: `number` = `2.5`
+
+The radius of the local width of the collision body.
+
+#### Defined in
+
+[src/components/shape/CapsuleColliderShape.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/CapsuleColliderShape.ts#L11)
+
+___
+
+### height
+
+• **height**: `number` = `10`
+
+The total height of the collision body.
+
+#### Defined in
+
+[src/components/shape/CapsuleColliderShape.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/CapsuleColliderShape.ts#L15)
+
+## Accessors
+
+### shapeType
+
+• `get` **shapeType**(): [`ColliderShapeType`](../enums/ColliderShapeType.md)
+
+#### Returns
+
+[`ColliderShapeType`](../enums/ColliderShapeType.md)
+
+#### Inherited from
+
+ColliderShape.shapeType
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L40)
+
+___
+
+### center
+
+• `get` **center**(): [`Vector3`](Vector3.md)
+
+The position of the collision object in the local space of the object.
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+ColliderShape.center
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L59)
+
+• `set` **center**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ColliderShape.center
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L63)
+
+___
+
+### size
+
+• `get` **size**(): [`Vector3`](Vector3.md)
+
+The size of the collision body in the X, Y, and Z directions.
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3
+
+#### Inherited from
+
+ColliderShape.size
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L72)
+
+• `set` **size**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ColliderShape.size
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L76)
+
+___
+
+### halfSize
+
+• `get` **halfSize**(): [`Vector3`](Vector3.md)
+
+Half the size of the collision body.
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+ColliderShape.halfSize
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L84)
+
+## Methods
+
+### setFromCenterAndSize
+
+▸ **setFromCenterAndSize**(`ct?`, `sz?`): `this`
+
+Set the position and size of collision objects
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `ct?` | [`Vector3`](Vector3.md) | The position of the collision object in the local space of the object. |
+| `sz?` | [`Vector3`](Vector3.md) | The size of the collision body in the X, Y, and Z directions. |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ColliderShape](ColliderShape.md).[setFromCenterAndSize](ColliderShape.md#setfromcenterandsize)
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L50)
+
+___
+
+### rayPick
+
+▸ **rayPick**(`ray`, `fromMatrix`): [`HitInfo`](../types/HitInfo.md)
+
+Ray pickup.Emit a ray from a designated location to detect objects colliding with the ray.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `ray` | [`Ray`](Ray.md) | emit ray |
+| `fromMatrix` | [`Matrix4`](Matrix4.md) | matrix |
+
+#### Returns
+
+[`HitInfo`](../types/HitInfo.md)
+
+Pick result intersect: whether to collide;
+ IntersectPoint: collision point;
+ Distance: The distance from the origin of the ray to the collision point.
+
+#### Inherited from
+
+[ColliderShape](ColliderShape.md).[rayPick](ColliderShape.md#raypick)
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L96)
diff --git a/docs/api/classes/ClusterConfig.md b/docs/api/classes/ClusterConfig.md
new file mode 100644
index 00000000..a6762da1
--- /dev/null
+++ b/docs/api/classes/ClusterConfig.md
@@ -0,0 +1,51 @@
+# Class: ClusterConfig
+
+### Constructors
+
+- [constructor](ClusterConfig.md#constructor)
+
+### Properties
+
+- [clusterTileX](ClusterConfig.md#clustertilex)
+- [clusterTileY](ClusterConfig.md#clustertiley)
+- [clusterTileZ](ClusterConfig.md#clustertilez)
+
+## Constructors
+
+### constructor
+
+• **new ClusterConfig**(): [`ClusterConfig`](ClusterConfig.md)
+
+#### Returns
+
+[`ClusterConfig`](ClusterConfig.md)
+
+## Properties
+
+### clusterTileX
+
+▪ `Static` **clusterTileX**: `number` = `16`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/cluster/ClusterConfig.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/cluster/ClusterConfig.ts#L2)
+
+___
+
+### clusterTileY
+
+▪ `Static` **clusterTileY**: `number` = `16`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/cluster/ClusterConfig.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/cluster/ClusterConfig.ts#L3)
+
+___
+
+### clusterTileZ
+
+▪ `Static` **clusterTileZ**: `number` = `32`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/cluster/ClusterConfig.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/cluster/ClusterConfig.ts#L4)
diff --git a/docs/api/classes/ClusterLightingBuffer.md b/docs/api/classes/ClusterLightingBuffer.md
new file mode 100644
index 00000000..8dc54a84
--- /dev/null
+++ b/docs/api/classes/ClusterLightingBuffer.md
@@ -0,0 +1,106 @@
+# Class: ClusterLightingBuffer
+
+### Constructors
+
+- [constructor](ClusterLightingBuffer.md#constructor)
+
+### Properties
+
+- [clusterBuffer](ClusterLightingBuffer.md#clusterbuffer)
+- [lightAssignBuffer](ClusterLightingBuffer.md#lightassignbuffer)
+- [assignTableBuffer](ClusterLightingBuffer.md#assigntablebuffer)
+- [clustersUniformBuffer](ClusterLightingBuffer.md#clustersuniformbuffer)
+
+### Methods
+
+- [update](ClusterLightingBuffer.md#update)
+
+## Constructors
+
+### constructor
+
+• **new ClusterLightingBuffer**(`numClusters`, `maxNumLightsPerCluster`): [`ClusterLightingBuffer`](ClusterLightingBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `numClusters` | `number` |
+| `maxNumLightsPerCluster` | `number` |
+
+#### Returns
+
+[`ClusterLightingBuffer`](ClusterLightingBuffer.md)
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/cluster/ClusterLightingBuffer.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/cluster/ClusterLightingBuffer.ts#L10)
+
+## Properties
+
+### clusterBuffer
+
+• **clusterBuffer**: [`ComputeGPUBuffer`](ComputeGPUBuffer.md)
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/cluster/ClusterLightingBuffer.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/cluster/ClusterLightingBuffer.ts#L5)
+
+___
+
+### lightAssignBuffer
+
+• **lightAssignBuffer**: [`ComputeGPUBuffer`](ComputeGPUBuffer.md)
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/cluster/ClusterLightingBuffer.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/cluster/ClusterLightingBuffer.ts#L6)
+
+___
+
+### assignTableBuffer
+
+• **assignTableBuffer**: [`ComputeGPUBuffer`](ComputeGPUBuffer.md)
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/cluster/ClusterLightingBuffer.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/cluster/ClusterLightingBuffer.ts#L7)
+
+___
+
+### clustersUniformBuffer
+
+• **clustersUniformBuffer**: [`UniformGPUBuffer`](UniformGPUBuffer.md)
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/cluster/ClusterLightingBuffer.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/cluster/ClusterLightingBuffer.ts#L8)
+
+## Methods
+
+### update
+
+▸ **update**(`width`, `height`, `clusterPix`, `clusterTileX`, `clusterTileY`, `clusterTileZ`, `numLights`, `maxNumLightsPerCluster`, `near`, `far`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `width` | `number` |
+| `height` | `number` |
+| `clusterPix` | `number` |
+| `clusterTileX` | `number` |
+| `clusterTileY` | `number` |
+| `clusterTileZ` | `number` |
+| `numLights` | `number` |
+| `maxNumLightsPerCluster` | `number` |
+| `near` | `number` |
+| `far` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/cluster/ClusterLightingBuffer.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/cluster/ClusterLightingBuffer.ts#L21)
diff --git a/docs/api/classes/ColliderComponent.md b/docs/api/classes/ColliderComponent.md
new file mode 100644
index 00000000..eb3d99bf
--- /dev/null
+++ b/docs/api/classes/ColliderComponent.md
@@ -0,0 +1,631 @@
+# Class: ColliderComponent
+
+collider component
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`ColliderComponent`**
+
+### Constructors
+
+- [constructor](ColliderComponent.md#constructor)
+
+### Properties
+
+- [object3D](ColliderComponent.md#object3d)
+- [isDestroyed](ColliderComponent.md#isdestroyed)
+
+### Accessors
+
+- [shape](ColliderComponent.md#shape)
+- [eventDispatcher](ColliderComponent.md#eventdispatcher)
+- [isStart](ColliderComponent.md#isstart)
+- [transform](ColliderComponent.md#transform)
+- [enable](ColliderComponent.md#enable)
+
+### Methods
+
+- [onEnable](ColliderComponent.md#onenable)
+- [onDisable](ColliderComponent.md#ondisable)
+- [beforeDestroy](ColliderComponent.md#beforedestroy)
+- [init](ColliderComponent.md#init)
+- [stop](ColliderComponent.md#stop)
+- [onUpdate](ColliderComponent.md#onupdate)
+- [onLateUpdate](ColliderComponent.md#onlateupdate)
+- [onBeforeUpdate](ColliderComponent.md#onbeforeupdate)
+- [onCompute](ColliderComponent.md#oncompute)
+- [onGraphic](ColliderComponent.md#ongraphic)
+- [onParentChange](ColliderComponent.md#onparentchange)
+- [onAddChild](ColliderComponent.md#onaddchild)
+- [onRemoveChild](ColliderComponent.md#onremovechild)
+- [cloneTo](ColliderComponent.md#cloneto)
+- [copyComponent](ColliderComponent.md#copycomponent)
+- [destroy](ColliderComponent.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new ColliderComponent**(): [`ColliderComponent`](ColliderComponent.md)
+
+#### Returns
+
+[`ColliderComponent`](ColliderComponent.md)
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+#### Defined in
+
+[src/components/ColliderComponent.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/ColliderComponent.ts#L16)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### shape
+
+• `get` **shape**(): [`ColliderShape`](ColliderShape.md)
+
+Returns the shape of collider
+
+#### Returns
+
+[`ColliderShape`](ColliderShape.md)
+
+#### Defined in
+
+[src/components/ColliderComponent.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ColliderComponent.ts#L40)
+
+• `set` **shape**(`value`): `void`
+
+Set the shape of collider
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`ColliderShape`](ColliderShape.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/ColliderComponent.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ColliderComponent.ts#L47)
+
+___
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### onEnable
+
+▸ **onEnable**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[onEnable](ComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/ColliderComponent.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/components/ColliderComponent.ts#L29)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[onDisable](ComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/ColliderComponent.ts:33](https://github.com/Orillusion/orillusion/blob/main/src/components/ColliderComponent.ts#L33)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ColliderComponent.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/components/ColliderComponent.ts#L63)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[init](ComponentBase.md#init)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onUpdate](ComponentBase.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[destroy](ComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
diff --git a/docs/api/classes/ColliderShape.md b/docs/api/classes/ColliderShape.md
new file mode 100644
index 00000000..4d4699a0
--- /dev/null
+++ b/docs/api/classes/ColliderShape.md
@@ -0,0 +1,191 @@
+# Class: ColliderShape
+
+Shape of collider body, Base class of collider shape
+
+## Hierarchy
+
+- **`ColliderShape`**
+
+ ↳ [`BoxColliderShape`](BoxColliderShape.md)
+
+ ↳ [`CapsuleColliderShape`](CapsuleColliderShape.md)
+
+ ↳ [`MeshColliderShape`](MeshColliderShape.md)
+
+ ↳ [`SphereColliderShape`](SphereColliderShape.md)
+
+### Constructors
+
+- [constructor](ColliderShape.md#constructor)
+
+### Accessors
+
+- [shapeType](ColliderShape.md#shapetype)
+- [center](ColliderShape.md#center)
+- [size](ColliderShape.md#size)
+- [halfSize](ColliderShape.md#halfsize)
+
+### Methods
+
+- [setFromCenterAndSize](ColliderShape.md#setfromcenterandsize)
+- [rayPick](ColliderShape.md#raypick)
+
+## Constructors
+
+### constructor
+
+• **new ColliderShape**(): [`ColliderShape`](ColliderShape.md)
+
+#### Returns
+
+[`ColliderShape`](ColliderShape.md)
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L30)
+
+## Accessors
+
+### shapeType
+
+• `get` **shapeType**(): [`ColliderShapeType`](../enums/ColliderShapeType.md)
+
+#### Returns
+
+[`ColliderShapeType`](../enums/ColliderShapeType.md)
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L40)
+
+___
+
+### center
+
+• `get` **center**(): [`Vector3`](Vector3.md)
+
+The position of the collision object in the local space of the object.
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L59)
+
+• `set` **center**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L63)
+
+___
+
+### size
+
+• `get` **size**(): [`Vector3`](Vector3.md)
+
+The size of the collision body in the X, Y, and Z directions.
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L72)
+
+• `set` **size**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L76)
+
+___
+
+### halfSize
+
+• `get` **halfSize**(): [`Vector3`](Vector3.md)
+
+Half the size of the collision body.
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L84)
+
+## Methods
+
+### setFromCenterAndSize
+
+▸ **setFromCenterAndSize**(`ct?`, `sz?`): `this`
+
+Set the position and size of collision objects
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `ct?` | [`Vector3`](Vector3.md) | The position of the collision object in the local space of the object. |
+| `sz?` | [`Vector3`](Vector3.md) | The size of the collision body in the X, Y, and Z directions. |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L50)
+
+___
+
+### rayPick
+
+▸ **rayPick**(`ray`, `fromMatrix`): [`HitInfo`](../types/HitInfo.md)
+
+Ray pickup.Emit a ray from a designated location to detect objects colliding with the ray.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `ray` | [`Ray`](Ray.md) | emit ray |
+| `fromMatrix` | [`Matrix4`](Matrix4.md) | matrix |
+
+#### Returns
+
+[`HitInfo`](../types/HitInfo.md)
+
+Pick result intersect: whether to collide;
+ IntersectPoint: collision point;
+ Distance: The distance from the origin of the ray to the collision point.
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L96)
diff --git a/docs/api/classes/Color.md b/docs/api/classes/Color.md
new file mode 100644
index 00000000..a6701ff6
--- /dev/null
+++ b/docs/api/classes/Color.md
@@ -0,0 +1,2143 @@
+# Class: Color
+
+RGBA Color Object
+
+### Constructors
+
+- [constructor](Color.md#constructor)
+
+### Properties
+
+- [COLOR\_RED](Color.md#color_red)
+- [COLOR\_GREEN](Color.md#color_green)
+- [COLOR\_BLUE](Color.md#color_blue)
+- [COLOR\_WHITE](Color.md#color_white)
+- [r](Color.md#r)
+- [g](Color.md#g)
+- [b](Color.md#b)
+- [a](Color.md#a)
+- [PRIMARY](Color.md#primary)
+- [PRIMARYDARK](Color.md#primarydark)
+- [ACCENT](Color.md#accent)
+- [WHITE](Color.md#white)
+- [IVORY](Color.md#ivory)
+- [LIGHTYELLOW](Color.md#lightyellow)
+- [YELLOW](Color.md#yellow)
+- [SNOW](Color.md#snow)
+- [FLORALWHITE](Color.md#floralwhite)
+- [LEMONCHIFFON](Color.md#lemonchiffon)
+- [CORNSILK](Color.md#cornsilk)
+- [SEASHELL](Color.md#seashell)
+- [LAVENDERBLUSH](Color.md#lavenderblush)
+- [PAPAYAWHIP](Color.md#papayawhip)
+- [BLANCHEDALMOND](Color.md#blanchedalmond)
+- [MISTYROSE](Color.md#mistyrose)
+- [BISQUE](Color.md#bisque)
+- [MOCCASIN](Color.md#moccasin)
+- [NAVAJOWHITE](Color.md#navajowhite)
+- [PEACHPUFF](Color.md#peachpuff)
+- [GOLD](Color.md#gold)
+- [PINK](Color.md#pink)
+- [LIGHTPINK](Color.md#lightpink)
+- [ORANGE](Color.md#orange)
+- [LIGHTSALMON](Color.md#lightsalmon)
+- [DARKORANGE](Color.md#darkorange)
+- [CORAL](Color.md#coral)
+- [HOTPINK](Color.md#hotpink)
+- [TOMATO](Color.md#tomato)
+- [ORANGERED](Color.md#orangered)
+- [DEEPPINK](Color.md#deeppink)
+- [FUCHSIA](Color.md#fuchsia)
+- [MAGENTA](Color.md#magenta)
+- [RED](Color.md#red)
+- [OLDLACE](Color.md#oldlace)
+- [LIGHTGOLDENRODYELLOW](Color.md#lightgoldenrodyellow)
+- [LINEN](Color.md#linen)
+- [ANTIQUEWHITE](Color.md#antiquewhite)
+- [SALMON](Color.md#salmon)
+- [GHOSTWHITE](Color.md#ghostwhite)
+- [MINTCREAM](Color.md#mintcream)
+- [WHITESMOKE](Color.md#whitesmoke)
+- [BEIGE](Color.md#beige)
+- [WHEAT](Color.md#wheat)
+- [SANDYBROWN](Color.md#sandybrown)
+- [AZURE](Color.md#azure)
+- [HONEYDEW](Color.md#honeydew)
+- [ALICEBLUE](Color.md#aliceblue)
+- [KHAKI](Color.md#khaki)
+- [LIGHTCORAL](Color.md#lightcoral)
+- [PALEGOLDENROD](Color.md#palegoldenrod)
+- [VIOLET](Color.md#violet)
+- [DARKSALMON](Color.md#darksalmon)
+- [LAVENDER](Color.md#lavender)
+- [LIGHTCYAN](Color.md#lightcyan)
+- [BURLYWOOD](Color.md#burlywood)
+- [PLUM](Color.md#plum)
+- [GAINSBORO](Color.md#gainsboro)
+- [CRIMSON](Color.md#crimson)
+- [PALEVIOLETRED](Color.md#palevioletred)
+- [GOLDENROD](Color.md#goldenrod)
+- [ORCHID](Color.md#orchid)
+- [THISTLE](Color.md#thistle)
+- [LIGHTGREY](Color.md#lightgrey)
+- [TAN](Color.md#tan)
+- [CHOCOLATE](Color.md#chocolate)
+- [PERU](Color.md#peru)
+- [INDIANRED](Color.md#indianred)
+- [MEDIUMVIOLETRED](Color.md#mediumvioletred)
+- [SILVER](Color.md#silver)
+- [DARKKHAKI](Color.md#darkkhaki)
+- [ROSYBROWN](Color.md#rosybrown)
+- [MEDIUMORCHID](Color.md#mediumorchid)
+- [DARKGOLDENROD](Color.md#darkgoldenrod)
+- [FIREBRICK](Color.md#firebrick)
+- [POWDERBLUE](Color.md#powderblue)
+- [LIGHTSTEELBLUE](Color.md#lightsteelblue)
+- [PALETURQUOISE](Color.md#paleturquoise)
+- [GREENYELLOW](Color.md#greenyellow)
+- [LIGHTBLUE](Color.md#lightblue)
+- [DARKGRAY](Color.md#darkgray)
+- [BROWN](Color.md#brown)
+- [SIENNA](Color.md#sienna)
+- [DARKORCHID](Color.md#darkorchid)
+- [PALEGREEN](Color.md#palegreen)
+- [DARKVIOLET](Color.md#darkviolet)
+- [MEDIUMPURPLE](Color.md#mediumpurple)
+- [LIGHTGREEN](Color.md#lightgreen)
+- [DARKSEAGREEN](Color.md#darkseagreen)
+- [SADDLEBROWN](Color.md#saddlebrown)
+- [DARKMAGENTA](Color.md#darkmagenta)
+- [DARKRED](Color.md#darkred)
+- [BLUEVIOLET](Color.md#blueviolet)
+- [LIGHTSKYBLUE](Color.md#lightskyblue)
+- [SKYBLUE](Color.md#skyblue)
+- [GRAY](Color.md#gray)
+- [OLIVE](Color.md#olive)
+- [PURPLE](Color.md#purple)
+- [MAROON](Color.md#maroon)
+- [AQUAMARINE](Color.md#aquamarine)
+- [CHARTREUSE](Color.md#chartreuse)
+- [LAWNGREEN](Color.md#lawngreen)
+- [MEDIUMSLATEBLUE](Color.md#mediumslateblue)
+- [LIGHTSLATEGRAY](Color.md#lightslategray)
+- [SLATEGRAY](Color.md#slategray)
+- [OLIVEDRAB](Color.md#olivedrab)
+- [SLATEBLUE](Color.md#slateblue)
+- [DIMGRAY](Color.md#dimgray)
+- [MEDIUMAQUAMARINE](Color.md#mediumaquamarine)
+- [CORNFLOWERBLUE](Color.md#cornflowerblue)
+- [CADETBLUE](Color.md#cadetblue)
+- [DARKOLIVEGREEN](Color.md#darkolivegreen)
+- [INDIGO](Color.md#indigo)
+- [MEDIUMTURQUOISE](Color.md#mediumturquoise)
+- [DARKSLATEBLUE](Color.md#darkslateblue)
+- [STEELBLUE](Color.md#steelblue)
+- [ROYALBLUE](Color.md#royalblue)
+- [TURQUOISE](Color.md#turquoise)
+- [MEDIUMSEAGREEN](Color.md#mediumseagreen)
+- [LIMEGREEN](Color.md#limegreen)
+- [DARKSLATEGRAY](Color.md#darkslategray)
+- [SEAGREEN](Color.md#seagreen)
+- [FORESTGREEN](Color.md#forestgreen)
+- [LIGHTSEAGREEN](Color.md#lightseagreen)
+- [DODGERBLUE](Color.md#dodgerblue)
+- [MIDNIGHTBLUE](Color.md#midnightblue)
+- [AQUA](Color.md#aqua)
+- [CYAN](Color.md#cyan)
+- [SPRINGGREEN](Color.md#springgreen)
+- [LIME](Color.md#lime)
+- [MEDIUMSPRINGGREEN](Color.md#mediumspringgreen)
+- [DARKTURQUOISE](Color.md#darkturquoise)
+- [DEEPSKYBLUE](Color.md#deepskyblue)
+- [DARKCYAN](Color.md#darkcyan)
+- [TEAL](Color.md#teal)
+- [GREEN](Color.md#green)
+- [DARKGREEN](Color.md#darkgreen)
+- [BLUE](Color.md#blue)
+- [MEDIUMBLUE](Color.md#mediumblue)
+- [DARKBLUE](Color.md#darkblue)
+- [NAVY](Color.md#navy)
+- [BLACK](Color.md#black)
+
+### Accessors
+
+- [rgb](Color.md#rgb)
+- [rgba](Color.md#rgba)
+
+### Methods
+
+- [convertToHDRRGB](Color.md#converttohdrrgb)
+- [unSerialized](Color.md#unserialized)
+- [hexToRGB](Color.md#hextorgb)
+- [hexToRGBA](Color.md#hextorgba)
+- [random](Color.md#random)
+- [randomRGB](Color.md#randomrgb)
+- [randomGray](Color.md#randomgray)
+- [setTo](Color.md#setto)
+- [setHex](Color.md#sethex)
+- [getHex](Color.md#gethex)
+- [clone](Color.md#clone)
+- [copyFrom](Color.md#copyfrom)
+- [copyFromArray](Color.md#copyfromarray)
+- [copyFromVector](Color.md#copyfromvector)
+- [hexRGBColor](Color.md#hexrgbcolor)
+- [lerp](Color.md#lerp)
+
+## Constructors
+
+### constructor
+
+• **new Color**(`r?`, `g?`, `b?`, `a?`): [`Color`](Color.md)
+
+create new color instance
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `r` | `number` | `1.0` | red channel |
+| `g` | `number` | `1.0` | green channel |
+| `b` | `number` | `1.0` | blue channel |
+| `a` | `number` | `1.0` | alpha channel |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/math/Color.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L92)
+
+## Properties
+
+### COLOR\_RED
+
+▪ `Static` **COLOR\_RED**: [`Color`](Color.md)
+
+red color
+
+#### Defined in
+
+[src/math/Color.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L10)
+
+___
+
+### COLOR\_GREEN
+
+▪ `Static` **COLOR\_GREEN**: [`Color`](Color.md)
+
+green color
+
+#### Defined in
+
+[src/math/Color.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L15)
+
+___
+
+### COLOR\_BLUE
+
+▪ `Static` **COLOR\_BLUE**: [`Color`](Color.md)
+
+blue color
+
+#### Defined in
+
+[src/math/Color.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L20)
+
+___
+
+### COLOR\_WHITE
+
+▪ `Static` **COLOR\_WHITE**: [`Color`](Color.md)
+
+white color
+
+#### Defined in
+
+[src/math/Color.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L25)
+
+___
+
+### r
+
+• **r**: `number` = `0`
+
+red channel
+
+#### Defined in
+
+[src/math/Color.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L68)
+
+___
+
+### g
+
+• **g**: `number` = `0`
+
+green channel
+
+#### Defined in
+
+[src/math/Color.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L73)
+
+___
+
+### b
+
+• **b**: `number` = `0`
+
+blue channel
+
+#### Defined in
+
+[src/math/Color.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L78)
+
+___
+
+### a
+
+• **a**: `number` = `0`
+
+alpha channel
+
+#### Defined in
+
+[src/math/Color.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L83)
+
+___
+
+### PRIMARY
+
+▪ `Static` **PRIMARY**: `number` = `0x3f51b5`
+
+#### Defined in
+
+[src/math/Color.ts:352](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L352)
+
+___
+
+### PRIMARYDARK
+
+▪ `Static` **PRIMARYDARK**: `number` = `0x303f9f`
+
+#### Defined in
+
+[src/math/Color.ts:353](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L353)
+
+___
+
+### ACCENT
+
+▪ `Static` **ACCENT**: `number` = `0xff4081`
+
+#### Defined in
+
+[src/math/Color.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L354)
+
+___
+
+### WHITE
+
+▪ `Static` **WHITE**: `number` = `0xffffff`
+
+#### Defined in
+
+[src/math/Color.ts:356](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L356)
+
+___
+
+### IVORY
+
+▪ `Static` **IVORY**: `number` = `0xfffff0`
+
+#### Defined in
+
+[src/math/Color.ts:357](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L357)
+
+___
+
+### LIGHTYELLOW
+
+▪ `Static` **LIGHTYELLOW**: `number` = `0xffffe0`
+
+#### Defined in
+
+[src/math/Color.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L358)
+
+___
+
+### YELLOW
+
+▪ `Static` **YELLOW**: `number` = `0xffff00`
+
+#### Defined in
+
+[src/math/Color.ts:359](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L359)
+
+___
+
+### SNOW
+
+▪ `Static` **SNOW**: `number` = `0xfffafa`
+
+#### Defined in
+
+[src/math/Color.ts:360](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L360)
+
+___
+
+### FLORALWHITE
+
+▪ `Static` **FLORALWHITE**: `number` = `0xfffaf0`
+
+#### Defined in
+
+[src/math/Color.ts:361](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L361)
+
+___
+
+### LEMONCHIFFON
+
+▪ `Static` **LEMONCHIFFON**: `number` = `0xfffacd`
+
+#### Defined in
+
+[src/math/Color.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L362)
+
+___
+
+### CORNSILK
+
+▪ `Static` **CORNSILK**: `number` = `0xfff8dc`
+
+#### Defined in
+
+[src/math/Color.ts:363](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L363)
+
+___
+
+### SEASHELL
+
+▪ `Static` **SEASHELL**: `number` = `0xfff5ee`
+
+#### Defined in
+
+[src/math/Color.ts:364](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L364)
+
+___
+
+### LAVENDERBLUSH
+
+▪ `Static` **LAVENDERBLUSH**: `number` = `0xfff0f5`
+
+#### Defined in
+
+[src/math/Color.ts:365](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L365)
+
+___
+
+### PAPAYAWHIP
+
+▪ `Static` **PAPAYAWHIP**: `number` = `0xffefd5`
+
+#### Defined in
+
+[src/math/Color.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L366)
+
+___
+
+### BLANCHEDALMOND
+
+▪ `Static` **BLANCHEDALMOND**: `number` = `0xffebcd`
+
+#### Defined in
+
+[src/math/Color.ts:367](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L367)
+
+___
+
+### MISTYROSE
+
+▪ `Static` **MISTYROSE**: `number` = `0xffe4e1`
+
+#### Defined in
+
+[src/math/Color.ts:368](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L368)
+
+___
+
+### BISQUE
+
+▪ `Static` **BISQUE**: `number` = `0xffe4c4`
+
+#### Defined in
+
+[src/math/Color.ts:369](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L369)
+
+___
+
+### MOCCASIN
+
+▪ `Static` **MOCCASIN**: `number` = `0xffe4b5`
+
+#### Defined in
+
+[src/math/Color.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L370)
+
+___
+
+### NAVAJOWHITE
+
+▪ `Static` **NAVAJOWHITE**: `number` = `0xffdead`
+
+#### Defined in
+
+[src/math/Color.ts:371](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L371)
+
+___
+
+### PEACHPUFF
+
+▪ `Static` **PEACHPUFF**: `number` = `0xffdab9`
+
+#### Defined in
+
+[src/math/Color.ts:372](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L372)
+
+___
+
+### GOLD
+
+▪ `Static` **GOLD**: `number` = `0xffd700`
+
+#### Defined in
+
+[src/math/Color.ts:373](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L373)
+
+___
+
+### PINK
+
+▪ `Static` **PINK**: `number` = `0xffc0cb`
+
+#### Defined in
+
+[src/math/Color.ts:374](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L374)
+
+___
+
+### LIGHTPINK
+
+▪ `Static` **LIGHTPINK**: `number` = `0xffb6c1`
+
+#### Defined in
+
+[src/math/Color.ts:375](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L375)
+
+___
+
+### ORANGE
+
+▪ `Static` **ORANGE**: `number` = `0xffa500`
+
+#### Defined in
+
+[src/math/Color.ts:376](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L376)
+
+___
+
+### LIGHTSALMON
+
+▪ `Static` **LIGHTSALMON**: `number` = `0xffa07a`
+
+#### Defined in
+
+[src/math/Color.ts:377](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L377)
+
+___
+
+### DARKORANGE
+
+▪ `Static` **DARKORANGE**: `number` = `0xff8c00`
+
+#### Defined in
+
+[src/math/Color.ts:378](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L378)
+
+___
+
+### CORAL
+
+▪ `Static` **CORAL**: `number` = `0xff7f50`
+
+#### Defined in
+
+[src/math/Color.ts:379](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L379)
+
+___
+
+### HOTPINK
+
+▪ `Static` **HOTPINK**: `number` = `0xff69b4`
+
+#### Defined in
+
+[src/math/Color.ts:380](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L380)
+
+___
+
+### TOMATO
+
+▪ `Static` **TOMATO**: `number` = `0xff6347`
+
+#### Defined in
+
+[src/math/Color.ts:381](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L381)
+
+___
+
+### ORANGERED
+
+▪ `Static` **ORANGERED**: `number` = `0xff4500`
+
+#### Defined in
+
+[src/math/Color.ts:382](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L382)
+
+___
+
+### DEEPPINK
+
+▪ `Static` **DEEPPINK**: `number` = `0xff1493`
+
+#### Defined in
+
+[src/math/Color.ts:383](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L383)
+
+___
+
+### FUCHSIA
+
+▪ `Static` **FUCHSIA**: `number` = `0xff00ff`
+
+#### Defined in
+
+[src/math/Color.ts:384](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L384)
+
+___
+
+### MAGENTA
+
+▪ `Static` **MAGENTA**: `number` = `0xff00ff`
+
+#### Defined in
+
+[src/math/Color.ts:385](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L385)
+
+___
+
+### RED
+
+▪ `Static` **RED**: `number` = `0xff0000`
+
+#### Defined in
+
+[src/math/Color.ts:386](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L386)
+
+___
+
+### OLDLACE
+
+▪ `Static` **OLDLACE**: `number` = `0xfdf5e6`
+
+#### Defined in
+
+[src/math/Color.ts:387](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L387)
+
+___
+
+### LIGHTGOLDENRODYELLOW
+
+▪ `Static` **LIGHTGOLDENRODYELLOW**: `number` = `0xfafad2`
+
+#### Defined in
+
+[src/math/Color.ts:388](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L388)
+
+___
+
+### LINEN
+
+▪ `Static` **LINEN**: `number` = `0xfaf0e6`
+
+#### Defined in
+
+[src/math/Color.ts:389](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L389)
+
+___
+
+### ANTIQUEWHITE
+
+▪ `Static` **ANTIQUEWHITE**: `number` = `0xfaebd7`
+
+#### Defined in
+
+[src/math/Color.ts:390](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L390)
+
+___
+
+### SALMON
+
+▪ `Static` **SALMON**: `number` = `0xfa8072`
+
+#### Defined in
+
+[src/math/Color.ts:391](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L391)
+
+___
+
+### GHOSTWHITE
+
+▪ `Static` **GHOSTWHITE**: `number` = `0xf8f8ff`
+
+#### Defined in
+
+[src/math/Color.ts:392](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L392)
+
+___
+
+### MINTCREAM
+
+▪ `Static` **MINTCREAM**: `number` = `0xf5fffa`
+
+#### Defined in
+
+[src/math/Color.ts:393](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L393)
+
+___
+
+### WHITESMOKE
+
+▪ `Static` **WHITESMOKE**: `number` = `0xf5f5f5`
+
+#### Defined in
+
+[src/math/Color.ts:394](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L394)
+
+___
+
+### BEIGE
+
+▪ `Static` **BEIGE**: `number` = `0xf5f5dc`
+
+#### Defined in
+
+[src/math/Color.ts:395](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L395)
+
+___
+
+### WHEAT
+
+▪ `Static` **WHEAT**: `number` = `0xf5deb3`
+
+#### Defined in
+
+[src/math/Color.ts:396](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L396)
+
+___
+
+### SANDYBROWN
+
+▪ `Static` **SANDYBROWN**: `number` = `0xf4a460`
+
+#### Defined in
+
+[src/math/Color.ts:397](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L397)
+
+___
+
+### AZURE
+
+▪ `Static` **AZURE**: `number` = `0xf0ffff`
+
+#### Defined in
+
+[src/math/Color.ts:398](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L398)
+
+___
+
+### HONEYDEW
+
+▪ `Static` **HONEYDEW**: `number` = `0xf0fff0`
+
+#### Defined in
+
+[src/math/Color.ts:399](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L399)
+
+___
+
+### ALICEBLUE
+
+▪ `Static` **ALICEBLUE**: `number` = `0xf0f8ff`
+
+#### Defined in
+
+[src/math/Color.ts:400](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L400)
+
+___
+
+### KHAKI
+
+▪ `Static` **KHAKI**: `number` = `0xf0e68c`
+
+#### Defined in
+
+[src/math/Color.ts:401](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L401)
+
+___
+
+### LIGHTCORAL
+
+▪ `Static` **LIGHTCORAL**: `number` = `0xf08080`
+
+#### Defined in
+
+[src/math/Color.ts:402](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L402)
+
+___
+
+### PALEGOLDENROD
+
+▪ `Static` **PALEGOLDENROD**: `number` = `0xeee8aa`
+
+#### Defined in
+
+[src/math/Color.ts:403](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L403)
+
+___
+
+### VIOLET
+
+▪ `Static` **VIOLET**: `number` = `0xee82ee`
+
+#### Defined in
+
+[src/math/Color.ts:404](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L404)
+
+___
+
+### DARKSALMON
+
+▪ `Static` **DARKSALMON**: `number` = `0xe9967a`
+
+#### Defined in
+
+[src/math/Color.ts:405](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L405)
+
+___
+
+### LAVENDER
+
+▪ `Static` **LAVENDER**: `number` = `0xe6e6fa`
+
+#### Defined in
+
+[src/math/Color.ts:406](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L406)
+
+___
+
+### LIGHTCYAN
+
+▪ `Static` **LIGHTCYAN**: `number` = `0xe0ffff`
+
+#### Defined in
+
+[src/math/Color.ts:407](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L407)
+
+___
+
+### BURLYWOOD
+
+▪ `Static` **BURLYWOOD**: `number` = `0xdeb887`
+
+#### Defined in
+
+[src/math/Color.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L408)
+
+___
+
+### PLUM
+
+▪ `Static` **PLUM**: `number` = `0xdda0dd`
+
+#### Defined in
+
+[src/math/Color.ts:409](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L409)
+
+___
+
+### GAINSBORO
+
+▪ `Static` **GAINSBORO**: `number` = `0xdcdcdc`
+
+#### Defined in
+
+[src/math/Color.ts:410](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L410)
+
+___
+
+### CRIMSON
+
+▪ `Static` **CRIMSON**: `number` = `0xdc143c`
+
+#### Defined in
+
+[src/math/Color.ts:411](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L411)
+
+___
+
+### PALEVIOLETRED
+
+▪ `Static` **PALEVIOLETRED**: `number` = `0xdb7093`
+
+#### Defined in
+
+[src/math/Color.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L412)
+
+___
+
+### GOLDENROD
+
+▪ `Static` **GOLDENROD**: `number` = `0xdaa520`
+
+#### Defined in
+
+[src/math/Color.ts:414](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L414)
+
+___
+
+### ORCHID
+
+▪ `Static` **ORCHID**: `number` = `0xda70d6`
+
+#### Defined in
+
+[src/math/Color.ts:415](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L415)
+
+___
+
+### THISTLE
+
+▪ `Static` **THISTLE**: `number` = `0xd8bfd8`
+
+#### Defined in
+
+[src/math/Color.ts:416](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L416)
+
+___
+
+### LIGHTGREY
+
+▪ `Static` **LIGHTGREY**: `number` = `0xd3d3d3`
+
+#### Defined in
+
+[src/math/Color.ts:417](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L417)
+
+___
+
+### TAN
+
+▪ `Static` **TAN**: `number` = `0xd2b48c`
+
+#### Defined in
+
+[src/math/Color.ts:418](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L418)
+
+___
+
+### CHOCOLATE
+
+▪ `Static` **CHOCOLATE**: `number` = `0xd2691e`
+
+#### Defined in
+
+[src/math/Color.ts:419](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L419)
+
+___
+
+### PERU
+
+▪ `Static` **PERU**: `number` = `0xcd853f`
+
+#### Defined in
+
+[src/math/Color.ts:420](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L420)
+
+___
+
+### INDIANRED
+
+▪ `Static` **INDIANRED**: `number` = `0xcd5c5c`
+
+#### Defined in
+
+[src/math/Color.ts:421](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L421)
+
+___
+
+### MEDIUMVIOLETRED
+
+▪ `Static` **MEDIUMVIOLETRED**: `number` = `0xc71585`
+
+#### Defined in
+
+[src/math/Color.ts:422](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L422)
+
+___
+
+### SILVER
+
+▪ `Static` **SILVER**: `number` = `0xc0c0c0`
+
+#### Defined in
+
+[src/math/Color.ts:423](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L423)
+
+___
+
+### DARKKHAKI
+
+▪ `Static` **DARKKHAKI**: `number` = `0xbdb76b`
+
+#### Defined in
+
+[src/math/Color.ts:424](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L424)
+
+___
+
+### ROSYBROWN
+
+▪ `Static` **ROSYBROWN**: `number` = `0xbc8f8f`
+
+#### Defined in
+
+[src/math/Color.ts:425](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L425)
+
+___
+
+### MEDIUMORCHID
+
+▪ `Static` **MEDIUMORCHID**: `number` = `0xba55d3`
+
+#### Defined in
+
+[src/math/Color.ts:426](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L426)
+
+___
+
+### DARKGOLDENROD
+
+▪ `Static` **DARKGOLDENROD**: `number` = `0xb8860b`
+
+#### Defined in
+
+[src/math/Color.ts:427](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L427)
+
+___
+
+### FIREBRICK
+
+▪ `Static` **FIREBRICK**: `number` = `0xb22222`
+
+#### Defined in
+
+[src/math/Color.ts:428](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L428)
+
+___
+
+### POWDERBLUE
+
+▪ `Static` **POWDERBLUE**: `number` = `0xb0e0e6`
+
+#### Defined in
+
+[src/math/Color.ts:429](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L429)
+
+___
+
+### LIGHTSTEELBLUE
+
+▪ `Static` **LIGHTSTEELBLUE**: `number` = `0xb0c4de`
+
+#### Defined in
+
+[src/math/Color.ts:430](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L430)
+
+___
+
+### PALETURQUOISE
+
+▪ `Static` **PALETURQUOISE**: `number` = `0xafeeee`
+
+#### Defined in
+
+[src/math/Color.ts:431](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L431)
+
+___
+
+### GREENYELLOW
+
+▪ `Static` **GREENYELLOW**: `number` = `0xadff2f`
+
+#### Defined in
+
+[src/math/Color.ts:432](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L432)
+
+___
+
+### LIGHTBLUE
+
+▪ `Static` **LIGHTBLUE**: `number` = `0xadd8e6`
+
+#### Defined in
+
+[src/math/Color.ts:433](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L433)
+
+___
+
+### DARKGRAY
+
+▪ `Static` **DARKGRAY**: `number` = `0xa9a9a9`
+
+#### Defined in
+
+[src/math/Color.ts:434](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L434)
+
+___
+
+### BROWN
+
+▪ `Static` **BROWN**: `number` = `0xa52a2a`
+
+#### Defined in
+
+[src/math/Color.ts:435](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L435)
+
+___
+
+### SIENNA
+
+▪ `Static` **SIENNA**: `number` = `0xa0522d`
+
+#### Defined in
+
+[src/math/Color.ts:436](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L436)
+
+___
+
+### DARKORCHID
+
+▪ `Static` **DARKORCHID**: `number` = `0x9932cc`
+
+#### Defined in
+
+[src/math/Color.ts:437](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L437)
+
+___
+
+### PALEGREEN
+
+▪ `Static` **PALEGREEN**: `number` = `0x98fb98`
+
+#### Defined in
+
+[src/math/Color.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L438)
+
+___
+
+### DARKVIOLET
+
+▪ `Static` **DARKVIOLET**: `number` = `0x9400d3`
+
+#### Defined in
+
+[src/math/Color.ts:439](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L439)
+
+___
+
+### MEDIUMPURPLE
+
+▪ `Static` **MEDIUMPURPLE**: `number` = `0x9370db`
+
+#### Defined in
+
+[src/math/Color.ts:440](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L440)
+
+___
+
+### LIGHTGREEN
+
+▪ `Static` **LIGHTGREEN**: `number` = `0x90ee90`
+
+#### Defined in
+
+[src/math/Color.ts:441](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L441)
+
+___
+
+### DARKSEAGREEN
+
+▪ `Static` **DARKSEAGREEN**: `number` = `0x8fbc8f`
+
+#### Defined in
+
+[src/math/Color.ts:442](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L442)
+
+___
+
+### SADDLEBROWN
+
+▪ `Static` **SADDLEBROWN**: `number` = `0x8b4513`
+
+#### Defined in
+
+[src/math/Color.ts:443](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L443)
+
+___
+
+### DARKMAGENTA
+
+▪ `Static` **DARKMAGENTA**: `number` = `0x8b008b`
+
+#### Defined in
+
+[src/math/Color.ts:444](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L444)
+
+___
+
+### DARKRED
+
+▪ `Static` **DARKRED**: `number` = `0x8b0000`
+
+#### Defined in
+
+[src/math/Color.ts:445](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L445)
+
+___
+
+### BLUEVIOLET
+
+▪ `Static` **BLUEVIOLET**: `number` = `0x8a2be2`
+
+#### Defined in
+
+[src/math/Color.ts:446](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L446)
+
+___
+
+### LIGHTSKYBLUE
+
+▪ `Static` **LIGHTSKYBLUE**: `number` = `0x87cefa`
+
+#### Defined in
+
+[src/math/Color.ts:447](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L447)
+
+___
+
+### SKYBLUE
+
+▪ `Static` **SKYBLUE**: `number` = `0x87ceeb`
+
+#### Defined in
+
+[src/math/Color.ts:448](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L448)
+
+___
+
+### GRAY
+
+▪ `Static` **GRAY**: `number` = `0x808080`
+
+#### Defined in
+
+[src/math/Color.ts:449](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L449)
+
+___
+
+### OLIVE
+
+▪ `Static` **OLIVE**: `number` = `0x808000`
+
+#### Defined in
+
+[src/math/Color.ts:450](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L450)
+
+___
+
+### PURPLE
+
+▪ `Static` **PURPLE**: `number` = `0x800080`
+
+#### Defined in
+
+[src/math/Color.ts:451](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L451)
+
+___
+
+### MAROON
+
+▪ `Static` **MAROON**: `number` = `0x800000`
+
+#### Defined in
+
+[src/math/Color.ts:452](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L452)
+
+___
+
+### AQUAMARINE
+
+▪ `Static` **AQUAMARINE**: `number` = `0x7fffd4`
+
+#### Defined in
+
+[src/math/Color.ts:453](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L453)
+
+___
+
+### CHARTREUSE
+
+▪ `Static` **CHARTREUSE**: `number` = `0x7fff00`
+
+#### Defined in
+
+[src/math/Color.ts:454](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L454)
+
+___
+
+### LAWNGREEN
+
+▪ `Static` **LAWNGREEN**: `number` = `0x7cfc00`
+
+#### Defined in
+
+[src/math/Color.ts:455](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L455)
+
+___
+
+### MEDIUMSLATEBLUE
+
+▪ `Static` **MEDIUMSLATEBLUE**: `number` = `0x7b68ee`
+
+#### Defined in
+
+[src/math/Color.ts:456](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L456)
+
+___
+
+### LIGHTSLATEGRAY
+
+▪ `Static` **LIGHTSLATEGRAY**: `number` = `0x778899`
+
+#### Defined in
+
+[src/math/Color.ts:457](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L457)
+
+___
+
+### SLATEGRAY
+
+▪ `Static` **SLATEGRAY**: `number` = `0x708090`
+
+#### Defined in
+
+[src/math/Color.ts:458](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L458)
+
+___
+
+### OLIVEDRAB
+
+▪ `Static` **OLIVEDRAB**: `number` = `0x6b8e23`
+
+#### Defined in
+
+[src/math/Color.ts:459](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L459)
+
+___
+
+### SLATEBLUE
+
+▪ `Static` **SLATEBLUE**: `number` = `0x6a5acd`
+
+#### Defined in
+
+[src/math/Color.ts:460](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L460)
+
+___
+
+### DIMGRAY
+
+▪ `Static` **DIMGRAY**: `number` = `0x696969`
+
+#### Defined in
+
+[src/math/Color.ts:461](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L461)
+
+___
+
+### MEDIUMAQUAMARINE
+
+▪ `Static` **MEDIUMAQUAMARINE**: `number` = `0x66cdaa`
+
+#### Defined in
+
+[src/math/Color.ts:462](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L462)
+
+___
+
+### CORNFLOWERBLUE
+
+▪ `Static` **CORNFLOWERBLUE**: `number` = `0x6495ed`
+
+#### Defined in
+
+[src/math/Color.ts:463](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L463)
+
+___
+
+### CADETBLUE
+
+▪ `Static` **CADETBLUE**: `number` = `0x5f9ea0`
+
+#### Defined in
+
+[src/math/Color.ts:464](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L464)
+
+___
+
+### DARKOLIVEGREEN
+
+▪ `Static` **DARKOLIVEGREEN**: `number` = `0x556b2f`
+
+#### Defined in
+
+[src/math/Color.ts:465](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L465)
+
+___
+
+### INDIGO
+
+▪ `Static` **INDIGO**: `number` = `0x4b0082`
+
+#### Defined in
+
+[src/math/Color.ts:466](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L466)
+
+___
+
+### MEDIUMTURQUOISE
+
+▪ `Static` **MEDIUMTURQUOISE**: `number` = `0x48d1cc`
+
+#### Defined in
+
+[src/math/Color.ts:467](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L467)
+
+___
+
+### DARKSLATEBLUE
+
+▪ `Static` **DARKSLATEBLUE**: `number` = `0x483d8b`
+
+#### Defined in
+
+[src/math/Color.ts:468](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L468)
+
+___
+
+### STEELBLUE
+
+▪ `Static` **STEELBLUE**: `number` = `0x4682b4`
+
+#### Defined in
+
+[src/math/Color.ts:469](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L469)
+
+___
+
+### ROYALBLUE
+
+▪ `Static` **ROYALBLUE**: `number` = `0x4169e1`
+
+#### Defined in
+
+[src/math/Color.ts:470](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L470)
+
+___
+
+### TURQUOISE
+
+▪ `Static` **TURQUOISE**: `number` = `0x40e0d0`
+
+#### Defined in
+
+[src/math/Color.ts:471](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L471)
+
+___
+
+### MEDIUMSEAGREEN
+
+▪ `Static` **MEDIUMSEAGREEN**: `number` = `0x3cb371`
+
+#### Defined in
+
+[src/math/Color.ts:472](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L472)
+
+___
+
+### LIMEGREEN
+
+▪ `Static` **LIMEGREEN**: `number` = `0x32cd32`
+
+#### Defined in
+
+[src/math/Color.ts:473](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L473)
+
+___
+
+### DARKSLATEGRAY
+
+▪ `Static` **DARKSLATEGRAY**: `number` = `0x2f4f4f`
+
+#### Defined in
+
+[src/math/Color.ts:474](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L474)
+
+___
+
+### SEAGREEN
+
+▪ `Static` **SEAGREEN**: `number` = `0x2e8b57`
+
+#### Defined in
+
+[src/math/Color.ts:475](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L475)
+
+___
+
+### FORESTGREEN
+
+▪ `Static` **FORESTGREEN**: `number` = `0x228b22`
+
+#### Defined in
+
+[src/math/Color.ts:476](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L476)
+
+___
+
+### LIGHTSEAGREEN
+
+▪ `Static` **LIGHTSEAGREEN**: `number` = `0x20b2aa`
+
+#### Defined in
+
+[src/math/Color.ts:477](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L477)
+
+___
+
+### DODGERBLUE
+
+▪ `Static` **DODGERBLUE**: `number` = `0x1e90ff`
+
+#### Defined in
+
+[src/math/Color.ts:478](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L478)
+
+___
+
+### MIDNIGHTBLUE
+
+▪ `Static` **MIDNIGHTBLUE**: `number` = `0x191970`
+
+#### Defined in
+
+[src/math/Color.ts:479](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L479)
+
+___
+
+### AQUA
+
+▪ `Static` **AQUA**: `number` = `0x00ffff`
+
+#### Defined in
+
+[src/math/Color.ts:480](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L480)
+
+___
+
+### CYAN
+
+▪ `Static` **CYAN**: `number` = `0x00ffff`
+
+#### Defined in
+
+[src/math/Color.ts:481](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L481)
+
+___
+
+### SPRINGGREEN
+
+▪ `Static` **SPRINGGREEN**: `number` = `0x00ff7f`
+
+#### Defined in
+
+[src/math/Color.ts:482](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L482)
+
+___
+
+### LIME
+
+▪ `Static` **LIME**: `number` = `0x00ff00`
+
+#### Defined in
+
+[src/math/Color.ts:483](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L483)
+
+___
+
+### MEDIUMSPRINGGREEN
+
+▪ `Static` **MEDIUMSPRINGGREEN**: `number` = `0x00fa9a`
+
+#### Defined in
+
+[src/math/Color.ts:484](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L484)
+
+___
+
+### DARKTURQUOISE
+
+▪ `Static` **DARKTURQUOISE**: `number` = `0x00ced1`
+
+#### Defined in
+
+[src/math/Color.ts:485](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L485)
+
+___
+
+### DEEPSKYBLUE
+
+▪ `Static` **DEEPSKYBLUE**: `number` = `0x00bfff`
+
+#### Defined in
+
+[src/math/Color.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L486)
+
+___
+
+### DARKCYAN
+
+▪ `Static` **DARKCYAN**: `number` = `0x008b8b`
+
+#### Defined in
+
+[src/math/Color.ts:487](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L487)
+
+___
+
+### TEAL
+
+▪ `Static` **TEAL**: `number` = `0x008080`
+
+#### Defined in
+
+[src/math/Color.ts:488](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L488)
+
+___
+
+### GREEN
+
+▪ `Static` **GREEN**: `number` = `0x008000`
+
+#### Defined in
+
+[src/math/Color.ts:489](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L489)
+
+___
+
+### DARKGREEN
+
+▪ `Static` **DARKGREEN**: `number` = `0x006400`
+
+#### Defined in
+
+[src/math/Color.ts:490](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L490)
+
+___
+
+### BLUE
+
+▪ `Static` **BLUE**: `number` = `0x0000ff`
+
+#### Defined in
+
+[src/math/Color.ts:491](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L491)
+
+___
+
+### MEDIUMBLUE
+
+▪ `Static` **MEDIUMBLUE**: `number` = `0x0000cd`
+
+#### Defined in
+
+[src/math/Color.ts:492](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L492)
+
+___
+
+### DARKBLUE
+
+▪ `Static` **DARKBLUE**: `number` = `0x00008b`
+
+#### Defined in
+
+[src/math/Color.ts:493](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L493)
+
+___
+
+### NAVY
+
+▪ `Static` **NAVY**: `number` = `0x000080`
+
+#### Defined in
+
+[src/math/Color.ts:494](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L494)
+
+___
+
+### BLACK
+
+▪ `Static` **BLACK**: `number` = `0x000000`
+
+#### Defined in
+
+[src/math/Color.ts:495](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L495)
+
+## Accessors
+
+### rgb
+
+• `get` **rgb**(): `number`[]
+
+get rgb to array
+
+#### Returns
+
+`number`[]
+
+#### Defined in
+
+[src/math/Color.ts:250](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L250)
+
+• `set` **rgb**(`c`): `void`
+
+set rgb by array
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `number`[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Color.ts:257](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L257)
+
+___
+
+### rgba
+
+• `get` **rgba**(): `number`[]
+
+get rgba to array
+
+#### Returns
+
+`number`[]
+
+#### Defined in
+
+[src/math/Color.ts:264](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L264)
+
+• `set` **rgba**(`c`): `void`
+
+set rgb by array
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `number`[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Color.ts:271](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L271)
+
+## Methods
+
+### convertToHDRRGB
+
+▸ **convertToHDRRGB**(): [`Color`](Color.md)
+
+convert to hdr color , channel a is intensity
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/math/Color.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L99)
+
+___
+
+### unSerialized
+
+▸ **unSerialized**(`data`): `this`
+
+unSerialized color by data
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `any` |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/Color.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L111)
+
+___
+
+### hexToRGB
+
+▸ **hexToRGB**(`value`): [`Color`](Color.md)
+
+update this color rgb from hexadecimal no alpha
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/math/Color.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L123)
+
+___
+
+### hexToRGBA
+
+▸ **hexToRGBA**(`value`): [`Color`](Color.md)
+
+update this color rgb from hexadecimal has alpha
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/math/Color.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L135)
+
+___
+
+### random
+
+▸ **random**(`base?`): [`Color`](Color.md)
+
+random on color
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `base` | `number` | `1.0` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/math/Color.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L147)
+
+___
+
+### randomRGB
+
+▸ **randomRGB**(`seedR?`, `seedG?`, `seedB?`, `baseR?`, `baseG?`, `baseB?`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `seedR` | `number` | `0.5` |
+| `seedG` | `number` | `0.5` |
+| `seedB` | `number` | `0.5` |
+| `baseR` | `number` | `0.5` |
+| `baseG` | `number` | `0.5` |
+| `baseB` | `number` | `0.5` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/math/Color.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L156)
+
+___
+
+### randomGray
+
+▸ **randomGray**(`base?`, `random?`): [`Color`](Color.md)
+
+random on color
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `base` | `number` | `0.5` |
+| `random` | `number` | `0.5` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/math/Color.ts:170](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L170)
+
+___
+
+### setTo
+
+▸ **setTo**(`r`, `g`, `b`, `a`): `void`
+
+set rgba to this color
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `r` | `number` | red channel |
+| `g` | `number` | green channel |
+| `b` | `number` | blue channel |
+| `a` | `number` | alpha channel |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Color.ts:187](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L187)
+
+___
+
+### setHex
+
+▸ **setHex**(`hex`): `void`
+
+update this color rgba from hexadecimal
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `hex` | `string` | hex string. |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Color.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L198)
+
+___
+
+### getHex
+
+▸ **getHex**(): `string`
+
+convert this color to hex string code
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/math/Color.ts:234](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L234)
+
+___
+
+### clone
+
+▸ **clone**(): [`Color`](Color.md)
+
+clone this color
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/math/Color.ts:279](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L279)
+
+___
+
+### copyFrom
+
+▸ **copyFrom**(`src`): `this`
+
+copy color from source color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `src` | [`Color`](Color.md) |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/Color.ts:287](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L287)
+
+___
+
+### copyFromArray
+
+▸ **copyFromArray**(`arr`, `scalar?`): [`Color`](Color.md)
+
+copy color from array
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `arr` | `number`[] | `undefined` | [ 255 , 255 , 255 , 255 ] |
+| `scalar` | `number` | `255` | |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/math/Color.ts:301](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L301)
+
+___
+
+### copyFromVector
+
+▸ **copyFromVector**(`value`): `this`
+
+copy color from vector3 or vector4
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `Object` | { x: number, y: number, z: number, w?: number } |
+| `value.x` | `number` | - |
+| `value.y` | `number` | - |
+| `value.z` | `number` | - |
+| `value.w?` | `number` | - |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/Color.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L315)
+
+___
+
+### hexRGBColor
+
+▸ **hexRGBColor**(`hexColor`, `dst?`): [`Color`](Color.md)
+
+update this color rgb from hexadecimal no alpha
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `hexColor` | `number` | `undefined` | rgb color |
+| `dst` | [`Color`](Color.md) | `null` | ref out color |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/math/Color.ts:328](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L328)
+
+___
+
+### lerp
+
+▸ **lerp**(`v`, `c1`, `c2`, `target?`): [`Color`](Color.md)
+
+lerp two color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+| `c1` | [`Color`](Color.md) |
+| `c2` | [`Color`](Color.md) |
+| `target?` | [`Color`](Color.md) |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/math/Color.ts:342](https://github.com/Orillusion/orillusion/blob/main/src/math/Color.ts#L342)
diff --git a/docs/api/classes/ColorGradient.md b/docs/api/classes/ColorGradient.md
new file mode 100644
index 00000000..46af0680
--- /dev/null
+++ b/docs/api/classes/ColorGradient.md
@@ -0,0 +1,49 @@
+# Class: ColorGradient
+
+### Constructors
+
+- [constructor](ColorGradient.md#constructor)
+
+### Methods
+
+- [getColor](ColorGradient.md#getcolor)
+
+## Constructors
+
+### constructor
+
+• **new ColorGradient**(`array`): [`ColorGradient`](ColorGradient.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `array` | [`Color`](Color.md)[] |
+
+#### Returns
+
+[`ColorGradient`](ColorGradient.md)
+
+#### Defined in
+
+[src/math/ColorGradient.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/math/ColorGradient.ts#L6)
+
+## Methods
+
+### getColor
+
+▸ **getColor**(`p`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `p` | `number` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/math/ColorGradient.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/math/ColorGradient.ts#L10)
diff --git a/docs/api/classes/ColorLitMaterial.md b/docs/api/classes/ColorLitMaterial.md
new file mode 100644
index 00000000..b5ce275d
--- /dev/null
+++ b/docs/api/classes/ColorLitMaterial.md
@@ -0,0 +1,1104 @@
+# Class: ColorLitMaterial
+
+ColorLitMaterial
+
+## Hierarchy
+
+- [`Material`](Material.md)
+
+ ↳ **`ColorLitMaterial`**
+
+### Constructors
+
+- [constructor](ColorLitMaterial.md#constructor)
+
+### Properties
+
+- [count](ColorLitMaterial.md#count)
+- [instanceID](ColorLitMaterial.md#instanceid)
+- [name](ColorLitMaterial.md#name)
+- [enable](ColorLitMaterial.md#enable)
+
+### Accessors
+
+- [shader](ColorLitMaterial.md#shader)
+- [doubleSide](ColorLitMaterial.md#doubleside)
+- [castShadow](ColorLitMaterial.md#castshadow)
+- [acceptShadow](ColorLitMaterial.md#acceptshadow)
+- [castReflection](ColorLitMaterial.md#castreflection)
+- [blendMode](ColorLitMaterial.md#blendmode)
+- [depthCompare](ColorLitMaterial.md#depthcompare)
+- [transparent](ColorLitMaterial.md#transparent)
+- [cullMode](ColorLitMaterial.md#cullmode)
+- [depthWriteEnabled](ColorLitMaterial.md#depthwriteenabled)
+- [useBillboard](ColorLitMaterial.md#usebillboard)
+
+### Methods
+
+- [clone](ColorLitMaterial.md#clone)
+- [debug](ColorLitMaterial.md#debug)
+- [getPass](ColorLitMaterial.md#getpass)
+- [getAllPass](ColorLitMaterial.md#getallpass)
+- [destroy](ColorLitMaterial.md#destroy)
+- [setDefine](ColorLitMaterial.md#setdefine)
+- [setTexture](ColorLitMaterial.md#settexture)
+- [setStorageBuffer](ColorLitMaterial.md#setstoragebuffer)
+- [setUniformBuffer](ColorLitMaterial.md#setuniformbuffer)
+- [setUniformFloat](ColorLitMaterial.md#setuniformfloat)
+- [setUniformVector2](ColorLitMaterial.md#setuniformvector2)
+- [setUniformVector3](ColorLitMaterial.md#setuniformvector3)
+- [setUniformVector4](ColorLitMaterial.md#setuniformvector4)
+- [setUniformColor](ColorLitMaterial.md#setuniformcolor)
+- [getUniformFloat](ColorLitMaterial.md#getuniformfloat)
+- [getUniformV2](ColorLitMaterial.md#getuniformv2)
+- [getUniformV3](ColorLitMaterial.md#getuniformv3)
+- [getUniformV4](ColorLitMaterial.md#getuniformv4)
+- [getUniformColor](ColorLitMaterial.md#getuniformcolor)
+- [getTexture](ColorLitMaterial.md#gettexture)
+- [getStorageBuffer](ColorLitMaterial.md#getstoragebuffer)
+- [getStructStorageBuffer](ColorLitMaterial.md#getstructstoragebuffer)
+- [getUniformBuffer](ColorLitMaterial.md#getuniformbuffer)
+- [applyUniform](ColorLitMaterial.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new ColorLitMaterial**(): [`ColorLitMaterial`](ColorLitMaterial.md)
+
+#### Returns
+
+[`ColorLitMaterial`](ColorLitMaterial.md)
+
+#### Overrides
+
+[Material](Material.md).[constructor](Material.md#constructor)
+
+#### Defined in
+
+[src/materials/ColorLitMaterial.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/materials/ColorLitMaterial.ts#L16)
+
+## Properties
+
+### count
+
+▪ `Static` **count**: `number` = `0`
+
+#### Defined in
+
+[src/materials/ColorLitMaterial.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/materials/ColorLitMaterial.ts#L12)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+Material Unique Identifier
+
+#### Inherited from
+
+[Material](Material.md).[instanceID](Material.md#instanceid)
+
+#### Defined in
+
+[src/materials/Material.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L19)
+
+___
+
+### name
+
+• **name**: `string`
+
+name of this material
+
+#### Inherited from
+
+[Material](Material.md).[name](Material.md#name)
+
+#### Defined in
+
+[src/materials/Material.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L25)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+[Material](Material.md).[enable](Material.md#enable)
+
+#### Defined in
+
+[src/materials/Material.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L27)
+
+## Accessors
+
+### shader
+
+• `get` **shader**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L41)
+
+• `set` **shader**(`shader`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shader` | [`Shader`](Shader.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L36)
+
+___
+
+### doubleSide
+
+• `get` **doubleSide**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L45)
+
+• `set` **doubleSide**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L49)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L53)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L57)
+
+___
+
+### acceptShadow
+
+• `get` **acceptShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L64)
+
+• `set` **acceptShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L68)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L77)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L81)
+
+___
+
+### blendMode
+
+• `get` **blendMode**(): [`BlendMode`](../enums/BlendMode.md)
+
+#### Returns
+
+[`BlendMode`](../enums/BlendMode.md)
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L85)
+
+• `set` **blendMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`BlendMode`](../enums/BlendMode.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L89)
+
+___
+
+### depthCompare
+
+• `get` **depthCompare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L93)
+
+• `set` **depthCompare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L97)
+
+___
+
+### transparent
+
+• `get` **transparent**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L102)
+
+• `set` **transparent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L106)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L113)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L117)
+
+___
+
+### depthWriteEnabled
+
+• `get` **depthWriteEnabled**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L128)
+
+• `set` **depthWriteEnabled**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L132)
+
+___
+
+### useBillboard
+
+• `set` **useBillboard**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.useBillboard
+
+#### Defined in
+
+[src/materials/Material.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L136)
+
+## Methods
+
+### clone
+
+▸ **clone**(): `this`
+
+clone one material
+
+#### Returns
+
+`this`
+
+Material
+
+#### Overrides
+
+[Material](Material.md).[clone](Material.md#clone)
+
+#### Defined in
+
+[src/materials/ColorLitMaterial.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/materials/ColorLitMaterial.ts#L47)
+
+___
+
+### debug
+
+▸ **debug**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/ColorLitMaterial.ts:51](https://github.com/Orillusion/orillusion/blob/main/src/materials/ColorLitMaterial.ts#L51)
+
+___
+
+### getPass
+
+▸ **getPass**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get render pass by renderType
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getPass](Material.md#getpass)
+
+#### Defined in
+
+[src/materials/Material.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L145)
+
+___
+
+### getAllPass
+
+▸ **getAllPass**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get all color render pass
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getAllPass](Material.md#getallpass)
+
+#### Defined in
+
+[src/materials/Material.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L153)
+
+___
+
+### destroy
+
+▸ **destroy**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[destroy](Material.md#destroy)
+
+#### Defined in
+
+[src/materials/Material.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L168)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`define`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `define` | `string` |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setDefine](Material.md#setdefine)
+
+#### Defined in
+
+[src/materials/Material.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L174)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`propertyName`, `texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setTexture](Material.md#settexture)
+
+#### Defined in
+
+[src/materials/Material.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L178)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setStorageBuffer](Material.md#setstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L182)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformBuffer](Material.md#setuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L186)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformFloat](Material.md#setuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L191)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector2](Material.md#setuniformvector2)
+
+#### Defined in
+
+[src/materials/Material.ts:195](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L195)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector3](Material.md#setuniformvector3)
+
+#### Defined in
+
+[src/materials/Material.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L199)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector4](Material.md#setuniformvector4)
+
+#### Defined in
+
+[src/materials/Material.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L203)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformColor](Material.md#setuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L207)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`str`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformFloat](Material.md#getuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L211)
+
+___
+
+### getUniformV2
+
+▸ **getUniformV2**(`str`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV2](Material.md#getuniformv2)
+
+#### Defined in
+
+[src/materials/Material.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L215)
+
+___
+
+### getUniformV3
+
+▸ **getUniformV3**(`str`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV3](Material.md#getuniformv3)
+
+#### Defined in
+
+[src/materials/Material.ts:219](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L219)
+
+___
+
+### getUniformV4
+
+▸ **getUniformV4**(`str`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV4](Material.md#getuniformv4)
+
+#### Defined in
+
+[src/materials/Material.ts:223](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L223)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`str`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformColor](Material.md#getuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L227)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`str`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Material](Material.md).[getTexture](Material.md#gettexture)
+
+#### Defined in
+
+[src/materials/Material.ts:231](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L231)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`str`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Material](Material.md).[getStorageBuffer](Material.md#getstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:235](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L235)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getStructStorageBuffer](Material.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:239](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L239)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformBuffer](Material.md#getuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:243](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L243)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[applyUniform](Material.md#applyuniform)
+
+#### Defined in
+
+[src/materials/Material.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L247)
diff --git a/docs/api/classes/ComData.md b/docs/api/classes/ComData.md
new file mode 100644
index 00000000..b3e989e2
--- /dev/null
+++ b/docs/api/classes/ComData.md
@@ -0,0 +1,64 @@
+# Class: ComData
+
+### Constructors
+
+- [constructor](ComData.md#constructor)
+
+### Properties
+
+- [comName](ComData.md#comname)
+- [data](ComData.md#data)
+
+### Methods
+
+- [parser](ComData.md#parser)
+
+## Constructors
+
+### constructor
+
+• **new ComData**(): [`ComData`](ComData.md)
+
+#### Returns
+
+[`ComData`](ComData.md)
+
+## Properties
+
+### comName
+
+• **comName**: `string`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabNode.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabNode.ts#L7)
+
+___
+
+### data
+
+• **data**: [`KV`](KV.md)[]
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabNode.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabNode.ts#L8)
+
+## Methods
+
+### parser
+
+▸ **parser**(`bytesArray`): [`ComData`](ComData.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bytesArray` | `BytesArray` |
+
+#### Returns
+
+[`ComData`](ComData.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabNode.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabNode.ts#L10)
diff --git a/docs/api/classes/ComponentBase.md b/docs/api/classes/ComponentBase.md
new file mode 100644
index 00000000..9d83da61
--- /dev/null
+++ b/docs/api/classes/ComponentBase.md
@@ -0,0 +1,638 @@
+# Class: ComponentBase
+
+Components are used to attach functionality to object3D, it has an owner object3D.
+The component can receive update events at each frame.
+
+## Hierarchy
+
+- **`ComponentBase`**
+
+ ↳ [`BillboardComponent`](BillboardComponent.md)
+
+ ↳ [`ColliderComponent`](ColliderComponent.md)
+
+ ↳ [`SkeletonAnimationComponent`](SkeletonAnimationComponent.md)
+
+ ↳ [`Transform`](Transform.md)
+
+ ↳ [`AnimatorComponent`](AnimatorComponent.md)
+
+ ↳ [`PropertyAnimation`](PropertyAnimation.md)
+
+ ↳ [`MorphTargetBlender`](MorphTargetBlender.md)
+
+ ↳ [`FlyCameraController`](FlyCameraController.md)
+
+ ↳ [`HoverCameraController`](HoverCameraController.md)
+
+ ↳ [`OrbitController`](OrbitController.md)
+
+ ↳ [`GUICanvas`](GUICanvas.md)
+
+ ↳ [`UIComponentBase`](UIComponentBase.md)
+
+ ↳ [`UITransform`](UITransform.md)
+
+ ↳ [`PostProcessingComponent`](PostProcessingComponent.md)
+
+ ↳ [`GlobalIlluminationComponent`](GlobalIlluminationComponent.md)
+
+ ↳ [`Camera3D`](Camera3D.md)
+
+ ↳ [`APatch`](APatch.md)
+
+ ↳ [`TransformControllerBaseComponent`](TransformControllerBaseComponent.md)
+
+## Implements
+
+- [`IComponent`](../interfaces/IComponent.md)
+
+### Constructors
+
+- [constructor](ComponentBase.md#constructor)
+
+### Properties
+
+- [object3D](ComponentBase.md#object3d)
+- [isDestroyed](ComponentBase.md#isdestroyed)
+
+### Accessors
+
+- [eventDispatcher](ComponentBase.md#eventdispatcher)
+- [isStart](ComponentBase.md#isstart)
+- [transform](ComponentBase.md#transform)
+- [enable](ComponentBase.md#enable)
+
+### Methods
+
+- [init](ComponentBase.md#init)
+- [start](ComponentBase.md#start)
+- [stop](ComponentBase.md#stop)
+- [onEnable](ComponentBase.md#onenable)
+- [onDisable](ComponentBase.md#ondisable)
+- [onUpdate](ComponentBase.md#onupdate)
+- [onLateUpdate](ComponentBase.md#onlateupdate)
+- [onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+- [onCompute](ComponentBase.md#oncompute)
+- [onGraphic](ComponentBase.md#ongraphic)
+- [onParentChange](ComponentBase.md#onparentchange)
+- [onAddChild](ComponentBase.md#onaddchild)
+- [onRemoveChild](ComponentBase.md#onremovechild)
+- [cloneTo](ComponentBase.md#cloneto)
+- [copyComponent](ComponentBase.md#copycomponent)
+- [beforeDestroy](ComponentBase.md#beforedestroy)
+- [destroy](ComponentBase.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new ComponentBase**(): [`ComponentBase`](ComponentBase.md)
+
+#### Returns
+
+[`ComponentBase`](ComponentBase.md)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[object3D](../interfaces/IComponent.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[isDestroyed](../interfaces/IComponent.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[eventDispatcher](../interfaces/IComponent.md#eventdispatcher)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[eventDispatcher](../interfaces/IComponent.md#eventdispatcher)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[transform](../interfaces/IComponent.md#transform)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[enable](../interfaces/IComponent.md#enable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[enable](../interfaces/IComponent.md#enable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[init](../interfaces/IComponent.md#init)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[start](../interfaces/IComponent.md#start)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[stop](../interfaces/IComponent.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[onEnable](../interfaces/IComponent.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[onDisable](../interfaces/IComponent.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[onUpdate](../interfaces/IComponent.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[onLateUpdate](../interfaces/IComponent.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[onBeforeUpdate](../interfaces/IComponent.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[onCompute](../interfaces/IComponent.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[onGraphic](../interfaces/IComponent.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[onParentChange](../interfaces/IComponent.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[onAddChild](../interfaces/IComponent.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[onRemoveChild](../interfaces/IComponent.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[cloneTo](../interfaces/IComponent.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[beforeDestroy](../interfaces/IComponent.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+[IComponent](../interfaces/IComponent.md).[destroy](../interfaces/IComponent.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
diff --git a/docs/api/classes/ComponentCollect.md b/docs/api/classes/ComponentCollect.md
new file mode 100644
index 00000000..68030356
--- /dev/null
+++ b/docs/api/classes/ComponentCollect.md
@@ -0,0 +1,331 @@
+# Class: ComponentCollect
+
+### Constructors
+
+- [constructor](ComponentCollect.md#constructor)
+
+### Methods
+
+- [bindUpdate](ComponentCollect.md#bindupdate)
+- [unBindUpdate](ComponentCollect.md#unbindupdate)
+- [bindLateUpdate](ComponentCollect.md#bindlateupdate)
+- [unBindLateUpdate](ComponentCollect.md#unbindlateupdate)
+- [bindBeforeUpdate](ComponentCollect.md#bindbeforeupdate)
+- [unBindBeforeUpdate](ComponentCollect.md#unbindbeforeupdate)
+- [bindCompute](ComponentCollect.md#bindcompute)
+- [unBindCompute](ComponentCollect.md#unbindcompute)
+- [bindGraphic](ComponentCollect.md#bindgraphic)
+- [unBindGraphic](ComponentCollect.md#unbindgraphic)
+- [appendWaitStart](ComponentCollect.md#appendwaitstart)
+- [removeWaitStart](ComponentCollect.md#removewaitstart)
+- [bindEnablePick](ComponentCollect.md#bindenablepick)
+- [unBindEnablePick](ComponentCollect.md#unbindenablepick)
+
+## Constructors
+
+### constructor
+
+• **new ComponentCollect**(): [`ComponentCollect`](ComponentCollect.md)
+
+#### Returns
+
+[`ComponentCollect`](ComponentCollect.md)
+
+## Methods
+
+### bindUpdate
+
+▸ **bindUpdate**(`view`, `component`, `call`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `component` | [`IComponent`](../interfaces/IComponent.md) |
+| `call` | `Function` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/collect/ComponentCollect.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/ComponentCollect.ts#L62)
+
+___
+
+### unBindUpdate
+
+▸ **unBindUpdate**(`view`, `component`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `component` | [`IComponent`](../interfaces/IComponent.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/collect/ComponentCollect.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/ComponentCollect.ts#L72)
+
+___
+
+### bindLateUpdate
+
+▸ **bindLateUpdate**(`view`, `component`, `call`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `component` | [`IComponent`](../interfaces/IComponent.md) |
+| `call` | `Function` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/collect/ComponentCollect.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/ComponentCollect.ts#L80)
+
+___
+
+### unBindLateUpdate
+
+▸ **unBindLateUpdate**(`view`, `component`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `component` | [`IComponent`](../interfaces/IComponent.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/collect/ComponentCollect.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/ComponentCollect.ts#L90)
+
+___
+
+### bindBeforeUpdate
+
+▸ **bindBeforeUpdate**(`view`, `component`, `call`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `component` | [`IComponent`](../interfaces/IComponent.md) |
+| `call` | `Function` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/collect/ComponentCollect.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/ComponentCollect.ts#L98)
+
+___
+
+### unBindBeforeUpdate
+
+▸ **unBindBeforeUpdate**(`view`, `component`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `component` | [`IComponent`](../interfaces/IComponent.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/collect/ComponentCollect.ts:108](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/ComponentCollect.ts#L108)
+
+___
+
+### bindCompute
+
+▸ **bindCompute**(`view`, `component`, `call`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `component` | [`IComponent`](../interfaces/IComponent.md) |
+| `call` | `Function` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/collect/ComponentCollect.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/ComponentCollect.ts#L116)
+
+___
+
+### unBindCompute
+
+▸ **unBindCompute**(`view`, `component`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `component` | [`IComponent`](../interfaces/IComponent.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/collect/ComponentCollect.ts:126](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/ComponentCollect.ts#L126)
+
+___
+
+### bindGraphic
+
+▸ **bindGraphic**(`view`, `component`, `call`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `component` | [`IComponent`](../interfaces/IComponent.md) |
+| `call` | `Function` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/collect/ComponentCollect.ts:134](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/ComponentCollect.ts#L134)
+
+___
+
+### unBindGraphic
+
+▸ **unBindGraphic**(`view`, `component`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `component` | [`IComponent`](../interfaces/IComponent.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/collect/ComponentCollect.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/ComponentCollect.ts#L144)
+
+___
+
+### appendWaitStart
+
+▸ **appendWaitStart**(`component`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `component` | [`IComponent`](../interfaces/IComponent.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/collect/ComponentCollect.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/ComponentCollect.ts#L152)
+
+___
+
+### removeWaitStart
+
+▸ **removeWaitStart**(`obj`, `component`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) |
+| `component` | [`IComponent`](../interfaces/IComponent.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/collect/ComponentCollect.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/ComponentCollect.ts#L165)
+
+___
+
+### bindEnablePick
+
+▸ **bindEnablePick**(`view`, `component`, `call`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `component` | [`ColliderComponent`](ColliderComponent.md) |
+| `call` | `Function` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/collect/ComponentCollect.ts:176](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/ComponentCollect.ts#L176)
+
+___
+
+### unBindEnablePick
+
+▸ **unBindEnablePick**(`view`, `component`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `component` | [`ColliderComponent`](ColliderComponent.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/collect/ComponentCollect.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/ComponentCollect.ts#L186)
diff --git a/docs/api/classes/ComputeGPUBuffer.md b/docs/api/classes/ComputeGPUBuffer.md
new file mode 100644
index 00000000..e1a27e38
--- /dev/null
+++ b/docs/api/classes/ComputeGPUBuffer.md
@@ -0,0 +1,1287 @@
+# Class: ComputeGPUBuffer
+
+Storage class buffer for calculating shaders
+Usage GPUBufferUsage.STORAGE & GPUBufferUsage.COPY_SRC & GPUBufferUsage.COPY_DST
+
+## Hierarchy
+
+- `GPUBufferBase`
+
+ ↳ **`ComputeGPUBuffer`**
+
+### Constructors
+
+- [constructor](ComputeGPUBuffer.md#constructor)
+
+### Properties
+
+- [bufferType](ComputeGPUBuffer.md#buffertype)
+- [buffer](ComputeGPUBuffer.md#buffer)
+- [memory](ComputeGPUBuffer.md#memory)
+- [memoryNodes](ComputeGPUBuffer.md#memorynodes)
+- [seek](ComputeGPUBuffer.md#seek)
+- [outFloat32Array](ComputeGPUBuffer.md#outfloat32array)
+- [byteSize](ComputeGPUBuffer.md#bytesize)
+- [usage](ComputeGPUBuffer.md#usage)
+- [visibility](ComputeGPUBuffer.md#visibility)
+
+### Methods
+
+- [debug](ComputeGPUBuffer.md#debug)
+- [reset](ComputeGPUBuffer.md#reset)
+- [setBoolean](ComputeGPUBuffer.md#setboolean)
+- [readBoole](ComputeGPUBuffer.md#readboole)
+- [setFloat](ComputeGPUBuffer.md#setfloat)
+- [getFloat](ComputeGPUBuffer.md#getfloat)
+- [setInt8](ComputeGPUBuffer.md#setint8)
+- [getInt8](ComputeGPUBuffer.md#getint8)
+- [setInt16](ComputeGPUBuffer.md#setint16)
+- [getInt16](ComputeGPUBuffer.md#getint16)
+- [setInt32](ComputeGPUBuffer.md#setint32)
+- [getInt32](ComputeGPUBuffer.md#getint32)
+- [setUint8](ComputeGPUBuffer.md#setuint8)
+- [getUint8](ComputeGPUBuffer.md#getuint8)
+- [setUint16](ComputeGPUBuffer.md#setuint16)
+- [getUint16](ComputeGPUBuffer.md#getuint16)
+- [setUint32](ComputeGPUBuffer.md#setuint32)
+- [getUint32](ComputeGPUBuffer.md#getuint32)
+- [setVector2](ComputeGPUBuffer.md#setvector2)
+- [getVector2](ComputeGPUBuffer.md#getvector2)
+- [setVector3](ComputeGPUBuffer.md#setvector3)
+- [getVector3](ComputeGPUBuffer.md#getvector3)
+- [setVector4](ComputeGPUBuffer.md#setvector4)
+- [getVector4](ComputeGPUBuffer.md#getvector4)
+- [setVector4Array](ComputeGPUBuffer.md#setvector4array)
+- [setColor](ComputeGPUBuffer.md#setcolor)
+- [getColor](ComputeGPUBuffer.md#getcolor)
+- [setColorArray](ComputeGPUBuffer.md#setcolorarray)
+- [setMatrix](ComputeGPUBuffer.md#setmatrix)
+- [setMatrixArray](ComputeGPUBuffer.md#setmatrixarray)
+- [setArray](ComputeGPUBuffer.md#setarray)
+- [setFloat32Array](ComputeGPUBuffer.md#setfloat32array)
+- [setInt32Array](ComputeGPUBuffer.md#setint32array)
+- [setUint32Array](ComputeGPUBuffer.md#setuint32array)
+- [setStruct](ComputeGPUBuffer.md#setstruct)
+- [setStructArray](ComputeGPUBuffer.md#setstructarray)
+- [clean](ComputeGPUBuffer.md#clean)
+- [apply](ComputeGPUBuffer.md#apply)
+- [mapAsyncWrite](ComputeGPUBuffer.md#mapasyncwrite)
+- [destroy](ComputeGPUBuffer.md#destroy)
+- [resizeBuffer](ComputeGPUBuffer.md#resizebuffer)
+- [readBuffer](ComputeGPUBuffer.md#readbuffer)
+
+## Constructors
+
+### constructor
+
+• **new ComputeGPUBuffer**(`size`, `data?`): [`ComputeGPUBuffer`](ComputeGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `size` | `number` |
+| `data?` | `Float32Array` |
+
+#### Returns
+
+[`ComputeGPUBuffer`](ComputeGPUBuffer.md)
+
+#### Overrides
+
+GPUBufferBase.constructor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/ComputeGPUBuffer.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/ComputeGPUBuffer.ts#L10)
+
+## Properties
+
+### bufferType
+
+• **bufferType**: [`GPUBufferType`](../enums/GPUBufferType.md)
+
+#### Inherited from
+
+GPUBufferBase.bufferType
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L20)
+
+___
+
+### buffer
+
+• **buffer**: `GPUBuffer`
+
+#### Inherited from
+
+GPUBufferBase.buffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L21)
+
+___
+
+### memory
+
+• **memory**: `MemoryDO`
+
+#### Inherited from
+
+GPUBufferBase.memory
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L22)
+
+___
+
+### memoryNodes
+
+• **memoryNodes**: `Map`\<`string` \| `number`, `MemoryInfo`\>
+
+#### Inherited from
+
+GPUBufferBase.memoryNodes
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L23)
+
+___
+
+### seek
+
+• **seek**: `number`
+
+#### Inherited from
+
+GPUBufferBase.seek
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L24)
+
+___
+
+### outFloat32Array
+
+• **outFloat32Array**: `Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.outFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L25)
+
+___
+
+### byteSize
+
+• **byteSize**: `number`
+
+#### Inherited from
+
+GPUBufferBase.byteSize
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L26)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+#### Inherited from
+
+GPUBufferBase.usage
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L27)
+
+___
+
+### visibility
+
+• **visibility**: `number`
+
+#### Inherited from
+
+GPUBufferBase.visibility
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L28)
+
+## Methods
+
+### debug
+
+▸ **debug**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.debug
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L41)
+
+___
+
+### reset
+
+▸ **reset**(`clean?`, `size?`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `clean` | `boolean` | `false` |
+| `size` | `number` | `0` |
+| `data?` | `Float32Array` | `undefined` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.reset
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L44)
+
+___
+
+### setBoolean
+
+▸ **setBoolean**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setBoolean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L52)
+
+___
+
+### readBoole
+
+▸ **readBoole**(`name`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+GPUBufferBase.readBoole
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L62)
+
+___
+
+### setFloat
+
+▸ **setFloat**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L70)
+
+___
+
+### getFloat
+
+▸ **getFloat**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L79)
+
+___
+
+### setInt8
+
+▸ **setInt8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L87)
+
+___
+
+### getInt8
+
+▸ **getInt8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L96)
+
+___
+
+### setInt16
+
+▸ **setInt16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L104)
+
+___
+
+### getInt16
+
+▸ **getInt16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L113)
+
+___
+
+### setInt32
+
+▸ **setInt32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L121)
+
+___
+
+### getInt32
+
+▸ **getInt32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:130](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L130)
+
+___
+
+### setUint8
+
+▸ **setUint8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:138](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L138)
+
+___
+
+### getUint8
+
+▸ **getUint8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L147)
+
+___
+
+### setUint16
+
+▸ **setUint16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L156)
+
+___
+
+### getUint16
+
+▸ **getUint16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L165)
+
+___
+
+### setUint32
+
+▸ **setUint32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L173)
+
+___
+
+### getUint32
+
+▸ **getUint32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L182)
+
+___
+
+### setVector2
+
+▸ **setVector2**(`name`, `v2`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v2` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L190)
+
+___
+
+### getVector2
+
+▸ **getVector2**(`name`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+GPUBufferBase.getVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L199)
+
+___
+
+### setVector3
+
+▸ **setVector3**(`name`, `v3`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v3` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L207)
+
+___
+
+### getVector3
+
+▸ **getVector3**(`name`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+GPUBufferBase.getVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L216)
+
+___
+
+### setVector4
+
+▸ **setVector4**(`name`, `v4`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4` | `Vector4` \| [`Quaternion`](Quaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L224)
+
+___
+
+### getVector4
+
+▸ **getVector4**(`name`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+GPUBufferBase.getVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L233)
+
+___
+
+### setVector4Array
+
+▸ **setVector4Array**(`name`, `v4Array`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4Array` | [`Vector3`](Vector3.md)[] \| `Vector4`[] \| [`Quaternion`](Quaternion.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:241](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L241)
+
+___
+
+### setColor
+
+▸ **setColor**(`name`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `color` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:250](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L250)
+
+___
+
+### getColor
+
+▸ **getColor**(`name`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+GPUBufferBase.getColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:259](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L259)
+
+___
+
+### setColorArray
+
+▸ **setColorArray**(`name`, `colorArray`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `colorArray` | [`Color`](Color.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColorArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:267](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L267)
+
+___
+
+### setMatrix
+
+▸ **setMatrix**(`name`, `mat`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mat` | [`Matrix4`](Matrix4.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrix
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:276](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L276)
+
+___
+
+### setMatrixArray
+
+▸ **setMatrixArray**(`name`, `mats`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mats` | [`Matrix4`](Matrix4.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrixArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:285](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L285)
+
+___
+
+### setArray
+
+▸ **setArray**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `number`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:297](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L297)
+
+___
+
+### setFloat32Array
+
+▸ **setFloat32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Float32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:306](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L306)
+
+___
+
+### setInt32Array
+
+▸ **setInt32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Int32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L315)
+
+___
+
+### setUint32Array
+
+▸ **setUint32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Uint32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:325](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L325)
+
+___
+
+### setStruct
+
+▸ **setStruct**\<`T`\>(`c`, `index`, `data`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `index` | `number` |
+| `data` | `any` |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStruct
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:334](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L334)
+
+___
+
+### setStructArray
+
+▸ **setStructArray**\<`T`\>(`c`, `dataList`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `dataList` | `any`[] |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStructArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:390](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L390)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.clean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:403](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L403)
+
+___
+
+### apply
+
+▸ **apply**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.apply
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L408)
+
+___
+
+### mapAsyncWrite
+
+▸ **mapAsyncWrite**(`mapAsyncArray`, `len`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mapAsyncArray` | `Float32Array` |
+| `len` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.mapAsyncWrite
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:413](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L413)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.destroy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:454](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L454)
+
+___
+
+### resizeBuffer
+
+▸ **resizeBuffer**(`size`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `size` | `number` |
+| `data?` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.resizeBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:511](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L511)
+
+___
+
+### readBuffer
+
+▸ **readBuffer**(): `Float32Array`
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:558](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L558)
+
+▸ **readBuffer**(`promise`): `Float32Array`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``false`` |
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:559](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L559)
+
+▸ **readBuffer**(`promise`): `Promise`\<`Float32Array`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``true`` |
+
+#### Returns
+
+`Promise`\<`Float32Array`\>
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:560](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L560)
diff --git a/docs/api/classes/CubeSky_Shader.md b/docs/api/classes/CubeSky_Shader.md
new file mode 100644
index 00000000..cce64af9
--- /dev/null
+++ b/docs/api/classes/CubeSky_Shader.md
@@ -0,0 +1,40 @@
+# Class: CubeSky\_Shader
+
+### Constructors
+
+- [constructor](CubeSky_Shader.md#constructor)
+
+### Properties
+
+- [sky\_vs\_frag\_wgsl](CubeSky_Shader.md#sky_vs_frag_wgsl)
+- [sky\_fs\_frag\_wgsl](CubeSky_Shader.md#sky_fs_frag_wgsl)
+
+## Constructors
+
+### constructor
+
+• **new CubeSky_Shader**(): [`CubeSky_Shader`](CubeSky_Shader.md)
+
+#### Returns
+
+[`CubeSky_Shader`](CubeSky_Shader.md)
+
+## Properties
+
+### sky\_vs\_frag\_wgsl
+
+▪ `Static` **sky\_vs\_frag\_wgsl**: `string`
+
+#### Defined in
+
+[src/assets/shader/sky/CubeSky_Shader.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/sky/CubeSky_Shader.ts#L2)
+
+___
+
+### sky\_fs\_frag\_wgsl
+
+▪ `Static` **sky\_fs\_frag\_wgsl**: `string`
+
+#### Defined in
+
+[src/assets/shader/sky/CubeSky_Shader.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/sky/CubeSky_Shader.ts#L46)
diff --git a/docs/api/classes/CubicBezierCurve.md b/docs/api/classes/CubicBezierCurve.md
new file mode 100644
index 00000000..dc378bcb
--- /dev/null
+++ b/docs/api/classes/CubicBezierCurve.md
@@ -0,0 +1,156 @@
+# Class: CubicBezierCurve
+
+Cubic Bezier Curve
+
+### Constructors
+
+- [constructor](CubicBezierCurve.md#constructor)
+
+### Methods
+
+- [setControlVertices](CubicBezierCurve.md#setcontrolvertices)
+- [getPoint](CubicBezierCurve.md#getpoint)
+- [getTangent](CubicBezierCurve.md#gettangent)
+- [getClosestParam](CubicBezierCurve.md#getclosestparam)
+- [getClosestParamRec](CubicBezierCurve.md#getclosestparamrec)
+
+## Constructors
+
+### constructor
+
+• **new CubicBezierCurve**(`cvs`): [`CubicBezierCurve`](CubicBezierCurve.md)
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `cvs` | [`Vector3`](Vector3.md)[] | controller points |
+
+#### Returns
+
+[`CubicBezierCurve`](CubicBezierCurve.md)
+
+#### Defined in
+
+[src/math/CubicBezierCurve.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierCurve.ts#L14)
+
+## Methods
+
+### setControlVertices
+
+▸ **setControlVertices**(`cvs`): `void`
+
+update controller points
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `cvs` | [`Vector3`](Vector3.md)[] | controller points |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/CubicBezierCurve.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierCurve.ts#L22)
+
+___
+
+### getPoint
+
+▸ **getPoint**(`t`): [`Vector3`](Vector3.md)
+
+get position by calc from curve
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `t` | `number` | a position in range [0-1] |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3
+
+#### Defined in
+
+[src/math/CubicBezierCurve.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierCurve.ts#L34)
+
+___
+
+### getTangent
+
+▸ **getTangent**(`t`): [`Vector3`](Vector3.md)
+
+get tagent by calc from curve
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `t` | `number` | a position in range [0-1] |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+tagent direction
+See: http://bimixual.org/AnimationLibrary/beziertangents.html
+
+#### Defined in
+
+[src/math/CubicBezierCurve.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierCurve.ts#L56)
+
+___
+
+### getClosestParam
+
+▸ **getClosestParam**(`pos`, `paramThreshold?`): `number`
+
+get adjacent coordinates
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `pos` | [`Vector3`](Vector3.md) | `undefined` | position |
+| `paramThreshold` | `number` | `0.000001` | threshold value |
+
+#### Returns
+
+`number`
+
+a position in range [0-1]
+
+#### Defined in
+
+[src/math/CubicBezierCurve.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierCurve.ts#L77)
+
+___
+
+### getClosestParamRec
+
+▸ **getClosestParamRec**(`pos`, `beginT`, `endT`, `thresholdT`): `number`
+
+get adjacent coordinates by given range
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pos` | [`Vector3`](Vector3.md) | position |
+| `beginT` | `number` | range from |
+| `endT` | `number` | range end |
+| `thresholdT` | `number` | threshold value |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/CubicBezierCurve.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierCurve.ts#L89)
diff --git a/docs/api/classes/CubicBezierPath.md b/docs/api/classes/CubicBezierPath.md
new file mode 100644
index 00000000..f486a0c4
--- /dev/null
+++ b/docs/api/classes/CubicBezierPath.md
@@ -0,0 +1,306 @@
+# Class: CubicBezierPath
+
+### Constructors
+
+- [constructor](CubicBezierPath.md#constructor)
+
+### Methods
+
+- [getPathType](CubicBezierPath.md#getpathtype)
+- [isClosed](CubicBezierPath.md#isclosed)
+- [isValid](CubicBezierPath.md#isvalid)
+- [clear](CubicBezierPath.md#clear)
+- [computeApproxLength](CubicBezierPath.md#computeapproxlength)
+- [computeApproxParamPerUnitLength](CubicBezierPath.md#computeapproxparamperunitlength)
+- [computeApproxNormParamPerUnitLength](CubicBezierPath.md#computeapproxnormparamperunitlength)
+- [interpolatePoints](CubicBezierPath.md#interpolatepoints)
+- [setControlVertices](CubicBezierPath.md#setcontrolvertices)
+- [getPoint](CubicBezierPath.md#getpoint)
+- [getPointNorm](CubicBezierPath.md#getpointnorm)
+- [getTangent](CubicBezierPath.md#gettangent)
+- [getTangentNorm](CubicBezierPath.md#gettangentnorm)
+- [computeClosestParam](CubicBezierPath.md#computeclosestparam)
+- [computeClosestNormParam](CubicBezierPath.md#computeclosestnormparam)
+
+## Constructors
+
+### constructor
+
+• **new CubicBezierPath**(`controlVertices`, `t?`): [`CubicBezierPath`](CubicBezierPath.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `controlVertices` | [`Vector3`](Vector3.md)[] | `undefined` |
+| `t` | [`CubicBezierType`](../enums/CubicBezierType.md) | `CubicBezierType.Open` |
+
+#### Returns
+
+[`CubicBezierPath`](CubicBezierPath.md)
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L26)
+
+## Methods
+
+### getPathType
+
+▸ **getPathType**(): [`CubicBezierType`](../enums/CubicBezierType.md)
+
+#### Returns
+
+[`CubicBezierType`](../enums/CubicBezierType.md)
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L30)
+
+___
+
+### isClosed
+
+▸ **isClosed**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L34)
+
+___
+
+### isValid
+
+▸ **isValid**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L41)
+
+___
+
+### clear
+
+▸ **clear**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L45)
+
+___
+
+### computeApproxLength
+
+▸ **computeApproxLength**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L52)
+
+___
+
+### computeApproxParamPerUnitLength
+
+▸ **computeApproxParamPerUnitLength**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L73)
+
+___
+
+### computeApproxNormParamPerUnitLength
+
+▸ **computeApproxNormParamPerUnitLength**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L78)
+
+___
+
+### interpolatePoints
+
+▸ **interpolatePoints**(`knots`, `t`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `knots` | [`Vector3`](Vector3.md)[] |
+| `t` | [`CubicBezierType`](../enums/CubicBezierType.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L83)
+
+___
+
+### setControlVertices
+
+▸ **setControlVertices**(`cvs`, `t`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cvs` | [`Vector3`](Vector3.md)[] |
+| `t` | [`CubicBezierType`](../enums/CubicBezierType.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L179)
+
+___
+
+### getPoint
+
+▸ **getPoint**(`t`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `t` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L194)
+
+___
+
+### getPointNorm
+
+▸ **getPointNorm**(`t`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `t` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L224)
+
+___
+
+### getTangent
+
+▸ **getTangent**(`t`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `t` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:230](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L230)
+
+___
+
+### getTangentNorm
+
+▸ **getTangentNorm**(`t`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `t` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:258](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L258)
+
+___
+
+### computeClosestParam
+
+▸ **computeClosestParam**(`pos`, `paramThreshold`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pos` | [`Vector3`](Vector3.md) |
+| `paramThreshold` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:265](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L265)
+
+___
+
+### computeClosestNormParam
+
+▸ **computeClosestNormParam**(`pos`, `paramThreshold`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pos` | [`Vector3`](Vector3.md) |
+| `paramThreshold` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:290](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L290)
diff --git a/docs/api/classes/CylinderGeometry.md b/docs/api/classes/CylinderGeometry.md
new file mode 100644
index 00000000..7313ccb1
--- /dev/null
+++ b/docs/api/classes/CylinderGeometry.md
@@ -0,0 +1,725 @@
+# Class: CylinderGeometry
+
+Cylinder geometry
+
+## Hierarchy
+
+- [`GeometryBase`](GeometryBase.md)
+
+ ↳ **`CylinderGeometry`**
+
+### Constructors
+
+- [constructor](CylinderGeometry.md#constructor)
+
+### Properties
+
+- [instanceID](CylinderGeometry.md#instanceid)
+- [name](CylinderGeometry.md#name)
+- [subGeometries](CylinderGeometry.md#subgeometries)
+- [morphTargetsRelative](CylinderGeometry.md#morphtargetsrelative)
+- [morphTargetDictionary](CylinderGeometry.md#morphtargetdictionary)
+- [skinNames](CylinderGeometry.md#skinnames)
+- [bindPose](CylinderGeometry.md#bindpose)
+- [blendShapeData](CylinderGeometry.md#blendshapedata)
+- [vertexDim](CylinderGeometry.md#vertexdim)
+- [vertexCount](CylinderGeometry.md#vertexcount)
+- [radiusTop](CylinderGeometry.md#radiustop)
+- [radiusBottom](CylinderGeometry.md#radiusbottom)
+- [height](CylinderGeometry.md#height)
+- [radialSegments](CylinderGeometry.md#radialsegments)
+- [heightSegments](CylinderGeometry.md#heightsegments)
+- [openEnded](CylinderGeometry.md#openended)
+- [thetaStart](CylinderGeometry.md#thetastart)
+- [thetaLength](CylinderGeometry.md#thetalength)
+
+### Accessors
+
+- [indicesBuffer](CylinderGeometry.md#indicesbuffer)
+- [vertexBuffer](CylinderGeometry.md#vertexbuffer)
+- [vertexAttributes](CylinderGeometry.md#vertexattributes)
+- [vertexAttributeMap](CylinderGeometry.md#vertexattributemap)
+- [geometryType](CylinderGeometry.md#geometrytype)
+- [bounds](CylinderGeometry.md#bounds)
+
+### Methods
+
+- [addSubGeometry](CylinderGeometry.md#addsubgeometry)
+- [generate](CylinderGeometry.md#generate)
+- [setIndices](CylinderGeometry.md#setindices)
+- [setAttribute](CylinderGeometry.md#setattribute)
+- [getAttribute](CylinderGeometry.md#getattribute)
+- [hasAttribute](CylinderGeometry.md#hasattribute)
+- [genWireframe](CylinderGeometry.md#genwireframe)
+- [compute](CylinderGeometry.md#compute)
+- [computeNormals](CylinderGeometry.md#computenormals)
+- [isPrimitive](CylinderGeometry.md#isprimitive)
+- [destroy](CylinderGeometry.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new CylinderGeometry**(`radiusTop?`, `radiusBottom?`, `height?`, `radialSegments?`, `heightSegments?`, `openEnded?`, `thetaStart?`, `thetaLength?`): [`CylinderGeometry`](CylinderGeometry.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `radiusTop` | `number` | `1` |
+| `radiusBottom` | `number` | `1` |
+| `height` | `number` | `1` |
+| `radialSegments` | `number` | `8` |
+| `heightSegments` | `number` | `8` |
+| `openEnded` | `boolean` | `false` |
+| `thetaStart` | `number` | `0` |
+| `thetaLength` | `number` | `undefined` |
+
+#### Returns
+
+[`CylinderGeometry`](CylinderGeometry.md)
+
+#### Overrides
+
+[GeometryBase](GeometryBase.md).[constructor](GeometryBase.md#constructor)
+
+#### Defined in
+
+[src/shape/CylinderGeometry.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/shape/CylinderGeometry.ts#L57)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[instanceID](GeometryBase.md#instanceid)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L39)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[name](GeometryBase.md#name)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L40)
+
+___
+
+### subGeometries
+
+• **subGeometries**: [`SubGeometry`](SubGeometry.md)[] = `[]`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[subGeometries](GeometryBase.md#subgeometries)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L41)
+
+___
+
+### morphTargetsRelative
+
+• **morphTargetsRelative**: `boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetsRelative](GeometryBase.md#morphtargetsrelative)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L42)
+
+___
+
+### morphTargetDictionary
+
+• **morphTargetDictionary**: `Object`
+
+#### Index signature
+
+▪ [blenderName: `string`]: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetDictionary](GeometryBase.md#morphtargetdictionary)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L43)
+
+___
+
+### skinNames
+
+• **skinNames**: `string`[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[skinNames](GeometryBase.md#skinnames)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L44)
+
+___
+
+### bindPose
+
+• **bindPose**: [`Matrix4`](Matrix4.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[bindPose](GeometryBase.md#bindpose)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L45)
+
+___
+
+### blendShapeData
+
+• **blendShapeData**: [`BlendShapeData`](BlendShapeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[blendShapeData](GeometryBase.md#blendshapedata)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L46)
+
+___
+
+### vertexDim
+
+• **vertexDim**: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexDim](GeometryBase.md#vertexdim)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L47)
+
+___
+
+### vertexCount
+
+• **vertexCount**: `number` = `0`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexCount](GeometryBase.md#vertexcount)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L48)
+
+___
+
+### radiusTop
+
+• **radiusTop**: `number`
+
+The radius of the top of the cylinder
+
+#### Defined in
+
+[src/shape/CylinderGeometry.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/shape/CylinderGeometry.ts#L15)
+
+___
+
+### radiusBottom
+
+• **radiusBottom**: `number`
+
+The radius of the bottom of the cylinder
+
+#### Defined in
+
+[src/shape/CylinderGeometry.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/shape/CylinderGeometry.ts#L19)
+
+___
+
+### height
+
+• **height**: `number`
+
+The height of the cylinder
+
+#### Defined in
+
+[src/shape/CylinderGeometry.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/shape/CylinderGeometry.ts#L23)
+
+___
+
+### radialSegments
+
+• **radialSegments**: `number`
+
+Number of segments around the side of the cylinder
+
+#### Defined in
+
+[src/shape/CylinderGeometry.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/shape/CylinderGeometry.ts#L27)
+
+___
+
+### heightSegments
+
+• **heightSegments**: `number`
+
+The number of segments along the height of the cylindrical side
+
+#### Defined in
+
+[src/shape/CylinderGeometry.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/shape/CylinderGeometry.ts#L31)
+
+___
+
+### openEnded
+
+• **openEnded**: `boolean`
+
+Indicate whether the bottom surface of the cone is open or capped. The default value is false, which means that the bottom surface is capped by default.
+
+#### Defined in
+
+[src/shape/CylinderGeometry.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/shape/CylinderGeometry.ts#L35)
+
+___
+
+### thetaStart
+
+• **thetaStart**: `number`
+
+Starting angle of the first segment
+
+#### Defined in
+
+[src/shape/CylinderGeometry.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/shape/CylinderGeometry.ts#L39)
+
+___
+
+### thetaLength
+
+• **thetaLength**: `number`
+
+The center angle of the circular sector on the bottom of the cylinder, with a default value of 2 * PI, makes it a complete cylinder.
+
+#### Defined in
+
+[src/shape/CylinderGeometry.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/shape/CylinderGeometry.ts#L43)
+
+## Accessors
+
+### indicesBuffer
+
+• `get` **indicesBuffer**(): [`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Returns
+
+[`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Inherited from
+
+GeometryBase.indicesBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L69)
+
+___
+
+### vertexBuffer
+
+• `get` **vertexBuffer**(): [`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Returns
+
+[`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Inherited from
+
+GeometryBase.vertexBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L73)
+
+___
+
+### vertexAttributes
+
+• `get` **vertexAttributes**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+GeometryBase.vertexAttributes
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L77)
+
+___
+
+### vertexAttributeMap
+
+• `get` **vertexAttributeMap**(): `Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Returns
+
+`Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Inherited from
+
+GeometryBase.vertexAttributeMap
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L81)
+
+___
+
+### geometryType
+
+• `get` **geometryType**(): [`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Returns
+
+[`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L85)
+
+• `set` **geometryType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryVertexType`](../enums/GeometryVertexType.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L88)
+
+___
+
+### bounds
+
+• `get` **bounds**(): `BoundingBox`
+
+#### Returns
+
+`BoundingBox`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L92)
+
+• `set` **bounds**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BoundingBox` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L135)
+
+## Methods
+
+### addSubGeometry
+
+▸ **addSubGeometry**(`...lodLevels`): [`SubGeometry`](SubGeometry.md)
+
+add subGeometry from lod level
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `...lodLevels` | [`LODDescriptor`](../types/LODDescriptor.md)[] |
+
+#### Returns
+
+[`SubGeometry`](SubGeometry.md)
+
+**`See`**
+
+LODDescriptor
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[addSubGeometry](GeometryBase.md#addsubgeometry)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L144)
+
+___
+
+### generate
+
+▸ **generate**(`shaderReflection`): `void`
+
+create geometry by shaderReflection
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `shaderReflection` | `ShaderReflection` | ShaderReflection |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[generate](GeometryBase.md#generate)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L155)
+
+___
+
+### setIndices
+
+▸ **setIndices**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setIndices](GeometryBase.md#setindices)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L165)
+
+___
+
+### setAttribute
+
+▸ **setAttribute**(`attribute`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setAttribute](GeometryBase.md#setattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L177)
+
+___
+
+### getAttribute
+
+▸ **getAttribute**(`attribute`): [`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+[`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[getAttribute](GeometryBase.md#getattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L190)
+
+___
+
+### hasAttribute
+
+▸ **hasAttribute**(`attribute`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[hasAttribute](GeometryBase.md#hasattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L194)
+
+___
+
+### genWireframe
+
+▸ **genWireframe**(): [`Vector3`](Vector3.md)[]
+
+#### Returns
+
+[`Vector3`](Vector3.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[genWireframe](GeometryBase.md#genwireframe)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L198)
+
+___
+
+### compute
+
+▸ **compute**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[compute](GeometryBase.md#compute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L251)
+
+___
+
+### computeNormals
+
+▸ **computeNormals**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[computeNormals](GeometryBase.md#computenormals)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:270](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L270)
+
+___
+
+### isPrimitive
+
+▸ **isPrimitive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[isPrimitive](GeometryBase.md#isprimitive)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L312)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[destroy](GeometryBase.md#destroy)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:316](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L316)
diff --git a/docs/api/classes/DDGIIrradianceGPUBufferReader.md b/docs/api/classes/DDGIIrradianceGPUBufferReader.md
new file mode 100644
index 00000000..4f022a8c
--- /dev/null
+++ b/docs/api/classes/DDGIIrradianceGPUBufferReader.md
@@ -0,0 +1,305 @@
+# Class: DDGIIrradianceGPUBufferReader
+
+Basic class of event diapatcher.
+It includes the implementation of functions such as event registration,
+deregistration, distribution, and unregister.
+
+## Hierarchy
+
+- [`CEventDispatcher`](CEventDispatcher.md)
+
+ ↳ **`DDGIIrradianceGPUBufferReader`**
+
+### Constructors
+
+- [constructor](DDGIIrradianceGPUBufferReader.md#constructor)
+
+### Properties
+
+- [opDepthArray](DDGIIrradianceGPUBufferReader.md#opdeptharray)
+- [opColorArray](DDGIIrradianceGPUBufferReader.md#opcolorarray)
+
+### Methods
+
+- [dispatchEvent](DDGIIrradianceGPUBufferReader.md#dispatchevent)
+- [destroy](DDGIIrradianceGPUBufferReader.md#destroy)
+- [addEventListener](DDGIIrradianceGPUBufferReader.md#addeventlistener)
+- [removeEventListener](DDGIIrradianceGPUBufferReader.md#removeeventlistener)
+- [removeEventListenerAt](DDGIIrradianceGPUBufferReader.md#removeeventlistenerat)
+- [removeAllEventListener](DDGIIrradianceGPUBufferReader.md#removealleventlistener)
+- [containEventListener](DDGIIrradianceGPUBufferReader.md#containeventlistener)
+- [hasEventListener](DDGIIrradianceGPUBufferReader.md#haseventlistener)
+- [initReader](DDGIIrradianceGPUBufferReader.md#initreader)
+
+## Constructors
+
+### constructor
+
+• **new DDGIIrradianceGPUBufferReader**(): [`DDGIIrradianceGPUBufferReader`](DDGIIrradianceGPUBufferReader.md)
+
+#### Returns
+
+[`DDGIIrradianceGPUBufferReader`](DDGIIrradianceGPUBufferReader.md)
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[constructor](CEventDispatcher.md#constructor)
+
+## Properties
+
+### opDepthArray
+
+• **opDepthArray**: `Float32Array`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/ddgi/DDGIIrradianceGPUBufferReader.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/ddgi/DDGIIrradianceGPUBufferReader.ts#L18)
+
+___
+
+### opColorArray
+
+• **opColorArray**: `Float32Array`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/ddgi/DDGIIrradianceGPUBufferReader.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/ddgi/DDGIIrradianceGPUBufferReader.ts#L19)
+
+## Methods
+
+### dispatchEvent
+
+▸ **dispatchEvent**(`event`): `void`
+
+Dispatch an event to all registered objects with a specific type of listener.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `event` | [`CEvent`](CEvent.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[dispatchEvent](CEventDispatcher.md#dispatchevent)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L24)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+release all registered event.
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[destroy](CEventDispatcher.md#destroy)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L55)
+
+___
+
+### addEventListener
+
+▸ **addEventListener**(`type`, `callback`, `thisObject`, `param?`, `priority?`): `number`
+
+register an event listener to event distancher.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event type. |
+| `callback` | `Function` | `undefined` | {Function} The callback function that handles events. This function must accept an Event3D object as its unique parameter and cannot return any result. for example: function(evt:Event3D):void. |
+| `thisObject` | `any` | `undefined` | {any} Current registration object, it'll call callback function. |
+| `param` | `any` | `null` | {any} the data binded to registered event, the default value is null. |
+| `priority` | `number` | `0` | {number} The priority of callback function execution, with a larger set value having priority to call |
+
+#### Returns
+
+`number`
+
+Returns register event id
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[addEventListener](CEventDispatcher.md#addeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L79)
+
+___
+
+### removeEventListener
+
+▸ **removeEventListener**(`type`, `callback`, `thisObject`): `void`
+
+Remove Event Listening
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` \| `number` | {string} event type |
+| `callback` | `Function` | {Function} callback function of event register |
+| `thisObject` | `any` | {any} The current registered object. |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[removeEventListener](CEventDispatcher.md#removeeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L113)
+
+___
+
+### removeEventListenerAt
+
+▸ **removeEventListenerAt**(`id`): `boolean`
+
+Remove an event Listening with id
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[removeEventListenerAt](CEventDispatcher.md#removeeventlistenerat)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L133)
+
+___
+
+### removeAllEventListener
+
+▸ **removeAllEventListener**(`eventType?`): `void`
+
+Specify a event type to remove all related event listeners
+eventType event type, set null to remove all event listeners
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `eventType` | `string` \| `number` | `null` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[removeAllEventListener](CEventDispatcher.md#removealleventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L153)
+
+___
+
+### containEventListener
+
+▸ **containEventListener**(`type`): `boolean`
+
+whether the target presence of a listener with event type.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` | {string} event type. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[containEventListener](CEventDispatcher.md#containeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:185](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L185)
+
+___
+
+### hasEventListener
+
+▸ **hasEventListener**(`type`, `callback?`, `thisObject?`): `boolean`
+
+whether the target presence of a listener with event type. it associate more registration parameters.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event name. |
+| `callback` | `Function` | `null` | {Function} callback function of event register. |
+| `thisObject` | `any` | `null` | {any} The registered object. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[hasEventListener](CEventDispatcher.md#haseventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L198)
+
+___
+
+### initReader
+
+▸ **initReader**(`probeRender`, `colorMap`, `depthMap`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `probeRender` | `DDGIProbeRenderer` |
+| `colorMap` | `RenderTexture` |
+| `depthMap` | `RenderTexture` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/ddgi/DDGIIrradianceGPUBufferReader.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/ddgi/DDGIIrradianceGPUBufferReader.ts#L21)
diff --git a/docs/api/classes/DepthOfFieldPost.md b/docs/api/classes/DepthOfFieldPost.md
new file mode 100644
index 00000000..d225da50
--- /dev/null
+++ b/docs/api/classes/DepthOfFieldPost.md
@@ -0,0 +1,232 @@
+# Class: DepthOfFieldPost
+
+depth of field effect.
+A common post-processing effect that simulates the focusing characteristics of a camera lens.
+```
+ //Configure parameters related to depth of field
+ let cfg = {@link Engine3D.setting.render.postProcessing.depthOfView};
+ cfg.near = 150;
+ cfg.far = 300;
+ cfg.pixelOffset = 1.0;
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+
+
+ Engine3D.startRender(renderJob);
+```
+
+## Hierarchy
+
+- `PostBase`
+
+ ↳ **`DepthOfFieldPost`**
+
+### Constructors
+
+- [constructor](DepthOfFieldPost.md#constructor)
+
+### Properties
+
+- [rtFrame](DepthOfFieldPost.md#rtframe)
+- [enable](DepthOfFieldPost.md#enable)
+- [postRenderer](DepthOfFieldPost.md#postrenderer)
+
+### Accessors
+
+- [pixelOffset](DepthOfFieldPost.md#pixeloffset)
+- [near](DepthOfFieldPost.md#near)
+- [far](DepthOfFieldPost.md#far)
+
+### Methods
+
+- [onResize](DepthOfFieldPost.md#onresize)
+- [destroy](DepthOfFieldPost.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new DepthOfFieldPost**(): [`DepthOfFieldPost`](DepthOfFieldPost.md)
+
+#### Returns
+
+[`DepthOfFieldPost`](DepthOfFieldPost.md)
+
+#### Overrides
+
+PostBase.constructor
+
+#### Defined in
+
+[src/gfx/renderJob/post/DepthOfFieldPost.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/DepthOfFieldPost.ts#L65)
+
+## Properties
+
+### rtFrame
+
+• **rtFrame**: [`RTFrame`](RTFrame.md)
+
+#### Defined in
+
+[src/gfx/renderJob/post/DepthOfFieldPost.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/DepthOfFieldPost.ts#L63)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+PostBase.enable
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L20)
+
+___
+
+### postRenderer
+
+• **postRenderer**: `PostRenderer`
+
+#### Inherited from
+
+PostBase.postRenderer
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L21)
+
+## Accessors
+
+### pixelOffset
+
+• `get` **pixelOffset**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/DepthOfFieldPost.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/DepthOfFieldPost.ts#L81)
+
+• `set` **pixelOffset**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/DepthOfFieldPost.ts:86](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/DepthOfFieldPost.ts#L86)
+
+___
+
+### near
+
+• `get` **near**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/DepthOfFieldPost.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/DepthOfFieldPost.ts#L92)
+
+• `set` **near**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/DepthOfFieldPost.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/DepthOfFieldPost.ts#L97)
+
+___
+
+### far
+
+• `get` **far**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/DepthOfFieldPost.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/DepthOfFieldPost.ts#L103)
+
+• `set` **far**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/DepthOfFieldPost.ts:108](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/DepthOfFieldPost.ts#L108)
+
+## Methods
+
+### onResize
+
+▸ **onResize**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.onResize
+
+#### Defined in
+
+[src/gfx/renderJob/post/DepthOfFieldPost.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/DepthOfFieldPost.ts#L199)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PostBase.destroy
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L87)
diff --git a/docs/api/classes/DirectLight.md b/docs/api/classes/DirectLight.md
new file mode 100644
index 00000000..fb414d39
--- /dev/null
+++ b/docs/api/classes/DirectLight.md
@@ -0,0 +1,1259 @@
+# Class: DirectLight
+
+Directional light source.
+The light of this light source is parallel, for example, sunlight. This light source can generate shadows.
+
+## Hierarchy
+
+- `LightBase`
+
+ ↳ **`DirectLight`**
+
+### Constructors
+
+- [constructor](DirectLight.md#constructor)
+
+### Properties
+
+- [object3D](DirectLight.md#object3d)
+- [isDestroyed](DirectLight.md#isdestroyed)
+- [shadowCamera](DirectLight.md#shadowcamera)
+- [name](DirectLight.md#name)
+- [size](DirectLight.md#size)
+- [lightData](DirectLight.md#lightdata)
+- [dirFix](DirectLight.md#dirfix)
+- [bindOnChange](DirectLight.md#bindonchange)
+- [needUpdateShadow](DirectLight.md#needupdateshadow)
+- [realTimeShadow](DirectLight.md#realtimeshadow)
+
+### Accessors
+
+- [eventDispatcher](DirectLight.md#eventdispatcher)
+- [isStart](DirectLight.md#isstart)
+- [transform](DirectLight.md#transform)
+- [enable](DirectLight.md#enable)
+- [radius](DirectLight.md#radius)
+- [indirect](DirectLight.md#indirect)
+- [iesProfiles](DirectLight.md#iesprofiles)
+- [iesProfile](DirectLight.md#iesprofile)
+- [r](DirectLight.md#r)
+- [g](DirectLight.md#g)
+- [b](DirectLight.md#b)
+- [lightColor](DirectLight.md#lightcolor)
+- [color](DirectLight.md#color)
+- [intensity](DirectLight.md#intensity)
+- [castShadow](DirectLight.md#castshadow)
+- [shadowIndex](DirectLight.md#shadowindex)
+- [castGI](DirectLight.md#castgi)
+- [direction](DirectLight.md#direction)
+
+### Methods
+
+- [stop](DirectLight.md#stop)
+- [onUpdate](DirectLight.md#onupdate)
+- [onLateUpdate](DirectLight.md#onlateupdate)
+- [onBeforeUpdate](DirectLight.md#onbeforeupdate)
+- [onCompute](DirectLight.md#oncompute)
+- [onGraphic](DirectLight.md#ongraphic)
+- [onParentChange](DirectLight.md#onparentchange)
+- [onAddChild](DirectLight.md#onaddchild)
+- [onRemoveChild](DirectLight.md#onremovechild)
+- [cloneTo](DirectLight.md#cloneto)
+- [copyComponent](DirectLight.md#copycomponent)
+- [beforeDestroy](DirectLight.md#beforedestroy)
+- [init](DirectLight.md#init)
+- [start](DirectLight.md#start)
+- [debug](DirectLight.md#debug)
+- [onEnable](DirectLight.md#onenable)
+- [onDisable](DirectLight.md#ondisable)
+- [destroy](DirectLight.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new DirectLight**(): [`DirectLight`](DirectLight.md)
+
+#### Returns
+
+[`DirectLight`](DirectLight.md)
+
+#### Overrides
+
+LightBase.constructor
+
+#### Defined in
+
+[src/components/lights/DirectLight.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/DirectLight.ts#L16)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+LightBase.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+LightBase.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### shadowCamera
+
+• **shadowCamera**: [`Camera3D`](Camera3D.md)
+
+#### Defined in
+
+[src/components/lights/DirectLight.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/DirectLight.ts#L14)
+
+___
+
+### name
+
+• **name**: `string`
+
+light name
+
+#### Inherited from
+
+LightBase.name
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L22)
+
+___
+
+### size
+
+• **size**: `number` = `1`
+
+light size
+
+#### Inherited from
+
+LightBase.size
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L26)
+
+___
+
+### lightData
+
+• **lightData**: `LightData`
+
+light source data
+
+#### Inherited from
+
+LightBase.lightData
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L31)
+
+___
+
+### dirFix
+
+• **dirFix**: `number` = `1`
+
+fix light direction
+
+#### Inherited from
+
+LightBase.dirFix
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L36)
+
+___
+
+### bindOnChange
+
+• **bindOnChange**: () => `void`
+
+Callback function when binding changes
+
+#### Type declaration
+
+▸ (): `void`
+
+Callback function when binding changes
+
+##### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.bindOnChange
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L41)
+
+___
+
+### needUpdateShadow
+
+• **needUpdateShadow**: `boolean` = `true`
+
+#### Inherited from
+
+LightBase.needUpdateShadow
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L43)
+
+___
+
+### realTimeShadow
+
+• **realTimeShadow**: `boolean` = `true`
+
+Whether to enable real-time rendering of shadows
+
+#### Inherited from
+
+LightBase.realTimeShadow
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L48)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+LightBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LightBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+LightBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LightBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### radius
+
+• `get` **radius**(): `number`
+
+Get the radius of a directional light source
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/lights/DirectLight.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/DirectLight.ts#L40)
+
+• `set` **radius**(`value`): `void`
+
+Set the radius of a directional light source
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/DirectLight.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/DirectLight.ts#L47)
+
+___
+
+### indirect
+
+• `get` **indirect**(): `number`
+
+Get the radius of a directional light source
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/lights/DirectLight.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/DirectLight.ts#L56)
+
+• `set` **indirect**(`value`): `void`
+
+Set the radius of a directional light source
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/DirectLight.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/DirectLight.ts#L63)
+
+___
+
+### iesProfiles
+
+• `set` **iesProfiles**(`iesProfiles`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `iesProfiles` | [`IESProfiles`](IESProfiles.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.iesProfiles
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:125](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L125)
+
+___
+
+### iesProfile
+
+• `get` **iesProfile**(): [`IESProfiles`](IESProfiles.md)
+
+#### Returns
+
+[`IESProfiles`](IESProfiles.md)
+
+#### Inherited from
+
+LightBase.iesProfile
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L132)
+
+___
+
+### r
+
+• `get` **r**(): `number`
+
+Get the red component of the lighting color
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LightBase.r
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L139)
+
+• `set` **r**(`value`): `void`
+
+Set the red component of the lighting color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.r
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:146](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L146)
+
+___
+
+### g
+
+• `get` **g**(): `number`
+
+Get the green component of the lighting color
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LightBase.g
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:154](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L154)
+
+• `set` **g**(`value`): `void`
+
+Set the green component of the lighting color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.g
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L161)
+
+___
+
+### b
+
+• `get` **b**(): `number`
+
+Get the blue component of the lighting color
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LightBase.b
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:169](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L169)
+
+• `set` **b**(`value`): `void`
+
+Set the blue component of the lighting color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.b
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:175](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L175)
+
+___
+
+### lightColor
+
+• `get` **lightColor**(): [`Color`](Color.md)
+
+Get light source color
+
+#### Returns
+
+[`Color`](Color.md)
+
+Color
+
+#### Inherited from
+
+LightBase.lightColor
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:183](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L183)
+
+• `set` **lightColor**(`value`): `void`
+
+Set light source color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.lightColor
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L190)
+
+___
+
+### color
+
+• `get` **color**(): [`Color`](Color.md)
+
+Get light source color
+
+#### Returns
+
+[`Color`](Color.md)
+
+Color
+
+#### Inherited from
+
+LightBase.color
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L199)
+
+• `set` **color**(`value`): `void`
+
+Set light source color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.color
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L207)
+
+___
+
+### intensity
+
+• `get` **intensity**(): `number`
+
+Get Illumination intensity of light source
+
+#### Returns
+
+`number`
+
+number
+
+#### Inherited from
+
+LightBase.intensity
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L216)
+
+• `set` **intensity**(`value`): `void`
+
+Set Illumination intensity of light source
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.intensity
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L224)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LightBase.castShadow
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L240)
+
+• `set` **castShadow**(`value`): `void`
+
+Cast Light Shadow
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.castShadow
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L233)
+
+___
+
+### shadowIndex
+
+• `get` **shadowIndex**(): `number`
+
+get shadow index at shadow map list
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LightBase.shadowIndex
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L247)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+get gi is enable
+
+#### Returns
+
+`boolean`
+
+boolean
+
+#### Inherited from
+
+LightBase.castGI
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:256](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L256)
+
+• `set` **castGI**(`value`): `void`
+
+set gi is enable
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.castGI
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:263](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L263)
+
+___
+
+### direction
+
+• `get` **direction**(): [`Vector3`](Vector3.md)
+
+light source direction
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3
+
+#### Inherited from
+
+LightBase.direction
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:277](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L277)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+LightBase.copyComponent
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.beforeDestroy
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### init
+
+▸ **init**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LightBase.init
+
+#### Defined in
+
+[src/components/lights/DirectLight.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/DirectLight.ts#L20)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LightBase.start
+
+#### Defined in
+
+[src/components/lights/DirectLight.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/DirectLight.ts#L31)
+
+___
+
+### debug
+
+▸ **debug**(): `void`
+
+enable light debug gui
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/DirectLight.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/DirectLight.ts#L90)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.onEnable
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L114)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.onDisable
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L119)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.destroy
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:281](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L281)
diff --git a/docs/api/classes/DoubleArray.md b/docs/api/classes/DoubleArray.md
new file mode 100644
index 00000000..9f4fceba
--- /dev/null
+++ b/docs/api/classes/DoubleArray.md
@@ -0,0 +1,148 @@
+# Class: DoubleArray
+
+### Constructors
+
+- [constructor](DoubleArray.md#constructor)
+
+### Methods
+
+- [getIndexByKey](DoubleArray.md#getindexbykey)
+- [getValueByKey](DoubleArray.md#getvaluebykey)
+- [put](DoubleArray.md#put)
+- [remove](DoubleArray.md#remove)
+- [getValues](DoubleArray.md#getvalues)
+- [getKeys](DoubleArray.md#getkeys)
+- [clear](DoubleArray.md#clear)
+
+## Constructors
+
+### constructor
+
+• **new DoubleArray**(): [`DoubleArray`](DoubleArray.md)
+
+#### Returns
+
+[`DoubleArray`](DoubleArray.md)
+
+## Methods
+
+### getIndexByKey
+
+▸ **getIndexByKey**(`key`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `any` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/navigation/DoubleArray.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/DoubleArray.ts#L7)
+
+___
+
+### getValueByKey
+
+▸ **getValueByKey**(`key`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `any` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/math/navigation/DoubleArray.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/DoubleArray.ts#L11)
+
+___
+
+### put
+
+▸ **put**(`key`, `value`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `any` |
+| `value` | `any` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/math/navigation/DoubleArray.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/DoubleArray.ts#L19)
+
+___
+
+### remove
+
+▸ **remove**(`key`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `any` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/math/navigation/DoubleArray.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/DoubleArray.ts#L28)
+
+___
+
+### getValues
+
+▸ **getValues**(): `any`[]
+
+#### Returns
+
+`any`[]
+
+#### Defined in
+
+[src/math/navigation/DoubleArray.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/DoubleArray.ts#L39)
+
+___
+
+### getKeys
+
+▸ **getKeys**(): `any`[]
+
+#### Returns
+
+`any`[]
+
+#### Defined in
+
+[src/math/navigation/DoubleArray.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/DoubleArray.ts#L43)
+
+___
+
+### clear
+
+▸ **clear**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/navigation/DoubleArray.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/DoubleArray.ts#L47)
diff --git a/docs/api/classes/Engine3D.md b/docs/api/classes/Engine3D.md
new file mode 100644
index 00000000..153b8275
--- /dev/null
+++ b/docs/api/classes/Engine3D.md
@@ -0,0 +1,329 @@
+# Class: Engine3D
+
+Orillusion 3D Engine
+
+-- Engine3D.setting.*
+
+-- await Engine3D.init();
+
+### Constructors
+
+- [constructor](Engine3D.md#constructor)
+
+### Properties
+
+- [res](Engine3D.md#res)
+- [inputSystem](Engine3D.md#inputsystem)
+- [divB](Engine3D.md#divb)
+- [views](Engine3D.md#views)
+- [setting](Engine3D.md#setting)
+
+### Accessors
+
+- [frameRate](Engine3D.md#framerate)
+- [size](Engine3D.md#size)
+- [aspect](Engine3D.md#aspect)
+- [width](Engine3D.md#width)
+- [height](Engine3D.md#height)
+
+### Methods
+
+- [init](Engine3D.md#init)
+- [startRenderView](Engine3D.md#startrenderview)
+- [startRenderViews](Engine3D.md#startrenderviews)
+- [getRenderJob](Engine3D.md#getrenderjob)
+- [pause](Engine3D.md#pause)
+- [resume](Engine3D.md#resume)
+
+## Constructors
+
+### constructor
+
+• **new Engine3D**(): [`Engine3D`](Engine3D.md)
+
+#### Returns
+
+[`Engine3D`](Engine3D.md)
+
+## Properties
+
+### res
+
+▪ `Static` **res**: [`Res`](Res.md)
+
+resource manager in engine3d
+
+#### Defined in
+
+[src/Engine3D.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/Engine3D.ts#L43)
+
+___
+
+### inputSystem
+
+▪ `Static` **inputSystem**: [`InputSystem`](InputSystem.md)
+
+input system in engine3d
+
+#### Defined in
+
+[src/Engine3D.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/Engine3D.ts#L48)
+
+___
+
+### divB
+
+▪ `Static` **divB**: `HTMLDivElement`
+
+input system in engine3d
+
+#### Defined in
+
+[src/Engine3D.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/Engine3D.ts#L53)
+
+___
+
+### views
+
+▪ `Static` **views**: [`View3D`](View3D.md)[]
+
+more view in engine3d
+
+#### Defined in
+
+[src/Engine3D.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/Engine3D.ts#L58)
+
+___
+
+### setting
+
+▪ `Static` **setting**: [`EngineSetting`](../types/EngineSetting.md)
+
+engine setting
+
+#### Defined in
+
+[src/Engine3D.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/Engine3D.ts#L118)
+
+## Accessors
+
+### frameRate
+
+• `get` **frameRate**(): `number`
+
+set engine render frameRate 24/30/60/114/120/144/240/360 fps or other
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/Engine3D.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/Engine3D.ts#L72)
+
+• `set` **frameRate**(`value`): `void`
+
+get engine render frameRate
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/Engine3D.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/Engine3D.ts#L79)
+
+___
+
+### size
+
+• `get` **size**(): `number`[]
+
+get render window size width and height
+
+#### Returns
+
+`number`[]
+
+#### Defined in
+
+[src/Engine3D.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/Engine3D.ts#L90)
+
+___
+
+### aspect
+
+• `get` **aspect**(): `number`
+
+get render window aspect
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/Engine3D.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/Engine3D.ts#L97)
+
+___
+
+### width
+
+• `get` **width**(): `number`
+
+get render window size width
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/Engine3D.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/Engine3D.ts#L104)
+
+___
+
+### height
+
+• `get` **height**(): `number`
+
+get render window size height
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/Engine3D.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/Engine3D.ts#L111)
+
+## Methods
+
+### init
+
+▸ **init**(`descriptor?`): `Promise`\<`void`\>
+
+create webgpu 3d engine
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `descriptor` | `Object` | [CanvasConfig](../types/CanvasConfig.md) |
+| `descriptor.canvasConfig?` | [`CanvasConfig`](../types/CanvasConfig.md) | - |
+| `descriptor.beforeRender?` | `Function` | - |
+| `descriptor.renderLoop?` | `Function` | - |
+| `descriptor.lateRender?` | `Function` | - |
+| `descriptor.engineSetting?` | [`EngineSetting`](../types/EngineSetting.md) | - |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/Engine3D.ts:327](https://github.com/Orillusion/orillusion/blob/main/src/Engine3D.ts#L327)
+
+___
+
+### startRenderView
+
+▸ **startRenderView**(`view`): [`ForwardRenderJob`](ForwardRenderJob.md)
+
+set render view and start renderer
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+
+#### Returns
+
+[`ForwardRenderJob`](ForwardRenderJob.md)
+
+#### Defined in
+
+[src/Engine3D.ts:384](https://github.com/Orillusion/orillusion/blob/main/src/Engine3D.ts#L384)
+
+___
+
+### startRenderViews
+
+▸ **startRenderViews**(`views`): `void`
+
+set render views and start renderer
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `views` | [`View3D`](View3D.md)[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/Engine3D.ts:413](https://github.com/Orillusion/orillusion/blob/main/src/Engine3D.ts#L413)
+
+___
+
+### getRenderJob
+
+▸ **getRenderJob**(`view`): `RendererJob`
+
+get view render job instance
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`RendererJob`
+
+#### Defined in
+
+[src/Engine3D.ts:441](https://github.com/Orillusion/orillusion/blob/main/src/Engine3D.ts#L441)
+
+___
+
+### pause
+
+▸ **pause**(): `void`
+
+Pause the engine render
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/Engine3D.ts:448](https://github.com/Orillusion/orillusion/blob/main/src/Engine3D.ts#L448)
+
+___
+
+### resume
+
+▸ **resume**(): `void`
+
+Resume the engine render
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/Engine3D.ts:458](https://github.com/Orillusion/orillusion/blob/main/src/Engine3D.ts#L458)
diff --git a/docs/api/classes/Entity.md b/docs/api/classes/Entity.md
new file mode 100644
index 00000000..5fafe9ac
--- /dev/null
+++ b/docs/api/classes/Entity.md
@@ -0,0 +1,654 @@
+# Class: Entity
+
+The entity class provides an abstract base class for all scene objects that are considered to have "existence" in the scene,
+ which can be considered as actual objects with positions and sizes.
+Entity class is an abstract class and cannot be instantiated. If you want to instantiate it, please use the Object 3D class.
+
+## Hierarchy
+
+- [`CEventDispatcher`](CEventDispatcher.md)
+
+ ↳ **`Entity`**
+
+ ↳↳ [`Object3D`](Object3D.md)
+
+### Constructors
+
+- [constructor](Entity.md#constructor)
+
+### Properties
+
+- [name](Entity.md#name)
+- [transform](Entity.md#transform)
+- [renderNode](Entity.md#rendernode)
+- [entityChildren](Entity.md#entitychildren)
+- [components](Entity.md#components)
+
+### Accessors
+
+- [instanceID](Entity.md#instanceid)
+- [numChildren](Entity.md#numchildren)
+- [bound](Entity.md#bound)
+
+### Methods
+
+- [getObjectByName](Entity.md#getobjectbyname)
+- [addChild](Entity.md#addchild)
+- [removeChild](Entity.md#removechild)
+- [removeAllChild](Entity.md#removeallchild)
+- [removeSelf](Entity.md#removeself)
+- [removeChildByIndex](Entity.md#removechildbyindex)
+- [hasChild](Entity.md#haschild)
+- [removeFromParent](Entity.md#removefromparent)
+- [getChildByIndex](Entity.md#getchildbyindex)
+- [getChildByName](Entity.md#getchildbyname)
+- [noticeComponents](Entity.md#noticecomponents)
+- [destroy](Entity.md#destroy)
+- [dispatchEvent](Entity.md#dispatchevent)
+- [addEventListener](Entity.md#addeventlistener)
+- [removeEventListener](Entity.md#removeeventlistener)
+- [removeEventListenerAt](Entity.md#removeeventlistenerat)
+- [removeAllEventListener](Entity.md#removealleventlistener)
+- [containEventListener](Entity.md#containeventlistener)
+- [hasEventListener](Entity.md#haseventlistener)
+
+## Constructors
+
+### constructor
+
+• **new Entity**(): [`Entity`](Entity.md)
+
+#### Returns
+
+[`Entity`](Entity.md)
+
+#### Overrides
+
+[CEventDispatcher](CEventDispatcher.md).[constructor](CEventDispatcher.md#constructor)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L104)
+
+## Properties
+
+### name
+
+• **name**: `string` = `''`
+
+The name of the object. The default value is an empty string.
+
+#### Defined in
+
+[src/core/entities/Entity.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L24)
+
+___
+
+### transform
+
+• **transform**: [`Transform`](Transform.md)
+
+The Transform attached to this object.
+
+#### Defined in
+
+[src/core/entities/Entity.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L42)
+
+___
+
+### renderNode
+
+• **renderNode**: `RenderNode`
+
+Renderer components
+
+#### Defined in
+
+[src/core/entities/Entity.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L47)
+
+___
+
+### entityChildren
+
+• **entityChildren**: [`Entity`](Entity.md)[]
+
+An array containing sub objects of an object
+
+#### Defined in
+
+[src/core/entities/Entity.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L52)
+
+___
+
+### components
+
+• **components**: `Map`\<`any`, [`IComponent`](../interfaces/IComponent.md)\>
+
+List of components attached to an object
+
+#### Defined in
+
+[src/core/entities/Entity.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L57)
+
+## Accessors
+
+### instanceID
+
+• `get` **instanceID**(): `string`
+
+The unique identifier of the object.
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/core/entities/Entity.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L32)
+
+___
+
+### numChildren
+
+• `get` **numChildren**(): `number`
+
+Returns the number of child objects of an object
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/entities/Entity.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L116)
+
+___
+
+### bound
+
+• `get` **bound**(): `IBound`
+
+#### Returns
+
+`IBound`
+
+#### Defined in
+
+[src/core/entities/Entity.ts:277](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L277)
+
+• `set` **bound**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `IBound` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Entity.ts:282](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L282)
+
+## Methods
+
+### getObjectByName
+
+▸ **getObjectByName**(`name`): [`Entity`](Entity.md)
+
+Starting from the object itself, search for the object and its children, and return the first child object with a matching name.
+For most objects, the name is an empty string by default. You must manually set it to use this method.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | input name |
+
+#### Returns
+
+[`Entity`](Entity.md)
+
+result Entity
+
+#### Defined in
+
+[src/core/entities/Entity.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L81)
+
+___
+
+### addChild
+
+▸ **addChild**(`child`): [`Entity`](Entity.md)
+
+Add an object as a child of this object. You can add any number of objects.
+Any current parent object on the object passed here will be deleted, as an object can only have at most one parent object.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | [`Entity`](Entity.md) | target child entity |
+
+#### Returns
+
+[`Entity`](Entity.md)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:127](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L127)
+
+___
+
+### removeChild
+
+▸ **removeChild**(`child`): `void`
+
+Remove the child objects of the object. You can remove any number of objects.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | [`Entity`](Entity.md) | Removed objects |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Entity.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L152)
+
+___
+
+### removeAllChild
+
+▸ **removeAllChild**(): `void`
+
+Remove all children of the current object
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Entity.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L168)
+
+___
+
+### removeSelf
+
+▸ **removeSelf**(): `this`
+
+Remove the current node from the parent
+
+#### Returns
+
+`this`
+
+this
+
+#### Defined in
+
+[src/core/entities/Entity.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L179)
+
+___
+
+### removeChildByIndex
+
+▸ **removeChildByIndex**(`index`): `void`
+
+Search for child nodes of objects and remove child objects with matching indexes.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index` | `number` | assign index |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Entity.ts:189](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L189)
+
+___
+
+### hasChild
+
+▸ **hasChild**(`child`): `boolean`
+
+Does the current object contain a certain object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | [`Entity`](Entity.md) | certain object |
+
+#### Returns
+
+`boolean`
+
+boolean
+
+#### Defined in
+
+[src/core/entities/Entity.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L203)
+
+___
+
+### removeFromParent
+
+▸ **removeFromParent**(): `this`
+
+Remove the current node from the parent
+
+#### Returns
+
+`this`
+
+this
+
+#### Defined in
+
+[src/core/entities/Entity.ts:213](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L213)
+
+___
+
+### getChildByIndex
+
+▸ **getChildByIndex**(`index`): [`Entity`](Entity.md)
+
+Search for object children and return the first child object with a matching index.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index` | `number` | matching index |
+
+#### Returns
+
+[`Entity`](Entity.md)
+
+child entity
+
+#### Defined in
+
+[src/core/entities/Entity.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L227)
+
+___
+
+### getChildByName
+
+▸ **getChildByName**(`name`, `loopChild?`): `any`
+
+Search for object children and return a child object with a matching name.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `name` | `string` | `undefined` | matching name |
+| `loopChild` | `boolean` | `true` | Whether to traverse the children of the child object. The default value is true |
+
+#### Returns
+
+`any`
+
+result
+
+#### Defined in
+
+[src/core/entities/Entity.ts:242](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L242)
+
+___
+
+### noticeComponents
+
+▸ **noticeComponents**(`key`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | keyof [`IComponent`](../interfaces/IComponent.md) |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Entity.ts:328](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L328)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release current object
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[CEventDispatcher](CEventDispatcher.md).[destroy](CEventDispatcher.md#destroy)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:339](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L339)
+
+___
+
+### dispatchEvent
+
+▸ **dispatchEvent**(`event`): `void`
+
+Dispatch an event to all registered objects with a specific type of listener.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `event` | [`CEvent`](CEvent.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[dispatchEvent](CEventDispatcher.md#dispatchevent)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L24)
+
+___
+
+### addEventListener
+
+▸ **addEventListener**(`type`, `callback`, `thisObject`, `param?`, `priority?`): `number`
+
+register an event listener to event distancher.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event type. |
+| `callback` | `Function` | `undefined` | {Function} The callback function that handles events. This function must accept an Event3D object as its unique parameter and cannot return any result. for example: function(evt:Event3D):void. |
+| `thisObject` | `any` | `undefined` | {any} Current registration object, it'll call callback function. |
+| `param` | `any` | `null` | {any} the data binded to registered event, the default value is null. |
+| `priority` | `number` | `0` | {number} The priority of callback function execution, with a larger set value having priority to call |
+
+#### Returns
+
+`number`
+
+Returns register event id
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[addEventListener](CEventDispatcher.md#addeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L79)
+
+___
+
+### removeEventListener
+
+▸ **removeEventListener**(`type`, `callback`, `thisObject`): `void`
+
+Remove Event Listening
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` \| `number` | {string} event type |
+| `callback` | `Function` | {Function} callback function of event register |
+| `thisObject` | `any` | {any} The current registered object. |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[removeEventListener](CEventDispatcher.md#removeeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L113)
+
+___
+
+### removeEventListenerAt
+
+▸ **removeEventListenerAt**(`id`): `boolean`
+
+Remove an event Listening with id
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[removeEventListenerAt](CEventDispatcher.md#removeeventlistenerat)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L133)
+
+___
+
+### removeAllEventListener
+
+▸ **removeAllEventListener**(`eventType?`): `void`
+
+Specify a event type to remove all related event listeners
+eventType event type, set null to remove all event listeners
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `eventType` | `string` \| `number` | `null` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[removeAllEventListener](CEventDispatcher.md#removealleventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L153)
+
+___
+
+### containEventListener
+
+▸ **containEventListener**(`type`): `boolean`
+
+whether the target presence of a listener with event type.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` | {string} event type. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[containEventListener](CEventDispatcher.md#containeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:185](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L185)
+
+___
+
+### hasEventListener
+
+▸ **hasEventListener**(`type`, `callback?`, `thisObject?`): `boolean`
+
+whether the target presence of a listener with event type. it associate more registration parameters.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event name. |
+| `callback` | `Function` | `null` | {Function} callback function of event register. |
+| `thisObject` | `any` | `null` | {any} The registered object. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[hasEventListener](CEventDispatcher.md#haseventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L198)
diff --git a/docs/api/classes/ExtrudeGeometry.md b/docs/api/classes/ExtrudeGeometry.md
new file mode 100644
index 00000000..ecd12d9d
--- /dev/null
+++ b/docs/api/classes/ExtrudeGeometry.md
@@ -0,0 +1,670 @@
+# Class: ExtrudeGeometry
+
+## Hierarchy
+
+- [`GeometryBase`](GeometryBase.md)
+
+ ↳ **`ExtrudeGeometry`**
+
+### Constructors
+
+- [constructor](ExtrudeGeometry.md#constructor)
+
+### Properties
+
+- [vScale](ExtrudeGeometry.md#vscale)
+- [uNegate](ExtrudeGeometry.md#unegate)
+- [sections](ExtrudeGeometry.md#sections)
+- [instanceID](ExtrudeGeometry.md#instanceid)
+- [name](ExtrudeGeometry.md#name)
+- [subGeometries](ExtrudeGeometry.md#subgeometries)
+- [morphTargetsRelative](ExtrudeGeometry.md#morphtargetsrelative)
+- [morphTargetDictionary](ExtrudeGeometry.md#morphtargetdictionary)
+- [skinNames](ExtrudeGeometry.md#skinnames)
+- [bindPose](ExtrudeGeometry.md#bindpose)
+- [blendShapeData](ExtrudeGeometry.md#blendshapedata)
+- [vertexDim](ExtrudeGeometry.md#vertexdim)
+- [vertexCount](ExtrudeGeometry.md#vertexcount)
+
+### Accessors
+
+- [indicesBuffer](ExtrudeGeometry.md#indicesbuffer)
+- [vertexBuffer](ExtrudeGeometry.md#vertexbuffer)
+- [vertexAttributes](ExtrudeGeometry.md#vertexattributes)
+- [vertexAttributeMap](ExtrudeGeometry.md#vertexattributemap)
+- [geometryType](ExtrudeGeometry.md#geometrytype)
+- [bounds](ExtrudeGeometry.md#bounds)
+
+### Methods
+
+- [build](ExtrudeGeometry.md#build)
+- [addSubGeometry](ExtrudeGeometry.md#addsubgeometry)
+- [generate](ExtrudeGeometry.md#generate)
+- [setIndices](ExtrudeGeometry.md#setindices)
+- [setAttribute](ExtrudeGeometry.md#setattribute)
+- [getAttribute](ExtrudeGeometry.md#getattribute)
+- [hasAttribute](ExtrudeGeometry.md#hasattribute)
+- [genWireframe](ExtrudeGeometry.md#genwireframe)
+- [compute](ExtrudeGeometry.md#compute)
+- [computeNormals](ExtrudeGeometry.md#computenormals)
+- [isPrimitive](ExtrudeGeometry.md#isprimitive)
+- [destroy](ExtrudeGeometry.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new ExtrudeGeometry**(): [`ExtrudeGeometry`](ExtrudeGeometry.md)
+
+#### Returns
+
+[`ExtrudeGeometry`](ExtrudeGeometry.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[constructor](GeometryBase.md#constructor)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L58)
+
+## Properties
+
+### vScale
+
+• **vScale**: `number`
+
+#### Defined in
+
+[src/core/geometry/ExtrudeGeometry.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/ExtrudeGeometry.ts#L21)
+
+___
+
+### uNegate
+
+• **uNegate**: `boolean`
+
+#### Defined in
+
+[src/core/geometry/ExtrudeGeometry.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/ExtrudeGeometry.ts#L22)
+
+___
+
+### sections
+
+• **sections**: `Section`[]
+
+#### Defined in
+
+[src/core/geometry/ExtrudeGeometry.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/ExtrudeGeometry.ts#L23)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[instanceID](GeometryBase.md#instanceid)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L39)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[name](GeometryBase.md#name)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L40)
+
+___
+
+### subGeometries
+
+• **subGeometries**: [`SubGeometry`](SubGeometry.md)[] = `[]`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[subGeometries](GeometryBase.md#subgeometries)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L41)
+
+___
+
+### morphTargetsRelative
+
+• **morphTargetsRelative**: `boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetsRelative](GeometryBase.md#morphtargetsrelative)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L42)
+
+___
+
+### morphTargetDictionary
+
+• **morphTargetDictionary**: `Object`
+
+#### Index signature
+
+▪ [blenderName: `string`]: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetDictionary](GeometryBase.md#morphtargetdictionary)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L43)
+
+___
+
+### skinNames
+
+• **skinNames**: `string`[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[skinNames](GeometryBase.md#skinnames)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L44)
+
+___
+
+### bindPose
+
+• **bindPose**: [`Matrix4`](Matrix4.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[bindPose](GeometryBase.md#bindpose)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L45)
+
+___
+
+### blendShapeData
+
+• **blendShapeData**: [`BlendShapeData`](BlendShapeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[blendShapeData](GeometryBase.md#blendshapedata)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L46)
+
+___
+
+### vertexDim
+
+• **vertexDim**: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexDim](GeometryBase.md#vertexdim)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L47)
+
+___
+
+### vertexCount
+
+• **vertexCount**: `number` = `0`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexCount](GeometryBase.md#vertexcount)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L48)
+
+## Accessors
+
+### indicesBuffer
+
+• `get` **indicesBuffer**(): [`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Returns
+
+[`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Inherited from
+
+GeometryBase.indicesBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L69)
+
+___
+
+### vertexBuffer
+
+• `get` **vertexBuffer**(): [`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Returns
+
+[`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Inherited from
+
+GeometryBase.vertexBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L73)
+
+___
+
+### vertexAttributes
+
+• `get` **vertexAttributes**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+GeometryBase.vertexAttributes
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L77)
+
+___
+
+### vertexAttributeMap
+
+• `get` **vertexAttributeMap**(): `Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Returns
+
+`Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Inherited from
+
+GeometryBase.vertexAttributeMap
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L81)
+
+___
+
+### geometryType
+
+• `get` **geometryType**(): [`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Returns
+
+[`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L85)
+
+• `set` **geometryType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryVertexType`](../enums/GeometryVertexType.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L88)
+
+___
+
+### bounds
+
+• `get` **bounds**(): `BoundingBox`
+
+#### Returns
+
+`BoundingBox`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L92)
+
+• `set` **bounds**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BoundingBox` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L135)
+
+## Methods
+
+### build
+
+▸ **build**(`shape`, `isShapeClosed`, `path`, `vScale?`, `uNegate?`): `this`
+
+for the points of start and end:
+Please ensure that you do not actively clone the starting point to the end of the shape array;
+closed: true.
+ if you want them closed, it'll auto clone start point.
+closed: false.
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `shape` | [`Vector3`](Vector3.md)[] | `undefined` |
+| `isShapeClosed` | `boolean` | `undefined` |
+| `path` | [`Vector3`](Vector3.md)[] | `undefined` |
+| `vScale` | `number` | `1.0` |
+| `uNegate` | `boolean` | `true` |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/core/geometry/ExtrudeGeometry.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/ExtrudeGeometry.ts#L34)
+
+___
+
+### addSubGeometry
+
+▸ **addSubGeometry**(`...lodLevels`): [`SubGeometry`](SubGeometry.md)
+
+add subGeometry from lod level
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `...lodLevels` | [`LODDescriptor`](../types/LODDescriptor.md)[] |
+
+#### Returns
+
+[`SubGeometry`](SubGeometry.md)
+
+**`See`**
+
+LODDescriptor
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[addSubGeometry](GeometryBase.md#addsubgeometry)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L144)
+
+___
+
+### generate
+
+▸ **generate**(`shaderReflection`): `void`
+
+create geometry by shaderReflection
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `shaderReflection` | `ShaderReflection` | ShaderReflection |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[generate](GeometryBase.md#generate)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L155)
+
+___
+
+### setIndices
+
+▸ **setIndices**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setIndices](GeometryBase.md#setindices)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L165)
+
+___
+
+### setAttribute
+
+▸ **setAttribute**(`attribute`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setAttribute](GeometryBase.md#setattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L177)
+
+___
+
+### getAttribute
+
+▸ **getAttribute**(`attribute`): [`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+[`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[getAttribute](GeometryBase.md#getattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L190)
+
+___
+
+### hasAttribute
+
+▸ **hasAttribute**(`attribute`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[hasAttribute](GeometryBase.md#hasattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L194)
+
+___
+
+### genWireframe
+
+▸ **genWireframe**(): [`Vector3`](Vector3.md)[]
+
+#### Returns
+
+[`Vector3`](Vector3.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[genWireframe](GeometryBase.md#genwireframe)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L198)
+
+___
+
+### compute
+
+▸ **compute**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[compute](GeometryBase.md#compute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L251)
+
+___
+
+### computeNormals
+
+▸ **computeNormals**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[computeNormals](GeometryBase.md#computenormals)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:270](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L270)
+
+___
+
+### isPrimitive
+
+▸ **isPrimitive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[isPrimitive](GeometryBase.md#isprimitive)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L312)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[destroy](GeometryBase.md#destroy)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:316](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L316)
diff --git a/docs/api/classes/FXAAPost.md b/docs/api/classes/FXAAPost.md
new file mode 100644
index 00000000..ed5dfbd2
--- /dev/null
+++ b/docs/api/classes/FXAAPost.md
@@ -0,0 +1,136 @@
+# Class: FXAAPost
+
+FXAA(fast approximate antialiasing)
+A deformation anti-aliasing method that pays more attention to performance.
+It only needs one pass to get the result. FXAA focuses on fast visual anti-aliasing effect,
+rather than pursuing perfect real anti-aliasing effect.
+
+## Hierarchy
+
+- `PostBase`
+
+ ↳ **`FXAAPost`**
+
+### Constructors
+
+- [constructor](FXAAPost.md#constructor)
+
+### Properties
+
+- [postQuad](FXAAPost.md#postquad)
+- [renderTexture](FXAAPost.md#rendertexture)
+- [enable](FXAAPost.md#enable)
+- [postRenderer](FXAAPost.md#postrenderer)
+
+### Methods
+
+- [onResize](FXAAPost.md#onresize)
+- [destroy](FXAAPost.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new FXAAPost**(): [`FXAAPost`](FXAAPost.md)
+
+#### Returns
+
+[`FXAAPost`](FXAAPost.md)
+
+#### Overrides
+
+PostBase.constructor
+
+#### Defined in
+
+[src/gfx/renderJob/post/FXAAPost.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/FXAAPost.ts#L22)
+
+## Properties
+
+### postQuad
+
+• **postQuad**: `ViewQuad`
+
+#### Defined in
+
+[src/gfx/renderJob/post/FXAAPost.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/FXAAPost.ts#L19)
+
+___
+
+### renderTexture
+
+• **renderTexture**: `RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/post/FXAAPost.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/FXAAPost.ts#L21)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+PostBase.enable
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L20)
+
+___
+
+### postRenderer
+
+• **postRenderer**: `PostRenderer`
+
+#### Inherited from
+
+PostBase.postRenderer
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L21)
+
+## Methods
+
+### onResize
+
+▸ **onResize**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.onResize
+
+#### Defined in
+
+[src/gfx/renderJob/post/FXAAPost.ts:33](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/FXAAPost.ts#L33)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PostBase.destroy
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L87)
diff --git a/docs/api/classes/FeatureTable.md b/docs/api/classes/FeatureTable.md
new file mode 100644
index 00000000..40a68244
--- /dev/null
+++ b/docs/api/classes/FeatureTable.md
@@ -0,0 +1,76 @@
+# Class: FeatureTable
+
+## Hierarchy
+
+- **`FeatureTable`**
+
+ ↳ [`BatchTable`](BatchTable.md)
+
+### Constructors
+
+- [constructor](FeatureTable.md#constructor)
+
+### Methods
+
+- [getKeys](FeatureTable.md#getkeys)
+- [getData](FeatureTable.md#getdata)
+
+## Constructors
+
+### constructor
+
+• **new FeatureTable**(`buffer`, `start`, `headerLength`, `binLength`): [`FeatureTable`](FeatureTable.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `any` |
+| `start` | `any` |
+| `headerLength` | `any` |
+| `binLength` | `any` |
+
+#### Returns
+
+[`FeatureTable`](FeatureTable.md)
+
+#### Defined in
+
+[src/loader/parser/b3dm/FeatureTable.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/b3dm/FeatureTable.ts#L9)
+
+## Methods
+
+### getKeys
+
+▸ **getKeys**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/loader/parser/b3dm/FeatureTable.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/b3dm/FeatureTable.ts#L30)
+
+___
+
+### getData
+
+▸ **getData**(`key`, `count?`, `defaultComponentType?`, `defaultType?`): `any`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `key` | `any` | `undefined` |
+| `count?` | `any` | `undefined` |
+| `defaultComponentType` | `any` | `null` |
+| `defaultType` | `any` | `null` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/loader/parser/b3dm/FeatureTable.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/b3dm/FeatureTable.ts#L36)
diff --git a/docs/api/classes/FlyCameraController.md b/docs/api/classes/FlyCameraController.md
new file mode 100644
index 00000000..ecf2545b
--- /dev/null
+++ b/docs/api/classes/FlyCameraController.md
@@ -0,0 +1,698 @@
+# Class: FlyCameraController
+
+Free camera controller.
+Move forward, backward, left, and right in the direction of W A S D.
+Control the camera's movement direction by holding down the left mouse button
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`FlyCameraController`**
+
+### Constructors
+
+- [constructor](FlyCameraController.md#constructor)
+
+### Properties
+
+- [object3D](FlyCameraController.md#object3d)
+- [isDestroyed](FlyCameraController.md#isdestroyed)
+- [moveSpeed](FlyCameraController.md#movespeed)
+- [targetPos](FlyCameraController.md#targetpos)
+- [lookAtPos](FlyCameraController.md#lookatpos)
+
+### Accessors
+
+- [eventDispatcher](FlyCameraController.md#eventdispatcher)
+- [isStart](FlyCameraController.md#isstart)
+- [transform](FlyCameraController.md#transform)
+- [enable](FlyCameraController.md#enable)
+- [factory](FlyCameraController.md#factory)
+- [mouseFactory](FlyCameraController.md#mousefactory)
+
+### Methods
+
+- [init](FlyCameraController.md#init)
+- [stop](FlyCameraController.md#stop)
+- [onEnable](FlyCameraController.md#onenable)
+- [onDisable](FlyCameraController.md#ondisable)
+- [onLateUpdate](FlyCameraController.md#onlateupdate)
+- [onBeforeUpdate](FlyCameraController.md#onbeforeupdate)
+- [onCompute](FlyCameraController.md#oncompute)
+- [onGraphic](FlyCameraController.md#ongraphic)
+- [onParentChange](FlyCameraController.md#onparentchange)
+- [onAddChild](FlyCameraController.md#onaddchild)
+- [onRemoveChild](FlyCameraController.md#onremovechild)
+- [cloneTo](FlyCameraController.md#cloneto)
+- [copyComponent](FlyCameraController.md#copycomponent)
+- [beforeDestroy](FlyCameraController.md#beforedestroy)
+- [setCamera](FlyCameraController.md#setcamera)
+- [onUpdate](FlyCameraController.md#onupdate)
+
+## Constructors
+
+### constructor
+
+• **new FlyCameraController**(): [`FlyCameraController`](FlyCameraController.md)
+
+#### Returns
+
+[`FlyCameraController`](FlyCameraController.md)
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+#### Defined in
+
+[src/components/controller/FlyCameraController.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/FlyCameraController.ts#L54)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### moveSpeed
+
+• **moveSpeed**: `number` = `2`
+
+Camera movement speed
+
+#### Defined in
+
+[src/components/controller/FlyCameraController.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/FlyCameraController.ts#L20)
+
+___
+
+### targetPos
+
+• **targetPos**: [`Vector3`](Vector3.md)
+
+Coordinates of specific objects
+
+#### Defined in
+
+[src/components/controller/FlyCameraController.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/FlyCameraController.ts#L25)
+
+___
+
+### lookAtPos
+
+• **lookAtPos**: [`Vector3`](Vector3.md)
+
+Camera orientation coordinates
+
+#### Defined in
+
+[src/components/controller/FlyCameraController.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/FlyCameraController.ts#L30)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### factory
+
+• `get` **factory**(): `number`
+
+Get the smoothness of the camera by keyboard control
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/controller/FlyCameraController.ts:176](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/FlyCameraController.ts#L176)
+
+• `set` **factory**(`value`): `void`
+
+Set the smoothness of the camera by keyboard control
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/controller/FlyCameraController.ts:184](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/FlyCameraController.ts#L184)
+
+___
+
+### mouseFactory
+
+• `get` **mouseFactory**(): `number`
+
+Get the smoothness of the camera by mouse control
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/controller/FlyCameraController.ts:192](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/FlyCameraController.ts#L192)
+
+• `set` **mouseFactory**(`value`): `void`
+
+Set the smoothness of the camera by mouse control
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/controller/FlyCameraController.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/FlyCameraController.ts#L200)
+
+## Methods
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[init](ComponentBase.md#init)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onEnable](ComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onDisable](ComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### setCamera
+
+▸ **setCamera**(`cameraPos`, `lookAt`): `void`
+
+Initialize camera data
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `cameraPos` | [`Vector3`](Vector3.md) | source position |
+| `lookAt` | [`Vector3`](Vector3.md) | target position |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/controller/FlyCameraController.ts:74](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/FlyCameraController.ts#L74)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[onUpdate](ComponentBase.md#onupdate)
+
+#### Defined in
+
+[src/components/controller/FlyCameraController.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/FlyCameraController.ts#L215)
diff --git a/docs/api/classes/FontChar.md b/docs/api/classes/FontChar.md
new file mode 100644
index 00000000..4efbde9c
--- /dev/null
+++ b/docs/api/classes/FontChar.md
@@ -0,0 +1,128 @@
+# Class: FontChar
+
+### Constructors
+
+- [constructor](FontChar.md#constructor)
+
+### Properties
+
+- [id](FontChar.md#id)
+- [x](FontChar.md#x)
+- [y](FontChar.md#y)
+- [width](FontChar.md#width)
+- [height](FontChar.md#height)
+- [xoffset](FontChar.md#xoffset)
+- [yoffset](FontChar.md#yoffset)
+- [xadvance](FontChar.md#xadvance)
+- [page](FontChar.md#page)
+- [chnl](FontChar.md#chnl)
+
+## Constructors
+
+### constructor
+
+• **new FontChar**(): [`FontChar`](FontChar.md)
+
+#### Returns
+
+[`FontChar`](FontChar.md)
+
+## Properties
+
+### id
+
+• **id**: `number` = `-1`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L40)
+
+___
+
+### x
+
+• **x**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L41)
+
+___
+
+### y
+
+• **y**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L42)
+
+___
+
+### width
+
+• **width**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L43)
+
+___
+
+### height
+
+• **height**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L44)
+
+___
+
+### xoffset
+
+• **xoffset**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L45)
+
+___
+
+### yoffset
+
+• **yoffset**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L46)
+
+___
+
+### xadvance
+
+• **xadvance**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L47)
+
+___
+
+### page
+
+• **page**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L48)
+
+___
+
+### chnl
+
+• **chnl**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L49)
diff --git a/docs/api/classes/FontInfo.md b/docs/api/classes/FontInfo.md
new file mode 100644
index 00000000..64d819bd
--- /dev/null
+++ b/docs/api/classes/FontInfo.md
@@ -0,0 +1,246 @@
+# Class: FontInfo
+
+### Constructors
+
+- [constructor](FontInfo.md#constructor)
+
+### Properties
+
+- [face](FontInfo.md#face)
+- [size](FontInfo.md#size)
+- [bold](FontInfo.md#bold)
+- [italic](FontInfo.md#italic)
+- [stretchH](FontInfo.md#stretchh)
+- [spacing](FontInfo.md#spacing)
+- [outline](FontInfo.md#outline)
+- [lineHeight](FontInfo.md#lineheight)
+- [base](FontInfo.md#base)
+- [scaleW](FontInfo.md#scalew)
+- [scaleH](FontInfo.md#scaleh)
+- [pages](FontInfo.md#pages)
+- [packed](FontInfo.md#packed)
+- [alphaChnl](FontInfo.md#alphachnl)
+- [redChnl](FontInfo.md#redchnl)
+- [greenChnl](FontInfo.md#greenchnl)
+- [blueChnl](FontInfo.md#bluechnl)
+- [count](FontInfo.md#count)
+- [fontPage](FontInfo.md#fontpage)
+- [fontChar](FontInfo.md#fontchar)
+
+## Constructors
+
+### constructor
+
+• **new FontInfo**(): [`FontInfo`](FontInfo.md)
+
+#### Returns
+
+[`FontInfo`](FontInfo.md)
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L31)
+
+## Properties
+
+### face
+
+• **face**: `string` = `''`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L9)
+
+___
+
+### size
+
+• **size**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L10)
+
+___
+
+### bold
+
+• **bold**: `boolean` = `false`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L11)
+
+___
+
+### italic
+
+• **italic**: `boolean` = `false`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L12)
+
+___
+
+### stretchH
+
+• **stretchH**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L13)
+
+___
+
+### spacing
+
+• **spacing**: `string` = `''`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L14)
+
+___
+
+### outline
+
+• **outline**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L15)
+
+___
+
+### lineHeight
+
+• **lineHeight**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L16)
+
+___
+
+### base
+
+• **base**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L17)
+
+___
+
+### scaleW
+
+• **scaleW**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L18)
+
+___
+
+### scaleH
+
+• **scaleH**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L19)
+
+___
+
+### pages
+
+• **pages**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L20)
+
+___
+
+### packed
+
+• **packed**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L21)
+
+___
+
+### alphaChnl
+
+• **alphaChnl**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L22)
+
+___
+
+### redChnl
+
+• **redChnl**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L23)
+
+___
+
+### greenChnl
+
+• **greenChnl**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L24)
+
+___
+
+### blueChnl
+
+• **blueChnl**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L25)
+
+___
+
+### count
+
+• **count**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L26)
+
+___
+
+### fontPage
+
+• **fontPage**: [`FontPage`](FontPage.md)[] = `[]`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L28)
+
+___
+
+### fontChar
+
+• **fontChar**: `Object` = `{}`
+
+#### Index signature
+
+▪ [key: `string`]: [`FontChar`](FontChar.md)
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L29)
diff --git a/docs/api/classes/FontPage.md b/docs/api/classes/FontPage.md
new file mode 100644
index 00000000..ef1be613
--- /dev/null
+++ b/docs/api/classes/FontPage.md
@@ -0,0 +1,40 @@
+# Class: FontPage
+
+### Constructors
+
+- [constructor](FontPage.md#constructor)
+
+### Properties
+
+- [id](FontPage.md#id)
+- [file](FontPage.md#file)
+
+## Constructors
+
+### constructor
+
+• **new FontPage**(): [`FontPage`](FontPage.md)
+
+#### Returns
+
+[`FontPage`](FontPage.md)
+
+## Properties
+
+### id
+
+• **id**: `number` = `0`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L35)
+
+___
+
+### file
+
+• **file**: `string` = `''`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L36)
diff --git a/docs/api/classes/FontParser.md b/docs/api/classes/FontParser.md
new file mode 100644
index 00000000..3508f017
--- /dev/null
+++ b/docs/api/classes/FontParser.md
@@ -0,0 +1,289 @@
+# Class: FontParser
+
+## Hierarchy
+
+- `ParserBase`
+
+ ↳ **`FontParser`**
+
+### Constructors
+
+- [constructor](FontParser.md#constructor)
+
+### Properties
+
+- [format](FontParser.md#format)
+- [baseUrl](FontParser.md#baseurl)
+- [initUrl](FontParser.md#initurl)
+- [loaderFunctions](FontParser.md#loaderfunctions)
+- [userData](FontParser.md#userdata)
+- [data](FontParser.md#data)
+
+### Methods
+
+- [parseSprite](FontParser.md#parsesprite)
+- [verification](FontParser.md#verification)
+- [parseString](FontParser.md#parsestring)
+- [parseJson](FontParser.md#parsejson)
+- [parseBuffer](FontParser.md#parsebuffer)
+- [parseTexture](FontParser.md#parsetexture)
+- [parse](FontParser.md#parse)
+
+## Constructors
+
+### constructor
+
+• **new FontParser**(): [`FontParser`](FontParser.md)
+
+#### Returns
+
+[`FontParser`](FontParser.md)
+
+#### Inherited from
+
+ParserBase.constructor
+
+## Properties
+
+### format
+
+▪ `Static` **format**: [`ParserFormat`](../enums/ParserFormat.md) = `ParserFormat.TEXT`
+
+#### Overrides
+
+ParserBase.format
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L53)
+
+___
+
+### baseUrl
+
+• **baseUrl**: `string`
+
+#### Inherited from
+
+ParserBase.baseUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L11)
+
+___
+
+### initUrl
+
+• **initUrl**: `string`
+
+#### Inherited from
+
+ParserBase.initUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L12)
+
+___
+
+### loaderFunctions
+
+• `Optional` **loaderFunctions**: [`LoaderFunctions`](../types/LoaderFunctions.md)
+
+#### Inherited from
+
+ParserBase.loaderFunctions
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L13)
+
+___
+
+### userData
+
+• `Optional` **userData**: `any`
+
+#### Inherited from
+
+ParserBase.userData
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L14)
+
+___
+
+### data
+
+• **data**: `any`
+
+#### Inherited from
+
+ParserBase.data
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L15)
+
+## Methods
+
+### parseSprite
+
+▸ **parseSprite**(`guiTexture`, `fontData`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `guiTexture` | `GUITexture`[] |
+| `fontData` | [`FontInfo`](FontInfo.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L55)
+
+___
+
+### verification
+
+▸ **verification**(): `boolean`
+
+Verify parsing validity
+
+#### Returns
+
+`boolean`
+
+#### Overrides
+
+ParserBase.verification
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L80)
+
+___
+
+### parseString
+
+▸ **parseString**(`data`): `Promise`\<`void`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `string` |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Overrides
+
+ParserBase.parseString
+
+#### Defined in
+
+[src/loader/parser/FontParser.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/FontParser.ts#L87)
+
+___
+
+### parseJson
+
+▸ **parseJson**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `object` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseJson
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L19)
+
+___
+
+### parseBuffer
+
+▸ **parseBuffer**(`buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseBuffer
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L21)
+
+___
+
+### parseTexture
+
+▸ **parseTexture**(`buffer`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+ParserBase.parseTexture
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L23)
+
+___
+
+### parse
+
+▸ **parse**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parse
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L27)
diff --git a/docs/api/classes/ForwardRenderJob.md b/docs/api/classes/ForwardRenderJob.md
new file mode 100644
index 00000000..c4a70c50
--- /dev/null
+++ b/docs/api/classes/ForwardRenderJob.md
@@ -0,0 +1,295 @@
+# Class: ForwardRenderJob
+
+Forward+
+Every time a forward rendering is performed,
+the entity of the object is rendered, and
+the color and depth buffer values are calculated.
+The depth buffer will determine whether a tile is visible.
+If visible, the values in the color buffer will be updated.
+
+## Hierarchy
+
+- `RendererJob`
+
+ ↳ **`ForwardRenderJob`**
+
+### Constructors
+
+- [constructor](ForwardRenderJob.md#constructor)
+
+### Properties
+
+- [pickFire](ForwardRenderJob.md#pickfire)
+- [renderState](ForwardRenderJob.md#renderstate)
+
+### Accessors
+
+- [view](ForwardRenderJob.md#view)
+
+### Methods
+
+- [start](ForwardRenderJob.md#start)
+- [addRenderer](ForwardRenderJob.md#addrenderer)
+- [stop](ForwardRenderJob.md#stop)
+- [pause](ForwardRenderJob.md#pause)
+- [resume](ForwardRenderJob.md#resume)
+- [addPost](ForwardRenderJob.md#addpost)
+- [removePost](ForwardRenderJob.md#removepost)
+- [renderFrame](ForwardRenderJob.md#renderframe)
+
+## Constructors
+
+### constructor
+
+• **new ForwardRenderJob**(`view`): [`ForwardRenderJob`](ForwardRenderJob.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+
+#### Returns
+
+[`ForwardRenderJob`](ForwardRenderJob.md)
+
+#### Overrides
+
+RendererJob.constructor
+
+#### Defined in
+
+[src/gfx/renderJob/jobs/ForwardRenderJob.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/jobs/ForwardRenderJob.ts#L23)
+
+## Properties
+
+### pickFire
+
+• **pickFire**: [`PickFire`](PickFire.md)
+
+#### Inherited from
+
+RendererJob.pickFire
+
+#### Defined in
+
+[src/gfx/renderJob/jobs/RendererJob.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/jobs/RendererJob.ts#L88)
+
+___
+
+### renderState
+
+• **renderState**: `boolean` = `false`
+
+#### Inherited from
+
+RendererJob.renderState
+
+#### Defined in
+
+[src/gfx/renderJob/jobs/RendererJob.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/jobs/RendererJob.ts#L89)
+
+## Accessors
+
+### view
+
+• `set` **view**(`view`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RendererJob.view
+
+#### Defined in
+
+[src/gfx/renderJob/jobs/RendererJob.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/jobs/RendererJob.ts#L136)
+
+## Methods
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RendererJob.start
+
+#### Defined in
+
+[src/gfx/renderJob/jobs/ForwardRenderJob.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/jobs/ForwardRenderJob.ts#L27)
+
+___
+
+### addRenderer
+
+▸ **addRenderer**\<`T`\>(`c`, `param?`): `T`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `RendererBase` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> |
+| `param?` | `any` |
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+RendererJob.addRenderer
+
+#### Defined in
+
+[src/gfx/renderJob/jobs/RendererJob.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/jobs/RendererJob.ts#L118)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+stop render task
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RendererJob.stop
+
+#### Defined in
+
+[src/gfx/renderJob/jobs/RendererJob.ts:154](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/jobs/RendererJob.ts#L154)
+
+___
+
+### pause
+
+▸ **pause**(): `void`
+
+pause render task
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RendererJob.pause
+
+#### Defined in
+
+[src/gfx/renderJob/jobs/RendererJob.ts:159](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/jobs/RendererJob.ts#L159)
+
+___
+
+### resume
+
+▸ **resume**(): `void`
+
+back render task
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RendererJob.resume
+
+#### Defined in
+
+[src/gfx/renderJob/jobs/RendererJob.ts:166](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/jobs/RendererJob.ts#L166)
+
+___
+
+### addPost
+
+▸ **addPost**(`post`): `PostBase` \| `PostBase`[]
+
+Add a post processing special effects task
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `post` | `PostBase` |
+
+#### Returns
+
+`PostBase` \| `PostBase`[]
+
+#### Inherited from
+
+RendererJob.addPost
+
+#### Defined in
+
+[src/gfx/renderJob/jobs/RendererJob.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/jobs/RendererJob.ts#L174)
+
+___
+
+### removePost
+
+▸ **removePost**(`post`): `void`
+
+Remove specified post-processing effects
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `post` | `PostBase` \| `PostBase`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RendererJob.removePost
+
+#### Defined in
+
+[src/gfx/renderJob/jobs/RendererJob.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/jobs/RendererJob.ts#L191)
+
+___
+
+### renderFrame
+
+▸ **renderFrame**(): `void`
+
+To render a frame of the scene
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RendererJob.renderFrame
+
+#### Defined in
+
+[src/gfx/renderJob/jobs/RendererJob.ts:204](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/jobs/RendererJob.ts#L204)
diff --git a/docs/api/classes/FrustumCSM.md b/docs/api/classes/FrustumCSM.md
new file mode 100644
index 00000000..0d352447
--- /dev/null
+++ b/docs/api/classes/FrustumCSM.md
@@ -0,0 +1,89 @@
+# Class: FrustumCSM
+
+### Constructors
+
+- [constructor](FrustumCSM.md#constructor)
+
+### Properties
+
+- [sections](FrustumCSM.md#sections)
+- [children](FrustumCSM.md#children)
+- [name](FrustumCSM.md#name)
+
+### Methods
+
+- [update](FrustumCSM.md#update)
+
+## Constructors
+
+### constructor
+
+• **new FrustumCSM**(`blockCount`): [`FrustumCSM`](FrustumCSM.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `blockCount` | `number` |
+
+#### Returns
+
+[`FrustumCSM`](FrustumCSM.md)
+
+#### Defined in
+
+[src/core/csm/FrustumCSM.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/core/csm/FrustumCSM.ts#L79)
+
+## Properties
+
+### sections
+
+• **sections**: `FrustumSection`[]
+
+#### Defined in
+
+[src/core/csm/FrustumCSM.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/core/csm/FrustumCSM.ts#L75)
+
+___
+
+### children
+
+• **children**: `FrustumChild`[]
+
+#### Defined in
+
+[src/core/csm/FrustumCSM.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/core/csm/FrustumCSM.ts#L76)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Defined in
+
+[src/core/csm/FrustumCSM.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/core/csm/FrustumCSM.ts#L77)
+
+## Methods
+
+### update
+
+▸ **update**(`p`, `pvInv`, `near`, `far`, `shadowSetting`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `p` | [`Matrix4`](Matrix4.md) |
+| `pvInv` | [`Matrix4`](Matrix4.md) |
+| `near` | `number` |
+| `far` | `number` |
+| `shadowSetting` | [`ShadowSetting`](../types/ShadowSetting.md) |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/core/csm/FrustumCSM.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/csm/FrustumCSM.ts#L92)
diff --git a/docs/api/classes/GBufferFrame.md b/docs/api/classes/GBufferFrame.md
new file mode 100644
index 00000000..08123562
--- /dev/null
+++ b/docs/api/classes/GBufferFrame.md
@@ -0,0 +1,374 @@
+# Class: GBufferFrame
+
+## Hierarchy
+
+- [`RTFrame`](RTFrame.md)
+
+ ↳ **`GBufferFrame`**
+
+### Constructors
+
+- [constructor](GBufferFrame.md#constructor)
+
+### Properties
+
+- [colorPass\_GBuffer](GBufferFrame.md#colorpass_gbuffer)
+- [reflections\_GBuffer](GBufferFrame.md#reflections_gbuffer)
+- [gui\_GBuffer](GBufferFrame.md#gui_gbuffer)
+- [gBufferMap](GBufferFrame.md#gbuffermap)
+- [label](GBufferFrame.md#label)
+- [customSize](GBufferFrame.md#customsize)
+- [renderTargets](GBufferFrame.md#rendertargets)
+- [rtDescriptors](GBufferFrame.md#rtdescriptors)
+- [zPreTexture](GBufferFrame.md#zpretexture)
+- [depthTexture](GBufferFrame.md#depthtexture)
+- [depthViewIndex](GBufferFrame.md#depthviewindex)
+- [depthCleanValue](GBufferFrame.md#depthcleanvalue)
+- [depthLoadOp](GBufferFrame.md#depthloadop)
+- [isOutTarget](GBufferFrame.md#isouttarget)
+
+### Methods
+
+- [createGBuffer](GBufferFrame.md#creategbuffer)
+- [getPositionMap](GBufferFrame.md#getpositionmap)
+- [getNormalMap](GBufferFrame.md#getnormalmap)
+- [getColorTexture](GBufferFrame.md#getcolortexture)
+- [getCompressGBufferTexture](GBufferFrame.md#getcompressgbuffertexture)
+- [getGUIBufferFrame](GBufferFrame.md#getguibufferframe)
+- [clone](GBufferFrame.md#clone)
+- [clone2Frame](GBufferFrame.md#clone2frame)
+
+## Constructors
+
+### constructor
+
+• **new GBufferFrame**(): [`GBufferFrame`](GBufferFrame.md)
+
+#### Returns
+
+[`GBufferFrame`](GBufferFrame.md)
+
+#### Overrides
+
+[RTFrame](RTFrame.md).[constructor](RTFrame.md#constructor)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrame.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrame.ts#L20)
+
+## Properties
+
+### colorPass\_GBuffer
+
+▪ `Static` **colorPass\_GBuffer**: `string` = `"ColorPassGBuffer"`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrame.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrame.ts#L11)
+
+___
+
+### reflections\_GBuffer
+
+▪ `Static` **reflections\_GBuffer**: `string` = `"reflections_GBuffer"`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrame.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrame.ts#L12)
+
+___
+
+### gui\_GBuffer
+
+▪ `Static` **gui\_GBuffer**: `string` = `"gui_GBuffer"`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrame.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrame.ts#L13)
+
+___
+
+### gBufferMap
+
+▪ `Static` **gBufferMap**: `Map`\<`string`, [`GBufferFrame`](GBufferFrame.md)\>
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrame.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrame.ts#L14)
+
+___
+
+### label
+
+• **label**: `string`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[label](RTFrame.md#label)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L5)
+
+___
+
+### customSize
+
+• **customSize**: `boolean` = `false`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[customSize](RTFrame.md#customsize)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L6)
+
+___
+
+### renderTargets
+
+• **renderTargets**: `RenderTexture`[]
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[renderTargets](RTFrame.md#rendertargets)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L7)
+
+___
+
+### rtDescriptors
+
+• **rtDescriptors**: [`RTDescriptor`](RTDescriptor.md)[]
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[rtDescriptors](RTFrame.md#rtdescriptors)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L8)
+
+___
+
+### zPreTexture
+
+• **zPreTexture**: `RenderTexture`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[zPreTexture](RTFrame.md#zpretexture)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L10)
+
+___
+
+### depthTexture
+
+• **depthTexture**: `RenderTexture`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[depthTexture](RTFrame.md#depthtexture)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L11)
+
+___
+
+### depthViewIndex
+
+• **depthViewIndex**: `number` = `0`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[depthViewIndex](RTFrame.md#depthviewindex)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L13)
+
+___
+
+### depthCleanValue
+
+• **depthCleanValue**: `number` = `1`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[depthCleanValue](RTFrame.md#depthcleanvalue)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L14)
+
+___
+
+### depthLoadOp
+
+• **depthLoadOp**: `GPULoadOp`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[depthLoadOp](RTFrame.md#depthloadop)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L15)
+
+___
+
+### isOutTarget
+
+• **isOutTarget**: `boolean` = `true`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[isOutTarget](RTFrame.md#isouttarget)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L16)
+
+## Methods
+
+### createGBuffer
+
+▸ **createGBuffer**(`key`, `rtWidth`, `rtHeight`, `autoResize?`, `outColor?`, `depthTexture?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `key` | `string` | `undefined` |
+| `rtWidth` | `number` | `undefined` |
+| `rtHeight` | `number` | `undefined` |
+| `autoResize` | `boolean` | `true` |
+| `outColor` | `boolean` | `true` |
+| `depthTexture?` | `RenderTexture` | `undefined` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrame.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrame.ts#L24)
+
+___
+
+### getPositionMap
+
+▸ **getPositionMap**(): `RenderTexture`
+
+#### Returns
+
+`RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrame.ts:51](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrame.ts#L51)
+
+___
+
+### getNormalMap
+
+▸ **getNormalMap**(): `RenderTexture`
+
+#### Returns
+
+`RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrame.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrame.ts#L55)
+
+___
+
+### getColorTexture
+
+▸ **getColorTexture**(): `RenderTexture`
+
+#### Returns
+
+`RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrame.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrame.ts#L59)
+
+___
+
+### getCompressGBufferTexture
+
+▸ **getCompressGBufferTexture**(): `RenderTexture`
+
+#### Returns
+
+`RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrame.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrame.ts#L63)
+
+___
+
+### getGUIBufferFrame
+
+▸ **getGUIBufferFrame**(): [`GBufferFrame`](GBufferFrame.md)
+
+#### Returns
+
+[`GBufferFrame`](GBufferFrame.md)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrame.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrame.ts#L92)
+
+___
+
+### clone
+
+▸ **clone**(): [`GBufferFrame`](GBufferFrame.md)
+
+#### Returns
+
+[`GBufferFrame`](GBufferFrame.md)
+
+#### Overrides
+
+[RTFrame](RTFrame.md).[clone](RTFrame.md#clone)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrame.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrame.ts#L98)
+
+___
+
+### clone2Frame
+
+▸ **clone2Frame**(`rtFrame`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rtFrame` | [`RTFrame`](RTFrame.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[clone2Frame](RTFrame.md#clone2frame)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L26)
diff --git a/docs/api/classes/GBufferFrameA.md b/docs/api/classes/GBufferFrameA.md
new file mode 100644
index 00000000..9d2dc437
--- /dev/null
+++ b/docs/api/classes/GBufferFrameA.md
@@ -0,0 +1,349 @@
+# Class: GBufferFrameA
+
+## Hierarchy
+
+- [`RTFrame`](RTFrame.md)
+
+ ↳ **`GBufferFrameA`**
+
+### Constructors
+
+- [constructor](GBufferFrameA.md#constructor)
+
+### Properties
+
+- [gBufferMap](GBufferFrameA.md#gbuffermap)
+- [bufferTexture](GBufferFrameA.md#buffertexture)
+- [label](GBufferFrameA.md#label)
+- [customSize](GBufferFrameA.md#customsize)
+- [renderTargets](GBufferFrameA.md#rendertargets)
+- [rtDescriptors](GBufferFrameA.md#rtdescriptors)
+- [zPreTexture](GBufferFrameA.md#zpretexture)
+- [depthTexture](GBufferFrameA.md#depthtexture)
+- [depthViewIndex](GBufferFrameA.md#depthviewindex)
+- [depthCleanValue](GBufferFrameA.md#depthcleanvalue)
+- [depthLoadOp](GBufferFrameA.md#depthloadop)
+- [isOutTarget](GBufferFrameA.md#isouttarget)
+
+### Methods
+
+- [crateGBuffer](GBufferFrameA.md#crategbuffer)
+- [getColorMap](GBufferFrameA.md#getcolormap)
+- [getPositionMap](GBufferFrameA.md#getpositionmap)
+- [getNormalMap](GBufferFrameA.md#getnormalmap)
+- [getMaterialMap](GBufferFrameA.md#getmaterialmap)
+- [getAlbedoMap](GBufferFrameA.md#getalbedomap)
+- [clone](GBufferFrameA.md#clone)
+- [clone2Frame](GBufferFrameA.md#clone2frame)
+
+## Constructors
+
+### constructor
+
+• **new GBufferFrameA**(): [`GBufferFrameA`](GBufferFrameA.md)
+
+#### Returns
+
+[`GBufferFrameA`](GBufferFrameA.md)
+
+#### Overrides
+
+[RTFrame](RTFrame.md).[constructor](RTFrame.md#constructor)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrameA.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrameA.ts#L14)
+
+## Properties
+
+### gBufferMap
+
+▪ `Static` **gBufferMap**: `Map`\<`string`, [`GBufferFrameA`](GBufferFrameA.md)\>
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrameA.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrameA.ts#L12)
+
+___
+
+### bufferTexture
+
+▪ `Static` **bufferTexture**: `boolean` = `false`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrameA.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrameA.ts#L13)
+
+___
+
+### label
+
+• **label**: `string`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[label](RTFrame.md#label)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L5)
+
+___
+
+### customSize
+
+• **customSize**: `boolean` = `false`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[customSize](RTFrame.md#customsize)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L6)
+
+___
+
+### renderTargets
+
+• **renderTargets**: `RenderTexture`[]
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[renderTargets](RTFrame.md#rendertargets)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L7)
+
+___
+
+### rtDescriptors
+
+• **rtDescriptors**: [`RTDescriptor`](RTDescriptor.md)[]
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[rtDescriptors](RTFrame.md#rtdescriptors)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L8)
+
+___
+
+### zPreTexture
+
+• **zPreTexture**: `RenderTexture`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[zPreTexture](RTFrame.md#zpretexture)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L10)
+
+___
+
+### depthTexture
+
+• **depthTexture**: `RenderTexture`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[depthTexture](RTFrame.md#depthtexture)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L11)
+
+___
+
+### depthViewIndex
+
+• **depthViewIndex**: `number` = `0`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[depthViewIndex](RTFrame.md#depthviewindex)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L13)
+
+___
+
+### depthCleanValue
+
+• **depthCleanValue**: `number` = `1`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[depthCleanValue](RTFrame.md#depthcleanvalue)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L14)
+
+___
+
+### depthLoadOp
+
+• **depthLoadOp**: `GPULoadOp`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[depthLoadOp](RTFrame.md#depthloadop)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L15)
+
+___
+
+### isOutTarget
+
+• **isOutTarget**: `boolean` = `true`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[isOutTarget](RTFrame.md#isouttarget)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L16)
+
+## Methods
+
+### crateGBuffer
+
+▸ **crateGBuffer**(`key`, `rtWidth`, `rtHeight`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+| `rtWidth` | `number` |
+| `rtHeight` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrameA.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrameA.ts#L18)
+
+___
+
+### getColorMap
+
+▸ **getColorMap**(): `RenderTexture`
+
+#### Returns
+
+`RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrameA.ts:74](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrameA.ts#L74)
+
+___
+
+### getPositionMap
+
+▸ **getPositionMap**(): `RenderTexture`
+
+#### Returns
+
+`RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrameA.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrameA.ts#L78)
+
+___
+
+### getNormalMap
+
+▸ **getNormalMap**(): `RenderTexture`
+
+#### Returns
+
+`RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrameA.ts:82](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrameA.ts#L82)
+
+___
+
+### getMaterialMap
+
+▸ **getMaterialMap**(): `RenderTexture`
+
+#### Returns
+
+`RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrameA.ts:86](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrameA.ts#L86)
+
+___
+
+### getAlbedoMap
+
+▸ **getAlbedoMap**(): `RenderTexture`
+
+#### Returns
+
+`RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrameA.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrameA.ts#L90)
+
+___
+
+### clone
+
+▸ **clone**(): [`GBufferFrameA`](GBufferFrameA.md)
+
+#### Returns
+
+[`GBufferFrameA`](GBufferFrameA.md)
+
+#### Overrides
+
+[RTFrame](RTFrame.md).[clone](RTFrame.md#clone)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/GBufferFrameA.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/GBufferFrameA.ts#L111)
+
+___
+
+### clone2Frame
+
+▸ **clone2Frame**(`rtFrame`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rtFrame` | [`RTFrame`](RTFrame.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[clone2Frame](RTFrame.md#clone2frame)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L26)
diff --git a/docs/api/classes/GBufferPost.md b/docs/api/classes/GBufferPost.md
new file mode 100644
index 00000000..ad00b95f
--- /dev/null
+++ b/docs/api/classes/GBufferPost.md
@@ -0,0 +1,356 @@
+# Class: GBufferPost
+
+Ground base Ambient Occlusion
+Let the intersection of the object and the object imitate the effect of the light being cross-occluded
+```
+gtao setting
+let cfg = {@link Engine3D.setting.render.postProcessing.gtao};
+```
+
+## Hierarchy
+
+- `PostBase`
+
+ ↳ **`GBufferPost`**
+
+### Constructors
+
+- [constructor](GBufferPost.md#constructor)
+
+### Properties
+
+- [rtFrame](GBufferPost.md#rtframe)
+- [view](GBufferPost.md#view)
+- [gBufferTexture](GBufferPost.md#gbuffertexture)
+- [testCompute](GBufferPost.md#testcompute)
+- [uniformBuffer](GBufferPost.md#uniformbuffer)
+- [currentRenderTexture](GBufferPost.md#currentrendertexture)
+- [enable](GBufferPost.md#enable)
+- [postRenderer](GBufferPost.md#postrenderer)
+
+### Accessors
+
+- [state](GBufferPost.md#state)
+- [size1](GBufferPost.md#size1)
+- [size2](GBufferPost.md#size2)
+
+### Methods
+
+- [onDetach](GBufferPost.md#ondetach)
+- [render](GBufferPost.md#render)
+- [compute](GBufferPost.md#compute)
+- [onResize](GBufferPost.md#onresize)
+- [destroy](GBufferPost.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new GBufferPost**(): [`GBufferPost`](GBufferPost.md)
+
+#### Returns
+
+[`GBufferPost`](GBufferPost.md)
+
+#### Overrides
+
+PostBase.constructor
+
+#### Defined in
+
+[src/gfx/renderJob/post/GBufferPost.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GBufferPost.ts#L55)
+
+## Properties
+
+### rtFrame
+
+• **rtFrame**: [`RTFrame`](RTFrame.md)
+
+#### Defined in
+
+[src/gfx/renderJob/post/GBufferPost.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GBufferPost.ts#L46)
+
+___
+
+### view
+
+• **view**: [`View3D`](View3D.md)
+
+#### Defined in
+
+[src/gfx/renderJob/post/GBufferPost.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GBufferPost.ts#L47)
+
+___
+
+### gBufferTexture
+
+• **gBufferTexture**: `RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GBufferPost.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GBufferPost.ts#L48)
+
+___
+
+### testCompute
+
+• **testCompute**: `ComputeShader`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GBufferPost.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GBufferPost.ts#L49)
+
+___
+
+### uniformBuffer
+
+• **uniformBuffer**: [`UniformGPUBuffer`](UniformGPUBuffer.md)
+
+#### Defined in
+
+[src/gfx/renderJob/post/GBufferPost.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GBufferPost.ts#L53)
+
+___
+
+### currentRenderTexture
+
+• **currentRenderTexture**: `RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GBufferPost.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GBufferPost.ts#L54)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+PostBase.enable
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L20)
+
+___
+
+### postRenderer
+
+• **postRenderer**: `PostRenderer`
+
+#### Inherited from
+
+PostBase.postRenderer
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L21)
+
+## Accessors
+
+### state
+
+• `get` **state**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GBufferPost.ts:82](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GBufferPost.ts#L82)
+
+• `set` **state**(`v`): `void`
+
+check state
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GBufferPost.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GBufferPost.ts#L76)
+
+___
+
+### size1
+
+• `get` **size1**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GBufferPost.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GBufferPost.ts#L92)
+
+• `set` **size1**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GBufferPost.ts:86](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GBufferPost.ts#L86)
+
+___
+
+### size2
+
+• `get` **size2**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GBufferPost.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GBufferPost.ts#L102)
+
+• `set` **size2**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GBufferPost.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GBufferPost.ts#L96)
+
+## Methods
+
+### onDetach
+
+▸ **onDetach**(`view`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.onDetach
+
+#### Defined in
+
+[src/gfx/renderJob/post/GBufferPost.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GBufferPost.ts#L69)
+
+___
+
+### render
+
+▸ **render**(`view`, `command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.render
+
+#### Defined in
+
+[src/gfx/renderJob/post/GBufferPost.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GBufferPost.ts#L153)
+
+___
+
+### compute
+
+▸ **compute**(`view`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.compute
+
+#### Defined in
+
+[src/gfx/renderJob/post/GBufferPost.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GBufferPost.ts#L157)
+
+___
+
+### onResize
+
+▸ **onResize**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.onResize
+
+#### Defined in
+
+[src/gfx/renderJob/post/GBufferPost.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GBufferPost.ts#L173)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PostBase.destroy
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L87)
diff --git a/docs/api/classes/GIProbeMaterial.md b/docs/api/classes/GIProbeMaterial.md
new file mode 100644
index 00000000..aec54e55
--- /dev/null
+++ b/docs/api/classes/GIProbeMaterial.md
@@ -0,0 +1,1094 @@
+# Class: GIProbeMaterial
+
+## Hierarchy
+
+- [`Material`](Material.md)
+
+ ↳ **`GIProbeMaterial`**
+
+### Constructors
+
+- [constructor](GIProbeMaterial.md#constructor)
+
+### Properties
+
+- [count](GIProbeMaterial.md#count)
+- [instanceID](GIProbeMaterial.md#instanceid)
+- [name](GIProbeMaterial.md#name)
+- [enable](GIProbeMaterial.md#enable)
+
+### Accessors
+
+- [shader](GIProbeMaterial.md#shader)
+- [doubleSide](GIProbeMaterial.md#doubleside)
+- [castShadow](GIProbeMaterial.md#castshadow)
+- [acceptShadow](GIProbeMaterial.md#acceptshadow)
+- [castReflection](GIProbeMaterial.md#castreflection)
+- [blendMode](GIProbeMaterial.md#blendmode)
+- [depthCompare](GIProbeMaterial.md#depthcompare)
+- [transparent](GIProbeMaterial.md#transparent)
+- [cullMode](GIProbeMaterial.md#cullmode)
+- [depthWriteEnabled](GIProbeMaterial.md#depthwriteenabled)
+- [useBillboard](GIProbeMaterial.md#usebillboard)
+
+### Methods
+
+- [getPass](GIProbeMaterial.md#getpass)
+- [getAllPass](GIProbeMaterial.md#getallpass)
+- [clone](GIProbeMaterial.md#clone)
+- [destroy](GIProbeMaterial.md#destroy)
+- [setDefine](GIProbeMaterial.md#setdefine)
+- [setTexture](GIProbeMaterial.md#settexture)
+- [setStorageBuffer](GIProbeMaterial.md#setstoragebuffer)
+- [setUniformBuffer](GIProbeMaterial.md#setuniformbuffer)
+- [setUniformFloat](GIProbeMaterial.md#setuniformfloat)
+- [setUniformVector2](GIProbeMaterial.md#setuniformvector2)
+- [setUniformVector3](GIProbeMaterial.md#setuniformvector3)
+- [setUniformVector4](GIProbeMaterial.md#setuniformvector4)
+- [setUniformColor](GIProbeMaterial.md#setuniformcolor)
+- [getUniformFloat](GIProbeMaterial.md#getuniformfloat)
+- [getUniformV2](GIProbeMaterial.md#getuniformv2)
+- [getUniformV3](GIProbeMaterial.md#getuniformv3)
+- [getUniformV4](GIProbeMaterial.md#getuniformv4)
+- [getUniformColor](GIProbeMaterial.md#getuniformcolor)
+- [getTexture](GIProbeMaterial.md#gettexture)
+- [getStorageBuffer](GIProbeMaterial.md#getstoragebuffer)
+- [getStructStorageBuffer](GIProbeMaterial.md#getstructstoragebuffer)
+- [getUniformBuffer](GIProbeMaterial.md#getuniformbuffer)
+- [applyUniform](GIProbeMaterial.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new GIProbeMaterial**(`type?`, `index?`): [`GIProbeMaterial`](GIProbeMaterial.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `type` | `GIProbeMaterialType` | `GIProbeMaterialType.CastGI` |
+| `index` | `number` | `0` |
+
+#### Returns
+
+[`GIProbeMaterial`](GIProbeMaterial.md)
+
+#### Overrides
+
+[Material](Material.md).[constructor](Material.md#constructor)
+
+#### Defined in
+
+[src/materials/GIProbeMaterial.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/materials/GIProbeMaterial.ts#L23)
+
+## Properties
+
+### count
+
+▪ `Static` **count**: `number` = `0`
+
+#### Defined in
+
+[src/materials/GIProbeMaterial.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/materials/GIProbeMaterial.ts#L21)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+Material Unique Identifier
+
+#### Inherited from
+
+[Material](Material.md).[instanceID](Material.md#instanceid)
+
+#### Defined in
+
+[src/materials/Material.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L19)
+
+___
+
+### name
+
+• **name**: `string`
+
+name of this material
+
+#### Inherited from
+
+[Material](Material.md).[name](Material.md#name)
+
+#### Defined in
+
+[src/materials/Material.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L25)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+[Material](Material.md).[enable](Material.md#enable)
+
+#### Defined in
+
+[src/materials/Material.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L27)
+
+## Accessors
+
+### shader
+
+• `get` **shader**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L41)
+
+• `set` **shader**(`shader`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shader` | [`Shader`](Shader.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L36)
+
+___
+
+### doubleSide
+
+• `get` **doubleSide**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L45)
+
+• `set` **doubleSide**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L49)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L53)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L57)
+
+___
+
+### acceptShadow
+
+• `get` **acceptShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L64)
+
+• `set` **acceptShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L68)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L77)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L81)
+
+___
+
+### blendMode
+
+• `get` **blendMode**(): [`BlendMode`](../enums/BlendMode.md)
+
+#### Returns
+
+[`BlendMode`](../enums/BlendMode.md)
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L85)
+
+• `set` **blendMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`BlendMode`](../enums/BlendMode.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L89)
+
+___
+
+### depthCompare
+
+• `get` **depthCompare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L93)
+
+• `set` **depthCompare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L97)
+
+___
+
+### transparent
+
+• `get` **transparent**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L102)
+
+• `set` **transparent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L106)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L113)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L117)
+
+___
+
+### depthWriteEnabled
+
+• `get` **depthWriteEnabled**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L128)
+
+• `set` **depthWriteEnabled**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L132)
+
+___
+
+### useBillboard
+
+• `set` **useBillboard**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.useBillboard
+
+#### Defined in
+
+[src/materials/Material.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L136)
+
+## Methods
+
+### getPass
+
+▸ **getPass**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get render pass by renderType
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getPass](Material.md#getpass)
+
+#### Defined in
+
+[src/materials/Material.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L145)
+
+___
+
+### getAllPass
+
+▸ **getAllPass**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get all color render pass
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getAllPass](Material.md#getallpass)
+
+#### Defined in
+
+[src/materials/Material.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L153)
+
+___
+
+### clone
+
+▸ **clone**(): [`Material`](Material.md)
+
+clone one material
+
+#### Returns
+
+[`Material`](Material.md)
+
+Material
+
+#### Inherited from
+
+[Material](Material.md).[clone](Material.md#clone)
+
+#### Defined in
+
+[src/materials/Material.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L161)
+
+___
+
+### destroy
+
+▸ **destroy**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[destroy](Material.md#destroy)
+
+#### Defined in
+
+[src/materials/Material.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L168)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`define`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `define` | `string` |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setDefine](Material.md#setdefine)
+
+#### Defined in
+
+[src/materials/Material.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L174)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`propertyName`, `texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setTexture](Material.md#settexture)
+
+#### Defined in
+
+[src/materials/Material.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L178)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setStorageBuffer](Material.md#setstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L182)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformBuffer](Material.md#setuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L186)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformFloat](Material.md#setuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L191)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector2](Material.md#setuniformvector2)
+
+#### Defined in
+
+[src/materials/Material.ts:195](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L195)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector3](Material.md#setuniformvector3)
+
+#### Defined in
+
+[src/materials/Material.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L199)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector4](Material.md#setuniformvector4)
+
+#### Defined in
+
+[src/materials/Material.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L203)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformColor](Material.md#setuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L207)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`str`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformFloat](Material.md#getuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L211)
+
+___
+
+### getUniformV2
+
+▸ **getUniformV2**(`str`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV2](Material.md#getuniformv2)
+
+#### Defined in
+
+[src/materials/Material.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L215)
+
+___
+
+### getUniformV3
+
+▸ **getUniformV3**(`str`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV3](Material.md#getuniformv3)
+
+#### Defined in
+
+[src/materials/Material.ts:219](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L219)
+
+___
+
+### getUniformV4
+
+▸ **getUniformV4**(`str`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV4](Material.md#getuniformv4)
+
+#### Defined in
+
+[src/materials/Material.ts:223](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L223)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`str`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformColor](Material.md#getuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L227)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`str`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Material](Material.md).[getTexture](Material.md#gettexture)
+
+#### Defined in
+
+[src/materials/Material.ts:231](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L231)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`str`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Material](Material.md).[getStorageBuffer](Material.md#getstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:235](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L235)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getStructStorageBuffer](Material.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:239](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L239)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformBuffer](Material.md#getuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:243](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L243)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[applyUniform](Material.md#applyuniform)
+
+#### Defined in
+
+[src/materials/Material.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L247)
diff --git a/docs/api/classes/GLTFBinaryExtension.md b/docs/api/classes/GLTFBinaryExtension.md
new file mode 100644
index 00000000..e9786777
--- /dev/null
+++ b/docs/api/classes/GLTFBinaryExtension.md
@@ -0,0 +1,80 @@
+# Class: GLTFBinaryExtension
+
+### Constructors
+
+- [constructor](GLTFBinaryExtension.md#constructor)
+
+### Properties
+
+- [name](GLTFBinaryExtension.md#name)
+- [content](GLTFBinaryExtension.md#content)
+- [body](GLTFBinaryExtension.md#body)
+- [header](GLTFBinaryExtension.md#header)
+
+## Constructors
+
+### constructor
+
+• **new GLTFBinaryExtension**(`data`): [`GLTFBinaryExtension`](GLTFBinaryExtension.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `ArrayBuffer` |
+
+#### Returns
+
+[`GLTFBinaryExtension`](GLTFBinaryExtension.md)
+
+#### Defined in
+
+[src/loader/parser/B3DMParser.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/B3DMParser.ts#L58)
+
+## Properties
+
+### name
+
+• **name**: `string`
+
+#### Defined in
+
+[src/loader/parser/B3DMParser.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/B3DMParser.ts#L53)
+
+___
+
+### content
+
+• **content**: `string`
+
+#### Defined in
+
+[src/loader/parser/B3DMParser.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/B3DMParser.ts#L54)
+
+___
+
+### body
+
+• **body**: `ArrayBuffer`
+
+#### Defined in
+
+[src/loader/parser/B3DMParser.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/B3DMParser.ts#L55)
+
+___
+
+### header
+
+• **header**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `magic` | `string` |
+| `length` | `number` |
+| `version` | `number` |
+
+#### Defined in
+
+[src/loader/parser/B3DMParser.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/B3DMParser.ts#L56)
diff --git a/docs/api/classes/GLTFMaterial.md b/docs/api/classes/GLTFMaterial.md
new file mode 100644
index 00000000..42c47c34
--- /dev/null
+++ b/docs/api/classes/GLTFMaterial.md
@@ -0,0 +1,249 @@
+# Class: GLTFMaterial
+
+### Constructors
+
+- [constructor](GLTFMaterial.md#constructor)
+
+### Properties
+
+- [name](GLTFMaterial.md#name)
+- [defines](GLTFMaterial.md#defines)
+- [doubleSided](GLTFMaterial.md#doublesided)
+- [baseColorFactor](GLTFMaterial.md#basecolorfactor)
+- [emissiveFactor](GLTFMaterial.md#emissivefactor)
+- [metallicFactor](GLTFMaterial.md#metallicfactor)
+- [roughnessFactor](GLTFMaterial.md#roughnessfactor)
+- [alphaCutoff](GLTFMaterial.md#alphacutoff)
+- [enableBlend](GLTFMaterial.md#enableblend)
+- [baseColorTexture](GLTFMaterial.md#basecolortexture)
+- [metallicRoughnessTexture](GLTFMaterial.md#metallicroughnesstexture)
+- [normalTexture](GLTFMaterial.md#normaltexture)
+- [occlusionTexture](GLTFMaterial.md#occlusiontexture)
+- [emissiveTexture](GLTFMaterial.md#emissivetexture)
+- [extensions](GLTFMaterial.md#extensions)
+- [baseMapOffsetSize](GLTFMaterial.md#basemapoffsetsize)
+- [normalMapOffsetSize](GLTFMaterial.md#normalmapoffsetsize)
+- [emissiveMapOffsetSize](GLTFMaterial.md#emissivemapoffsetsize)
+- [roughnessMapOffsetSize](GLTFMaterial.md#roughnessmapoffsetsize)
+- [metallicMapOffsetSize](GLTFMaterial.md#metallicmapoffsetsize)
+- [aoMapOffsetSize](GLTFMaterial.md#aomapoffsetsize)
+
+## Constructors
+
+### constructor
+
+• **new GLTFMaterial**(): [`GLTFMaterial`](GLTFMaterial.md)
+
+#### Returns
+
+[`GLTFMaterial`](GLTFMaterial.md)
+
+## Properties
+
+### name
+
+• **name**: `string`
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L4)
+
+___
+
+### defines
+
+• **defines**: `string`[]
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L5)
+
+___
+
+### doubleSided
+
+• **doubleSided**: `boolean`
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L6)
+
+___
+
+### baseColorFactor
+
+• **baseColorFactor**: [``1``, ``1``, ``1``, ``1``]
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L7)
+
+___
+
+### emissiveFactor
+
+• **emissiveFactor**: `number`
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L8)
+
+___
+
+### metallicFactor
+
+• **metallicFactor**: `number`
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L9)
+
+___
+
+### roughnessFactor
+
+• **roughnessFactor**: `number`
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L10)
+
+___
+
+### alphaCutoff
+
+• **alphaCutoff**: `number`
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L11)
+
+___
+
+### enableBlend
+
+• **enableBlend**: `boolean`
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L12)
+
+___
+
+### baseColorTexture
+
+• **baseColorTexture**: [`Texture`](Texture.md)
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L13)
+
+___
+
+### metallicRoughnessTexture
+
+• **metallicRoughnessTexture**: [`Texture`](Texture.md)
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L14)
+
+___
+
+### normalTexture
+
+• **normalTexture**: [`Texture`](Texture.md)
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L15)
+
+___
+
+### occlusionTexture
+
+• **occlusionTexture**: [`Texture`](Texture.md)
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L16)
+
+___
+
+### emissiveTexture
+
+• **emissiveTexture**: [`Texture`](Texture.md)
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L17)
+
+___
+
+### extensions
+
+• **extensions**: `any`
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L18)
+
+___
+
+### baseMapOffsetSize
+
+• **baseMapOffsetSize**: `Vector4`
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L19)
+
+___
+
+### normalMapOffsetSize
+
+• **normalMapOffsetSize**: `Vector4`
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L20)
+
+___
+
+### emissiveMapOffsetSize
+
+• **emissiveMapOffsetSize**: `Vector4`
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L21)
+
+___
+
+### roughnessMapOffsetSize
+
+• **roughnessMapOffsetSize**: `Vector4`
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L22)
+
+___
+
+### metallicMapOffsetSize
+
+• **metallicMapOffsetSize**: `Vector4`
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L23)
+
+___
+
+### aoMapOffsetSize
+
+• **aoMapOffsetSize**: `Vector4`
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFMaterial.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFMaterial.ts#L24)
diff --git a/docs/api/classes/GLTFSubParserConverter.md b/docs/api/classes/GLTFSubParserConverter.md
new file mode 100644
index 00000000..d9431508
--- /dev/null
+++ b/docs/api/classes/GLTFSubParserConverter.md
@@ -0,0 +1,50 @@
+# Class: GLTFSubParserConverter
+
+### Constructors
+
+- [constructor](GLTFSubParserConverter.md#constructor)
+
+### Methods
+
+- [convertNodeToObject3D](GLTFSubParserConverter.md#convertnodetoobject3d)
+
+## Constructors
+
+### constructor
+
+• **new GLTFSubParserConverter**(`subParser`): [`GLTFSubParserConverter`](GLTFSubParserConverter.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `subParser` | `GLTFSubParser` |
+
+#### Returns
+
+[`GLTFSubParserConverter`](GLTFSubParserConverter.md)
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFSubParserConverter.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFSubParserConverter.ts#L31)
+
+## Methods
+
+### convertNodeToObject3D
+
+▸ **convertNodeToObject3D**(`nodeInfo`, `parentNode`): `Promise`\<[`Object3D`](Object3D.md)\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `nodeInfo` | `GLTF_Node` |
+| `parentNode` | `any` |
+
+#### Returns
+
+`Promise`\<[`Object3D`](Object3D.md)\>
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFSubParserConverter.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFSubParserConverter.ts#L36)
diff --git a/docs/api/classes/GLTFSubParserSkeleton.md b/docs/api/classes/GLTFSubParserSkeleton.md
new file mode 100644
index 00000000..070765fd
--- /dev/null
+++ b/docs/api/classes/GLTFSubParserSkeleton.md
@@ -0,0 +1,93 @@
+# Class: GLTFSubParserSkeleton
+
+### Constructors
+
+- [constructor](GLTFSubParserSkeleton.md#constructor)
+
+### Methods
+
+- [parse](GLTFSubParserSkeleton.md#parse)
+- [parseSkeletonAnimation](GLTFSubParserSkeleton.md#parseskeletonanimation)
+- [parseSkeletonAnimationOld](GLTFSubParserSkeleton.md#parseskeletonanimationold)
+
+## Constructors
+
+### constructor
+
+• **new GLTFSubParserSkeleton**(`subParser`): [`GLTFSubParserSkeleton`](GLTFSubParserSkeleton.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `subParser` | `GLTFSubParser` |
+
+#### Returns
+
+[`GLTFSubParserSkeleton`](GLTFSubParserSkeleton.md)
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFSubParserSkeleton.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFSubParserSkeleton.ts#L12)
+
+## Methods
+
+### parse
+
+▸ **parse**(`skeletonID`): [`PrefabAvatarData`](PrefabAvatarData.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `skeletonID` | `number` |
+
+#### Returns
+
+[`PrefabAvatarData`](PrefabAvatarData.md)
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFSubParserSkeleton.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFSubParserSkeleton.ts#L17)
+
+___
+
+### parseSkeletonAnimation
+
+▸ **parseSkeletonAnimation**(`avatarData`, `animation`): [`PropertyAnimationClip`](PropertyAnimationClip.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `avatarData` | [`PrefabAvatarData`](PrefabAvatarData.md) |
+| `animation` | `any` |
+
+#### Returns
+
+[`PropertyAnimationClip`](PropertyAnimationClip.md)
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFSubParserSkeleton.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFSubParserSkeleton.ts#L27)
+
+___
+
+### parseSkeletonAnimationOld
+
+▸ **parseSkeletonAnimationOld**(`skeleton`, `animation`): `SkeletonAnimationClip`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `skeleton` | `Skeleton` |
+| `animation` | `any` |
+
+#### Returns
+
+`SkeletonAnimationClip`
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFSubParserSkeleton.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFSubParserSkeleton.ts#L168)
diff --git a/docs/api/classes/GLTFSubParserSkin.md b/docs/api/classes/GLTFSubParserSkin.md
new file mode 100644
index 00000000..730a50bf
--- /dev/null
+++ b/docs/api/classes/GLTFSubParserSkin.md
@@ -0,0 +1,49 @@
+# Class: GLTFSubParserSkin
+
+### Constructors
+
+- [constructor](GLTFSubParserSkin.md#constructor)
+
+### Methods
+
+- [parse](GLTFSubParserSkin.md#parse)
+
+## Constructors
+
+### constructor
+
+• **new GLTFSubParserSkin**(`subParser`): [`GLTFSubParserSkin`](GLTFSubParserSkin.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `subParser` | `GLTFSubParser` |
+
+#### Returns
+
+[`GLTFSubParserSkin`](GLTFSubParserSkin.md)
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFSubParserSkin.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFSubParserSkin.ts#L10)
+
+## Methods
+
+### parse
+
+▸ **parse**(`skinId`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `skinId` | `any` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFSubParserSkin.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFSubParserSkin.ts#L15)
diff --git a/docs/api/classes/GLTFType.md b/docs/api/classes/GLTFType.md
new file mode 100644
index 00000000..454734b0
--- /dev/null
+++ b/docs/api/classes/GLTFType.md
@@ -0,0 +1,238 @@
+# Class: GLTFType
+
+### Constructors
+
+- [constructor](GLTFType.md#constructor)
+
+### Properties
+
+- [GLTF\_NODE\_INDEX\_PROPERTY](GLTFType.md#gltf_node_index_property)
+- [BASE\_COLOR\_UNIFORM](GLTFType.md#base_color_uniform)
+- [BASE\_COLOR\_TEXTURE\_UNIFORM](GLTFType.md#base_color_texture_uniform)
+- [METALROUGHNESS\_UNIFORM](GLTFType.md#metalroughness_uniform)
+- [METALROUGHNESS\_TEXTURE\_UNIFORM](GLTFType.md#metalroughness_texture_uniform)
+- [NORMAL\_TEXTURE\_UNIFORM](GLTFType.md#normal_texture_uniform)
+- [NORMAL\_SCALE\_UNIFORM](GLTFType.md#normal_scale_uniform)
+- [EMISSIVE\_TEXTURE\_UNIFORM](GLTFType.md#emissive_texture_uniform)
+- [EMISSIVE\_FACTOR\_UNIFORM](GLTFType.md#emissive_factor_uniform)
+- [OCCLUSION\_TEXTURE\_UNIFORM](GLTFType.md#occlusion_texture_uniform)
+- [OCCLUSION\_FACTOR\_UNIFORM](GLTFType.md#occlusion_factor_uniform)
+- [MAX\_MORPH\_TARGETS](GLTFType.md#max_morph_targets)
+- [MORPH\_POSITION\_PREFIX](GLTFType.md#morph_position_prefix)
+- [MORPH\_NORMAL\_PREFIX](GLTFType.md#morph_normal_prefix)
+- [MORPH\_TANGENT\_PREFIX](GLTFType.md#morph_tangent_prefix)
+- [MORPH\_WEIGHT\_UNIFORM](GLTFType.md#morph_weight_uniform)
+- [SCENE\_ROOT\_SKELETON](GLTFType.md#scene_root_skeleton)
+- [IDENTITY\_INVERSE\_BIND\_MATRICES](GLTFType.md#identity_inverse_bind_matrices)
+- [JOINT\_MATRICES\_UNIFORM](GLTFType.md#joint_matrices_uniform)
+- [ALPHA\_CUTOFF\_UNIFORM](GLTFType.md#alpha_cutoff_uniform)
+
+## Constructors
+
+### constructor
+
+• **new GLTFType**(): [`GLTFType`](GLTFType.md)
+
+#### Returns
+
+[`GLTFType`](GLTFType.md)
+
+## Properties
+
+### GLTF\_NODE\_INDEX\_PROPERTY
+
+▪ `Static` `Readonly` **GLTF\_NODE\_INDEX\_PROPERTY**: ``"GLTF_NODE_INDEX"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L2)
+
+___
+
+### BASE\_COLOR\_UNIFORM
+
+▪ `Static` `Readonly` **BASE\_COLOR\_UNIFORM**: ``"u_baseColorFactor"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L4)
+
+___
+
+### BASE\_COLOR\_TEXTURE\_UNIFORM
+
+▪ `Static` `Readonly` **BASE\_COLOR\_TEXTURE\_UNIFORM**: ``"u_baseColorSampler"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L6)
+
+___
+
+### METALROUGHNESS\_UNIFORM
+
+▪ `Static` `Readonly` **METALROUGHNESS\_UNIFORM**: ``"u_metallicRoughnessValues"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L8)
+
+___
+
+### METALROUGHNESS\_TEXTURE\_UNIFORM
+
+▪ `Static` `Readonly` **METALROUGHNESS\_TEXTURE\_UNIFORM**: ``"u_metallicRoughnessSampler"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L10)
+
+___
+
+### NORMAL\_TEXTURE\_UNIFORM
+
+▪ `Static` `Readonly` **NORMAL\_TEXTURE\_UNIFORM**: ``"u_normalSampler"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L12)
+
+___
+
+### NORMAL\_SCALE\_UNIFORM
+
+▪ `Static` `Readonly` **NORMAL\_SCALE\_UNIFORM**: ``"u_normalScale"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L14)
+
+___
+
+### EMISSIVE\_TEXTURE\_UNIFORM
+
+▪ `Static` `Readonly` **EMISSIVE\_TEXTURE\_UNIFORM**: ``"u_emissiveSampler"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L16)
+
+___
+
+### EMISSIVE\_FACTOR\_UNIFORM
+
+▪ `Static` `Readonly` **EMISSIVE\_FACTOR\_UNIFORM**: ``"u_emissiveFactor"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L18)
+
+___
+
+### OCCLUSION\_TEXTURE\_UNIFORM
+
+▪ `Static` `Readonly` **OCCLUSION\_TEXTURE\_UNIFORM**: ``"u_occlusionSampler"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L20)
+
+___
+
+### OCCLUSION\_FACTOR\_UNIFORM
+
+▪ `Static` `Readonly` **OCCLUSION\_FACTOR\_UNIFORM**: ``"u_occlusionFactor"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L22)
+
+___
+
+### MAX\_MORPH\_TARGETS
+
+▪ `Static` `Readonly` **MAX\_MORPH\_TARGETS**: ``8``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L24)
+
+___
+
+### MORPH\_POSITION\_PREFIX
+
+▪ `Static` `Readonly` **MORPH\_POSITION\_PREFIX**: ``"a_morphPositions_"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L26)
+
+___
+
+### MORPH\_NORMAL\_PREFIX
+
+▪ `Static` `Readonly` **MORPH\_NORMAL\_PREFIX**: ``"a_morphNormals_"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L28)
+
+___
+
+### MORPH\_TANGENT\_PREFIX
+
+▪ `Static` `Readonly` **MORPH\_TANGENT\_PREFIX**: ``"a_morphTangents_"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L30)
+
+___
+
+### MORPH\_WEIGHT\_UNIFORM
+
+▪ `Static` `Readonly` **MORPH\_WEIGHT\_UNIFORM**: ``"u_morphWeights"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L32)
+
+___
+
+### SCENE\_ROOT\_SKELETON
+
+▪ `Static` `Readonly` **SCENE\_ROOT\_SKELETON**: ``"SCENE_ROOT"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L34)
+
+___
+
+### IDENTITY\_INVERSE\_BIND\_MATRICES
+
+▪ `Static` `Readonly` **IDENTITY\_INVERSE\_BIND\_MATRICES**: ``"IDENTITY_IBM"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L36)
+
+___
+
+### JOINT\_MATRICES\_UNIFORM
+
+▪ `Static` `Readonly` **JOINT\_MATRICES\_UNIFORM**: ``"u_jointMatrix"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L38)
+
+___
+
+### ALPHA\_CUTOFF\_UNIFORM
+
+▪ `Static` `Readonly` **ALPHA\_CUTOFF\_UNIFORM**: ``"u_alphaCutoff"``
+
+#### Defined in
+
+[src/loader/parser/gltf/GLTFType.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/GLTFType.ts#L40)
diff --git a/docs/api/classes/GPUContext.md b/docs/api/classes/GPUContext.md
new file mode 100644
index 00000000..4d574de4
--- /dev/null
+++ b/docs/api/classes/GPUContext.md
@@ -0,0 +1,461 @@
+# Class: GPUContext
+
+WebGPU api use context
+
+### Constructors
+
+- [constructor](GPUContext.md#constructor)
+
+### Properties
+
+- [lastGeometry](GPUContext.md#lastgeometry)
+- [lastPipeline](GPUContext.md#lastpipeline)
+- [lastShader](GPUContext.md#lastshader)
+- [drawCount](GPUContext.md#drawcount)
+- [renderPassCount](GPUContext.md#renderpasscount)
+- [geometryCount](GPUContext.md#geometrycount)
+- [pipelineCount](GPUContext.md#pipelinecount)
+- [matrixCount](GPUContext.md#matrixcount)
+- [lastRenderPassState](GPUContext.md#lastrenderpassstate)
+- [LastCommand](GPUContext.md#lastcommand)
+
+### Methods
+
+- [bindPipeline](GPUContext.md#bindpipeline)
+- [bindCamera](GPUContext.md#bindcamera)
+- [bindGeometryBuffer](GPUContext.md#bindgeometrybuffer)
+- [cleanCache](GPUContext.md#cleancache)
+- [createPipeline](GPUContext.md#createpipeline)
+- [beginCommandEncoder](GPUContext.md#begincommandencoder)
+- [endCommandEncoder](GPUContext.md#endcommandencoder)
+- [recordBundleEncoder](GPUContext.md#recordbundleencoder)
+- [beginRenderPass](GPUContext.md#beginrenderpass)
+- [drawIndexed](GPUContext.md#drawindexed)
+- [draw](GPUContext.md#draw)
+- [endPass](GPUContext.md#endpass)
+- [computeCommand](GPUContext.md#computecommand)
+- [copyTexture](GPUContext.md#copytexture)
+
+## Constructors
+
+### constructor
+
+• **new GPUContext**(): [`GPUContext`](GPUContext.md)
+
+#### Returns
+
+[`GPUContext`](GPUContext.md)
+
+## Properties
+
+### lastGeometry
+
+▪ `Static` **lastGeometry**: [`GeometryBase`](GeometryBase.md)
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L15)
+
+___
+
+### lastPipeline
+
+▪ `Static` **lastPipeline**: `GPURenderPipeline`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L16)
+
+___
+
+### lastShader
+
+▪ `Static` **lastShader**: [`RenderShaderPass`](RenderShaderPass.md)
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L17)
+
+___
+
+### drawCount
+
+▪ `Static` **drawCount**: `number` = `0`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L18)
+
+___
+
+### renderPassCount
+
+▪ `Static` **renderPassCount**: `number` = `0`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L19)
+
+___
+
+### geometryCount
+
+▪ `Static` **geometryCount**: `number` = `0`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L20)
+
+___
+
+### pipelineCount
+
+▪ `Static` **pipelineCount**: `number` = `0`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L21)
+
+___
+
+### matrixCount
+
+▪ `Static` **matrixCount**: `number` = `0`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L22)
+
+___
+
+### lastRenderPassState
+
+▪ `Static` **lastRenderPassState**: `RendererPassState`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L23)
+
+___
+
+### LastCommand
+
+▪ `Static` **LastCommand**: `GPUCommandEncoder`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L24)
+
+## Methods
+
+### bindPipeline
+
+▸ **bindPipeline**(`encoder`, `renderShader`): `boolean`
+
+renderPipeline before render need bind pipeline
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `encoder` | `GPURenderPassEncoder` \| `GPURenderBundleEncoder` | current GPURenderPassEncoder GPURenderPassEncoder GPURenderBundleEncoder |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | render pass shader [RenderShaderPass](RenderShaderPass.md) |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L32)
+
+___
+
+### bindCamera
+
+▸ **bindCamera**(`encoder`, `camera`): `void`
+
+render before need make sure use camera
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `encoder` | `GPURenderPassEncoder` \| `GPURenderBundleEncoder` | current GPURenderPassEncoder GPURenderPassEncoder GPURenderBundleEncoder |
+| `camera` | [`Camera3D`](Camera3D.md) | use camera [Camera3D](Camera3D.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L58)
+
+___
+
+### bindGeometryBuffer
+
+▸ **bindGeometryBuffer**(`encoder`, `geometry`): `void`
+
+bind geometry vertex buffer to current render pipeline
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `encoder` | `GPURenderPassEncoder` \| `GPURenderBundleEncoder` | current GPURenderPassEncoder GPURenderPassEncoder GPURenderBundleEncoder |
+| `geometry` | [`GeometryBase`](GeometryBase.md) | engine geometry |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L70)
+
+___
+
+### cleanCache
+
+▸ **cleanCache**(): `void`
+
+begin or end clean all use cache
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L89)
+
+___
+
+### createPipeline
+
+▸ **createPipeline**(`gpuRenderPipeline`): `GPURenderPipeline`
+
+create a render pipeline
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `gpuRenderPipeline` | `GPURenderPipelineDescriptor` | GPURenderPipelineDescriptor |
+
+#### Returns
+
+`GPURenderPipeline`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:100](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L100)
+
+___
+
+### beginCommandEncoder
+
+▸ **beginCommandEncoder**(): `GPUCommandEncoder`
+
+auto get webgpu commandEncoder and start a command encoder
+
+#### Returns
+
+`GPUCommandEncoder`
+
+commandEncoder GPUCommandEncoder
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L110)
+
+___
+
+### endCommandEncoder
+
+▸ **endCommandEncoder**(`command`): `void`
+
+end CommandEncoder record and submit
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `command` | `GPUCommandEncoder` | GPUCommandEncoder |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L123)
+
+___
+
+### recordBundleEncoder
+
+▸ **recordBundleEncoder**(`des`): `GPURenderBundleEncoder`
+
+create a renderBundle gpu object by GPURenderBundleEncoderDescriptor
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `des` | `GPURenderBundleEncoderDescriptor` | GPURenderBundleEncoderDescriptor |
+
+#### Returns
+
+`GPURenderBundleEncoder`
+
+renderBundleEncoder GPURenderBundleEncoder
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L136)
+
+___
+
+### beginRenderPass
+
+▸ **beginRenderPass**(`command`, `renderPassState`): `GPURenderPassEncoder`
+
+render pass start return current use gpu renderPassEncoder
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `command` | `GPUCommandEncoder` | GPUCommandEncoder |
+| `renderPassState` | `RendererPassState` | RendererPassState |
+
+#### Returns
+
+`GPURenderPassEncoder`
+
+encoder GPURenderPassEncoder
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L147)
+
+___
+
+### drawIndexed
+
+▸ **drawIndexed**(`encoder`, `indexCount`, `instanceCount?`, `firstIndex?`, `baseVertex?`, `firstInstance?`): `void`
+
+Start the rendering process to draw any pipes
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `encoder` | `GPURenderPassEncoder` |
+| `indexCount` | `number` |
+| `instanceCount?` | `number` |
+| `firstIndex?` | `number` |
+| `baseVertex?` | `number` |
+| `firstInstance?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L190)
+
+___
+
+### draw
+
+▸ **draw**(`encoder`, `vertexCount`, `instanceCount?`, `firstVertex?`, `firstInstance?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `encoder` | `GPURenderPassEncoder` |
+| `vertexCount` | `number` |
+| `instanceCount?` | `number` |
+| `firstVertex?` | `number` |
+| `firstInstance?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L199)
+
+___
+
+### endPass
+
+▸ **endPass**(`encoder`): `void`
+
+The GPU must be informed of the end of encoder recording
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `encoder` | `GPURenderPassEncoder` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L211)
+
+___
+
+### computeCommand
+
+▸ **computeCommand**(`command`, `computes`): `void`
+
+Perform the final calculation and submit the Shader to the GPU
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `command` | `GPUCommandEncoder` |
+| `computes` | `ComputeShader`[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:221](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L221)
+
+___
+
+### copyTexture
+
+▸ **copyTexture**(`command`, `source`, `dest`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `command` | `GPUCommandEncoder` |
+| `source` | [`Texture`](Texture.md) |
+| `dest` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/GPUContext.ts:230](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/GPUContext.ts#L230)
diff --git a/docs/api/classes/GTAOPost.md b/docs/api/classes/GTAOPost.md
new file mode 100644
index 00000000..637fc207
--- /dev/null
+++ b/docs/api/classes/GTAOPost.md
@@ -0,0 +1,372 @@
+# Class: GTAOPost
+
+Ground base Ambient Occlusion
+Let the intersection of the object and the object imitate the effect of the light being cross-occluded
+```
+gtao setting
+let cfg = {@link Engine3D.setting.render.postProcessing.gtao};
+```
+
+## Hierarchy
+
+- `PostBase`
+
+ ↳ **`GTAOPost`**
+
+### Constructors
+
+- [constructor](GTAOPost.md#constructor)
+
+### Properties
+
+- [rtFrame](GTAOPost.md#rtframe)
+- [enable](GTAOPost.md#enable)
+- [postRenderer](GTAOPost.md#postrenderer)
+
+### Accessors
+
+- [maxDistance](GTAOPost.md#maxdistance)
+- [maxPixel](GTAOPost.md#maxpixel)
+- [darkFactor](GTAOPost.md#darkfactor)
+- [rayMarchSegment](GTAOPost.md#raymarchsegment)
+- [multiBounce](GTAOPost.md#multibounce)
+- [blendColor](GTAOPost.md#blendcolor)
+- [usePosFloat32](GTAOPost.md#useposfloat32)
+
+### Methods
+
+- [onDetach](GTAOPost.md#ondetach)
+- [onResize](GTAOPost.md#onresize)
+- [destroy](GTAOPost.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new GTAOPost**(): [`GTAOPost`](GTAOPost.md)
+
+#### Returns
+
+[`GTAOPost`](GTAOPost.md)
+
+#### Overrides
+
+PostBase.constructor
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L62)
+
+## Properties
+
+### rtFrame
+
+• **rtFrame**: [`RTFrame`](RTFrame.md)
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:60](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L60)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+PostBase.enable
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L20)
+
+___
+
+### postRenderer
+
+• **postRenderer**: `PostRenderer`
+
+#### Inherited from
+
+PostBase.postRenderer
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L21)
+
+## Accessors
+
+### maxDistance
+
+• `get` **maxDistance**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L79)
+
+• `set` **maxDistance**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L84)
+
+___
+
+### maxPixel
+
+• `get` **maxPixel**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L90)
+
+• `set` **maxPixel**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:95](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L95)
+
+___
+
+### darkFactor
+
+• `get` **darkFactor**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:101](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L101)
+
+• `set` **darkFactor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L106)
+
+___
+
+### rayMarchSegment
+
+• `get` **rayMarchSegment**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L113)
+
+• `set` **rayMarchSegment**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L118)
+
+___
+
+### multiBounce
+
+• `get` **multiBounce**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L124)
+
+• `set` **multiBounce**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:129](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L129)
+
+___
+
+### blendColor
+
+• `get` **blendColor**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:134](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L134)
+
+• `set` **blendColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L139)
+
+___
+
+### usePosFloat32
+
+• `get` **usePosFloat32**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L144)
+
+• `set` **usePosFloat32**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:149](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L149)
+
+## Methods
+
+### onDetach
+
+▸ **onDetach**(`view`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.onDetach
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L75)
+
+___
+
+### onResize
+
+▸ **onResize**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.onResize
+
+#### Defined in
+
+[src/gfx/renderJob/post/GTAOPost.ts:239](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GTAOPost.ts#L239)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PostBase.destroy
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L87)
diff --git a/docs/api/classes/GUIAtlasTexture.md b/docs/api/classes/GUIAtlasTexture.md
new file mode 100644
index 00000000..8c228f3b
--- /dev/null
+++ b/docs/api/classes/GUIAtlasTexture.md
@@ -0,0 +1,131 @@
+# Class: GUIAtlasTexture
+
+Atlas data
+
+### Constructors
+
+- [constructor](GUIAtlasTexture.md#constructor)
+
+### Properties
+
+- [textureSize](GUIAtlasTexture.md#texturesize)
+- [name](GUIAtlasTexture.md#name)
+
+### Accessors
+
+- [spriteList](GUIAtlasTexture.md#spritelist)
+
+### Methods
+
+- [setTexture](GUIAtlasTexture.md#settexture)
+- [getSprite](GUIAtlasTexture.md#getsprite)
+
+## Constructors
+
+### constructor
+
+• **new GUIAtlasTexture**(`size`): [`GUIAtlasTexture`](GUIAtlasTexture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `size` | `Object` |
+| `size.x` | `number` |
+| `size.y` | `number` |
+
+#### Returns
+
+[`GUIAtlasTexture`](GUIAtlasTexture.md)
+
+#### Defined in
+
+[src/components/gui/core/GUIAtlasTexture.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIAtlasTexture.ts#L19)
+
+## Properties
+
+### textureSize
+
+• `Readonly` **textureSize**: [`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/components/gui/core/GUIAtlasTexture.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIAtlasTexture.ts#L15)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Defined in
+
+[src/components/gui/core/GUIAtlasTexture.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIAtlasTexture.ts#L16)
+
+## Accessors
+
+### spriteList
+
+• `get` **spriteList**(): [`GUISprite`](GUISprite.md)[]
+
+Returns all sprite list
+
+#### Returns
+
+[`GUISprite`](GUISprite.md)[]
+
+list of GUISprite
+
+#### Defined in
+
+[src/components/gui/core/GUIAtlasTexture.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIAtlasTexture.ts#L50)
+
+## Methods
+
+### setTexture
+
+▸ **setTexture**(`srcTexture`, `id`, `detail`): [`GUISprite`](GUISprite.md)
+
+create a sprite
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `srcTexture` | `GUITexture` | Usually it's an atlas diagram |
+| `id` | `string` | key of sprite |
+| `detail` | `any` | description of sprite |
+
+#### Returns
+
+[`GUISprite`](GUISprite.md)
+
+GUISprite
+
+#### Defined in
+
+[src/components/gui/core/GUIAtlasTexture.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIAtlasTexture.ts#L30)
+
+___
+
+### getSprite
+
+▸ **getSprite**(`id`): [`GUISprite`](GUISprite.md)
+
+get a sprite by key/id/name
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `id` | `string` | key of sprite |
+
+#### Returns
+
+[`GUISprite`](GUISprite.md)
+
+GUISprite
+
+#### Defined in
+
+[src/components/gui/core/GUIAtlasTexture.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIAtlasTexture.ts#L42)
diff --git a/docs/api/classes/GUICanvas.md b/docs/api/classes/GUICanvas.md
new file mode 100644
index 00000000..139f89e6
--- /dev/null
+++ b/docs/api/classes/GUICanvas.md
@@ -0,0 +1,679 @@
+# Class: GUICanvas
+
+GUI Root Container
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`GUICanvas`**
+
+### Constructors
+
+- [constructor](GUICanvas.md#constructor)
+
+### Properties
+
+- [object3D](GUICanvas.md#object3d)
+- [isDestroyed](GUICanvas.md#isdestroyed)
+- [isGUICanvas](GUICanvas.md#isguicanvas)
+- [index](GUICanvas.md#index)
+
+### Accessors
+
+- [eventDispatcher](GUICanvas.md#eventdispatcher)
+- [isStart](GUICanvas.md#isstart)
+- [transform](GUICanvas.md#transform)
+- [enable](GUICanvas.md#enable)
+
+### Methods
+
+- [init](GUICanvas.md#init)
+- [start](GUICanvas.md#start)
+- [stop](GUICanvas.md#stop)
+- [onEnable](GUICanvas.md#onenable)
+- [onDisable](GUICanvas.md#ondisable)
+- [onUpdate](GUICanvas.md#onupdate)
+- [onLateUpdate](GUICanvas.md#onlateupdate)
+- [onBeforeUpdate](GUICanvas.md#onbeforeupdate)
+- [onCompute](GUICanvas.md#oncompute)
+- [onGraphic](GUICanvas.md#ongraphic)
+- [onParentChange](GUICanvas.md#onparentchange)
+- [onAddChild](GUICanvas.md#onaddchild)
+- [onRemoveChild](GUICanvas.md#onremovechild)
+- [beforeDestroy](GUICanvas.md#beforedestroy)
+- [destroy](GUICanvas.md#destroy)
+- [addChild](GUICanvas.md#addchild)
+- [removeChild](GUICanvas.md#removechild)
+- [cloneTo](GUICanvas.md#cloneto)
+- [copyComponent](GUICanvas.md#copycomponent)
+
+## Constructors
+
+### constructor
+
+• **new GUICanvas**(): [`GUICanvas`](GUICanvas.md)
+
+#### Returns
+
+[`GUICanvas`](GUICanvas.md)
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### isGUICanvas
+
+• `Readonly` **isGUICanvas**: `boolean` = `true`
+
+#### Defined in
+
+[src/components/gui/core/GUICanvas.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUICanvas.ts#L10)
+
+___
+
+### index
+
+• **index**: `number` = `0`
+
+#### Defined in
+
+[src/components/gui/core/GUICanvas.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUICanvas.ts#L11)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[init](ComponentBase.md#init)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[start](ComponentBase.md#start)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onEnable](ComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onDisable](ComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onUpdate](ComponentBase.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[destroy](ComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
+
+___
+
+### addChild
+
+▸ **addChild**(`child`): `this`
+
+Add an Object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) | Object3D |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/components/gui/core/GUICanvas.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUICanvas.ts#L19)
+
+___
+
+### removeChild
+
+▸ **removeChild**(`child`): `this`
+
+Remove the child
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) | Removed Object3D |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/components/gui/core/GUICanvas.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUICanvas.ts#L29)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/gui/core/GUICanvas.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUICanvas.ts#L35)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/gui/core/GUICanvas.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUICanvas.ts#L40)
diff --git a/docs/api/classes/GUIConfig.md b/docs/api/classes/GUIConfig.md
new file mode 100644
index 00000000..e7be50ee
--- /dev/null
+++ b/docs/api/classes/GUIConfig.md
@@ -0,0 +1,84 @@
+# Class: GUIConfig
+
+### Constructors
+
+- [constructor](GUIConfig.md#constructor)
+
+### Properties
+
+- [panelRatio](GUIConfig.md#panelratio)
+- [quadMaxCountForWorld](GUIConfig.md#quadmaxcountforworld)
+- [quadMaxCountForView](GUIConfig.md#quadmaxcountforview)
+- [SortOrderStartWorld](GUIConfig.md#sortorderstartworld)
+- [SortOrderStartView](GUIConfig.md#sortorderstartview)
+- [SortOrderCanvasSpan](GUIConfig.md#sortordercanvasspan)
+
+## Constructors
+
+### constructor
+
+• **new GUIConfig**(): [`GUIConfig`](GUIConfig.md)
+
+#### Returns
+
+[`GUIConfig`](GUIConfig.md)
+
+## Properties
+
+### panelRatio
+
+▪ `Static` **panelRatio**: `number` = `1.0`
+
+#### Defined in
+
+[src/components/gui/GUIConfig.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIConfig.ts#L2)
+
+___
+
+### quadMaxCountForWorld
+
+▪ `Static` **quadMaxCountForWorld**: `number` = `256`
+
+#### Defined in
+
+[src/components/gui/GUIConfig.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIConfig.ts#L3)
+
+___
+
+### quadMaxCountForView
+
+▪ `Static` **quadMaxCountForView**: `number` = `2048`
+
+#### Defined in
+
+[src/components/gui/GUIConfig.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIConfig.ts#L4)
+
+___
+
+### SortOrderStartWorld
+
+▪ `Static` `Readonly` **SortOrderStartWorld**: `number` = `7000`
+
+#### Defined in
+
+[src/components/gui/GUIConfig.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIConfig.ts#L5)
+
+___
+
+### SortOrderStartView
+
+▪ `Static` `Readonly` **SortOrderStartView**: `number` = `8000`
+
+#### Defined in
+
+[src/components/gui/GUIConfig.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIConfig.ts#L6)
+
+___
+
+### SortOrderCanvasSpan
+
+▪ `Static` `Readonly` **SortOrderCanvasSpan**: `number` = `10000`
+
+#### Defined in
+
+[src/components/gui/GUIConfig.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIConfig.ts#L7)
diff --git a/docs/api/classes/GUIGeometry.md b/docs/api/classes/GUIGeometry.md
new file mode 100644
index 00000000..a5d22f49
--- /dev/null
+++ b/docs/api/classes/GUIGeometry.md
@@ -0,0 +1,775 @@
+# Class: GUIGeometry
+
+composite geometry of gui, holding and updating attribute data
+
+## Hierarchy
+
+- [`GeometryBase`](GeometryBase.md)
+
+ ↳ **`GUIGeometry`**
+
+### Constructors
+
+- [constructor](GUIGeometry.md#constructor)
+
+### Properties
+
+- [maxQuadCount](GUIGeometry.md#maxquadcount)
+- [instanceID](GUIGeometry.md#instanceid)
+- [name](GUIGeometry.md#name)
+- [subGeometries](GUIGeometry.md#subgeometries)
+- [morphTargetsRelative](GUIGeometry.md#morphtargetsrelative)
+- [morphTargetDictionary](GUIGeometry.md#morphtargetdictionary)
+- [skinNames](GUIGeometry.md#skinnames)
+- [bindPose](GUIGeometry.md#bindpose)
+- [blendShapeData](GUIGeometry.md#blendshapedata)
+- [vertexDim](GUIGeometry.md#vertexdim)
+- [vertexCount](GUIGeometry.md#vertexcount)
+
+### Accessors
+
+- [indicesBuffer](GUIGeometry.md#indicesbuffer)
+- [vertexBuffer](GUIGeometry.md#vertexbuffer)
+- [vertexAttributes](GUIGeometry.md#vertexattributes)
+- [vertexAttributeMap](GUIGeometry.md#vertexattributemap)
+- [geometryType](GUIGeometry.md#geometrytype)
+- [bounds](GUIGeometry.md#bounds)
+
+### Methods
+
+- [updateSubGeometry](GUIGeometry.md#updatesubgeometry)
+- [resetSubGeometries](GUIGeometry.md#resetsubgeometries)
+- [updateBounds](GUIGeometry.md#updatebounds)
+- [getPositionBuffer](GUIGeometry.md#getpositionbuffer)
+- [getSpriteBuffer](GUIGeometry.md#getspritebuffer)
+- [getColorBuffer](GUIGeometry.md#getcolorbuffer)
+- [create](GUIGeometry.md#create)
+- [fillQuad](GUIGeometry.md#fillquad)
+- [addSubGeometry](GUIGeometry.md#addsubgeometry)
+- [generate](GUIGeometry.md#generate)
+- [setIndices](GUIGeometry.md#setindices)
+- [setAttribute](GUIGeometry.md#setattribute)
+- [getAttribute](GUIGeometry.md#getattribute)
+- [hasAttribute](GUIGeometry.md#hasattribute)
+- [genWireframe](GUIGeometry.md#genwireframe)
+- [compute](GUIGeometry.md#compute)
+- [computeNormals](GUIGeometry.md#computenormals)
+- [isPrimitive](GUIGeometry.md#isprimitive)
+- [destroy](GUIGeometry.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new GUIGeometry**(`max`): [`GUIGeometry`](GUIGeometry.md)
+
+constructor
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `max` | `number` | max quad of a geometry |
+
+#### Returns
+
+[`GUIGeometry`](GUIGeometry.md)
+
+GUIGeometry
+
+#### Overrides
+
+[GeometryBase](GeometryBase.md).[constructor](GeometryBase.md#constructor)
+
+#### Defined in
+
+[src/components/gui/core/GUIGeometry.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIGeometry.ts#L45)
+
+## Properties
+
+### maxQuadCount
+
+• `Readonly` **maxQuadCount**: `number`
+
+#### Defined in
+
+[src/components/gui/core/GUIGeometry.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIGeometry.ts#L38)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[instanceID](GeometryBase.md#instanceid)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L39)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[name](GeometryBase.md#name)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L40)
+
+___
+
+### subGeometries
+
+• **subGeometries**: [`SubGeometry`](SubGeometry.md)[] = `[]`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[subGeometries](GeometryBase.md#subgeometries)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L41)
+
+___
+
+### morphTargetsRelative
+
+• **morphTargetsRelative**: `boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetsRelative](GeometryBase.md#morphtargetsrelative)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L42)
+
+___
+
+### morphTargetDictionary
+
+• **morphTargetDictionary**: `Object`
+
+#### Index signature
+
+▪ [blenderName: `string`]: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetDictionary](GeometryBase.md#morphtargetdictionary)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L43)
+
+___
+
+### skinNames
+
+• **skinNames**: `string`[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[skinNames](GeometryBase.md#skinnames)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L44)
+
+___
+
+### bindPose
+
+• **bindPose**: [`Matrix4`](Matrix4.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[bindPose](GeometryBase.md#bindpose)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L45)
+
+___
+
+### blendShapeData
+
+• **blendShapeData**: [`BlendShapeData`](BlendShapeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[blendShapeData](GeometryBase.md#blendshapedata)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L46)
+
+___
+
+### vertexDim
+
+• **vertexDim**: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexDim](GeometryBase.md#vertexdim)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L47)
+
+___
+
+### vertexCount
+
+• **vertexCount**: `number` = `0`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexCount](GeometryBase.md#vertexcount)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L48)
+
+## Accessors
+
+### indicesBuffer
+
+• `get` **indicesBuffer**(): [`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Returns
+
+[`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Inherited from
+
+GeometryBase.indicesBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L69)
+
+___
+
+### vertexBuffer
+
+• `get` **vertexBuffer**(): [`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Returns
+
+[`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Inherited from
+
+GeometryBase.vertexBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L73)
+
+___
+
+### vertexAttributes
+
+• `get` **vertexAttributes**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+GeometryBase.vertexAttributes
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L77)
+
+___
+
+### vertexAttributeMap
+
+• `get` **vertexAttributeMap**(): `Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Returns
+
+`Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Inherited from
+
+GeometryBase.vertexAttributeMap
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L81)
+
+___
+
+### geometryType
+
+• `get` **geometryType**(): [`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Returns
+
+[`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L85)
+
+• `set` **geometryType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryVertexType`](../enums/GeometryVertexType.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L88)
+
+___
+
+### bounds
+
+• `get` **bounds**(): `BoundingBox`
+
+#### Returns
+
+`BoundingBox`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L92)
+
+• `set` **bounds**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BoundingBox` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L135)
+
+## Methods
+
+### updateSubGeometry
+
+▸ **updateSubGeometry**(`index`, `start`, `count`): [`SubGeometry`](SubGeometry.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `start` | `number` |
+| `count` | `number` |
+
+#### Returns
+
+[`SubGeometry`](SubGeometry.md)
+
+#### Defined in
+
+[src/components/gui/core/GUIGeometry.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIGeometry.ts#L50)
+
+___
+
+### resetSubGeometries
+
+▸ **resetSubGeometries**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIGeometry.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIGeometry.ts#L71)
+
+___
+
+### updateBounds
+
+▸ **updateBounds**(`min?`, `max?`): `this`
+
+the bounds will be set to infinity
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `min?` | [`Vector3`](Vector3.md) |
+| `max?` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`this`
+
+GUIGeometry
+
+#### Defined in
+
+[src/components/gui/core/GUIGeometry.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIGeometry.ts#L84)
+
+___
+
+### getPositionBuffer
+
+▸ **getPositionBuffer**(): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Defined in
+
+[src/components/gui/core/GUIGeometry.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIGeometry.ts#L92)
+
+___
+
+### getSpriteBuffer
+
+▸ **getSpriteBuffer**(): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Defined in
+
+[src/components/gui/core/GUIGeometry.ts:100](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIGeometry.ts#L100)
+
+___
+
+### getColorBuffer
+
+▸ **getColorBuffer**(): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Defined in
+
+[src/components/gui/core/GUIGeometry.ts:108](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIGeometry.ts#L108)
+
+___
+
+### create
+
+▸ **create**(): `this`
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/components/gui/core/GUIGeometry.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIGeometry.ts#L116)
+
+___
+
+### fillQuad
+
+▸ **fillQuad**(`quad`, `transform`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `quad` | [`GUIQuad`](GUIQuad.md) |
+| `transform` | [`UITransform`](UITransform.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIGeometry.ts:170](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIGeometry.ts#L170)
+
+___
+
+### addSubGeometry
+
+▸ **addSubGeometry**(`...lodLevels`): [`SubGeometry`](SubGeometry.md)
+
+add subGeometry from lod level
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `...lodLevels` | [`LODDescriptor`](../types/LODDescriptor.md)[] |
+
+#### Returns
+
+[`SubGeometry`](SubGeometry.md)
+
+**`See`**
+
+LODDescriptor
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[addSubGeometry](GeometryBase.md#addsubgeometry)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L144)
+
+___
+
+### generate
+
+▸ **generate**(`shaderReflection`): `void`
+
+create geometry by shaderReflection
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `shaderReflection` | `ShaderReflection` | ShaderReflection |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[generate](GeometryBase.md#generate)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L155)
+
+___
+
+### setIndices
+
+▸ **setIndices**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setIndices](GeometryBase.md#setindices)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L165)
+
+___
+
+### setAttribute
+
+▸ **setAttribute**(`attribute`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setAttribute](GeometryBase.md#setattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L177)
+
+___
+
+### getAttribute
+
+▸ **getAttribute**(`attribute`): [`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+[`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[getAttribute](GeometryBase.md#getattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L190)
+
+___
+
+### hasAttribute
+
+▸ **hasAttribute**(`attribute`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[hasAttribute](GeometryBase.md#hasattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L194)
+
+___
+
+### genWireframe
+
+▸ **genWireframe**(): [`Vector3`](Vector3.md)[]
+
+#### Returns
+
+[`Vector3`](Vector3.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[genWireframe](GeometryBase.md#genwireframe)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L198)
+
+___
+
+### compute
+
+▸ **compute**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[compute](GeometryBase.md#compute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L251)
+
+___
+
+### computeNormals
+
+▸ **computeNormals**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[computeNormals](GeometryBase.md#computenormals)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:270](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L270)
+
+___
+
+### isPrimitive
+
+▸ **isPrimitive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[isPrimitive](GeometryBase.md#isprimitive)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L312)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[destroy](GeometryBase.md#destroy)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:316](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L316)
diff --git a/docs/api/classes/GUIGeometryRebuild.md b/docs/api/classes/GUIGeometryRebuild.md
new file mode 100644
index 00000000..efce1791
--- /dev/null
+++ b/docs/api/classes/GUIGeometryRebuild.md
@@ -0,0 +1,48 @@
+# Class: GUIGeometryRebuild
+
+This class is responsible for performing the Geometry reconstruction work of the GUI
+
+### Constructors
+
+- [constructor](GUIGeometryRebuild.md#constructor)
+
+### Methods
+
+- [build](GUIGeometryRebuild.md#build)
+
+## Constructors
+
+### constructor
+
+• **new GUIGeometryRebuild**(): [`GUIGeometryRebuild`](GUIGeometryRebuild.md)
+
+#### Returns
+
+[`GUIGeometryRebuild`](GUIGeometryRebuild.md)
+
+## Methods
+
+### build
+
+▸ **build**(`transforms`, `panel`, `forceUpdate`): `boolean`
+
+Rebuild a specified GUI Mesh
+Check and rebuild a GUI Mesh, including geometry and materials
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `transforms` | [`UITransform`](UITransform.md)[] | Fill in the UITransform list for the specified GUI Mesh |
+| `panel` | [`UIPanel`](UIPanel.md) | Specify the GUI Mesh object for reconstructing Geometry |
+| `forceUpdate` | `boolean` | whether need to force refactoring |
+
+#### Returns
+
+`boolean`
+
+Return the build result (the maximum number of textures supported by GUIMaterials for a single UIPanel is limited and cannot exceed the limit)
+
+#### Defined in
+
+[src/components/gui/core/GUIGeometryRebuild.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIGeometryRebuild.ts#L27)
diff --git a/docs/api/classes/GUIMaterial.md b/docs/api/classes/GUIMaterial.md
new file mode 100644
index 00000000..eb071f00
--- /dev/null
+++ b/docs/api/classes/GUIMaterial.md
@@ -0,0 +1,1366 @@
+# Class: GUIMaterial
+
+material used in rendering GUI
+
+## Hierarchy
+
+- [`Material`](Material.md)
+
+ ↳ **`GUIMaterial`**
+
+### Constructors
+
+- [constructor](GUIMaterial.md#constructor)
+
+### Properties
+
+- [instanceID](GUIMaterial.md#instanceid)
+- [name](GUIMaterial.md#name)
+- [enable](GUIMaterial.md#enable)
+
+### Accessors
+
+- [envMap](GUIMaterial.md#envmap)
+- [shadowMap](GUIMaterial.md#shadowmap)
+- [baseMap](GUIMaterial.md#basemap)
+- [normalMap](GUIMaterial.md#normalmap)
+- [emissiveMap](GUIMaterial.md#emissivemap)
+- [irradianceMap](GUIMaterial.md#irradiancemap)
+- [irradianceDepthMap](GUIMaterial.md#irradiancedepthmap)
+- [shader](GUIMaterial.md#shader)
+- [doubleSide](GUIMaterial.md#doubleside)
+- [castShadow](GUIMaterial.md#castshadow)
+- [acceptShadow](GUIMaterial.md#acceptshadow)
+- [castReflection](GUIMaterial.md#castreflection)
+- [blendMode](GUIMaterial.md#blendmode)
+- [depthCompare](GUIMaterial.md#depthcompare)
+- [transparent](GUIMaterial.md#transparent)
+- [cullMode](GUIMaterial.md#cullmode)
+- [depthWriteEnabled](GUIMaterial.md#depthwriteenabled)
+- [useBillboard](GUIMaterial.md#usebillboard)
+
+### Methods
+
+- [setPanelRatio](GUIMaterial.md#setpanelratio)
+- [setScissorRect](GUIMaterial.md#setscissorrect)
+- [setScissorEnable](GUIMaterial.md#setscissorenable)
+- [setScissorCorner](GUIMaterial.md#setscissorcorner)
+- [setScreenSize](GUIMaterial.md#setscreensize)
+- [setTextures](GUIMaterial.md#settextures)
+- [getPass](GUIMaterial.md#getpass)
+- [getAllPass](GUIMaterial.md#getallpass)
+- [clone](GUIMaterial.md#clone)
+- [destroy](GUIMaterial.md#destroy)
+- [setDefine](GUIMaterial.md#setdefine)
+- [setTexture](GUIMaterial.md#settexture)
+- [setStorageBuffer](GUIMaterial.md#setstoragebuffer)
+- [setUniformBuffer](GUIMaterial.md#setuniformbuffer)
+- [setUniformFloat](GUIMaterial.md#setuniformfloat)
+- [setUniformVector2](GUIMaterial.md#setuniformvector2)
+- [setUniformVector3](GUIMaterial.md#setuniformvector3)
+- [setUniformVector4](GUIMaterial.md#setuniformvector4)
+- [setUniformColor](GUIMaterial.md#setuniformcolor)
+- [getUniformFloat](GUIMaterial.md#getuniformfloat)
+- [getUniformV2](GUIMaterial.md#getuniformv2)
+- [getUniformV3](GUIMaterial.md#getuniformv3)
+- [getUniformV4](GUIMaterial.md#getuniformv4)
+- [getUniformColor](GUIMaterial.md#getuniformcolor)
+- [getTexture](GUIMaterial.md#gettexture)
+- [getStorageBuffer](GUIMaterial.md#getstoragebuffer)
+- [getStructStorageBuffer](GUIMaterial.md#getstructstoragebuffer)
+- [getUniformBuffer](GUIMaterial.md#getuniformbuffer)
+- [applyUniform](GUIMaterial.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new GUIMaterial**(`space`): [`GUIMaterial`](GUIMaterial.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `space` | [`GUISpace`](../enums/GUISpace.md) |
+
+#### Returns
+
+[`GUIMaterial`](GUIMaterial.md)
+
+#### Overrides
+
+[Material](Material.md).[constructor](Material.md#constructor)
+
+#### Defined in
+
+[src/components/gui/core/GUIMaterial.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIMaterial.ts#L24)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+Material Unique Identifier
+
+#### Inherited from
+
+[Material](Material.md).[instanceID](Material.md#instanceid)
+
+#### Defined in
+
+[src/materials/Material.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L19)
+
+___
+
+### name
+
+• **name**: `string`
+
+name of this material
+
+#### Inherited from
+
+[Material](Material.md).[name](Material.md#name)
+
+#### Defined in
+
+[src/materials/Material.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L25)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+[Material](Material.md).[enable](Material.md#enable)
+
+#### Defined in
+
+[src/materials/Material.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L27)
+
+## Accessors
+
+### envMap
+
+• `set` **envMap**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIMaterial.ts:130](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIMaterial.ts#L130)
+
+___
+
+### shadowMap
+
+• `set` **shadowMap**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIMaterial.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIMaterial.ts#L131)
+
+___
+
+### baseMap
+
+• `set` **baseMap**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIMaterial.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIMaterial.ts#L132)
+
+___
+
+### normalMap
+
+• `set` **normalMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIMaterial.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIMaterial.ts#L133)
+
+___
+
+### emissiveMap
+
+• `set` **emissiveMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIMaterial.ts:134](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIMaterial.ts#L134)
+
+___
+
+### irradianceMap
+
+• `set` **irradianceMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIMaterial.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIMaterial.ts#L135)
+
+___
+
+### irradianceDepthMap
+
+• `set` **irradianceDepthMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIMaterial.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIMaterial.ts#L136)
+
+___
+
+### shader
+
+• `get` **shader**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L41)
+
+• `set` **shader**(`shader`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shader` | [`Shader`](Shader.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L36)
+
+___
+
+### doubleSide
+
+• `get` **doubleSide**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L45)
+
+• `set` **doubleSide**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L49)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L53)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L57)
+
+___
+
+### acceptShadow
+
+• `get` **acceptShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L64)
+
+• `set` **acceptShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L68)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L77)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L81)
+
+___
+
+### blendMode
+
+• `get` **blendMode**(): [`BlendMode`](../enums/BlendMode.md)
+
+#### Returns
+
+[`BlendMode`](../enums/BlendMode.md)
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L85)
+
+• `set` **blendMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`BlendMode`](../enums/BlendMode.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L89)
+
+___
+
+### depthCompare
+
+• `get` **depthCompare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L93)
+
+• `set` **depthCompare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L97)
+
+___
+
+### transparent
+
+• `get` **transparent**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L102)
+
+• `set` **transparent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L106)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L113)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L117)
+
+___
+
+### depthWriteEnabled
+
+• `get` **depthWriteEnabled**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L128)
+
+• `set` **depthWriteEnabled**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L132)
+
+___
+
+### useBillboard
+
+• `set` **useBillboard**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.useBillboard
+
+#### Defined in
+
+[src/materials/Material.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L136)
+
+## Methods
+
+### setPanelRatio
+
+▸ **setPanelRatio**(`pixelRatio`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pixelRatio` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIMaterial.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIMaterial.ts#L64)
+
+___
+
+### setScissorRect
+
+▸ **setScissorRect**(`left`, `bottom`, `right`, `top`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `left` | `number` |
+| `bottom` | `number` |
+| `right` | `number` |
+| `top` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIMaterial.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIMaterial.ts#L68)
+
+___
+
+### setScissorEnable
+
+▸ **setScissorEnable**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIMaterial.ts:74](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIMaterial.ts#L74)
+
+___
+
+### setScissorCorner
+
+▸ **setScissorCorner**(`radius`, `fadeOut`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radius` | `number` |
+| `fadeOut` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIMaterial.ts:86](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIMaterial.ts#L86)
+
+___
+
+### setScreenSize
+
+▸ **setScreenSize**(`width`, `height`): `this`
+
+Write screenSize size to the shader
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `width` | `number` |
+| `height` | `number` |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/components/gui/core/GUIMaterial.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIMaterial.ts#L94)
+
+___
+
+### setTextures
+
+▸ **setTextures**(`list`): `void`
+
+Update texture used in GUI
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `list` | [`Texture`](Texture.md)[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIMaterial.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIMaterial.ts#L103)
+
+___
+
+### getPass
+
+▸ **getPass**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get render pass by renderType
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getPass](Material.md#getpass)
+
+#### Defined in
+
+[src/materials/Material.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L145)
+
+___
+
+### getAllPass
+
+▸ **getAllPass**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get all color render pass
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getAllPass](Material.md#getallpass)
+
+#### Defined in
+
+[src/materials/Material.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L153)
+
+___
+
+### clone
+
+▸ **clone**(): [`Material`](Material.md)
+
+clone one material
+
+#### Returns
+
+[`Material`](Material.md)
+
+Material
+
+#### Inherited from
+
+[Material](Material.md).[clone](Material.md#clone)
+
+#### Defined in
+
+[src/materials/Material.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L161)
+
+___
+
+### destroy
+
+▸ **destroy**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[destroy](Material.md#destroy)
+
+#### Defined in
+
+[src/materials/Material.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L168)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`define`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `define` | `string` |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setDefine](Material.md#setdefine)
+
+#### Defined in
+
+[src/materials/Material.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L174)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`propertyName`, `texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setTexture](Material.md#settexture)
+
+#### Defined in
+
+[src/materials/Material.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L178)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setStorageBuffer](Material.md#setstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L182)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformBuffer](Material.md#setuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L186)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformFloat](Material.md#setuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L191)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector2](Material.md#setuniformvector2)
+
+#### Defined in
+
+[src/materials/Material.ts:195](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L195)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector3](Material.md#setuniformvector3)
+
+#### Defined in
+
+[src/materials/Material.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L199)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector4](Material.md#setuniformvector4)
+
+#### Defined in
+
+[src/materials/Material.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L203)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformColor](Material.md#setuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L207)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`str`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformFloat](Material.md#getuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L211)
+
+___
+
+### getUniformV2
+
+▸ **getUniformV2**(`str`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV2](Material.md#getuniformv2)
+
+#### Defined in
+
+[src/materials/Material.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L215)
+
+___
+
+### getUniformV3
+
+▸ **getUniformV3**(`str`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV3](Material.md#getuniformv3)
+
+#### Defined in
+
+[src/materials/Material.ts:219](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L219)
+
+___
+
+### getUniformV4
+
+▸ **getUniformV4**(`str`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV4](Material.md#getuniformv4)
+
+#### Defined in
+
+[src/materials/Material.ts:223](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L223)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`str`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformColor](Material.md#getuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L227)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`str`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Material](Material.md).[getTexture](Material.md#gettexture)
+
+#### Defined in
+
+[src/materials/Material.ts:231](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L231)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`str`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Material](Material.md).[getStorageBuffer](Material.md#getstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:235](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L235)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getStructStorageBuffer](Material.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:239](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L239)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformBuffer](Material.md#getuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:243](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L243)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[applyUniform](Material.md#applyuniform)
+
+#### Defined in
+
+[src/materials/Material.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L247)
diff --git a/docs/api/classes/GUIPick.md b/docs/api/classes/GUIPick.md
new file mode 100644
index 00000000..07f838f2
--- /dev/null
+++ b/docs/api/classes/GUIPick.md
@@ -0,0 +1,43 @@
+# Class: GUIPick
+
+Pickup logic for GUI interactive components
+
+### Constructors
+
+- [constructor](GUIPick.md#constructor)
+
+### Methods
+
+- [init](GUIPick.md#init)
+
+## Constructors
+
+### constructor
+
+• **new GUIPick**(): [`GUIPick`](GUIPick.md)
+
+#### Returns
+
+[`GUIPick`](GUIPick.md)
+
+## Methods
+
+### init
+
+▸ **init**(`view`): `void`
+
+Initialize the pickup and call it internally during engine initialization
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/GUIPick.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIPick.ts#L35)
diff --git a/docs/api/classes/GUIQuad.md b/docs/api/classes/GUIQuad.md
new file mode 100644
index 00000000..45d390d1
--- /dev/null
+++ b/docs/api/classes/GUIQuad.md
@@ -0,0 +1,446 @@
+# Class: GUIQuad
+
+The smallest unit in the GUI, basic information required for rendering a plane
+
+### Constructors
+
+- [constructor](GUIQuad.md#constructor)
+
+### Properties
+
+- [x](GUIQuad.md#x)
+- [y](GUIQuad.md#y)
+- [z](GUIQuad.md#z)
+- [width](GUIQuad.md#width)
+- [height](GUIQuad.md#height)
+- [dirtyAttributes](GUIQuad.md#dirtyattributes)
+- [cacheTextureId](GUIQuad.md#cachetextureid)
+
+### Accessors
+
+- [quadPool](GUIQuad.md#quadpool)
+- [imageType](GUIQuad.md#imagetype)
+- [color](GUIQuad.md#color)
+- [visible](GUIQuad.md#visible)
+- [sprite](GUIQuad.md#sprite)
+- [left](GUIQuad.md#left)
+- [right](GUIQuad.md#right)
+- [top](GUIQuad.md#top)
+- [bottom](GUIQuad.md#bottom)
+
+### Methods
+
+- [recycleQuad](GUIQuad.md#recyclequad)
+- [spawnQuad](GUIQuad.md#spawnquad)
+- [setSize](GUIQuad.md#setsize)
+- [setXY](GUIQuad.md#setxy)
+- [setAttrChange](GUIQuad.md#setattrchange)
+- [applyTransform](GUIQuad.md#applytransform)
+- [writeToGeometry](GUIQuad.md#writetogeometry)
+
+## Constructors
+
+### constructor
+
+• **new GUIQuad**(): [`GUIQuad`](GUIQuad.md)
+
+#### Returns
+
+[`GUIQuad`](GUIQuad.md)
+
+## Properties
+
+### x
+
+• **x**: `number` = `0`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L19)
+
+___
+
+### y
+
+• **y**: `number` = `0`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L20)
+
+___
+
+### z
+
+• **z**: `number` = `0`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L21)
+
+___
+
+### width
+
+• **width**: `number` = `1`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L22)
+
+___
+
+### height
+
+• **height**: `number` = `1`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L23)
+
+___
+
+### dirtyAttributes
+
+• **dirtyAttributes**: `GUIQuadAttrEnum` = `GUIQuadAttrEnum.MAX`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L36)
+
+___
+
+### cacheTextureId
+
+• **cacheTextureId**: `number` = `-1`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L38)
+
+## Accessors
+
+### quadPool
+
+• `get` **quadPool**(): [`PoolNode`](PoolNode.md)\<[`GUIQuad`](GUIQuad.md)\>
+
+#### Returns
+
+[`PoolNode`](PoolNode.md)\<[`GUIQuad`](GUIQuad.md)\>
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L41)
+
+___
+
+### imageType
+
+• `get` **imageType**(): [`ImageType`](../enums/ImageType.md)
+
+#### Returns
+
+[`ImageType`](../enums/ImageType.md)
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:61](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L61)
+
+• `set` **imageType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`ImageType`](../enums/ImageType.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L65)
+
+___
+
+### color
+
+• `get` **color**(): [`Color`](Color.md)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L70)
+
+• `set` **color**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:74](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L74)
+
+___
+
+### visible
+
+• `get` **visible**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L80)
+
+• `set` **visible**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L84)
+
+___
+
+### sprite
+
+• `get` **sprite**(): [`GUISprite`](GUISprite.md)
+
+#### Returns
+
+[`GUISprite`](GUISprite.md)
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L91)
+
+• `set` **sprite**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GUISprite`](GUISprite.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:95](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L95)
+
+___
+
+### left
+
+• `get` **left**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L102)
+
+___
+
+### right
+
+• `get` **right**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L106)
+
+___
+
+### top
+
+• `get` **top**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L110)
+
+___
+
+### bottom
+
+• `get` **bottom**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L114)
+
+## Methods
+
+### recycleQuad
+
+▸ **recycleQuad**(`quad`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `quad` | [`GUIQuad`](GUIQuad.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L46)
+
+___
+
+### spawnQuad
+
+▸ **spawnQuad**(): [`GUIQuad`](GUIQuad.md)
+
+#### Returns
+
+[`GUIQuad`](GUIQuad.md)
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L56)
+
+___
+
+### setSize
+
+▸ **setSize**(`width`, `height`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `width` | `number` |
+| `height` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L118)
+
+___
+
+### setXY
+
+▸ **setXY**(`x`, `y`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L124)
+
+___
+
+### setAttrChange
+
+▸ **setAttrChange**(`attr`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attr` | `GUIQuadAttrEnum` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:130](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L130)
+
+___
+
+### applyTransform
+
+▸ **applyTransform**(`transform`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `transform` | [`UITransform`](UITransform.md) |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L133)
+
+___
+
+### writeToGeometry
+
+▸ **writeToGeometry**(`guiGeometry`, `transform`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `guiGeometry` | [`GUIGeometry`](GUIGeometry.md) |
+| `transform` | [`UITransform`](UITransform.md) |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/components/gui/core/GUIQuad.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIQuad.ts#L178)
diff --git a/docs/api/classes/GUIRenderer.md b/docs/api/classes/GUIRenderer.md
new file mode 100644
index 00000000..d1b82dfa
--- /dev/null
+++ b/docs/api/classes/GUIRenderer.md
@@ -0,0 +1,1469 @@
+# Class: GUIRenderer
+
+GUI Renderer
+Used to update Geometry and Buffer.
+
+## Hierarchy
+
+- [`MeshRenderer`](MeshRenderer.md)
+
+ ↳ **`GUIRenderer`**
+
+### Constructors
+
+- [constructor](GUIRenderer.md#constructor)
+
+### Properties
+
+- [object3D](GUIRenderer.md#object3d)
+- [isDestroyed](GUIRenderer.md#isdestroyed)
+- [receiveShadow](GUIRenderer.md#receiveshadow)
+- [morphData](GUIRenderer.md#morphdata)
+- [instanceCount](GUIRenderer.md#instancecount)
+- [lodLevel](GUIRenderer.md#lodlevel)
+- [alwaysRender](GUIRenderer.md#alwaysrender)
+- [instanceID](GUIRenderer.md#instanceid)
+- [drawType](GUIRenderer.md#drawtype)
+- [isRenderOrderChange](GUIRenderer.md#isrenderorderchange)
+- [needSortOnCameraZ](GUIRenderer.md#needsortoncameraz)
+- [isRecievePostEffectUI](GUIRenderer.md#isrecieveposteffectui)
+
+### Accessors
+
+- [eventDispatcher](GUIRenderer.md#eventdispatcher)
+- [isStart](GUIRenderer.md#isstart)
+- [transform](GUIRenderer.md#transform)
+- [enable](GUIRenderer.md#enable)
+- [geometry](GUIRenderer.md#geometry)
+- [material](GUIRenderer.md#material)
+- [renderLayer](GUIRenderer.md#renderlayer)
+- [rendererMask](GUIRenderer.md#renderermask)
+- [renderOrder](GUIRenderer.md#renderorder)
+- [materials](GUIRenderer.md#materials)
+- [castShadow](GUIRenderer.md#castshadow)
+- [castGI](GUIRenderer.md#castgi)
+- [castReflection](GUIRenderer.md#castreflection)
+
+### Methods
+
+- [start](GUIRenderer.md#start)
+- [stop](GUIRenderer.md#stop)
+- [onLateUpdate](GUIRenderer.md#onlateupdate)
+- [onBeforeUpdate](GUIRenderer.md#onbeforeupdate)
+- [onGraphic](GUIRenderer.md#ongraphic)
+- [onParentChange](GUIRenderer.md#onparentchange)
+- [onAddChild](GUIRenderer.md#onaddchild)
+- [onRemoveChild](GUIRenderer.md#onremovechild)
+- [init](GUIRenderer.md#init)
+- [onUpdate](GUIRenderer.md#onupdate)
+- [onEnable](GUIRenderer.md#onenable)
+- [onDisable](GUIRenderer.md#ondisable)
+- [cloneTo](GUIRenderer.md#cloneto)
+- [copyComponent](GUIRenderer.md#copycomponent)
+- [setMorphInfluence](GUIRenderer.md#setmorphinfluence)
+- [setMorphInfluenceIndex](GUIRenderer.md#setmorphinfluenceindex)
+- [onCompute](GUIRenderer.md#oncompute)
+- [destroy](GUIRenderer.md#destroy)
+- [attachSceneOctree](GUIRenderer.md#attachsceneoctree)
+- [detachSceneOctree](GUIRenderer.md#detachsceneoctree)
+- [addMask](GUIRenderer.md#addmask)
+- [removeMask](GUIRenderer.md#removemask)
+- [hasMask](GUIRenderer.md#hasmask)
+- [addRendererMask](GUIRenderer.md#addrenderermask)
+- [removeRendererMask](GUIRenderer.md#removerenderermask)
+- [selfCloneMaterials](GUIRenderer.md#selfclonematerials)
+- [renderPass](GUIRenderer.md#renderpass)
+- [renderPass2](GUIRenderer.md#renderpass2)
+- [recordRenderPass2](GUIRenderer.md#recordrenderpass2)
+- [preInit](GUIRenderer.md#preinit)
+- [beforeDestroy](GUIRenderer.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new GUIRenderer**(): [`GUIRenderer`](GUIRenderer.md)
+
+#### Returns
+
+[`GUIRenderer`](GUIRenderer.md)
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[constructor](MeshRenderer.md#constructor)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L26)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[object3D](MeshRenderer.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[isDestroyed](MeshRenderer.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### receiveShadow
+
+• **receiveShadow**: `boolean`
+
+Enabling this option allows the grid to display any shadows cast on the grid.
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[receiveShadow](MeshRenderer.md#receiveshadow)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L23)
+
+___
+
+### morphData
+
+• **morphData**: [`MorphTargetData`](MorphTargetData.md)
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[morphData](MeshRenderer.md#morphdata)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L24)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[instanceCount](MeshRenderer.md#instancecount)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[lodLevel](MeshRenderer.md#lodlevel)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[alwaysRender](MeshRenderer.md#alwaysrender)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[instanceID](MeshRenderer.md#instanceid)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[drawType](MeshRenderer.md#drawtype)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[isRenderOrderChange](MeshRenderer.md#isrenderorderchange)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[needSortOnCameraZ](MeshRenderer.md#needsortoncameraz)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[isRecievePostEffectUI](MeshRenderer.md#isrecieveposteffectui)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+MeshRenderer.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### geometry
+
+• `get` **geometry**(): [`GeometryBase`](GeometryBase.md)
+
+The geometry of the mesh determines its shape
+
+#### Returns
+
+[`GeometryBase`](GeometryBase.md)
+
+#### Overrides
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/gui/core/GUIRenderer.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIRenderer.ts#L36)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryBase`](GeometryBase.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/gui/core/GUIRenderer.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIRenderer.ts#L39)
+
+___
+
+### material
+
+• `get` **material**(): [`Material`](Material.md)
+
+material
+
+#### Returns
+
+[`Material`](Material.md)
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L99)
+
+• `set` **material**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Material`](Material.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L103)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): [`Material`](Material.md)[]
+
+#### Returns
+
+[`Material`](Material.md)[]
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Material`](Material.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+## Methods
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[start](MeshRenderer.md#start)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[stop](MeshRenderer.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onLateUpdate](MeshRenderer.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onBeforeUpdate](MeshRenderer.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onGraphic](MeshRenderer.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onParentChange](MeshRenderer.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onAddChild](MeshRenderer.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onRemoveChild](MeshRenderer.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+init renderer
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[MeshRenderer](MeshRenderer.md).[init](MeshRenderer.md#init)
+
+#### Defined in
+
+[src/components/gui/core/GUIRenderer.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIRenderer.ts#L23)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[MeshRenderer](MeshRenderer.md).[onUpdate](MeshRenderer.md#onupdate)
+
+#### Defined in
+
+[src/components/gui/core/GUIRenderer.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIRenderer.ts#L72)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onEnable](MeshRenderer.md#onenable)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L30)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onDisable](MeshRenderer.md#ondisable)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L34)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[cloneTo](MeshRenderer.md#cloneto)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L38)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[copyComponent](MeshRenderer.md#copycomponent)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L43)
+
+___
+
+### setMorphInfluence
+
+▸ **setMorphInfluence**(`key`, `value`): `void`
+
+Set deformation animation parameters
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[setMorphInfluence](MeshRenderer.md#setmorphinfluence)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L110)
+
+___
+
+### setMorphInfluenceIndex
+
+▸ **setMorphInfluenceIndex**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[setMorphInfluenceIndex](MeshRenderer.md#setmorphinfluenceindex)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view`, `command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onCompute](MeshRenderer.md#oncompute)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L128)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[destroy](MeshRenderer.md#destroy)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L157)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | [`Octree`](Octree.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[attachSceneOctree](MeshRenderer.md#attachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[detachSceneOctree](MeshRenderer.md#detachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[addMask](MeshRenderer.md#addmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[removeMask](MeshRenderer.md#removemask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[hasMask](MeshRenderer.md#hasmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[addRendererMask](MeshRenderer.md#addrenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[removeRendererMask](MeshRenderer.md#removerenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[selfCloneMaterials](MeshRenderer.md#selfclonematerials)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `passType` | `PassType` |
+| `renderContext` | [`RenderContext`](RenderContext.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[renderPass](MeshRenderer.md#renderpass)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L370)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+render pass at passType
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[renderPass2](MeshRenderer.md#renderpass2)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L438)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[recordRenderPass2](MeshRenderer.md#recordrenderpass2)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[preInit](MeshRenderer.md#preinit)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[beforeDestroy](MeshRenderer.md#beforedestroy)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
diff --git a/docs/api/classes/GUIShader.md b/docs/api/classes/GUIShader.md
new file mode 100644
index 00000000..4acbf0fc
--- /dev/null
+++ b/docs/api/classes/GUIShader.md
@@ -0,0 +1,42 @@
+# Class: GUIShader
+
+shader code
+
+### Constructors
+
+- [constructor](GUIShader.md#constructor)
+
+### Properties
+
+- [GUI\_shader\_view](GUIShader.md#gui_shader_view)
+- [GUI\_shader\_world](GUIShader.md#gui_shader_world)
+
+## Constructors
+
+### constructor
+
+• **new GUIShader**(): [`GUIShader`](GUIShader.md)
+
+#### Returns
+
+[`GUIShader`](GUIShader.md)
+
+## Properties
+
+### GUI\_shader\_view
+
+▪ `Static` `Readonly` **GUI\_shader\_view**: `string`
+
+#### Defined in
+
+[src/components/gui/core/GUIShader.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIShader.ts#L240)
+
+___
+
+### GUI\_shader\_world
+
+▪ `Static` `Readonly` **GUI\_shader\_world**: `string`
+
+#### Defined in
+
+[src/components/gui/core/GUIShader.ts:275](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUIShader.ts#L275)
diff --git a/docs/api/classes/GUISprite.md b/docs/api/classes/GUISprite.md
new file mode 100644
index 00000000..d0df8a70
--- /dev/null
+++ b/docs/api/classes/GUISprite.md
@@ -0,0 +1,173 @@
+# Class: GUISprite
+
+Sprites are simple 2D objects with graphical images
+
+### Constructors
+
+- [constructor](GUISprite.md#constructor)
+
+### Properties
+
+- [id](GUISprite.md#id)
+- [guiTexture](GUISprite.md#guitexture)
+- [uvRec](GUISprite.md#uvrec)
+- [uvBorder](GUISprite.md#uvborder)
+- [offsetSize](GUISprite.md#offsetsize)
+- [borderSize](GUISprite.md#bordersize)
+- [trimSize](GUISprite.md#trimsize)
+- [isSliced](GUISprite.md#issliced)
+- [height](GUISprite.md#height)
+- [width](GUISprite.md#width)
+- [xadvance](GUISprite.md#xadvance)
+- [xoffset](GUISprite.md#xoffset)
+- [yoffset](GUISprite.md#yoffset)
+
+## Constructors
+
+### constructor
+
+• **new GUISprite**(`texture?`): [`GUISprite`](GUISprite.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture?` | `GUITexture` |
+
+#### Returns
+
+[`GUISprite`](GUISprite.md)
+
+#### Defined in
+
+[src/components/gui/core/GUISprite.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUISprite.ts#L30)
+
+## Properties
+
+### id
+
+• **id**: `string`
+
+#### Defined in
+
+[src/components/gui/core/GUISprite.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUISprite.ts#L11)
+
+___
+
+### guiTexture
+
+• **guiTexture**: `GUITexture`
+
+#### Defined in
+
+[src/components/gui/core/GUISprite.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUISprite.ts#L12)
+
+___
+
+### uvRec
+
+• **uvRec**: `Vector4`
+
+#### Defined in
+
+[src/components/gui/core/GUISprite.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUISprite.ts#L15)
+
+___
+
+### uvBorder
+
+• **uvBorder**: `Vector4`
+
+#### Defined in
+
+[src/components/gui/core/GUISprite.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUISprite.ts#L16)
+
+___
+
+### offsetSize
+
+• **offsetSize**: `Vector4`
+
+#### Defined in
+
+[src/components/gui/core/GUISprite.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUISprite.ts#L18)
+
+___
+
+### borderSize
+
+• **borderSize**: `Vector4`
+
+#### Defined in
+
+[src/components/gui/core/GUISprite.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUISprite.ts#L19)
+
+___
+
+### trimSize
+
+• **trimSize**: [`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/components/gui/core/GUISprite.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUISprite.ts#L21)
+
+___
+
+### isSliced
+
+• **isSliced**: `boolean` = `false`
+
+#### Defined in
+
+[src/components/gui/core/GUISprite.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUISprite.ts#L22)
+
+___
+
+### height
+
+• **height**: `number` = `4`
+
+#### Defined in
+
+[src/components/gui/core/GUISprite.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUISprite.ts#L23)
+
+___
+
+### width
+
+• **width**: `number` = `4`
+
+#### Defined in
+
+[src/components/gui/core/GUISprite.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUISprite.ts#L24)
+
+___
+
+### xadvance
+
+• **xadvance**: `number` = `0`
+
+#### Defined in
+
+[src/components/gui/core/GUISprite.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUISprite.ts#L26)
+
+___
+
+### xoffset
+
+• **xoffset**: `number` = `0`
+
+#### Defined in
+
+[src/components/gui/core/GUISprite.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUISprite.ts#L27)
+
+___
+
+### yoffset
+
+• **yoffset**: `number` = `0`
+
+#### Defined in
+
+[src/components/gui/core/GUISprite.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/core/GUISprite.ts#L28)
diff --git a/docs/api/classes/GeoJsonParser.md b/docs/api/classes/GeoJsonParser.md
new file mode 100644
index 00000000..6c3bf624
--- /dev/null
+++ b/docs/api/classes/GeoJsonParser.md
@@ -0,0 +1,282 @@
+# Class: GeoJsonParser
+
+## Hierarchy
+
+- `ParserBase`
+
+ ↳ **`GeoJsonParser`**
+
+### Constructors
+
+- [constructor](GeoJsonParser.md#constructor)
+
+### Properties
+
+- [format](GeoJsonParser.md#format)
+- [baseUrl](GeoJsonParser.md#baseurl)
+- [initUrl](GeoJsonParser.md#initurl)
+- [loaderFunctions](GeoJsonParser.md#loaderfunctions)
+- [userData](GeoJsonParser.md#userdata)
+- [data](GeoJsonParser.md#data)
+- [json](GeoJsonParser.md#json)
+
+### Methods
+
+- [parseJson](GeoJsonParser.md#parsejson)
+- [parseBuffer](GeoJsonParser.md#parsebuffer)
+- [parseTexture](GeoJsonParser.md#parsetexture)
+- [parse](GeoJsonParser.md#parse)
+- [verification](GeoJsonParser.md#verification)
+- [parseString](GeoJsonParser.md#parsestring)
+
+## Constructors
+
+### constructor
+
+• **new GeoJsonParser**(): [`GeoJsonParser`](GeoJsonParser.md)
+
+#### Returns
+
+[`GeoJsonParser`](GeoJsonParser.md)
+
+#### Inherited from
+
+ParserBase.constructor
+
+## Properties
+
+### format
+
+▪ `Static` **format**: [`ParserFormat`](../enums/ParserFormat.md) = `ParserFormat.JSON`
+
+#### Overrides
+
+ParserBase.format
+
+#### Defined in
+
+[src/loader/parser/gis/GeoJsonParser.ts:33](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gis/GeoJsonParser.ts#L33)
+
+___
+
+### baseUrl
+
+• **baseUrl**: `string`
+
+#### Inherited from
+
+ParserBase.baseUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L11)
+
+___
+
+### initUrl
+
+• **initUrl**: `string`
+
+#### Inherited from
+
+ParserBase.initUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L12)
+
+___
+
+### loaderFunctions
+
+• `Optional` **loaderFunctions**: [`LoaderFunctions`](../types/LoaderFunctions.md)
+
+#### Inherited from
+
+ParserBase.loaderFunctions
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L13)
+
+___
+
+### userData
+
+• `Optional` **userData**: `any`
+
+#### Inherited from
+
+ParserBase.userData
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L14)
+
+___
+
+### data
+
+• **data**: `any`
+
+#### Inherited from
+
+ParserBase.data
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L15)
+
+___
+
+### json
+
+• **json**: `string`
+
+#### Defined in
+
+[src/loader/parser/gis/GeoJsonParser.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gis/GeoJsonParser.ts#L34)
+
+## Methods
+
+### parseJson
+
+▸ **parseJson**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `object` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseJson
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L19)
+
+___
+
+### parseBuffer
+
+▸ **parseBuffer**(`buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseBuffer
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L21)
+
+___
+
+### parseTexture
+
+▸ **parseTexture**(`buffer`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+ParserBase.parseTexture
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L23)
+
+___
+
+### parse
+
+▸ **parse**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parse
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L27)
+
+___
+
+### verification
+
+▸ **verification**(`ret`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ret` | `void` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ParserBase.verification
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L29)
+
+___
+
+### parseString
+
+▸ **parseString**(`data`): `Promise`\<`void`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `any` |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Overrides
+
+ParserBase.parseString
+
+#### Defined in
+
+[src/loader/parser/gis/GeoJsonParser.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gis/GeoJsonParser.ts#L35)
diff --git a/docs/api/classes/GeoJsonUtil.md b/docs/api/classes/GeoJsonUtil.md
new file mode 100644
index 00000000..bb2f70a8
--- /dev/null
+++ b/docs/api/classes/GeoJsonUtil.md
@@ -0,0 +1,39 @@
+# Class: GeoJsonUtil
+
+### Constructors
+
+- [constructor](GeoJsonUtil.md#constructor)
+
+### Methods
+
+- [getPath](GeoJsonUtil.md#getpath)
+
+## Constructors
+
+### constructor
+
+• **new GeoJsonUtil**(): [`GeoJsonUtil`](GeoJsonUtil.md)
+
+#### Returns
+
+[`GeoJsonUtil`](GeoJsonUtil.md)
+
+## Methods
+
+### getPath
+
+▸ **getPath**(`data`): [`Vector3`](Vector3.md)[][]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | [`GeoJsonStruct`](../interfaces/GeoJsonStruct.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)[][]
+
+#### Defined in
+
+[src/loader/parser/gis/GeoJsonUtil.ts.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gis/GeoJsonUtil.ts.ts#L7)
diff --git a/docs/api/classes/GeometryBase.md b/docs/api/classes/GeometryBase.md
new file mode 100644
index 00000000..693d68a6
--- /dev/null
+++ b/docs/api/classes/GeometryBase.md
@@ -0,0 +1,504 @@
+# Class: GeometryBase
+
+## Hierarchy
+
+- **`GeometryBase`**
+
+ ↳ [`GUIGeometry`](GUIGeometry.md)
+
+ ↳ [`ExtrudeGeometry`](ExtrudeGeometry.md)
+
+ ↳ [`BoxGeometry`](BoxGeometry.md)
+
+ ↳ [`CylinderGeometry`](CylinderGeometry.md)
+
+ ↳ [`PlaneGeometry`](PlaneGeometry.md)
+
+ ↳ [`SphereGeometry`](SphereGeometry.md)
+
+ ↳ [`StripeGeometry`](StripeGeometry.md)
+
+ ↳ [`TorusGeometry`](TorusGeometry.md)
+
+ ↳ [`TrailGeometry`](TrailGeometry.md)
+
+ ↳ [`TriGeometry`](TriGeometry.md)
+
+### Constructors
+
+- [constructor](GeometryBase.md#constructor)
+
+### Properties
+
+- [instanceID](GeometryBase.md#instanceid)
+- [name](GeometryBase.md#name)
+- [subGeometries](GeometryBase.md#subgeometries)
+- [morphTargetsRelative](GeometryBase.md#morphtargetsrelative)
+- [morphTargetDictionary](GeometryBase.md#morphtargetdictionary)
+- [skinNames](GeometryBase.md#skinnames)
+- [bindPose](GeometryBase.md#bindpose)
+- [blendShapeData](GeometryBase.md#blendshapedata)
+- [vertexDim](GeometryBase.md#vertexdim)
+- [vertexCount](GeometryBase.md#vertexcount)
+
+### Accessors
+
+- [indicesBuffer](GeometryBase.md#indicesbuffer)
+- [vertexBuffer](GeometryBase.md#vertexbuffer)
+- [vertexAttributes](GeometryBase.md#vertexattributes)
+- [vertexAttributeMap](GeometryBase.md#vertexattributemap)
+- [geometryType](GeometryBase.md#geometrytype)
+- [bounds](GeometryBase.md#bounds)
+
+### Methods
+
+- [addSubGeometry](GeometryBase.md#addsubgeometry)
+- [generate](GeometryBase.md#generate)
+- [setIndices](GeometryBase.md#setindices)
+- [setAttribute](GeometryBase.md#setattribute)
+- [getAttribute](GeometryBase.md#getattribute)
+- [hasAttribute](GeometryBase.md#hasattribute)
+- [genWireframe](GeometryBase.md#genwireframe)
+- [compute](GeometryBase.md#compute)
+- [computeNormals](GeometryBase.md#computenormals)
+- [isPrimitive](GeometryBase.md#isprimitive)
+- [destroy](GeometryBase.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new GeometryBase**(): [`GeometryBase`](GeometryBase.md)
+
+#### Returns
+
+[`GeometryBase`](GeometryBase.md)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L58)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L39)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L40)
+
+___
+
+### subGeometries
+
+• **subGeometries**: [`SubGeometry`](SubGeometry.md)[] = `[]`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L41)
+
+___
+
+### morphTargetsRelative
+
+• **morphTargetsRelative**: `boolean`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L42)
+
+___
+
+### morphTargetDictionary
+
+• **morphTargetDictionary**: `Object`
+
+#### Index signature
+
+▪ [blenderName: `string`]: `number`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L43)
+
+___
+
+### skinNames
+
+• **skinNames**: `string`[]
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L44)
+
+___
+
+### bindPose
+
+• **bindPose**: [`Matrix4`](Matrix4.md)[]
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L45)
+
+___
+
+### blendShapeData
+
+• **blendShapeData**: [`BlendShapeData`](BlendShapeData.md)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L46)
+
+___
+
+### vertexDim
+
+• **vertexDim**: `number`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L47)
+
+___
+
+### vertexCount
+
+• **vertexCount**: `number` = `0`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L48)
+
+## Accessors
+
+### indicesBuffer
+
+• `get` **indicesBuffer**(): [`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Returns
+
+[`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L69)
+
+___
+
+### vertexBuffer
+
+• `get` **vertexBuffer**(): [`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Returns
+
+[`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L73)
+
+___
+
+### vertexAttributes
+
+• `get` **vertexAttributes**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L77)
+
+___
+
+### vertexAttributeMap
+
+• `get` **vertexAttributeMap**(): `Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Returns
+
+`Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L81)
+
+___
+
+### geometryType
+
+• `get` **geometryType**(): [`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Returns
+
+[`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L85)
+
+• `set` **geometryType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryVertexType`](../enums/GeometryVertexType.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L88)
+
+___
+
+### bounds
+
+• `get` **bounds**(): `BoundingBox`
+
+#### Returns
+
+`BoundingBox`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L92)
+
+• `set` **bounds**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BoundingBox` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L135)
+
+## Methods
+
+### addSubGeometry
+
+▸ **addSubGeometry**(`...lodLevels`): [`SubGeometry`](SubGeometry.md)
+
+add subGeometry from lod level
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `...lodLevels` | [`LODDescriptor`](../types/LODDescriptor.md)[] |
+
+#### Returns
+
+[`SubGeometry`](SubGeometry.md)
+
+**`See`**
+
+LODDescriptor
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L144)
+
+___
+
+### generate
+
+▸ **generate**(`shaderReflection`): `void`
+
+create geometry by shaderReflection
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `shaderReflection` | `ShaderReflection` | ShaderReflection |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L155)
+
+___
+
+### setIndices
+
+▸ **setIndices**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L165)
+
+___
+
+### setAttribute
+
+▸ **setAttribute**(`attribute`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L177)
+
+___
+
+### getAttribute
+
+▸ **getAttribute**(`attribute`): [`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+[`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L190)
+
+___
+
+### hasAttribute
+
+▸ **hasAttribute**(`attribute`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L194)
+
+___
+
+### genWireframe
+
+▸ **genWireframe**(): [`Vector3`](Vector3.md)[]
+
+#### Returns
+
+[`Vector3`](Vector3.md)[]
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L198)
+
+___
+
+### compute
+
+▸ **compute**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L251)
+
+___
+
+### computeNormals
+
+▸ **computeNormals**(): `this`
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:270](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L270)
+
+___
+
+### isPrimitive
+
+▸ **isPrimitive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L312)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:316](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L316)
diff --git a/docs/api/classes/GeometryIndicesBuffer.md b/docs/api/classes/GeometryIndicesBuffer.md
new file mode 100644
index 00000000..8e81064a
--- /dev/null
+++ b/docs/api/classes/GeometryIndicesBuffer.md
@@ -0,0 +1,152 @@
+# Class: GeometryIndicesBuffer
+
+### Constructors
+
+- [constructor](GeometryIndicesBuffer.md#constructor)
+
+### Properties
+
+- [uuid](GeometryIndicesBuffer.md#uuid)
+- [name](GeometryIndicesBuffer.md#name)
+- [indicesGPUBuffer](GeometryIndicesBuffer.md#indicesgpubuffer)
+- [indicesFormat](GeometryIndicesBuffer.md#indicesformat)
+- [indicesCount](GeometryIndicesBuffer.md#indicescount)
+
+### Methods
+
+- [createIndicesBuffer](GeometryIndicesBuffer.md#createindicesbuffer)
+- [upload](GeometryIndicesBuffer.md#upload)
+- [compute](GeometryIndicesBuffer.md#compute)
+- [destroy](GeometryIndicesBuffer.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new GeometryIndicesBuffer**(): [`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Returns
+
+[`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Defined in
+
+[src/core/geometry/GeometryIndicesBuffer.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryIndicesBuffer.ts#L13)
+
+## Properties
+
+### uuid
+
+• **uuid**: `string` = `''`
+
+#### Defined in
+
+[src/core/geometry/GeometryIndicesBuffer.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryIndicesBuffer.ts#L8)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Defined in
+
+[src/core/geometry/GeometryIndicesBuffer.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryIndicesBuffer.ts#L9)
+
+___
+
+### indicesGPUBuffer
+
+• **indicesGPUBuffer**: [`IndicesGPUBuffer`](IndicesGPUBuffer.md)
+
+#### Defined in
+
+[src/core/geometry/GeometryIndicesBuffer.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryIndicesBuffer.ts#L10)
+
+___
+
+### indicesFormat
+
+• **indicesFormat**: `GPUIndexFormat`
+
+#### Defined in
+
+[src/core/geometry/GeometryIndicesBuffer.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryIndicesBuffer.ts#L11)
+
+___
+
+### indicesCount
+
+• **indicesCount**: `number` = `0`
+
+#### Defined in
+
+[src/core/geometry/GeometryIndicesBuffer.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryIndicesBuffer.ts#L12)
+
+## Methods
+
+### createIndicesBuffer
+
+▸ **createIndicesBuffer**(`indicesData`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `indicesData` | [`VertexAttributeData`](../types/VertexAttributeData.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/geometry/GeometryIndicesBuffer.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryIndicesBuffer.ts#L16)
+
+___
+
+### upload
+
+▸ **upload**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/geometry/GeometryIndicesBuffer.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryIndicesBuffer.ts#L26)
+
+___
+
+### compute
+
+▸ **compute**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/geometry/GeometryIndicesBuffer.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryIndicesBuffer.ts#L31)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/geometry/GeometryIndicesBuffer.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryIndicesBuffer.ts#L35)
diff --git a/docs/api/classes/GeometryVertexBuffer.md b/docs/api/classes/GeometryVertexBuffer.md
new file mode 100644
index 00000000..9bceacff
--- /dev/null
+++ b/docs/api/classes/GeometryVertexBuffer.md
@@ -0,0 +1,177 @@
+# Class: GeometryVertexBuffer
+
+### Constructors
+
+- [constructor](GeometryVertexBuffer.md#constructor)
+
+### Properties
+
+- [vertexCount](GeometryVertexBuffer.md#vertexcount)
+- [vertexGPUBuffer](GeometryVertexBuffer.md#vertexgpubuffer)
+- [geometryType](GeometryVertexBuffer.md#geometrytype)
+
+### Accessors
+
+- [vertexBufferLayouts](GeometryVertexBuffer.md#vertexbufferlayouts)
+
+### Methods
+
+- [createVertexBuffer](GeometryVertexBuffer.md#createvertexbuffer)
+- [upload](GeometryVertexBuffer.md#upload)
+- [updateAttributes](GeometryVertexBuffer.md#updateattributes)
+- [compute](GeometryVertexBuffer.md#compute)
+- [destroy](GeometryVertexBuffer.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new GeometryVertexBuffer**(): [`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Returns
+
+[`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Defined in
+
+[src/core/geometry/GeometryVertexBuffer.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryVertexBuffer.ts#L19)
+
+## Properties
+
+### vertexCount
+
+• **vertexCount**: `number` = `0`
+
+#### Defined in
+
+[src/core/geometry/GeometryVertexBuffer.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryVertexBuffer.ts#L12)
+
+___
+
+### vertexGPUBuffer
+
+• **vertexGPUBuffer**: [`VertexGPUBuffer`](VertexGPUBuffer.md)
+
+#### Defined in
+
+[src/core/geometry/GeometryVertexBuffer.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryVertexBuffer.ts#L13)
+
+___
+
+### geometryType
+
+• **geometryType**: [`GeometryVertexType`](../enums/GeometryVertexType.md) = `GeometryVertexType.compose`
+
+#### Defined in
+
+[src/core/geometry/GeometryVertexBuffer.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryVertexBuffer.ts#L14)
+
+## Accessors
+
+### vertexBufferLayouts
+
+• `get` **vertexBufferLayouts**(): [`VertexBufferLayout`](VertexBufferLayout.md)[]
+
+#### Returns
+
+[`VertexBufferLayout`](VertexBufferLayout.md)[]
+
+#### Defined in
+
+[src/core/geometry/GeometryVertexBuffer.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryVertexBuffer.ts#L25)
+
+## Methods
+
+### createVertexBuffer
+
+▸ **createVertexBuffer**(`vertexDataInfos`, `shaderReflection`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `vertexDataInfos` | `Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\> |
+| `shaderReflection` | `ShaderReflection` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/geometry/GeometryVertexBuffer.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryVertexBuffer.ts#L29)
+
+___
+
+### upload
+
+▸ **upload**(`attribute`, `vertexDataInfo`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+| `vertexDataInfo` | [`VertexAttributeData`](../types/VertexAttributeData.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/geometry/GeometryVertexBuffer.ts:193](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryVertexBuffer.ts#L193)
+
+___
+
+### updateAttributes
+
+▸ **updateAttributes**(`vertexDataInfos`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `vertexDataInfos` | `Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\> |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/geometry/GeometryVertexBuffer.ts:222](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryVertexBuffer.ts#L222)
+
+___
+
+### compute
+
+▸ **compute**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/geometry/GeometryVertexBuffer.ts:261](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryVertexBuffer.ts#L261)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/geometry/GeometryVertexBuffer.ts:265](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryVertexBuffer.ts#L265)
diff --git a/docs/api/classes/GlassMaterial.md b/docs/api/classes/GlassMaterial.md
new file mode 100644
index 00000000..c36c48d5
--- /dev/null
+++ b/docs/api/classes/GlassMaterial.md
@@ -0,0 +1,1079 @@
+# Class: GlassMaterial
+
+GlassMaterial
+an rendering material implemented by simulating glass surfaces
+
+## Hierarchy
+
+- [`Material`](Material.md)
+
+ ↳ **`GlassMaterial`**
+
+### Constructors
+
+- [constructor](GlassMaterial.md#constructor)
+
+### Properties
+
+- [instanceID](GlassMaterial.md#instanceid)
+- [name](GlassMaterial.md#name)
+- [enable](GlassMaterial.md#enable)
+
+### Accessors
+
+- [shader](GlassMaterial.md#shader)
+- [doubleSide](GlassMaterial.md#doubleside)
+- [castShadow](GlassMaterial.md#castshadow)
+- [acceptShadow](GlassMaterial.md#acceptshadow)
+- [castReflection](GlassMaterial.md#castreflection)
+- [blendMode](GlassMaterial.md#blendmode)
+- [depthCompare](GlassMaterial.md#depthcompare)
+- [transparent](GlassMaterial.md#transparent)
+- [cullMode](GlassMaterial.md#cullmode)
+- [depthWriteEnabled](GlassMaterial.md#depthwriteenabled)
+- [useBillboard](GlassMaterial.md#usebillboard)
+
+### Methods
+
+- [getPass](GlassMaterial.md#getpass)
+- [getAllPass](GlassMaterial.md#getallpass)
+- [clone](GlassMaterial.md#clone)
+- [destroy](GlassMaterial.md#destroy)
+- [setDefine](GlassMaterial.md#setdefine)
+- [setTexture](GlassMaterial.md#settexture)
+- [setStorageBuffer](GlassMaterial.md#setstoragebuffer)
+- [setUniformBuffer](GlassMaterial.md#setuniformbuffer)
+- [setUniformFloat](GlassMaterial.md#setuniformfloat)
+- [setUniformVector2](GlassMaterial.md#setuniformvector2)
+- [setUniformVector3](GlassMaterial.md#setuniformvector3)
+- [setUniformVector4](GlassMaterial.md#setuniformvector4)
+- [setUniformColor](GlassMaterial.md#setuniformcolor)
+- [getUniformFloat](GlassMaterial.md#getuniformfloat)
+- [getUniformV2](GlassMaterial.md#getuniformv2)
+- [getUniformV3](GlassMaterial.md#getuniformv3)
+- [getUniformV4](GlassMaterial.md#getuniformv4)
+- [getUniformColor](GlassMaterial.md#getuniformcolor)
+- [getTexture](GlassMaterial.md#gettexture)
+- [getStorageBuffer](GlassMaterial.md#getstoragebuffer)
+- [getStructStorageBuffer](GlassMaterial.md#getstructstoragebuffer)
+- [getUniformBuffer](GlassMaterial.md#getuniformbuffer)
+- [applyUniform](GlassMaterial.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new GlassMaterial**(): [`GlassMaterial`](GlassMaterial.md)
+
+#### Returns
+
+[`GlassMaterial`](GlassMaterial.md)
+
+#### Overrides
+
+[Material](Material.md).[constructor](Material.md#constructor)
+
+#### Defined in
+
+[src/materials/GlassMaterial.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/GlassMaterial.ts#L19)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+Material Unique Identifier
+
+#### Inherited from
+
+[Material](Material.md).[instanceID](Material.md#instanceid)
+
+#### Defined in
+
+[src/materials/Material.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L19)
+
+___
+
+### name
+
+• **name**: `string`
+
+name of this material
+
+#### Inherited from
+
+[Material](Material.md).[name](Material.md#name)
+
+#### Defined in
+
+[src/materials/Material.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L25)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+[Material](Material.md).[enable](Material.md#enable)
+
+#### Defined in
+
+[src/materials/Material.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L27)
+
+## Accessors
+
+### shader
+
+• `get` **shader**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L41)
+
+• `set` **shader**(`shader`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shader` | [`Shader`](Shader.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L36)
+
+___
+
+### doubleSide
+
+• `get` **doubleSide**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L45)
+
+• `set` **doubleSide**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L49)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L53)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L57)
+
+___
+
+### acceptShadow
+
+• `get` **acceptShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L64)
+
+• `set` **acceptShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L68)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L77)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L81)
+
+___
+
+### blendMode
+
+• `get` **blendMode**(): [`BlendMode`](../enums/BlendMode.md)
+
+#### Returns
+
+[`BlendMode`](../enums/BlendMode.md)
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L85)
+
+• `set` **blendMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`BlendMode`](../enums/BlendMode.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L89)
+
+___
+
+### depthCompare
+
+• `get` **depthCompare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L93)
+
+• `set` **depthCompare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L97)
+
+___
+
+### transparent
+
+• `get` **transparent**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L102)
+
+• `set` **transparent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L106)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L113)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L117)
+
+___
+
+### depthWriteEnabled
+
+• `get` **depthWriteEnabled**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L128)
+
+• `set` **depthWriteEnabled**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L132)
+
+___
+
+### useBillboard
+
+• `set` **useBillboard**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.useBillboard
+
+#### Defined in
+
+[src/materials/Material.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L136)
+
+## Methods
+
+### getPass
+
+▸ **getPass**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get render pass by renderType
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getPass](Material.md#getpass)
+
+#### Defined in
+
+[src/materials/Material.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L145)
+
+___
+
+### getAllPass
+
+▸ **getAllPass**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get all color render pass
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getAllPass](Material.md#getallpass)
+
+#### Defined in
+
+[src/materials/Material.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L153)
+
+___
+
+### clone
+
+▸ **clone**(): [`Material`](Material.md)
+
+clone one material
+
+#### Returns
+
+[`Material`](Material.md)
+
+Material
+
+#### Inherited from
+
+[Material](Material.md).[clone](Material.md#clone)
+
+#### Defined in
+
+[src/materials/Material.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L161)
+
+___
+
+### destroy
+
+▸ **destroy**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[destroy](Material.md#destroy)
+
+#### Defined in
+
+[src/materials/Material.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L168)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`define`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `define` | `string` |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setDefine](Material.md#setdefine)
+
+#### Defined in
+
+[src/materials/Material.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L174)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`propertyName`, `texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setTexture](Material.md#settexture)
+
+#### Defined in
+
+[src/materials/Material.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L178)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setStorageBuffer](Material.md#setstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L182)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformBuffer](Material.md#setuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L186)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformFloat](Material.md#setuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L191)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector2](Material.md#setuniformvector2)
+
+#### Defined in
+
+[src/materials/Material.ts:195](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L195)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector3](Material.md#setuniformvector3)
+
+#### Defined in
+
+[src/materials/Material.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L199)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector4](Material.md#setuniformvector4)
+
+#### Defined in
+
+[src/materials/Material.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L203)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformColor](Material.md#setuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L207)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`str`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformFloat](Material.md#getuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L211)
+
+___
+
+### getUniformV2
+
+▸ **getUniformV2**(`str`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV2](Material.md#getuniformv2)
+
+#### Defined in
+
+[src/materials/Material.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L215)
+
+___
+
+### getUniformV3
+
+▸ **getUniformV3**(`str`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV3](Material.md#getuniformv3)
+
+#### Defined in
+
+[src/materials/Material.ts:219](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L219)
+
+___
+
+### getUniformV4
+
+▸ **getUniformV4**(`str`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV4](Material.md#getuniformv4)
+
+#### Defined in
+
+[src/materials/Material.ts:223](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L223)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`str`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformColor](Material.md#getuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L227)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`str`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Material](Material.md).[getTexture](Material.md#gettexture)
+
+#### Defined in
+
+[src/materials/Material.ts:231](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L231)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`str`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Material](Material.md).[getStorageBuffer](Material.md#getstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:235](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L235)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getStructStorageBuffer](Material.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:239](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L239)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformBuffer](Material.md#getuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:243](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L243)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[applyUniform](Material.md#applyuniform)
+
+#### Defined in
+
+[src/materials/Material.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L247)
diff --git a/docs/api/classes/GlobalBindGroupLayout.md b/docs/api/classes/GlobalBindGroupLayout.md
new file mode 100644
index 00000000..97c1391e
--- /dev/null
+++ b/docs/api/classes/GlobalBindGroupLayout.md
@@ -0,0 +1,33 @@
+# Class: GlobalBindGroupLayout
+
+### Constructors
+
+- [constructor](GlobalBindGroupLayout.md#constructor)
+
+### Methods
+
+- [getGlobalDataBindGroupLayout](GlobalBindGroupLayout.md#getglobaldatabindgrouplayout)
+
+## Constructors
+
+### constructor
+
+• **new GlobalBindGroupLayout**(): [`GlobalBindGroupLayout`](GlobalBindGroupLayout.md)
+
+#### Returns
+
+[`GlobalBindGroupLayout`](GlobalBindGroupLayout.md)
+
+## Methods
+
+### getGlobalDataBindGroupLayout
+
+▸ **getGlobalDataBindGroupLayout**(): `GPUBindGroupLayout`
+
+#### Returns
+
+`GPUBindGroupLayout`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/bindGroups/GlobalBindGroupLayout.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/bindGroups/GlobalBindGroupLayout.ts#L6)
diff --git a/docs/api/classes/GlobalFog.md b/docs/api/classes/GlobalFog.md
new file mode 100644
index 00000000..6ed65564
--- /dev/null
+++ b/docs/api/classes/GlobalFog.md
@@ -0,0 +1,539 @@
+# Class: GlobalFog
+
+screen space fog
+
+## Hierarchy
+
+- `PostBase`
+
+ ↳ **`GlobalFog`**
+
+### Constructors
+
+- [constructor](GlobalFog.md#constructor)
+
+### Properties
+
+- [fogOpTexture](GlobalFog.md#fogoptexture)
+- [rtFrame](GlobalFog.md#rtframe)
+- [enable](GlobalFog.md#enable)
+- [postRenderer](GlobalFog.md#postrenderer)
+
+### Accessors
+
+- [fogType](GlobalFog.md#fogtype)
+- [fogHeightScale](GlobalFog.md#fogheightscale)
+- [start](GlobalFog.md#start)
+- [end](GlobalFog.md#end)
+- [ins](GlobalFog.md#ins)
+- [density](GlobalFog.md#density)
+- [skyRoughness](GlobalFog.md#skyroughness)
+- [skyFactor](GlobalFog.md#skyfactor)
+- [overrideSkyFactor](GlobalFog.md#overrideskyfactor)
+- [falloff](GlobalFog.md#falloff)
+- [rayLength](GlobalFog.md#raylength)
+- [scatteringExponent](GlobalFog.md#scatteringexponent)
+- [dirHeightLine](GlobalFog.md#dirheightline)
+
+### Methods
+
+- [onResize](GlobalFog.md#onresize)
+- [destroy](GlobalFog.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new GlobalFog**(): [`GlobalFog`](GlobalFog.md)
+
+#### Returns
+
+[`GlobalFog`](GlobalFog.md)
+
+#### Overrides
+
+PostBase.constructor
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L37)
+
+## Properties
+
+### fogOpTexture
+
+• **fogOpTexture**: `VirtualTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L32)
+
+___
+
+### rtFrame
+
+• **rtFrame**: [`RTFrame`](RTFrame.md)
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L91)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+PostBase.enable
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L20)
+
+___
+
+### postRenderer
+
+• **postRenderer**: `PostRenderer`
+
+#### Inherited from
+
+PostBase.postRenderer
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L21)
+
+## Accessors
+
+### fogType
+
+• `get` **fogType**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L118)
+
+• `set` **fogType**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L115)
+
+___
+
+### fogHeightScale
+
+• `get` **fogHeightScale**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L124)
+
+• `set` **fogHeightScale**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L121)
+
+___
+
+### start
+
+• `get` **start**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:130](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L130)
+
+• `set` **start**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:127](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L127)
+
+___
+
+### end
+
+• `get` **end**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L136)
+
+• `set` **end**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L133)
+
+___
+
+### ins
+
+• `get` **ins**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:142](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L142)
+
+• `set` **ins**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L139)
+
+___
+
+### density
+
+• `get` **density**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L148)
+
+• `set` **density**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L145)
+
+___
+
+### skyRoughness
+
+• `get` **skyRoughness**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:154](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L154)
+
+• `set` **skyRoughness**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:151](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L151)
+
+___
+
+### skyFactor
+
+• `get` **skyFactor**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L160)
+
+• `set` **skyFactor**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L157)
+
+___
+
+### overrideSkyFactor
+
+• `get` **overrideSkyFactor**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:167](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L167)
+
+• `set` **overrideSkyFactor**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L164)
+
+___
+
+### falloff
+
+• `get` **falloff**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:189](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L189)
+
+• `set` **falloff**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:185](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L185)
+
+___
+
+### rayLength
+
+• `get` **rayLength**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:197](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L197)
+
+• `set` **rayLength**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:193](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L193)
+
+___
+
+### scatteringExponent
+
+• `get` **scatteringExponent**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:205](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L205)
+
+• `set` **scatteringExponent**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:201](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L201)
+
+___
+
+### dirHeightLine
+
+• `get` **dirHeightLine**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:213](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L213)
+
+• `set` **dirHeightLine**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:209](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L209)
+
+## Methods
+
+### onResize
+
+▸ **onResize**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.onResize
+
+#### Defined in
+
+[src/gfx/renderJob/post/GlobalFog.ts:254](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GlobalFog.ts#L254)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PostBase.destroy
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L87)
diff --git a/docs/api/classes/GlobalIlluminationComponent.md b/docs/api/classes/GlobalIlluminationComponent.md
new file mode 100644
index 00000000..a79433a1
--- /dev/null
+++ b/docs/api/classes/GlobalIlluminationComponent.md
@@ -0,0 +1,625 @@
+# Class: GlobalIlluminationComponent
+
+Global illumination component.
+Use global illumination to achieve more realistic lighting.
+The global illumination system can model the way light reflects
+ or refracts on the surface to other surfaces (indirect lighting),
+ rather than limiting that light can only shine from the light
+ source to a certain surface.
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`GlobalIlluminationComponent`**
+
+### Constructors
+
+- [constructor](GlobalIlluminationComponent.md#constructor)
+
+### Properties
+
+- [object3D](GlobalIlluminationComponent.md#object3d)
+- [isDestroyed](GlobalIlluminationComponent.md#isdestroyed)
+
+### Accessors
+
+- [eventDispatcher](GlobalIlluminationComponent.md#eventdispatcher)
+- [isStart](GlobalIlluminationComponent.md#isstart)
+- [transform](GlobalIlluminationComponent.md#transform)
+- [enable](GlobalIlluminationComponent.md#enable)
+
+### Methods
+
+- [start](GlobalIlluminationComponent.md#start)
+- [stop](GlobalIlluminationComponent.md#stop)
+- [onEnable](GlobalIlluminationComponent.md#onenable)
+- [onDisable](GlobalIlluminationComponent.md#ondisable)
+- [onLateUpdate](GlobalIlluminationComponent.md#onlateupdate)
+- [onBeforeUpdate](GlobalIlluminationComponent.md#onbeforeupdate)
+- [onCompute](GlobalIlluminationComponent.md#oncompute)
+- [onGraphic](GlobalIlluminationComponent.md#ongraphic)
+- [onParentChange](GlobalIlluminationComponent.md#onparentchange)
+- [onAddChild](GlobalIlluminationComponent.md#onaddchild)
+- [onRemoveChild](GlobalIlluminationComponent.md#onremovechild)
+- [cloneTo](GlobalIlluminationComponent.md#cloneto)
+- [copyComponent](GlobalIlluminationComponent.md#copycomponent)
+- [beforeDestroy](GlobalIlluminationComponent.md#beforedestroy)
+- [destroy](GlobalIlluminationComponent.md#destroy)
+- [init](GlobalIlluminationComponent.md#init)
+- [debug](GlobalIlluminationComponent.md#debug)
+- [onUpdate](GlobalIlluminationComponent.md#onupdate)
+
+## Constructors
+
+### constructor
+
+• **new GlobalIlluminationComponent**(): [`GlobalIlluminationComponent`](GlobalIlluminationComponent.md)
+
+#### Returns
+
+[`GlobalIlluminationComponent`](GlobalIlluminationComponent.md)
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[start](ComponentBase.md#start)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onEnable](ComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onDisable](ComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[destroy](ComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
+
+___
+
+### init
+
+▸ **init**(`scene`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scene` | [`Scene3D`](Scene3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[init](ComponentBase.md#init)
+
+#### Defined in
+
+[src/components/renderer/GlobalIlluminationComponent.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/GlobalIlluminationComponent.ts#L30)
+
+___
+
+### debug
+
+▸ **debug**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/renderer/GlobalIlluminationComponent.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/GlobalIlluminationComponent.ts#L90)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[onUpdate](ComponentBase.md#onupdate)
+
+#### Defined in
+
+[src/components/renderer/GlobalIlluminationComponent.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/GlobalIlluminationComponent.ts#L145)
diff --git a/docs/api/classes/GodRayPost.md b/docs/api/classes/GodRayPost.md
new file mode 100644
index 00000000..9bb89c44
--- /dev/null
+++ b/docs/api/classes/GodRayPost.md
@@ -0,0 +1,272 @@
+# Class: GodRayPost
+
+## Hierarchy
+
+- `PostBase`
+
+ ↳ **`GodRayPost`**
+
+### Constructors
+
+- [constructor](GodRayPost.md#constructor)
+
+### Properties
+
+- [rtFrame](GodRayPost.md#rtframe)
+- [enable](GodRayPost.md#enable)
+- [postRenderer](GodRayPost.md#postrenderer)
+
+### Accessors
+
+- [blendColor](GodRayPost.md#blendcolor)
+- [rayMarchCount](GodRayPost.md#raymarchcount)
+- [scatteringExponent](GodRayPost.md#scatteringexponent)
+- [intensity](GodRayPost.md#intensity)
+
+### Methods
+
+- [onDetach](GodRayPost.md#ondetach)
+- [onResize](GodRayPost.md#onresize)
+- [destroy](GodRayPost.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new GodRayPost**(): [`GodRayPost`](GodRayPost.md)
+
+#### Returns
+
+[`GodRayPost`](GodRayPost.md)
+
+#### Overrides
+
+PostBase.constructor
+
+#### Defined in
+
+[src/gfx/renderJob/post/GodRayPost.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GodRayPost.ts#L45)
+
+## Properties
+
+### rtFrame
+
+• **rtFrame**: [`RTFrame`](RTFrame.md)
+
+#### Defined in
+
+[src/gfx/renderJob/post/GodRayPost.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GodRayPost.ts#L43)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+PostBase.enable
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L20)
+
+___
+
+### postRenderer
+
+• **postRenderer**: `PostRenderer`
+
+#### Inherited from
+
+PostBase.postRenderer
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L21)
+
+## Accessors
+
+### blendColor
+
+• `get` **blendColor**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GodRayPost.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GodRayPost.ts#L64)
+
+• `set` **blendColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GodRayPost.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GodRayPost.ts#L67)
+
+___
+
+### rayMarchCount
+
+• `get` **rayMarchCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GodRayPost.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GodRayPost.ts#L70)
+
+• `set` **rayMarchCount**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GodRayPost.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GodRayPost.ts#L73)
+
+___
+
+### scatteringExponent
+
+• `get` **scatteringExponent**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GodRayPost.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GodRayPost.ts#L77)
+
+• `set` **scatteringExponent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GodRayPost.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GodRayPost.ts#L80)
+
+___
+
+### intensity
+
+• `get` **intensity**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GodRayPost.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GodRayPost.ts#L84)
+
+• `set` **intensity**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/GodRayPost.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GodRayPost.ts#L87)
+
+## Methods
+
+### onDetach
+
+▸ **onDetach**(`view`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.onDetach
+
+#### Defined in
+
+[src/gfx/renderJob/post/GodRayPost.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GodRayPost.ts#L59)
+
+___
+
+### onResize
+
+▸ **onResize**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.onResize
+
+#### Defined in
+
+[src/gfx/renderJob/post/GodRayPost.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/GodRayPost.ts#L132)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PostBase.destroy
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L87)
diff --git a/docs/api/classes/HDRTexture.md b/docs/api/classes/HDRTexture.md
new file mode 100644
index 00000000..a259b4bd
--- /dev/null
+++ b/docs/api/classes/HDRTexture.md
@@ -0,0 +1,1126 @@
+# Class: HDRTexture
+
+HDR Texture
+
+## Hierarchy
+
+- [`Texture`](Texture.md)
+
+ ↳ **`HDRTexture`**
+
+### Constructors
+
+- [constructor](HDRTexture.md#constructor)
+
+### Properties
+
+- [name](HDRTexture.md#name)
+- [url](HDRTexture.md#url)
+- [pid](HDRTexture.md#pid)
+- [view](HDRTexture.md#view)
+- [gpuSampler](HDRTexture.md#gpusampler)
+- [gpuSampler\_comparison](HDRTexture.md#gpusampler_comparison)
+- [format](HDRTexture.md#format)
+- [usage](HDRTexture.md#usage)
+- [width](HDRTexture.md#width)
+- [height](HDRTexture.md#height)
+- [depthOrArrayLayers](HDRTexture.md#depthorarraylayers)
+- [numberLayer](HDRTexture.md#numberlayer)
+- [viewDescriptor](HDRTexture.md#viewdescriptor)
+- [textureDescriptor](HDRTexture.md#texturedescriptor)
+- [visibility](HDRTexture.md#visibility)
+- [textureBindingLayout](HDRTexture.md#texturebindinglayout)
+- [samplerBindingLayout](HDRTexture.md#samplerbindinglayout)
+- [sampler\_comparisonBindingLayout](HDRTexture.md#sampler_comparisonbindinglayout)
+- [flipY](HDRTexture.md#flipy)
+- [isVideoTexture](HDRTexture.md#isvideotexture)
+- [isHDRTexture](HDRTexture.md#ishdrtexture)
+- [mipmapCount](HDRTexture.md#mipmapcount)
+
+### Accessors
+
+- [useMipmap](HDRTexture.md#usemipmap)
+- [sourceImageData](HDRTexture.md#sourceimagedata)
+- [addressModeU](HDRTexture.md#addressmodeu)
+- [addressModeV](HDRTexture.md#addressmodev)
+- [addressModeW](HDRTexture.md#addressmodew)
+- [magFilter](HDRTexture.md#magfilter)
+- [minFilter](HDRTexture.md#minfilter)
+- [mipmapFilter](HDRTexture.md#mipmapfilter)
+- [lodMinClamp](HDRTexture.md#lodminclamp)
+- [lodMaxClamp](HDRTexture.md#lodmaxclamp)
+- [compare](HDRTexture.md#compare)
+- [maxAnisotropy](HDRTexture.md#maxanisotropy)
+
+### Methods
+
+- [init](HDRTexture.md#init)
+- [getMipmapCount](HDRTexture.md#getmipmapcount)
+- [getGPUTexture](HDRTexture.md#getgputexture)
+- [getGPUView](HDRTexture.md#getgpuview)
+- [bindStateChange](HDRTexture.md#bindstatechange)
+- [unBindStateChange](HDRTexture.md#unbindstatechange)
+- [destroy](HDRTexture.md#destroy)
+- [delayDestroyTexture](HDRTexture.md#delaydestroytexture)
+- [destroyTexture](HDRTexture.md#destroytexture)
+- [create](HDRTexture.md#create)
+- [load](HDRTexture.md#load)
+
+## Constructors
+
+### constructor
+
+• **new HDRTexture**(): [`HDRTexture`](HDRTexture.md)
+
+#### Returns
+
+[`HDRTexture`](HDRTexture.md)
+
+#### Overrides
+
+[Texture](Texture.md).[constructor](Texture.md#constructor)
+
+#### Defined in
+
+[src/textures/HDRTexture.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/textures/HDRTexture.ts#L14)
+
+## Properties
+
+### name
+
+• **name**: `string`
+
+name of texture
+
+#### Inherited from
+
+[Texture](Texture.md).[name](Texture.md#name)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L15)
+
+___
+
+### url
+
+• **url**: `string`
+
+source url
+
+#### Inherited from
+
+[Texture](Texture.md).[url](Texture.md#url)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L20)
+
+___
+
+### pid
+
+• **pid**: `number`
+
+Return index in texture array
+
+#### Inherited from
+
+[Texture](Texture.md).[pid](Texture.md#pid)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L30)
+
+___
+
+### view
+
+• **view**: `GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView
+
+#### Inherited from
+
+[Texture](Texture.md).[view](Texture.md#view)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L35)
+
+___
+
+### gpuSampler
+
+• **gpuSampler**: `GPUSampler`
+
+GPUSampler
+
+#### Inherited from
+
+[Texture](Texture.md).[gpuSampler](Texture.md#gpusampler)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L40)
+
+___
+
+### gpuSampler\_comparison
+
+• **gpuSampler\_comparison**: `GPUSampler`
+
+GPUSampler for comparison
+
+#### Inherited from
+
+[Texture](Texture.md).[gpuSampler_comparison](Texture.md#gpusampler_comparison)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L45)
+
+___
+
+### format
+
+• **format**: `GPUTextureFormat`
+
+GPUTextureFormat
+
+#### Inherited from
+
+[Texture](Texture.md).[format](Texture.md#format)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L50)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+GPUTextureUsage
+
+#### Inherited from
+
+[Texture](Texture.md).[usage](Texture.md#usage)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L55)
+
+___
+
+### width
+
+• **width**: `number` = `4`
+
+texture width
+
+#### Inherited from
+
+[Texture](Texture.md).[width](Texture.md#width)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:60](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L60)
+
+___
+
+### height
+
+• **height**: `number` = `4`
+
+texture height
+
+#### Inherited from
+
+[Texture](Texture.md).[height](Texture.md#height)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L65)
+
+___
+
+### depthOrArrayLayers
+
+• **depthOrArrayLayers**: `number` = `1`
+
+depth or layers, default value is 1
+
+#### Inherited from
+
+[Texture](Texture.md).[depthOrArrayLayers](Texture.md#depthorarraylayers)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L70)
+
+___
+
+### numberLayer
+
+• **numberLayer**: `number` = `1`
+
+depth or layers, default value is 1
+
+#### Inherited from
+
+[Texture](Texture.md).[numberLayer](Texture.md#numberlayer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L75)
+
+___
+
+### viewDescriptor
+
+• **viewDescriptor**: `GPUTextureViewDescriptor`
+
+GPUTextureViewDescriptor
+
+#### Inherited from
+
+[Texture](Texture.md).[viewDescriptor](Texture.md#viewdescriptor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L80)
+
+___
+
+### textureDescriptor
+
+• **textureDescriptor**: `GPUTextureDescriptor`
+
+GPUTextureDescriptor
+
+#### Inherited from
+
+[Texture](Texture.md).[textureDescriptor](Texture.md#texturedescriptor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L85)
+
+___
+
+### visibility
+
+• **visibility**: `number`
+
+GPUShaderStage
+
+#### Inherited from
+
+[Texture](Texture.md).[visibility](Texture.md#visibility)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L90)
+
+___
+
+### textureBindingLayout
+
+• **textureBindingLayout**: `GPUTextureBindingLayout`
+
+GPUTextureBindingLayout, contains viewDimension and multisampled
+
+#### Inherited from
+
+[Texture](Texture.md).[textureBindingLayout](Texture.md#texturebindinglayout)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L96)
+
+___
+
+### samplerBindingLayout
+
+• **samplerBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+[Texture](Texture.md).[samplerBindingLayout](Texture.md#samplerbindinglayout)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L104)
+
+___
+
+### sampler\_comparisonBindingLayout
+
+• **sampler\_comparisonBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+[Texture](Texture.md).[sampler_comparisonBindingLayout](Texture.md#sampler_comparisonbindinglayout)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L111)
+
+___
+
+### flipY
+
+• **flipY**: `boolean`
+
+whether to flip the image on the y-axis
+
+#### Inherited from
+
+[Texture](Texture.md).[flipY](Texture.md#flipy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L118)
+
+___
+
+### isVideoTexture
+
+• `Optional` **isVideoTexture**: `boolean`
+
+whether is video texture
+
+#### Inherited from
+
+[Texture](Texture.md).[isVideoTexture](Texture.md#isvideotexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L123)
+
+___
+
+### isHDRTexture
+
+• `Optional` **isHDRTexture**: `boolean`
+
+#### Inherited from
+
+[Texture](Texture.md).[isHDRTexture](Texture.md#ishdrtexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L124)
+
+___
+
+### mipmapCount
+
+• **mipmapCount**: `number` = `1`
+
+mipmap Count, default value is 1
+
+#### Inherited from
+
+[Texture](Texture.md).[mipmapCount](Texture.md#mipmapcount)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L191)
+
+## Accessors
+
+### useMipmap
+
+• `get` **useMipmap**(): `boolean`
+
+enable/disable mipmap
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Texture.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L315)
+
+• `set` **useMipmap**(`value`): `void`
+
+get mipmap
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:322](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L322)
+
+___
+
+### sourceImageData
+
+• `get` **sourceImageData**(): `HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Returns
+
+`HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Inherited from
+
+Texture.sourceImageData
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:353](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L353)
+
+___
+
+### addressModeU
+
+• `get` **addressModeU**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+Texture.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L438)
+
+• `set` **addressModeU**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:442](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L442)
+
+___
+
+### addressModeV
+
+• `get` **addressModeV**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+Texture.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:449](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L449)
+
+• `set` **addressModeV**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:453](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L453)
+
+___
+
+### addressModeW
+
+• `get` **addressModeW**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+Texture.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:460](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L460)
+
+• `set` **addressModeW**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:464](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L464)
+
+___
+
+### magFilter
+
+• `get` **magFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+Texture.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:471](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L471)
+
+• `set` **magFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:475](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L475)
+
+___
+
+### minFilter
+
+• `get` **minFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+Texture.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:482](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L482)
+
+• `set` **minFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L486)
+
+___
+
+### mipmapFilter
+
+• `get` **mipmapFilter**(): `GPUMipmapFilterMode`
+
+#### Returns
+
+`GPUMipmapFilterMode`
+
+#### Inherited from
+
+Texture.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:493](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L493)
+
+• `set` **mipmapFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUMipmapFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:497](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L497)
+
+___
+
+### lodMinClamp
+
+• `get` **lodMinClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Texture.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:504](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L504)
+
+• `set` **lodMinClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:508](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L508)
+
+___
+
+### lodMaxClamp
+
+• `get` **lodMaxClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Texture.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:515](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L515)
+
+• `set` **lodMaxClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L519)
+
+___
+
+### compare
+
+• `get` **compare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Texture.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:526](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L526)
+
+• `set` **compare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:530](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L530)
+
+___
+
+### maxAnisotropy
+
+• `get` **maxAnisotropy**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Texture.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:537](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L537)
+
+• `set` **maxAnisotropy**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:541](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L541)
+
+## Methods
+
+### init
+
+▸ **init**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[Texture](Texture.md).[init](Texture.md#init)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L215)
+
+___
+
+### getMipmapCount
+
+▸ **getMipmapCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Texture](Texture.md).[getMipmapCount](Texture.md#getmipmapcount)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:357](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L357)
+
+___
+
+### getGPUTexture
+
+▸ **getGPUTexture**(): `GPUTexture`
+
+create or get GPUTexture
+
+#### Returns
+
+`GPUTexture`
+
+GPUTexture
+
+#### Inherited from
+
+[Texture](Texture.md).[getGPUTexture](Texture.md#getgputexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:384](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L384)
+
+___
+
+### getGPUView
+
+▸ **getGPUView**(`index?`): `GPUTextureView` \| `GPUExternalTexture`
+
+create or get GPUTextureView
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `index` | `number` | `0` |
+
+#### Returns
+
+`GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView | GPUExternalTexture
+
+#### Inherited from
+
+[Texture](Texture.md).[getGPUView](Texture.md#getgpuview)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:395](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L395)
+
+___
+
+### bindStateChange
+
+▸ **bindStateChange**(`fun`, `ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `fun` | `Function` |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Texture](Texture.md).[bindStateChange](Texture.md#bindstatechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L408)
+
+___
+
+### unBindStateChange
+
+▸ **unBindStateChange**(`ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Texture](Texture.md).[unBindStateChange](Texture.md#unbindstatechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L412)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release the texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Texture](Texture.md).[destroy](Texture.md#destroy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:426](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L426)
+
+___
+
+### delayDestroyTexture
+
+▸ **delayDestroyTexture**(`tex`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tex` | `GPUTexture` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Texture](Texture.md).[delayDestroyTexture](Texture.md#delaydestroytexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:549](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L549)
+
+___
+
+### destroyTexture
+
+▸ **destroyTexture**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Texture](Texture.md).[destroyTexture](Texture.md#destroytexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:555](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L555)
+
+___
+
+### create
+
+▸ **create**(`width?`, `height?`, `data?`, `useMipmap?`): `this`
+
+fill this texture by array of numbers;the format as [red0, green0, blue0, e0, red1, green1, blue1, e1...]
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `width` | `number` | `32` | assign the texture width |
+| `height` | `number` | `32` | assign the texture height |
+| `data` | `ArrayBuffer` | `null` | color of each pixel |
+| `useMipmap` | `boolean` | `true` | gen mipmap or not |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/textures/HDRTexture.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/textures/HDRTexture.ts#L27)
+
+___
+
+### load
+
+▸ **load**(`url`, `loaderFunctions?`): `Promise`\<[`HDRTexture`](HDRTexture.md)\>
+
+load one hdr image
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | the url of hdr image |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | callback when load complete |
+
+#### Returns
+
+`Promise`\<[`HDRTexture`](HDRTexture.md)\>
+
+#### Defined in
+
+[src/textures/HDRTexture.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/textures/HDRTexture.ts#L84)
diff --git a/docs/api/classes/HDRTextureCube.md b/docs/api/classes/HDRTextureCube.md
new file mode 100644
index 00000000..6a202fb8
--- /dev/null
+++ b/docs/api/classes/HDRTextureCube.md
@@ -0,0 +1,1153 @@
+# Class: HDRTextureCube
+
+HDR TextureCube
+
+## Hierarchy
+
+- `TextureCube`
+
+ ↳ **`HDRTextureCube`**
+
+### Constructors
+
+- [constructor](HDRTextureCube.md#constructor)
+
+### Properties
+
+- [name](HDRTextureCube.md#name)
+- [url](HDRTextureCube.md#url)
+- [pid](HDRTextureCube.md#pid)
+- [view](HDRTextureCube.md#view)
+- [gpuSampler](HDRTextureCube.md#gpusampler)
+- [gpuSampler\_comparison](HDRTextureCube.md#gpusampler_comparison)
+- [format](HDRTextureCube.md#format)
+- [usage](HDRTextureCube.md#usage)
+- [numberLayer](HDRTextureCube.md#numberlayer)
+- [viewDescriptor](HDRTextureCube.md#viewdescriptor)
+- [textureDescriptor](HDRTextureCube.md#texturedescriptor)
+- [sampler\_comparisonBindingLayout](HDRTextureCube.md#sampler_comparisonbindinglayout)
+- [flipY](HDRTextureCube.md#flipy)
+- [isVideoTexture](HDRTextureCube.md#isvideotexture)
+- [isHDRTexture](HDRTextureCube.md#ishdrtexture)
+- [mipmapCount](HDRTextureCube.md#mipmapcount)
+- [width](HDRTextureCube.md#width)
+- [height](HDRTextureCube.md#height)
+- [depthOrArrayLayers](HDRTextureCube.md#depthorarraylayers)
+- [visibility](HDRTextureCube.md#visibility)
+- [textureBindingLayout](HDRTextureCube.md#texturebindinglayout)
+- [samplerBindingLayout](HDRTextureCube.md#samplerbindinglayout)
+
+### Accessors
+
+- [useMipmap](HDRTextureCube.md#usemipmap)
+- [sourceImageData](HDRTextureCube.md#sourceimagedata)
+- [addressModeU](HDRTextureCube.md#addressmodeu)
+- [addressModeV](HDRTextureCube.md#addressmodev)
+- [addressModeW](HDRTextureCube.md#addressmodew)
+- [magFilter](HDRTextureCube.md#magfilter)
+- [minFilter](HDRTextureCube.md#minfilter)
+- [mipmapFilter](HDRTextureCube.md#mipmapfilter)
+- [lodMinClamp](HDRTextureCube.md#lodminclamp)
+- [lodMaxClamp](HDRTextureCube.md#lodmaxclamp)
+- [compare](HDRTextureCube.md#compare)
+- [maxAnisotropy](HDRTextureCube.md#maxanisotropy)
+
+### Methods
+
+- [init](HDRTextureCube.md#init)
+- [getMipmapCount](HDRTextureCube.md#getmipmapcount)
+- [getGPUTexture](HDRTextureCube.md#getgputexture)
+- [getGPUView](HDRTextureCube.md#getgpuview)
+- [bindStateChange](HDRTextureCube.md#bindstatechange)
+- [unBindStateChange](HDRTextureCube.md#unbindstatechange)
+- [destroy](HDRTextureCube.md#destroy)
+- [delayDestroyTexture](HDRTextureCube.md#delaydestroytexture)
+- [destroyTexture](HDRTextureCube.md#destroytexture)
+- [createFromHDRData](HDRTextureCube.md#createfromhdrdata)
+- [createFromTexture](HDRTextureCube.md#createfromtexture)
+- [load](HDRTextureCube.md#load)
+
+## Constructors
+
+### constructor
+
+• **new HDRTextureCube**(): [`HDRTextureCube`](HDRTextureCube.md)
+
+create a cube texture, it's high dynamic range texture
+
+#### Returns
+
+[`HDRTextureCube`](HDRTextureCube.md)
+
+#### Overrides
+
+TextureCube.constructor
+
+#### Defined in
+
+[src/textures/HDRTextureCube.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/textures/HDRTextureCube.ts#L23)
+
+## Properties
+
+### name
+
+• **name**: `string`
+
+name of texture
+
+#### Inherited from
+
+TextureCube.name
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L15)
+
+___
+
+### url
+
+• **url**: `string`
+
+source url
+
+#### Inherited from
+
+TextureCube.url
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L20)
+
+___
+
+### pid
+
+• **pid**: `number`
+
+Return index in texture array
+
+#### Inherited from
+
+TextureCube.pid
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L30)
+
+___
+
+### view
+
+• **view**: `GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView
+
+#### Inherited from
+
+TextureCube.view
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L35)
+
+___
+
+### gpuSampler
+
+• **gpuSampler**: `GPUSampler`
+
+GPUSampler
+
+#### Inherited from
+
+TextureCube.gpuSampler
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L40)
+
+___
+
+### gpuSampler\_comparison
+
+• **gpuSampler\_comparison**: `GPUSampler`
+
+GPUSampler for comparison
+
+#### Inherited from
+
+TextureCube.gpuSampler\_comparison
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L45)
+
+___
+
+### format
+
+• **format**: `GPUTextureFormat`
+
+GPUTextureFormat
+
+#### Inherited from
+
+TextureCube.format
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L50)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+GPUTextureUsage
+
+#### Inherited from
+
+TextureCube.usage
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L55)
+
+___
+
+### numberLayer
+
+• **numberLayer**: `number` = `1`
+
+depth or layers, default value is 1
+
+#### Inherited from
+
+TextureCube.numberLayer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L75)
+
+___
+
+### viewDescriptor
+
+• **viewDescriptor**: `GPUTextureViewDescriptor`
+
+GPUTextureViewDescriptor
+
+#### Inherited from
+
+TextureCube.viewDescriptor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L80)
+
+___
+
+### textureDescriptor
+
+• **textureDescriptor**: `GPUTextureDescriptor`
+
+GPUTextureDescriptor
+
+#### Inherited from
+
+TextureCube.textureDescriptor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L85)
+
+___
+
+### sampler\_comparisonBindingLayout
+
+• **sampler\_comparisonBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+TextureCube.sampler\_comparisonBindingLayout
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L111)
+
+___
+
+### flipY
+
+• **flipY**: `boolean`
+
+whether to flip the image on the y-axis
+
+#### Inherited from
+
+TextureCube.flipY
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L118)
+
+___
+
+### isVideoTexture
+
+• `Optional` **isVideoTexture**: `boolean`
+
+whether is video texture
+
+#### Inherited from
+
+TextureCube.isVideoTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L123)
+
+___
+
+### isHDRTexture
+
+• `Optional` **isHDRTexture**: `boolean`
+
+#### Inherited from
+
+TextureCube.isHDRTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L124)
+
+___
+
+### mipmapCount
+
+• **mipmapCount**: `number` = `1`
+
+mipmap Count, default value is 1
+
+#### Inherited from
+
+TextureCube.mipmapCount
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L191)
+
+___
+
+### width
+
+• **width**: `number` = `4`
+
+texture width, default value is 4
+
+#### Inherited from
+
+TextureCube.width
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L12)
+
+___
+
+### height
+
+• **height**: `number` = `4`
+
+texture height, default value is 4
+
+#### Inherited from
+
+TextureCube.height
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L16)
+
+___
+
+### depthOrArrayLayers
+
+• **depthOrArrayLayers**: `number` = `6`
+
+depth or array layers, default value is 6
+
+#### Inherited from
+
+TextureCube.depthOrArrayLayers
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L20)
+
+___
+
+### visibility
+
+• **visibility**: `number` = `GPUShaderStage.FRAGMENT`
+
+GPUShaderStage
+
+#### Inherited from
+
+TextureCube.visibility
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L25)
+
+___
+
+### textureBindingLayout
+
+• **textureBindingLayout**: `GPUTextureBindingLayout`
+
+GPUTextureBindingLayout
+
+#### Inherited from
+
+TextureCube.textureBindingLayout
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L30)
+
+___
+
+### samplerBindingLayout
+
+• **samplerBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+TextureCube.samplerBindingLayout
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L38)
+
+## Accessors
+
+### useMipmap
+
+• `get` **useMipmap**(): `boolean`
+
+enable/disable mipmap
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+TextureCube.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L315)
+
+• `set` **useMipmap**(`value`): `void`
+
+get mipmap
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:322](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L322)
+
+___
+
+### sourceImageData
+
+• `get` **sourceImageData**(): `HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Returns
+
+`HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Inherited from
+
+TextureCube.sourceImageData
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:353](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L353)
+
+___
+
+### addressModeU
+
+• `get` **addressModeU**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+TextureCube.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L438)
+
+• `set` **addressModeU**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:442](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L442)
+
+___
+
+### addressModeV
+
+• `get` **addressModeV**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+TextureCube.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:449](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L449)
+
+• `set` **addressModeV**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:453](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L453)
+
+___
+
+### addressModeW
+
+• `get` **addressModeW**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+TextureCube.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:460](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L460)
+
+• `set` **addressModeW**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:464](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L464)
+
+___
+
+### magFilter
+
+• `get` **magFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+TextureCube.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:471](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L471)
+
+• `set` **magFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:475](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L475)
+
+___
+
+### minFilter
+
+• `get` **minFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+TextureCube.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:482](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L482)
+
+• `set` **minFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L486)
+
+___
+
+### mipmapFilter
+
+• `get` **mipmapFilter**(): `GPUMipmapFilterMode`
+
+#### Returns
+
+`GPUMipmapFilterMode`
+
+#### Inherited from
+
+TextureCube.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:493](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L493)
+
+• `set` **mipmapFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUMipmapFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:497](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L497)
+
+___
+
+### lodMinClamp
+
+• `get` **lodMinClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+TextureCube.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:504](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L504)
+
+• `set` **lodMinClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:508](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L508)
+
+___
+
+### lodMaxClamp
+
+• `get` **lodMaxClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+TextureCube.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:515](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L515)
+
+• `set` **lodMaxClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L519)
+
+___
+
+### compare
+
+• `get` **compare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+TextureCube.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:526](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L526)
+
+• `set` **compare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:530](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L530)
+
+___
+
+### maxAnisotropy
+
+• `get` **maxAnisotropy**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+TextureCube.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:537](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L537)
+
+• `set` **maxAnisotropy**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:541](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L541)
+
+## Methods
+
+### init
+
+▸ **init**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+TextureCube.init
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L215)
+
+___
+
+### getMipmapCount
+
+▸ **getMipmapCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+TextureCube.getMipmapCount
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:357](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L357)
+
+___
+
+### getGPUTexture
+
+▸ **getGPUTexture**(): `GPUTexture`
+
+create or get GPUTexture
+
+#### Returns
+
+`GPUTexture`
+
+GPUTexture
+
+#### Inherited from
+
+TextureCube.getGPUTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:384](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L384)
+
+___
+
+### getGPUView
+
+▸ **getGPUView**(`index?`): `GPUTextureView` \| `GPUExternalTexture`
+
+create or get GPUTextureView
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `index` | `number` | `0` |
+
+#### Returns
+
+`GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView | GPUExternalTexture
+
+#### Inherited from
+
+TextureCube.getGPUView
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:395](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L395)
+
+___
+
+### bindStateChange
+
+▸ **bindStateChange**(`fun`, `ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `fun` | `Function` |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.bindStateChange
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L408)
+
+___
+
+### unBindStateChange
+
+▸ **unBindStateChange**(`ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.unBindStateChange
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L412)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release the texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.destroy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:426](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L426)
+
+___
+
+### delayDestroyTexture
+
+▸ **delayDestroyTexture**(`tex`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tex` | `GPUTexture` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.delayDestroyTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:549](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L549)
+
+___
+
+### destroyTexture
+
+▸ **destroyTexture**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.destroyTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:555](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L555)
+
+___
+
+### createFromHDRData
+
+▸ **createFromHDRData**(`size`, `data`): `this`
+
+fill this texture by array of numbers;the format as [red0, green0, blue0, alpha0, red1, green1, blue1, alpha1...]
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `size` | `number` | assign the cube texture size |
+| `data` | `Object` | raw data of cubeTexture; the format is { width: number; height: number; array: Uint8Array } |
+| `data.width` | `number` | - |
+| `data.height` | `number` | - |
+| `data.array` | `Uint8Array` | - |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/textures/HDRTextureCube.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/textures/HDRTextureCube.ts#L37)
+
+___
+
+### createFromTexture
+
+▸ **createFromTexture**(`size`, `texture`): `this`
+
+fill this texture by a texture2D, which is a 360 panorama image
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `size` | `number` | assign the cube texture size |
+| `texture` | [`Texture`](Texture.md) | the image texture |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/textures/HDRTextureCube.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/textures/HDRTextureCube.ts#L52)
+
+___
+
+### load
+
+▸ **load**(`url`, `loaderFunctions?`): `Promise`\<[`HDRTextureCube`](HDRTextureCube.md)\>
+
+load texture data from web url, which is a 360 panorama image
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | web url |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | callback function when load complete |
+
+#### Returns
+
+`Promise`\<[`HDRTextureCube`](HDRTextureCube.md)\>
+
+#### Defined in
+
+[src/textures/HDRTextureCube.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/textures/HDRTextureCube.ts#L78)
diff --git a/docs/api/classes/HaltonSeq.md b/docs/api/classes/HaltonSeq.md
new file mode 100644
index 00000000..124cb3bb
--- /dev/null
+++ b/docs/api/classes/HaltonSeq.md
@@ -0,0 +1,96 @@
+# Class: HaltonSeq
+
+https://en.wikipedia.org/wiki/Halton_sequence
+https://baike.baidu.com/item/Halton%20sequence/16697800
+Class for generating the Halton low-discrepancy series for Quasi Monte Carlo integration.
+
+### Constructors
+
+- [constructor](HaltonSeq.md#constructor)
+
+### Methods
+
+- [get](HaltonSeq.md#get)
+- [getBase](HaltonSeq.md#getbase)
+- [next](HaltonSeq.md#next)
+- [get](HaltonSeq.md#get-1)
+
+## Constructors
+
+### constructor
+
+• **new HaltonSeq**(): [`HaltonSeq`](HaltonSeq.md)
+
+#### Returns
+
+[`HaltonSeq`](HaltonSeq.md)
+
+## Methods
+
+### get
+
+▸ **get**(`index`, `radix`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `radix` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/HaltonSeq.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/math/HaltonSeq.ts#L10)
+
+___
+
+### getBase
+
+▸ **getBase**(`index`, `base`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `base` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/HaltonSeq.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/math/HaltonSeq.ts#L24)
+
+___
+
+### next
+
+▸ **next**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/HaltonSeq.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/math/HaltonSeq.ts#L34)
+
+___
+
+### get
+
+▸ **get**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/HaltonSeq.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/math/HaltonSeq.ts#L48)
diff --git a/docs/api/classes/HoverCameraController.md b/docs/api/classes/HoverCameraController.md
new file mode 100644
index 00000000..d9a3e57f
--- /dev/null
+++ b/docs/api/classes/HoverCameraController.md
@@ -0,0 +1,923 @@
+# Class: HoverCameraController
+
+Hovering camera controller
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`HoverCameraController`**
+
+### Constructors
+
+- [constructor](HoverCameraController.md#constructor)
+
+### Properties
+
+- [object3D](HoverCameraController.md#object3d)
+- [isDestroyed](HoverCameraController.md#isdestroyed)
+- [camera](HoverCameraController.md#camera)
+- [minDistance](HoverCameraController.md#mindistance)
+- [maxDistance](HoverCameraController.md#maxdistance)
+- [rollSmooth](HoverCameraController.md#rollsmooth)
+- [dragSmooth](HoverCameraController.md#dragsmooth)
+- [wheelSmooth](HoverCameraController.md#wheelsmooth)
+- [wheelStep](HoverCameraController.md#wheelstep)
+- [mouseRightFactor](HoverCameraController.md#mouserightfactor)
+- [mouseLeftFactor](HoverCameraController.md#mouseleftfactor)
+- [smooth](HoverCameraController.md#smooth)
+- [distance](HoverCameraController.md#distance)
+- [roll](HoverCameraController.md#roll)
+- [pitch](HoverCameraController.md#pitch)
+
+### Accessors
+
+- [eventDispatcher](HoverCameraController.md#eventdispatcher)
+- [isStart](HoverCameraController.md#isstart)
+- [transform](HoverCameraController.md#transform)
+- [enable](HoverCameraController.md#enable)
+- [bottomClamp](HoverCameraController.md#bottomclamp)
+- [topClamp](HoverCameraController.md#topclamp)
+- [target](HoverCameraController.md#target)
+
+### Methods
+
+- [init](HoverCameraController.md#init)
+- [stop](HoverCameraController.md#stop)
+- [onEnable](HoverCameraController.md#onenable)
+- [onDisable](HoverCameraController.md#ondisable)
+- [onUpdate](HoverCameraController.md#onupdate)
+- [onLateUpdate](HoverCameraController.md#onlateupdate)
+- [onCompute](HoverCameraController.md#oncompute)
+- [onGraphic](HoverCameraController.md#ongraphic)
+- [onParentChange](HoverCameraController.md#onparentchange)
+- [onAddChild](HoverCameraController.md#onaddchild)
+- [onRemoveChild](HoverCameraController.md#onremovechild)
+- [cloneTo](HoverCameraController.md#cloneto)
+- [copyComponent](HoverCameraController.md#copycomponent)
+- [beforeDestroy](HoverCameraController.md#beforedestroy)
+- [flowTarget](HoverCameraController.md#flowtarget)
+- [getFlowTarget](HoverCameraController.md#getflowtarget)
+- [setCamera](HoverCameraController.md#setcamera)
+- [focusByBounds](HoverCameraController.md#focusbybounds)
+- [onBeforeUpdate](HoverCameraController.md#onbeforeupdate)
+
+## Constructors
+
+### constructor
+
+• **new HoverCameraController**(): [`HoverCameraController`](HoverCameraController.md)
+
+#### Returns
+
+[`HoverCameraController`](HoverCameraController.md)
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:130](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L130)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### camera
+
+• **camera**: [`Camera3D`](Camera3D.md)
+
+camera controlling
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L22)
+
+___
+
+### minDistance
+
+• **minDistance**: `number` = `0.1`
+
+The closest distance that the mouse wheel can operate
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L27)
+
+___
+
+### maxDistance
+
+• **maxDistance**: `number` = `500`
+
+The farthest distance that the mouse wheel can operate
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L32)
+
+___
+
+### rollSmooth
+
+• **rollSmooth**: `number` = `15.0`
+
+Smoothing coefficient of rolling angle
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L37)
+
+___
+
+### dragSmooth
+
+• **dragSmooth**: `number` = `20`
+
+Smoothing coefficient of dragging
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L42)
+
+___
+
+### wheelSmooth
+
+• **wheelSmooth**: `number` = `10`
+
+Smoothing coefficient of rolling
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L47)
+
+___
+
+### wheelStep
+
+• **wheelStep**: `number` = `0.002`
+
+Mouse scrolling step coefficient
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L52)
+
+___
+
+### mouseRightFactor
+
+• **mouseRightFactor**: `number` = `0.25`
+
+Right mouse movement coefficient
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L57)
+
+___
+
+### mouseLeftFactor
+
+• **mouseLeftFactor**: `number` = `20`
+
+Left mouse movement coefficient
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L62)
+
+___
+
+### smooth
+
+• **smooth**: `boolean` = `true`
+
+Whether to enable smooth mode
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L67)
+
+___
+
+### distance
+
+• **distance**: `number` = `10`
+
+Distance between camera and target
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L79)
+
+___
+
+### roll
+
+• **roll**: `number` = `0`
+
+Roll angle around y-axis
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L85)
+
+___
+
+### pitch
+
+• **pitch**: `number` = `0`
+
+Pitch angle around x-axis
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L91)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### bottomClamp
+
+• `get` **bottomClamp**(): `number`
+
+Max angle of pitch
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:109](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L109)
+
+• `set` **bottomClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L112)
+
+___
+
+### topClamp
+
+• `get` **topClamp**(): `number`
+
+Min angle of pitch
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L118)
+
+• `set` **topClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L121)
+
+___
+
+### target
+
+• `get` **target**(): [`Vector3`](Vector3.md)
+
+Get target position
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:192](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L192)
+
+• `set` **target**(`target`): `void`
+
+Set target position
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `target` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:184](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L184)
+
+## Methods
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[init](ComponentBase.md#init)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onEnable](ComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onDisable](ComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onUpdate](ComponentBase.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### flowTarget
+
+▸ **flowTarget**(`target`, `offset?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `target` | [`Object3D`](Object3D.md) | `undefined` |
+| `offset` | [`Vector3`](Vector3.md) | `Vector3.ZERO` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L147)
+
+___
+
+### getFlowTarget
+
+▸ **getFlowTarget**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L153)
+
+___
+
+### setCamera
+
+▸ **setCamera**(`roll`, `pitch`, `distance`, `target?`): `void`
+
+Initialize Camera
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `roll` | `number` | Roll angle around y-axis |
+| `pitch` | `number` | Pitch angle around x-axis |
+| `distance` | `number` | max distance to target |
+| `target?` | [`Vector3`](Vector3.md) | coordinates of the target |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L164)
+
+___
+
+### focusByBounds
+
+▸ **focusByBounds**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:176](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L176)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/controller/HoverCameraController.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/HoverCameraController.ts#L247)
diff --git a/docs/api/classes/I3DMLoader.md b/docs/api/classes/I3DMLoader.md
new file mode 100644
index 00000000..8b9e9476
--- /dev/null
+++ b/docs/api/classes/I3DMLoader.md
@@ -0,0 +1,148 @@
+# Class: I3DMLoader
+
+## Hierarchy
+
+- [`I3DMLoaderBase`](I3DMLoaderBase.md)
+
+ ↳ **`I3DMLoader`**
+
+### Constructors
+
+- [constructor](I3DMLoader.md#constructor)
+
+### Properties
+
+- [tempFwd](I3DMLoader.md#tempfwd)
+- [tempUp](I3DMLoader.md#tempup)
+- [tempRight](I3DMLoader.md#tempright)
+- [tempPos](I3DMLoader.md#temppos)
+- [tempQuat](I3DMLoader.md#tempquat)
+- [tempSca](I3DMLoader.md#tempsca)
+- [tempMat](I3DMLoader.md#tempmat)
+- [adjustmentTransform](I3DMLoader.md#adjustmenttransform)
+
+### Methods
+
+- [parse](I3DMLoader.md#parse)
+
+## Constructors
+
+### constructor
+
+• **new I3DMLoader**(): [`I3DMLoader`](I3DMLoader.md)
+
+#### Returns
+
+[`I3DMLoader`](I3DMLoader.md)
+
+#### Overrides
+
+[I3DMLoaderBase](I3DMLoaderBase.md).[constructor](I3DMLoaderBase.md#constructor)
+
+#### Defined in
+
+[src/loader/parser/i3dm/I3DMLoader.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/i3dm/I3DMLoader.ts#L22)
+
+## Properties
+
+### tempFwd
+
+▪ `Static` **tempFwd**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/loader/parser/i3dm/I3DMLoader.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/i3dm/I3DMLoader.ts#L12)
+
+___
+
+### tempUp
+
+▪ `Static` **tempUp**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/loader/parser/i3dm/I3DMLoader.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/i3dm/I3DMLoader.ts#L13)
+
+___
+
+### tempRight
+
+▪ `Static` **tempRight**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/loader/parser/i3dm/I3DMLoader.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/i3dm/I3DMLoader.ts#L14)
+
+___
+
+### tempPos
+
+▪ `Static` **tempPos**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/loader/parser/i3dm/I3DMLoader.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/i3dm/I3DMLoader.ts#L15)
+
+___
+
+### tempQuat
+
+▪ `Static` **tempQuat**: [`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/loader/parser/i3dm/I3DMLoader.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/i3dm/I3DMLoader.ts#L16)
+
+___
+
+### tempSca
+
+▪ `Static` **tempSca**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/loader/parser/i3dm/I3DMLoader.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/i3dm/I3DMLoader.ts#L17)
+
+___
+
+### tempMat
+
+▪ `Static` **tempMat**: [`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/loader/parser/i3dm/I3DMLoader.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/i3dm/I3DMLoader.ts#L18)
+
+___
+
+### adjustmentTransform
+
+• **adjustmentTransform**: [`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/loader/parser/i3dm/I3DMLoader.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/i3dm/I3DMLoader.ts#L19)
+
+## Methods
+
+### parse
+
+▸ **parse**(`buffer`): `Promise`\<`any`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+`Promise`\<`any`\>
+
+#### Overrides
+
+[I3DMLoaderBase](I3DMLoaderBase.md).[parse](I3DMLoaderBase.md#parse)
+
+#### Defined in
+
+[src/loader/parser/i3dm/I3DMLoader.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/i3dm/I3DMLoader.ts#L36)
diff --git a/docs/api/classes/I3DMLoaderBase.md b/docs/api/classes/I3DMLoaderBase.md
new file mode 100644
index 00000000..1c0f2092
--- /dev/null
+++ b/docs/api/classes/I3DMLoaderBase.md
@@ -0,0 +1,45 @@
+# Class: I3DMLoaderBase
+
+## Hierarchy
+
+- **`I3DMLoaderBase`**
+
+ ↳ [`I3DMLoader`](I3DMLoader.md)
+
+### Constructors
+
+- [constructor](I3DMLoaderBase.md#constructor)
+
+### Methods
+
+- [parse](I3DMLoaderBase.md#parse)
+
+## Constructors
+
+### constructor
+
+• **new I3DMLoaderBase**(): [`I3DMLoaderBase`](I3DMLoaderBase.md)
+
+#### Returns
+
+[`I3DMLoaderBase`](I3DMLoaderBase.md)
+
+## Methods
+
+### parse
+
+▸ **parse**(`buffer`): `Promise`\<\{ `version`: `number` ; `featureTable`: [`FeatureTable`](FeatureTable.md) ; `batchTable`: [`BatchTable`](BatchTable.md) ; `glbBytes`: `Uint8Array` }\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+`Promise`\<\{ `version`: `number` ; `featureTable`: [`FeatureTable`](FeatureTable.md) ; `batchTable`: [`BatchTable`](BatchTable.md) ; `glbBytes`: `Uint8Array` }\>
+
+#### Defined in
+
+[src/loader/parser/i3dm/I3DMLoaderBase.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/i3dm/I3DMLoaderBase.ts#L6)
diff --git a/docs/api/classes/I3DMParser.md b/docs/api/classes/I3DMParser.md
new file mode 100644
index 00000000..0d62a875
--- /dev/null
+++ b/docs/api/classes/I3DMParser.md
@@ -0,0 +1,267 @@
+# Class: I3DMParser
+
+## Hierarchy
+
+- `ParserBase`
+
+ ↳ **`I3DMParser`**
+
+### Constructors
+
+- [constructor](I3DMParser.md#constructor)
+
+### Properties
+
+- [format](I3DMParser.md#format)
+- [baseUrl](I3DMParser.md#baseurl)
+- [initUrl](I3DMParser.md#initurl)
+- [loaderFunctions](I3DMParser.md#loaderfunctions)
+- [userData](I3DMParser.md#userdata)
+- [data](I3DMParser.md#data)
+
+### Methods
+
+- [parseBuffer](I3DMParser.md#parsebuffer)
+- [verification](I3DMParser.md#verification)
+- [parseString](I3DMParser.md#parsestring)
+- [parseJson](I3DMParser.md#parsejson)
+- [parseTexture](I3DMParser.md#parsetexture)
+- [parse](I3DMParser.md#parse)
+
+## Constructors
+
+### constructor
+
+• **new I3DMParser**(): [`I3DMParser`](I3DMParser.md)
+
+#### Returns
+
+[`I3DMParser`](I3DMParser.md)
+
+#### Inherited from
+
+ParserBase.constructor
+
+## Properties
+
+### format
+
+▪ `Static` **format**: [`ParserFormat`](../enums/ParserFormat.md) = `ParserFormat.BIN`
+
+#### Overrides
+
+ParserBase.format
+
+#### Defined in
+
+[src/loader/parser/I3DMParser.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/I3DMParser.ts#L6)
+
+___
+
+### baseUrl
+
+• **baseUrl**: `string`
+
+#### Inherited from
+
+ParserBase.baseUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L11)
+
+___
+
+### initUrl
+
+• **initUrl**: `string`
+
+#### Inherited from
+
+ParserBase.initUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L12)
+
+___
+
+### loaderFunctions
+
+• `Optional` **loaderFunctions**: [`LoaderFunctions`](../types/LoaderFunctions.md)
+
+#### Inherited from
+
+ParserBase.loaderFunctions
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L13)
+
+___
+
+### userData
+
+• `Optional` **userData**: `any`
+
+#### Inherited from
+
+ParserBase.userData
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L14)
+
+___
+
+### data
+
+• **data**: `any`
+
+#### Inherited from
+
+ParserBase.data
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L15)
+
+## Methods
+
+### parseBuffer
+
+▸ **parseBuffer**(`buffer`): `Promise`\<`void`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Overrides
+
+ParserBase.parseBuffer
+
+#### Defined in
+
+[src/loader/parser/I3DMParser.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/I3DMParser.ts#L7)
+
+___
+
+### verification
+
+▸ **verification**(): `boolean`
+
+Verify parsing validity
+
+#### Returns
+
+`boolean`
+
+#### Overrides
+
+ParserBase.verification
+
+#### Defined in
+
+[src/loader/parser/I3DMParser.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/I3DMParser.ts#L18)
+
+___
+
+### parseString
+
+▸ **parseString**(`str`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseString
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L17)
+
+___
+
+### parseJson
+
+▸ **parseJson**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `object` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseJson
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L19)
+
+___
+
+### parseTexture
+
+▸ **parseTexture**(`buffer`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+ParserBase.parseTexture
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L23)
+
+___
+
+### parse
+
+▸ **parse**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parse
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L27)
diff --git a/docs/api/classes/IESProfiles.md b/docs/api/classes/IESProfiles.md
new file mode 100644
index 00000000..cf6dd2e3
--- /dev/null
+++ b/docs/api/classes/IESProfiles.md
@@ -0,0 +1,125 @@
+# Class: IESProfiles
+
+### Constructors
+
+- [constructor](IESProfiles.md#constructor)
+
+### Properties
+
+- [use](IESProfiles.md#use)
+- [iesTexture](IESProfiles.md#iestexture)
+- [ies\_list](IESProfiles.md#ies_list)
+- [index](IESProfiles.md#index)
+
+### Accessors
+
+- [IESTexture](IESProfiles.md#iestexture-1)
+
+### Methods
+
+- [create](IESProfiles.md#create)
+
+## Constructors
+
+### constructor
+
+• **new IESProfiles**(): [`IESProfiles`](IESProfiles.md)
+
+#### Returns
+
+[`IESProfiles`](IESProfiles.md)
+
+#### Defined in
+
+[src/components/lights/IESProfiles.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/IESProfiles.ts#L13)
+
+## Properties
+
+### use
+
+▪ `Static` **use**: `boolean` = `false`
+
+#### Defined in
+
+[src/components/lights/IESProfiles.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/IESProfiles.ts#L8)
+
+___
+
+### iesTexture
+
+▪ `Static` **iesTexture**: `BitmapTexture2DArray`
+
+#### Defined in
+
+[src/components/lights/IESProfiles.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/IESProfiles.ts#L9)
+
+___
+
+### ies\_list
+
+▪ `Static` **ies\_list**: [`IESProfiles`](IESProfiles.md)[] = `[]`
+
+#### Defined in
+
+[src/components/lights/IESProfiles.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/IESProfiles.ts#L10)
+
+___
+
+### index
+
+• **index**: `number` = `0`
+
+#### Defined in
+
+[src/components/lights/IESProfiles.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/IESProfiles.ts#L12)
+
+## Accessors
+
+### IESTexture
+
+• `get` **IESTexture**(): [`Texture`](Texture.md)
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/components/lights/IESProfiles.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/IESProfiles.ts#L38)
+
+• `set` **IESTexture**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/IESProfiles.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/IESProfiles.ts#L23)
+
+## Methods
+
+### create
+
+▸ **create**(`width`, `height`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `width` | `number` |
+| `height` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/IESProfiles.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/IESProfiles.ts#L42)
diff --git a/docs/api/classes/IndicesGPUBuffer.md b/docs/api/classes/IndicesGPUBuffer.md
new file mode 100644
index 00000000..f86555df
--- /dev/null
+++ b/docs/api/classes/IndicesGPUBuffer.md
@@ -0,0 +1,1298 @@
+# Class: IndicesGPUBuffer
+
+The buffer use at geometry indices
+written in the computer shader or CPU Coder
+usage GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.INDEX | GPUBufferUsage.INDIRECT
+
+## Hierarchy
+
+- `GPUBufferBase`
+
+ ↳ **`IndicesGPUBuffer`**
+
+### Constructors
+
+- [constructor](IndicesGPUBuffer.md#constructor)
+
+### Properties
+
+- [bufferType](IndicesGPUBuffer.md#buffertype)
+- [buffer](IndicesGPUBuffer.md#buffer)
+- [memory](IndicesGPUBuffer.md#memory)
+- [memoryNodes](IndicesGPUBuffer.md#memorynodes)
+- [seek](IndicesGPUBuffer.md#seek)
+- [outFloat32Array](IndicesGPUBuffer.md#outfloat32array)
+- [byteSize](IndicesGPUBuffer.md#bytesize)
+- [usage](IndicesGPUBuffer.md#usage)
+- [visibility](IndicesGPUBuffer.md#visibility)
+- [indicesNode](IndicesGPUBuffer.md#indicesnode)
+
+### Methods
+
+- [debug](IndicesGPUBuffer.md#debug)
+- [reset](IndicesGPUBuffer.md#reset)
+- [setBoolean](IndicesGPUBuffer.md#setboolean)
+- [readBoole](IndicesGPUBuffer.md#readboole)
+- [setFloat](IndicesGPUBuffer.md#setfloat)
+- [getFloat](IndicesGPUBuffer.md#getfloat)
+- [setInt8](IndicesGPUBuffer.md#setint8)
+- [getInt8](IndicesGPUBuffer.md#getint8)
+- [setInt16](IndicesGPUBuffer.md#setint16)
+- [getInt16](IndicesGPUBuffer.md#getint16)
+- [setInt32](IndicesGPUBuffer.md#setint32)
+- [getInt32](IndicesGPUBuffer.md#getint32)
+- [setUint8](IndicesGPUBuffer.md#setuint8)
+- [getUint8](IndicesGPUBuffer.md#getuint8)
+- [setUint16](IndicesGPUBuffer.md#setuint16)
+- [getUint16](IndicesGPUBuffer.md#getuint16)
+- [setUint32](IndicesGPUBuffer.md#setuint32)
+- [getUint32](IndicesGPUBuffer.md#getuint32)
+- [setVector2](IndicesGPUBuffer.md#setvector2)
+- [getVector2](IndicesGPUBuffer.md#getvector2)
+- [setVector3](IndicesGPUBuffer.md#setvector3)
+- [getVector3](IndicesGPUBuffer.md#getvector3)
+- [setVector4](IndicesGPUBuffer.md#setvector4)
+- [getVector4](IndicesGPUBuffer.md#getvector4)
+- [setVector4Array](IndicesGPUBuffer.md#setvector4array)
+- [setColor](IndicesGPUBuffer.md#setcolor)
+- [getColor](IndicesGPUBuffer.md#getcolor)
+- [setColorArray](IndicesGPUBuffer.md#setcolorarray)
+- [setMatrix](IndicesGPUBuffer.md#setmatrix)
+- [setMatrixArray](IndicesGPUBuffer.md#setmatrixarray)
+- [setArray](IndicesGPUBuffer.md#setarray)
+- [setFloat32Array](IndicesGPUBuffer.md#setfloat32array)
+- [setInt32Array](IndicesGPUBuffer.md#setint32array)
+- [setUint32Array](IndicesGPUBuffer.md#setuint32array)
+- [setStruct](IndicesGPUBuffer.md#setstruct)
+- [setStructArray](IndicesGPUBuffer.md#setstructarray)
+- [clean](IndicesGPUBuffer.md#clean)
+- [apply](IndicesGPUBuffer.md#apply)
+- [mapAsyncWrite](IndicesGPUBuffer.md#mapasyncwrite)
+- [destroy](IndicesGPUBuffer.md#destroy)
+- [resizeBuffer](IndicesGPUBuffer.md#resizebuffer)
+- [readBuffer](IndicesGPUBuffer.md#readbuffer)
+
+## Constructors
+
+### constructor
+
+• **new IndicesGPUBuffer**(`data?`): [`IndicesGPUBuffer`](IndicesGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data?` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+[`IndicesGPUBuffer`](IndicesGPUBuffer.md)
+
+#### Overrides
+
+GPUBufferBase.constructor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/IndicesGPUBuffer.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/IndicesGPUBuffer.ts#L16)
+
+## Properties
+
+### bufferType
+
+• **bufferType**: [`GPUBufferType`](../enums/GPUBufferType.md)
+
+#### Inherited from
+
+GPUBufferBase.bufferType
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L20)
+
+___
+
+### buffer
+
+• **buffer**: `GPUBuffer`
+
+#### Inherited from
+
+GPUBufferBase.buffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L21)
+
+___
+
+### memory
+
+• **memory**: `MemoryDO`
+
+#### Inherited from
+
+GPUBufferBase.memory
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L22)
+
+___
+
+### memoryNodes
+
+• **memoryNodes**: `Map`\<`string` \| `number`, `MemoryInfo`\>
+
+#### Inherited from
+
+GPUBufferBase.memoryNodes
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L23)
+
+___
+
+### seek
+
+• **seek**: `number`
+
+#### Inherited from
+
+GPUBufferBase.seek
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L24)
+
+___
+
+### outFloat32Array
+
+• **outFloat32Array**: `Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.outFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L25)
+
+___
+
+### byteSize
+
+• **byteSize**: `number`
+
+#### Inherited from
+
+GPUBufferBase.byteSize
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L26)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+#### Inherited from
+
+GPUBufferBase.usage
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L27)
+
+___
+
+### visibility
+
+• **visibility**: `number`
+
+#### Inherited from
+
+GPUBufferBase.visibility
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L28)
+
+___
+
+### indicesNode
+
+• **indicesNode**: `MemoryInfo`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/IndicesGPUBuffer.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/IndicesGPUBuffer.ts#L15)
+
+## Methods
+
+### debug
+
+▸ **debug**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.debug
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L41)
+
+___
+
+### reset
+
+▸ **reset**(`clean?`, `size?`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `clean` | `boolean` | `false` |
+| `size` | `number` | `0` |
+| `data?` | `Float32Array` | `undefined` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.reset
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L44)
+
+___
+
+### setBoolean
+
+▸ **setBoolean**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setBoolean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L52)
+
+___
+
+### readBoole
+
+▸ **readBoole**(`name`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+GPUBufferBase.readBoole
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L62)
+
+___
+
+### setFloat
+
+▸ **setFloat**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L70)
+
+___
+
+### getFloat
+
+▸ **getFloat**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L79)
+
+___
+
+### setInt8
+
+▸ **setInt8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L87)
+
+___
+
+### getInt8
+
+▸ **getInt8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L96)
+
+___
+
+### setInt16
+
+▸ **setInt16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L104)
+
+___
+
+### getInt16
+
+▸ **getInt16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L113)
+
+___
+
+### setInt32
+
+▸ **setInt32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L121)
+
+___
+
+### getInt32
+
+▸ **getInt32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:130](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L130)
+
+___
+
+### setUint8
+
+▸ **setUint8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:138](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L138)
+
+___
+
+### getUint8
+
+▸ **getUint8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L147)
+
+___
+
+### setUint16
+
+▸ **setUint16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L156)
+
+___
+
+### getUint16
+
+▸ **getUint16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L165)
+
+___
+
+### setUint32
+
+▸ **setUint32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L173)
+
+___
+
+### getUint32
+
+▸ **getUint32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L182)
+
+___
+
+### setVector2
+
+▸ **setVector2**(`name`, `v2`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v2` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L190)
+
+___
+
+### getVector2
+
+▸ **getVector2**(`name`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+GPUBufferBase.getVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L199)
+
+___
+
+### setVector3
+
+▸ **setVector3**(`name`, `v3`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v3` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L207)
+
+___
+
+### getVector3
+
+▸ **getVector3**(`name`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+GPUBufferBase.getVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L216)
+
+___
+
+### setVector4
+
+▸ **setVector4**(`name`, `v4`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4` | `Vector4` \| [`Quaternion`](Quaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L224)
+
+___
+
+### getVector4
+
+▸ **getVector4**(`name`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+GPUBufferBase.getVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L233)
+
+___
+
+### setVector4Array
+
+▸ **setVector4Array**(`name`, `v4Array`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4Array` | [`Vector3`](Vector3.md)[] \| `Vector4`[] \| [`Quaternion`](Quaternion.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:241](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L241)
+
+___
+
+### setColor
+
+▸ **setColor**(`name`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `color` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:250](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L250)
+
+___
+
+### getColor
+
+▸ **getColor**(`name`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+GPUBufferBase.getColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:259](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L259)
+
+___
+
+### setColorArray
+
+▸ **setColorArray**(`name`, `colorArray`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `colorArray` | [`Color`](Color.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColorArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:267](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L267)
+
+___
+
+### setMatrix
+
+▸ **setMatrix**(`name`, `mat`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mat` | [`Matrix4`](Matrix4.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrix
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:276](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L276)
+
+___
+
+### setMatrixArray
+
+▸ **setMatrixArray**(`name`, `mats`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mats` | [`Matrix4`](Matrix4.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrixArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:285](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L285)
+
+___
+
+### setArray
+
+▸ **setArray**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `number`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:297](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L297)
+
+___
+
+### setFloat32Array
+
+▸ **setFloat32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Float32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:306](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L306)
+
+___
+
+### setInt32Array
+
+▸ **setInt32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Int32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L315)
+
+___
+
+### setUint32Array
+
+▸ **setUint32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Uint32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:325](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L325)
+
+___
+
+### setStruct
+
+▸ **setStruct**\<`T`\>(`c`, `index`, `data`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `index` | `number` |
+| `data` | `any` |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStruct
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:334](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L334)
+
+___
+
+### setStructArray
+
+▸ **setStructArray**\<`T`\>(`c`, `dataList`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `dataList` | `any`[] |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStructArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:390](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L390)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.clean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:403](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L403)
+
+___
+
+### apply
+
+▸ **apply**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.apply
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L408)
+
+___
+
+### mapAsyncWrite
+
+▸ **mapAsyncWrite**(`mapAsyncArray`, `len`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mapAsyncArray` | `Float32Array` |
+| `len` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.mapAsyncWrite
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:413](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L413)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.destroy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:454](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L454)
+
+___
+
+### resizeBuffer
+
+▸ **resizeBuffer**(`size`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `size` | `number` |
+| `data?` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.resizeBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:511](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L511)
+
+___
+
+### readBuffer
+
+▸ **readBuffer**(): `Float32Array`
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:558](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L558)
+
+▸ **readBuffer**(`promise`): `Float32Array`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``false`` |
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:559](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L559)
+
+▸ **readBuffer**(`promise`): `Promise`\<`Float32Array`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``true`` |
+
+#### Returns
+
+`Promise`\<`Float32Array`\>
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:560](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L560)
diff --git a/docs/api/classes/InputSystem.md b/docs/api/classes/InputSystem.md
new file mode 100644
index 00000000..85984fdb
--- /dev/null
+++ b/docs/api/classes/InputSystem.md
@@ -0,0 +1,526 @@
+# Class: InputSystem
+
+Processing input devices, such as mouse, keyboard, and touch.
+If the current event does not occur within the View3D, it will not be dispatched
+
+## Hierarchy
+
+- [`CEventDispatcher`](CEventDispatcher.md)
+
+ ↳ **`InputSystem`**
+
+### Constructors
+
+- [constructor](InputSystem.md#constructor)
+
+### Properties
+
+- [canvasX](InputSystem.md#canvasx)
+- [canvasY](InputSystem.md#canvasy)
+- [isMouseDown](InputSystem.md#ismousedown)
+- [isRightMouseDown](InputSystem.md#isrightmousedown)
+- [canvas](InputSystem.md#canvas)
+- [mouseX](InputSystem.md#mousex)
+- [mouseY](InputSystem.md#mousey)
+- [wheelDelta](InputSystem.md#wheeldelta)
+- [mouseOffsetX](InputSystem.md#mouseoffsetx)
+- [mouseOffsetY](InputSystem.md#mouseoffsety)
+- [mouseLastX](InputSystem.md#mouselastx)
+- [mouseLastY](InputSystem.md#mouselasty)
+- [mouseLock](InputSystem.md#mouselock)
+
+### Methods
+
+- [dispatchEvent](InputSystem.md#dispatchevent)
+- [destroy](InputSystem.md#destroy)
+- [addEventListener](InputSystem.md#addeventlistener)
+- [removeEventListener](InputSystem.md#removeeventlistener)
+- [removeEventListenerAt](InputSystem.md#removeeventlistenerat)
+- [removeAllEventListener](InputSystem.md#removealleventlistener)
+- [containEventListener](InputSystem.md#containeventlistener)
+- [hasEventListener](InputSystem.md#haseventlistener)
+- [initCanvas](InputSystem.md#initcanvas)
+- [useMouseLock](InputSystem.md#usemouselock)
+- [releaseMouseLock](InputSystem.md#releasemouselock)
+- [onMouseLockMove](InputSystem.md#onmouselockmove)
+- [GetSlideDirection](InputSystem.md#getslidedirection)
+
+## Constructors
+
+### constructor
+
+• **new InputSystem**(): [`InputSystem`](InputSystem.md)
+
+#### Returns
+
+[`InputSystem`](InputSystem.md)
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[constructor](CEventDispatcher.md#constructor)
+
+## Properties
+
+### canvasX
+
+• **canvasX**: `number` = `0`
+
+coord x of canvas
+
+#### Defined in
+
+[src/io/InputSystem.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L22)
+
+___
+
+### canvasY
+
+• **canvasY**: `number` = `0`
+
+coord y of canvas
+
+#### Defined in
+
+[src/io/InputSystem.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L26)
+
+___
+
+### isMouseDown
+
+• **isMouseDown**: `boolean` = `false`
+
+whether the mouse is down now
+
+#### Defined in
+
+[src/io/InputSystem.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L31)
+
+___
+
+### isRightMouseDown
+
+• **isRightMouseDown**: `boolean` = `false`
+
+whether the mouse right key is down now
+
+#### Defined in
+
+[src/io/InputSystem.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L36)
+
+___
+
+### canvas
+
+• **canvas**: `HTMLCanvasElement`
+
+reference of canvas
+
+#### Defined in
+
+[src/io/InputSystem.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L41)
+
+___
+
+### mouseX
+
+• **mouseX**: `number` = `0`
+
+current mouse coordinate x of Canvas
+
+#### Defined in
+
+[src/io/InputSystem.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L46)
+
+___
+
+### mouseY
+
+• **mouseY**: `number` = `0`
+
+current mouse coordinate y of Canvas
+
+#### Defined in
+
+[src/io/InputSystem.ts:51](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L51)
+
+___
+
+### wheelDelta
+
+• **wheelDelta**: `number` = `0`
+
+the delta value when mouse wheeled
+
+#### Defined in
+
+[src/io/InputSystem.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L56)
+
+___
+
+### mouseOffsetX
+
+• **mouseOffsetX**: `number` = `0`
+
+the delta value of mouse x
+
+#### Defined in
+
+[src/io/InputSystem.ts:61](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L61)
+
+___
+
+### mouseOffsetY
+
+• **mouseOffsetY**: `number` = `0`
+
+the delta value of mouse y
+
+#### Defined in
+
+[src/io/InputSystem.ts:66](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L66)
+
+___
+
+### mouseLastX
+
+• **mouseLastX**: `number` = `0`
+
+the history value of mouse x
+
+#### Defined in
+
+[src/io/InputSystem.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L71)
+
+___
+
+### mouseLastY
+
+• **mouseLastY**: `number` = `0`
+
+the history value of mouse y
+
+#### Defined in
+
+[src/io/InputSystem.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L78)
+
+___
+
+### mouseLock
+
+• **mouseLock**: `boolean` = `false`
+
+#### Defined in
+
+[src/io/InputSystem.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L88)
+
+## Methods
+
+### dispatchEvent
+
+▸ **dispatchEvent**(`event`): `void`
+
+Dispatch an event to all registered objects with a specific type of listener.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `event` | [`CEvent`](CEvent.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[dispatchEvent](CEventDispatcher.md#dispatchevent)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L24)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+release all registered event.
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[destroy](CEventDispatcher.md#destroy)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L55)
+
+___
+
+### addEventListener
+
+▸ **addEventListener**(`type`, `callback`, `thisObject`, `param?`, `priority?`): `number`
+
+register an event listener to event distancher.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event type. |
+| `callback` | `Function` | `undefined` | {Function} The callback function that handles events. This function must accept an Event3D object as its unique parameter and cannot return any result. for example: function(evt:Event3D):void. |
+| `thisObject` | `any` | `undefined` | {any} Current registration object, it'll call callback function. |
+| `param` | `any` | `null` | {any} the data binded to registered event, the default value is null. |
+| `priority` | `number` | `0` | {number} The priority of callback function execution, with a larger set value having priority to call |
+
+#### Returns
+
+`number`
+
+Returns register event id
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[addEventListener](CEventDispatcher.md#addeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L79)
+
+___
+
+### removeEventListener
+
+▸ **removeEventListener**(`type`, `callback`, `thisObject`): `void`
+
+Remove Event Listening
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` \| `number` | {string} event type |
+| `callback` | `Function` | {Function} callback function of event register |
+| `thisObject` | `any` | {any} The current registered object. |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[removeEventListener](CEventDispatcher.md#removeeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L113)
+
+___
+
+### removeEventListenerAt
+
+▸ **removeEventListenerAt**(`id`): `boolean`
+
+Remove an event Listening with id
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[removeEventListenerAt](CEventDispatcher.md#removeeventlistenerat)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L133)
+
+___
+
+### removeAllEventListener
+
+▸ **removeAllEventListener**(`eventType?`): `void`
+
+Specify a event type to remove all related event listeners
+eventType event type, set null to remove all event listeners
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `eventType` | `string` \| `number` | `null` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[removeAllEventListener](CEventDispatcher.md#removealleventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L153)
+
+___
+
+### containEventListener
+
+▸ **containEventListener**(`type`): `boolean`
+
+whether the target presence of a listener with event type.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` | {string} event type. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[containEventListener](CEventDispatcher.md#containeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:185](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L185)
+
+___
+
+### hasEventListener
+
+▸ **hasEventListener**(`type`, `callback?`, `thisObject?`): `boolean`
+
+whether the target presence of a listener with event type. it associate more registration parameters.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event name. |
+| `callback` | `Function` | `null` | {Function} callback function of event register. |
+| `thisObject` | `any` | `null` | {any} The registered object. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[hasEventListener](CEventDispatcher.md#haseventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L198)
+
+___
+
+### initCanvas
+
+▸ **initCanvas**(`canvas`): `void`
+
+init the input system
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `canvas` | `HTMLCanvasElement` | the reference of canvas |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/io/InputSystem.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L96)
+
+___
+
+### useMouseLock
+
+▸ **useMouseLock**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/io/InputSystem.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L177)
+
+___
+
+### releaseMouseLock
+
+▸ **releaseMouseLock**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/io/InputSystem.ts:184](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L184)
+
+___
+
+### onMouseLockMove
+
+▸ **onMouseLockMove**(`e`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `e` | `MouseEvent` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/io/InputSystem.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L190)
+
+___
+
+### GetSlideDirection
+
+▸ **GetSlideDirection**(`startX`, `startY`, `endX`, `endY`): `number`
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `startX` | `number` | {Number} |
+| `startY` | `number` | {Number} |
+| `endX` | `number` | {Number} |
+| `endY` | `number` | {Number} |
+
+#### Returns
+
+`number`
+
+result {number} 1: up, 2: down, 3: left, 4: right, 0: not move
+
+#### Defined in
+
+[src/io/InputSystem.ts:493](https://github.com/Orillusion/orillusion/blob/main/src/io/InputSystem.ts#L493)
diff --git a/docs/api/classes/InstanceDrawComponent.md b/docs/api/classes/InstanceDrawComponent.md
new file mode 100644
index 00000000..58c36772
--- /dev/null
+++ b/docs/api/classes/InstanceDrawComponent.md
@@ -0,0 +1,1389 @@
+# Class: InstanceDrawComponent
+
+## Hierarchy
+
+- `RenderNode`
+
+ ↳ **`InstanceDrawComponent`**
+
+### Constructors
+
+- [constructor](InstanceDrawComponent.md#constructor)
+
+### Properties
+
+- [object3D](InstanceDrawComponent.md#object3d)
+- [isDestroyed](InstanceDrawComponent.md#isdestroyed)
+- [instanceCount](InstanceDrawComponent.md#instancecount)
+- [lodLevel](InstanceDrawComponent.md#lodlevel)
+- [alwaysRender](InstanceDrawComponent.md#alwaysrender)
+- [instanceID](InstanceDrawComponent.md#instanceid)
+- [drawType](InstanceDrawComponent.md#drawtype)
+- [isRenderOrderChange](InstanceDrawComponent.md#isrenderorderchange)
+- [needSortOnCameraZ](InstanceDrawComponent.md#needsortoncameraz)
+- [isRecievePostEffectUI](InstanceDrawComponent.md#isrecieveposteffectui)
+
+### Accessors
+
+- [eventDispatcher](InstanceDrawComponent.md#eventdispatcher)
+- [isStart](InstanceDrawComponent.md#isstart)
+- [transform](InstanceDrawComponent.md#transform)
+- [enable](InstanceDrawComponent.md#enable)
+- [renderLayer](InstanceDrawComponent.md#renderlayer)
+- [geometry](InstanceDrawComponent.md#geometry)
+- [rendererMask](InstanceDrawComponent.md#renderermask)
+- [renderOrder](InstanceDrawComponent.md#renderorder)
+- [materials](InstanceDrawComponent.md#materials)
+- [castShadow](InstanceDrawComponent.md#castshadow)
+- [castGI](InstanceDrawComponent.md#castgi)
+- [castReflection](InstanceDrawComponent.md#castreflection)
+
+### Methods
+
+- [onUpdate](InstanceDrawComponent.md#onupdate)
+- [onLateUpdate](InstanceDrawComponent.md#onlateupdate)
+- [onBeforeUpdate](InstanceDrawComponent.md#onbeforeupdate)
+- [onCompute](InstanceDrawComponent.md#oncompute)
+- [onGraphic](InstanceDrawComponent.md#ongraphic)
+- [onParentChange](InstanceDrawComponent.md#onparentchange)
+- [onAddChild](InstanceDrawComponent.md#onaddchild)
+- [onRemoveChild](InstanceDrawComponent.md#onremovechild)
+- [cloneTo](InstanceDrawComponent.md#cloneto)
+- [init](InstanceDrawComponent.md#init)
+- [start](InstanceDrawComponent.md#start)
+- [stop](InstanceDrawComponent.md#stop)
+- [nodeUpdate](InstanceDrawComponent.md#nodeupdate)
+- [renderPass](InstanceDrawComponent.md#renderpass)
+- [renderItem](InstanceDrawComponent.md#renderitem)
+- [attachSceneOctree](InstanceDrawComponent.md#attachsceneoctree)
+- [detachSceneOctree](InstanceDrawComponent.md#detachsceneoctree)
+- [copyComponent](InstanceDrawComponent.md#copycomponent)
+- [addMask](InstanceDrawComponent.md#addmask)
+- [removeMask](InstanceDrawComponent.md#removemask)
+- [hasMask](InstanceDrawComponent.md#hasmask)
+- [addRendererMask](InstanceDrawComponent.md#addrenderermask)
+- [removeRendererMask](InstanceDrawComponent.md#removerenderermask)
+- [onEnable](InstanceDrawComponent.md#onenable)
+- [onDisable](InstanceDrawComponent.md#ondisable)
+- [selfCloneMaterials](InstanceDrawComponent.md#selfclonematerials)
+- [renderPass2](InstanceDrawComponent.md#renderpass2)
+- [recordRenderPass2](InstanceDrawComponent.md#recordrenderpass2)
+- [preInit](InstanceDrawComponent.md#preinit)
+- [beforeDestroy](InstanceDrawComponent.md#beforedestroy)
+- [destroy](InstanceDrawComponent.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new InstanceDrawComponent**(): [`InstanceDrawComponent`](InstanceDrawComponent.md)
+
+#### Returns
+
+[`InstanceDrawComponent`](InstanceDrawComponent.md)
+
+#### Overrides
+
+RenderNode.constructor
+
+#### Defined in
+
+[src/components/renderer/InstanceDrawComponent.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/InstanceDrawComponent.ts#L19)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+RenderNode.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+RenderNode.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+RenderNode.instanceCount
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+RenderNode.lodLevel
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+RenderNode.alwaysRender
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+RenderNode.instanceID
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+RenderNode.drawType
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+RenderNode.isRenderOrderChange
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+RenderNode.needSortOnCameraZ
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+RenderNode.isRecievePostEffectUI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+RenderNode.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+RenderNode.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+RenderNode.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### geometry
+
+• `get` **geometry**(): [`GeometryBase`](GeometryBase.md)
+
+#### Returns
+
+[`GeometryBase`](GeometryBase.md)
+
+#### Inherited from
+
+RenderNode.geometry
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L122)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryBase`](GeometryBase.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.geometry
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:126](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L126)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+RenderNode.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+RenderNode.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): [`Material`](Material.md)[]
+
+#### Returns
+
+[`Material`](Material.md)[]
+
+#### Inherited from
+
+RenderNode.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Material`](Material.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+## Methods
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.init
+
+#### Defined in
+
+[src/components/renderer/InstanceDrawComponent.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/InstanceDrawComponent.ts#L23)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.start
+
+#### Defined in
+
+[src/components/renderer/InstanceDrawComponent.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/InstanceDrawComponent.ts#L29)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.stop
+
+#### Defined in
+
+[src/components/renderer/InstanceDrawComponent.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/InstanceDrawComponent.ts#L67)
+
+___
+
+### nodeUpdate
+
+▸ **nodeUpdate**(`view`, `passType`, `renderPassState`, `clusterLightingBuffer?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `passType` | `PassType` |
+| `renderPassState` | `RendererPassState` |
+| `clusterLightingBuffer?` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.nodeUpdate
+
+#### Defined in
+
+[src/components/renderer/InstanceDrawComponent.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/InstanceDrawComponent.ts#L71)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `passType` | `PassType` |
+| `renderContext` | [`RenderContext`](RenderContext.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.renderPass
+
+#### Defined in
+
+[src/components/renderer/InstanceDrawComponent.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/InstanceDrawComponent.ts#L91)
+
+___
+
+### renderItem
+
+▸ **renderItem**(`view`, `passType`, `renderNode`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `passType` | `PassType` |
+| `renderNode` | `RenderNode` |
+| `renderContext` | [`RenderContext`](RenderContext.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/renderer/InstanceDrawComponent.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/InstanceDrawComponent.ts#L99)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | [`Octree`](Octree.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.attachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.detachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+RenderNode.copyComponent
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:95](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L95)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.addMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.removeMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.hasMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.addRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.removeRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.onEnable
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:236](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L236)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.onDisable
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:246](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L246)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+RenderNode.selfCloneMaterials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+render pass at passType
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.renderPass2
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L438)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.recordRenderPass2
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.preInit
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.beforeDestroy
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.destroy
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:625](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L625)
diff --git a/docs/api/classes/InstancedMesh.md b/docs/api/classes/InstancedMesh.md
new file mode 100644
index 00000000..7cfb2a47
--- /dev/null
+++ b/docs/api/classes/InstancedMesh.md
@@ -0,0 +1,1868 @@
+# Class: InstancedMesh
+
+The base class of most objects provides a series of properties and methods for manipulating objects in three-dimensional space.
+
+## Hierarchy
+
+- [`Object3D`](Object3D.md)
+
+ ↳ **`InstancedMesh`**
+
+### Constructors
+
+- [constructor](InstancedMesh.md#constructor)
+
+### Properties
+
+- [name](InstancedMesh.md#name)
+- [transform](InstancedMesh.md#transform)
+- [renderNode](InstancedMesh.md#rendernode)
+- [entityChildren](InstancedMesh.md#entitychildren)
+- [components](InstancedMesh.md#components)
+- [prefabRef](InstancedMesh.md#prefabref)
+- [serializeTag](InstancedMesh.md#serializetag)
+
+### Accessors
+
+- [instanceID](InstancedMesh.md#instanceid)
+- [numChildren](InstancedMesh.md#numchildren)
+- [bound](InstancedMesh.md#bound)
+- [isScene3D](InstancedMesh.md#isscene3d)
+- [localPosition](InstancedMesh.md#localposition)
+- [localRotation](InstancedMesh.md#localrotation)
+- [localScale](InstancedMesh.md#localscale)
+- [localQuaternion](InstancedMesh.md#localquaternion)
+- [parent](InstancedMesh.md#parent)
+- [parentObject](InstancedMesh.md#parentobject)
+- [x](InstancedMesh.md#x)
+- [y](InstancedMesh.md#y)
+- [z](InstancedMesh.md#z)
+- [scaleX](InstancedMesh.md#scalex)
+- [scaleY](InstancedMesh.md#scaley)
+- [scaleZ](InstancedMesh.md#scalez)
+- [rotationX](InstancedMesh.md#rotationx)
+- [rotationY](InstancedMesh.md#rotationy)
+- [rotationZ](InstancedMesh.md#rotationz)
+
+### Methods
+
+- [getObjectByName](InstancedMesh.md#getobjectbyname)
+- [addChild](InstancedMesh.md#addchild)
+- [removeChild](InstancedMesh.md#removechild)
+- [removeAllChild](InstancedMesh.md#removeallchild)
+- [removeSelf](InstancedMesh.md#removeself)
+- [removeChildByIndex](InstancedMesh.md#removechildbyindex)
+- [hasChild](InstancedMesh.md#haschild)
+- [removeFromParent](InstancedMesh.md#removefromparent)
+- [getChildByIndex](InstancedMesh.md#getchildbyindex)
+- [getChildByName](InstancedMesh.md#getchildbyname)
+- [noticeComponents](InstancedMesh.md#noticecomponents)
+- [setMatrixAt](InstancedMesh.md#setmatrixat)
+- [forChild](InstancedMesh.md#forchild)
+- [addComponent](InstancedMesh.md#addcomponent)
+- [getOrAddComponent](InstancedMesh.md#getoraddcomponent)
+- [removeComponent](InstancedMesh.md#removecomponent)
+- [hasComponent](InstancedMesh.md#hascomponent)
+- [getComponent](InstancedMesh.md#getcomponent)
+- [getComponentFromParent](InstancedMesh.md#getcomponentfromparent)
+- [getComponentsInChild](InstancedMesh.md#getcomponentsinchild)
+- [getComponents](InstancedMesh.md#getcomponents)
+- [getComponentsExt](InstancedMesh.md#getcomponentsext)
+- [getComponentsByProperty](InstancedMesh.md#getcomponentsbyproperty)
+- [clone](InstancedMesh.md#clone)
+- [notifyChange](InstancedMesh.md#notifychange)
+- [traverse](InstancedMesh.md#traverse)
+- [destroy](InstancedMesh.md#destroy)
+- [dispatchEvent](InstancedMesh.md#dispatchevent)
+- [addEventListener](InstancedMesh.md#addeventlistener)
+- [removeEventListener](InstancedMesh.md#removeeventlistener)
+- [removeEventListenerAt](InstancedMesh.md#removeeventlistenerat)
+- [removeAllEventListener](InstancedMesh.md#removealleventlistener)
+- [containEventListener](InstancedMesh.md#containeventlistener)
+- [hasEventListener](InstancedMesh.md#haseventlistener)
+
+## Constructors
+
+### constructor
+
+• **new InstancedMesh**(`geometry`, `material`, `length`): [`InstancedMesh`](InstancedMesh.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `geometry` | [`GeometryBase`](GeometryBase.md) |
+| `material` | [`Material`](Material.md) |
+| `length` | `number` |
+
+#### Returns
+
+[`InstancedMesh`](InstancedMesh.md)
+
+#### Overrides
+
+[Object3D](Object3D.md).[constructor](Object3D.md#constructor)
+
+#### Defined in
+
+[src/core/entities/InstancedMesh.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/InstancedMesh.ts#L15)
+
+## Properties
+
+### name
+
+• **name**: `string` = `''`
+
+The name of the object. The default value is an empty string.
+
+#### Inherited from
+
+[Object3D](Object3D.md).[name](Object3D.md#name)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L24)
+
+___
+
+### transform
+
+• **transform**: [`Transform`](Transform.md)
+
+The Transform attached to this object.
+
+#### Inherited from
+
+[Object3D](Object3D.md).[transform](Object3D.md#transform)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L42)
+
+___
+
+### renderNode
+
+• **renderNode**: `RenderNode`
+
+Renderer components
+
+#### Inherited from
+
+[Object3D](Object3D.md).[renderNode](Object3D.md#rendernode)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L47)
+
+___
+
+### entityChildren
+
+• **entityChildren**: [`Entity`](Entity.md)[]
+
+An array containing sub objects of an object
+
+#### Inherited from
+
+[Object3D](Object3D.md).[entityChildren](Object3D.md#entitychildren)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L52)
+
+___
+
+### components
+
+• **components**: `Map`\<`any`, [`IComponent`](../interfaces/IComponent.md)\>
+
+List of components attached to an object
+
+#### Inherited from
+
+[Object3D](Object3D.md).[components](Object3D.md#components)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L57)
+
+___
+
+### prefabRef
+
+• `Optional` **prefabRef**: `string`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[prefabRef](Object3D.md#prefabref)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L19)
+
+___
+
+### serializeTag
+
+• `Optional` **serializeTag**: [`SerializeTag`](../types/SerializeTag.md)
+
+#### Inherited from
+
+[Object3D](Object3D.md).[serializeTag](Object3D.md#serializetag)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L20)
+
+## Accessors
+
+### instanceID
+
+• `get` **instanceID**(): `string`
+
+The unique identifier of the object.
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Object3D.instanceID
+
+#### Defined in
+
+[src/core/entities/Entity.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L32)
+
+___
+
+### numChildren
+
+• `get` **numChildren**(): `number`
+
+Returns the number of child objects of an object
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.numChildren
+
+#### Defined in
+
+[src/core/entities/Entity.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L116)
+
+___
+
+### bound
+
+• `get` **bound**(): `IBound`
+
+#### Returns
+
+`IBound`
+
+#### Inherited from
+
+Object3D.bound
+
+#### Defined in
+
+[src/core/entities/Entity.ts:277](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L277)
+
+• `set` **bound**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `IBound` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.bound
+
+#### Defined in
+
+[src/core/entities/Entity.ts:282](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L282)
+
+___
+
+### isScene3D
+
+• `get` **isScene3D**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Object3D.isScene3D
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L30)
+
+___
+
+### localPosition
+
+• `get` **localPosition**(): [`Vector3`](Vector3.md)
+
+Get the position of an object relative to its parent
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Object3D.localPosition
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:272](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L272)
+
+• `set` **localPosition**(`value`): `void`
+
+Set the position of an object relative to its parent
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.localPosition
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:279](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L279)
+
+___
+
+### localRotation
+
+• `get` **localRotation**(): [`Vector3`](Vector3.md)
+
+Get the rotation attribute of an object relative to its parent
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Object3D.localRotation
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:286](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L286)
+
+• `set` **localRotation**(`value`): `void`
+
+Set the rotation attribute of an object relative to its parent
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.localRotation
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:293](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L293)
+
+___
+
+### localScale
+
+• `get` **localScale**(): [`Vector3`](Vector3.md)
+
+Get the scaling attribute of an object relative to its parent
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Object3D.localScale
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:300](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L300)
+
+• `set` **localScale**(`value`): `void`
+
+Set the scaling attribute of an object relative to its parent
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.localScale
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:307](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L307)
+
+___
+
+### localQuaternion
+
+• `get` **localQuaternion**(): [`Quaternion`](Quaternion.md)
+
+Get the rotation attribute of an object relative to its parent, which is a quaternion
+
+#### Returns
+
+[`Quaternion`](Quaternion.md)
+
+#### Inherited from
+
+Object3D.localQuaternion
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:314](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L314)
+
+• `set` **localQuaternion**(`value`): `void`
+
+Set the rotation attribute of an object relative to its parent, which is a quaternion
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Quaternion`](Quaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.localQuaternion
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:321](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L321)
+
+___
+
+### parent
+
+• `get` **parent**(): [`Transform`](Transform.md)
+
+Transform component of object parent
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+Object3D.parent
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:336](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L336)
+
+___
+
+### parentObject
+
+• `get` **parentObject**(): [`Object3D`](Object3D.md)
+
+parent object3D
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+Object3D.parentObject
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:344](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L344)
+
+___
+
+### x
+
+• `get` **x**(): `number`
+
+Get the x coordinate relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.x
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:360](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L360)
+
+• `set` **x**(`value`): `void`
+
+Set the x coordinate relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.x
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:352](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L352)
+
+___
+
+### y
+
+• `get` **y**(): `number`
+
+Get the y coordinate relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.y
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:375](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L375)
+
+• `set` **y**(`value`): `void`
+
+Set the y coordinate relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.y
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:367](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L367)
+
+___
+
+### z
+
+• `get` **z**(): `number`
+
+Get the z coordinate relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.z
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:389](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L389)
+
+• `set` **z**(`value`): `void`
+
+Set the z coordinate relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.z
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:382](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L382)
+
+___
+
+### scaleX
+
+• `get` **scaleX**(): `number`
+
+Get the x scale relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.scaleX
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:404](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L404)
+
+• `set` **scaleX**(`value`): `void`
+
+Set the x scale relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.scaleX
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:396](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L396)
+
+___
+
+### scaleY
+
+• `get` **scaleY**(): `number`
+
+Get the y scale relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.scaleY
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:420](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L420)
+
+• `set` **scaleY**(`value`): `void`
+
+Set the y scale relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.scaleY
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L412)
+
+___
+
+### scaleZ
+
+• `get` **scaleZ**(): `number`
+
+Get the z scale relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.scaleZ
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:436](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L436)
+
+• `set` **scaleZ**(`value`): `void`
+
+Set the z scale relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.scaleZ
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:428](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L428)
+
+___
+
+### rotationX
+
+• `get` **rotationX**(): `number`
+
+Get the x rotation relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.rotationX
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:452](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L452)
+
+• `set` **rotationX**(`value`): `void`
+
+Set the x rotation relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.rotationX
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:444](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L444)
+
+___
+
+### rotationY
+
+• `get` **rotationY**(): `number`
+
+Get the y rotation relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.rotationY
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:468](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L468)
+
+• `set` **rotationY**(`value`): `void`
+
+Set the y rotation relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.rotationY
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:460](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L460)
+
+___
+
+### rotationZ
+
+• `get` **rotationZ**(): `number`
+
+Set the z rotation relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.rotationZ
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:484](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L484)
+
+• `set` **rotationZ**(`value`): `void`
+
+Set the z rotation relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.rotationZ
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:476](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L476)
+
+## Methods
+
+### getObjectByName
+
+▸ **getObjectByName**(`name`): [`Entity`](Entity.md)
+
+Starting from the object itself, search for the object and its children, and return the first child object with a matching name.
+For most objects, the name is an empty string by default. You must manually set it to use this method.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | input name |
+
+#### Returns
+
+[`Entity`](Entity.md)
+
+result Entity
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getObjectByName](Object3D.md#getobjectbyname)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L81)
+
+___
+
+### addChild
+
+▸ **addChild**(`child`): [`Entity`](Entity.md)
+
+Add an object as a child of this object. You can add any number of objects.
+Any current parent object on the object passed here will be deleted, as an object can only have at most one parent object.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | [`Entity`](Entity.md) | target child entity |
+
+#### Returns
+
+[`Entity`](Entity.md)
+
+#### Inherited from
+
+[Object3D](Object3D.md).[addChild](Object3D.md#addchild)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:127](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L127)
+
+___
+
+### removeChild
+
+▸ **removeChild**(`child`): `void`
+
+Remove the child objects of the object. You can remove any number of objects.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | [`Entity`](Entity.md) | Removed objects |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeChild](Object3D.md#removechild)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L152)
+
+___
+
+### removeAllChild
+
+▸ **removeAllChild**(): `void`
+
+Remove all children of the current object
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeAllChild](Object3D.md#removeallchild)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L168)
+
+___
+
+### removeSelf
+
+▸ **removeSelf**(): `this`
+
+Remove the current node from the parent
+
+#### Returns
+
+`this`
+
+this
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeSelf](Object3D.md#removeself)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L179)
+
+___
+
+### removeChildByIndex
+
+▸ **removeChildByIndex**(`index`): `void`
+
+Search for child nodes of objects and remove child objects with matching indexes.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index` | `number` | assign index |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeChildByIndex](Object3D.md#removechildbyindex)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:189](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L189)
+
+___
+
+### hasChild
+
+▸ **hasChild**(`child`): `boolean`
+
+Does the current object contain a certain object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | [`Entity`](Entity.md) | certain object |
+
+#### Returns
+
+`boolean`
+
+boolean
+
+#### Inherited from
+
+[Object3D](Object3D.md).[hasChild](Object3D.md#haschild)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L203)
+
+___
+
+### removeFromParent
+
+▸ **removeFromParent**(): `this`
+
+Remove the current node from the parent
+
+#### Returns
+
+`this`
+
+this
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeFromParent](Object3D.md#removefromparent)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:213](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L213)
+
+___
+
+### getChildByIndex
+
+▸ **getChildByIndex**(`index`): [`Entity`](Entity.md)
+
+Search for object children and return the first child object with a matching index.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index` | `number` | matching index |
+
+#### Returns
+
+[`Entity`](Entity.md)
+
+child entity
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getChildByIndex](Object3D.md#getchildbyindex)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L227)
+
+___
+
+### getChildByName
+
+▸ **getChildByName**(`name`, `loopChild?`): `any`
+
+Search for object children and return a child object with a matching name.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `name` | `string` | `undefined` | matching name |
+| `loopChild` | `boolean` | `true` | Whether to traverse the children of the child object. The default value is true |
+
+#### Returns
+
+`any`
+
+result
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getChildByName](Object3D.md#getchildbyname)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:242](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L242)
+
+___
+
+### noticeComponents
+
+▸ **noticeComponents**(`key`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | keyof [`IComponent`](../interfaces/IComponent.md) |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[noticeComponents](Object3D.md#noticecomponents)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:328](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L328)
+
+___
+
+### setMatrixAt
+
+▸ **setMatrixAt**(`index`, `matrix`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `matrix` | [`Matrix4`](Matrix4.md) |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/core/entities/InstancedMesh.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/InstancedMesh.ts#L31)
+
+___
+
+### forChild
+
+▸ **forChild**(`call`): `void`
+
+Traverse all sub objects starting from the object itself.
+ If there are still sub objects in the sub object, recursively traverse.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `call` | `Function` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[forChild](Object3D.md#forchild)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L41)
+
+___
+
+### addComponent
+
+▸ **addComponent**\<`T`\>(`c`, `param?`): `T`
+
+Create a new component and add it to the object, and return an instance of the component.
+ If a component of this type already exists, it will not be added and will return null.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+| `param?` | `any` | - |
+
+#### Returns
+
+`T`
+
+result component
+
+#### Inherited from
+
+[Object3D](Object3D.md).[addComponent](Object3D.md#addcomponent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L55)
+
+___
+
+### getOrAddComponent
+
+▸ **getOrAddComponent**\<`T`\>(`c`): `T`
+
+Returns an instance of a component object of the specified type.
+ If there are no components of that type, a new component is created and added to the object.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`T`
+
+result component
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getOrAddComponent](Object3D.md#getoraddcomponent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L76)
+
+___
+
+### removeComponent
+
+▸ **removeComponent**\<`T`\>(`c`): `void`
+
+Remove components of the specified type
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeComponent](Object3D.md#removecomponent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L89)
+
+___
+
+### hasComponent
+
+▸ **hasComponent**\<`T`\>(`c`): `boolean`
+
+Is there a component of the specified type
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | type of component |
+
+#### Returns
+
+`boolean`
+
+boolean
+
+#### Inherited from
+
+[Object3D](Object3D.md).[hasComponent](Object3D.md#hascomponent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L106)
+
+___
+
+### getComponent
+
+▸ **getComponent**\<`T`\>(`c`): `T`
+
+Returns a component of the specified type.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`T`
+
+result component
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponent](Object3D.md#getcomponent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L116)
+
+___
+
+### getComponentFromParent
+
+▸ **getComponentFromParent**\<`T`\>(`c`): `T`
+
+Returns a component object of the specified type from the parent node.
+ If there are no components of that type,
+ calls the parent object lookup of the parent object
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`T`
+
+reulst component
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponentFromParent](Object3D.md#getcomponentfromparent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L128)
+
+___
+
+### getComponentsInChild
+
+▸ **getComponentsInChild**\<`T`\>(`c`): `T`[]
+
+Returns an array of component objects of the specified type.
+ If there are no components of that type, search in the list of self body class objects
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`T`[]
+
+result components
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponentsInChild](Object3D.md#getcomponentsinchild)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L148)
+
+___
+
+### getComponents
+
+▸ **getComponents**\<`T`\>(`c`, `outList?`, `includeInactive?`): `T`[]
+
+Returns all components of the specified type contained in the current object and its children.
+ If there are children in the child object, recursively search.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+| `outList?` | `T`[] | result component list |
+| `includeInactive?` | `boolean` | Whether to include invisible objects, default to false |
+
+#### Returns
+
+`T`[]
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponents](Object3D.md#getcomponents)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:171](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L171)
+
+___
+
+### getComponentsExt
+
+▸ **getComponentsExt**\<`T`\>(`c`, `ret?`, `includeInactive?`): `T`[]
+
+Quickly obtain components and no longer access child nodes after obtaining them at a certain node
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+| `ret?` | `T`[] | List of incoming T |
+| `includeInactive?` | `boolean` | Whether to include invisible objects, default to false |
+
+#### Returns
+
+`T`[]
+
+{T}
+
+**`Memberof`**
+
+Object3D
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponentsExt](Object3D.md#getcomponentsext)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:196](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L196)
+
+___
+
+### getComponentsByProperty
+
+▸ **getComponentsByProperty**\<`T`\>(`key`, `value`, `findedAndBreak?`, `ret?`, `includeInactive?`): `T`[]
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `key` | `string` | `undefined` |
+| `value` | `any` | `undefined` |
+| `findedAndBreak` | `boolean` | `true` |
+| `ret?` | `T`[] | `undefined` |
+| `includeInactive?` | `boolean` | `undefined` |
+
+#### Returns
+
+`T`[]
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponentsByProperty](Object3D.md#getcomponentsbyproperty)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L211)
+
+___
+
+### clone
+
+▸ **clone**(): [`Object3D`](Object3D.md)
+
+clone a Object3D
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+[Object3D](Object3D.md).[clone](Object3D.md#clone)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:238](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L238)
+
+___
+
+### notifyChange
+
+▸ **notifyChange**(): `void`
+
+Notify transformation attribute updates
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[notifyChange](Object3D.md#notifychange)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:328](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L328)
+
+___
+
+### traverse
+
+▸ **traverse**(`callback`): `void`
+
+Recursive child nodes and execute specified function
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `callback` | (`child`: `any`) => `void` | specified function |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[traverse](Object3D.md#traverse)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:505](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L505)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+Release self
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[destroy](Object3D.md#destroy)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:520](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L520)
+
+___
+
+### dispatchEvent
+
+▸ **dispatchEvent**(`event`): `void`
+
+Dispatch an event to all registered objects with a specific type of listener.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `event` | [`CEvent`](CEvent.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[dispatchEvent](Object3D.md#dispatchevent)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L24)
+
+___
+
+### addEventListener
+
+▸ **addEventListener**(`type`, `callback`, `thisObject`, `param?`, `priority?`): `number`
+
+register an event listener to event distancher.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event type. |
+| `callback` | `Function` | `undefined` | {Function} The callback function that handles events. This function must accept an Event3D object as its unique parameter and cannot return any result. for example: function(evt:Event3D):void. |
+| `thisObject` | `any` | `undefined` | {any} Current registration object, it'll call callback function. |
+| `param` | `any` | `null` | {any} the data binded to registered event, the default value is null. |
+| `priority` | `number` | `0` | {number} The priority of callback function execution, with a larger set value having priority to call |
+
+#### Returns
+
+`number`
+
+Returns register event id
+
+#### Inherited from
+
+[Object3D](Object3D.md).[addEventListener](Object3D.md#addeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L79)
+
+___
+
+### removeEventListener
+
+▸ **removeEventListener**(`type`, `callback`, `thisObject`): `void`
+
+Remove Event Listening
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` \| `number` | {string} event type |
+| `callback` | `Function` | {Function} callback function of event register |
+| `thisObject` | `any` | {any} The current registered object. |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeEventListener](Object3D.md#removeeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L113)
+
+___
+
+### removeEventListenerAt
+
+▸ **removeEventListenerAt**(`id`): `boolean`
+
+Remove an event Listening with id
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeEventListenerAt](Object3D.md#removeeventlistenerat)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L133)
+
+___
+
+### removeAllEventListener
+
+▸ **removeAllEventListener**(`eventType?`): `void`
+
+Specify a event type to remove all related event listeners
+eventType event type, set null to remove all event listeners
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `eventType` | `string` \| `number` | `null` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeAllEventListener](Object3D.md#removealleventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L153)
+
+___
+
+### containEventListener
+
+▸ **containEventListener**(`type`): `boolean`
+
+whether the target presence of a listener with event type.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` | {string} event type. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+[Object3D](Object3D.md).[containEventListener](Object3D.md#containeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:185](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L185)
+
+___
+
+### hasEventListener
+
+▸ **hasEventListener**(`type`, `callback?`, `thisObject?`): `boolean`
+
+whether the target presence of a listener with event type. it associate more registration parameters.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event name. |
+| `callback` | `Function` | `null` | {Function} callback function of event register. |
+| `thisObject` | `any` | `null` | {any} The registered object. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+[Object3D](Object3D.md).[hasEventListener](Object3D.md#haseventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L198)
diff --git a/docs/api/classes/Interpolator.md b/docs/api/classes/Interpolator.md
new file mode 100644
index 00000000..22304fd3
--- /dev/null
+++ b/docs/api/classes/Interpolator.md
@@ -0,0 +1,68 @@
+# Class: Interpolator
+
+interpolator class
+
+### Constructors
+
+- [constructor](Interpolator.md#constructor)
+
+### Methods
+
+- [to](Interpolator.md#to)
+- [removeList](Interpolator.md#removelist)
+
+## Constructors
+
+### constructor
+
+• **new Interpolator**(): [`Interpolator`](Interpolator.md)
+
+#### Returns
+
+[`Interpolator`](Interpolator.md)
+
+## Methods
+
+### to
+
+▸ **to**(`target`, `property`, `durtion`, `interpolatorEnum?`): [`Interpolator`](Interpolator.md)
+
+Creates an animation from the current property to the specified target property.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `target` | `any` | `undefined` | Objects that need to be animated |
+| `property` | `any` | `undefined` | Animation parameter |
+| `durtion` | `number` | `undefined` | Animation duration, usually seconds |
+| `interpolatorEnum` | [`InterpolatorEnum`](../enums/InterpolatorEnum.md) | `InterpolatorEnum.AccelerateInterpolator` | Interpolator type |
+
+#### Returns
+
+[`Interpolator`](Interpolator.md)
+
+#### Defined in
+
+[src/math/TimeInterpolator.ts:411](https://github.com/Orillusion/orillusion/blob/main/src/math/TimeInterpolator.ts#L411)
+
+___
+
+### removeList
+
+▸ **removeList**(`interpolators`, `dispose?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `interpolators` | [`Interpolator`](Interpolator.md)[] |
+| `dispose?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/TimeInterpolator.ts:451](https://github.com/Orillusion/orillusion/blob/main/src/math/TimeInterpolator.ts#L451)
diff --git a/docs/api/classes/JointPose.md b/docs/api/classes/JointPose.md
new file mode 100644
index 00000000..9b62b6fe
--- /dev/null
+++ b/docs/api/classes/JointPose.md
@@ -0,0 +1,51 @@
+# Class: JointPose
+
+### Constructors
+
+- [constructor](JointPose.md#constructor)
+
+### Properties
+
+- [index](JointPose.md#index)
+- [worldMatrix](JointPose.md#worldmatrix)
+
+## Constructors
+
+### constructor
+
+• **new JointPose**(`index`, `useGlobalMatrix?`): [`JointPose`](JointPose.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `index` | `number` | `undefined` |
+| `useGlobalMatrix` | `boolean` | `false` |
+
+#### Returns
+
+[`JointPose`](JointPose.md)
+
+#### Defined in
+
+[src/components/anim/skeletonAnim/JointPose.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/skeletonAnim/JointPose.ts#L6)
+
+## Properties
+
+### index
+
+• **index**: `number`
+
+#### Defined in
+
+[src/components/anim/skeletonAnim/JointPose.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/skeletonAnim/JointPose.ts#L4)
+
+___
+
+### worldMatrix
+
+• **worldMatrix**: [`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/components/anim/skeletonAnim/JointPose.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/skeletonAnim/JointPose.ts#L5)
diff --git a/docs/api/classes/KHR_materials_emissive_strength.md b/docs/api/classes/KHR_materials_emissive_strength.md
new file mode 100644
index 00000000..3392acb3
--- /dev/null
+++ b/docs/api/classes/KHR_materials_emissive_strength.md
@@ -0,0 +1,41 @@
+# Class: KHR\_materials\_emissive\_strength
+
+### Constructors
+
+- [constructor](KHR_materials_emissive_strength.md#constructor)
+
+### Methods
+
+- [apply](KHR_materials_emissive_strength.md#apply)
+
+## Constructors
+
+### constructor
+
+• **new KHR_materials_emissive_strength**(): [`KHR_materials_emissive_strength`](KHR_materials_emissive_strength.md)
+
+#### Returns
+
+[`KHR_materials_emissive_strength`](KHR_materials_emissive_strength.md)
+
+## Methods
+
+### apply
+
+▸ **apply**(`gltf`, `dmaterial`, `tMaterial`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `gltf` | `any` |
+| `dmaterial` | `any` |
+| `tMaterial` | `any` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/gltf/extends/KHR_materials_emissive_strength.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gltf/extends/KHR_materials_emissive_strength.ts#L6)
diff --git a/docs/api/classes/KV.md b/docs/api/classes/KV.md
new file mode 100644
index 00000000..245694af
--- /dev/null
+++ b/docs/api/classes/KV.md
@@ -0,0 +1,85 @@
+# Class: KV
+
+### Constructors
+
+- [constructor](KV.md#constructor)
+
+### Properties
+
+- [key](KV.md#key)
+- [type](KV.md#type)
+
+### Methods
+
+- [getValue](KV.md#getvalue)
+- [formBytes](KV.md#formbytes)
+
+## Constructors
+
+### constructor
+
+• **new KV**(): [`KV`](KV.md)
+
+#### Returns
+
+[`KV`](KV.md)
+
+## Properties
+
+### key
+
+• **key**: `string`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/KVData.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/KVData.ts#L9)
+
+___
+
+### type
+
+• **type**: [`ValueEnumType`](../enums/ValueEnumType.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/KVData.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/KVData.ts#L10)
+
+## Methods
+
+### getValue
+
+▸ **getValue**\<`T`\>(): `T`
+
+#### Type parameters
+
+| Name |
+| :------ |
+| `T` |
+
+#### Returns
+
+`T`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/KVData.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/KVData.ts#L13)
+
+___
+
+### formBytes
+
+▸ **formBytes**(`matBytes`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `matBytes` | `BytesArray` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/KVData.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/KVData.ts#L17)
diff --git a/docs/api/classes/KelvinUtil.md b/docs/api/classes/KelvinUtil.md
new file mode 100644
index 00000000..af767227
--- /dev/null
+++ b/docs/api/classes/KelvinUtil.md
@@ -0,0 +1,112 @@
+# Class: KelvinUtil
+
+Temperature Color Converter
+
+### Constructors
+
+- [constructor](KelvinUtil.md#constructor)
+
+### Methods
+
+- [color\_temperature\_to\_rgb](KelvinUtil.md#color_temperature_to_rgb)
+- [get\_red](KelvinUtil.md#get_red)
+- [get\_green](KelvinUtil.md#get_green)
+- [get\_blue](KelvinUtil.md#get_blue)
+
+## Constructors
+
+### constructor
+
+• **new KelvinUtil**(): [`KelvinUtil`](KelvinUtil.md)
+
+#### Returns
+
+[`KelvinUtil`](KelvinUtil.md)
+
+## Methods
+
+### color\_temperature\_to\_rgb
+
+▸ **color_temperature_to_rgb**(`color_temperature_Kelvin`): [`Color`](Color.md)
+
+Convert color temperature to color object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `color_temperature_Kelvin` | `number` | Color temperature value |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/util/KelvinUtil.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/util/KelvinUtil.ts#L13)
+
+___
+
+### get\_red
+
+▸ **get_red**(`temperature`): `number`
+
+Return red component [0-255]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `temperature` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/util/KelvinUtil.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/util/KelvinUtil.ts#L32)
+
+___
+
+### get\_green
+
+▸ **get_green**(`temperature`): `number`
+
+Return green component [0-255]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `temperature` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/util/KelvinUtil.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/util/KelvinUtil.ts#L42)
+
+___
+
+### get\_blue
+
+▸ **get_blue**(`temperature`): `number`
+
+Return blue component [0-255]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `temperature` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/util/KelvinUtil.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/util/KelvinUtil.ts#L56)
diff --git a/docs/api/classes/KeyEvent.md b/docs/api/classes/KeyEvent.md
new file mode 100644
index 00000000..8cd8fc55
--- /dev/null
+++ b/docs/api/classes/KeyEvent.md
@@ -0,0 +1,428 @@
+# Class: KeyEvent
+
+enum keyboard event[InputSystem](InputSystem.md)
+
+## Hierarchy
+
+- [`CEvent`](CEvent.md)
+
+ ↳ **`KeyEvent`**
+
+### Constructors
+
+- [constructor](KeyEvent.md#constructor)
+
+### Properties
+
+- [target](KeyEvent.md#target)
+- [currentTarget](KeyEvent.md#currenttarget)
+- [type](KeyEvent.md#type)
+- [data](KeyEvent.md#data)
+- [param](KeyEvent.md#param)
+- [time](KeyEvent.md#time)
+- [delay](KeyEvent.md#delay)
+- [mouseCode](KeyEvent.md#mousecode)
+- [ctrlKey](KeyEvent.md#ctrlkey)
+- [metaKey](KeyEvent.md#metakey)
+- [altKey](KeyEvent.md#altkey)
+- [shiftKey](KeyEvent.md#shiftkey)
+- [targetTouches](KeyEvent.md#targettouches)
+- [changedTouches](KeyEvent.md#changedtouches)
+- [touches](KeyEvent.md#touches)
+- [view](KeyEvent.md#view)
+- [KEY\_DOWN](KeyEvent.md#key_down)
+- [KEY\_UP](KeyEvent.md#key_up)
+- [keyCode](KeyEvent.md#keycode)
+
+### Accessors
+
+- [isStopImmediatePropagation](KeyEvent.md#isstopimmediatepropagation)
+
+### Methods
+
+- [stopImmediatePropagation](KeyEvent.md#stopimmediatepropagation)
+
+## Constructors
+
+### constructor
+
+• **new KeyEvent**(`eventType?`, `data?`): [`KeyEvent`](KeyEvent.md)
+
+Create a new event, with type and data
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `eventType` | `string` | `null` | {any} eventType |
+| `data` | `any` | `null` | {any} param |
+
+#### Returns
+
+[`KeyEvent`](KeyEvent.md)
+
+#### Inherited from
+
+[CEvent](CEvent.md).[constructor](CEvent.md#constructor)
+
+#### Defined in
+
+[src/event/CEvent.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L102)
+
+## Properties
+
+### target
+
+• **target**: [`Object3D`](Object3D.md)
+
+Event target, it's usually event dispatcher
+
+#### Inherited from
+
+[CEvent](CEvent.md).[target](CEvent.md#target)
+
+#### Defined in
+
+[src/event/CEvent.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L13)
+
+___
+
+### currentTarget
+
+• **currentTarget**: `CEventListener`
+
+Current event target, it's current bubble object
+
+#### Inherited from
+
+[CEvent](CEvent.md).[currentTarget](CEvent.md#currenttarget)
+
+#### Defined in
+
+[src/event/CEvent.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L18)
+
+___
+
+### type
+
+• **type**: `string`
+
+event type, it's registered string of key
+
+#### Inherited from
+
+[CEvent](CEvent.md).[type](CEvent.md#type)
+
+#### Defined in
+
+[src/event/CEvent.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L23)
+
+___
+
+### data
+
+• **data**: `any`
+
+extra data.Used for the transmission process of events, carrying data
+
+#### Inherited from
+
+[CEvent](CEvent.md).[data](CEvent.md#data)
+
+#### Defined in
+
+[src/event/CEvent.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L28)
+
+___
+
+### param
+
+• **param**: `any`
+
+The param data when event is registered
+
+#### Inherited from
+
+[CEvent](CEvent.md).[param](CEvent.md#param)
+
+#### Defined in
+
+[src/event/CEvent.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L34)
+
+___
+
+### time
+
+• **time**: `number` = `0`
+
+the time when event is
+
+#### Inherited from
+
+[CEvent](CEvent.md).[time](CEvent.md#time)
+
+#### Defined in
+
+[src/event/CEvent.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L40)
+
+___
+
+### delay
+
+• **delay**: `number` = `0`
+
+the delay time when event is dispatched.
+
+#### Inherited from
+
+[CEvent](CEvent.md).[delay](CEvent.md#delay)
+
+#### Defined in
+
+[src/event/CEvent.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L46)
+
+___
+
+### mouseCode
+
+• **mouseCode**: `number` = `0`
+
+mouse code, see
+
+**`Mouse Code`**
+
+[MouseCode](../enums/MouseCode.md)
+
+#### Inherited from
+
+[CEvent](CEvent.md).[mouseCode](CEvent.md#mousecode)
+
+#### Defined in
+
+[src/event/CEvent.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L52)
+
+___
+
+### ctrlKey
+
+• **ctrlKey**: `boolean`
+
+Is Ctrl key pressed when the event occurs
+
+#### Inherited from
+
+[CEvent](CEvent.md).[ctrlKey](CEvent.md#ctrlkey)
+
+#### Defined in
+
+[src/event/CEvent.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L57)
+
+___
+
+### metaKey
+
+• **metaKey**: `boolean`
+
+Is Meta key pressed when the event occurs
+
+#### Inherited from
+
+[CEvent](CEvent.md).[metaKey](CEvent.md#metakey)
+
+#### Defined in
+
+[src/event/CEvent.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L62)
+
+___
+
+### altKey
+
+• **altKey**: `boolean`
+
+Is Alt key pressed when the event occurs
+
+#### Inherited from
+
+[CEvent](CEvent.md).[altKey](CEvent.md#altkey)
+
+#### Defined in
+
+[src/event/CEvent.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L67)
+
+___
+
+### shiftKey
+
+• **shiftKey**: `boolean`
+
+Is Shift key pressed when the event occurs
+
+#### Inherited from
+
+[CEvent](CEvent.md).[shiftKey](CEvent.md#shiftkey)
+
+#### Defined in
+
+[src/event/CEvent.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L72)
+
+___
+
+### targetTouches
+
+• **targetTouches**: `TouchData`[]
+
+Collection of finger touch points, which registered
+
+#### Inherited from
+
+[CEvent](CEvent.md).[targetTouches](CEvent.md#targettouches)
+
+#### Defined in
+
+[src/event/CEvent.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L77)
+
+___
+
+### changedTouches
+
+• **changedTouches**: `TouchData`[]
+
+Collection of finger touch points changed
+
+#### Inherited from
+
+[CEvent](CEvent.md).[changedTouches](CEvent.md#changedtouches)
+
+#### Defined in
+
+[src/event/CEvent.ts:82](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L82)
+
+___
+
+### touches
+
+• **touches**: `TouchData`[]
+
+Collection of finger touch points
+
+#### Inherited from
+
+[CEvent](CEvent.md).[touches](CEvent.md#touches)
+
+#### Defined in
+
+[src/event/CEvent.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L87)
+
+___
+
+### view
+
+• **view**: [`View3D`](View3D.md)
+
+binded view3D object in event.
+
+#### Inherited from
+
+[CEvent](CEvent.md).[view](CEvent.md#view)
+
+#### Defined in
+
+[src/event/CEvent.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L94)
+
+___
+
+### KEY\_DOWN
+
+▪ `Static` **KEY\_DOWN**: `string` = `'onKeyDown'`
+
+Constant Definition Key Press Event Identification
+Event response status: Responds every time the keyboard is pressed.
+Response event parameters: keyboard key
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/event/eventConst/KeyEvent.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/KeyEvent.ts#L15)
+
+___
+
+### KEY\_UP
+
+▪ `Static` **KEY\_UP**: `string` = `'onKeyUp'`
+
+Constant Definition Key up Event Identification
+Event response status: Responds every time the keyboard is released.
+Response event parameters: keyboard key
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/event/eventConst/KeyEvent.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/KeyEvent.ts#L24)
+
+___
+
+### keyCode
+
+• **keyCode**: `number` = `0`
+
+Key code value, enumeration type see KeyCode [KeyCode](../enums/KeyCode.md)
+
+**`Default`**
+
+```ts
+0
+```
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/event/eventConst/KeyEvent.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/KeyEvent.ts#L32)
+
+## Accessors
+
+### isStopImmediatePropagation
+
+• `get` **isStopImmediatePropagation**(): `boolean`
+
+Returns stopImmediatePropagation value
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+CEvent.isStopImmediatePropagation
+
+#### Defined in
+
+[src/event/CEvent.ts:125](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L125)
+
+## Methods
+
+### stopImmediatePropagation
+
+▸ **stopImmediatePropagation**(): `void`
+
+Prevent bubbling of all event listeners in subsequent nodes of the current node in the event flow.
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEvent](CEvent.md).[stopImmediatePropagation](CEvent.md#stopimmediatepropagation)
+
+#### Defined in
+
+[src/event/CEvent.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L110)
diff --git a/docs/api/classes/Keyframe.md b/docs/api/classes/Keyframe.md
new file mode 100644
index 00000000..9cd3ea78
--- /dev/null
+++ b/docs/api/classes/Keyframe.md
@@ -0,0 +1,173 @@
+# Class: Keyframe
+
+### Constructors
+
+- [constructor](Keyframe.md#constructor)
+
+### Properties
+
+- [serializedVersion](Keyframe.md#serializedversion)
+- [time](Keyframe.md#time)
+- [value](Keyframe.md#value)
+- [inSlope](Keyframe.md#inslope)
+- [outSlope](Keyframe.md#outslope)
+- [tangentMode](Keyframe.md#tangentmode)
+- [weightedMode](Keyframe.md#weightedmode)
+- [inWeight](Keyframe.md#inweight)
+- [outWeight](Keyframe.md#outweight)
+
+### Methods
+
+- [unSerialized](Keyframe.md#unserialized)
+- [unSerialized2](Keyframe.md#unserialized2)
+
+## Constructors
+
+### constructor
+
+• **new Keyframe**(`time?`, `value?`): [`Keyframe`](Keyframe.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `time` | `number` | `0` |
+| `value` | `number` | `0` |
+
+#### Returns
+
+[`Keyframe`](Keyframe.md)
+
+#### Defined in
+
+[src/math/enum/Keyframe.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/Keyframe.ts#L18)
+
+## Properties
+
+### serializedVersion
+
+• **serializedVersion**: `string` = `'2'`
+
+#### Defined in
+
+[src/math/enum/Keyframe.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/Keyframe.ts#L7)
+
+___
+
+### time
+
+• **time**: `number`
+
+#### Defined in
+
+[src/math/enum/Keyframe.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/Keyframe.ts#L8)
+
+___
+
+### value
+
+• **value**: `number`
+
+#### Defined in
+
+[src/math/enum/Keyframe.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/Keyframe.ts#L9)
+
+___
+
+### inSlope
+
+• **inSlope**: `number` = `0`
+
+#### Defined in
+
+[src/math/enum/Keyframe.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/Keyframe.ts#L10)
+
+___
+
+### outSlope
+
+• **outSlope**: `number` = `0`
+
+#### Defined in
+
+[src/math/enum/Keyframe.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/Keyframe.ts#L11)
+
+___
+
+### tangentMode
+
+• **tangentMode**: `number` = `0`
+
+#### Defined in
+
+[src/math/enum/Keyframe.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/Keyframe.ts#L12)
+
+___
+
+### weightedMode
+
+• **weightedMode**: `number` = `0`
+
+#### Defined in
+
+[src/math/enum/Keyframe.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/Keyframe.ts#L14)
+
+___
+
+### inWeight
+
+• **inWeight**: `number`
+
+#### Defined in
+
+[src/math/enum/Keyframe.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/Keyframe.ts#L15)
+
+___
+
+### outWeight
+
+• **outWeight**: `number`
+
+#### Defined in
+
+[src/math/enum/Keyframe.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/Keyframe.ts#L16)
+
+## Methods
+
+### unSerialized
+
+▸ **unSerialized**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/enum/Keyframe.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/Keyframe.ts#L23)
+
+___
+
+### unSerialized2
+
+▸ **unSerialized2**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/enum/Keyframe.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/Keyframe.ts#L32)
diff --git a/docs/api/classes/KeyframeT.md b/docs/api/classes/KeyframeT.md
new file mode 100644
index 00000000..027502c7
--- /dev/null
+++ b/docs/api/classes/KeyframeT.md
@@ -0,0 +1,155 @@
+# Class: KeyframeT
+
+### Constructors
+
+- [constructor](KeyframeT.md#constructor)
+
+### Properties
+
+- [serializedVersion](KeyframeT.md#serializedversion)
+- [time](KeyframeT.md#time)
+- [tangentMode](KeyframeT.md#tangentmode)
+- [weightedMode](KeyframeT.md#weightedmode)
+- [propertyKeyFrame](KeyframeT.md#propertykeyframe)
+
+### Methods
+
+- [getK](KeyframeT.md#getk)
+- [split](KeyframeT.md#split)
+- [formBytes](KeyframeT.md#formbytes)
+
+## Constructors
+
+### constructor
+
+• **new KeyframeT**(`time?`): [`KeyframeT`](KeyframeT.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `time` | `number` | `0` |
+
+#### Returns
+
+[`KeyframeT`](KeyframeT.md)
+
+#### Defined in
+
+[src/math/enum/T/KeyframeT.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/T/KeyframeT.ts#L26)
+
+## Properties
+
+### serializedVersion
+
+• **serializedVersion**: `string` = `'2'`
+
+#### Defined in
+
+[src/math/enum/T/KeyframeT.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/T/KeyframeT.ts#L14)
+
+___
+
+### time
+
+• **time**: `number`
+
+#### Defined in
+
+[src/math/enum/T/KeyframeT.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/T/KeyframeT.ts#L15)
+
+___
+
+### tangentMode
+
+• **tangentMode**: `number` = `0`
+
+#### Defined in
+
+[src/math/enum/T/KeyframeT.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/T/KeyframeT.ts#L16)
+
+___
+
+### weightedMode
+
+• **weightedMode**: `number` = `0`
+
+#### Defined in
+
+[src/math/enum/T/KeyframeT.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/T/KeyframeT.ts#L17)
+
+___
+
+### propertyKeyFrame
+
+• **propertyKeyFrame**: `Object`
+
+#### Index signature
+
+▪ [k: `number`]: [`Keyframe`](Keyframe.md)
+
+#### Defined in
+
+[src/math/enum/T/KeyframeT.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/T/KeyframeT.ts#L24)
+
+## Methods
+
+### getK
+
+▸ **getK**(`k`): [`Keyframe`](Keyframe.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `k` | `number` |
+
+#### Returns
+
+[`Keyframe`](Keyframe.md)
+
+#### Defined in
+
+[src/math/enum/T/KeyframeT.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/T/KeyframeT.ts#L31)
+
+___
+
+### split
+
+▸ **split**(`type`, `value`, `property`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `type` | [`ValueEnumType`](../enums/ValueEnumType.md) |
+| `value` | [`CurveValueType`](../types/CurveValueType.md) |
+| `property` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/enum/T/KeyframeT.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/T/KeyframeT.ts#L35)
+
+___
+
+### formBytes
+
+▸ **formBytes**(`bytes`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bytes` | `BytesArray` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/enum/T/KeyframeT.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/T/KeyframeT.ts#L111)
diff --git a/docs/api/classes/LDRTextureCube.md b/docs/api/classes/LDRTextureCube.md
new file mode 100644
index 00000000..13445394
--- /dev/null
+++ b/docs/api/classes/LDRTextureCube.md
@@ -0,0 +1,1145 @@
+# Class: LDRTextureCube
+
+LDRTextureCube: create a cube texture, it's low dynamic range texture
+
+## Hierarchy
+
+- `TextureCube`
+
+ ↳ **`LDRTextureCube`**
+
+ ↳↳ [`AtmosphericScatteringSky`](AtmosphericScatteringSky.md)
+
+ ↳↳ [`SolidColorSky`](SolidColorSky.md)
+
+### Constructors
+
+- [constructor](LDRTextureCube.md#constructor)
+
+### Properties
+
+- [name](LDRTextureCube.md#name)
+- [url](LDRTextureCube.md#url)
+- [pid](LDRTextureCube.md#pid)
+- [view](LDRTextureCube.md#view)
+- [gpuSampler](LDRTextureCube.md#gpusampler)
+- [gpuSampler\_comparison](LDRTextureCube.md#gpusampler_comparison)
+- [format](LDRTextureCube.md#format)
+- [usage](LDRTextureCube.md#usage)
+- [numberLayer](LDRTextureCube.md#numberlayer)
+- [viewDescriptor](LDRTextureCube.md#viewdescriptor)
+- [textureDescriptor](LDRTextureCube.md#texturedescriptor)
+- [sampler\_comparisonBindingLayout](LDRTextureCube.md#sampler_comparisonbindinglayout)
+- [flipY](LDRTextureCube.md#flipy)
+- [isVideoTexture](LDRTextureCube.md#isvideotexture)
+- [isHDRTexture](LDRTextureCube.md#ishdrtexture)
+- [mipmapCount](LDRTextureCube.md#mipmapcount)
+- [width](LDRTextureCube.md#width)
+- [height](LDRTextureCube.md#height)
+- [depthOrArrayLayers](LDRTextureCube.md#depthorarraylayers)
+- [visibility](LDRTextureCube.md#visibility)
+- [textureBindingLayout](LDRTextureCube.md#texturebindinglayout)
+- [samplerBindingLayout](LDRTextureCube.md#samplerbindinglayout)
+
+### Accessors
+
+- [useMipmap](LDRTextureCube.md#usemipmap)
+- [sourceImageData](LDRTextureCube.md#sourceimagedata)
+- [addressModeU](LDRTextureCube.md#addressmodeu)
+- [addressModeV](LDRTextureCube.md#addressmodev)
+- [addressModeW](LDRTextureCube.md#addressmodew)
+- [magFilter](LDRTextureCube.md#magfilter)
+- [minFilter](LDRTextureCube.md#minfilter)
+- [mipmapFilter](LDRTextureCube.md#mipmapfilter)
+- [lodMinClamp](LDRTextureCube.md#lodminclamp)
+- [lodMaxClamp](LDRTextureCube.md#lodmaxclamp)
+- [compare](LDRTextureCube.md#compare)
+- [maxAnisotropy](LDRTextureCube.md#maxanisotropy)
+- [ldrImageUrl](LDRTextureCube.md#ldrimageurl)
+
+### Methods
+
+- [init](LDRTextureCube.md#init)
+- [getMipmapCount](LDRTextureCube.md#getmipmapcount)
+- [getGPUTexture](LDRTextureCube.md#getgputexture)
+- [getGPUView](LDRTextureCube.md#getgpuview)
+- [bindStateChange](LDRTextureCube.md#bindstatechange)
+- [unBindStateChange](LDRTextureCube.md#unbindstatechange)
+- [destroy](LDRTextureCube.md#destroy)
+- [delayDestroyTexture](LDRTextureCube.md#delaydestroytexture)
+- [destroyTexture](LDRTextureCube.md#destroytexture)
+- [load](LDRTextureCube.md#load)
+- [createFromTexture](LDRTextureCube.md#createfromtexture)
+
+## Constructors
+
+### constructor
+
+• **new LDRTextureCube**(): [`LDRTextureCube`](LDRTextureCube.md)
+
+#### Returns
+
+[`LDRTextureCube`](LDRTextureCube.md)
+
+#### Overrides
+
+TextureCube.constructor
+
+#### Defined in
+
+[src/textures/LDRTextureCube.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/textures/LDRTextureCube.ts#L24)
+
+## Properties
+
+### name
+
+• **name**: `string`
+
+name of texture
+
+#### Inherited from
+
+TextureCube.name
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L15)
+
+___
+
+### url
+
+• **url**: `string`
+
+source url
+
+#### Inherited from
+
+TextureCube.url
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L20)
+
+___
+
+### pid
+
+• **pid**: `number`
+
+Return index in texture array
+
+#### Inherited from
+
+TextureCube.pid
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L30)
+
+___
+
+### view
+
+• **view**: `GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView
+
+#### Inherited from
+
+TextureCube.view
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L35)
+
+___
+
+### gpuSampler
+
+• **gpuSampler**: `GPUSampler`
+
+GPUSampler
+
+#### Inherited from
+
+TextureCube.gpuSampler
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L40)
+
+___
+
+### gpuSampler\_comparison
+
+• **gpuSampler\_comparison**: `GPUSampler`
+
+GPUSampler for comparison
+
+#### Inherited from
+
+TextureCube.gpuSampler\_comparison
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L45)
+
+___
+
+### format
+
+• **format**: `GPUTextureFormat`
+
+GPUTextureFormat
+
+#### Inherited from
+
+TextureCube.format
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L50)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+GPUTextureUsage
+
+#### Inherited from
+
+TextureCube.usage
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L55)
+
+___
+
+### numberLayer
+
+• **numberLayer**: `number` = `1`
+
+depth or layers, default value is 1
+
+#### Inherited from
+
+TextureCube.numberLayer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L75)
+
+___
+
+### viewDescriptor
+
+• **viewDescriptor**: `GPUTextureViewDescriptor`
+
+GPUTextureViewDescriptor
+
+#### Inherited from
+
+TextureCube.viewDescriptor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L80)
+
+___
+
+### textureDescriptor
+
+• **textureDescriptor**: `GPUTextureDescriptor`
+
+GPUTextureDescriptor
+
+#### Inherited from
+
+TextureCube.textureDescriptor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L85)
+
+___
+
+### sampler\_comparisonBindingLayout
+
+• **sampler\_comparisonBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+TextureCube.sampler\_comparisonBindingLayout
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L111)
+
+___
+
+### flipY
+
+• **flipY**: `boolean`
+
+whether to flip the image on the y-axis
+
+#### Inherited from
+
+TextureCube.flipY
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L118)
+
+___
+
+### isVideoTexture
+
+• `Optional` **isVideoTexture**: `boolean`
+
+whether is video texture
+
+#### Inherited from
+
+TextureCube.isVideoTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L123)
+
+___
+
+### isHDRTexture
+
+• `Optional` **isHDRTexture**: `boolean`
+
+#### Inherited from
+
+TextureCube.isHDRTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L124)
+
+___
+
+### mipmapCount
+
+• **mipmapCount**: `number` = `1`
+
+mipmap Count, default value is 1
+
+#### Inherited from
+
+TextureCube.mipmapCount
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L191)
+
+___
+
+### width
+
+• **width**: `number` = `4`
+
+texture width, default value is 4
+
+#### Inherited from
+
+TextureCube.width
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L12)
+
+___
+
+### height
+
+• **height**: `number` = `4`
+
+texture height, default value is 4
+
+#### Inherited from
+
+TextureCube.height
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L16)
+
+___
+
+### depthOrArrayLayers
+
+• **depthOrArrayLayers**: `number` = `6`
+
+depth or array layers, default value is 6
+
+#### Inherited from
+
+TextureCube.depthOrArrayLayers
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L20)
+
+___
+
+### visibility
+
+• **visibility**: `number` = `GPUShaderStage.FRAGMENT`
+
+GPUShaderStage
+
+#### Inherited from
+
+TextureCube.visibility
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L25)
+
+___
+
+### textureBindingLayout
+
+• **textureBindingLayout**: `GPUTextureBindingLayout`
+
+GPUTextureBindingLayout
+
+#### Inherited from
+
+TextureCube.textureBindingLayout
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L30)
+
+___
+
+### samplerBindingLayout
+
+• **samplerBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+TextureCube.samplerBindingLayout
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L38)
+
+## Accessors
+
+### useMipmap
+
+• `get` **useMipmap**(): `boolean`
+
+enable/disable mipmap
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+TextureCube.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L315)
+
+• `set` **useMipmap**(`value`): `void`
+
+get mipmap
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:322](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L322)
+
+___
+
+### sourceImageData
+
+• `get` **sourceImageData**(): `HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Returns
+
+`HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Inherited from
+
+TextureCube.sourceImageData
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:353](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L353)
+
+___
+
+### addressModeU
+
+• `get` **addressModeU**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+TextureCube.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L438)
+
+• `set` **addressModeU**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:442](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L442)
+
+___
+
+### addressModeV
+
+• `get` **addressModeV**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+TextureCube.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:449](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L449)
+
+• `set` **addressModeV**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:453](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L453)
+
+___
+
+### addressModeW
+
+• `get` **addressModeW**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+TextureCube.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:460](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L460)
+
+• `set` **addressModeW**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:464](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L464)
+
+___
+
+### magFilter
+
+• `get` **magFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+TextureCube.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:471](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L471)
+
+• `set` **magFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:475](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L475)
+
+___
+
+### minFilter
+
+• `get` **minFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+TextureCube.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:482](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L482)
+
+• `set` **minFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L486)
+
+___
+
+### mipmapFilter
+
+• `get` **mipmapFilter**(): `GPUMipmapFilterMode`
+
+#### Returns
+
+`GPUMipmapFilterMode`
+
+#### Inherited from
+
+TextureCube.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:493](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L493)
+
+• `set` **mipmapFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUMipmapFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:497](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L497)
+
+___
+
+### lodMinClamp
+
+• `get` **lodMinClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+TextureCube.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:504](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L504)
+
+• `set` **lodMinClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:508](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L508)
+
+___
+
+### lodMaxClamp
+
+• `get` **lodMaxClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+TextureCube.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:515](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L515)
+
+• `set` **lodMaxClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L519)
+
+___
+
+### compare
+
+• `get` **compare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+TextureCube.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:526](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L526)
+
+• `set` **compare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:530](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L530)
+
+___
+
+### maxAnisotropy
+
+• `get` **maxAnisotropy**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+TextureCube.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:537](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L537)
+
+• `set` **maxAnisotropy**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:541](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L541)
+
+___
+
+### ldrImageUrl
+
+• `get` **ldrImageUrl**(): `string`
+
+constructor: create a cube texture, it's low dynamic range texture
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/textures/LDRTextureCube.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/textures/LDRTextureCube.ts#L21)
+
+## Methods
+
+### init
+
+▸ **init**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+TextureCube.init
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L215)
+
+___
+
+### getMipmapCount
+
+▸ **getMipmapCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+TextureCube.getMipmapCount
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:357](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L357)
+
+___
+
+### getGPUTexture
+
+▸ **getGPUTexture**(): `GPUTexture`
+
+create or get GPUTexture
+
+#### Returns
+
+`GPUTexture`
+
+GPUTexture
+
+#### Inherited from
+
+TextureCube.getGPUTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:384](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L384)
+
+___
+
+### getGPUView
+
+▸ **getGPUView**(`index?`): `GPUTextureView` \| `GPUExternalTexture`
+
+create or get GPUTextureView
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `index` | `number` | `0` |
+
+#### Returns
+
+`GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView | GPUExternalTexture
+
+#### Inherited from
+
+TextureCube.getGPUView
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:395](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L395)
+
+___
+
+### bindStateChange
+
+▸ **bindStateChange**(`fun`, `ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `fun` | `Function` |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.bindStateChange
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L408)
+
+___
+
+### unBindStateChange
+
+▸ **unBindStateChange**(`ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.unBindStateChange
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L412)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release the texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.destroy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:426](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L426)
+
+___
+
+### delayDestroyTexture
+
+▸ **delayDestroyTexture**(`tex`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tex` | `GPUTexture` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.delayDestroyTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:549](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L549)
+
+___
+
+### destroyTexture
+
+▸ **destroyTexture**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TextureCube.destroyTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:555](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L555)
+
+___
+
+### load
+
+▸ **load**(`url`, `loaderFunctions?`): `Promise`\<[`LDRTextureCube`](LDRTextureCube.md)\>
+
+load texture data from web url, which is a 360 panorama image
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | web url |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | callback function when load complete |
+
+#### Returns
+
+`Promise`\<[`LDRTextureCube`](LDRTextureCube.md)\>
+
+#### Defined in
+
+[src/textures/LDRTextureCube.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/textures/LDRTextureCube.ts#L37)
+
+___
+
+### createFromTexture
+
+▸ **createFromTexture**(`size`, `texture`): `this`
+
+create cube texture by environment image
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `size` | `number` | size of cube texture |
+| `texture` | [`Texture`](Texture.md) | source texture |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/textures/LDRTextureCube.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/textures/LDRTextureCube.ts#L64)
diff --git a/docs/api/classes/LambertMaterial.md b/docs/api/classes/LambertMaterial.md
new file mode 100644
index 00000000..a500899f
--- /dev/null
+++ b/docs/api/classes/LambertMaterial.md
@@ -0,0 +1,1172 @@
+# Class: LambertMaterial
+
+Lambert Mateiral
+A non glossy surface material without specular highlights.
+
+## Hierarchy
+
+- [`Material`](Material.md)
+
+ ↳ **`LambertMaterial`**
+
+### Constructors
+
+- [constructor](LambertMaterial.md#constructor)
+
+### Properties
+
+- [instanceID](LambertMaterial.md#instanceid)
+- [name](LambertMaterial.md#name)
+- [enable](LambertMaterial.md#enable)
+
+### Accessors
+
+- [baseMap](LambertMaterial.md#basemap)
+- [baseColor](LambertMaterial.md#basecolor)
+- [envMap](LambertMaterial.md#envmap)
+- [shader](LambertMaterial.md#shader)
+- [doubleSide](LambertMaterial.md#doubleside)
+- [castShadow](LambertMaterial.md#castshadow)
+- [acceptShadow](LambertMaterial.md#acceptshadow)
+- [castReflection](LambertMaterial.md#castreflection)
+- [blendMode](LambertMaterial.md#blendmode)
+- [depthCompare](LambertMaterial.md#depthcompare)
+- [transparent](LambertMaterial.md#transparent)
+- [cullMode](LambertMaterial.md#cullmode)
+- [depthWriteEnabled](LambertMaterial.md#depthwriteenabled)
+- [useBillboard](LambertMaterial.md#usebillboard)
+
+### Methods
+
+- [getPass](LambertMaterial.md#getpass)
+- [getAllPass](LambertMaterial.md#getallpass)
+- [clone](LambertMaterial.md#clone)
+- [destroy](LambertMaterial.md#destroy)
+- [setDefine](LambertMaterial.md#setdefine)
+- [setTexture](LambertMaterial.md#settexture)
+- [setStorageBuffer](LambertMaterial.md#setstoragebuffer)
+- [setUniformBuffer](LambertMaterial.md#setuniformbuffer)
+- [setUniformFloat](LambertMaterial.md#setuniformfloat)
+- [setUniformVector2](LambertMaterial.md#setuniformvector2)
+- [setUniformVector3](LambertMaterial.md#setuniformvector3)
+- [setUniformVector4](LambertMaterial.md#setuniformvector4)
+- [setUniformColor](LambertMaterial.md#setuniformcolor)
+- [getUniformFloat](LambertMaterial.md#getuniformfloat)
+- [getUniformV2](LambertMaterial.md#getuniformv2)
+- [getUniformV3](LambertMaterial.md#getuniformv3)
+- [getUniformV4](LambertMaterial.md#getuniformv4)
+- [getUniformColor](LambertMaterial.md#getuniformcolor)
+- [getTexture](LambertMaterial.md#gettexture)
+- [getStorageBuffer](LambertMaterial.md#getstoragebuffer)
+- [getStructStorageBuffer](LambertMaterial.md#getstructstoragebuffer)
+- [getUniformBuffer](LambertMaterial.md#getuniformbuffer)
+- [applyUniform](LambertMaterial.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new LambertMaterial**(): [`LambertMaterial`](LambertMaterial.md)
+
+#### Returns
+
+[`LambertMaterial`](LambertMaterial.md)
+
+#### Overrides
+
+[Material](Material.md).[constructor](Material.md#constructor)
+
+#### Defined in
+
+[src/materials/LambertMaterial.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/LambertMaterial.ts#L19)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+Material Unique Identifier
+
+#### Inherited from
+
+[Material](Material.md).[instanceID](Material.md#instanceid)
+
+#### Defined in
+
+[src/materials/Material.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L19)
+
+___
+
+### name
+
+• **name**: `string`
+
+name of this material
+
+#### Inherited from
+
+[Material](Material.md).[name](Material.md#name)
+
+#### Defined in
+
+[src/materials/Material.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L25)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+[Material](Material.md).[enable](Material.md#enable)
+
+#### Defined in
+
+[src/materials/Material.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L27)
+
+## Accessors
+
+### baseMap
+
+• `get` **baseMap**(): [`Texture`](Texture.md)
+
+get base color map texture
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/materials/LambertMaterial.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/materials/LambertMaterial.ts#L52)
+
+• `set` **baseMap**(`tex`): `void`
+
+set base color map texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tex` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LambertMaterial.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/materials/LambertMaterial.ts#L45)
+
+___
+
+### baseColor
+
+• `get` **baseColor**(): [`Color`](Color.md)
+
+get base color (tint color)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/materials/LambertMaterial.ts:66](https://github.com/Orillusion/orillusion/blob/main/src/materials/LambertMaterial.ts#L66)
+
+• `set` **baseColor**(`color`): `void`
+
+set base color (tint color)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `color` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LambertMaterial.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/materials/LambertMaterial.ts#L59)
+
+___
+
+### envMap
+
+• `set` **envMap**(`texture`): `void`
+
+set environment texture, usually referring to cubemap
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LambertMaterial.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/materials/LambertMaterial.ts#L73)
+
+___
+
+### shader
+
+• `get` **shader**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L41)
+
+• `set` **shader**(`shader`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shader` | [`Shader`](Shader.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L36)
+
+___
+
+### doubleSide
+
+• `get` **doubleSide**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L45)
+
+• `set` **doubleSide**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L49)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L53)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L57)
+
+___
+
+### acceptShadow
+
+• `get` **acceptShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L64)
+
+• `set` **acceptShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L68)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L77)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L81)
+
+___
+
+### blendMode
+
+• `get` **blendMode**(): [`BlendMode`](../enums/BlendMode.md)
+
+#### Returns
+
+[`BlendMode`](../enums/BlendMode.md)
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L85)
+
+• `set` **blendMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`BlendMode`](../enums/BlendMode.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L89)
+
+___
+
+### depthCompare
+
+• `get` **depthCompare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L93)
+
+• `set` **depthCompare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L97)
+
+___
+
+### transparent
+
+• `get` **transparent**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L102)
+
+• `set` **transparent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L106)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L113)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L117)
+
+___
+
+### depthWriteEnabled
+
+• `get` **depthWriteEnabled**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L128)
+
+• `set` **depthWriteEnabled**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L132)
+
+___
+
+### useBillboard
+
+• `set` **useBillboard**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.useBillboard
+
+#### Defined in
+
+[src/materials/Material.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L136)
+
+## Methods
+
+### getPass
+
+▸ **getPass**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get render pass by renderType
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getPass](Material.md#getpass)
+
+#### Defined in
+
+[src/materials/Material.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L145)
+
+___
+
+### getAllPass
+
+▸ **getAllPass**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get all color render pass
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getAllPass](Material.md#getallpass)
+
+#### Defined in
+
+[src/materials/Material.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L153)
+
+___
+
+### clone
+
+▸ **clone**(): [`Material`](Material.md)
+
+clone one material
+
+#### Returns
+
+[`Material`](Material.md)
+
+Material
+
+#### Inherited from
+
+[Material](Material.md).[clone](Material.md#clone)
+
+#### Defined in
+
+[src/materials/Material.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L161)
+
+___
+
+### destroy
+
+▸ **destroy**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[destroy](Material.md#destroy)
+
+#### Defined in
+
+[src/materials/Material.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L168)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`define`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `define` | `string` |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setDefine](Material.md#setdefine)
+
+#### Defined in
+
+[src/materials/Material.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L174)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`propertyName`, `texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setTexture](Material.md#settexture)
+
+#### Defined in
+
+[src/materials/Material.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L178)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setStorageBuffer](Material.md#setstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L182)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformBuffer](Material.md#setuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L186)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformFloat](Material.md#setuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L191)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector2](Material.md#setuniformvector2)
+
+#### Defined in
+
+[src/materials/Material.ts:195](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L195)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector3](Material.md#setuniformvector3)
+
+#### Defined in
+
+[src/materials/Material.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L199)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector4](Material.md#setuniformvector4)
+
+#### Defined in
+
+[src/materials/Material.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L203)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformColor](Material.md#setuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L207)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`str`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformFloat](Material.md#getuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L211)
+
+___
+
+### getUniformV2
+
+▸ **getUniformV2**(`str`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV2](Material.md#getuniformv2)
+
+#### Defined in
+
+[src/materials/Material.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L215)
+
+___
+
+### getUniformV3
+
+▸ **getUniformV3**(`str`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV3](Material.md#getuniformv3)
+
+#### Defined in
+
+[src/materials/Material.ts:219](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L219)
+
+___
+
+### getUniformV4
+
+▸ **getUniformV4**(`str`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV4](Material.md#getuniformv4)
+
+#### Defined in
+
+[src/materials/Material.ts:223](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L223)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`str`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformColor](Material.md#getuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L227)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`str`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Material](Material.md).[getTexture](Material.md#gettexture)
+
+#### Defined in
+
+[src/materials/Material.ts:231](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L231)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`str`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Material](Material.md).[getStorageBuffer](Material.md#getstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:235](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L235)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getStructStorageBuffer](Material.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:239](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L239)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformBuffer](Material.md#getuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:243](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L243)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[applyUniform](Material.md#applyuniform)
+
+#### Defined in
+
+[src/materials/Material.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L247)
diff --git a/docs/api/classes/Light.md b/docs/api/classes/Light.md
new file mode 100644
index 00000000..9133da34
--- /dev/null
+++ b/docs/api/classes/Light.md
@@ -0,0 +1,1342 @@
+# Class: Light
+
+Point light source.
+A single point light source that illuminates all directions.
+A common example is to simulate the light emitted by a light bulb, where a point light source cannot create shadows.
+
+## Hierarchy
+
+- `LightBase`
+
+ ↳ **`Light`**
+
+### Constructors
+
+- [constructor](Light.md#constructor)
+
+### Properties
+
+- [object3D](Light.md#object3d)
+- [isDestroyed](Light.md#isdestroyed)
+- [name](Light.md#name)
+- [size](Light.md#size)
+- [lightData](Light.md#lightdata)
+- [dirFix](Light.md#dirfix)
+- [bindOnChange](Light.md#bindonchange)
+- [needUpdateShadow](Light.md#needupdateshadow)
+- [realTimeShadow](Light.md#realtimeshadow)
+
+### Accessors
+
+- [eventDispatcher](Light.md#eventdispatcher)
+- [isStart](Light.md#isstart)
+- [transform](Light.md#transform)
+- [enable](Light.md#enable)
+- [range](Light.md#range)
+- [at](Light.md#at)
+- [radius](Light.md#radius)
+- [quadratic](Light.md#quadratic)
+- [iesProfiles](Light.md#iesprofiles)
+- [iesProfile](Light.md#iesprofile)
+- [r](Light.md#r)
+- [g](Light.md#g)
+- [b](Light.md#b)
+- [lightColor](Light.md#lightcolor)
+- [color](Light.md#color)
+- [intensity](Light.md#intensity)
+- [castShadow](Light.md#castshadow)
+- [shadowIndex](Light.md#shadowindex)
+- [castGI](Light.md#castgi)
+- [direction](Light.md#direction)
+
+### Methods
+
+- [stop](Light.md#stop)
+- [onLateUpdate](Light.md#onlateupdate)
+- [onBeforeUpdate](Light.md#onbeforeupdate)
+- [onCompute](Light.md#oncompute)
+- [onParentChange](Light.md#onparentchange)
+- [onAddChild](Light.md#onaddchild)
+- [onRemoveChild](Light.md#onremovechild)
+- [cloneTo](Light.md#cloneto)
+- [copyComponent](Light.md#copycomponent)
+- [beforeDestroy](Light.md#beforedestroy)
+- [init](Light.md#init)
+- [start](Light.md#start)
+- [onUpdate](Light.md#onupdate)
+- [onGraphic](Light.md#ongraphic)
+- [debug](Light.md#debug)
+- [debugDraw](Light.md#debugdraw)
+- [onEnable](Light.md#onenable)
+- [onDisable](Light.md#ondisable)
+- [destroy](Light.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new Light**(): [`Light`](Light.md)
+
+#### Returns
+
+[`Light`](Light.md)
+
+#### Overrides
+
+LightBase.constructor
+
+#### Defined in
+
+[src/components/lights/Light.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/Light.ts#L17)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+LightBase.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+LightBase.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### name
+
+• **name**: `string`
+
+light name
+
+#### Inherited from
+
+LightBase.name
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L22)
+
+___
+
+### size
+
+• **size**: `number` = `1`
+
+light size
+
+#### Inherited from
+
+LightBase.size
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L26)
+
+___
+
+### lightData
+
+• **lightData**: `LightData`
+
+light source data
+
+#### Inherited from
+
+LightBase.lightData
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L31)
+
+___
+
+### dirFix
+
+• **dirFix**: `number` = `1`
+
+fix light direction
+
+#### Inherited from
+
+LightBase.dirFix
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L36)
+
+___
+
+### bindOnChange
+
+• **bindOnChange**: () => `void`
+
+Callback function when binding changes
+
+#### Type declaration
+
+▸ (): `void`
+
+Callback function when binding changes
+
+##### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.bindOnChange
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L41)
+
+___
+
+### needUpdateShadow
+
+• **needUpdateShadow**: `boolean` = `true`
+
+#### Inherited from
+
+LightBase.needUpdateShadow
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L43)
+
+___
+
+### realTimeShadow
+
+• **realTimeShadow**: `boolean` = `true`
+
+Whether to enable real-time rendering of shadows
+
+#### Inherited from
+
+LightBase.realTimeShadow
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L48)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+LightBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LightBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+LightBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LightBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### range
+
+• `get` **range**(): `number`
+
+Get the range of the light source
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/lights/Light.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/Light.ts#L35)
+
+• `set` **range**(`value`): `void`
+
+Set the range of the light source
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/Light.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/Light.ts#L43)
+
+___
+
+### at
+
+• `get` **at**(): `number`
+
+Get the illumination distance of the light source
+
+#### Returns
+
+`number`
+
+**`Memberof`**
+
+PointLight
+
+#### Defined in
+
+[src/components/lights/Light.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/Light.ts#L54)
+
+• `set` **at**(`value`): `void`
+
+Set the illumination distance of the light source
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+**`Memberof`**
+
+PointLight
+
+#### Defined in
+
+[src/components/lights/Light.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/Light.ts#L65)
+
+___
+
+### radius
+
+• `get` **radius**(): `number`
+
+Get the radius to control the light
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/lights/Light.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/Light.ts#L73)
+
+• `set` **radius**(`value`): `void`
+
+Set the radius of the control light
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/Light.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/Light.ts#L80)
+
+___
+
+### quadratic
+
+• `get` **quadratic**(): `number`
+
+Get the radius to control the light
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/lights/Light.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/Light.ts#L88)
+
+• `set` **quadratic**(`value`): `void`
+
+Set the radius of the control light
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/Light.ts:95](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/Light.ts#L95)
+
+___
+
+### iesProfiles
+
+• `set` **iesProfiles**(`iesProfiles`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `iesProfiles` | [`IESProfiles`](IESProfiles.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.iesProfiles
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:125](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L125)
+
+___
+
+### iesProfile
+
+• `get` **iesProfile**(): [`IESProfiles`](IESProfiles.md)
+
+#### Returns
+
+[`IESProfiles`](IESProfiles.md)
+
+#### Inherited from
+
+LightBase.iesProfile
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L132)
+
+___
+
+### r
+
+• `get` **r**(): `number`
+
+Get the red component of the lighting color
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LightBase.r
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L139)
+
+• `set` **r**(`value`): `void`
+
+Set the red component of the lighting color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.r
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:146](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L146)
+
+___
+
+### g
+
+• `get` **g**(): `number`
+
+Get the green component of the lighting color
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LightBase.g
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:154](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L154)
+
+• `set` **g**(`value`): `void`
+
+Set the green component of the lighting color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.g
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L161)
+
+___
+
+### b
+
+• `get` **b**(): `number`
+
+Get the blue component of the lighting color
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LightBase.b
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:169](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L169)
+
+• `set` **b**(`value`): `void`
+
+Set the blue component of the lighting color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.b
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:175](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L175)
+
+___
+
+### lightColor
+
+• `get` **lightColor**(): [`Color`](Color.md)
+
+Get light source color
+
+#### Returns
+
+[`Color`](Color.md)
+
+Color
+
+#### Inherited from
+
+LightBase.lightColor
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:183](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L183)
+
+• `set` **lightColor**(`value`): `void`
+
+Set light source color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.lightColor
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L190)
+
+___
+
+### color
+
+• `get` **color**(): [`Color`](Color.md)
+
+Get light source color
+
+#### Returns
+
+[`Color`](Color.md)
+
+Color
+
+#### Inherited from
+
+LightBase.color
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L199)
+
+• `set` **color**(`value`): `void`
+
+Set light source color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.color
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L207)
+
+___
+
+### intensity
+
+• `get` **intensity**(): `number`
+
+Get Illumination intensity of light source
+
+#### Returns
+
+`number`
+
+number
+
+#### Inherited from
+
+LightBase.intensity
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L216)
+
+• `set` **intensity**(`value`): `void`
+
+Set Illumination intensity of light source
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.intensity
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L224)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LightBase.castShadow
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L240)
+
+• `set` **castShadow**(`value`): `void`
+
+Cast Light Shadow
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.castShadow
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L233)
+
+___
+
+### shadowIndex
+
+• `get` **shadowIndex**(): `number`
+
+get shadow index at shadow map list
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LightBase.shadowIndex
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L247)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+get gi is enable
+
+#### Returns
+
+`boolean`
+
+boolean
+
+#### Inherited from
+
+LightBase.castGI
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:256](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L256)
+
+• `set` **castGI**(`value`): `void`
+
+set gi is enable
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.castGI
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:263](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L263)
+
+___
+
+### direction
+
+• `get` **direction**(): [`Vector3`](Vector3.md)
+
+light source direction
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3
+
+#### Inherited from
+
+LightBase.direction
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:277](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L277)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+LightBase.copyComponent
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.beforeDestroy
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### init
+
+▸ **init**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LightBase.init
+
+#### Defined in
+
+[src/components/lights/Light.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/Light.ts#L21)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LightBase.start
+
+#### Defined in
+
+[src/components/lights/Light.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/Light.ts#L102)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LightBase.onUpdate
+
+#### Defined in
+
+[src/components/lights/Light.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/Light.ts#L107)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LightBase.onGraphic
+
+#### Defined in
+
+[src/components/lights/Light.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/Light.ts#L111)
+
+___
+
+### debug
+
+▸ **debug**(): `void`
+
+enable GUI debug
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/Light.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/Light.ts#L128)
+
+___
+
+### debugDraw
+
+▸ **debugDraw**(`show`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `show` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/Light.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/Light.ts#L131)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.onEnable
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L114)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.onDisable
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L119)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.destroy
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:281](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L281)
diff --git a/docs/api/classes/LitHairShader.md b/docs/api/classes/LitHairShader.md
new file mode 100644
index 00000000..e4b528f1
--- /dev/null
+++ b/docs/api/classes/LitHairShader.md
@@ -0,0 +1,1289 @@
+# Class: LitHairShader
+
+## Hierarchy
+
+- [`Shader`](Shader.md)
+
+ ↳ **`LitHairShader`**
+
+### Constructors
+
+- [constructor](LitHairShader.md#constructor)
+
+### Properties
+
+- [computes](LitHairShader.md#computes)
+- [passShader](LitHairShader.md#passshader)
+
+### Accessors
+
+- [\_MainTex](LitHairShader.md#_maintex)
+- [\_IDMap](LitHairShader.md#_idmap)
+- [\_DepthMap](LitHairShader.md#_depthmap)
+- [\_RootMap](LitHairShader.md#_rootmap)
+- [\_AlphaMap](LitHairShader.md#_alphamap)
+- [\_UVTransform](LitHairShader.md#_uvtransform)
+- [\_Metallic](LitHairShader.md#_metallic)
+- [\_Roughness](LitHairShader.md#_roughness)
+- [\_HairColor0](LitHairShader.md#_haircolor0)
+- [\_HairColor1](LitHairShader.md#_haircolor1)
+- [\_SpecularColor](LitHairShader.md#_specularcolor)
+- [\_AlphaCutoff](LitHairShader.md#_alphacutoff)
+- [\_BackLit](LitHairShader.md#_backlit)
+- [\_Area](LitHairShader.md#_area)
+- [\_DoubleSidedEnable](LitHairShader.md#_doublesidedenable)
+- [\_SurfaceType](LitHairShader.md#_surfacetype)
+- [\_AlphaCutoffEnable](LitHairShader.md#_alphacutoffenable)
+
+### Methods
+
+- [addRenderPass](LitHairShader.md#addrenderpass)
+- [removeShader](LitHairShader.md#removeshader)
+- [removeShaderByIndex](LitHairShader.md#removeshaderbyindex)
+- [getSubShaders](LitHairShader.md#getsubshaders)
+- [hasSubShaders](LitHairShader.md#hassubshaders)
+- [getDefaultShaders](LitHairShader.md#getdefaultshaders)
+- [getDefaultColorShader](LitHairShader.md#getdefaultcolorshader)
+- [setDefine](LitHairShader.md#setdefine)
+- [hasDefine](LitHairShader.md#hasdefine)
+- [deleteDefine](LitHairShader.md#deletedefine)
+- [setUniform](LitHairShader.md#setuniform)
+- [setUniformFloat](LitHairShader.md#setuniformfloat)
+- [setUniformVector2](LitHairShader.md#setuniformvector2)
+- [setUniformVector3](LitHairShader.md#setuniformvector3)
+- [setUniformVector4](LitHairShader.md#setuniformvector4)
+- [setUniformColor](LitHairShader.md#setuniformcolor)
+- [getUniform](LitHairShader.md#getuniform)
+- [getUniformFloat](LitHairShader.md#getuniformfloat)
+- [getUniformVector2](LitHairShader.md#getuniformvector2)
+- [getUniformVector3](LitHairShader.md#getuniformvector3)
+- [getUniformVector4](LitHairShader.md#getuniformvector4)
+- [getUniformColor](LitHairShader.md#getuniformcolor)
+- [setTexture](LitHairShader.md#settexture)
+- [getTexture](LitHairShader.md#gettexture)
+- [setUniformBuffer](LitHairShader.md#setuniformbuffer)
+- [getUniformBuffer](LitHairShader.md#getuniformbuffer)
+- [setStorageBuffer](LitHairShader.md#setstoragebuffer)
+- [getStorageBuffer](LitHairShader.md#getstoragebuffer)
+- [setStructStorageBuffer](LitHairShader.md#setstructstoragebuffer)
+- [getStructStorageBuffer](LitHairShader.md#getstructstoragebuffer)
+- [noticeValueChange](LitHairShader.md#noticevaluechange)
+- [destroy](LitHairShader.md#destroy)
+- [clone](LitHairShader.md#clone)
+- [applyUniform](LitHairShader.md#applyuniform)
+- [debug](LitHairShader.md#debug)
+- [setDefault](LitHairShader.md#setdefault)
+
+## Constructors
+
+### constructor
+
+• **new LitHairShader**(): [`LitHairShader`](LitHairShader.md)
+
+#### Returns
+
+[`LitHairShader`](LitHairShader.md)
+
+#### Overrides
+
+[Shader](Shader.md).[constructor](Shader.md#constructor)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L16)
+
+## Properties
+
+### computes
+
+• **computes**: [`RenderShaderCompute`](RenderShaderCompute.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[computes](Shader.md#computes)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L19)
+
+___
+
+### passShader
+
+• **passShader**: `Map`\<`PassType`, [`RenderShaderPass`](RenderShaderPass.md)[]\>
+
+#### Inherited from
+
+[Shader](Shader.md).[passShader](Shader.md#passshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L21)
+
+## Accessors
+
+### \_MainTex
+
+• `set` **_MainTex**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:142](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L142)
+
+___
+
+### \_IDMap
+
+• `set` **_IDMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:146](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L146)
+
+___
+
+### \_DepthMap
+
+• `set` **_DepthMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:150](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L150)
+
+___
+
+### \_RootMap
+
+• `set` **_RootMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:154](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L154)
+
+___
+
+### \_AlphaMap
+
+• `set` **_AlphaMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:158](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L158)
+
+___
+
+### \_UVTransform
+
+• `set` **_UVTransform**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:162](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L162)
+
+___
+
+### \_Metallic
+
+• `set` **_Metallic**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:166](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L166)
+
+___
+
+### \_Roughness
+
+• `set` **_Roughness**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:170](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L170)
+
+___
+
+### \_HairColor0
+
+• `set` **_HairColor0**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L174)
+
+___
+
+### \_HairColor1
+
+• `set` **_HairColor1**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L178)
+
+___
+
+### \_SpecularColor
+
+• `set` **_SpecularColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L182)
+
+___
+
+### \_AlphaCutoff
+
+• `set` **_AlphaCutoff**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L186)
+
+___
+
+### \_BackLit
+
+• `set` **_BackLit**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L190)
+
+___
+
+### \_Area
+
+• `set` **_Area**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L194)
+
+___
+
+### \_DoubleSidedEnable
+
+• `set` **_DoubleSidedEnable**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L199)
+
+___
+
+### \_SurfaceType
+
+• `set` **_SurfaceType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:204](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L204)
+
+___
+
+### \_AlphaCutoffEnable
+
+• `set` **_AlphaCutoffEnable**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:212](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L212)
+
+## Methods
+
+### addRenderPass
+
+▸ **addRenderPass**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[addRenderPass](Shader.md#addrenderpass)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L28)
+
+___
+
+### removeShader
+
+▸ **removeShader**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShader](Shader.md#removeshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L38)
+
+___
+
+### removeShaderByIndex
+
+▸ **removeShaderByIndex**(`passType`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `passType` | `PassType` | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShaderByIndex](Shader.md#removeshaderbyindex)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L52)
+
+___
+
+### getSubShaders
+
+▸ **getSubShaders**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getSubShaders](Shader.md#getsubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L63)
+
+___
+
+### hasSubShaders
+
+▸ **hasSubShaders**(`passType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasSubShaders](Shader.md#hassubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L67)
+
+___
+
+### getDefaultShaders
+
+▸ **getDefaultShaders**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultShaders](Shader.md#getdefaultshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L72)
+
+___
+
+### getDefaultColorShader
+
+▸ **getDefaultColorShader**(): [`RenderShaderPass`](RenderShaderPass.md)
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultColorShader](Shader.md#getdefaultcolorshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L76)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setDefine](Shader.md#setdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L80)
+
+___
+
+### hasDefine
+
+▸ **hasDefine**(`arg0`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasDefine](Shader.md#hasdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L88)
+
+___
+
+### deleteDefine
+
+▸ **deleteDefine**(`arg0`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[deleteDefine](Shader.md#deletedefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L99)
+
+___
+
+### setUniform
+
+▸ **setUniform**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniform](Shader.md#setuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L107)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformFloat](Shader.md#setuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L115)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector2](Shader.md#setuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L123)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector3](Shader.md#setuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L131)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector4](Shader.md#setuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L139)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformColor](Shader.md#setuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L147)
+
+___
+
+### getUniform
+
+▸ **getUniform**(`arg0`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniform](Shader.md#getuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L155)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`arg0`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformFloat](Shader.md#getuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:159](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L159)
+
+___
+
+### getUniformVector2
+
+▸ **getUniformVector2**(`arg0`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector2](Shader.md#getuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:163](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L163)
+
+___
+
+### getUniformVector3
+
+▸ **getUniformVector3**(`arg0`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector3](Shader.md#getuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:167](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L167)
+
+___
+
+### getUniformVector4
+
+▸ **getUniformVector4**(`arg0`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector4](Shader.md#getuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:171](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L171)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`arg0`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformColor](Shader.md#getuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:175](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L175)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setTexture](Shader.md#settexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L179)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`arg0`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getTexture](Shader.md#gettexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:188](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L188)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformBuffer](Shader.md#setuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:192](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L192)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformBuffer](Shader.md#getuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L200)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStorageBuffer](Shader.md#setstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:204](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L204)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`arg0`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getStorageBuffer](Shader.md#getstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:212](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L212)
+
+___
+
+### setStructStorageBuffer
+
+▸ **setStructStorageBuffer**\<`T`\>(`arg0`, `arg1`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StructStorageGPUBuffer`](StructStorageGPUBuffer.md)\<`T`\> |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStructStorageBuffer](Shader.md#setstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L216)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getStructStorageBuffer](Shader.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L224)
+
+___
+
+### noticeValueChange
+
+▸ **noticeValueChange**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[noticeValueChange](Shader.md#noticevaluechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L228)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[destroy](Shader.md#destroy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:236](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L236)
+
+___
+
+### clone
+
+▸ **clone**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[clone](Shader.md#clone)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L240)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[applyUniform](Shader.md#applyuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:249](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L249)
+
+___
+
+### debug
+
+▸ **debug**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L75)
+
+___
+
+### setDefault
+
+▸ **setDefault**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitHairShader.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitHairShader.ts#L116)
diff --git a/docs/api/classes/LitMaterial.md b/docs/api/classes/LitMaterial.md
new file mode 100644
index 00000000..70776b4e
--- /dev/null
+++ b/docs/api/classes/LitMaterial.md
@@ -0,0 +1,1638 @@
+# Class: LitMaterial
+
+## Hierarchy
+
+- [`Material`](Material.md)
+
+ ↳ **`LitMaterial`**
+
+### Constructors
+
+- [constructor](LitMaterial.md#constructor)
+
+### Properties
+
+- [instanceID](LitMaterial.md#instanceid)
+- [name](LitMaterial.md#name)
+- [enable](LitMaterial.md#enable)
+
+### Accessors
+
+- [baseMap](LitMaterial.md#basemap)
+- [maskMap](LitMaterial.md#maskmap)
+- [normalMap](LitMaterial.md#normalmap)
+- [emissiveMap](LitMaterial.md#emissivemap)
+- [aoMap](LitMaterial.md#aomap)
+- [clearCoatRoughnessMap](LitMaterial.md#clearcoatroughnessmap)
+- [clearcoatColor](LitMaterial.md#clearcoatcolor)
+- [clearcoatWeight](LitMaterial.md#clearcoatweight)
+- [clearcoatFactor](LitMaterial.md#clearcoatfactor)
+- [clearcoatRoughnessFactor](LitMaterial.md#clearcoatroughnessfactor)
+- [ior](LitMaterial.md#ior)
+- [alphaCutoff](LitMaterial.md#alphacutoff)
+- [baseColor](LitMaterial.md#basecolor)
+- [roughness](LitMaterial.md#roughness)
+- [metallic](LitMaterial.md#metallic)
+- [emissiveColor](LitMaterial.md#emissivecolor)
+- [emissiveIntensity](LitMaterial.md#emissiveintensity)
+- [ao](LitMaterial.md#ao)
+- [shader](LitMaterial.md#shader)
+- [doubleSide](LitMaterial.md#doubleside)
+- [castShadow](LitMaterial.md#castshadow)
+- [acceptShadow](LitMaterial.md#acceptshadow)
+- [castReflection](LitMaterial.md#castreflection)
+- [blendMode](LitMaterial.md#blendmode)
+- [depthCompare](LitMaterial.md#depthcompare)
+- [transparent](LitMaterial.md#transparent)
+- [cullMode](LitMaterial.md#cullmode)
+- [depthWriteEnabled](LitMaterial.md#depthwriteenabled)
+- [useBillboard](LitMaterial.md#usebillboard)
+
+### Methods
+
+- [clone](LitMaterial.md#clone)
+- [getPass](LitMaterial.md#getpass)
+- [getAllPass](LitMaterial.md#getallpass)
+- [destroy](LitMaterial.md#destroy)
+- [setDefine](LitMaterial.md#setdefine)
+- [setTexture](LitMaterial.md#settexture)
+- [setStorageBuffer](LitMaterial.md#setstoragebuffer)
+- [setUniformBuffer](LitMaterial.md#setuniformbuffer)
+- [setUniformFloat](LitMaterial.md#setuniformfloat)
+- [setUniformVector2](LitMaterial.md#setuniformvector2)
+- [setUniformVector3](LitMaterial.md#setuniformvector3)
+- [setUniformVector4](LitMaterial.md#setuniformvector4)
+- [setUniformColor](LitMaterial.md#setuniformcolor)
+- [getUniformFloat](LitMaterial.md#getuniformfloat)
+- [getUniformV2](LitMaterial.md#getuniformv2)
+- [getUniformV3](LitMaterial.md#getuniformv3)
+- [getUniformV4](LitMaterial.md#getuniformv4)
+- [getUniformColor](LitMaterial.md#getuniformcolor)
+- [getTexture](LitMaterial.md#gettexture)
+- [getStorageBuffer](LitMaterial.md#getstoragebuffer)
+- [getStructStorageBuffer](LitMaterial.md#getstructstoragebuffer)
+- [getUniformBuffer](LitMaterial.md#getuniformbuffer)
+- [applyUniform](LitMaterial.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new LitMaterial**(): [`LitMaterial`](LitMaterial.md)
+
+#### Returns
+
+[`LitMaterial`](LitMaterial.md)
+
+#### Overrides
+
+[Material](Material.md).[constructor](Material.md#constructor)
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L12)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+Material Unique Identifier
+
+#### Inherited from
+
+[Material](Material.md).[instanceID](Material.md#instanceid)
+
+#### Defined in
+
+[src/materials/Material.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L19)
+
+___
+
+### name
+
+• **name**: `string`
+
+name of this material
+
+#### Inherited from
+
+[Material](Material.md).[name](Material.md#name)
+
+#### Defined in
+
+[src/materials/Material.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L25)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+[Material](Material.md).[enable](Material.md#enable)
+
+#### Defined in
+
+[src/materials/Material.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L27)
+
+## Accessors
+
+### baseMap
+
+• `get` **baseMap**(): [`Texture`](Texture.md)
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L69)
+
+• `set` **baseMap**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L65)
+
+___
+
+### maskMap
+
+• `get` **maskMap**(): [`Texture`](Texture.md)
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L77)
+
+• `set` **maskMap**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L73)
+
+___
+
+### normalMap
+
+• `get` **normalMap**(): [`Texture`](Texture.md)
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:86](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L86)
+
+• `set` **normalMap**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:82](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L82)
+
+___
+
+### emissiveMap
+
+• `get` **emissiveMap**(): [`Texture`](Texture.md)
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L94)
+
+• `set` **emissiveMap**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L90)
+
+___
+
+### aoMap
+
+• `get` **aoMap**(): [`Texture`](Texture.md)
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L102)
+
+• `set` **aoMap**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L98)
+
+___
+
+### clearCoatRoughnessMap
+
+• `get` **clearCoatRoughnessMap**(): [`Texture`](Texture.md)
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L112)
+
+• `set` **clearCoatRoughnessMap**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L106)
+
+___
+
+### clearcoatColor
+
+• `get` **clearcoatColor**(): [`Color`](Color.md)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L121)
+
+• `set` **clearcoatColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L116)
+
+___
+
+### clearcoatWeight
+
+• `get` **clearcoatWeight**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:130](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L130)
+
+• `set` **clearcoatWeight**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:125](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L125)
+
+___
+
+### clearcoatFactor
+
+• `get` **clearcoatFactor**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L139)
+
+• `set` **clearcoatFactor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:134](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L134)
+
+___
+
+### clearcoatRoughnessFactor
+
+• `get` **clearcoatRoughnessFactor**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:149](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L149)
+
+• `set` **clearcoatRoughnessFactor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L144)
+
+___
+
+### ior
+
+• `get` **ior**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L157)
+
+• `set` **ior**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L153)
+
+___
+
+### alphaCutoff
+
+• `get` **alphaCutoff**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:166](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L166)
+
+• `set` **alphaCutoff**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:162](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L162)
+
+___
+
+### baseColor
+
+• `get` **baseColor**(): [`Color`](Color.md)
+
+get base color (tint color)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:180](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L180)
+
+• `set` **baseColor**(`color`): `void`
+
+set base color (tint color)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `color` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L173)
+
+___
+
+### roughness
+
+• `get` **roughness**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:184](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L184)
+
+• `set` **roughness**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:188](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L188)
+
+___
+
+### metallic
+
+• `get` **metallic**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:192](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L192)
+
+• `set` **metallic**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:196](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L196)
+
+___
+
+### emissiveColor
+
+• `get` **emissiveColor**(): [`Color`](Color.md)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L200)
+
+• `set` **emissiveColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:204](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L204)
+
+___
+
+### emissiveIntensity
+
+• `get` **emissiveIntensity**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:208](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L208)
+
+• `set` **emissiveIntensity**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:212](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L212)
+
+___
+
+### ao
+
+• `get` **ao**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L216)
+
+• `set` **ao**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:220](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L220)
+
+___
+
+### shader
+
+• `get` **shader**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L41)
+
+• `set` **shader**(`shader`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shader` | [`Shader`](Shader.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L36)
+
+___
+
+### doubleSide
+
+• `get` **doubleSide**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L45)
+
+• `set` **doubleSide**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L49)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L53)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L57)
+
+___
+
+### acceptShadow
+
+• `get` **acceptShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L64)
+
+• `set` **acceptShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L68)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L77)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L81)
+
+___
+
+### blendMode
+
+• `get` **blendMode**(): [`BlendMode`](../enums/BlendMode.md)
+
+#### Returns
+
+[`BlendMode`](../enums/BlendMode.md)
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L85)
+
+• `set` **blendMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`BlendMode`](../enums/BlendMode.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L89)
+
+___
+
+### depthCompare
+
+• `get` **depthCompare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L93)
+
+• `set` **depthCompare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L97)
+
+___
+
+### transparent
+
+• `get` **transparent**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L102)
+
+• `set` **transparent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L106)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L113)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L117)
+
+___
+
+### depthWriteEnabled
+
+• `get` **depthWriteEnabled**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L128)
+
+• `set` **depthWriteEnabled**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L132)
+
+___
+
+### useBillboard
+
+• `set` **useBillboard**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.useBillboard
+
+#### Defined in
+
+[src/materials/Material.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L136)
+
+## Methods
+
+### clone
+
+▸ **clone**(): [`Material`](Material.md)
+
+clone one material
+
+#### Returns
+
+[`Material`](Material.md)
+
+Material
+
+#### Overrides
+
+[Material](Material.md).[clone](Material.md#clone)
+
+#### Defined in
+
+[src/materials/LitMaterial.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/LitMaterial.ts#L19)
+
+___
+
+### getPass
+
+▸ **getPass**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get render pass by renderType
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getPass](Material.md#getpass)
+
+#### Defined in
+
+[src/materials/Material.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L145)
+
+___
+
+### getAllPass
+
+▸ **getAllPass**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get all color render pass
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getAllPass](Material.md#getallpass)
+
+#### Defined in
+
+[src/materials/Material.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L153)
+
+___
+
+### destroy
+
+▸ **destroy**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[destroy](Material.md#destroy)
+
+#### Defined in
+
+[src/materials/Material.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L168)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`define`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `define` | `string` |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setDefine](Material.md#setdefine)
+
+#### Defined in
+
+[src/materials/Material.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L174)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`propertyName`, `texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setTexture](Material.md#settexture)
+
+#### Defined in
+
+[src/materials/Material.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L178)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setStorageBuffer](Material.md#setstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L182)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformBuffer](Material.md#setuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L186)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformFloat](Material.md#setuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L191)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector2](Material.md#setuniformvector2)
+
+#### Defined in
+
+[src/materials/Material.ts:195](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L195)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector3](Material.md#setuniformvector3)
+
+#### Defined in
+
+[src/materials/Material.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L199)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector4](Material.md#setuniformvector4)
+
+#### Defined in
+
+[src/materials/Material.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L203)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformColor](Material.md#setuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L207)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`str`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformFloat](Material.md#getuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L211)
+
+___
+
+### getUniformV2
+
+▸ **getUniformV2**(`str`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV2](Material.md#getuniformv2)
+
+#### Defined in
+
+[src/materials/Material.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L215)
+
+___
+
+### getUniformV3
+
+▸ **getUniformV3**(`str`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV3](Material.md#getuniformv3)
+
+#### Defined in
+
+[src/materials/Material.ts:219](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L219)
+
+___
+
+### getUniformV4
+
+▸ **getUniformV4**(`str`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV4](Material.md#getuniformv4)
+
+#### Defined in
+
+[src/materials/Material.ts:223](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L223)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`str`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformColor](Material.md#getuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L227)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`str`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Material](Material.md).[getTexture](Material.md#gettexture)
+
+#### Defined in
+
+[src/materials/Material.ts:231](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L231)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`str`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Material](Material.md).[getStorageBuffer](Material.md#getstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:235](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L235)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getStructStorageBuffer](Material.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:239](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L239)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformBuffer](Material.md#getuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:243](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L243)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[applyUniform](Material.md#applyuniform)
+
+#### Defined in
+
+[src/materials/Material.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L247)
diff --git a/docs/api/classes/LitSSSShader.md b/docs/api/classes/LitSSSShader.md
new file mode 100644
index 00000000..ebc482ee
--- /dev/null
+++ b/docs/api/classes/LitSSSShader.md
@@ -0,0 +1,1268 @@
+# Class: LitSSSShader
+
+## Hierarchy
+
+- [`Shader`](Shader.md)
+
+ ↳ **`LitSSSShader`**
+
+### Constructors
+
+- [constructor](LitSSSShader.md#constructor)
+
+### Properties
+
+- [computes](LitSSSShader.md#computes)
+- [passShader](LitSSSShader.md#passshader)
+
+### Accessors
+
+- [\_MainTex](LitSSSShader.md#_maintex)
+- [\_BumpMap](LitSSSShader.md#_bumpmap)
+- [\_SSSMap](LitSSSShader.md#_sssmap)
+- [\_MaskTex](LitSSSShader.md#_masktex)
+- [\_UVTransform](LitSSSShader.md#_uvtransform)
+- [\_Metallic](LitSSSShader.md#_metallic)
+- [\_Roughness](LitSSSShader.md#_roughness)
+- [\_MainColor](LitSSSShader.md#_maincolor)
+- [\_AlphaCutoff](LitSSSShader.md#_alphacutoff)
+- [\_DoubleSidedEnable](LitSSSShader.md#_doublesidedenable)
+- [\_SkinColor](LitSSSShader.md#_skincolor)
+- [\_SkinPower](LitSSSShader.md#_skinpower)
+- [\_SkinColorIns](LitSSSShader.md#_skincolorins)
+- [curveFactor](LitSSSShader.md#curvefactor)
+- [\_SurfaceType](LitSSSShader.md#_surfacetype)
+- [\_AlphaCutoffEnable](LitSSSShader.md#_alphacutoffenable)
+
+### Methods
+
+- [addRenderPass](LitSSSShader.md#addrenderpass)
+- [removeShader](LitSSSShader.md#removeshader)
+- [removeShaderByIndex](LitSSSShader.md#removeshaderbyindex)
+- [getSubShaders](LitSSSShader.md#getsubshaders)
+- [hasSubShaders](LitSSSShader.md#hassubshaders)
+- [getDefaultShaders](LitSSSShader.md#getdefaultshaders)
+- [getDefaultColorShader](LitSSSShader.md#getdefaultcolorshader)
+- [setDefine](LitSSSShader.md#setdefine)
+- [hasDefine](LitSSSShader.md#hasdefine)
+- [deleteDefine](LitSSSShader.md#deletedefine)
+- [setUniform](LitSSSShader.md#setuniform)
+- [setUniformFloat](LitSSSShader.md#setuniformfloat)
+- [setUniformVector2](LitSSSShader.md#setuniformvector2)
+- [setUniformVector3](LitSSSShader.md#setuniformvector3)
+- [setUniformVector4](LitSSSShader.md#setuniformvector4)
+- [setUniformColor](LitSSSShader.md#setuniformcolor)
+- [getUniform](LitSSSShader.md#getuniform)
+- [getUniformFloat](LitSSSShader.md#getuniformfloat)
+- [getUniformVector2](LitSSSShader.md#getuniformvector2)
+- [getUniformVector3](LitSSSShader.md#getuniformvector3)
+- [getUniformVector4](LitSSSShader.md#getuniformvector4)
+- [getUniformColor](LitSSSShader.md#getuniformcolor)
+- [setTexture](LitSSSShader.md#settexture)
+- [getTexture](LitSSSShader.md#gettexture)
+- [setUniformBuffer](LitSSSShader.md#setuniformbuffer)
+- [getUniformBuffer](LitSSSShader.md#getuniformbuffer)
+- [setStorageBuffer](LitSSSShader.md#setstoragebuffer)
+- [getStorageBuffer](LitSSSShader.md#getstoragebuffer)
+- [setStructStorageBuffer](LitSSSShader.md#setstructstoragebuffer)
+- [getStructStorageBuffer](LitSSSShader.md#getstructstoragebuffer)
+- [noticeValueChange](LitSSSShader.md#noticevaluechange)
+- [destroy](LitSSSShader.md#destroy)
+- [clone](LitSSSShader.md#clone)
+- [applyUniform](LitSSSShader.md#applyuniform)
+- [debug](LitSSSShader.md#debug)
+- [setDefault](LitSSSShader.md#setdefault)
+
+## Constructors
+
+### constructor
+
+• **new LitSSSShader**(): [`LitSSSShader`](LitSSSShader.md)
+
+#### Returns
+
+[`LitSSSShader`](LitSSSShader.md)
+
+#### Overrides
+
+[Shader](Shader.md).[constructor](Shader.md#constructor)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L18)
+
+## Properties
+
+### computes
+
+• **computes**: [`RenderShaderCompute`](RenderShaderCompute.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[computes](Shader.md#computes)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L19)
+
+___
+
+### passShader
+
+• **passShader**: `Map`\<`PassType`, [`RenderShaderPass`](RenderShaderPass.md)[]\>
+
+#### Inherited from
+
+[Shader](Shader.md).[passShader](Shader.md#passshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L21)
+
+## Accessors
+
+### \_MainTex
+
+• `set` **_MainTex**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L103)
+
+___
+
+### \_BumpMap
+
+• `set` **_BumpMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L107)
+
+___
+
+### \_SSSMap
+
+• `set` **_SSSMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L111)
+
+___
+
+### \_MaskTex
+
+• `set` **_MaskTex**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L115)
+
+___
+
+### \_UVTransform
+
+• `set` **_UVTransform**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L119)
+
+___
+
+### \_Metallic
+
+• `set` **_Metallic**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L123)
+
+___
+
+### \_Roughness
+
+• `set` **_Roughness**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:127](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L127)
+
+___
+
+### \_MainColor
+
+• `set` **_MainColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L132)
+
+___
+
+### \_AlphaCutoff
+
+• `set` **_AlphaCutoff**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L136)
+
+___
+
+### \_DoubleSidedEnable
+
+• `set` **_DoubleSidedEnable**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L140)
+
+___
+
+### \_SkinColor
+
+• `set` **_SkinColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L145)
+
+___
+
+### \_SkinPower
+
+• `set` **_SkinPower**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:149](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L149)
+
+___
+
+### \_SkinColorIns
+
+• `set` **_SkinColorIns**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L153)
+
+___
+
+### curveFactor
+
+• `set` **curveFactor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L157)
+
+___
+
+### \_SurfaceType
+
+• `set` **_SurfaceType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L161)
+
+___
+
+### \_AlphaCutoffEnable
+
+• `set` **_AlphaCutoffEnable**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:170](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L170)
+
+## Methods
+
+### addRenderPass
+
+▸ **addRenderPass**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[addRenderPass](Shader.md#addrenderpass)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L28)
+
+___
+
+### removeShader
+
+▸ **removeShader**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShader](Shader.md#removeshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L38)
+
+___
+
+### removeShaderByIndex
+
+▸ **removeShaderByIndex**(`passType`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `passType` | `PassType` | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShaderByIndex](Shader.md#removeshaderbyindex)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L52)
+
+___
+
+### getSubShaders
+
+▸ **getSubShaders**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getSubShaders](Shader.md#getsubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L63)
+
+___
+
+### hasSubShaders
+
+▸ **hasSubShaders**(`passType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasSubShaders](Shader.md#hassubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L67)
+
+___
+
+### getDefaultShaders
+
+▸ **getDefaultShaders**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultShaders](Shader.md#getdefaultshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L72)
+
+___
+
+### getDefaultColorShader
+
+▸ **getDefaultColorShader**(): [`RenderShaderPass`](RenderShaderPass.md)
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultColorShader](Shader.md#getdefaultcolorshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L76)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setDefine](Shader.md#setdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L80)
+
+___
+
+### hasDefine
+
+▸ **hasDefine**(`arg0`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasDefine](Shader.md#hasdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L88)
+
+___
+
+### deleteDefine
+
+▸ **deleteDefine**(`arg0`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[deleteDefine](Shader.md#deletedefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L99)
+
+___
+
+### setUniform
+
+▸ **setUniform**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniform](Shader.md#setuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L107)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformFloat](Shader.md#setuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L115)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector2](Shader.md#setuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L123)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector3](Shader.md#setuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L131)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector4](Shader.md#setuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L139)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformColor](Shader.md#setuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L147)
+
+___
+
+### getUniform
+
+▸ **getUniform**(`arg0`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniform](Shader.md#getuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L155)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`arg0`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformFloat](Shader.md#getuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:159](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L159)
+
+___
+
+### getUniformVector2
+
+▸ **getUniformVector2**(`arg0`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector2](Shader.md#getuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:163](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L163)
+
+___
+
+### getUniformVector3
+
+▸ **getUniformVector3**(`arg0`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector3](Shader.md#getuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:167](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L167)
+
+___
+
+### getUniformVector4
+
+▸ **getUniformVector4**(`arg0`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector4](Shader.md#getuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:171](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L171)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`arg0`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformColor](Shader.md#getuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:175](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L175)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setTexture](Shader.md#settexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L179)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`arg0`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getTexture](Shader.md#gettexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:188](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L188)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformBuffer](Shader.md#setuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:192](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L192)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformBuffer](Shader.md#getuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L200)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStorageBuffer](Shader.md#setstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:204](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L204)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`arg0`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getStorageBuffer](Shader.md#getstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:212](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L212)
+
+___
+
+### setStructStorageBuffer
+
+▸ **setStructStorageBuffer**\<`T`\>(`arg0`, `arg1`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StructStorageGPUBuffer`](StructStorageGPUBuffer.md)\<`T`\> |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStructStorageBuffer](Shader.md#setstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L216)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getStructStorageBuffer](Shader.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L224)
+
+___
+
+### noticeValueChange
+
+▸ **noticeValueChange**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[noticeValueChange](Shader.md#noticevaluechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L228)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[destroy](Shader.md#destroy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:236](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L236)
+
+___
+
+### clone
+
+▸ **clone**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[clone](Shader.md#clone)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L240)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[applyUniform](Shader.md#applyuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:249](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L249)
+
+___
+
+### debug
+
+▸ **debug**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L46)
+
+___
+
+### setDefault
+
+▸ **setDefault**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitSSSShader.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitSSSShader.ts#L72)
diff --git a/docs/api/classes/LitShader.md b/docs/api/classes/LitShader.md
new file mode 100644
index 00000000..8bc2043c
--- /dev/null
+++ b/docs/api/classes/LitShader.md
@@ -0,0 +1,1148 @@
+# Class: LitShader
+
+## Hierarchy
+
+- [`Shader`](Shader.md)
+
+ ↳ **`LitShader`**
+
+### Constructors
+
+- [constructor](LitShader.md#constructor)
+
+### Properties
+
+- [computes](LitShader.md#computes)
+- [passShader](LitShader.md#passshader)
+
+### Accessors
+
+- [\_MainTex](LitShader.md#_maintex)
+- [\_BumpMap](LitShader.md#_bumpmap)
+- [\_MaskTex](LitShader.md#_masktex)
+- [\_UVTransform](LitShader.md#_uvtransform)
+- [\_Metallic](LitShader.md#_metallic)
+- [\_Roughness](LitShader.md#_roughness)
+- [\_MainColor](LitShader.md#_maincolor)
+- [\_AlphaCutoff](LitShader.md#_alphacutoff)
+- [\_DoubleSidedEnable](LitShader.md#_doublesidedenable)
+- [\_SurfaceType](LitShader.md#_surfacetype)
+- [\_AlphaCutoffEnable](LitShader.md#_alphacutoffenable)
+
+### Methods
+
+- [addRenderPass](LitShader.md#addrenderpass)
+- [removeShader](LitShader.md#removeshader)
+- [removeShaderByIndex](LitShader.md#removeshaderbyindex)
+- [getSubShaders](LitShader.md#getsubshaders)
+- [hasSubShaders](LitShader.md#hassubshaders)
+- [getDefaultShaders](LitShader.md#getdefaultshaders)
+- [getDefaultColorShader](LitShader.md#getdefaultcolorshader)
+- [setDefine](LitShader.md#setdefine)
+- [hasDefine](LitShader.md#hasdefine)
+- [deleteDefine](LitShader.md#deletedefine)
+- [setUniform](LitShader.md#setuniform)
+- [setUniformFloat](LitShader.md#setuniformfloat)
+- [setUniformVector2](LitShader.md#setuniformvector2)
+- [setUniformVector3](LitShader.md#setuniformvector3)
+- [setUniformVector4](LitShader.md#setuniformvector4)
+- [setUniformColor](LitShader.md#setuniformcolor)
+- [getUniform](LitShader.md#getuniform)
+- [getUniformFloat](LitShader.md#getuniformfloat)
+- [getUniformVector2](LitShader.md#getuniformvector2)
+- [getUniformVector3](LitShader.md#getuniformvector3)
+- [getUniformVector4](LitShader.md#getuniformvector4)
+- [getUniformColor](LitShader.md#getuniformcolor)
+- [setTexture](LitShader.md#settexture)
+- [getTexture](LitShader.md#gettexture)
+- [setUniformBuffer](LitShader.md#setuniformbuffer)
+- [getUniformBuffer](LitShader.md#getuniformbuffer)
+- [setStorageBuffer](LitShader.md#setstoragebuffer)
+- [getStorageBuffer](LitShader.md#getstoragebuffer)
+- [setStructStorageBuffer](LitShader.md#setstructstoragebuffer)
+- [getStructStorageBuffer](LitShader.md#getstructstoragebuffer)
+- [noticeValueChange](LitShader.md#noticevaluechange)
+- [destroy](LitShader.md#destroy)
+- [clone](LitShader.md#clone)
+- [applyUniform](LitShader.md#applyuniform)
+- [setDefault](LitShader.md#setdefault)
+
+## Constructors
+
+### constructor
+
+• **new LitShader**(): [`LitShader`](LitShader.md)
+
+#### Returns
+
+[`LitShader`](LitShader.md)
+
+#### Overrides
+
+[Shader](Shader.md).[constructor](Shader.md#constructor)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitShader.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitShader.ts#L15)
+
+## Properties
+
+### computes
+
+• **computes**: [`RenderShaderCompute`](RenderShaderCompute.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[computes](Shader.md#computes)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L19)
+
+___
+
+### passShader
+
+• **passShader**: `Map`\<`PassType`, [`RenderShaderPass`](RenderShaderPass.md)[]\>
+
+#### Inherited from
+
+[Shader](Shader.md).[passShader](Shader.md#passshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L21)
+
+## Accessors
+
+### \_MainTex
+
+• `set` **_MainTex**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitShader.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitShader.ts#L67)
+
+___
+
+### \_BumpMap
+
+• `set` **_BumpMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitShader.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitShader.ts#L71)
+
+___
+
+### \_MaskTex
+
+• `set` **_MaskTex**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitShader.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitShader.ts#L75)
+
+___
+
+### \_UVTransform
+
+• `set` **_UVTransform**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitShader.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitShader.ts#L79)
+
+___
+
+### \_Metallic
+
+• `set` **_Metallic**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitShader.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitShader.ts#L83)
+
+___
+
+### \_Roughness
+
+• `set` **_Roughness**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitShader.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitShader.ts#L87)
+
+___
+
+### \_MainColor
+
+• `set` **_MainColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitShader.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitShader.ts#L91)
+
+___
+
+### \_AlphaCutoff
+
+• `set` **_AlphaCutoff**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitShader.ts:95](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitShader.ts#L95)
+
+___
+
+### \_DoubleSidedEnable
+
+• `set` **_DoubleSidedEnable**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitShader.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitShader.ts#L99)
+
+___
+
+### \_SurfaceType
+
+• `set` **_SurfaceType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitShader.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitShader.ts#L104)
+
+___
+
+### \_AlphaCutoffEnable
+
+• `set` **_AlphaCutoffEnable**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitShader.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitShader.ts#L113)
+
+## Methods
+
+### addRenderPass
+
+▸ **addRenderPass**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[addRenderPass](Shader.md#addrenderpass)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L28)
+
+___
+
+### removeShader
+
+▸ **removeShader**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShader](Shader.md#removeshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L38)
+
+___
+
+### removeShaderByIndex
+
+▸ **removeShaderByIndex**(`passType`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `passType` | `PassType` | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShaderByIndex](Shader.md#removeshaderbyindex)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L52)
+
+___
+
+### getSubShaders
+
+▸ **getSubShaders**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getSubShaders](Shader.md#getsubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L63)
+
+___
+
+### hasSubShaders
+
+▸ **hasSubShaders**(`passType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasSubShaders](Shader.md#hassubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L67)
+
+___
+
+### getDefaultShaders
+
+▸ **getDefaultShaders**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultShaders](Shader.md#getdefaultshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L72)
+
+___
+
+### getDefaultColorShader
+
+▸ **getDefaultColorShader**(): [`RenderShaderPass`](RenderShaderPass.md)
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultColorShader](Shader.md#getdefaultcolorshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L76)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setDefine](Shader.md#setdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L80)
+
+___
+
+### hasDefine
+
+▸ **hasDefine**(`arg0`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasDefine](Shader.md#hasdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L88)
+
+___
+
+### deleteDefine
+
+▸ **deleteDefine**(`arg0`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[deleteDefine](Shader.md#deletedefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L99)
+
+___
+
+### setUniform
+
+▸ **setUniform**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniform](Shader.md#setuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L107)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformFloat](Shader.md#setuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L115)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector2](Shader.md#setuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L123)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector3](Shader.md#setuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L131)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector4](Shader.md#setuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L139)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformColor](Shader.md#setuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L147)
+
+___
+
+### getUniform
+
+▸ **getUniform**(`arg0`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniform](Shader.md#getuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L155)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`arg0`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformFloat](Shader.md#getuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:159](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L159)
+
+___
+
+### getUniformVector2
+
+▸ **getUniformVector2**(`arg0`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector2](Shader.md#getuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:163](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L163)
+
+___
+
+### getUniformVector3
+
+▸ **getUniformVector3**(`arg0`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector3](Shader.md#getuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:167](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L167)
+
+___
+
+### getUniformVector4
+
+▸ **getUniformVector4**(`arg0`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector4](Shader.md#getuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:171](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L171)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`arg0`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformColor](Shader.md#getuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:175](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L175)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setTexture](Shader.md#settexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L179)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`arg0`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getTexture](Shader.md#gettexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:188](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L188)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformBuffer](Shader.md#setuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:192](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L192)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformBuffer](Shader.md#getuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L200)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStorageBuffer](Shader.md#setstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:204](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L204)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`arg0`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getStorageBuffer](Shader.md#getstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:212](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L212)
+
+___
+
+### setStructStorageBuffer
+
+▸ **setStructStorageBuffer**\<`T`\>(`arg0`, `arg1`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StructStorageGPUBuffer`](StructStorageGPUBuffer.md)\<`T`\> |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStructStorageBuffer](Shader.md#setstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L216)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getStructStorageBuffer](Shader.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L224)
+
+___
+
+### noticeValueChange
+
+▸ **noticeValueChange**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[noticeValueChange](Shader.md#noticevaluechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L228)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[destroy](Shader.md#destroy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:236](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L236)
+
+___
+
+### clone
+
+▸ **clone**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[clone](Shader.md#clone)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L240)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[applyUniform](Shader.md#applyuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:249](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L249)
+
+___
+
+### setDefault
+
+▸ **setDefault**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/LitShader.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/LitShader.ts#L37)
diff --git a/docs/api/classes/Material.md b/docs/api/classes/Material.md
new file mode 100644
index 00000000..4719d32a
--- /dev/null
+++ b/docs/api/classes/Material.md
@@ -0,0 +1,900 @@
+# Class: Material
+
+## Hierarchy
+
+- **`Material`**
+
+ ↳ [`GUIMaterial`](GUIMaterial.md)
+
+ ↳ [`ColorLitMaterial`](ColorLitMaterial.md)
+
+ ↳ [`GIProbeMaterial`](GIProbeMaterial.md)
+
+ ↳ [`GlassMaterial`](GlassMaterial.md)
+
+ ↳ [`LambertMaterial`](LambertMaterial.md)
+
+ ↳ [`LitMaterial`](LitMaterial.md)
+
+ ↳ [`ReflectionMaterial`](ReflectionMaterial.md)
+
+ ↳ [`UnLitMaterial`](UnLitMaterial.md)
+
+ ↳ [`UnLitTexArrayMaterial`](UnLitTexArrayMaterial.md)
+
+### Constructors
+
+- [constructor](Material.md#constructor)
+
+### Properties
+
+- [instanceID](Material.md#instanceid)
+- [name](Material.md#name)
+- [enable](Material.md#enable)
+
+### Accessors
+
+- [shader](Material.md#shader)
+- [doubleSide](Material.md#doubleside)
+- [castShadow](Material.md#castshadow)
+- [acceptShadow](Material.md#acceptshadow)
+- [castReflection](Material.md#castreflection)
+- [blendMode](Material.md#blendmode)
+- [depthCompare](Material.md#depthcompare)
+- [transparent](Material.md#transparent)
+- [cullMode](Material.md#cullmode)
+- [depthWriteEnabled](Material.md#depthwriteenabled)
+- [useBillboard](Material.md#usebillboard)
+
+### Methods
+
+- [getPass](Material.md#getpass)
+- [getAllPass](Material.md#getallpass)
+- [clone](Material.md#clone)
+- [destroy](Material.md#destroy)
+- [setDefine](Material.md#setdefine)
+- [setTexture](Material.md#settexture)
+- [setStorageBuffer](Material.md#setstoragebuffer)
+- [setUniformBuffer](Material.md#setuniformbuffer)
+- [setUniformFloat](Material.md#setuniformfloat)
+- [setUniformVector2](Material.md#setuniformvector2)
+- [setUniformVector3](Material.md#setuniformvector3)
+- [setUniformVector4](Material.md#setuniformvector4)
+- [setUniformColor](Material.md#setuniformcolor)
+- [getUniformFloat](Material.md#getuniformfloat)
+- [getUniformV2](Material.md#getuniformv2)
+- [getUniformV3](Material.md#getuniformv3)
+- [getUniformV4](Material.md#getuniformv4)
+- [getUniformColor](Material.md#getuniformcolor)
+- [getTexture](Material.md#gettexture)
+- [getStorageBuffer](Material.md#getstoragebuffer)
+- [getStructStorageBuffer](Material.md#getstructstoragebuffer)
+- [getUniformBuffer](Material.md#getuniformbuffer)
+- [applyUniform](Material.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new Material**(): [`Material`](Material.md)
+
+#### Returns
+
+[`Material`](Material.md)
+
+#### Defined in
+
+[src/materials/Material.ts:33](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L33)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+Material Unique Identifier
+
+#### Defined in
+
+[src/materials/Material.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L19)
+
+___
+
+### name
+
+• **name**: `string`
+
+name of this material
+
+#### Defined in
+
+[src/materials/Material.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L25)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Defined in
+
+[src/materials/Material.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L27)
+
+## Accessors
+
+### shader
+
+• `get` **shader**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Defined in
+
+[src/materials/Material.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L41)
+
+• `set` **shader**(`shader`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shader` | [`Shader`](Shader.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L36)
+
+___
+
+### doubleSide
+
+• `get` **doubleSide**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/materials/Material.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L45)
+
+• `set` **doubleSide**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L49)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/materials/Material.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L53)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L57)
+
+___
+
+### acceptShadow
+
+• `get` **acceptShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/materials/Material.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L64)
+
+• `set` **acceptShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L68)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/materials/Material.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L77)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L81)
+
+___
+
+### blendMode
+
+• `get` **blendMode**(): [`BlendMode`](../enums/BlendMode.md)
+
+#### Returns
+
+[`BlendMode`](../enums/BlendMode.md)
+
+#### Defined in
+
+[src/materials/Material.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L85)
+
+• `set` **blendMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`BlendMode`](../enums/BlendMode.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L89)
+
+___
+
+### depthCompare
+
+• `get` **depthCompare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Defined in
+
+[src/materials/Material.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L93)
+
+• `set` **depthCompare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L97)
+
+___
+
+### transparent
+
+• `get` **transparent**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/materials/Material.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L102)
+
+• `set` **transparent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L106)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Defined in
+
+[src/materials/Material.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L113)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L117)
+
+___
+
+### depthWriteEnabled
+
+• `get` **depthWriteEnabled**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/materials/Material.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L128)
+
+• `set` **depthWriteEnabled**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L132)
+
+___
+
+### useBillboard
+
+• `set` **useBillboard**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L136)
+
+## Methods
+
+### getPass
+
+▸ **getPass**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get render pass by renderType
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Defined in
+
+[src/materials/Material.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L145)
+
+___
+
+### getAllPass
+
+▸ **getAllPass**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get all color render pass
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Defined in
+
+[src/materials/Material.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L153)
+
+___
+
+### clone
+
+▸ **clone**(): [`Material`](Material.md)
+
+clone one material
+
+#### Returns
+
+[`Material`](Material.md)
+
+Material
+
+#### Defined in
+
+[src/materials/Material.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L161)
+
+___
+
+### destroy
+
+▸ **destroy**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L168)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`define`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `define` | `string` |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L174)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`propertyName`, `texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L178)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L182)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L186)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L191)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:195](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L195)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L199)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L203)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L207)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`str`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/materials/Material.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L211)
+
+___
+
+### getUniformV2
+
+▸ **getUniformV2**(`str`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/materials/Material.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L215)
+
+___
+
+### getUniformV3
+
+▸ **getUniformV3**(`str`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/materials/Material.ts:219](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L219)
+
+___
+
+### getUniformV4
+
+▸ **getUniformV4**(`str`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Defined in
+
+[src/materials/Material.ts:223](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L223)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`str`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/materials/Material.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L227)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`str`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/materials/Material.ts:231](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L231)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`str`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Defined in
+
+[src/materials/Material.ts:235](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L235)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Defined in
+
+[src/materials/Material.ts:239](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L239)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Defined in
+
+[src/materials/Material.ts:243](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L243)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/Material.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L247)
diff --git a/docs/api/classes/MaterialDataUniformGPUBuffer.md b/docs/api/classes/MaterialDataUniformGPUBuffer.md
new file mode 100644
index 00000000..f7621f9d
--- /dev/null
+++ b/docs/api/classes/MaterialDataUniformGPUBuffer.md
@@ -0,0 +1,1335 @@
+# Class: MaterialDataUniformGPUBuffer
+
+Real time Uniform GPUBuffer used by shaders
+
+## Hierarchy
+
+- `GPUBufferBase`
+
+ ↳ **`MaterialDataUniformGPUBuffer`**
+
+### Constructors
+
+- [constructor](MaterialDataUniformGPUBuffer.md#constructor)
+
+### Properties
+
+- [bufferType](MaterialDataUniformGPUBuffer.md#buffertype)
+- [buffer](MaterialDataUniformGPUBuffer.md#buffer)
+- [memory](MaterialDataUniformGPUBuffer.md#memory)
+- [memoryNodes](MaterialDataUniformGPUBuffer.md#memorynodes)
+- [seek](MaterialDataUniformGPUBuffer.md#seek)
+- [outFloat32Array](MaterialDataUniformGPUBuffer.md#outfloat32array)
+- [byteSize](MaterialDataUniformGPUBuffer.md#bytesize)
+- [usage](MaterialDataUniformGPUBuffer.md#usage)
+- [visibility](MaterialDataUniformGPUBuffer.md#visibility)
+- [uniformNodes](MaterialDataUniformGPUBuffer.md#uniformnodes)
+
+### Methods
+
+- [debug](MaterialDataUniformGPUBuffer.md#debug)
+- [reset](MaterialDataUniformGPUBuffer.md#reset)
+- [setBoolean](MaterialDataUniformGPUBuffer.md#setboolean)
+- [readBoole](MaterialDataUniformGPUBuffer.md#readboole)
+- [setFloat](MaterialDataUniformGPUBuffer.md#setfloat)
+- [getFloat](MaterialDataUniformGPUBuffer.md#getfloat)
+- [setInt8](MaterialDataUniformGPUBuffer.md#setint8)
+- [getInt8](MaterialDataUniformGPUBuffer.md#getint8)
+- [setInt16](MaterialDataUniformGPUBuffer.md#setint16)
+- [getInt16](MaterialDataUniformGPUBuffer.md#getint16)
+- [setInt32](MaterialDataUniformGPUBuffer.md#setint32)
+- [getInt32](MaterialDataUniformGPUBuffer.md#getint32)
+- [setUint8](MaterialDataUniformGPUBuffer.md#setuint8)
+- [getUint8](MaterialDataUniformGPUBuffer.md#getuint8)
+- [setUint16](MaterialDataUniformGPUBuffer.md#setuint16)
+- [getUint16](MaterialDataUniformGPUBuffer.md#getuint16)
+- [setUint32](MaterialDataUniformGPUBuffer.md#setuint32)
+- [getUint32](MaterialDataUniformGPUBuffer.md#getuint32)
+- [setVector2](MaterialDataUniformGPUBuffer.md#setvector2)
+- [getVector2](MaterialDataUniformGPUBuffer.md#getvector2)
+- [setVector3](MaterialDataUniformGPUBuffer.md#setvector3)
+- [getVector3](MaterialDataUniformGPUBuffer.md#getvector3)
+- [setVector4](MaterialDataUniformGPUBuffer.md#setvector4)
+- [getVector4](MaterialDataUniformGPUBuffer.md#getvector4)
+- [setVector4Array](MaterialDataUniformGPUBuffer.md#setvector4array)
+- [setColor](MaterialDataUniformGPUBuffer.md#setcolor)
+- [getColor](MaterialDataUniformGPUBuffer.md#getcolor)
+- [setColorArray](MaterialDataUniformGPUBuffer.md#setcolorarray)
+- [setMatrix](MaterialDataUniformGPUBuffer.md#setmatrix)
+- [setMatrixArray](MaterialDataUniformGPUBuffer.md#setmatrixarray)
+- [setArray](MaterialDataUniformGPUBuffer.md#setarray)
+- [setFloat32Array](MaterialDataUniformGPUBuffer.md#setfloat32array)
+- [setInt32Array](MaterialDataUniformGPUBuffer.md#setint32array)
+- [setUint32Array](MaterialDataUniformGPUBuffer.md#setuint32array)
+- [setStruct](MaterialDataUniformGPUBuffer.md#setstruct)
+- [setStructArray](MaterialDataUniformGPUBuffer.md#setstructarray)
+- [clean](MaterialDataUniformGPUBuffer.md#clean)
+- [mapAsyncWrite](MaterialDataUniformGPUBuffer.md#mapasyncwrite)
+- [destroy](MaterialDataUniformGPUBuffer.md#destroy)
+- [resizeBuffer](MaterialDataUniformGPUBuffer.md#resizebuffer)
+- [readBuffer](MaterialDataUniformGPUBuffer.md#readbuffer)
+- [initDataUniform](MaterialDataUniformGPUBuffer.md#initdatauniform)
+- [onChange](MaterialDataUniformGPUBuffer.md#onchange)
+- [apply](MaterialDataUniformGPUBuffer.md#apply)
+
+## Constructors
+
+### constructor
+
+• **new MaterialDataUniformGPUBuffer**(): [`MaterialDataUniformGPUBuffer`](MaterialDataUniformGPUBuffer.md)
+
+#### Returns
+
+[`MaterialDataUniformGPUBuffer`](MaterialDataUniformGPUBuffer.md)
+
+#### Overrides
+
+GPUBufferBase.constructor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/MaterialDataUniformGPUBuffer.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/MaterialDataUniformGPUBuffer.ts#L11)
+
+## Properties
+
+### bufferType
+
+• **bufferType**: [`GPUBufferType`](../enums/GPUBufferType.md)
+
+#### Inherited from
+
+GPUBufferBase.bufferType
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L20)
+
+___
+
+### buffer
+
+• **buffer**: `GPUBuffer`
+
+#### Inherited from
+
+GPUBufferBase.buffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L21)
+
+___
+
+### memory
+
+• **memory**: `MemoryDO`
+
+#### Inherited from
+
+GPUBufferBase.memory
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L22)
+
+___
+
+### memoryNodes
+
+• **memoryNodes**: `Map`\<`string` \| `number`, `MemoryInfo`\>
+
+#### Inherited from
+
+GPUBufferBase.memoryNodes
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L23)
+
+___
+
+### seek
+
+• **seek**: `number`
+
+#### Inherited from
+
+GPUBufferBase.seek
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L24)
+
+___
+
+### outFloat32Array
+
+• **outFloat32Array**: `Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.outFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L25)
+
+___
+
+### byteSize
+
+• **byteSize**: `number`
+
+#### Inherited from
+
+GPUBufferBase.byteSize
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L26)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+#### Inherited from
+
+GPUBufferBase.usage
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L27)
+
+___
+
+### visibility
+
+• **visibility**: `number`
+
+#### Inherited from
+
+GPUBufferBase.visibility
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L28)
+
+___
+
+### uniformNodes
+
+• **uniformNodes**: `UniformNode`[] = `[]`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/MaterialDataUniformGPUBuffer.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/MaterialDataUniformGPUBuffer.ts#L9)
+
+## Methods
+
+### debug
+
+▸ **debug**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.debug
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L41)
+
+___
+
+### reset
+
+▸ **reset**(`clean?`, `size?`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `clean` | `boolean` | `false` |
+| `size` | `number` | `0` |
+| `data?` | `Float32Array` | `undefined` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.reset
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L44)
+
+___
+
+### setBoolean
+
+▸ **setBoolean**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setBoolean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L52)
+
+___
+
+### readBoole
+
+▸ **readBoole**(`name`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+GPUBufferBase.readBoole
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L62)
+
+___
+
+### setFloat
+
+▸ **setFloat**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L70)
+
+___
+
+### getFloat
+
+▸ **getFloat**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L79)
+
+___
+
+### setInt8
+
+▸ **setInt8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L87)
+
+___
+
+### getInt8
+
+▸ **getInt8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L96)
+
+___
+
+### setInt16
+
+▸ **setInt16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L104)
+
+___
+
+### getInt16
+
+▸ **getInt16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L113)
+
+___
+
+### setInt32
+
+▸ **setInt32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L121)
+
+___
+
+### getInt32
+
+▸ **getInt32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:130](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L130)
+
+___
+
+### setUint8
+
+▸ **setUint8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:138](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L138)
+
+___
+
+### getUint8
+
+▸ **getUint8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L147)
+
+___
+
+### setUint16
+
+▸ **setUint16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L156)
+
+___
+
+### getUint16
+
+▸ **getUint16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L165)
+
+___
+
+### setUint32
+
+▸ **setUint32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L173)
+
+___
+
+### getUint32
+
+▸ **getUint32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L182)
+
+___
+
+### setVector2
+
+▸ **setVector2**(`name`, `v2`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v2` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L190)
+
+___
+
+### getVector2
+
+▸ **getVector2**(`name`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+GPUBufferBase.getVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L199)
+
+___
+
+### setVector3
+
+▸ **setVector3**(`name`, `v3`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v3` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L207)
+
+___
+
+### getVector3
+
+▸ **getVector3**(`name`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+GPUBufferBase.getVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L216)
+
+___
+
+### setVector4
+
+▸ **setVector4**(`name`, `v4`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4` | `Vector4` \| [`Quaternion`](Quaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L224)
+
+___
+
+### getVector4
+
+▸ **getVector4**(`name`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+GPUBufferBase.getVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L233)
+
+___
+
+### setVector4Array
+
+▸ **setVector4Array**(`name`, `v4Array`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4Array` | [`Vector3`](Vector3.md)[] \| `Vector4`[] \| [`Quaternion`](Quaternion.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:241](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L241)
+
+___
+
+### setColor
+
+▸ **setColor**(`name`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `color` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:250](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L250)
+
+___
+
+### getColor
+
+▸ **getColor**(`name`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+GPUBufferBase.getColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:259](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L259)
+
+___
+
+### setColorArray
+
+▸ **setColorArray**(`name`, `colorArray`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `colorArray` | [`Color`](Color.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColorArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:267](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L267)
+
+___
+
+### setMatrix
+
+▸ **setMatrix**(`name`, `mat`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mat` | [`Matrix4`](Matrix4.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrix
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:276](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L276)
+
+___
+
+### setMatrixArray
+
+▸ **setMatrixArray**(`name`, `mats`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mats` | [`Matrix4`](Matrix4.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrixArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:285](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L285)
+
+___
+
+### setArray
+
+▸ **setArray**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `number`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:297](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L297)
+
+___
+
+### setFloat32Array
+
+▸ **setFloat32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Float32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:306](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L306)
+
+___
+
+### setInt32Array
+
+▸ **setInt32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Int32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L315)
+
+___
+
+### setUint32Array
+
+▸ **setUint32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Uint32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:325](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L325)
+
+___
+
+### setStruct
+
+▸ **setStruct**\<`T`\>(`c`, `index`, `data`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `index` | `number` |
+| `data` | `any` |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStruct
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:334](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L334)
+
+___
+
+### setStructArray
+
+▸ **setStructArray**\<`T`\>(`c`, `dataList`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `dataList` | `any`[] |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStructArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:390](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L390)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.clean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:403](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L403)
+
+___
+
+### mapAsyncWrite
+
+▸ **mapAsyncWrite**(`mapAsyncArray`, `len`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mapAsyncArray` | `Float32Array` |
+| `len` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.mapAsyncWrite
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:413](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L413)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.destroy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:454](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L454)
+
+___
+
+### resizeBuffer
+
+▸ **resizeBuffer**(`size`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `size` | `number` |
+| `data?` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.resizeBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:511](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L511)
+
+___
+
+### readBuffer
+
+▸ **readBuffer**(): `Float32Array`
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:558](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L558)
+
+▸ **readBuffer**(`promise`): `Float32Array`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``false`` |
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:559](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L559)
+
+▸ **readBuffer**(`promise`): `Promise`\<`Float32Array`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``true`` |
+
+#### Returns
+
+`Promise`\<`Float32Array`\>
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:560](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L560)
+
+___
+
+### initDataUniform
+
+▸ **initDataUniform**(`uniformNodes`): `void`
+
+Initialize bound shader base variables
+The array of variables is automatically mapped through the parameters of the shader reflection
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `uniformNodes` | `UniformNode`[] |
+
+#### Returns
+
+`void`
+
+**`See`**
+
+UniformNode
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/MaterialDataUniformGPUBuffer.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/MaterialDataUniformGPUBuffer.ts#L22)
+
+___
+
+### onChange
+
+▸ **onChange**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/MaterialDataUniformGPUBuffer.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/MaterialDataUniformGPUBuffer.ts#L45)
+
+___
+
+### apply
+
+▸ **apply**(): `void`
+
+Reapply and write to buffer
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+GPUBufferBase.apply
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/MaterialDataUniformGPUBuffer.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/MaterialDataUniformGPUBuffer.ts#L53)
diff --git a/docs/api/classes/MaterialUtilities.md b/docs/api/classes/MaterialUtilities.md
new file mode 100644
index 00000000..cdef8e7c
--- /dev/null
+++ b/docs/api/classes/MaterialUtilities.md
@@ -0,0 +1,83 @@
+# Class: MaterialUtilities
+
+### Constructors
+
+- [constructor](MaterialUtilities.md#constructor)
+
+### Methods
+
+- [GetMaterial](MaterialUtilities.md#getmaterial)
+- [applyMaterialTexture](MaterialUtilities.md#applymaterialtexture)
+- [applyMaterialProperties](MaterialUtilities.md#applymaterialproperties)
+
+## Constructors
+
+### constructor
+
+• **new MaterialUtilities**(): [`MaterialUtilities`](MaterialUtilities.md)
+
+#### Returns
+
+[`MaterialUtilities`](MaterialUtilities.md)
+
+## Methods
+
+### GetMaterial
+
+▸ **GetMaterial**(`shaderName`): [`Material`](Material.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shaderName` | `string` |
+
+#### Returns
+
+[`Material`](Material.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/MaterialUtilities.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/MaterialUtilities.ts#L10)
+
+___
+
+### applyMaterialTexture
+
+▸ **applyMaterialTexture**(`mat`, `textures`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mat` | [`Material`](Material.md) |
+| `textures` | [`PrefabTextureData`](PrefabTextureData.md)[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/MaterialUtilities.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/MaterialUtilities.ts#L29)
+
+___
+
+### applyMaterialProperties
+
+▸ **applyMaterialProperties**(`mat`, `properties`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mat` | [`Material`](Material.md) |
+| `properties` | [`KV`](KV.md)[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/MaterialUtilities.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/MaterialUtilities.ts#L42)
diff --git a/docs/api/classes/MathUtil.md b/docs/api/classes/MathUtil.md
new file mode 100644
index 00000000..725d403c
--- /dev/null
+++ b/docs/api/classes/MathUtil.md
@@ -0,0 +1,337 @@
+# Class: MathUtil
+
+Built-in mathematical basic calculation factory function
+
+### Constructors
+
+- [constructor](MathUtil.md#constructor)
+
+### Methods
+
+- [clampf](MathUtil.md#clampf)
+- [normalizeAngle](MathUtil.md#normalizeangle)
+- [fract](MathUtil.md#fract)
+- [getRandDirXZ](MathUtil.md#getranddirxz)
+- [getRandDirXYZ](MathUtil.md#getranddirxyz)
+- [getCycleXYZ](MathUtil.md#getcyclexyz)
+- [angle](MathUtil.md#angle)
+- [angle\_360](MathUtil.md#angle_360)
+- [fromToRotation](MathUtil.md#fromtorotation)
+- [getEularDir\_yUp](MathUtil.md#geteulardir_yup)
+- [transformVector](MathUtil.md#transformvector)
+- [getRotationY](MathUtil.md#getrotationy)
+
+## Constructors
+
+### constructor
+
+• **new MathUtil**(): [`MathUtil`](MathUtil.md)
+
+#### Returns
+
+[`MathUtil`](MathUtil.md)
+
+## Methods
+
+### clampf
+
+▸ **clampf**(`value`, `min_inclusive`, `max_inclusive`): `number`
+
+Limit the value to a certain range
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `number` | Original value |
+| `min_inclusive` | `number` | minimum value |
+| `max_inclusive` | `number` | maximum value |
+
+#### Returns
+
+`number`
+
+Return the calculation result
+
+#### Defined in
+
+[src/math/MathUtil.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/math/MathUtil.ts#L107)
+
+___
+
+### normalizeAngle
+
+▸ **normalizeAngle**(`a`): `number`
+
+Normalize the Angle so that it is limited to the range [-180, 180]
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | `number` | Angle of input |
+
+#### Returns
+
+`number`
+
+Return the processing result
+
+#### Defined in
+
+[src/math/MathUtil.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/math/MathUtil.ts#L121)
+
+___
+
+### fract
+
+▸ **fract**(`v`): `number`
+
+Returns the fractional part of a number
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | `number` | input value |
+
+#### Returns
+
+`number`
+
+Return the result
+
+#### Defined in
+
+[src/math/MathUtil.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/math/MathUtil.ts#L136)
+
+___
+
+### getRandDirXZ
+
+▸ **getRandDirXZ**(`r`): `Object`
+
+Generate a random pair of x and z coordinates that fall within the radius of the circle
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `r` | `number` | radius |
+
+#### Returns
+
+`Object`
+
+The generated x, z results
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `z` | `number` |
+
+#### Defined in
+
+[src/math/MathUtil.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/math/MathUtil.ts#L145)
+
+___
+
+### getRandDirXYZ
+
+▸ **getRandDirXYZ**(`r`): [`Vector3`](Vector3.md)
+
+Generate a random pair of x, y, and z coordinates that fall within the radius of the sphere
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `r` | `number` | radius |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+The Vector3 vector formed by the generated x, y, and z coordinate values
+
+#### Defined in
+
+[src/math/MathUtil.ts:158](https://github.com/Orillusion/orillusion/blob/main/src/math/MathUtil.ts#L158)
+
+___
+
+### getCycleXYZ
+
+▸ **getCycleXYZ**(`r`): [`Vector3`](Vector3.md)
+
+According to the radius, generate a random pair of x, y, z coordinates that fall within the sphere and the y value is between [-r/2, r/2]
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `r` | `number` | radius |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+The Vector3 vector formed by the generated x, y, and z coordinate values
+
+#### Defined in
+
+[src/math/MathUtil.ts:172](https://github.com/Orillusion/orillusion/blob/main/src/math/MathUtil.ts#L172)
+
+___
+
+### angle
+
+▸ **angle**(`p1`, `p2`): `number`
+
+Calculate the Angle between two vectors
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `p1` | [`Vector3`](Vector3.md) | Vector 1 |
+| `p2` | [`Vector3`](Vector3.md) | Vector 2 |
+
+#### Returns
+
+`number`
+
+Return the calculation result
+
+#### Defined in
+
+[src/math/MathUtil.ts:187](https://github.com/Orillusion/orillusion/blob/main/src/math/MathUtil.ts#L187)
+
+___
+
+### angle\_360
+
+▸ **angle_360**(`from`, `to`): `number`
+
+Calculate the Angle between two vectors
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `from` | [`Vector3`](Vector3.md) | Vector 1 |
+| `to` | [`Vector3`](Vector3.md) | Vector 2 |
+
+#### Returns
+
+`number`
+
+The Angle between two vectors
+
+#### Defined in
+
+[src/math/MathUtil.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/math/MathUtil.ts#L203)
+
+___
+
+### fromToRotation
+
+▸ **fromToRotation**(`fromDirection`, `toDirection`, `target?`): [`Quaternion`](Quaternion.md)
+
+Calculate the quaternion from one direction to the other
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `fromDirection` | [`Vector3`](Vector3.md) | `undefined` | Initial direction |
+| `toDirection` | [`Vector3`](Vector3.md) | `undefined` | The transformed direction |
+| `target` | [`Quaternion`](Quaternion.md) | `null` | The calculated quaternion is null by default and the result is returned |
+
+#### Returns
+
+[`Quaternion`](Quaternion.md)
+
+Quaternion The calculated quaternion returns a new instance created if target is null
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/MathUtil.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/math/MathUtil.ts#L232)
+
+___
+
+### getEularDir\_yUp
+
+▸ **getEularDir_yUp**(`v`): [`Vector3`](Vector3.md)
+
+Get the Eular direction
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | `number` | input value |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Return the calculation result
+
+#### Defined in
+
+[src/math/MathUtil.ts:245](https://github.com/Orillusion/orillusion/blob/main/src/math/MathUtil.ts#L245)
+
+___
+
+### transformVector
+
+▸ **transformVector**(`matrix`, `vector`, `result?`): [`Vector3`](Vector3.md)
+
+Compute the vector transformation and assign the results to the input variables
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `matrix` | [`Matrix4`](Matrix4.md) | `undefined` | transformation matrix |
+| `vector` | [`Vector3`](Vector3.md) | `undefined` | Original vector |
+| `result` | [`Vector3`](Vector3.md) | `null` | output vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Returns the output vector
+
+#### Defined in
+
+[src/math/MathUtil.ts:259](https://github.com/Orillusion/orillusion/blob/main/src/math/MathUtil.ts#L259)
+
+___
+
+### getRotationY
+
+▸ **getRotationY**(`v`): `number`
+
+The rotation Angle around the Y-axis is obtained from the input vector
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) | input vector |
+
+#### Returns
+
+`number`
+
+Return the calculation result
+
+#### Defined in
+
+[src/math/MathUtil.ts:219](https://github.com/Orillusion/orillusion/blob/main/src/math/MathUtil.ts#L219)
diff --git a/docs/api/classes/Matrix3.md b/docs/api/classes/Matrix3.md
new file mode 100644
index 00000000..30d2a0f6
--- /dev/null
+++ b/docs/api/classes/Matrix3.md
@@ -0,0 +1,566 @@
+# Class: Matrix3
+
+3*3 Matrix
+
+### Constructors
+
+- [constructor](Matrix3.md#constructor)
+
+### Properties
+
+- [a](Matrix3.md#a)
+- [b](Matrix3.md#b)
+- [c](Matrix3.md#c)
+- [d](Matrix3.md#d)
+- [tx](Matrix3.md#tx)
+- [ty](Matrix3.md#ty)
+
+### Methods
+
+- [clone](Matrix3.md#clone)
+- [concat](Matrix3.md#concat)
+- [copyFrom](Matrix3.md#copyfrom)
+- [identity](Matrix3.md#identity)
+- [invert](Matrix3.md#invert)
+- [rotate](Matrix3.md#rotate)
+- [scale](Matrix3.md#scale)
+- [setTo](Matrix3.md#setto)
+- [transformPoint](Matrix3.md#transformpoint)
+- [setTranslate](Matrix3.md#settranslate)
+- [translate](Matrix3.md#translate)
+- [mul](Matrix3.md#mul)
+- [equals](Matrix3.md#equals)
+- [prepend](Matrix3.md#prepend)
+- [append](Matrix3.md#append)
+- [deltaTransformPoint](Matrix3.md#deltatransformpoint)
+- [toString](Matrix3.md#tostring)
+- [createBox](Matrix3.md#createbox)
+- [createGradientBox](Matrix3.md#creategradientbox)
+
+## Constructors
+
+### constructor
+
+• **new Matrix3**(`a?`, `b?`, `c?`, `d?`, `tx?`, `ty?`): [`Matrix3`](Matrix3.md)
+
+Create a Matrix3
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | `number` | `1` | The width of x |
+| `b` | `number` | `0` | The slope of y |
+| `c` | `number` | `0` | The slope of x |
+| `d` | `number` | `1` | The height of y |
+| `tx` | `number` | `0` | The position of the x coordinate |
+| `ty` | `number` | `0` | The position of the y coordinate |
+
+#### Returns
+
+[`Matrix3`](Matrix3.md)
+
+#### Defined in
+
+[src/math/Matrix3.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L67)
+
+## Properties
+
+### a
+
+• **a**: `number`
+
+The width of x
+
+#### Defined in
+
+[src/math/Matrix3.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L31)
+
+___
+
+### b
+
+• **b**: `number`
+
+The slope of y
+
+#### Defined in
+
+[src/math/Matrix3.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L36)
+
+___
+
+### c
+
+• **c**: `number`
+
+The slope of x
+
+#### Defined in
+
+[src/math/Matrix3.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L41)
+
+___
+
+### d
+
+• **d**: `number`
+
+The height of y
+
+#### Defined in
+
+[src/math/Matrix3.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L46)
+
+___
+
+### tx
+
+• **tx**: `number`
+
+The position of the x coordinate
+
+#### Defined in
+
+[src/math/Matrix3.ts:51](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L51)
+
+___
+
+### ty
+
+• **ty**: `number`
+
+The position of the y coordinate
+
+#### Defined in
+
+[src/math/Matrix3.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L56)
+
+## Methods
+
+### clone
+
+▸ **clone**(): [`Matrix3`](Matrix3.md)
+
+Clone an Matrix3 object
+
+#### Returns
+
+[`Matrix3`](Matrix3.md)
+
+New Matrix3 object
+
+#### Defined in
+
+[src/math/Matrix3.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L80)
+
+___
+
+### concat
+
+▸ **concat**(`matrix`): `void`
+
+Merges the current matrix with the target matrix
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `matrix` | [`Matrix3`](Matrix3.md) | target matrix |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix3.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L88)
+
+___
+
+### copyFrom
+
+▸ **copyFrom**(`other`): [`Matrix3`](Matrix3.md)
+
+The current matrix value is overwritten by the target matrix value
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `other` | [`Matrix3`](Matrix3.md) | target matrix value |
+
+#### Returns
+
+[`Matrix3`](Matrix3.md)
+
+current matrix
+
+#### Defined in
+
+[src/math/Matrix3.ts:105](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L105)
+
+___
+
+### identity
+
+▸ **identity**(): `this`
+
+Reset to the identity matrix
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/Matrix3.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L118)
+
+___
+
+### invert
+
+▸ **invert**(): `void`
+
+Invert this matrix
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix3.ts:127](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L127)
+
+___
+
+### rotate
+
+▸ **rotate**(`angle`): `void`
+
+Rotate according to Angle
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `angle` | `number` | rotation angle |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix3.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L135)
+
+___
+
+### scale
+
+▸ **scale**(`sx`, `sy`): `void`
+
+Scale by offset
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `sx` | `number` | x axis scaling |
+| `sy` | `number` | y axis scaling |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix3.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L161)
+
+___
+
+### setTo
+
+▸ **setTo**(`a`, `b`, `c`, `d`, `tx`, `ty`): [`Matrix3`](Matrix3.md)
+
+Reset the matrix value
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | `number` | Matrix element a |
+| `b` | `number` | Matrix element b |
+| `c` | `number` | Matrix element c |
+| `d` | `number` | Matrix element d |
+| `tx` | `number` | Matrix element tx |
+| `ty` | `number` | Matrix element ty |
+
+#### Returns
+
+[`Matrix3`](Matrix3.md)
+
+The modified matrix
+
+#### Defined in
+
+[src/math/Matrix3.ts:184](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L184)
+
+___
+
+### transformPoint
+
+▸ **transformPoint**(`pointX`, `pointY`, `resultPoint?`): [`Vector3`](Vector3.md)
+
+transformation of coordinates
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pointX` | `number` | x coordinate |
+| `pointY` | `number` | y coordinate |
+| `resultPoint?` | [`Vector3`](Vector3.md) | Vector of results |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector of results
+
+#### Defined in
+
+[src/math/Matrix3.ts:201](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L201)
+
+___
+
+### setTranslate
+
+▸ **setTranslate**(`x`, `y`): `void`
+
+translation
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `x` | `number` | x coordinate |
+| `y` | `number` | y coordinate |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix3.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L216)
+
+___
+
+### translate
+
+▸ **translate**(`dx`, `dy`): `void`
+
+Translates the specified offset
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `dx` | `number` | The x-coordinate offset |
+| `dy` | `number` | The y-coordinate offset |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix3.ts:226](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L226)
+
+___
+
+### mul
+
+▸ **mul**(`t`): `void`
+
+multiply
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `t` | [`Matrix3`](Matrix3.md) | target matrix |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix3.ts:235](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L235)
+
+___
+
+### equals
+
+▸ **equals**(`other`): `boolean`
+
+Is equal to the given matrix
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `other` | [`Matrix3`](Matrix3.md) | matrix |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/Matrix3.ts:273](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L273)
+
+___
+
+### prepend
+
+▸ **prepend**(`a`, `b`, `c`, `d`, `tx`, `ty`): [`Matrix3`](Matrix3.md)
+
+get a front matrix by multiplication
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | `number` | Multiply by a |
+| `b` | `number` | Multiply by b |
+| `c` | `number` | Multiply by c |
+| `d` | `number` | Multiply by d |
+| `tx` | `number` | Multiply by tx |
+| `ty` | `number` | Multiply by ty |
+
+#### Returns
+
+[`Matrix3`](Matrix3.md)
+
+prematrix
+
+#### Defined in
+
+[src/math/Matrix3.ts:287](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L287)
+
+___
+
+### append
+
+▸ **append**(`mat`): [`Matrix3`](Matrix3.md)
+
+Obtain a post-multiplication matrix by multiplication.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `mat` | [`Matrix3`](Matrix3.md) | Matrix |
+
+#### Returns
+
+[`Matrix3`](Matrix3.md)
+
+result
+
+#### Defined in
+
+[src/math/Matrix3.ts:307](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L307)
+
+___
+
+### deltaTransformPoint
+
+▸ **deltaTransformPoint**(`point`): [`Vector3`](Vector3.md)
+
+Use the given point for the transformation, ignoring the x, y coordinates
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `point` | [`Vector3`](Vector3.md) | A given point |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Matrix3.ts:329](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L329)
+
+___
+
+### toString
+
+▸ **toString**(): `string`
+
+Converts the current matrix to string form
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/math/Matrix3.ts:340](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L340)
+
+___
+
+### createBox
+
+▸ **createBox**(`scaleX`, `scaleY`, `rotation?`, `tx?`, `ty?`): `void`
+
+Set the matrix scaling, rotation, and conversion parameters
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `scaleX` | `number` | `undefined` | x axis scaling |
+| `scaleY` | `number` | `undefined` | y axis scaling |
+| `rotation` | `number` | `0` | rotation |
+| `tx` | `number` | `0` | x-coordinate |
+| `ty` | `number` | `0` | y-coordinate |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix3.ts:352](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L352)
+
+___
+
+### createGradientBox
+
+▸ **createGradientBox**(`width`, `height`, `rotation?`, `tx?`, `ty?`): `void`
+
+Create a gradient box
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `width` | `number` | `undefined` | width |
+| `height` | `number` | `undefined` | height |
+| `rotation` | `number` | `0` | rotation |
+| `tx` | `number` | `0` | x-coordinate |
+| `ty` | `number` | `0` | y-coordinate |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix3.ts:380](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix3.ts#L380)
diff --git a/docs/api/classes/Matrix4.md b/docs/api/classes/Matrix4.md
new file mode 100644
index 00000000..09387b28
--- /dev/null
+++ b/docs/api/classes/Matrix4.md
@@ -0,0 +1,2026 @@
+# Class: Matrix4
+
+math 4*4 matrix
+
+### Constructors
+
+- [constructor](Matrix4.md#constructor)
+
+### Properties
+
+- [blockBytes](Matrix4.md#blockbytes)
+- [allocCount](Matrix4.md#alloccount)
+- [allocOnceCount](Matrix4.md#alloconcecount)
+- [maxCount](Matrix4.md#maxcount)
+- [useCount](Matrix4.md#usecount)
+- [dynamicMatrixBytes](Matrix4.md#dynamicmatrixbytes)
+- [dynamicGlobalMatrixRef](Matrix4.md#dynamicglobalmatrixref)
+- [help\_matrix\_0](Matrix4.md#help_matrix_0)
+- [help\_matrix\_1](Matrix4.md#help_matrix_1)
+- [help\_matrix\_2](Matrix4.md#help_matrix_2)
+- [helpMatrix](Matrix4.md#helpmatrix)
+- [helpMatrix2](Matrix4.md#helpmatrix2)
+- [index](Matrix4.md#index)
+- [rawData](Matrix4.md#rawdata)
+
+### Accessors
+
+- [determinant](Matrix4.md#determinant)
+- [position](Matrix4.md#position)
+- [scale](Matrix4.md#scale)
+
+### Methods
+
+- [allocMatrix](Matrix4.md#allocmatrix)
+- [fromToRotation](Matrix4.md#fromtorotation)
+- [getAxisRotation](Matrix4.md#getaxisrotation)
+- [sanitizeEuler](Matrix4.md#sanitizeeuler)
+- [makePositive](Matrix4.md#makepositive)
+- [matrixToEuler](Matrix4.md#matrixtoeuler)
+- [matrixMultiply](Matrix4.md#matrixmultiply)
+- [matrixAppend](Matrix4.md#matrixappend)
+- [matrixRotateY](Matrix4.md#matrixrotatey)
+- [matrixRotate](Matrix4.md#matrixrotate)
+- [lookAt](Matrix4.md#lookat)
+- [multiply](Matrix4.md#multiply)
+- [multiplyMatrices](Matrix4.md#multiplymatrices)
+- [multiplyPoint3](Matrix4.md#multiplypoint3)
+- [multiplyVector4](Matrix4.md#multiplyvector4)
+- [transformVector4](Matrix4.md#transformvector4)
+- [perspectiveMultiplyPoint3](Matrix4.md#perspectivemultiplypoint3)
+- [perspective](Matrix4.md#perspective)
+- [perspective3](Matrix4.md#perspective3)
+- [frustum](Matrix4.md#frustum)
+- [ortho](Matrix4.md#ortho)
+- [orthoZO](Matrix4.md#orthozo)
+- [orthoOffCenter](Matrix4.md#orthooffcenter)
+- [transformDir](Matrix4.md#transformdir)
+- [append](Matrix4.md#append)
+- [add](Matrix4.md#add)
+- [sub](Matrix4.md#sub)
+- [mult](Matrix4.md#mult)
+- [appendRotation](Matrix4.md#appendrotation)
+- [createByRotation](Matrix4.md#createbyrotation)
+- [appendScale](Matrix4.md#appendscale)
+- [createByScale](Matrix4.md#createbyscale)
+- [appendTranslation](Matrix4.md#appendtranslation)
+- [clone](Matrix4.md#clone)
+- [copyRowFrom](Matrix4.md#copyrowfrom)
+- [copyRowTo](Matrix4.md#copyrowto)
+- [copyFrom](Matrix4.md#copyfrom)
+- [copyRawDataTo](Matrix4.md#copyrawdatato)
+- [copyColFrom](Matrix4.md#copycolfrom)
+- [copyColTo](Matrix4.md#copycolto)
+- [copyToMatrix3D](Matrix4.md#copytomatrix3d)
+- [makeRotationFromQuaternion](Matrix4.md#makerotationfromquaternion)
+- [decompose](Matrix4.md#decompose)
+- [getEuler](Matrix4.md#geteuler)
+- [compose](Matrix4.md#compose)
+- [deltaTransformVector](Matrix4.md#deltatransformvector)
+- [identity](Matrix4.md#identity)
+- [fill](Matrix4.md#fill)
+- [invers33](Matrix4.md#invers33)
+- [invert](Matrix4.md#invert)
+- [transformPoint](Matrix4.md#transformpoint)
+- [transformVector](Matrix4.md#transformvector)
+- [transpose](Matrix4.md#transpose)
+- [getPosition](Matrix4.md#getposition)
+- [toString](Matrix4.md#tostring)
+- [lerp](Matrix4.md#lerp)
+- [get](Matrix4.md#get)
+- [set](Matrix4.md#set)
+- [getMaxScaleOnAxis](Matrix4.md#getmaxscaleonaxis)
+- [translate](Matrix4.md#translate)
+- [setTRInverse](Matrix4.md#settrinverse)
+- [setScale](Matrix4.md#setscale)
+- [makeBasis](Matrix4.md#makebasis)
+- [makeRotationAxis](Matrix4.md#makerotationaxis)
+
+## Constructors
+
+### constructor
+
+• **new Matrix4**(`doMatrix?`): [`Matrix4`](Matrix4.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `doMatrix` | `boolean` | `false` |
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/math/Matrix4.ts:321](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L321)
+
+## Properties
+
+### blockBytes
+
+▪ `Static` **blockBytes**: `number`
+
+matrix44 bytes block size
+
+#### Defined in
+
+[src/math/Matrix4.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L17)
+
+___
+
+### allocCount
+
+▪ `Static` **allocCount**: `number` = `1000`
+
+matrix do total count
+
+#### Defined in
+
+[src/math/Matrix4.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L27)
+
+___
+
+### allocOnceCount
+
+▪ `Static` **allocOnceCount**: `number` = `1000`
+
+quantity allocated for each capacity expansion
+
+#### Defined in
+
+[src/math/Matrix4.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L32)
+
+___
+
+### maxCount
+
+▪ `Static` **maxCount**: `number`
+
+matrix has max limit count
+
+#### Defined in
+
+[src/math/Matrix4.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L37)
+
+___
+
+### useCount
+
+▪ `Static` **useCount**: `number` = `0`
+
+current matrix use count
+
+#### Defined in
+
+[src/math/Matrix4.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L42)
+
+___
+
+### dynamicMatrixBytes
+
+▪ `Static` **dynamicMatrixBytes**: `Float32Array`
+
+matrix do use share bytesArray
+
+#### Defined in
+
+[src/math/Matrix4.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L58)
+
+___
+
+### dynamicGlobalMatrixRef
+
+▪ `Static` **dynamicGlobalMatrixRef**: [`Matrix4`](Matrix4.md)[]
+
+cache all use do matrix
+
+#### Defined in
+
+[src/math/Matrix4.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L63)
+
+___
+
+### help\_matrix\_0
+
+▪ `Static` **help\_matrix\_0**: [`Matrix4`](Matrix4.md)
+
+help fix global matrix 0
+
+#### Defined in
+
+[src/math/Matrix4.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L73)
+
+___
+
+### help\_matrix\_1
+
+▪ `Static` **help\_matrix\_1**: [`Matrix4`](Matrix4.md)
+
+help fix global matrix 1
+
+#### Defined in
+
+[src/math/Matrix4.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L78)
+
+___
+
+### help\_matrix\_2
+
+▪ `Static` **help\_matrix\_2**: [`Matrix4`](Matrix4.md)
+
+help fix global matrix 2
+
+#### Defined in
+
+[src/math/Matrix4.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L83)
+
+___
+
+### helpMatrix
+
+▪ `Static` **helpMatrix**: [`Matrix4`](Matrix4.md)
+
+help fix global matrix 3
+
+#### Defined in
+
+[src/math/Matrix4.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L88)
+
+___
+
+### helpMatrix2
+
+▪ `Static` **helpMatrix2**: [`Matrix4`](Matrix4.md)
+
+help fix global matrix 4
+
+#### Defined in
+
+[src/math/Matrix4.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L93)
+
+___
+
+### index
+
+• **index**: `number` = `0`
+
+matrix index at global matrix list
+
+#### Defined in
+
+[src/math/Matrix4.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L104)
+
+___
+
+### rawData
+
+• **rawData**: `Float32Array`
+
+matrix raw data format Float32Array
+
+**`See`**
+
+Float32Array
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L116)
+
+## Accessors
+
+### determinant
+
+• `get` **determinant**(): `number`
+
+Returns the matrix determinant
+
+#### Returns
+
+`number`
+
+number determinant
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1887](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1887)
+
+___
+
+### position
+
+• `get` **position**(): [`Vector3`](Vector3.md)
+
+Return translation
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3 Position of translation
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1918](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1918)
+
+• `set` **position**(`value`): `void`
+
+Set Position of translation
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) | Position of translation |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1928](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1928)
+
+___
+
+### scale
+
+• `get` **scale**(): [`Vector3`](Vector3.md)
+
+get Component of scale
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3 scale
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1941](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1941)
+
+• `set` **scale**(`value`): `void`
+
+Set component of scale
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix4.ts:1949](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1949)
+
+## Methods
+
+### allocMatrix
+
+▸ **allocMatrix**(`allocCount`): `void`
+
+alloc web runtime cpu memory totalCount * 4(float) * 4
+init matrix memory by totalCount * 4(float) * 4
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `allocCount` | `number` |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:126](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L126)
+
+___
+
+### fromToRotation
+
+▸ **fromToRotation**(`fromDirection`, `toDirection`, `target?`): [`Matrix4`](Matrix4.md)
+
+create matrix from two direction
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `fromDirection` | [`Vector3`](Vector3.md) | first direction |
+| `toDirection` | [`Vector3`](Vector3.md) | second direction |
+| `target?` | [`Matrix4`](Matrix4.md) | ref matrix |
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+return new one matrix
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L156)
+
+___
+
+### getAxisRotation
+
+▸ **getAxisRotation**(`x`, `y`, `z`, `degrees`): [`Matrix4`](Matrix4.md)
+
+Generate a matrix (rotate degrees with x,y,z as the center axis)
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `x` | `number` | x on the central axis |
+| `y` | `number` | y on the central axis |
+| `z` | `number` | z on the central axis |
+| `degrees` | `number` | rotation angle |
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+Matrix4 result
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:171](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L171)
+
+___
+
+### sanitizeEuler
+
+▸ **sanitizeEuler**(`euler`): `void`
+
+Arrange the Euler values
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `euler` | [`Vector3`](Vector3.md) | Euler values |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix4.ts:205](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L205)
+
+___
+
+### makePositive
+
+▸ **makePositive**(`euler`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `euler` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix4.ts:213](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L213)
+
+___
+
+### matrixToEuler
+
+▸ **matrixToEuler**(`matrix`, `v`): `boolean`
+
+Convert the matrix to Euler angles
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `matrix` | [`Matrix4`](Matrix4.md) | Matrix to be transformed |
+| `v` | [`Vector3`](Vector3.md) | euler angle |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/Matrix4.ts:245](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L245)
+
+___
+
+### matrixMultiply
+
+▸ **matrixMultiply**(`aMat`, `bMat`, `target_Mat`): `void`
+
+Multiply the world matrix, specifying parameters and results according to the index
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `aMat` | [`Matrix4`](Matrix4.md) | Matrix to be multiplied (please specify index) |
+| `bMat` | [`Matrix4`](Matrix4.md) | Matrix to be multiplied (please specify index) |
+| `target_Mat` | [`Matrix4`](Matrix4.md) | Result matrix (get results based on index) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix4.ts:282](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L282)
+
+___
+
+### matrixAppend
+
+▸ **matrixAppend**(`aMat`, `bMat`, `target_Mat`): `void`
+
+World matrix extension, according to the index to specify parameters and results
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `aMat` | [`Matrix4`](Matrix4.md) | Matrix to be multiplied (please specify index) |
+| `bMat` | [`Matrix4`](Matrix4.md) | Matrix to be multiplied (please specify index) |
+| `target_Mat` | [`Matrix4`](Matrix4.md) | Result matrix (get results based on index) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix4.ts:292](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L292)
+
+___
+
+### matrixRotateY
+
+▸ **matrixRotateY**(`rad`, `target_Mat`): `void`
+
+The Y-axis is rotated between the world matrix, and the parameters and results are specified according to the index
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `rad` | `number` | - |
+| `target_Mat` | [`Matrix4`](Matrix4.md) | Result matrix (get results based on index) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix4.ts:302](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L302)
+
+___
+
+### matrixRotate
+
+▸ **matrixRotate**(`rad`, `axis`, `target_Mat`): `void`
+
+Rotate the world matrix, specifying parameters and results according to the index
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `rad` | `number` | - |
+| `axis` | [`Vector3`](Vector3.md) | - |
+| `target_Mat` | [`Matrix4`](Matrix4.md) | Result matrix (get results based on index) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix4.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L312)
+
+___
+
+### lookAt
+
+▸ **lookAt**(`eye`, `at`, `up?`): `void`
+
+current matrix move position and rotation to target
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `eye` | [`Vector3`](Vector3.md) | `undefined` | eye position |
+| `at` | [`Vector3`](Vector3.md) | `undefined` | target position |
+| `up` | [`Vector3`](Vector3.md) | `Vector3.Y_AXIS` | normalize axis way |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:352](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L352)
+
+___
+
+### multiply
+
+▸ **multiply**(`mat4`): `void`
+
+matrix multiply
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `mat4` | [`Matrix4`](Matrix4.md) | multiply target |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:403](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L403)
+
+___
+
+### multiplyMatrices
+
+▸ **multiplyMatrices**(`a`, `b`): [`Matrix4`](Matrix4.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `a` | [`Matrix4`](Matrix4.md) |
+| `b` | [`Matrix4`](Matrix4.md) |
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/math/Matrix4.ts:452](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L452)
+
+___
+
+### multiplyPoint3
+
+▸ **multiplyPoint3**(`v`, `output?`): [`Vector3`](Vector3.md)
+
+convert a vector3 to this matrix space
+if output not set , return a new one
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) | target vector3 |
+| `output?` | [`Vector3`](Vector3.md) | save target |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+save target
+
+#### Defined in
+
+[src/math/Matrix4.ts:499](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L499)
+
+___
+
+### multiplyVector4
+
+▸ **multiplyVector4**(`a`, `out?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) |
+| `out?` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Matrix4.ts:508](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L508)
+
+___
+
+### transformVector4
+
+▸ **transformVector4**(`v`, `target?`): [`Vector3`](Vector3.md)
+
+convert a vector3 to this matrix space
+if output not set , return a new one
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) | convert target |
+| `target?` | [`Vector3`](Vector3.md) | ref one vector3 |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:531](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L531)
+
+___
+
+### perspectiveMultiplyPoint3
+
+▸ **perspectiveMultiplyPoint3**(`v`, `output`): `boolean`
+
+Convert projection coordinates to 3D coordinates
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) | vector3 target |
+| `output` | [`Vector3`](Vector3.md) | ref vector3d |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/Matrix4.ts:555](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L555)
+
+___
+
+### perspective
+
+▸ **perspective**(`fov`, `aspect`, `zn`, `zf`): `void`
+
+set matrix perspective
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `fov` | `number` | perspective angle 0 ~ 90 |
+| `aspect` | `number` | aspect ratio |
+| `zn` | `number` | near plane |
+| `zf` | `number` | far plane |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:585](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L585)
+
+___
+
+### perspective3
+
+▸ **perspective3**(`fov`, `aspect`, `near`, `far`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `fov` | `number` |
+| `aspect` | `number` |
+| `near` | `number` |
+| `far` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix4.ts:612](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L612)
+
+___
+
+### frustum
+
+▸ **frustum**(`l`, `r`, `b`, `t`, `n`, `f`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `l` | `number` |
+| `r` | `number` |
+| `b` | `number` |
+| `t` | `number` |
+| `n` | `number` |
+| `f` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix4.ts:618](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L618)
+
+___
+
+### ortho
+
+▸ **ortho**(`w`, `h`, `zn`, `zf`): [`Matrix4`](Matrix4.md)
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `w` | `number` | screen width |
+| `h` | `number` | screen height |
+| `zn` | `number` | camera near plane |
+| `zf` | `number` | camera far plane |
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+this matrix
+
+**`Version`**
+
+Orillusion3D 0.5.1
+set matrix orthogonal projection
+
+#### Defined in
+
+[src/math/Matrix4.ts:651](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L651)
+
+___
+
+### orthoZO
+
+▸ **orthoZO**(`left`, `right`, `bottom`, `top`, `near`, `far`): [`Matrix4`](Matrix4.md)
+
+set matrix orthogonal projection by view side
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `left` | `number` | orthogonal view left |
+| `right` | `number` | orthogonal view right |
+| `bottom` | `number` | orthogonal view bottom |
+| `top` | `number` | orthogonal view top |
+| `near` | `number` | camera near plane |
+| `far` | `number` | camera far plane |
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+this matrix
+
+#### Defined in
+
+[src/math/Matrix4.ts:687](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L687)
+
+___
+
+### orthoOffCenter
+
+▸ **orthoOffCenter**(`l`, `r`, `b`, `t`, `zn`, `zf`): `void`
+
+set matrix orthogonal projection by view center
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `l` | `number` |
+| `r` | `number` |
+| `b` | `number` |
+| `t` | `number` |
+| `zn` | `number` |
+| `zf` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix4.ts:714](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L714)
+
+___
+
+### transformDir
+
+▸ **transformDir**(`fromDirection`, `toDirection`): `this`
+
+set matrix from two direction
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `fromDirection` | [`Vector3`](Vector3.md) | first direction |
+| `toDirection` | [`Vector3`](Vector3.md) | second direction |
+
+#### Returns
+
+`this`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:744](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L744)
+
+___
+
+### append
+
+▸ **append**(`lhs`): `void`
+
+multiply matrix a b
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `lhs` | [`Matrix4`](Matrix4.md) | target matrix |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:867](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L867)
+
+___
+
+### add
+
+▸ **add**(`lhs`): [`Matrix4`](Matrix4.md)
+
+matrix a add matrix b
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `lhs` | [`Matrix4`](Matrix4.md) | target matrix. |
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+Matrix4 result.
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:913](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L913)
+
+___
+
+### sub
+
+▸ **sub**(`lhs`): [`Matrix4`](Matrix4.md)
+
+matrix a sub matrix b
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `lhs` | [`Matrix4`](Matrix4.md) | target matrix b. |
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+Matrix4 .
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:976](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L976)
+
+___
+
+### mult
+
+▸ **mult**(`v`): [`Matrix4`](Matrix4.md)
+
+Matrix times components.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | `number` | This matrix is going to be multiplied by this value |
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+Matrix4 Returns a multiplicative result matrix.
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1040](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1040)
+
+___
+
+### appendRotation
+
+▸ **appendRotation**(`degrees`, `axis`): `void`
+
+Add a direction Angle rotation to the current matrix (the matrix created by rotating degrees according to axis)
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `degrees` | `number` | Angle of rotation. |
+| `axis` | [`Vector3`](Vector3.md) | Angle of rotation around axis axis |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1087](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1087)
+
+___
+
+### createByRotation
+
+▸ **createByRotation**(`degrees`, `axis`): `this`
+
+Create a matrix based on the axis and rotation Angle (the matrix created by rotating the degrees according to the axis)
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `degrees` | `number` | Angle of rotation. |
+| `axis` | [`Vector3`](Vector3.md) | Rotation Angle around axis axis. Axis needs to be specified as the orientation of an axis between x/y/z |
+
+#### Returns
+
+`this`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1098](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1098)
+
+___
+
+### appendScale
+
+▸ **appendScale**(`xScale`, `yScale`, `zScale`): `void`
+
+Append the triaxial scaling value
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `xScale` | `number` | x axis scaling |
+| `yScale` | `number` | y axis scaling |
+| `zScale` | `number` | z axis scaling |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1175](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1175)
+
+___
+
+### createByScale
+
+▸ **createByScale**(`xScale`, `yScale`, `zScale`): `void`
+
+A scaling matrix is generated and other properties are reset
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `xScale` | `number` | x axis scaling |
+| `yScale` | `number` | y axis scaling |
+| `zScale` | `number` | z axis scaling |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1187](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1187)
+
+___
+
+### appendTranslation
+
+▸ **appendTranslation**(`x`, `y`, `z`): `void`
+
+Plus a translation matrix
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `x` | `number` | x axis scaling |
+| `y` | `number` | y axis scaling |
+| `z` | `number` | z axis scaling |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1214](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1214)
+
+___
+
+### clone
+
+▸ **clone**(): [`Matrix4`](Matrix4.md)
+
+Returns a clone of the current matrix
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+Matrix4 The cloned matrix
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1226](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1226)
+
+___
+
+### copyRowFrom
+
+▸ **copyRowFrom**(`row`, `Vector3`): `void`
+
+Assigns a value to one row of the current matrix
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `row` | `number` | Row of copy |
+| `Vector3` | [`Vector3`](Vector3.md) | Value of copy |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1238](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1238)
+
+___
+
+### copyRowTo
+
+▸ **copyRowTo**(`row`, `Vector3`): `void`
+
+One of the rows in the copy matrix stores the values in Vector3.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `row` | `number` | Row of copy |
+| `Vector3` | [`Vector3`](Vector3.md) | Copy the storage target |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1276](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1276)
+
+___
+
+### copyFrom
+
+▸ **copyFrom**(`sourceMatrix3D`): [`Matrix4`](Matrix4.md)
+
+Assigns the value of a matrix to the current matrix.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `sourceMatrix3D` | [`Matrix4`](Matrix4.md) | source Matrix |
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+Returns the current matrix
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1314](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1314)
+
+___
+
+### copyRawDataTo
+
+▸ **copyRawDataTo**(`vector`, `index?`, `transpose?`): `void`
+
+CoMath.PIes the value of the current matrix to a float array.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `vector` | `Float32Array` | `undefined` | The target array. |
+| `index` | `number` | `0` | copy from the index of the array. |
+| `transpose` | `boolean` | `false` | Whether to transpose the current matrix. |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1342](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1342)
+
+___
+
+### copyColFrom
+
+▸ **copyColFrom**(`col`, `Vector3`): `void`
+
+Assigns a value to a column of the current matrix
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `col` | `number` | column |
+| `Vector3` | [`Vector3`](Vector3.md) | Source of value |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1368](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1368)
+
+___
+
+### copyColTo
+
+▸ **copyColTo**(`col`, `Vector3`): `void`
+
+Copy a column of the current matrix
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `col` | `number` | column |
+| `Vector3` | [`Vector3`](Vector3.md) | Target of copy |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1406](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1406)
+
+___
+
+### copyToMatrix3D
+
+▸ **copyToMatrix3D**(`dest`): `void`
+
+Copy the current matrix
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `dest` | [`Matrix4`](Matrix4.md) | Target of copy |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1443](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1443)
+
+___
+
+### makeRotationFromQuaternion
+
+▸ **makeRotationFromQuaternion**(`quaternion`): [`Matrix4`](Matrix4.md)
+
+Calculate rotation matrix
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `quaternion` | [`Quaternion`](Quaternion.md) | Rotate the quaternion |
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/math/Matrix4.ts:1452](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1452)
+
+___
+
+### decompose
+
+▸ **decompose**(`orientationStyle?`, `target?`): [`Vector3`](Vector3.md)[]
+
+Decompose the current matrix
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `orientationStyle` | `string` | `'eulerAngles'` | The default decomposition type is Orientation3D.EULER_ANGLES |
+| `target?` | [`Vector3`](Vector3.md)[] | `undefined` | - |
+
+#### Returns
+
+[`Vector3`](Vector3.md)[]
+
+Vector3[3] pos rot scale
+
+**`See`**
+
+ - Orientation3D.AXIS_ANGLE
+ - Orientation3D.EULER_ANGLES
+ - Orientation3D.QUATERNION
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1467](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1467)
+
+___
+
+### getEuler
+
+▸ **getEuler**(`target`, `quaternion`, `isDegree?`, `order?`): [`Vector3`](Vector3.md)
+
+Get the Euler vector
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `target` | [`Vector3`](Vector3.md) | `undefined` | Vector of results |
+| `quaternion` | [`Quaternion`](Quaternion.md) | `undefined` | Rotate the quaternion |
+| `isDegree` | `boolean` | `true` | Whether to convert to Angle |
+| `order?` | `string` | `undefined` | convert order |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Matrix4.ts:1595](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1595)
+
+___
+
+### compose
+
+▸ **compose**(`position`, `quaternion`, `scale`): [`Matrix4`](Matrix4.md)
+
+Calculate the combined matrix of displacement, rotation and scaling
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `position` | [`Vector3`](Vector3.md) | translation |
+| `quaternion` | [`Quaternion`](Quaternion.md) | rotation |
+| `scale` | [`Vector3`](Vector3.md) | scale |
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/math/Matrix4.ts:1608](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1608)
+
+___
+
+### deltaTransformVector
+
+▸ **deltaTransformVector**(`v`, `target?`): [`Vector3`](Vector3.md)
+
+The current matrix transforms a vector
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) | Vector to transform |
+| `target?` | [`Vector3`](Vector3.md) | The default is null and if the current argument is null then a new Vector3 will be returned |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3 The transformed vector
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1662](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1662)
+
+___
+
+### identity
+
+▸ **identity**(): [`Matrix4`](Matrix4.md)
+
+Unifies the current matrix
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1681](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1681)
+
+___
+
+### fill
+
+▸ **fill**(`value`): `void`
+
+Fill the current matrix
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `number` | The filled value |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1708](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1708)
+
+___
+
+### invers33
+
+▸ **invers33**(): `void`
+
+Invert the current matrix
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1732](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1732)
+
+___
+
+### invert
+
+▸ **invert**(): `boolean`
+
+Invert the current matrix
+
+#### Returns
+
+`boolean`
+
+boolean Whether can invert it
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1769](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1769)
+
+___
+
+### transformPoint
+
+▸ **transformPoint**(`v`, `target?`): [`Vector3`](Vector3.md)
+
+Converts the current coordinates to the world coordinates
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) | Current coordinates |
+| `target?` | [`Vector3`](Vector3.md) | world coordinate |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+world coordinate
+
+#### Defined in
+
+[src/math/Matrix4.ts:1819](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1819)
+
+___
+
+### transformVector
+
+▸ **transformVector**(`v`, `target?`): [`Vector3`](Vector3.md)
+
+Transforming a 3D vector with the current matrix does not deal with displacement
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) | Vector of transformation |
+| `target?` | [`Vector3`](Vector3.md) | If the current argument is null then a new Vector3 will be returned |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3 The transformed vector
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1841](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1841)
+
+___
+
+### transpose
+
+▸ **transpose**(): `void`
+
+The current matrix transpose
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1861](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1861)
+
+___
+
+### getPosition
+
+▸ **getPosition**(`out?`): [`Vector3`](Vector3.md)
+
+Return matrix displacement
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `out?` | [`Vector3`](Vector3.md) | Position of translation |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Position of translation
+
+#### Defined in
+
+[src/math/Matrix4.ts:1904](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1904)
+
+___
+
+### toString
+
+▸ **toString**(): `string`
+
+Returns the value of the matrix as a string
+
+#### Returns
+
+`string`
+
+string
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:1966](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L1966)
+
+___
+
+### lerp
+
+▸ **lerp**(`m0`, `m1`, `t`): `void`
+
+Interpolate between two matrices
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `m0` | [`Matrix4`](Matrix4.md) | Matrix 0 |
+| `m1` | [`Matrix4`](Matrix4.md) | Matrix 1 |
+| `t` | `number` | Factor of interpolation 0.0 - 1.0 |
+
+#### Returns
+
+`void`
+
+**`Version`**
+
+Orillusion3D 0.5.1
+
+#### Defined in
+
+[src/math/Matrix4.ts:2012](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L2012)
+
+___
+
+### get
+
+▸ **get**(`row`, `column`): `number`
+
+Read matrix element values
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `row` | `number` | row |
+| `column` | `number` | column |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Matrix4.ts:2023](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L2023)
+
+___
+
+### set
+
+▸ **set**(`row`, `column`, `v`): `void`
+
+Sets the matrix element values
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `row` | `number` | row |
+| `column` | `number` | column |
+| `v` | `number` | value |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix4.ts:2033](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L2033)
+
+___
+
+### getMaxScaleOnAxis
+
+▸ **getMaxScaleOnAxis**(): `number`
+
+Get the maximum value of the matrix scaled on each axis
+
+#### Returns
+
+`number`
+
+**`Version`**
+
+Orillusion3D 0.5.1 4.0
+
+#### Defined in
+
+[src/math/Matrix4.ts:2041](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L2041)
+
+___
+
+### translate
+
+▸ **translate**(`inTrans`): [`Matrix4`](Matrix4.md)
+
+Calculate the displacement from the vector
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `inTrans` | [`Vector3`](Vector3.md) | Vector |
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+current matrix
+
+#### Defined in
+
+[src/math/Matrix4.ts:2056](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L2056)
+
+___
+
+### setTRInverse
+
+▸ **setTRInverse**(`pos`, `q`): `void`
+
+from unity AMath.PI
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pos` | [`Vector3`](Vector3.md) |
+| `q` | [`Quaternion`](Quaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Matrix4.ts:2073](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L2073)
+
+___
+
+### setScale
+
+▸ **setScale**(`inScale`): [`Matrix4`](Matrix4.md)
+
+Set scale value
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `inScale` | [`Vector3`](Vector3.md) | scale value |
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+this matrix
+
+#### Defined in
+
+[src/math/Matrix4.ts:2084](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L2084)
+
+___
+
+### makeBasis
+
+▸ **makeBasis**(`xAxis`, `yAxis`, `zAxis`): [`Matrix4`](Matrix4.md)
+
+Generate the matrix according to the three axes
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `xAxis` | [`Vector3`](Vector3.md) |
+| `yAxis` | [`Vector3`](Vector3.md) |
+| `zAxis` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/math/Matrix4.ts:2110](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L2110)
+
+___
+
+### makeRotationAxis
+
+▸ **makeRotationAxis**(`axis`, `angle`): [`Matrix4`](Matrix4.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `axis` | [`Vector3`](Vector3.md) |
+| `angle` | `number` |
+
+#### Returns
+
+[`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/math/Matrix4.ts:2120](https://github.com/Orillusion/orillusion/blob/main/src/math/Matrix4.ts#L2120)
diff --git a/docs/api/classes/MatrixDO.md b/docs/api/classes/MatrixDO.md
new file mode 100644
index 00000000..422fcc99
--- /dev/null
+++ b/docs/api/classes/MatrixDO.md
@@ -0,0 +1,19 @@
+# Class: MatrixDO
+
+### Constructors
+
+- [constructor](MatrixDO.md#constructor)
+
+## Constructors
+
+### constructor
+
+• **new MatrixDO**(): [`MatrixDO`](MatrixDO.md)
+
+#### Returns
+
+[`MatrixDO`](MatrixDO.md)
+
+#### Defined in
+
+[src/core/pool/memory/MatrixDO.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/core/pool/memory/MatrixDO.ts#L2)
diff --git a/docs/api/classes/MatrixGPUBuffer.md b/docs/api/classes/MatrixGPUBuffer.md
new file mode 100644
index 00000000..1bb4e632
--- /dev/null
+++ b/docs/api/classes/MatrixGPUBuffer.md
@@ -0,0 +1,1322 @@
+# Class: MatrixGPUBuffer
+
+The buffer of the storage class
+written in the computer shader or CPU Coder
+usage GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST
+
+## Hierarchy
+
+- `GPUBufferBase`
+
+ ↳ **`MatrixGPUBuffer`**
+
+### Constructors
+
+- [constructor](MatrixGPUBuffer.md#constructor)
+
+### Properties
+
+- [bufferType](MatrixGPUBuffer.md#buffertype)
+- [buffer](MatrixGPUBuffer.md#buffer)
+- [memory](MatrixGPUBuffer.md#memory)
+- [memoryNodes](MatrixGPUBuffer.md#memorynodes)
+- [seek](MatrixGPUBuffer.md#seek)
+- [outFloat32Array](MatrixGPUBuffer.md#outfloat32array)
+- [byteSize](MatrixGPUBuffer.md#bytesize)
+- [usage](MatrixGPUBuffer.md#usage)
+- [visibility](MatrixGPUBuffer.md#visibility)
+- [size](MatrixGPUBuffer.md#size)
+
+### Methods
+
+- [debug](MatrixGPUBuffer.md#debug)
+- [reset](MatrixGPUBuffer.md#reset)
+- [setBoolean](MatrixGPUBuffer.md#setboolean)
+- [readBoole](MatrixGPUBuffer.md#readboole)
+- [setFloat](MatrixGPUBuffer.md#setfloat)
+- [getFloat](MatrixGPUBuffer.md#getfloat)
+- [setInt8](MatrixGPUBuffer.md#setint8)
+- [getInt8](MatrixGPUBuffer.md#getint8)
+- [setInt16](MatrixGPUBuffer.md#setint16)
+- [getInt16](MatrixGPUBuffer.md#getint16)
+- [setInt32](MatrixGPUBuffer.md#setint32)
+- [getInt32](MatrixGPUBuffer.md#getint32)
+- [setUint8](MatrixGPUBuffer.md#setuint8)
+- [getUint8](MatrixGPUBuffer.md#getuint8)
+- [setUint16](MatrixGPUBuffer.md#setuint16)
+- [getUint16](MatrixGPUBuffer.md#getuint16)
+- [setUint32](MatrixGPUBuffer.md#setuint32)
+- [getUint32](MatrixGPUBuffer.md#getuint32)
+- [setVector2](MatrixGPUBuffer.md#setvector2)
+- [getVector2](MatrixGPUBuffer.md#getvector2)
+- [setVector3](MatrixGPUBuffer.md#setvector3)
+- [getVector3](MatrixGPUBuffer.md#getvector3)
+- [setVector4](MatrixGPUBuffer.md#setvector4)
+- [getVector4](MatrixGPUBuffer.md#getvector4)
+- [setVector4Array](MatrixGPUBuffer.md#setvector4array)
+- [setColor](MatrixGPUBuffer.md#setcolor)
+- [getColor](MatrixGPUBuffer.md#getcolor)
+- [setColorArray](MatrixGPUBuffer.md#setcolorarray)
+- [setMatrix](MatrixGPUBuffer.md#setmatrix)
+- [setMatrixArray](MatrixGPUBuffer.md#setmatrixarray)
+- [setArray](MatrixGPUBuffer.md#setarray)
+- [setFloat32Array](MatrixGPUBuffer.md#setfloat32array)
+- [setInt32Array](MatrixGPUBuffer.md#setint32array)
+- [setUint32Array](MatrixGPUBuffer.md#setuint32array)
+- [setStruct](MatrixGPUBuffer.md#setstruct)
+- [setStructArray](MatrixGPUBuffer.md#setstructarray)
+- [clean](MatrixGPUBuffer.md#clean)
+- [apply](MatrixGPUBuffer.md#apply)
+- [mapAsyncWrite](MatrixGPUBuffer.md#mapasyncwrite)
+- [destroy](MatrixGPUBuffer.md#destroy)
+- [resizeBuffer](MatrixGPUBuffer.md#resizebuffer)
+- [readBuffer](MatrixGPUBuffer.md#readbuffer)
+- [writeBufferByHeap](MatrixGPUBuffer.md#writebufferbyheap)
+
+## Constructors
+
+### constructor
+
+• **new MatrixGPUBuffer**(`size`, `usage?`, `data?`): [`MatrixGPUBuffer`](MatrixGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `size` | `number` | `undefined` |
+| `usage` | `number` | `0` |
+| `data?` | [`ArrayBufferData`](../types/ArrayBufferData.md) | `undefined` |
+
+#### Returns
+
+[`MatrixGPUBuffer`](MatrixGPUBuffer.md)
+
+#### Overrides
+
+GPUBufferBase.constructor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/MatrixGPUBuffer.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/MatrixGPUBuffer.ts#L16)
+
+## Properties
+
+### bufferType
+
+• **bufferType**: [`GPUBufferType`](../enums/GPUBufferType.md)
+
+#### Inherited from
+
+GPUBufferBase.bufferType
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L20)
+
+___
+
+### buffer
+
+• **buffer**: `GPUBuffer`
+
+#### Inherited from
+
+GPUBufferBase.buffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L21)
+
+___
+
+### memory
+
+• **memory**: `MemoryDO`
+
+#### Inherited from
+
+GPUBufferBase.memory
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L22)
+
+___
+
+### memoryNodes
+
+• **memoryNodes**: `Map`\<`string` \| `number`, `MemoryInfo`\>
+
+#### Inherited from
+
+GPUBufferBase.memoryNodes
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L23)
+
+___
+
+### seek
+
+• **seek**: `number`
+
+#### Inherited from
+
+GPUBufferBase.seek
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L24)
+
+___
+
+### outFloat32Array
+
+• **outFloat32Array**: `Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.outFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L25)
+
+___
+
+### byteSize
+
+• **byteSize**: `number`
+
+#### Inherited from
+
+GPUBufferBase.byteSize
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L26)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+#### Inherited from
+
+GPUBufferBase.usage
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L27)
+
+___
+
+### visibility
+
+• **visibility**: `number`
+
+#### Inherited from
+
+GPUBufferBase.visibility
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L28)
+
+___
+
+### size
+
+• **size**: `number`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/MatrixGPUBuffer.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/MatrixGPUBuffer.ts#L14)
+
+## Methods
+
+### debug
+
+▸ **debug**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.debug
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L41)
+
+___
+
+### reset
+
+▸ **reset**(`clean?`, `size?`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `clean` | `boolean` | `false` |
+| `size` | `number` | `0` |
+| `data?` | `Float32Array` | `undefined` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.reset
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L44)
+
+___
+
+### setBoolean
+
+▸ **setBoolean**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setBoolean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L52)
+
+___
+
+### readBoole
+
+▸ **readBoole**(`name`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+GPUBufferBase.readBoole
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L62)
+
+___
+
+### setFloat
+
+▸ **setFloat**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L70)
+
+___
+
+### getFloat
+
+▸ **getFloat**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L79)
+
+___
+
+### setInt8
+
+▸ **setInt8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L87)
+
+___
+
+### getInt8
+
+▸ **getInt8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L96)
+
+___
+
+### setInt16
+
+▸ **setInt16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L104)
+
+___
+
+### getInt16
+
+▸ **getInt16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L113)
+
+___
+
+### setInt32
+
+▸ **setInt32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L121)
+
+___
+
+### getInt32
+
+▸ **getInt32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:130](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L130)
+
+___
+
+### setUint8
+
+▸ **setUint8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:138](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L138)
+
+___
+
+### getUint8
+
+▸ **getUint8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L147)
+
+___
+
+### setUint16
+
+▸ **setUint16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L156)
+
+___
+
+### getUint16
+
+▸ **getUint16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L165)
+
+___
+
+### setUint32
+
+▸ **setUint32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L173)
+
+___
+
+### getUint32
+
+▸ **getUint32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L182)
+
+___
+
+### setVector2
+
+▸ **setVector2**(`name`, `v2`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v2` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L190)
+
+___
+
+### getVector2
+
+▸ **getVector2**(`name`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+GPUBufferBase.getVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L199)
+
+___
+
+### setVector3
+
+▸ **setVector3**(`name`, `v3`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v3` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L207)
+
+___
+
+### getVector3
+
+▸ **getVector3**(`name`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+GPUBufferBase.getVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L216)
+
+___
+
+### setVector4
+
+▸ **setVector4**(`name`, `v4`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4` | `Vector4` \| [`Quaternion`](Quaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L224)
+
+___
+
+### getVector4
+
+▸ **getVector4**(`name`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+GPUBufferBase.getVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L233)
+
+___
+
+### setVector4Array
+
+▸ **setVector4Array**(`name`, `v4Array`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4Array` | [`Vector3`](Vector3.md)[] \| `Vector4`[] \| [`Quaternion`](Quaternion.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:241](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L241)
+
+___
+
+### setColor
+
+▸ **setColor**(`name`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `color` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:250](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L250)
+
+___
+
+### getColor
+
+▸ **getColor**(`name`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+GPUBufferBase.getColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:259](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L259)
+
+___
+
+### setColorArray
+
+▸ **setColorArray**(`name`, `colorArray`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `colorArray` | [`Color`](Color.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColorArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:267](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L267)
+
+___
+
+### setMatrix
+
+▸ **setMatrix**(`name`, `mat`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mat` | [`Matrix4`](Matrix4.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrix
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:276](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L276)
+
+___
+
+### setMatrixArray
+
+▸ **setMatrixArray**(`name`, `mats`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mats` | [`Matrix4`](Matrix4.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrixArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:285](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L285)
+
+___
+
+### setArray
+
+▸ **setArray**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `number`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:297](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L297)
+
+___
+
+### setFloat32Array
+
+▸ **setFloat32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Float32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:306](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L306)
+
+___
+
+### setInt32Array
+
+▸ **setInt32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Int32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L315)
+
+___
+
+### setUint32Array
+
+▸ **setUint32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Uint32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:325](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L325)
+
+___
+
+### setStruct
+
+▸ **setStruct**\<`T`\>(`c`, `index`, `data`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `index` | `number` |
+| `data` | `any` |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStruct
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:334](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L334)
+
+___
+
+### setStructArray
+
+▸ **setStructArray**\<`T`\>(`c`, `dataList`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `dataList` | `any`[] |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStructArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:390](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L390)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.clean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:403](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L403)
+
+___
+
+### apply
+
+▸ **apply**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.apply
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L408)
+
+___
+
+### mapAsyncWrite
+
+▸ **mapAsyncWrite**(`mapAsyncArray`, `len`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mapAsyncArray` | `Float32Array` |
+| `len` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.mapAsyncWrite
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:413](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L413)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.destroy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:454](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L454)
+
+___
+
+### resizeBuffer
+
+▸ **resizeBuffer**(`size`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `size` | `number` |
+| `data?` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.resizeBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:511](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L511)
+
+___
+
+### readBuffer
+
+▸ **readBuffer**(): `Float32Array`
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:558](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L558)
+
+▸ **readBuffer**(`promise`): `Float32Array`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``false`` |
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:559](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L559)
+
+▸ **readBuffer**(`promise`): `Promise`\<`Float32Array`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``true`` |
+
+#### Returns
+
+`Promise`\<`Float32Array`\>
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:560](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L560)
+
+___
+
+### writeBufferByHeap
+
+▸ **writeBufferByHeap**(`mapAsyncArray`, `len`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mapAsyncArray` | `Float32Array` |
+| `len` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/MatrixGPUBuffer.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/MatrixGPUBuffer.ts#L23)
diff --git a/docs/api/classes/MeshColliderShape.md b/docs/api/classes/MeshColliderShape.md
new file mode 100644
index 00000000..15fae79f
--- /dev/null
+++ b/docs/api/classes/MeshColliderShape.md
@@ -0,0 +1,237 @@
+# Class: MeshColliderShape
+
+Mesh collision body
+
+## Hierarchy
+
+- [`ColliderShape`](ColliderShape.md)
+
+ ↳ **`MeshColliderShape`**
+
+### Constructors
+
+- [constructor](MeshColliderShape.md#constructor)
+
+### Properties
+
+- [mesh](MeshColliderShape.md#mesh)
+
+### Accessors
+
+- [shapeType](MeshColliderShape.md#shapetype)
+- [center](MeshColliderShape.md#center)
+- [size](MeshColliderShape.md#size)
+- [halfSize](MeshColliderShape.md#halfsize)
+
+### Methods
+
+- [setFromCenterAndSize](MeshColliderShape.md#setfromcenterandsize)
+- [rayPick](MeshColliderShape.md#raypick)
+
+## Constructors
+
+### constructor
+
+• **new MeshColliderShape**(): [`MeshColliderShape`](MeshColliderShape.md)
+
+#### Returns
+
+[`MeshColliderShape`](MeshColliderShape.md)
+
+#### Overrides
+
+[ColliderShape](ColliderShape.md).[constructor](ColliderShape.md#constructor)
+
+#### Defined in
+
+[src/components/shape/MeshColliderShape.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/MeshColliderShape.ts#L17)
+
+## Properties
+
+### mesh
+
+• **mesh**: [`GeometryBase`](GeometryBase.md)
+
+meshComponent
+
+#### Defined in
+
+[src/components/shape/MeshColliderShape.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/MeshColliderShape.ts#L12)
+
+## Accessors
+
+### shapeType
+
+• `get` **shapeType**(): [`ColliderShapeType`](../enums/ColliderShapeType.md)
+
+#### Returns
+
+[`ColliderShapeType`](../enums/ColliderShapeType.md)
+
+#### Inherited from
+
+ColliderShape.shapeType
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L40)
+
+___
+
+### center
+
+• `get` **center**(): [`Vector3`](Vector3.md)
+
+The position of the collision object in the local space of the object.
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+ColliderShape.center
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L59)
+
+• `set` **center**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ColliderShape.center
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L63)
+
+___
+
+### size
+
+• `get` **size**(): [`Vector3`](Vector3.md)
+
+The size of the collision body in the X, Y, and Z directions.
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3
+
+#### Inherited from
+
+ColliderShape.size
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L72)
+
+• `set` **size**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ColliderShape.size
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L76)
+
+___
+
+### halfSize
+
+• `get` **halfSize**(): [`Vector3`](Vector3.md)
+
+Half the size of the collision body.
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+ColliderShape.halfSize
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L84)
+
+## Methods
+
+### setFromCenterAndSize
+
+▸ **setFromCenterAndSize**(`ct?`, `sz?`): `this`
+
+Set the position and size of collision objects
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `ct?` | [`Vector3`](Vector3.md) | The position of the collision object in the local space of the object. |
+| `sz?` | [`Vector3`](Vector3.md) | The size of the collision body in the X, Y, and Z directions. |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ColliderShape](ColliderShape.md).[setFromCenterAndSize](ColliderShape.md#setfromcenterandsize)
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L50)
+
+___
+
+### rayPick
+
+▸ **rayPick**(`ray`, `fromMatrix`): [`HitInfo`](../types/HitInfo.md)
+
+Ray pickup.Emit a ray from a designated location to detect objects colliding with the ray.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `ray` | [`Ray`](Ray.md) | emit ray |
+| `fromMatrix` | [`Matrix4`](Matrix4.md) | matrix |
+
+#### Returns
+
+[`HitInfo`](../types/HitInfo.md)
+
+Pick result intersect: whether to collide;
+ IntersectPoint: collision point;
+ Distance: The distance from the origin of the ray to the collision point.
+
+#### Overrides
+
+[ColliderShape](ColliderShape.md).[rayPick](ColliderShape.md#raypick)
+
+#### Defined in
+
+[src/components/shape/MeshColliderShape.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/MeshColliderShape.ts#L22)
diff --git a/docs/api/classes/MeshFilter.md b/docs/api/classes/MeshFilter.md
new file mode 100644
index 00000000..c1b3458e
--- /dev/null
+++ b/docs/api/classes/MeshFilter.md
@@ -0,0 +1,1487 @@
+# Class: MeshFilter
+
+The mesh renderer component is a component used to render the mesh
+
+## Hierarchy
+
+- [`MeshRenderer`](MeshRenderer.md)
+
+ ↳ **`MeshFilter`**
+
+### Constructors
+
+- [constructor](MeshFilter.md#constructor)
+
+### Properties
+
+- [object3D](MeshFilter.md#object3d)
+- [isDestroyed](MeshFilter.md#isdestroyed)
+- [receiveShadow](MeshFilter.md#receiveshadow)
+- [morphData](MeshFilter.md#morphdata)
+- [instanceCount](MeshFilter.md#instancecount)
+- [lodLevel](MeshFilter.md#lodlevel)
+- [alwaysRender](MeshFilter.md#alwaysrender)
+- [instanceID](MeshFilter.md#instanceid)
+- [drawType](MeshFilter.md#drawtype)
+- [isRenderOrderChange](MeshFilter.md#isrenderorderchange)
+- [needSortOnCameraZ](MeshFilter.md#needsortoncameraz)
+- [isRecievePostEffectUI](MeshFilter.md#isrecieveposteffectui)
+
+### Accessors
+
+- [eventDispatcher](MeshFilter.md#eventdispatcher)
+- [isStart](MeshFilter.md#isstart)
+- [transform](MeshFilter.md#transform)
+- [enable](MeshFilter.md#enable)
+- [geometry](MeshFilter.md#geometry)
+- [meshURL](MeshFilter.md#meshurl)
+- [material](MeshFilter.md#material)
+- [renderLayer](MeshFilter.md#renderlayer)
+- [rendererMask](MeshFilter.md#renderermask)
+- [renderOrder](MeshFilter.md#renderorder)
+- [materials](MeshFilter.md#materials)
+- [castShadow](MeshFilter.md#castshadow)
+- [castGI](MeshFilter.md#castgi)
+- [castReflection](MeshFilter.md#castreflection)
+
+### Methods
+
+- [start](MeshFilter.md#start)
+- [stop](MeshFilter.md#stop)
+- [onUpdate](MeshFilter.md#onupdate)
+- [onLateUpdate](MeshFilter.md#onlateupdate)
+- [onBeforeUpdate](MeshFilter.md#onbeforeupdate)
+- [onGraphic](MeshFilter.md#ongraphic)
+- [onParentChange](MeshFilter.md#onparentchange)
+- [onAddChild](MeshFilter.md#onaddchild)
+- [onRemoveChild](MeshFilter.md#onremovechild)
+- [cloneTo](MeshFilter.md#cloneto)
+- [onEnable](MeshFilter.md#onenable)
+- [onDisable](MeshFilter.md#ondisable)
+- [copyComponent](MeshFilter.md#copycomponent)
+- [setMorphInfluence](MeshFilter.md#setmorphinfluence)
+- [setMorphInfluenceIndex](MeshFilter.md#setmorphinfluenceindex)
+- [onCompute](MeshFilter.md#oncompute)
+- [destroy](MeshFilter.md#destroy)
+- [init](MeshFilter.md#init)
+- [attachSceneOctree](MeshFilter.md#attachsceneoctree)
+- [detachSceneOctree](MeshFilter.md#detachsceneoctree)
+- [addMask](MeshFilter.md#addmask)
+- [removeMask](MeshFilter.md#removemask)
+- [hasMask](MeshFilter.md#hasmask)
+- [addRendererMask](MeshFilter.md#addrenderermask)
+- [removeRendererMask](MeshFilter.md#removerenderermask)
+- [selfCloneMaterials](MeshFilter.md#selfclonematerials)
+- [renderPass](MeshFilter.md#renderpass)
+- [renderPass2](MeshFilter.md#renderpass2)
+- [recordRenderPass2](MeshFilter.md#recordrenderpass2)
+- [preInit](MeshFilter.md#preinit)
+- [beforeDestroy](MeshFilter.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new MeshFilter**(): [`MeshFilter`](MeshFilter.md)
+
+#### Returns
+
+[`MeshFilter`](MeshFilter.md)
+
+#### Overrides
+
+[MeshRenderer](MeshRenderer.md).[constructor](MeshRenderer.md#constructor)
+
+#### Defined in
+
+[src/components/renderer/MeshFilter.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshFilter.ts#L12)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[object3D](MeshRenderer.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[isDestroyed](MeshRenderer.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### receiveShadow
+
+• **receiveShadow**: `boolean`
+
+Enabling this option allows the grid to display any shadows cast on the grid.
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[receiveShadow](MeshRenderer.md#receiveshadow)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L23)
+
+___
+
+### morphData
+
+• **morphData**: [`MorphTargetData`](MorphTargetData.md)
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[morphData](MeshRenderer.md#morphdata)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L24)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[instanceCount](MeshRenderer.md#instancecount)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[lodLevel](MeshRenderer.md#lodlevel)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[alwaysRender](MeshRenderer.md#alwaysrender)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[instanceID](MeshRenderer.md#instanceid)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[drawType](MeshRenderer.md#drawtype)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[isRenderOrderChange](MeshRenderer.md#isrenderorderchange)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[needSortOnCameraZ](MeshRenderer.md#needsortoncameraz)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[isRecievePostEffectUI](MeshRenderer.md#isrecieveposteffectui)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+MeshRenderer.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### geometry
+
+• `get` **geometry**(): [`GeometryBase`](GeometryBase.md)
+
+The geometry of the mesh determines its shape
+
+#### Returns
+
+[`GeometryBase`](GeometryBase.md)
+
+#### Overrides
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshFilter.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshFilter.ts#L16)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryBase`](GeometryBase.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshFilter.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshFilter.ts#L19)
+
+___
+
+### meshURL
+
+• `set` **meshURL**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/renderer/MeshFilter.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshFilter.ts#L27)
+
+___
+
+### material
+
+• `get` **material**(): [`Material`](Material.md)
+
+material
+
+#### Returns
+
+[`Material`](Material.md)
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L99)
+
+• `set` **material**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Material`](Material.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L103)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): [`Material`](Material.md)[]
+
+#### Returns
+
+[`Material`](Material.md)[]
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Material`](Material.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+## Methods
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[start](MeshRenderer.md#start)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[stop](MeshRenderer.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onUpdate](MeshRenderer.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onLateUpdate](MeshRenderer.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onBeforeUpdate](MeshRenderer.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onGraphic](MeshRenderer.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onParentChange](MeshRenderer.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onAddChild](MeshRenderer.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onRemoveChild](MeshRenderer.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[MeshRenderer](MeshRenderer.md).[cloneTo](MeshRenderer.md#cloneto)
+
+#### Defined in
+
+[src/components/renderer/MeshFilter.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshFilter.ts#L23)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onEnable](MeshRenderer.md#onenable)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L30)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onDisable](MeshRenderer.md#ondisable)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L34)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[copyComponent](MeshRenderer.md#copycomponent)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L43)
+
+___
+
+### setMorphInfluence
+
+▸ **setMorphInfluence**(`key`, `value`): `void`
+
+Set deformation animation parameters
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[setMorphInfluence](MeshRenderer.md#setmorphinfluence)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L110)
+
+___
+
+### setMorphInfluenceIndex
+
+▸ **setMorphInfluenceIndex**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[setMorphInfluenceIndex](MeshRenderer.md#setmorphinfluenceindex)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view`, `command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onCompute](MeshRenderer.md#oncompute)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L128)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[destroy](MeshRenderer.md#destroy)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L157)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[init](MeshRenderer.md#init)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L70)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | [`Octree`](Octree.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[attachSceneOctree](MeshRenderer.md#attachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[detachSceneOctree](MeshRenderer.md#detachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[addMask](MeshRenderer.md#addmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[removeMask](MeshRenderer.md#removemask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[hasMask](MeshRenderer.md#hasmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[addRendererMask](MeshRenderer.md#addrenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[removeRendererMask](MeshRenderer.md#removerenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[selfCloneMaterials](MeshRenderer.md#selfclonematerials)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `passType` | `PassType` |
+| `renderContext` | [`RenderContext`](RenderContext.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[renderPass](MeshRenderer.md#renderpass)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L370)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+render pass at passType
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[renderPass2](MeshRenderer.md#renderpass2)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L438)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[recordRenderPass2](MeshRenderer.md#recordrenderpass2)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[preInit](MeshRenderer.md#preinit)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[beforeDestroy](MeshRenderer.md#beforedestroy)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
diff --git a/docs/api/classes/MeshRenderer.md b/docs/api/classes/MeshRenderer.md
new file mode 100644
index 00000000..56c48cc7
--- /dev/null
+++ b/docs/api/classes/MeshRenderer.md
@@ -0,0 +1,1452 @@
+# Class: MeshRenderer
+
+The mesh renderer component is a component used to render the mesh
+
+## Hierarchy
+
+- `RenderNode`
+
+ ↳ **`MeshRenderer`**
+
+ ↳↳ [`GUIRenderer`](GUIRenderer.md)
+
+ ↳↳ [`MeshFilter`](MeshFilter.md)
+
+ ↳↳ [`SkinnedMeshRenderer`](SkinnedMeshRenderer.md)
+
+ ↳↳ [`SkinnedMeshRenderer2`](SkinnedMeshRenderer2.md)
+
+ ↳↳ [`SkyRenderer`](SkyRenderer.md)
+
+### Constructors
+
+- [constructor](MeshRenderer.md#constructor)
+
+### Properties
+
+- [object3D](MeshRenderer.md#object3d)
+- [isDestroyed](MeshRenderer.md#isdestroyed)
+- [receiveShadow](MeshRenderer.md#receiveshadow)
+- [morphData](MeshRenderer.md#morphdata)
+- [instanceCount](MeshRenderer.md#instancecount)
+- [lodLevel](MeshRenderer.md#lodlevel)
+- [alwaysRender](MeshRenderer.md#alwaysrender)
+- [instanceID](MeshRenderer.md#instanceid)
+- [drawType](MeshRenderer.md#drawtype)
+- [isRenderOrderChange](MeshRenderer.md#isrenderorderchange)
+- [needSortOnCameraZ](MeshRenderer.md#needsortoncameraz)
+- [isRecievePostEffectUI](MeshRenderer.md#isrecieveposteffectui)
+
+### Accessors
+
+- [eventDispatcher](MeshRenderer.md#eventdispatcher)
+- [isStart](MeshRenderer.md#isstart)
+- [transform](MeshRenderer.md#transform)
+- [enable](MeshRenderer.md#enable)
+- [geometry](MeshRenderer.md#geometry)
+- [material](MeshRenderer.md#material)
+- [renderLayer](MeshRenderer.md#renderlayer)
+- [rendererMask](MeshRenderer.md#renderermask)
+- [renderOrder](MeshRenderer.md#renderorder)
+- [materials](MeshRenderer.md#materials)
+- [castShadow](MeshRenderer.md#castshadow)
+- [castGI](MeshRenderer.md#castgi)
+- [castReflection](MeshRenderer.md#castreflection)
+
+### Methods
+
+- [start](MeshRenderer.md#start)
+- [stop](MeshRenderer.md#stop)
+- [onUpdate](MeshRenderer.md#onupdate)
+- [onLateUpdate](MeshRenderer.md#onlateupdate)
+- [onBeforeUpdate](MeshRenderer.md#onbeforeupdate)
+- [onGraphic](MeshRenderer.md#ongraphic)
+- [onParentChange](MeshRenderer.md#onparentchange)
+- [onAddChild](MeshRenderer.md#onaddchild)
+- [onRemoveChild](MeshRenderer.md#onremovechild)
+- [onEnable](MeshRenderer.md#onenable)
+- [onDisable](MeshRenderer.md#ondisable)
+- [cloneTo](MeshRenderer.md#cloneto)
+- [copyComponent](MeshRenderer.md#copycomponent)
+- [setMorphInfluence](MeshRenderer.md#setmorphinfluence)
+- [setMorphInfluenceIndex](MeshRenderer.md#setmorphinfluenceindex)
+- [onCompute](MeshRenderer.md#oncompute)
+- [destroy](MeshRenderer.md#destroy)
+- [init](MeshRenderer.md#init)
+- [attachSceneOctree](MeshRenderer.md#attachsceneoctree)
+- [detachSceneOctree](MeshRenderer.md#detachsceneoctree)
+- [addMask](MeshRenderer.md#addmask)
+- [removeMask](MeshRenderer.md#removemask)
+- [hasMask](MeshRenderer.md#hasmask)
+- [addRendererMask](MeshRenderer.md#addrenderermask)
+- [removeRendererMask](MeshRenderer.md#removerenderermask)
+- [selfCloneMaterials](MeshRenderer.md#selfclonematerials)
+- [renderPass](MeshRenderer.md#renderpass)
+- [renderPass2](MeshRenderer.md#renderpass2)
+- [recordRenderPass2](MeshRenderer.md#recordrenderpass2)
+- [preInit](MeshRenderer.md#preinit)
+- [beforeDestroy](MeshRenderer.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new MeshRenderer**(): [`MeshRenderer`](MeshRenderer.md)
+
+#### Returns
+
+[`MeshRenderer`](MeshRenderer.md)
+
+#### Overrides
+
+RenderNode.constructor
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L26)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+RenderNode.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+RenderNode.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### receiveShadow
+
+• **receiveShadow**: `boolean`
+
+Enabling this option allows the grid to display any shadows cast on the grid.
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L23)
+
+___
+
+### morphData
+
+• **morphData**: [`MorphTargetData`](MorphTargetData.md)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L24)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+RenderNode.instanceCount
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+RenderNode.lodLevel
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+RenderNode.alwaysRender
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+RenderNode.instanceID
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+RenderNode.drawType
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+RenderNode.isRenderOrderChange
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+RenderNode.needSortOnCameraZ
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+RenderNode.isRecievePostEffectUI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+RenderNode.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+RenderNode.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### geometry
+
+• `get` **geometry**(): [`GeometryBase`](GeometryBase.md)
+
+The geometry of the mesh determines its shape
+
+#### Returns
+
+[`GeometryBase`](GeometryBase.md)
+
+#### Overrides
+
+RenderNode.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L53)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryBase`](GeometryBase.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L57)
+
+___
+
+### material
+
+• `get` **material**(): [`Material`](Material.md)
+
+material
+
+#### Returns
+
+[`Material`](Material.md)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L99)
+
+• `set` **material**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Material`](Material.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L103)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+RenderNode.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+RenderNode.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+RenderNode.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): [`Material`](Material.md)[]
+
+#### Returns
+
+[`Material`](Material.md)[]
+
+#### Inherited from
+
+RenderNode.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Material`](Material.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+## Methods
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.start
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.onEnable
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L30)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.onDisable
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L34)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.cloneTo
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L38)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+RenderNode.copyComponent
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L43)
+
+___
+
+### setMorphInfluence
+
+▸ **setMorphInfluence**(`key`, `value`): `void`
+
+Set deformation animation parameters
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L110)
+
+___
+
+### setMorphInfluenceIndex
+
+▸ **setMorphInfluenceIndex**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view`, `command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.onCompute
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L128)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.destroy
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L157)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.init
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L70)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | [`Octree`](Octree.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.attachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.detachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.addMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.removeMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.hasMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.addRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.removeRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+RenderNode.selfCloneMaterials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `passType` | `PassType` |
+| `renderContext` | [`RenderContext`](RenderContext.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.renderPass
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L370)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+render pass at passType
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.renderPass2
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L438)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.recordRenderPass2
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.preInit
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.beforeDestroy
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
diff --git a/docs/api/classes/MorePassParser.md b/docs/api/classes/MorePassParser.md
new file mode 100644
index 00000000..a6efd089
--- /dev/null
+++ b/docs/api/classes/MorePassParser.md
@@ -0,0 +1,40 @@
+# Class: MorePassParser
+
+### Constructors
+
+- [constructor](MorePassParser.md#constructor)
+
+### Methods
+
+- [parser](MorePassParser.md#parser)
+
+## Constructors
+
+### constructor
+
+• **new MorePassParser**(): [`MorePassParser`](MorePassParser.md)
+
+#### Returns
+
+[`MorePassParser`](MorePassParser.md)
+
+## Methods
+
+### parser
+
+▸ **parser**(`code`, `defineValue`): [`MorePassShader`](MorePassShader.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `code` | `string` |
+| `defineValue` | `Object` |
+
+#### Returns
+
+[`MorePassShader`](MorePassShader.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/util/MorePassParser.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/util/MorePassParser.ts#L22)
diff --git a/docs/api/classes/MorePassShader.md b/docs/api/classes/MorePassShader.md
new file mode 100644
index 00000000..93544d5c
--- /dev/null
+++ b/docs/api/classes/MorePassShader.md
@@ -0,0 +1,40 @@
+# Class: MorePassShader
+
+### Constructors
+
+- [constructor](MorePassShader.md#constructor)
+
+### Properties
+
+- [name](MorePassShader.md#name)
+- [passMap](MorePassShader.md#passmap)
+
+## Constructors
+
+### constructor
+
+• **new MorePassShader**(): [`MorePassShader`](MorePassShader.md)
+
+#### Returns
+
+[`MorePassShader`](MorePassShader.md)
+
+## Properties
+
+### name
+
+• **name**: `string` = `''`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/util/MorePassParser.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/util/MorePassParser.ts#L4)
+
+___
+
+### passMap
+
+• **passMap**: `Map`\<`string`, [`PassShader`](PassShader.md)[]\>
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/util/MorePassParser.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/util/MorePassParser.ts#L5)
diff --git a/docs/api/classes/MorphTargetBlender.md b/docs/api/classes/MorphTargetBlender.md
new file mode 100644
index 00000000..d40e58ba
--- /dev/null
+++ b/docs/api/classes/MorphTargetBlender.md
@@ -0,0 +1,673 @@
+# Class: MorphTargetBlender
+
+Components are used to attach functionality to object3D, it has an owner object3D.
+The component can receive update events at each frame.
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`MorphTargetBlender`**
+
+### Constructors
+
+- [constructor](MorphTargetBlender.md#constructor)
+
+### Properties
+
+- [object3D](MorphTargetBlender.md#object3d)
+- [isDestroyed](MorphTargetBlender.md#isdestroyed)
+
+### Accessors
+
+- [eventDispatcher](MorphTargetBlender.md#eventdispatcher)
+- [isStart](MorphTargetBlender.md#isstart)
+- [transform](MorphTargetBlender.md#transform)
+- [enable](MorphTargetBlender.md#enable)
+
+### Methods
+
+- [start](MorphTargetBlender.md#start)
+- [stop](MorphTargetBlender.md#stop)
+- [onEnable](MorphTargetBlender.md#onenable)
+- [onDisable](MorphTargetBlender.md#ondisable)
+- [onUpdate](MorphTargetBlender.md#onupdate)
+- [onLateUpdate](MorphTargetBlender.md#onlateupdate)
+- [onBeforeUpdate](MorphTargetBlender.md#onbeforeupdate)
+- [onCompute](MorphTargetBlender.md#oncompute)
+- [onGraphic](MorphTargetBlender.md#ongraphic)
+- [onParentChange](MorphTargetBlender.md#onparentchange)
+- [onAddChild](MorphTargetBlender.md#onaddchild)
+- [onRemoveChild](MorphTargetBlender.md#onremovechild)
+- [cloneTo](MorphTargetBlender.md#cloneto)
+- [copyComponent](MorphTargetBlender.md#copycomponent)
+- [beforeDestroy](MorphTargetBlender.md#beforedestroy)
+- [destroy](MorphTargetBlender.md#destroy)
+- [init](MorphTargetBlender.md#init)
+- [getMorphRenderersByKey](MorphTargetBlender.md#getmorphrenderersbykey)
+- [cloneMorphRenderers](MorphTargetBlender.md#clonemorphrenderers)
+- [applyBlendShape](MorphTargetBlender.md#applyblendshape)
+
+## Constructors
+
+### constructor
+
+• **new MorphTargetBlender**(): [`MorphTargetBlender`](MorphTargetBlender.md)
+
+#### Returns
+
+[`MorphTargetBlender`](MorphTargetBlender.md)
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[start](ComponentBase.md#start)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onEnable](ComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onDisable](ComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onUpdate](ComponentBase.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[destroy](ComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[init](ComponentBase.md#init)
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetBlender.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetBlender.ts#L19)
+
+___
+
+### getMorphRenderersByKey
+
+▸ **getMorphRenderersByKey**(`key`): [`SkinnedMeshRenderer2`](SkinnedMeshRenderer2.md)[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+[`SkinnedMeshRenderer2`](SkinnedMeshRenderer2.md)[]
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetBlender.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetBlender.ts#L38)
+
+___
+
+### cloneMorphRenderers
+
+▸ **cloneMorphRenderers**(): `Object`
+
+#### Returns
+
+`Object`
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetBlender.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetBlender.ts#L42)
+
+___
+
+### applyBlendShape
+
+▸ **applyBlendShape**(`frame`, `keyMapper`, `multiplier?`): `void`
+
+Inject arkit data into the model and let all meshRender below the node accept morph animation
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `frame` | [`MorphTargetFrame`](MorphTargetFrame.md) | `undefined` |
+| `keyMapper` | [`MorphTargetMapper`](../types/MorphTargetMapper.md) | `undefined` |
+| `multiplier` | `number` | `1` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetBlender.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetBlender.ts#L58)
diff --git a/docs/api/classes/MorphTargetData.md b/docs/api/classes/MorphTargetData.md
new file mode 100644
index 00000000..b92debdb
--- /dev/null
+++ b/docs/api/classes/MorphTargetData.md
@@ -0,0 +1,161 @@
+# Class: MorphTargetData
+
+### Constructors
+
+- [constructor](MorphTargetData.md#constructor)
+
+### Properties
+
+- [enable](MorphTargetData.md#enable)
+- [morphTargetsRelative](MorphTargetData.md#morphtargetsrelative)
+- [MaxMorphTargetCount](MorphTargetData.md#maxmorphtargetcount)
+
+### Accessors
+
+- [blendShape](MorphTargetData.md#blendshape)
+
+### Methods
+
+- [initMorphTarget](MorphTargetData.md#initmorphtarget)
+- [applyRenderShader](MorphTargetData.md#applyrendershader)
+- [computeMorphTarget](MorphTargetData.md#computemorphtarget)
+- [updateInfluence](MorphTargetData.md#updateinfluence)
+
+## Constructors
+
+### constructor
+
+• **new MorphTargetData**(): [`MorphTargetData`](MorphTargetData.md)
+
+#### Returns
+
+[`MorphTargetData`](MorphTargetData.md)
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetData.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetData.ts#L73)
+
+## Properties
+
+### enable
+
+• **enable**: `boolean`
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetData.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetData.ts#L48)
+
+___
+
+### morphTargetsRelative
+
+• **morphTargetsRelative**: `boolean`
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetData.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetData.ts#L49)
+
+___
+
+### MaxMorphTargetCount
+
+• `Readonly` **MaxMorphTargetCount**: `number` = `64`
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetData.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetData.ts#L50)
+
+## Accessors
+
+### blendShape
+
+• `get` **blendShape**(): `Object`
+
+#### Returns
+
+`Object`
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetData.ts:141](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetData.ts#L141)
+
+## Methods
+
+### initMorphTarget
+
+▸ **initMorphTarget**(`geometry`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `geometry` | [`GeometryBase`](GeometryBase.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetData.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetData.ts#L80)
+
+___
+
+### applyRenderShader
+
+▸ **applyRenderShader**(`renderShader`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetData.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetData.ts#L103)
+
+___
+
+### computeMorphTarget
+
+▸ **computeMorphTarget**(`command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetData.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetData.ts#L115)
+
+___
+
+### updateInfluence
+
+▸ **updateInfluence**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetData.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetData.ts#L136)
diff --git a/docs/api/classes/MorphTargetFrame.md b/docs/api/classes/MorphTargetFrame.md
new file mode 100644
index 00000000..f15da6f0
--- /dev/null
+++ b/docs/api/classes/MorphTargetFrame.md
@@ -0,0 +1,40 @@
+# Class: MorphTargetFrame
+
+### Constructors
+
+- [constructor](MorphTargetFrame.md#constructor)
+
+### Properties
+
+- [texture](MorphTargetFrame.md#texture)
+- [transform](MorphTargetFrame.md#transform)
+
+## Constructors
+
+### constructor
+
+• **new MorphTargetFrame**(): [`MorphTargetFrame`](MorphTargetFrame.md)
+
+#### Returns
+
+[`MorphTargetFrame`](MorphTargetFrame.md)
+
+## Properties
+
+### texture
+
+• **texture**: `texture`
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetFrame.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetFrame.ts#L62)
+
+___
+
+### transform
+
+• **transform**: `transform`
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetFrame.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetFrame.ts#L63)
diff --git a/docs/api/classes/MorphTarget_shader.md b/docs/api/classes/MorphTarget_shader.md
new file mode 100644
index 00000000..1144d62f
--- /dev/null
+++ b/docs/api/classes/MorphTarget_shader.md
@@ -0,0 +1,69 @@
+# Class: MorphTarget\_shader
+
+### Constructors
+
+- [constructor](MorphTarget_shader.md#constructor)
+
+### Properties
+
+- [CsMain](MorphTarget_shader.md#csmain)
+
+### Methods
+
+- [getMorphTargetShaderBinding](MorphTarget_shader.md#getmorphtargetshaderbinding)
+- [getMorphTargetCalcVertex](MorphTarget_shader.md#getmorphtargetcalcvertex)
+
+## Constructors
+
+### constructor
+
+• **new MorphTarget_shader**(): [`MorphTarget_shader`](MorphTarget_shader.md)
+
+#### Returns
+
+[`MorphTarget_shader`](MorphTarget_shader.md)
+
+## Properties
+
+### CsMain
+
+▪ `Static` **CsMain**: `string`
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTarget_shader.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTarget_shader.ts#L55)
+
+## Methods
+
+### getMorphTargetShaderBinding
+
+▸ **getMorphTargetShaderBinding**(`group`, `beginBinding`): `string`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `group` | `number` |
+| `beginBinding` | `number` |
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTarget_shader.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTarget_shader.ts#L2)
+
+___
+
+### getMorphTargetCalcVertex
+
+▸ **getMorphTargetCalcVertex**(): `string`
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTarget_shader.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTarget_shader.ts#L45)
diff --git a/docs/api/classes/Navi3DAstar.md b/docs/api/classes/Navi3DAstar.md
new file mode 100644
index 00000000..7d60e01f
--- /dev/null
+++ b/docs/api/classes/Navi3DAstar.md
@@ -0,0 +1,63 @@
+# Class: Navi3DAstar
+
+### Constructors
+
+- [constructor](Navi3DAstar.md#constructor)
+
+### Accessors
+
+- [channel](Navi3DAstar.md#channel)
+
+### Methods
+
+- [findPath](Navi3DAstar.md#findpath)
+
+## Constructors
+
+### constructor
+
+• **new Navi3DAstar**(): [`Navi3DAstar`](Navi3DAstar.md)
+
+#### Returns
+
+[`Navi3DAstar`](Navi3DAstar.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DAstar.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DAstar.ts#L16)
+
+## Accessors
+
+### channel
+
+• `get` **channel**(): [`Navi3DTriangle`](Navi3DTriangle.md)[]
+
+#### Returns
+
+[`Navi3DTriangle`](Navi3DTriangle.md)[]
+
+#### Defined in
+
+[src/math/navigation/Navi3DAstar.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DAstar.ts#L97)
+
+## Methods
+
+### findPath
+
+▸ **findPath**(`navMesh`, `startTriangle`, `endTriangle`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `navMesh` | [`Navi3DMesh`](Navi3DMesh.md) |
+| `startTriangle` | [`Navi3DTriangle`](Navi3DTriangle.md) |
+| `endTriangle` | [`Navi3DTriangle`](Navi3DTriangle.md) |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/navigation/Navi3DAstar.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DAstar.ts#L21)
diff --git a/docs/api/classes/Navi3DConst.md b/docs/api/classes/Navi3DConst.md
new file mode 100644
index 00000000..cfdfc19b
--- /dev/null
+++ b/docs/api/classes/Navi3DConst.md
@@ -0,0 +1,64 @@
+# Class: Navi3DConst
+
+### Constructors
+
+- [constructor](Navi3DConst.md#constructor)
+
+### Properties
+
+- [EPSILON](Navi3DConst.md#epsilon)
+- [POWER\_EPSILON](Navi3DConst.md#power_epsilon)
+
+### Methods
+
+- [SetConst](Navi3DConst.md#setconst)
+
+## Constructors
+
+### constructor
+
+• **new Navi3DConst**(): [`Navi3DConst`](Navi3DConst.md)
+
+#### Returns
+
+[`Navi3DConst`](Navi3DConst.md)
+
+## Properties
+
+### EPSILON
+
+▪ `Static` **EPSILON**: `number` = `0.1`
+
+#### Defined in
+
+[src/math/navigation/Navi3DConst.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DConst.ts#L7)
+
+___
+
+### POWER\_EPSILON
+
+▪ `Static` **POWER\_EPSILON**: `number`
+
+#### Defined in
+
+[src/math/navigation/Navi3DConst.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DConst.ts#L9)
+
+## Methods
+
+### SetConst
+
+▸ **SetConst**(`epsilon`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `epsilon` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/navigation/Navi3DConst.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DConst.ts#L2)
diff --git a/docs/api/classes/Navi3DEdge.md b/docs/api/classes/Navi3DEdge.md
new file mode 100644
index 00000000..24ffde26
--- /dev/null
+++ b/docs/api/classes/Navi3DEdge.md
@@ -0,0 +1,347 @@
+# Class: Navi3DEdge
+
+### Constructors
+
+- [constructor](Navi3DEdge.md#constructor)
+
+### Properties
+
+- [crossPoint](Navi3DEdge.md#crosspoint)
+- [fatPointA](Navi3DEdge.md#fatpointa)
+- [fatPointB](Navi3DEdge.md#fatpointb)
+
+### Accessors
+
+- [size](Navi3DEdge.md#size)
+- [triangleOwners](Navi3DEdge.md#triangleowners)
+- [centerPoint](Navi3DEdge.md#centerpoint)
+- [pointA](Navi3DEdge.md#pointa)
+- [pointB](Navi3DEdge.md#pointb)
+- [walkAble](Navi3DEdge.md#walkable)
+
+### Methods
+
+- [initFatPoints](Navi3DEdge.md#initfatpoints)
+- [getFatPoint](Navi3DEdge.md#getfatpoint)
+- [getAnotherFatPoint](Navi3DEdge.md#getanotherfatpoint)
+- [getAnotherPoint](Navi3DEdge.md#getanotherpoint)
+- [containsPoint](Navi3DEdge.md#containspoint)
+- [addTriangleOwners](Navi3DEdge.md#addtriangleowners)
+- [getPublicPoint](Navi3DEdge.md#getpublicpoint)
+- [getEqualPoint](Navi3DEdge.md#getequalpoint)
+- [testMask](Navi3DEdge.md#testmask)
+
+## Constructors
+
+### constructor
+
+• **new Navi3DEdge**(`point0`, `point1`): [`Navi3DEdge`](Navi3DEdge.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `point0` | [`Navi3DPoint`](Navi3DPoint.md) |
+| `point1` | [`Navi3DPoint`](Navi3DPoint.md) |
+
+#### Returns
+
+[`Navi3DEdge`](Navi3DEdge.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L26)
+
+## Properties
+
+### crossPoint
+
+• **crossPoint**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L18)
+
+___
+
+### fatPointA
+
+• **fatPointA**: [`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L20)
+
+___
+
+### fatPointB
+
+• **fatPointB**: [`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L22)
+
+## Accessors
+
+### size
+
+• `get` **size**(): `Number`
+
+#### Returns
+
+`Number`
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L41)
+
+___
+
+### triangleOwners
+
+• `get` **triangleOwners**(): [`Navi3DTriangle`](Navi3DTriangle.md)[]
+
+#### Returns
+
+[`Navi3DTriangle`](Navi3DTriangle.md)[]
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L45)
+
+___
+
+### centerPoint
+
+• `get` **centerPoint**(): [`Vector3`](Vector3.md)
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L49)
+
+___
+
+### pointA
+
+• `get` **pointA**(): [`Navi3DPoint`](Navi3DPoint.md)
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L131)
+
+___
+
+### pointB
+
+• `get` **pointB**(): [`Navi3DPoint`](Navi3DPoint.md)
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L135)
+
+___
+
+### walkAble
+
+• `get` **walkAble**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L139)
+
+## Methods
+
+### initFatPoints
+
+▸ **initFatPoints**(`radius`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radius` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L53)
+
+___
+
+### getFatPoint
+
+▸ **getFatPoint**(`pt`): [`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pt` | [`Navi3DPoint`](Navi3DPoint.md) |
+
+#### Returns
+
+[`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L78)
+
+___
+
+### getAnotherFatPoint
+
+▸ **getAnotherFatPoint**(`pt`): [`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pt` | [`Navi3DPoint`](Navi3DPoint.md) |
+
+#### Returns
+
+[`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L84)
+
+___
+
+### getAnotherPoint
+
+▸ **getAnotherPoint**(`pt`): [`Navi3DPoint`](Navi3DPoint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pt` | [`Navi3DPoint`](Navi3DPoint.md) |
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L90)
+
+___
+
+### containsPoint
+
+▸ **containsPoint**(`pt`): [`Navi3DPoint`](Navi3DPoint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pt` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L96)
+
+___
+
+### addTriangleOwners
+
+▸ **addTriangleOwners**(`triangle`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `triangle` | [`Navi3DTriangle`](Navi3DTriangle.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L104)
+
+___
+
+### getPublicPoint
+
+▸ **getPublicPoint**(`edge`): [`Navi3DPoint`](Navi3DPoint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `edge` | [`Navi3DEdge`](Navi3DEdge.md) |
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L113)
+
+___
+
+### getEqualPoint
+
+▸ **getEqualPoint**(`p`): [`Navi3DPoint`](Navi3DPoint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `p` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L123)
+
+___
+
+### testMask
+
+▸ **testMask**(`value`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/navigation/Navi3DEdge.ts:143](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DEdge.ts#L143)
diff --git a/docs/api/classes/Navi3DFunnel.md b/docs/api/classes/Navi3DFunnel.md
new file mode 100644
index 00000000..d2600524
--- /dev/null
+++ b/docs/api/classes/Navi3DFunnel.md
@@ -0,0 +1,64 @@
+# Class: Navi3DFunnel
+
+### Constructors
+
+- [constructor](Navi3DFunnel.md#constructor)
+
+### Accessors
+
+- [path](Navi3DFunnel.md#path)
+
+### Methods
+
+- [searchPath](Navi3DFunnel.md#searchpath)
+
+## Constructors
+
+### constructor
+
+• **new Navi3DFunnel**(): [`Navi3DFunnel`](Navi3DFunnel.md)
+
+#### Returns
+
+[`Navi3DFunnel`](Navi3DFunnel.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DFunnel.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DFunnel.ts#L25)
+
+## Accessors
+
+### path
+
+• `get` **path**(): [`Vector3`](Vector3.md)[]
+
+#### Returns
+
+[`Vector3`](Vector3.md)[]
+
+#### Defined in
+
+[src/math/navigation/Navi3DFunnel.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DFunnel.ts#L42)
+
+## Methods
+
+### searchPath
+
+▸ **searchPath**(`startPt`, `endPt`, `triangleList`, `radius?`): `boolean`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `startPt` | [`Vector3`](Vector3.md) | `undefined` |
+| `endPt` | [`Vector3`](Vector3.md) | `undefined` |
+| `triangleList` | [`Navi3DTriangle`](Navi3DTriangle.md)[] | `undefined` |
+| `radius` | `number` | `0` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/navigation/Navi3DFunnel.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DFunnel.ts#L29)
diff --git a/docs/api/classes/Navi3DMaskType.md b/docs/api/classes/Navi3DMaskType.md
new file mode 100644
index 00000000..122f0767
--- /dev/null
+++ b/docs/api/classes/Navi3DMaskType.md
@@ -0,0 +1,29 @@
+# Class: Navi3DMaskType
+
+### Constructors
+
+- [constructor](Navi3DMaskType.md#constructor)
+
+### Properties
+
+- [WalkAble](Navi3DMaskType.md#walkable)
+
+## Constructors
+
+### constructor
+
+• **new Navi3DMaskType**(): [`Navi3DMaskType`](Navi3DMaskType.md)
+
+#### Returns
+
+[`Navi3DMaskType`](Navi3DMaskType.md)
+
+## Properties
+
+### WalkAble
+
+▪ `Static` **WalkAble**: `number` = `1`
+
+#### Defined in
+
+[src/math/navigation/Navi3DMaskType.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DMaskType.ts#L2)
diff --git a/docs/api/classes/Navi3DMergeVertex.md b/docs/api/classes/Navi3DMergeVertex.md
new file mode 100644
index 00000000..5623e543
--- /dev/null
+++ b/docs/api/classes/Navi3DMergeVertex.md
@@ -0,0 +1,86 @@
+# Class: Navi3DMergeVertex
+
+### Constructors
+
+- [constructor](Navi3DMergeVertex.md#constructor)
+
+### Properties
+
+- [vertex](Navi3DMergeVertex.md#vertex)
+- [indices](Navi3DMergeVertex.md#indices)
+
+### Methods
+
+- [merge](Navi3DMergeVertex.md#merge)
+- [parse](Navi3DMergeVertex.md#parse)
+
+## Constructors
+
+### constructor
+
+• **new Navi3DMergeVertex**(): [`Navi3DMergeVertex`](Navi3DMergeVertex.md)
+
+#### Returns
+
+[`Navi3DMergeVertex`](Navi3DMergeVertex.md)
+
+## Properties
+
+### vertex
+
+• **vertex**: [`Vector3`](Vector3.md)[]
+
+#### Defined in
+
+[src/math/navigation/Navi3DMergeVertex.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DMergeVertex.ts#L6)
+
+___
+
+### indices
+
+• **indices**: `number`[]
+
+#### Defined in
+
+[src/math/navigation/Navi3DMergeVertex.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DMergeVertex.ts#L7)
+
+## Methods
+
+### merge
+
+▸ **merge**(`geometry`, `threshould?`): `this`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `geometry` | [`GeometryBase`](GeometryBase.md) | `undefined` |
+| `threshould` | `number` | `0.1` |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/navigation/Navi3DMergeVertex.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DMergeVertex.ts#L9)
+
+___
+
+### parse
+
+▸ **parse**(`geometry`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `geometry` | [`GeometryBase`](GeometryBase.md) |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/navigation/Navi3DMergeVertex.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DMergeVertex.ts#L45)
diff --git a/docs/api/classes/Navi3DMesh.md b/docs/api/classes/Navi3DMesh.md
new file mode 100644
index 00000000..c2e300a8
--- /dev/null
+++ b/docs/api/classes/Navi3DMesh.md
@@ -0,0 +1,137 @@
+# Class: Navi3DMesh
+
+### Constructors
+
+- [constructor](Navi3DMesh.md#constructor)
+
+### Accessors
+
+- [edges](Navi3DMesh.md#edges)
+- [points](Navi3DMesh.md#points)
+- [path](Navi3DMesh.md#path)
+- [triangles](Navi3DMesh.md#triangles)
+
+### Methods
+
+- [getTriangleAtPoint](Navi3DMesh.md#gettriangleatpoint)
+- [findPath](Navi3DMesh.md#findpath)
+
+## Constructors
+
+### constructor
+
+• **new Navi3DMesh**(`pointList`, `triangleIndexList`): [`Navi3DMesh`](Navi3DMesh.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pointList` | [`Vector3`](Vector3.md)[] |
+| `triangleIndexList` | `number`[][] |
+
+#### Returns
+
+[`Navi3DMesh`](Navi3DMesh.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DMesh.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DMesh.ts#L43)
+
+## Accessors
+
+### edges
+
+• `get` **edges**(): [`Navi3DEdge`](Navi3DEdge.md)[]
+
+#### Returns
+
+[`Navi3DEdge`](Navi3DEdge.md)[]
+
+#### Defined in
+
+[src/math/navigation/Navi3DMesh.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DMesh.ts#L27)
+
+___
+
+### points
+
+• `get` **points**(): [`Navi3DPoint`](Navi3DPoint.md)[]
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)[]
+
+#### Defined in
+
+[src/math/navigation/Navi3DMesh.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DMesh.ts#L31)
+
+___
+
+### path
+
+• `get` **path**(): [`Vector3`](Vector3.md)[]
+
+#### Returns
+
+[`Vector3`](Vector3.md)[]
+
+#### Defined in
+
+[src/math/navigation/Navi3DMesh.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DMesh.ts#L35)
+
+___
+
+### triangles
+
+• `get` **triangles**(): [`Navi3DTriangle`](Navi3DTriangle.md)[]
+
+#### Returns
+
+[`Navi3DTriangle`](Navi3DTriangle.md)[]
+
+#### Defined in
+
+[src/math/navigation/Navi3DMesh.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DMesh.ts#L39)
+
+## Methods
+
+### getTriangleAtPoint
+
+▸ **getTriangleAtPoint**(`point`, `threshold?`): [`IQuadNode`](../interfaces/IQuadNode.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `point` | [`Vector3`](Vector3.md) | `undefined` |
+| `threshold` | `number` | `5` |
+
+#### Returns
+
+[`IQuadNode`](../interfaces/IQuadNode.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DMesh.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DMesh.ts#L63)
+
+___
+
+### findPath
+
+▸ **findPath**(`startPt`, `endPt`, `aiRadius?`): `boolean`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `startPt` | [`Vector3`](Vector3.md) | `undefined` |
+| `endPt` | [`Vector3`](Vector3.md) | `undefined` |
+| `aiRadius` | `number` | `5` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/navigation/Navi3DMesh.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DMesh.ts#L67)
diff --git a/docs/api/classes/Navi3DPoint.md b/docs/api/classes/Navi3DPoint.md
new file mode 100644
index 00000000..2b9d84c1
--- /dev/null
+++ b/docs/api/classes/Navi3DPoint.md
@@ -0,0 +1,2386 @@
+# Class: Navi3DPoint
+
+Vector 3D
+
+## Hierarchy
+
+- [`Vector3`](Vector3.md)
+
+ ↳ **`Navi3DPoint`**
+
+ ↳↳ [`Navi3DPointFat`](Navi3DPointFat.md)
+
+### Constructors
+
+- [constructor](Navi3DPoint.md#constructor)
+
+### Properties
+
+- [MAX](Navi3DPoint.md#max)
+- [MIN](Navi3DPoint.md#min)
+- [SAFE\_MAX](Navi3DPoint.md#safe_max)
+- [SAFE\_MIN](Navi3DPoint.md#safe_min)
+- [X\_AXIS](Navi3DPoint.md#x_axis)
+- [neg\_X\_AXIS](Navi3DPoint.md#neg_x_axis)
+- [Y\_AXIS](Navi3DPoint.md#y_axis)
+- [Z\_AXIS](Navi3DPoint.md#z_axis)
+- [x](Navi3DPoint.md#x)
+- [y](Navi3DPoint.md#y)
+- [z](Navi3DPoint.md#z)
+- [w](Navi3DPoint.md#w)
+- [CALC\_VECTOR3D1](Navi3DPoint.md#calc_vector3d1)
+- [CALC\_VECTOR3D2](Navi3DPoint.md#calc_vector3d2)
+- [CALC\_VECTOR3D3](Navi3DPoint.md#calc_vector3d3)
+- [CALC\_VECTOR3D4](Navi3DPoint.md#calc_vector3d4)
+- [CALC\_VECTOR3D5](Navi3DPoint.md#calc_vector3d5)
+
+### Accessors
+
+- [ZERO](Navi3DPoint.md#zero)
+- [ONE](Navi3DPoint.md#one)
+- [LEFT](Navi3DPoint.md#left)
+- [RIGHT](Navi3DPoint.md#right)
+- [UP](Navi3DPoint.md#up)
+- [DOWN](Navi3DPoint.md#down)
+- [BACK](Navi3DPoint.md#back)
+- [FORWARD](Navi3DPoint.md#forward)
+- [a](Navi3DPoint.md#a)
+- [r](Navi3DPoint.md#r)
+- [g](Navi3DPoint.md#g)
+- [b](Navi3DPoint.md#b)
+- [length](Navi3DPoint.md#length)
+- [lengthSquared](Navi3DPoint.md#lengthsquared)
+- [position](Navi3DPoint.md#position)
+- [id](Navi3DPoint.md#id)
+
+### Methods
+
+- [getTowPointbyDir](Navi3DPoint.md#gettowpointbydir)
+- [pointToLine](Navi3DPoint.md#pointtoline)
+- [dot](Navi3DPoint.md#dot)
+- [getPoints](Navi3DPoint.md#getpoints)
+- [getPointNumbers](Navi3DPoint.md#getpointnumbers)
+- [getAngle](Navi3DPoint.md#getangle)
+- [sqrMagnitude](Navi3DPoint.md#sqrmagnitude)
+- [getZYAngle](Navi3DPoint.md#getzyangle)
+- [sub](Navi3DPoint.md#sub)
+- [add](Navi3DPoint.md#add)
+- [distance](Navi3DPoint.md#distance)
+- [squareDistance](Navi3DPoint.md#squaredistance)
+- [distanceXZ](Navi3DPoint.md#distancexz)
+- [set](Navi3DPoint.md#set)
+- [add](Navi3DPoint.md#add-1)
+- [subVectors](Navi3DPoint.md#subvectors)
+- [addScalar](Navi3DPoint.md#addscalar)
+- [subScalar](Navi3DPoint.md#subscalar)
+- [min](Navi3DPoint.md#min-1)
+- [max](Navi3DPoint.md#max-1)
+- [distanceToSquared](Navi3DPoint.md#distancetosquared)
+- [addXYZW](Navi3DPoint.md#addxyzw)
+- [clone](Navi3DPoint.md#clone)
+- [copyFrom](Navi3DPoint.md#copyfrom)
+- [decrementBy](Navi3DPoint.md#decrementby)
+- [dotProduct](Navi3DPoint.md#dotproduct)
+- [equals](Navi3DPoint.md#equals)
+- [incrementBy](Navi3DPoint.md#incrementby)
+- [divide](Navi3DPoint.md#divide)
+- [negate](Navi3DPoint.md#negate)
+- [normalize](Navi3DPoint.md#normalize)
+- [applyQuaternion](Navi3DPoint.md#applyquaternion)
+- [applyMatrix4](Navi3DPoint.md#applymatrix4)
+- [scaleBy](Navi3DPoint.md#scaleby)
+- [mul](Navi3DPoint.md#mul)
+- [scale](Navi3DPoint.md#scale)
+- [scaleToRef](Navi3DPoint.md#scaletoref)
+- [setTo](Navi3DPoint.md#setto)
+- [copy](Navi3DPoint.md#copy)
+- [subtract](Navi3DPoint.md#subtract)
+- [multiply](Navi3DPoint.md#multiply)
+- [divided](Navi3DPoint.md#divided)
+- [div](Navi3DPoint.md#div)
+- [lerp](Navi3DPoint.md#lerp)
+- [clamp](Navi3DPoint.md#clamp)
+- [toString](Navi3DPoint.md#tostring)
+- [normalizeToWay2D\_XY](Navi3DPoint.md#normalizetoway2d_xy)
+- [toArray](Navi3DPoint.md#toarray)
+- [copyToBytes](Navi3DPoint.md#copytobytes)
+- [crossProduct](Navi3DPoint.md#crossproduct)
+- [crossVectors](Navi3DPoint.md#crossvectors)
+- [multiplyScalar](Navi3DPoint.md#multiplyscalar)
+- [setFromArray](Navi3DPoint.md#setfromarray)
+- [divideScalar](Navi3DPoint.md#dividescalar)
+- [clampLength](Navi3DPoint.md#clamplength)
+- [setScalar](Navi3DPoint.md#setscalar)
+- [addScaledVector](Navi3DPoint.md#addscaledvector)
+- [pointInsideTriangle](Navi3DPoint.md#pointinsidetriangle)
+- [serialize](Navi3DPoint.md#serialize)
+- [equalPoint](Navi3DPoint.md#equalpoint)
+- [calcDistance](Navi3DPoint.md#calcdistance)
+
+## Constructors
+
+### constructor
+
+• **new Navi3DPoint**(`id`, `X`, `Y`, `Z`): [`Navi3DPoint`](Navi3DPoint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `number` |
+| `X` | `number` |
+| `Y` | `number` |
+| `Z` | `number` |
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)
+
+#### Overrides
+
+[Vector3](Vector3.md).[constructor](Vector3.md#constructor)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint.ts#L18)
+
+## Properties
+
+### MAX
+
+▪ `Static` `Readonly` **MAX**: [`Vector3`](Vector3.md)
+
+Vector maximum
+
+#### Inherited from
+
+[Vector3](Vector3.md).[MAX](Vector3.md#max)
+
+#### Defined in
+
+[src/math/Vector3.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L11)
+
+___
+
+### MIN
+
+▪ `Static` `Readonly` **MIN**: [`Vector3`](Vector3.md)
+
+Vector minimum
+
+#### Inherited from
+
+[Vector3](Vector3.md).[MIN](Vector3.md#min)
+
+#### Defined in
+
+[src/math/Vector3.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L16)
+
+___
+
+### SAFE\_MAX
+
+▪ `Static` `Readonly` **SAFE\_MAX**: [`Vector3`](Vector3.md)
+
+Vector maximum integer value
+
+#### Inherited from
+
+[Vector3](Vector3.md).[SAFE_MAX](Vector3.md#safe_max)
+
+#### Defined in
+
+[src/math/Vector3.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L21)
+
+___
+
+### SAFE\_MIN
+
+▪ `Static` `Readonly` **SAFE\_MIN**: [`Vector3`](Vector3.md)
+
+Vector minimum integer value
+
+#### Inherited from
+
+[Vector3](Vector3.md).[SAFE_MIN](Vector3.md#safe_min)
+
+#### Defined in
+
+[src/math/Vector3.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L26)
+
+___
+
+### X\_AXIS
+
+▪ `Static` `Readonly` **X\_AXIS**: [`Vector3`](Vector3.md)
+
+X axis positive axis coordinate (1, 0, 0).
+
+#### Inherited from
+
+[Vector3](Vector3.md).[X_AXIS](Vector3.md#x_axis)
+
+#### Defined in
+
+[src/math/Vector3.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L31)
+
+___
+
+### neg\_X\_AXIS
+
+▪ `Static` `Readonly` **neg\_X\_AXIS**: [`Vector3`](Vector3.md)
+
+The X-axis is negative (-1, 0, 0).
+
+#### Inherited from
+
+[Vector3](Vector3.md).[neg_X_AXIS](Vector3.md#neg_x_axis)
+
+#### Defined in
+
+[src/math/Vector3.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L36)
+
+___
+
+### Y\_AXIS
+
+▪ `Static` `Readonly` **Y\_AXIS**: [`Vector3`](Vector3.md)
+
+The y axis defined as a Vector3 object with coordinates (0,1,0).
+
+#### Inherited from
+
+[Vector3](Vector3.md).[Y_AXIS](Vector3.md#y_axis)
+
+#### Defined in
+
+[src/math/Vector3.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L41)
+
+___
+
+### Z\_AXIS
+
+▪ `Static` `Readonly` **Z\_AXIS**: [`Vector3`](Vector3.md)
+
+The z axis defined as a Vector3 object with coordinates (0,0,1).
+
+#### Inherited from
+
+[Vector3](Vector3.md).[Z_AXIS](Vector3.md#z_axis)
+
+#### Defined in
+
+[src/math/Vector3.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L46)
+
+___
+
+### x
+
+• **x**: `number` = `0`
+
+The first element of a Vector3 object, such as the x coordinate of
+a point in the three-dimensional space. The default value is 0.
+
+#### Inherited from
+
+[Vector3](Vector3.md).[x](Vector3.md#x)
+
+#### Defined in
+
+[src/math/Vector3.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L148)
+
+___
+
+### y
+
+• **y**: `number` = `0`
+
+The second element of a Vector3 object, such as the y coordinate of
+a point in the three-dimensional space. The default value is 0.
+
+#### Inherited from
+
+[Vector3](Vector3.md).[y](Vector3.md#y)
+
+#### Defined in
+
+[src/math/Vector3.ts:154](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L154)
+
+___
+
+### z
+
+• **z**: `number` = `0`
+
+The third element of a Vector3 object, such as the y coordinate of
+a point in the three-dimensional space. The default value is 0.
+
+#### Inherited from
+
+[Vector3](Vector3.md).[z](Vector3.md#z)
+
+#### Defined in
+
+[src/math/Vector3.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L160)
+
+___
+
+### w
+
+• **w**: `number` = `1`
+
+The z component of the vector,
+A three-dimensional position or projection that can be used as a perspective projection
+We can also do w in the quaternion
+
+#### Inherited from
+
+[Vector3](Vector3.md).[w](Vector3.md#w)
+
+#### Defined in
+
+[src/math/Vector3.ts:167](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L167)
+
+___
+
+### CALC\_VECTOR3D1
+
+▪ `Static` **CALC\_VECTOR3D1**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint.ts#L6)
+
+___
+
+### CALC\_VECTOR3D2
+
+▪ `Static` **CALC\_VECTOR3D2**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint.ts#L8)
+
+___
+
+### CALC\_VECTOR3D3
+
+▪ `Static` **CALC\_VECTOR3D3**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint.ts#L10)
+
+___
+
+### CALC\_VECTOR3D4
+
+▪ `Static` **CALC\_VECTOR3D4**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint.ts#L12)
+
+___
+
+### CALC\_VECTOR3D5
+
+▪ `Static` **CALC\_VECTOR3D5**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint.ts#L14)
+
+## Accessors
+
+### ZERO
+
+• `get` **ZERO**(): [`Vector3`](Vector3.md)
+
+Returns a new vector with zero x, y, and z components
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Vector3.ZERO
+
+#### Defined in
+
+[src/math/Vector3.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L91)
+
+___
+
+### ONE
+
+• `get` **ONE**(): [`Vector3`](Vector3.md)
+
+Returns a new vector whose x, y, and z components are all 1
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Vector3.ONE
+
+#### Defined in
+
+[src/math/Vector3.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L98)
+
+___
+
+### LEFT
+
+• `get` **LEFT**(): [`Vector3`](Vector3.md)
+
+Returns a new vector pointing to the left, x is -1, y is 0, and z is 0
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Vector3.LEFT
+
+#### Defined in
+
+[src/math/Vector3.ts:105](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L105)
+
+___
+
+### RIGHT
+
+• `get` **RIGHT**(): [`Vector3`](Vector3.md)
+
+Returns a new vector pointing in the right direction, where x is 1, y is 0, and z is 0
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Vector3.RIGHT
+
+#### Defined in
+
+[src/math/Vector3.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L112)
+
+___
+
+### UP
+
+• `get` **UP**(): [`Vector3`](Vector3.md)
+
+Returns a new vector pointing upwards, that is, x equals 0, y equals 1, and z equals 0
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Vector3.UP
+
+#### Defined in
+
+[src/math/Vector3.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L119)
+
+___
+
+### DOWN
+
+• `get` **DOWN**(): [`Vector3`](Vector3.md)
+
+Returns a new vector pointing down, where x is 0, y is -1, and z is 0
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Vector3.DOWN
+
+#### Defined in
+
+[src/math/Vector3.ts:126](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L126)
+
+___
+
+### BACK
+
+• `get` **BACK**(): [`Vector3`](Vector3.md)
+
+Returns a new backward vector, x equals 0, y equals 0, and z equals negative 1
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Vector3.BACK
+
+#### Defined in
+
+[src/math/Vector3.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L133)
+
+___
+
+### FORWARD
+
+• `get` **FORWARD**(): [`Vector3`](Vector3.md)
+
+Returns a new forward-pointing vector, that is, x is 0, y is 0, and z is 1
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Vector3.FORWARD
+
+#### Defined in
+
+[src/math/Vector3.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L140)
+
+___
+
+### a
+
+• `get` **a**(): `number`
+
+get the w component
+
+#### Returns
+
+`number`
+
+value of w
+
+#### Inherited from
+
+Vector3.a
+
+#### Defined in
+
+[src/math/Vector3.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L233)
+
+• `set` **a**(`value`): `void`
+
+Set w component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Vector3.a
+
+#### Defined in
+
+[src/math/Vector3.ts:201](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L201)
+
+___
+
+### r
+
+• `get` **r**(): `number`
+
+get the x component
+
+#### Returns
+
+`number`
+
+value of x
+
+#### Inherited from
+
+Vector3.r
+
+#### Defined in
+
+[src/math/Vector3.ts:241](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L241)
+
+• `set` **r**(`value`): `void`
+
+Set x component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Vector3.r
+
+#### Defined in
+
+[src/math/Vector3.ts:209](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L209)
+
+___
+
+### g
+
+• `get` **g**(): `number`
+
+get the y component
+
+#### Returns
+
+`number`
+
+value of y
+
+#### Inherited from
+
+Vector3.g
+
+#### Defined in
+
+[src/math/Vector3.ts:249](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L249)
+
+• `set` **g**(`value`): `void`
+
+Set the y component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Vector3.g
+
+#### Defined in
+
+[src/math/Vector3.ts:217](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L217)
+
+___
+
+### b
+
+• `get` **b**(): `number`
+
+get the z component
+
+#### Returns
+
+`number`
+
+value of z
+
+#### Inherited from
+
+Vector3.b
+
+#### Defined in
+
+[src/math/Vector3.ts:257](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L257)
+
+• `set` **b**(`value`): `void`
+
+Set z component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Vector3.b
+
+#### Defined in
+
+[src/math/Vector3.ts:225](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L225)
+
+___
+
+### length
+
+• `get` **length**(): `number`
+
+The length of the vector, the distance from the origin (0, 0, 0) to (x, y, z)
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Vector3.length
+
+#### Defined in
+
+[src/math/Vector3.ts:264](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L264)
+
+___
+
+### lengthSquared
+
+• `get` **lengthSquared**(): `number`
+
+You get the square of the length of the vector
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Vector3.lengthSquared
+
+#### Defined in
+
+[src/math/Vector3.ts:272](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L272)
+
+___
+
+### position
+
+• `get` **position**(): `this`
+
+Get the current vector
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+Vector3.position
+
+#### Defined in
+
+[src/math/Vector3.ts:279](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L279)
+
+___
+
+### id
+
+• `get` **id**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint.ts#L23)
+
+## Methods
+
+### getTowPointbyDir
+
+▸ **getTowPointbyDir**(`dir`, `tp1`, `tp2`, `width`, `aix`): `void`
+
+Obtain a vertical line segment with width through an orientation
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `dir` | [`Vector3`](Vector3.md) |
+| `tp1` | [`Vector3`](Vector3.md) |
+| `tp2` | [`Vector3`](Vector3.md) |
+| `width` | `number` |
+| `aix` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[getTowPointbyDir](Vector3.md#gettowpointbydir)
+
+#### Defined in
+
+[src/math/Vector3.ts:290](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L290)
+
+___
+
+### pointToLine
+
+▸ **pointToLine**(`point1`, `point2`, `position`): `number`
+
+Calculate the distance from the point to the line
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `point1` | [`Vector3`](Vector3.md) | Starting point of line segment |
+| `point2` | [`Vector3`](Vector3.md) | End point of line segment |
+| `position` | [`Vector3`](Vector3.md) | Point position |
+
+#### Returns
+
+`number`
+
+Distance from a point to a line segment
+
+#### Inherited from
+
+[Vector3](Vector3.md).[pointToLine](Vector3.md#pointtoline)
+
+#### Defined in
+
+[src/math/Vector3.ts:319](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L319)
+
+___
+
+### dot
+
+▸ **dot**(`a`, `b`): `number`
+
+Take the dot product of two vectors.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | Vector a |
+| `b` | [`Vector3`](Vector3.md) | Vector b |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[dot](Vector3.md#dot)
+
+#### Defined in
+
+[src/math/Vector3.ts:353](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L353)
+
+___
+
+### getPoints
+
+▸ **getPoints**(`total`, `randSeed`): `any`[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `total` | `number` |
+| `randSeed` | `number` |
+
+#### Returns
+
+`any`[]
+
+#### Inherited from
+
+[Vector3](Vector3.md).[getPoints](Vector3.md#getpoints)
+
+#### Defined in
+
+[src/math/Vector3.ts:357](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L357)
+
+___
+
+### getPointNumbers
+
+▸ **getPointNumbers**(`total`, `randSeed`): `any`[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `total` | `number` |
+| `randSeed` | `number` |
+
+#### Returns
+
+`any`[]
+
+#### Inherited from
+
+[Vector3](Vector3.md).[getPointNumbers](Vector3.md#getpointnumbers)
+
+#### Defined in
+
+[src/math/Vector3.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L366)
+
+___
+
+### getAngle
+
+▸ **getAngle**(`from`, `to`): `number`
+
+Returns the Angle, in degrees, between the source vector and the target vector.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `from` | [`Vector3`](Vector3.md) | source vector. |
+| `to` | [`Vector3`](Vector3.md) | target vector. |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[getAngle](Vector3.md#getangle)
+
+#### Defined in
+
+[src/math/Vector3.ts:380](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L380)
+
+___
+
+### sqrMagnitude
+
+▸ **sqrMagnitude**(`arg0`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[sqrMagnitude](Vector3.md#sqrmagnitude)
+
+#### Defined in
+
+[src/math/Vector3.ts:385](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L385)
+
+___
+
+### getZYAngle
+
+▸ **getZYAngle**(`zd`, `yd`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `zd` | [`Vector3`](Vector3.md) |
+| `yd` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[getZYAngle](Vector3.md#getzyangle)
+
+#### Defined in
+
+[src/math/Vector3.ts:389](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L389)
+
+___
+
+### sub
+
+▸ **sub**(`a`, `b`, `target?`): [`Vector3`](Vector3.md)
+
+Subtract two vectors
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | Vector a |
+| `b` | [`Vector3`](Vector3.md) | `undefined` | Vector b |
+| `target` | [`Vector3`](Vector3.md) | `null` | output vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[sub](Vector3.md#sub)
+
+#### Defined in
+
+[src/math/Vector3.ts:399](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L399)
+
+___
+
+### add
+
+▸ **add**(`a`, `b`, `target?`): [`Vector3`](Vector3.md)
+
+Add two vectors
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | Vector a |
+| `b` | [`Vector3`](Vector3.md) | `undefined` | Vector b |
+| `target` | [`Vector3`](Vector3.md) | `null` | output vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[add](Vector3.md#add)
+
+#### Defined in
+
+[src/math/Vector3.ts:415](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L415)
+
+___
+
+### distance
+
+▸ **distance**(`pt1`, `pt2`): `number`
+
+Calculate the distance between two vectors
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pt1` | [`Vector3`](Vector3.md) | Vector 1 |
+| `pt2` | [`Vector3`](Vector3.md) | Vector 2 |
+
+#### Returns
+
+`number`
+
+number The distance between two vectors
+
+#### Inherited from
+
+[Vector3](Vector3.md).[distance](Vector3.md#distance)
+
+#### Defined in
+
+[src/math/Vector3.ts:458](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L458)
+
+___
+
+### squareDistance
+
+▸ **squareDistance**(`pt1`, `pt2`): `number`
+
+Calculate the square distance between two vectors
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pt1` | [`Vector3`](Vector3.md) | Vector 1 |
+| `pt2` | [`Vector3`](Vector3.md) | Vector 2 |
+
+#### Returns
+
+`number`
+
+number The square distance between two vectors
+
+#### Inherited from
+
+[Vector3](Vector3.md).[squareDistance](Vector3.md#squaredistance)
+
+#### Defined in
+
+[src/math/Vector3.ts:471](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L471)
+
+___
+
+### distanceXZ
+
+▸ **distanceXZ**(`pt1`, `pt2`): `number`
+
+Calculate the distance between two vectors XZ axes
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pt1` | [`Vector3`](Vector3.md) | Vector 1 |
+| `pt2` | [`Vector3`](Vector3.md) | Vector 2 |
+
+#### Returns
+
+`number`
+
+number The distance between two vectors
+
+#### Inherited from
+
+[Vector3](Vector3.md).[distanceXZ](Vector3.md#distancexz)
+
+#### Defined in
+
+[src/math/Vector3.ts:483](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L483)
+
+___
+
+### set
+
+▸ **set**(`x`, `y`, `z`, `w?`): [`Navi3DPoint`](Navi3DPoint.md)
+
+Sets the current vector x, y, z, and w components
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `x` | `number` | `undefined` |
+| `y` | `number` | `undefined` |
+| `z` | `number` | `undefined` |
+| `w` | `number` | `1` |
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[set](Vector3.md#set)
+
+#### Defined in
+
+[src/math/Vector3.ts:498](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L498)
+
+___
+
+### add
+
+▸ **add**(`a`, `target?`): [`Vector3`](Vector3.md)
+
+The vector is added to the vector
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | Additive vector |
+| `target` | [`Vector3`](Vector3.md) | `null` | Return vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+result
+
+#### Inherited from
+
+[Vector3](Vector3.md).[add](Vector3.md#add-1)
+
+#### Defined in
+
+[src/math/Vector3.ts:512](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L512)
+
+___
+
+### subVectors
+
+▸ **subVectors**(`a`, `b`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) |
+| `b` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[subVectors](Vector3.md#subvectors)
+
+#### Defined in
+
+[src/math/Vector3.ts:527](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L527)
+
+___
+
+### addScalar
+
+▸ **addScalar**(`scalar`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scalar` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[addScalar](Vector3.md#addscalar)
+
+#### Defined in
+
+[src/math/Vector3.ts:534](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L534)
+
+___
+
+### subScalar
+
+▸ **subScalar**(`scalar`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scalar` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[subScalar](Vector3.md#subscalar)
+
+#### Defined in
+
+[src/math/Vector3.ts:541](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L541)
+
+___
+
+### min
+
+▸ **min**(`v`, `target?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+| `target` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[min](Vector3.md#min-1)
+
+#### Defined in
+
+[src/math/Vector3.ts:548](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L548)
+
+___
+
+### max
+
+▸ **max**(`v`, `target?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+| `target` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[max](Vector3.md#max-1)
+
+#### Defined in
+
+[src/math/Vector3.ts:555](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L555)
+
+___
+
+### distanceToSquared
+
+▸ **distanceToSquared**(`v`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[distanceToSquared](Vector3.md#distancetosquared)
+
+#### Defined in
+
+[src/math/Vector3.ts:562](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L562)
+
+___
+
+### addXYZW
+
+▸ **addXYZW**(`x`, `y`, `z`, `w`, `target?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `x` | `number` | `undefined` |
+| `y` | `number` | `undefined` |
+| `z` | `number` | `undefined` |
+| `w` | `number` | `undefined` |
+| `target` | [`Vector3`](Vector3.md) | `null` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[addXYZW](Vector3.md#addxyzw)
+
+#### Defined in
+
+[src/math/Vector3.ts:569](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L569)
+
+___
+
+### clone
+
+▸ **clone**(): [`Vector3`](Vector3.md)
+
+Clone a vector with the same components as the current vector
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[clone](Vector3.md#clone)
+
+#### Defined in
+
+[src/math/Vector3.ts:587](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L587)
+
+___
+
+### copyFrom
+
+▸ **copyFrom**(`src`): [`Vector3`](Vector3.md)
+
+The components of the source vector are set to the current vector
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `src` | [`Vector3`](Vector3.md) | Original vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[copyFrom](Vector3.md#copyfrom)
+
+#### Defined in
+
+[src/math/Vector3.ts:596](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L596)
+
+___
+
+### decrementBy
+
+▸ **decrementBy**(`a`): `void`
+
+Subtract two vectors and assign the result to yourself
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | Minus vector |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[decrementBy](Vector3.md#decrementby)
+
+#### Defined in
+
+[src/math/Vector3.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L609)
+
+___
+
+### dotProduct
+
+▸ **dotProduct**(`a`): `number`
+
+Calculate the dot product of two vectors and return the Angle relationship between the two vectors
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | The vector that you need to compute |
+
+#### Returns
+
+`number`
+
+number Returns the Angle relationship between two vectors
+
+#### Inherited from
+
+[Vector3](Vector3.md).[dotProduct](Vector3.md#dotproduct)
+
+#### Defined in
+
+[src/math/Vector3.ts:621](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L621)
+
+___
+
+### equals
+
+▸ **equals**(`toCompare`, `allFour?`): `boolean`
+
+Find whether the values of two vectors are identical
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `toCompare` | [`Vector3`](Vector3.md) | `undefined` | The vector to compare |
+| `allFour` | `boolean` | `false` | The default parameter is 1, whether to compare the w component |
+
+#### Returns
+
+`boolean`
+
+A value of true if the specified Vector3 object is equal to the current Vector3 object; false if it is not equal.
+
+#### Inherited from
+
+[Vector3](Vector3.md).[equals](Vector3.md#equals)
+
+#### Defined in
+
+[src/math/Vector3.ts:643](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L643)
+
+___
+
+### incrementBy
+
+▸ **incrementBy**(`a`): `void`
+
+The current vector plus is equal to the vector, plus just the x, y, and z components
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | vector |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[incrementBy](Vector3.md#incrementby)
+
+#### Defined in
+
+[src/math/Vector3.ts:663](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L663)
+
+___
+
+### divide
+
+▸ **divide**(`v`): [`Vector3`](Vector3.md)
+
+The current vector divided by the vector or component
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | `any` | The vector or component that you want to divide |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3 Returns the result of the calculation
+
+#### Inherited from
+
+[Vector3](Vector3.md).[divide](Vector3.md#divide)
+
+#### Defined in
+
+[src/math/Vector3.ts:675](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L675)
+
+___
+
+### negate
+
+▸ **negate**(): [`Navi3DPoint`](Navi3DPoint.md)
+
+Sets the current Vector3 object to its inverse. The inverse object
+is also considered the opposite of the original object. The value of
+the x, y, and z properties of the current Vector3 object is changed
+to -x, -y, and -z.
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[negate](Vector3.md#negate)
+
+#### Defined in
+
+[src/math/Vector3.ts:692](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L692)
+
+___
+
+### normalize
+
+▸ **normalize**(`thickness?`): [`Vector3`](Vector3.md)
+
+Scales the line segment between(0,0) and the current point to a set
+length.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `thickness` | `number` | `1` | The scaling value. For example, if the current Vector3 object is (0,3,4), and you normalize it to 1, the point returned is at(0,0.6,0.8). |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[normalize](Vector3.md#normalize)
+
+#### Defined in
+
+[src/math/Vector3.ts:707](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L707)
+
+___
+
+### applyQuaternion
+
+▸ **applyQuaternion**(`q`): [`Navi3DPoint`](Navi3DPoint.md)
+
+Apply the rotation quaternion
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `q` | `any` | quaternion |
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[applyQuaternion](Vector3.md#applyquaternion)
+
+#### Defined in
+
+[src/math/Vector3.ts:724](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L724)
+
+___
+
+### applyMatrix4
+
+▸ **applyMatrix4**(`m`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m` | `any` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[applyMatrix4](Vector3.md#applymatrix4)
+
+#### Defined in
+
+[src/math/Vector3.ts:749](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L749)
+
+___
+
+### scaleBy
+
+▸ **scaleBy**(`s`): [`Vector3`](Vector3.md)
+
+Scales the current Vector3 object by a scalar, a magnitude. The
+Vector3 object's x, y, and z elements are multiplied by the scalar
+number specified in the parameter. For example, if the vector is
+scaled by ten, the result is a vector that is ten times longer. The
+scalar can also change the direction of the vector. Multiplying the
+vector by a negative number reverses its direction.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `s` | `number` | A multiplier (scalar) used to scale a Vector3 object. |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[scaleBy](Vector3.md#scaleby)
+
+#### Defined in
+
+[src/math/Vector3.ts:763](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L763)
+
+___
+
+### mul
+
+▸ **mul**(`s`): [`Vector3`](Vector3.md)
+
+The current vector times the scalar s
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `s` | `number` | scalar s |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[mul](Vector3.md#mul)
+
+#### Defined in
+
+[src/math/Vector3.ts:775](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L775)
+
+___
+
+### scale
+
+▸ **scale**(`s`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `s` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[scale](Vector3.md#scale)
+
+#### Defined in
+
+[src/math/Vector3.ts:783](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L783)
+
+___
+
+### scaleToRef
+
+▸ **scaleToRef**(`s`, `ref`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `s` | `number` |
+| `ref` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[scaleToRef](Vector3.md#scaletoref)
+
+#### Defined in
+
+[src/math/Vector3.ts:790](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L790)
+
+___
+
+### setTo
+
+▸ **setTo**(`xa`, `ya`, `za`, `wa?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `xa` | `number` | `undefined` | The first element, such as the x coordinate. |
+| `ya` | `number` | `undefined` | The second element, such as the y coordinate. |
+| `za` | `number` | `undefined` | The third element, such as the z coordinate. |
+| `wa` | `number` | `1` | - |
+
+#### Returns
+
+`void`
+
+**`Language`**
+
+en_US
+Sets the members of Vector3 to the specified values
+
+#### Inherited from
+
+[Vector3](Vector3.md).[setTo](Vector3.md#setto)
+
+#### Defined in
+
+[src/math/Vector3.ts:809](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L809)
+
+___
+
+### copy
+
+▸ **copy**(`src`): `this`
+
+Copy the components of the source vector to this vector
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `src` | [`Vector3`](Vector3.md) | Source vector |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[copy](Vector3.md#copy)
+
+#### Defined in
+
+[src/math/Vector3.ts:821](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L821)
+
+___
+
+### subtract
+
+▸ **subtract**(`a`, `target?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | The Vector3 object to be subtracted from the current Vector3 object. |
+| `target` | [`Vector3`](Vector3.md) | `null` | - |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+A new Vector3 object that is the difference between the
+ current Vector3 and the specified Vector3 object.
+
+**`Language`**
+
+en_US
+Subtracts the value of the x, y, and z elements of the current
+Vector3 object from the values of the x, y, and z elements of
+another Vector3 object. The subtract()
method does not
+change the current Vector3 object. Instead, this method returns a
+new Vector3 object with the new values.
+
+#### Inherited from
+
+[Vector3](Vector3.md).[subtract](Vector3.md#subtract)
+
+#### Defined in
+
+[src/math/Vector3.ts:842](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L842)
+
+___
+
+### multiply
+
+▸ **multiply**(`other`, `target?`): [`Vector3`](Vector3.md)
+
+Let's multiply that vector times that vector.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `other` | [`Vector3`](Vector3.md) | `undefined` | Multiplied vectors |
+| `target` | [`Vector3`](Vector3.md) | `null` | Returned vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[multiply](Vector3.md#multiply)
+
+#### Defined in
+
+[src/math/Vector3.ts:856](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L856)
+
+___
+
+### divided
+
+▸ **divided**(`other`, `target?`): [`Vector3`](Vector3.md)
+
+Let's divide this vector by this vector.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `other` | [`Vector3`](Vector3.md) | `undefined` | The vector that divides |
+| `target` | [`Vector3`](Vector3.md) | `null` | Returned vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[divided](Vector3.md#divided)
+
+#### Defined in
+
+[src/math/Vector3.ts:879](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L879)
+
+___
+
+### div
+
+▸ **div**(`v`, `target?`): [`Vector3`](Vector3.md)
+
+Divide that vector by the scalar
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | `number` | The scalar that divides |
+| `target?` | [`Vector3`](Vector3.md) | Output a Vector3 vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[div](Vector3.md#div)
+
+#### Defined in
+
+[src/math/Vector3.ts:902](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L902)
+
+___
+
+### lerp
+
+▸ **lerp**(`v0`, `v1`, `t`): `void`
+
+Computes the linear interpolation between two Vector3, and the result is the current object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v0` | [`Vector3`](Vector3.md) | Vector 1 |
+| `v1` | [`Vector3`](Vector3.md) | Vector 2 |
+| `t` | `number` | Interpolation factor |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[lerp](Vector3.md#lerp)
+
+#### Defined in
+
+[src/math/Vector3.ts:922](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L922)
+
+___
+
+### clamp
+
+▸ **clamp**(`min`, `max`): [`Vector3`](Vector3.md)
+
+The x, y, and z components of this vector are rounded upward to the nearest integers.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `min` | [`Vector3`](Vector3.md) | minimum value |
+| `max` | [`Vector3`](Vector3.md) | maximum value |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[clamp](Vector3.md#clamp)
+
+#### Defined in
+
+[src/math/Vector3.ts:944](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L944)
+
+___
+
+### toString
+
+▸ **toString**(): `string`
+
+Returns the string form of the current vector
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[toString](Vector3.md#tostring)
+
+#### Defined in
+
+[src/math/Vector3.ts:1010](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1010)
+
+___
+
+### normalizeToWay2D\_XY
+
+▸ **normalizeToWay2D_XY**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[normalizeToWay2D_XY](Vector3.md#normalizetoway2d_xy)
+
+#### Defined in
+
+[src/math/Vector3.ts:1026](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1026)
+
+___
+
+### toArray
+
+▸ **toArray**(): `number`[]
+
+#### Returns
+
+`number`[]
+
+#### Inherited from
+
+[Vector3](Vector3.md).[toArray](Vector3.md#toarray)
+
+#### Defined in
+
+[src/math/Vector3.ts:1044](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1044)
+
+___
+
+### copyToBytes
+
+▸ **copyToBytes**(`byte`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `byte` | `DataView` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[copyToBytes](Vector3.md#copytobytes)
+
+#### Defined in
+
+[src/math/Vector3.ts:1048](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1048)
+
+___
+
+### crossProduct
+
+▸ **crossProduct**(`a`, `target?`): [`Vector3`](Vector3.md)
+
+You take the cross product of two vectors,
+The cross product is going to be the perpendicular vector between these two vectors
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | Take the cross product of another vector |
+| `target` | [`Vector3`](Vector3.md) | `null` | - |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3 returns the cross product vector
+
+#### Inherited from
+
+[Vector3](Vector3.md).[crossProduct](Vector3.md#crossproduct)
+
+#### Defined in
+
+[src/math/Vector3.ts:1060](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1060)
+
+___
+
+### crossVectors
+
+▸ **crossVectors**(`a`, `b`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) |
+| `b` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[crossVectors](Vector3.md#crossvectors)
+
+#### Defined in
+
+[src/math/Vector3.ts:1069](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1069)
+
+___
+
+### multiplyScalar
+
+▸ **multiplyScalar**(`scalar`): [`Navi3DPoint`](Navi3DPoint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scalar` | `number` |
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[multiplyScalar](Vector3.md#multiplyscalar)
+
+#### Defined in
+
+[src/math/Vector3.ts:1074](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1074)
+
+___
+
+### setFromArray
+
+▸ **setFromArray**(`array`, `firstElementPos?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `array` | `number`[] | `undefined` |
+| `firstElementPos` | `number` | `0` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[setFromArray](Vector3.md#setfromarray)
+
+#### Defined in
+
+[src/math/Vector3.ts:1082](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1082)
+
+___
+
+### divideScalar
+
+▸ **divideScalar**(`scalar`): [`Navi3DPoint`](Navi3DPoint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scalar` | `any` |
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[divideScalar](Vector3.md#dividescalar)
+
+#### Defined in
+
+[src/math/Vector3.ts:1088](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1088)
+
+___
+
+### clampLength
+
+▸ **clampLength**(`min`, `max`): [`Navi3DPoint`](Navi3DPoint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `min` | `number` |
+| `max` | `number` |
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[clampLength](Vector3.md#clamplength)
+
+#### Defined in
+
+[src/math/Vector3.ts:1092](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1092)
+
+___
+
+### setScalar
+
+▸ **setScalar**(`value`): [`Navi3DPoint`](Navi3DPoint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[setScalar](Vector3.md#setscalar)
+
+#### Defined in
+
+[src/math/Vector3.ts:1097](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1097)
+
+___
+
+### addScaledVector
+
+▸ **addScaledVector**(`v`, `scale`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+| `scale` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[addScaledVector](Vector3.md#addscaledvector)
+
+#### Defined in
+
+[src/math/Vector3.ts:1104](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1104)
+
+___
+
+### pointInsideTriangle
+
+▸ **pointInsideTriangle**(`pt`, `pt0`, `pt1`, `pt2`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pt` | [`Vector3`](Vector3.md) |
+| `pt0` | [`Vector3`](Vector3.md) |
+| `pt1` | [`Vector3`](Vector3.md) |
+| `pt2` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[pointInsideTriangle](Vector3.md#pointinsidetriangle)
+
+#### Defined in
+
+[src/math/Vector3.ts:1133](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1133)
+
+___
+
+### serialize
+
+▸ **serialize**(`position`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `position` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[serialize](Vector3.md#serialize)
+
+#### Defined in
+
+[src/math/Vector3.ts:1162](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1162)
+
+___
+
+### equalPoint
+
+▸ **equalPoint**(`p1`, `p2`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `p1` | [`Vector3`](Vector3.md) |
+| `p2` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint.ts#L27)
+
+___
+
+### calcDistance
+
+▸ **calcDistance**(`pt1`, `pt2`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pt1` | [`Vector3`](Vector3.md) |
+| `pt2` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint.ts#L31)
diff --git a/docs/api/classes/Navi3DPoint2D.md b/docs/api/classes/Navi3DPoint2D.md
new file mode 100644
index 00000000..1943a3d4
--- /dev/null
+++ b/docs/api/classes/Navi3DPoint2D.md
@@ -0,0 +1,156 @@
+# Class: Navi3DPoint2D
+
+### Constructors
+
+- [constructor](Navi3DPoint2D.md#constructor)
+
+### Properties
+
+- [x](Navi3DPoint2D.md#x)
+- [y](Navi3DPoint2D.md#y)
+
+### Accessors
+
+- [length](Navi3DPoint2D.md#length)
+
+### Methods
+
+- [setTo](Navi3DPoint2D.md#setto)
+- [equals](Navi3DPoint2D.md#equals)
+- [equalPoint](Navi3DPoint2D.md#equalpoint)
+- [clone](Navi3DPoint2D.md#clone)
+- [normalize](Navi3DPoint2D.md#normalize)
+
+## Constructors
+
+### constructor
+
+• **new Navi3DPoint2D**(): [`Navi3DPoint2D`](Navi3DPoint2D.md)
+
+#### Returns
+
+[`Navi3DPoint2D`](Navi3DPoint2D.md)
+
+## Properties
+
+### x
+
+• **x**: `number`
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint2D.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint2D.ts#L2)
+
+___
+
+### y
+
+• **y**: `number`
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint2D.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint2D.ts#L4)
+
+## Accessors
+
+### length
+
+• `get` **length**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint2D.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint2D.ts#L19)
+
+## Methods
+
+### setTo
+
+▸ **setTo**(`X`, `Y`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `X` | `number` |
+| `Y` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint2D.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint2D.ts#L6)
+
+___
+
+### equals
+
+▸ **equals**(`X`, `Y`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `X` | `number` |
+| `Y` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint2D.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint2D.ts#L11)
+
+___
+
+### equalPoint
+
+▸ **equalPoint**(`pt`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pt` | [`Navi3DPoint2D`](Navi3DPoint2D.md) |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint2D.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint2D.ts#L15)
+
+___
+
+### clone
+
+▸ **clone**(): [`Navi3DPoint2D`](Navi3DPoint2D.md)
+
+#### Returns
+
+[`Navi3DPoint2D`](Navi3DPoint2D.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint2D.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint2D.ts#L23)
+
+___
+
+### normalize
+
+▸ **normalize**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint2D.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint2D.ts#L29)
diff --git a/docs/api/classes/Navi3DPointFat.md b/docs/api/classes/Navi3DPointFat.md
new file mode 100644
index 00000000..f67c762a
--- /dev/null
+++ b/docs/api/classes/Navi3DPointFat.md
@@ -0,0 +1,2476 @@
+# Class: Navi3DPointFat
+
+Vector 3D
+
+## Hierarchy
+
+- [`Navi3DPoint`](Navi3DPoint.md)
+
+ ↳ **`Navi3DPointFat`**
+
+### Constructors
+
+- [constructor](Navi3DPointFat.md#constructor)
+
+### Properties
+
+- [MAX](Navi3DPointFat.md#max)
+- [MIN](Navi3DPointFat.md#min)
+- [SAFE\_MAX](Navi3DPointFat.md#safe_max)
+- [SAFE\_MIN](Navi3DPointFat.md#safe_min)
+- [X\_AXIS](Navi3DPointFat.md#x_axis)
+- [neg\_X\_AXIS](Navi3DPointFat.md#neg_x_axis)
+- [Y\_AXIS](Navi3DPointFat.md#y_axis)
+- [Z\_AXIS](Navi3DPointFat.md#z_axis)
+- [x](Navi3DPointFat.md#x)
+- [y](Navi3DPointFat.md#y)
+- [z](Navi3DPointFat.md#z)
+- [w](Navi3DPointFat.md#w)
+- [CALC\_VECTOR3D1](Navi3DPointFat.md#calc_vector3d1)
+- [CALC\_VECTOR3D2](Navi3DPointFat.md#calc_vector3d2)
+- [CALC\_VECTOR3D3](Navi3DPointFat.md#calc_vector3d3)
+- [CALC\_VECTOR3D4](Navi3DPointFat.md#calc_vector3d4)
+- [CALC\_VECTOR3D5](Navi3DPointFat.md#calc_vector3d5)
+- [radius](Navi3DPointFat.md#radius)
+
+### Accessors
+
+- [ZERO](Navi3DPointFat.md#zero)
+- [ONE](Navi3DPointFat.md#one)
+- [LEFT](Navi3DPointFat.md#left)
+- [RIGHT](Navi3DPointFat.md#right)
+- [UP](Navi3DPointFat.md#up)
+- [DOWN](Navi3DPointFat.md#down)
+- [BACK](Navi3DPointFat.md#back)
+- [FORWARD](Navi3DPointFat.md#forward)
+- [a](Navi3DPointFat.md#a)
+- [r](Navi3DPointFat.md#r)
+- [g](Navi3DPointFat.md#g)
+- [b](Navi3DPointFat.md#b)
+- [length](Navi3DPointFat.md#length)
+- [lengthSquared](Navi3DPointFat.md#lengthsquared)
+- [position](Navi3DPointFat.md#position)
+- [id](Navi3DPointFat.md#id)
+- [ownerPoint](Navi3DPointFat.md#ownerpoint)
+- [ownerEdge](Navi3DPointFat.md#owneredge)
+
+### Methods
+
+- [getTowPointbyDir](Navi3DPointFat.md#gettowpointbydir)
+- [pointToLine](Navi3DPointFat.md#pointtoline)
+- [dot](Navi3DPointFat.md#dot)
+- [getPoints](Navi3DPointFat.md#getpoints)
+- [getPointNumbers](Navi3DPointFat.md#getpointnumbers)
+- [getAngle](Navi3DPointFat.md#getangle)
+- [sqrMagnitude](Navi3DPointFat.md#sqrmagnitude)
+- [getZYAngle](Navi3DPointFat.md#getzyangle)
+- [sub](Navi3DPointFat.md#sub)
+- [add](Navi3DPointFat.md#add)
+- [distance](Navi3DPointFat.md#distance)
+- [squareDistance](Navi3DPointFat.md#squaredistance)
+- [distanceXZ](Navi3DPointFat.md#distancexz)
+- [set](Navi3DPointFat.md#set)
+- [add](Navi3DPointFat.md#add-1)
+- [subVectors](Navi3DPointFat.md#subvectors)
+- [addScalar](Navi3DPointFat.md#addscalar)
+- [subScalar](Navi3DPointFat.md#subscalar)
+- [min](Navi3DPointFat.md#min-1)
+- [max](Navi3DPointFat.md#max-1)
+- [distanceToSquared](Navi3DPointFat.md#distancetosquared)
+- [addXYZW](Navi3DPointFat.md#addxyzw)
+- [clone](Navi3DPointFat.md#clone)
+- [copyFrom](Navi3DPointFat.md#copyfrom)
+- [decrementBy](Navi3DPointFat.md#decrementby)
+- [dotProduct](Navi3DPointFat.md#dotproduct)
+- [equals](Navi3DPointFat.md#equals)
+- [incrementBy](Navi3DPointFat.md#incrementby)
+- [divide](Navi3DPointFat.md#divide)
+- [negate](Navi3DPointFat.md#negate)
+- [normalize](Navi3DPointFat.md#normalize)
+- [applyQuaternion](Navi3DPointFat.md#applyquaternion)
+- [applyMatrix4](Navi3DPointFat.md#applymatrix4)
+- [scaleBy](Navi3DPointFat.md#scaleby)
+- [mul](Navi3DPointFat.md#mul)
+- [scale](Navi3DPointFat.md#scale)
+- [scaleToRef](Navi3DPointFat.md#scaletoref)
+- [setTo](Navi3DPointFat.md#setto)
+- [copy](Navi3DPointFat.md#copy)
+- [subtract](Navi3DPointFat.md#subtract)
+- [multiply](Navi3DPointFat.md#multiply)
+- [divided](Navi3DPointFat.md#divided)
+- [div](Navi3DPointFat.md#div)
+- [lerp](Navi3DPointFat.md#lerp)
+- [clamp](Navi3DPointFat.md#clamp)
+- [toString](Navi3DPointFat.md#tostring)
+- [normalizeToWay2D\_XY](Navi3DPointFat.md#normalizetoway2d_xy)
+- [toArray](Navi3DPointFat.md#toarray)
+- [copyToBytes](Navi3DPointFat.md#copytobytes)
+- [crossProduct](Navi3DPointFat.md#crossproduct)
+- [crossVectors](Navi3DPointFat.md#crossvectors)
+- [multiplyScalar](Navi3DPointFat.md#multiplyscalar)
+- [setFromArray](Navi3DPointFat.md#setfromarray)
+- [divideScalar](Navi3DPointFat.md#dividescalar)
+- [clampLength](Navi3DPointFat.md#clamplength)
+- [setScalar](Navi3DPointFat.md#setscalar)
+- [addScaledVector](Navi3DPointFat.md#addscaledvector)
+- [pointInsideTriangle](Navi3DPointFat.md#pointinsidetriangle)
+- [serialize](Navi3DPointFat.md#serialize)
+- [equalPoint](Navi3DPointFat.md#equalpoint)
+- [calcDistance](Navi3DPointFat.md#calcdistance)
+- [scalePoint](Navi3DPointFat.md#scalepoint)
+
+## Constructors
+
+### constructor
+
+• **new Navi3DPointFat**(`_point`, `_edge`): [`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_point` | [`Navi3DPoint`](Navi3DPoint.md) |
+| `_edge` | [`Navi3DEdge`](Navi3DEdge.md) |
+
+#### Returns
+
+[`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Overrides
+
+[Navi3DPoint](Navi3DPoint.md).[constructor](Navi3DPoint.md#constructor)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPointFat.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPointFat.ts#L11)
+
+## Properties
+
+### MAX
+
+▪ `Static` `Readonly` **MAX**: [`Vector3`](Vector3.md)
+
+Vector maximum
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[MAX](Navi3DPoint.md#max)
+
+#### Defined in
+
+[src/math/Vector3.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L11)
+
+___
+
+### MIN
+
+▪ `Static` `Readonly` **MIN**: [`Vector3`](Vector3.md)
+
+Vector minimum
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[MIN](Navi3DPoint.md#min)
+
+#### Defined in
+
+[src/math/Vector3.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L16)
+
+___
+
+### SAFE\_MAX
+
+▪ `Static` `Readonly` **SAFE\_MAX**: [`Vector3`](Vector3.md)
+
+Vector maximum integer value
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[SAFE_MAX](Navi3DPoint.md#safe_max)
+
+#### Defined in
+
+[src/math/Vector3.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L21)
+
+___
+
+### SAFE\_MIN
+
+▪ `Static` `Readonly` **SAFE\_MIN**: [`Vector3`](Vector3.md)
+
+Vector minimum integer value
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[SAFE_MIN](Navi3DPoint.md#safe_min)
+
+#### Defined in
+
+[src/math/Vector3.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L26)
+
+___
+
+### X\_AXIS
+
+▪ `Static` `Readonly` **X\_AXIS**: [`Vector3`](Vector3.md)
+
+X axis positive axis coordinate (1, 0, 0).
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[X_AXIS](Navi3DPoint.md#x_axis)
+
+#### Defined in
+
+[src/math/Vector3.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L31)
+
+___
+
+### neg\_X\_AXIS
+
+▪ `Static` `Readonly` **neg\_X\_AXIS**: [`Vector3`](Vector3.md)
+
+The X-axis is negative (-1, 0, 0).
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[neg_X_AXIS](Navi3DPoint.md#neg_x_axis)
+
+#### Defined in
+
+[src/math/Vector3.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L36)
+
+___
+
+### Y\_AXIS
+
+▪ `Static` `Readonly` **Y\_AXIS**: [`Vector3`](Vector3.md)
+
+The y axis defined as a Vector3 object with coordinates (0,1,0).
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[Y_AXIS](Navi3DPoint.md#y_axis)
+
+#### Defined in
+
+[src/math/Vector3.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L41)
+
+___
+
+### Z\_AXIS
+
+▪ `Static` `Readonly` **Z\_AXIS**: [`Vector3`](Vector3.md)
+
+The z axis defined as a Vector3 object with coordinates (0,0,1).
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[Z_AXIS](Navi3DPoint.md#z_axis)
+
+#### Defined in
+
+[src/math/Vector3.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L46)
+
+___
+
+### x
+
+• **x**: `number` = `0`
+
+The first element of a Vector3 object, such as the x coordinate of
+a point in the three-dimensional space. The default value is 0.
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[x](Navi3DPoint.md#x)
+
+#### Defined in
+
+[src/math/Vector3.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L148)
+
+___
+
+### y
+
+• **y**: `number` = `0`
+
+The second element of a Vector3 object, such as the y coordinate of
+a point in the three-dimensional space. The default value is 0.
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[y](Navi3DPoint.md#y)
+
+#### Defined in
+
+[src/math/Vector3.ts:154](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L154)
+
+___
+
+### z
+
+• **z**: `number` = `0`
+
+The third element of a Vector3 object, such as the y coordinate of
+a point in the three-dimensional space. The default value is 0.
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[z](Navi3DPoint.md#z)
+
+#### Defined in
+
+[src/math/Vector3.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L160)
+
+___
+
+### w
+
+• **w**: `number` = `1`
+
+The z component of the vector,
+A three-dimensional position or projection that can be used as a perspective projection
+We can also do w in the quaternion
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[w](Navi3DPoint.md#w)
+
+#### Defined in
+
+[src/math/Vector3.ts:167](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L167)
+
+___
+
+### CALC\_VECTOR3D1
+
+▪ `Static` **CALC\_VECTOR3D1**: [`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[CALC_VECTOR3D1](Navi3DPoint.md#calc_vector3d1)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint.ts#L6)
+
+___
+
+### CALC\_VECTOR3D2
+
+▪ `Static` **CALC\_VECTOR3D2**: [`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[CALC_VECTOR3D2](Navi3DPoint.md#calc_vector3d2)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint.ts#L8)
+
+___
+
+### CALC\_VECTOR3D3
+
+▪ `Static` **CALC\_VECTOR3D3**: [`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[CALC_VECTOR3D3](Navi3DPoint.md#calc_vector3d3)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint.ts#L10)
+
+___
+
+### CALC\_VECTOR3D4
+
+▪ `Static` **CALC\_VECTOR3D4**: [`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[CALC_VECTOR3D4](Navi3DPoint.md#calc_vector3d4)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint.ts#L12)
+
+___
+
+### CALC\_VECTOR3D5
+
+▪ `Static` **CALC\_VECTOR3D5**: [`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[CALC_VECTOR3D5](Navi3DPoint.md#calc_vector3d5)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint.ts#L14)
+
+___
+
+### radius
+
+• **radius**: `number` = `0`
+
+#### Defined in
+
+[src/math/navigation/Navi3DPointFat.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPointFat.ts#L9)
+
+## Accessors
+
+### ZERO
+
+• `get` **ZERO**(): [`Vector3`](Vector3.md)
+
+Returns a new vector with zero x, y, and z components
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Navi3DPoint.ZERO
+
+#### Defined in
+
+[src/math/Vector3.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L91)
+
+___
+
+### ONE
+
+• `get` **ONE**(): [`Vector3`](Vector3.md)
+
+Returns a new vector whose x, y, and z components are all 1
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Navi3DPoint.ONE
+
+#### Defined in
+
+[src/math/Vector3.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L98)
+
+___
+
+### LEFT
+
+• `get` **LEFT**(): [`Vector3`](Vector3.md)
+
+Returns a new vector pointing to the left, x is -1, y is 0, and z is 0
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Navi3DPoint.LEFT
+
+#### Defined in
+
+[src/math/Vector3.ts:105](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L105)
+
+___
+
+### RIGHT
+
+• `get` **RIGHT**(): [`Vector3`](Vector3.md)
+
+Returns a new vector pointing in the right direction, where x is 1, y is 0, and z is 0
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Navi3DPoint.RIGHT
+
+#### Defined in
+
+[src/math/Vector3.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L112)
+
+___
+
+### UP
+
+• `get` **UP**(): [`Vector3`](Vector3.md)
+
+Returns a new vector pointing upwards, that is, x equals 0, y equals 1, and z equals 0
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Navi3DPoint.UP
+
+#### Defined in
+
+[src/math/Vector3.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L119)
+
+___
+
+### DOWN
+
+• `get` **DOWN**(): [`Vector3`](Vector3.md)
+
+Returns a new vector pointing down, where x is 0, y is -1, and z is 0
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Navi3DPoint.DOWN
+
+#### Defined in
+
+[src/math/Vector3.ts:126](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L126)
+
+___
+
+### BACK
+
+• `get` **BACK**(): [`Vector3`](Vector3.md)
+
+Returns a new backward vector, x equals 0, y equals 0, and z equals negative 1
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Navi3DPoint.BACK
+
+#### Defined in
+
+[src/math/Vector3.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L133)
+
+___
+
+### FORWARD
+
+• `get` **FORWARD**(): [`Vector3`](Vector3.md)
+
+Returns a new forward-pointing vector, that is, x is 0, y is 0, and z is 1
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Navi3DPoint.FORWARD
+
+#### Defined in
+
+[src/math/Vector3.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L140)
+
+___
+
+### a
+
+• `get` **a**(): `number`
+
+get the w component
+
+#### Returns
+
+`number`
+
+value of w
+
+#### Inherited from
+
+Navi3DPoint.a
+
+#### Defined in
+
+[src/math/Vector3.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L233)
+
+• `set` **a**(`value`): `void`
+
+Set w component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Navi3DPoint.a
+
+#### Defined in
+
+[src/math/Vector3.ts:201](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L201)
+
+___
+
+### r
+
+• `get` **r**(): `number`
+
+get the x component
+
+#### Returns
+
+`number`
+
+value of x
+
+#### Inherited from
+
+Navi3DPoint.r
+
+#### Defined in
+
+[src/math/Vector3.ts:241](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L241)
+
+• `set` **r**(`value`): `void`
+
+Set x component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Navi3DPoint.r
+
+#### Defined in
+
+[src/math/Vector3.ts:209](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L209)
+
+___
+
+### g
+
+• `get` **g**(): `number`
+
+get the y component
+
+#### Returns
+
+`number`
+
+value of y
+
+#### Inherited from
+
+Navi3DPoint.g
+
+#### Defined in
+
+[src/math/Vector3.ts:249](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L249)
+
+• `set` **g**(`value`): `void`
+
+Set the y component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Navi3DPoint.g
+
+#### Defined in
+
+[src/math/Vector3.ts:217](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L217)
+
+___
+
+### b
+
+• `get` **b**(): `number`
+
+get the z component
+
+#### Returns
+
+`number`
+
+value of z
+
+#### Inherited from
+
+Navi3DPoint.b
+
+#### Defined in
+
+[src/math/Vector3.ts:257](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L257)
+
+• `set` **b**(`value`): `void`
+
+Set z component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Navi3DPoint.b
+
+#### Defined in
+
+[src/math/Vector3.ts:225](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L225)
+
+___
+
+### length
+
+• `get` **length**(): `number`
+
+The length of the vector, the distance from the origin (0, 0, 0) to (x, y, z)
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Navi3DPoint.length
+
+#### Defined in
+
+[src/math/Vector3.ts:264](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L264)
+
+___
+
+### lengthSquared
+
+• `get` **lengthSquared**(): `number`
+
+You get the square of the length of the vector
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Navi3DPoint.lengthSquared
+
+#### Defined in
+
+[src/math/Vector3.ts:272](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L272)
+
+___
+
+### position
+
+• `get` **position**(): `this`
+
+Get the current vector
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+Navi3DPoint.position
+
+#### Defined in
+
+[src/math/Vector3.ts:279](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L279)
+
+___
+
+### id
+
+• `get` **id**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Navi3DPoint.id
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint.ts#L23)
+
+___
+
+### ownerPoint
+
+• `get` **ownerPoint**(): [`Navi3DPoint`](Navi3DPoint.md)
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPointFat.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPointFat.ts#L17)
+
+___
+
+### ownerEdge
+
+• `get` **ownerEdge**(): [`Navi3DEdge`](Navi3DEdge.md)
+
+#### Returns
+
+[`Navi3DEdge`](Navi3DEdge.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPointFat.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPointFat.ts#L21)
+
+## Methods
+
+### getTowPointbyDir
+
+▸ **getTowPointbyDir**(`dir`, `tp1`, `tp2`, `width`, `aix`): `void`
+
+Obtain a vertical line segment with width through an orientation
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `dir` | [`Vector3`](Vector3.md) |
+| `tp1` | [`Vector3`](Vector3.md) |
+| `tp2` | [`Vector3`](Vector3.md) |
+| `width` | `number` |
+| `aix` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[getTowPointbyDir](Navi3DPoint.md#gettowpointbydir)
+
+#### Defined in
+
+[src/math/Vector3.ts:290](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L290)
+
+___
+
+### pointToLine
+
+▸ **pointToLine**(`point1`, `point2`, `position`): `number`
+
+Calculate the distance from the point to the line
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `point1` | [`Vector3`](Vector3.md) | Starting point of line segment |
+| `point2` | [`Vector3`](Vector3.md) | End point of line segment |
+| `position` | [`Vector3`](Vector3.md) | Point position |
+
+#### Returns
+
+`number`
+
+Distance from a point to a line segment
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[pointToLine](Navi3DPoint.md#pointtoline)
+
+#### Defined in
+
+[src/math/Vector3.ts:319](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L319)
+
+___
+
+### dot
+
+▸ **dot**(`a`, `b`): `number`
+
+Take the dot product of two vectors.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | Vector a |
+| `b` | [`Vector3`](Vector3.md) | Vector b |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[dot](Navi3DPoint.md#dot)
+
+#### Defined in
+
+[src/math/Vector3.ts:353](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L353)
+
+___
+
+### getPoints
+
+▸ **getPoints**(`total`, `randSeed`): `any`[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `total` | `number` |
+| `randSeed` | `number` |
+
+#### Returns
+
+`any`[]
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[getPoints](Navi3DPoint.md#getpoints)
+
+#### Defined in
+
+[src/math/Vector3.ts:357](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L357)
+
+___
+
+### getPointNumbers
+
+▸ **getPointNumbers**(`total`, `randSeed`): `any`[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `total` | `number` |
+| `randSeed` | `number` |
+
+#### Returns
+
+`any`[]
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[getPointNumbers](Navi3DPoint.md#getpointnumbers)
+
+#### Defined in
+
+[src/math/Vector3.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L366)
+
+___
+
+### getAngle
+
+▸ **getAngle**(`from`, `to`): `number`
+
+Returns the Angle, in degrees, between the source vector and the target vector.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `from` | [`Vector3`](Vector3.md) | source vector. |
+| `to` | [`Vector3`](Vector3.md) | target vector. |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[getAngle](Navi3DPoint.md#getangle)
+
+#### Defined in
+
+[src/math/Vector3.ts:380](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L380)
+
+___
+
+### sqrMagnitude
+
+▸ **sqrMagnitude**(`arg0`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[sqrMagnitude](Navi3DPoint.md#sqrmagnitude)
+
+#### Defined in
+
+[src/math/Vector3.ts:385](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L385)
+
+___
+
+### getZYAngle
+
+▸ **getZYAngle**(`zd`, `yd`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `zd` | [`Vector3`](Vector3.md) |
+| `yd` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[getZYAngle](Navi3DPoint.md#getzyangle)
+
+#### Defined in
+
+[src/math/Vector3.ts:389](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L389)
+
+___
+
+### sub
+
+▸ **sub**(`a`, `b`, `target?`): [`Vector3`](Vector3.md)
+
+Subtract two vectors
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | Vector a |
+| `b` | [`Vector3`](Vector3.md) | `undefined` | Vector b |
+| `target` | [`Vector3`](Vector3.md) | `null` | output vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[sub](Navi3DPoint.md#sub)
+
+#### Defined in
+
+[src/math/Vector3.ts:399](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L399)
+
+___
+
+### add
+
+▸ **add**(`a`, `b`, `target?`): [`Vector3`](Vector3.md)
+
+Add two vectors
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | Vector a |
+| `b` | [`Vector3`](Vector3.md) | `undefined` | Vector b |
+| `target` | [`Vector3`](Vector3.md) | `null` | output vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[add](Navi3DPoint.md#add)
+
+#### Defined in
+
+[src/math/Vector3.ts:415](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L415)
+
+___
+
+### distance
+
+▸ **distance**(`pt1`, `pt2`): `number`
+
+Calculate the distance between two vectors
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pt1` | [`Vector3`](Vector3.md) | Vector 1 |
+| `pt2` | [`Vector3`](Vector3.md) | Vector 2 |
+
+#### Returns
+
+`number`
+
+number The distance between two vectors
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[distance](Navi3DPoint.md#distance)
+
+#### Defined in
+
+[src/math/Vector3.ts:458](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L458)
+
+___
+
+### squareDistance
+
+▸ **squareDistance**(`pt1`, `pt2`): `number`
+
+Calculate the square distance between two vectors
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pt1` | [`Vector3`](Vector3.md) | Vector 1 |
+| `pt2` | [`Vector3`](Vector3.md) | Vector 2 |
+
+#### Returns
+
+`number`
+
+number The square distance between two vectors
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[squareDistance](Navi3DPoint.md#squaredistance)
+
+#### Defined in
+
+[src/math/Vector3.ts:471](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L471)
+
+___
+
+### distanceXZ
+
+▸ **distanceXZ**(`pt1`, `pt2`): `number`
+
+Calculate the distance between two vectors XZ axes
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pt1` | [`Vector3`](Vector3.md) | Vector 1 |
+| `pt2` | [`Vector3`](Vector3.md) | Vector 2 |
+
+#### Returns
+
+`number`
+
+number The distance between two vectors
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[distanceXZ](Navi3DPoint.md#distancexz)
+
+#### Defined in
+
+[src/math/Vector3.ts:483](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L483)
+
+___
+
+### set
+
+▸ **set**(`x`, `y`, `z`, `w?`): [`Navi3DPointFat`](Navi3DPointFat.md)
+
+Sets the current vector x, y, z, and w components
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `x` | `number` | `undefined` |
+| `y` | `number` | `undefined` |
+| `z` | `number` | `undefined` |
+| `w` | `number` | `1` |
+
+#### Returns
+
+[`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[set](Navi3DPoint.md#set)
+
+#### Defined in
+
+[src/math/Vector3.ts:498](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L498)
+
+___
+
+### add
+
+▸ **add**(`a`, `target?`): [`Vector3`](Vector3.md)
+
+The vector is added to the vector
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | Additive vector |
+| `target` | [`Vector3`](Vector3.md) | `null` | Return vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+result
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[add](Navi3DPoint.md#add-1)
+
+#### Defined in
+
+[src/math/Vector3.ts:512](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L512)
+
+___
+
+### subVectors
+
+▸ **subVectors**(`a`, `b`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) |
+| `b` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[subVectors](Navi3DPoint.md#subvectors)
+
+#### Defined in
+
+[src/math/Vector3.ts:527](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L527)
+
+___
+
+### addScalar
+
+▸ **addScalar**(`scalar`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scalar` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[addScalar](Navi3DPoint.md#addscalar)
+
+#### Defined in
+
+[src/math/Vector3.ts:534](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L534)
+
+___
+
+### subScalar
+
+▸ **subScalar**(`scalar`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scalar` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[subScalar](Navi3DPoint.md#subscalar)
+
+#### Defined in
+
+[src/math/Vector3.ts:541](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L541)
+
+___
+
+### min
+
+▸ **min**(`v`, `target?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+| `target` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[min](Navi3DPoint.md#min-1)
+
+#### Defined in
+
+[src/math/Vector3.ts:548](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L548)
+
+___
+
+### max
+
+▸ **max**(`v`, `target?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+| `target` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[max](Navi3DPoint.md#max-1)
+
+#### Defined in
+
+[src/math/Vector3.ts:555](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L555)
+
+___
+
+### distanceToSquared
+
+▸ **distanceToSquared**(`v`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[distanceToSquared](Navi3DPoint.md#distancetosquared)
+
+#### Defined in
+
+[src/math/Vector3.ts:562](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L562)
+
+___
+
+### addXYZW
+
+▸ **addXYZW**(`x`, `y`, `z`, `w`, `target?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `x` | `number` | `undefined` |
+| `y` | `number` | `undefined` |
+| `z` | `number` | `undefined` |
+| `w` | `number` | `undefined` |
+| `target` | [`Vector3`](Vector3.md) | `null` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[addXYZW](Navi3DPoint.md#addxyzw)
+
+#### Defined in
+
+[src/math/Vector3.ts:569](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L569)
+
+___
+
+### clone
+
+▸ **clone**(): [`Vector3`](Vector3.md)
+
+Clone a vector with the same components as the current vector
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[clone](Navi3DPoint.md#clone)
+
+#### Defined in
+
+[src/math/Vector3.ts:587](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L587)
+
+___
+
+### copyFrom
+
+▸ **copyFrom**(`src`): [`Vector3`](Vector3.md)
+
+The components of the source vector are set to the current vector
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `src` | [`Vector3`](Vector3.md) | Original vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[copyFrom](Navi3DPoint.md#copyfrom)
+
+#### Defined in
+
+[src/math/Vector3.ts:596](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L596)
+
+___
+
+### decrementBy
+
+▸ **decrementBy**(`a`): `void`
+
+Subtract two vectors and assign the result to yourself
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | Minus vector |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[decrementBy](Navi3DPoint.md#decrementby)
+
+#### Defined in
+
+[src/math/Vector3.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L609)
+
+___
+
+### dotProduct
+
+▸ **dotProduct**(`a`): `number`
+
+Calculate the dot product of two vectors and return the Angle relationship between the two vectors
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | The vector that you need to compute |
+
+#### Returns
+
+`number`
+
+number Returns the Angle relationship between two vectors
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[dotProduct](Navi3DPoint.md#dotproduct)
+
+#### Defined in
+
+[src/math/Vector3.ts:621](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L621)
+
+___
+
+### equals
+
+▸ **equals**(`toCompare`, `allFour?`): `boolean`
+
+Find whether the values of two vectors are identical
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `toCompare` | [`Vector3`](Vector3.md) | `undefined` | The vector to compare |
+| `allFour` | `boolean` | `false` | The default parameter is 1, whether to compare the w component |
+
+#### Returns
+
+`boolean`
+
+A value of true if the specified Vector3 object is equal to the current Vector3 object; false if it is not equal.
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[equals](Navi3DPoint.md#equals)
+
+#### Defined in
+
+[src/math/Vector3.ts:643](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L643)
+
+___
+
+### incrementBy
+
+▸ **incrementBy**(`a`): `void`
+
+The current vector plus is equal to the vector, plus just the x, y, and z components
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | vector |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[incrementBy](Navi3DPoint.md#incrementby)
+
+#### Defined in
+
+[src/math/Vector3.ts:663](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L663)
+
+___
+
+### divide
+
+▸ **divide**(`v`): [`Vector3`](Vector3.md)
+
+The current vector divided by the vector or component
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | `any` | The vector or component that you want to divide |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3 Returns the result of the calculation
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[divide](Navi3DPoint.md#divide)
+
+#### Defined in
+
+[src/math/Vector3.ts:675](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L675)
+
+___
+
+### negate
+
+▸ **negate**(): [`Navi3DPointFat`](Navi3DPointFat.md)
+
+Sets the current Vector3 object to its inverse. The inverse object
+is also considered the opposite of the original object. The value of
+the x, y, and z properties of the current Vector3 object is changed
+to -x, -y, and -z.
+
+#### Returns
+
+[`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[negate](Navi3DPoint.md#negate)
+
+#### Defined in
+
+[src/math/Vector3.ts:692](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L692)
+
+___
+
+### normalize
+
+▸ **normalize**(`thickness?`): [`Vector3`](Vector3.md)
+
+Scales the line segment between(0,0) and the current point to a set
+length.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `thickness` | `number` | `1` | The scaling value. For example, if the current Vector3 object is (0,3,4), and you normalize it to 1, the point returned is at(0,0.6,0.8). |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[normalize](Navi3DPoint.md#normalize)
+
+#### Defined in
+
+[src/math/Vector3.ts:707](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L707)
+
+___
+
+### applyQuaternion
+
+▸ **applyQuaternion**(`q`): [`Navi3DPointFat`](Navi3DPointFat.md)
+
+Apply the rotation quaternion
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `q` | `any` | quaternion |
+
+#### Returns
+
+[`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[applyQuaternion](Navi3DPoint.md#applyquaternion)
+
+#### Defined in
+
+[src/math/Vector3.ts:724](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L724)
+
+___
+
+### applyMatrix4
+
+▸ **applyMatrix4**(`m`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m` | `any` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[applyMatrix4](Navi3DPoint.md#applymatrix4)
+
+#### Defined in
+
+[src/math/Vector3.ts:749](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L749)
+
+___
+
+### scaleBy
+
+▸ **scaleBy**(`s`): [`Vector3`](Vector3.md)
+
+Scales the current Vector3 object by a scalar, a magnitude. The
+Vector3 object's x, y, and z elements are multiplied by the scalar
+number specified in the parameter. For example, if the vector is
+scaled by ten, the result is a vector that is ten times longer. The
+scalar can also change the direction of the vector. Multiplying the
+vector by a negative number reverses its direction.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `s` | `number` | A multiplier (scalar) used to scale a Vector3 object. |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[scaleBy](Navi3DPoint.md#scaleby)
+
+#### Defined in
+
+[src/math/Vector3.ts:763](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L763)
+
+___
+
+### mul
+
+▸ **mul**(`s`): [`Vector3`](Vector3.md)
+
+The current vector times the scalar s
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `s` | `number` | scalar s |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[mul](Navi3DPoint.md#mul)
+
+#### Defined in
+
+[src/math/Vector3.ts:775](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L775)
+
+___
+
+### scale
+
+▸ **scale**(`s`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `s` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[scale](Navi3DPoint.md#scale)
+
+#### Defined in
+
+[src/math/Vector3.ts:783](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L783)
+
+___
+
+### scaleToRef
+
+▸ **scaleToRef**(`s`, `ref`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `s` | `number` |
+| `ref` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[scaleToRef](Navi3DPoint.md#scaletoref)
+
+#### Defined in
+
+[src/math/Vector3.ts:790](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L790)
+
+___
+
+### setTo
+
+▸ **setTo**(`xa`, `ya`, `za`, `wa?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `xa` | `number` | `undefined` | The first element, such as the x coordinate. |
+| `ya` | `number` | `undefined` | The second element, such as the y coordinate. |
+| `za` | `number` | `undefined` | The third element, such as the z coordinate. |
+| `wa` | `number` | `1` | - |
+
+#### Returns
+
+`void`
+
+**`Language`**
+
+en_US
+Sets the members of Vector3 to the specified values
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[setTo](Navi3DPoint.md#setto)
+
+#### Defined in
+
+[src/math/Vector3.ts:809](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L809)
+
+___
+
+### copy
+
+▸ **copy**(`src`): `this`
+
+Copy the components of the source vector to this vector
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `src` | [`Vector3`](Vector3.md) | Source vector |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[copy](Navi3DPoint.md#copy)
+
+#### Defined in
+
+[src/math/Vector3.ts:821](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L821)
+
+___
+
+### subtract
+
+▸ **subtract**(`a`, `target?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | The Vector3 object to be subtracted from the current Vector3 object. |
+| `target` | [`Vector3`](Vector3.md) | `null` | - |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+A new Vector3 object that is the difference between the
+ current Vector3 and the specified Vector3 object.
+
+**`Language`**
+
+en_US
+Subtracts the value of the x, y, and z elements of the current
+Vector3 object from the values of the x, y, and z elements of
+another Vector3 object. The subtract()
method does not
+change the current Vector3 object. Instead, this method returns a
+new Vector3 object with the new values.
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[subtract](Navi3DPoint.md#subtract)
+
+#### Defined in
+
+[src/math/Vector3.ts:842](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L842)
+
+___
+
+### multiply
+
+▸ **multiply**(`other`, `target?`): [`Vector3`](Vector3.md)
+
+Let's multiply that vector times that vector.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `other` | [`Vector3`](Vector3.md) | `undefined` | Multiplied vectors |
+| `target` | [`Vector3`](Vector3.md) | `null` | Returned vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[multiply](Navi3DPoint.md#multiply)
+
+#### Defined in
+
+[src/math/Vector3.ts:856](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L856)
+
+___
+
+### divided
+
+▸ **divided**(`other`, `target?`): [`Vector3`](Vector3.md)
+
+Let's divide this vector by this vector.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `other` | [`Vector3`](Vector3.md) | `undefined` | The vector that divides |
+| `target` | [`Vector3`](Vector3.md) | `null` | Returned vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[divided](Navi3DPoint.md#divided)
+
+#### Defined in
+
+[src/math/Vector3.ts:879](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L879)
+
+___
+
+### div
+
+▸ **div**(`v`, `target?`): [`Vector3`](Vector3.md)
+
+Divide that vector by the scalar
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | `number` | The scalar that divides |
+| `target?` | [`Vector3`](Vector3.md) | Output a Vector3 vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[div](Navi3DPoint.md#div)
+
+#### Defined in
+
+[src/math/Vector3.ts:902](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L902)
+
+___
+
+### lerp
+
+▸ **lerp**(`v0`, `v1`, `t`): `void`
+
+Computes the linear interpolation between two Vector3, and the result is the current object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v0` | [`Vector3`](Vector3.md) | Vector 1 |
+| `v1` | [`Vector3`](Vector3.md) | Vector 2 |
+| `t` | `number` | Interpolation factor |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[lerp](Navi3DPoint.md#lerp)
+
+#### Defined in
+
+[src/math/Vector3.ts:922](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L922)
+
+___
+
+### clamp
+
+▸ **clamp**(`min`, `max`): [`Vector3`](Vector3.md)
+
+The x, y, and z components of this vector are rounded upward to the nearest integers.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `min` | [`Vector3`](Vector3.md) | minimum value |
+| `max` | [`Vector3`](Vector3.md) | maximum value |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[clamp](Navi3DPoint.md#clamp)
+
+#### Defined in
+
+[src/math/Vector3.ts:944](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L944)
+
+___
+
+### toString
+
+▸ **toString**(): `string`
+
+Returns the string form of the current vector
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[toString](Navi3DPoint.md#tostring)
+
+#### Defined in
+
+[src/math/Vector3.ts:1010](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1010)
+
+___
+
+### normalizeToWay2D\_XY
+
+▸ **normalizeToWay2D_XY**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[normalizeToWay2D_XY](Navi3DPoint.md#normalizetoway2d_xy)
+
+#### Defined in
+
+[src/math/Vector3.ts:1026](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1026)
+
+___
+
+### toArray
+
+▸ **toArray**(): `number`[]
+
+#### Returns
+
+`number`[]
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[toArray](Navi3DPoint.md#toarray)
+
+#### Defined in
+
+[src/math/Vector3.ts:1044](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1044)
+
+___
+
+### copyToBytes
+
+▸ **copyToBytes**(`byte`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `byte` | `DataView` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[copyToBytes](Navi3DPoint.md#copytobytes)
+
+#### Defined in
+
+[src/math/Vector3.ts:1048](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1048)
+
+___
+
+### crossProduct
+
+▸ **crossProduct**(`a`, `target?`): [`Vector3`](Vector3.md)
+
+You take the cross product of two vectors,
+The cross product is going to be the perpendicular vector between these two vectors
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | Take the cross product of another vector |
+| `target` | [`Vector3`](Vector3.md) | `null` | - |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3 returns the cross product vector
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[crossProduct](Navi3DPoint.md#crossproduct)
+
+#### Defined in
+
+[src/math/Vector3.ts:1060](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1060)
+
+___
+
+### crossVectors
+
+▸ **crossVectors**(`a`, `b`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) |
+| `b` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[crossVectors](Navi3DPoint.md#crossvectors)
+
+#### Defined in
+
+[src/math/Vector3.ts:1069](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1069)
+
+___
+
+### multiplyScalar
+
+▸ **multiplyScalar**(`scalar`): [`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scalar` | `number` |
+
+#### Returns
+
+[`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[multiplyScalar](Navi3DPoint.md#multiplyscalar)
+
+#### Defined in
+
+[src/math/Vector3.ts:1074](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1074)
+
+___
+
+### setFromArray
+
+▸ **setFromArray**(`array`, `firstElementPos?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `array` | `number`[] | `undefined` |
+| `firstElementPos` | `number` | `0` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[setFromArray](Navi3DPoint.md#setfromarray)
+
+#### Defined in
+
+[src/math/Vector3.ts:1082](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1082)
+
+___
+
+### divideScalar
+
+▸ **divideScalar**(`scalar`): [`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scalar` | `any` |
+
+#### Returns
+
+[`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[divideScalar](Navi3DPoint.md#dividescalar)
+
+#### Defined in
+
+[src/math/Vector3.ts:1088](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1088)
+
+___
+
+### clampLength
+
+▸ **clampLength**(`min`, `max`): [`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `min` | `number` |
+| `max` | `number` |
+
+#### Returns
+
+[`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[clampLength](Navi3DPoint.md#clamplength)
+
+#### Defined in
+
+[src/math/Vector3.ts:1092](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1092)
+
+___
+
+### setScalar
+
+▸ **setScalar**(`value`): [`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+[`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[setScalar](Navi3DPoint.md#setscalar)
+
+#### Defined in
+
+[src/math/Vector3.ts:1097](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1097)
+
+___
+
+### addScaledVector
+
+▸ **addScaledVector**(`v`, `scale`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+| `scale` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[addScaledVector](Navi3DPoint.md#addscaledvector)
+
+#### Defined in
+
+[src/math/Vector3.ts:1104](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1104)
+
+___
+
+### pointInsideTriangle
+
+▸ **pointInsideTriangle**(`pt`, `pt0`, `pt1`, `pt2`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pt` | [`Vector3`](Vector3.md) |
+| `pt0` | [`Vector3`](Vector3.md) |
+| `pt1` | [`Vector3`](Vector3.md) |
+| `pt2` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[pointInsideTriangle](Navi3DPoint.md#pointinsidetriangle)
+
+#### Defined in
+
+[src/math/Vector3.ts:1133](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1133)
+
+___
+
+### serialize
+
+▸ **serialize**(`position`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `position` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[serialize](Navi3DPoint.md#serialize)
+
+#### Defined in
+
+[src/math/Vector3.ts:1162](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1162)
+
+___
+
+### equalPoint
+
+▸ **equalPoint**(`p1`, `p2`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `p1` | [`Vector3`](Vector3.md) |
+| `p2` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[equalPoint](Navi3DPoint.md#equalpoint)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint.ts#L27)
+
+___
+
+### calcDistance
+
+▸ **calcDistance**(`pt1`, `pt2`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pt1` | [`Vector3`](Vector3.md) |
+| `pt2` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Navi3DPoint](Navi3DPoint.md).[calcDistance](Navi3DPoint.md#calcdistance)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPoint.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPoint.ts#L31)
+
+___
+
+### scalePoint
+
+▸ **scalePoint**(`value?`): [`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `value` | `number` | `0.7` |
+
+#### Returns
+
+[`Navi3DPointFat`](Navi3DPointFat.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DPointFat.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DPointFat.ts#L25)
diff --git a/docs/api/classes/Navi3DRouter.md b/docs/api/classes/Navi3DRouter.md
new file mode 100644
index 00000000..67cc9e7a
--- /dev/null
+++ b/docs/api/classes/Navi3DRouter.md
@@ -0,0 +1,321 @@
+# Class: Navi3DRouter
+
+### Constructors
+
+- [constructor](Navi3DRouter.md#constructor)
+
+### Properties
+
+- [RAY\_1](Navi3DRouter.md#ray_1)
+- [RAY\_2](Navi3DRouter.md#ray_2)
+- [TEST\_RAY](Navi3DRouter.md#test_ray)
+- [TEST\_RAY\_1](Navi3DRouter.md#test_ray_1)
+- [TEST\_RAY\_2](Navi3DRouter.md#test_ray_2)
+- [endPoint](Navi3DRouter.md#endpoint)
+- [curPoint](Navi3DRouter.md#curpoint)
+- [rayA](Navi3DRouter.md#raya)
+- [rayB](Navi3DRouter.md#rayb)
+- [rayAPoint](Navi3DRouter.md#rayapoint)
+- [rayBPoint](Navi3DRouter.md#raybpoint)
+- [cornerPoint](Navi3DRouter.md#cornerpoint)
+- [cornerEdge](Navi3DRouter.md#corneredge)
+
+### Methods
+
+- [continuePass](Navi3DRouter.md#continuepass)
+- [passEdge](Navi3DRouter.md#passedge)
+- [calcCrossEdge](Navi3DRouter.md#calccrossedge)
+- [calcCrossPoint](Navi3DRouter.md#calccrosspoint)
+- [calcCrossPointOut](Navi3DRouter.md#calccrosspointout)
+- [hasCrossPoint](Navi3DRouter.md#hascrosspoint)
+- [resetData](Navi3DRouter.md#resetdata)
+
+## Constructors
+
+### constructor
+
+• **new Navi3DRouter**(): [`Navi3DRouter`](Navi3DRouter.md)
+
+#### Returns
+
+[`Navi3DRouter`](Navi3DRouter.md)
+
+## Properties
+
+### RAY\_1
+
+▪ `Static` **RAY\_1**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L19)
+
+___
+
+### RAY\_2
+
+▪ `Static` **RAY\_2**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L21)
+
+___
+
+### TEST\_RAY
+
+▪ `Static` **TEST\_RAY**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L23)
+
+___
+
+### TEST\_RAY\_1
+
+▪ `Static` **TEST\_RAY\_1**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L25)
+
+___
+
+### TEST\_RAY\_2
+
+▪ `Static` **TEST\_RAY\_2**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L27)
+
+___
+
+### endPoint
+
+• **endPoint**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L7)
+
+___
+
+### curPoint
+
+• **curPoint**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L9)
+
+___
+
+### rayA
+
+• **rayA**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L11)
+
+___
+
+### rayB
+
+• **rayB**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L13)
+
+___
+
+### rayAPoint
+
+• **rayAPoint**: [`Navi3DPoint`](Navi3DPoint.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L15)
+
+___
+
+### rayBPoint
+
+• **rayBPoint**: [`Navi3DPoint`](Navi3DPoint.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L17)
+
+___
+
+### cornerPoint
+
+• **cornerPoint**: [`Navi3DPoint`](Navi3DPoint.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:33](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L33)
+
+___
+
+### cornerEdge
+
+• **cornerEdge**: [`Navi3DEdge`](Navi3DEdge.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L35)
+
+## Methods
+
+### continuePass
+
+▸ **continuePass**(`fromPt`, `endPt`, `fromEdge`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `fromPt` | [`Vector3`](Vector3.md) |
+| `endPt` | [`Vector3`](Vector3.md) |
+| `fromEdge` | [`Navi3DEdge`](Navi3DEdge.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L37)
+
+___
+
+### passEdge
+
+▸ **passEdge**(`commonEdge`, `nextCommonEdge`, `targetPoint`, `lastEdge`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `commonEdge` | [`Navi3DEdge`](Navi3DEdge.md) |
+| `nextCommonEdge` | [`Navi3DEdge`](Navi3DEdge.md) |
+| `targetPoint` | [`Vector3`](Vector3.md) |
+| `lastEdge` | `boolean` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L44)
+
+___
+
+### calcCrossEdge
+
+▸ **calcCrossEdge**(`_edge`, `linePoint`, `lineDirection`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_edge` | [`Navi3DEdge`](Navi3DEdge.md) |
+| `linePoint` | [`Vector3`](Vector3.md) |
+| `lineDirection` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:138](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L138)
+
+___
+
+### calcCrossPoint
+
+▸ **calcCrossPoint**(`segmentPt1`, `segmentPt2`, `linePoint`, `lineDirection`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `segmentPt1` | [`Vector3`](Vector3.md) |
+| `segmentPt2` | [`Vector3`](Vector3.md) |
+| `linePoint` | [`Vector3`](Vector3.md) |
+| `lineDirection` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:142](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L142)
+
+___
+
+### calcCrossPointOut
+
+▸ **calcCrossPointOut**(`segmentPt1`, `segmentPt2`, `linePoint`, `lineDirection`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `segmentPt1` | [`Vector3`](Vector3.md) |
+| `segmentPt2` | [`Vector3`](Vector3.md) |
+| `linePoint` | [`Vector3`](Vector3.md) |
+| `lineDirection` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:163](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L163)
+
+___
+
+### hasCrossPoint
+
+▸ **hasCrossPoint**(`segmentPt1`, `segmentPt2`, `linePoint`, `lineDirection`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `segmentPt1` | [`Vector3`](Vector3.md) |
+| `segmentPt2` | [`Vector3`](Vector3.md) |
+| `linePoint` | [`Vector3`](Vector3.md) |
+| `lineDirection` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L178)
+
+___
+
+### resetData
+
+▸ **resetData**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/navigation/Navi3DRouter.ts:205](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DRouter.ts#L205)
diff --git a/docs/api/classes/Navi3DTriangle.md b/docs/api/classes/Navi3DTriangle.md
new file mode 100644
index 00000000..4cbb94a0
--- /dev/null
+++ b/docs/api/classes/Navi3DTriangle.md
@@ -0,0 +1,2693 @@
+# Class: Navi3DTriangle
+
+Vector 3D
+
+## Hierarchy
+
+- [`Vector3`](Vector3.md)
+
+ ↳ **`Navi3DTriangle`**
+
+## Implements
+
+- [`IQuadNode`](../interfaces/IQuadNode.md)
+
+### Constructors
+
+- [constructor](Navi3DTriangle.md#constructor)
+
+### Properties
+
+- [MAX](Navi3DTriangle.md#max)
+- [MIN](Navi3DTriangle.md#min)
+- [SAFE\_MAX](Navi3DTriangle.md#safe_max)
+- [SAFE\_MIN](Navi3DTriangle.md#safe_min)
+- [X\_AXIS](Navi3DTriangle.md#x_axis)
+- [neg\_X\_AXIS](Navi3DTriangle.md#neg_x_axis)
+- [Y\_AXIS](Navi3DTriangle.md#y_axis)
+- [Z\_AXIS](Navi3DTriangle.md#z_axis)
+- [x](Navi3DTriangle.md#x)
+- [y](Navi3DTriangle.md#y)
+- [z](Navi3DTriangle.md#z)
+- [w](Navi3DTriangle.md#w)
+- [f](Navi3DTriangle.md#f)
+- [gg](Navi3DTriangle.md#gg)
+- [h](Navi3DTriangle.md#h)
+- [parent](Navi3DTriangle.md#parent)
+- [costMultiplier](Navi3DTriangle.md#costmultiplier)
+- [openId](Navi3DTriangle.md#openid)
+- [closeId](Navi3DTriangle.md#closeid)
+
+### Accessors
+
+- [ZERO](Navi3DTriangle.md#zero)
+- [ONE](Navi3DTriangle.md#one)
+- [LEFT](Navi3DTriangle.md#left)
+- [RIGHT](Navi3DTriangle.md#right)
+- [UP](Navi3DTriangle.md#up)
+- [DOWN](Navi3DTriangle.md#down)
+- [BACK](Navi3DTriangle.md#back)
+- [FORWARD](Navi3DTriangle.md#forward)
+- [a](Navi3DTriangle.md#a)
+- [r](Navi3DTriangle.md#r)
+- [g](Navi3DTriangle.md#g)
+- [b](Navi3DTriangle.md#b)
+- [length](Navi3DTriangle.md#length)
+- [lengthSquared](Navi3DTriangle.md#lengthsquared)
+- [position](Navi3DTriangle.md#position)
+- [aabb](Navi3DTriangle.md#aabb)
+- [isTriangle](Navi3DTriangle.md#istriangle)
+- [id](Navi3DTriangle.md#id)
+- [plane](Navi3DTriangle.md#plane)
+- [points](Navi3DTriangle.md#points)
+- [walkAble](Navi3DTriangle.md#walkable)
+- [edges](Navi3DTriangle.md#edges)
+
+### Methods
+
+- [getTowPointbyDir](Navi3DTriangle.md#gettowpointbydir)
+- [pointToLine](Navi3DTriangle.md#pointtoline)
+- [dot](Navi3DTriangle.md#dot)
+- [getPoints](Navi3DTriangle.md#getpoints)
+- [getPointNumbers](Navi3DTriangle.md#getpointnumbers)
+- [getAngle](Navi3DTriangle.md#getangle)
+- [sqrMagnitude](Navi3DTriangle.md#sqrmagnitude)
+- [getZYAngle](Navi3DTriangle.md#getzyangle)
+- [sub](Navi3DTriangle.md#sub)
+- [add](Navi3DTriangle.md#add)
+- [distance](Navi3DTriangle.md#distance)
+- [squareDistance](Navi3DTriangle.md#squaredistance)
+- [distanceXZ](Navi3DTriangle.md#distancexz)
+- [set](Navi3DTriangle.md#set)
+- [add](Navi3DTriangle.md#add-1)
+- [subVectors](Navi3DTriangle.md#subvectors)
+- [addScalar](Navi3DTriangle.md#addscalar)
+- [subScalar](Navi3DTriangle.md#subscalar)
+- [min](Navi3DTriangle.md#min-1)
+- [max](Navi3DTriangle.md#max-1)
+- [distanceToSquared](Navi3DTriangle.md#distancetosquared)
+- [addXYZW](Navi3DTriangle.md#addxyzw)
+- [clone](Navi3DTriangle.md#clone)
+- [copyFrom](Navi3DTriangle.md#copyfrom)
+- [decrementBy](Navi3DTriangle.md#decrementby)
+- [dotProduct](Navi3DTriangle.md#dotproduct)
+- [equals](Navi3DTriangle.md#equals)
+- [incrementBy](Navi3DTriangle.md#incrementby)
+- [divide](Navi3DTriangle.md#divide)
+- [negate](Navi3DTriangle.md#negate)
+- [normalize](Navi3DTriangle.md#normalize)
+- [applyQuaternion](Navi3DTriangle.md#applyquaternion)
+- [applyMatrix4](Navi3DTriangle.md#applymatrix4)
+- [scaleBy](Navi3DTriangle.md#scaleby)
+- [mul](Navi3DTriangle.md#mul)
+- [scale](Navi3DTriangle.md#scale)
+- [scaleToRef](Navi3DTriangle.md#scaletoref)
+- [setTo](Navi3DTriangle.md#setto)
+- [copy](Navi3DTriangle.md#copy)
+- [subtract](Navi3DTriangle.md#subtract)
+- [multiply](Navi3DTriangle.md#multiply)
+- [divided](Navi3DTriangle.md#divided)
+- [div](Navi3DTriangle.md#div)
+- [lerp](Navi3DTriangle.md#lerp)
+- [clamp](Navi3DTriangle.md#clamp)
+- [toString](Navi3DTriangle.md#tostring)
+- [normalizeToWay2D\_XY](Navi3DTriangle.md#normalizetoway2d_xy)
+- [toArray](Navi3DTriangle.md#toarray)
+- [copyToBytes](Navi3DTriangle.md#copytobytes)
+- [crossProduct](Navi3DTriangle.md#crossproduct)
+- [crossVectors](Navi3DTriangle.md#crossvectors)
+- [multiplyScalar](Navi3DTriangle.md#multiplyscalar)
+- [setFromArray](Navi3DTriangle.md#setfromarray)
+- [divideScalar](Navi3DTriangle.md#dividescalar)
+- [clampLength](Navi3DTriangle.md#clamplength)
+- [setScalar](Navi3DTriangle.md#setscalar)
+- [addScaledVector](Navi3DTriangle.md#addscaledvector)
+- [pointInsideTriangle](Navi3DTriangle.md#pointinsidetriangle)
+- [serialize](Navi3DTriangle.md#serialize)
+- [initAABB](Navi3DTriangle.md#initaabb)
+- [calcGlobalQuadAABB](Navi3DTriangle.md#calcglobalquadaabb)
+- [addNeibour](Navi3DTriangle.md#addneibour)
+- [getNeibourTriangles](Navi3DTriangle.md#getneibourtriangles)
+- [getEdges](Navi3DTriangle.md#getedges)
+- [testMask](Navi3DTriangle.md#testmask)
+- [getEdgeAgainstPoint](Navi3DTriangle.md#getedgeagainstpoint)
+- [getPointAgainstEdge](Navi3DTriangle.md#getpointagainstedge)
+- [getPublicEdge](Navi3DTriangle.md#getpublicedge)
+- [loopPublicEdge](Navi3DTriangle.md#looppublicedge)
+- [randomPoint](Navi3DTriangle.md#randompoint)
+
+## Constructors
+
+### constructor
+
+• **new Navi3DTriangle**(`Id`, `edgeA`, `edgeB`, `edgeC`): [`Navi3DTriangle`](Navi3DTriangle.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `Id` | `number` |
+| `edgeA` | [`Navi3DEdge`](Navi3DEdge.md) |
+| `edgeB` | [`Navi3DEdge`](Navi3DEdge.md) |
+| `edgeC` | [`Navi3DEdge`](Navi3DEdge.md) |
+
+#### Returns
+
+[`Navi3DTriangle`](Navi3DTriangle.md)
+
+#### Overrides
+
+[Vector3](Vector3.md).[constructor](Vector3.md#constructor)
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L62)
+
+## Properties
+
+### MAX
+
+▪ `Static` `Readonly` **MAX**: [`Vector3`](Vector3.md)
+
+Vector maximum
+
+#### Inherited from
+
+[Vector3](Vector3.md).[MAX](Vector3.md#max)
+
+#### Defined in
+
+[src/math/Vector3.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L11)
+
+___
+
+### MIN
+
+▪ `Static` `Readonly` **MIN**: [`Vector3`](Vector3.md)
+
+Vector minimum
+
+#### Inherited from
+
+[Vector3](Vector3.md).[MIN](Vector3.md#min)
+
+#### Defined in
+
+[src/math/Vector3.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L16)
+
+___
+
+### SAFE\_MAX
+
+▪ `Static` `Readonly` **SAFE\_MAX**: [`Vector3`](Vector3.md)
+
+Vector maximum integer value
+
+#### Inherited from
+
+[Vector3](Vector3.md).[SAFE_MAX](Vector3.md#safe_max)
+
+#### Defined in
+
+[src/math/Vector3.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L21)
+
+___
+
+### SAFE\_MIN
+
+▪ `Static` `Readonly` **SAFE\_MIN**: [`Vector3`](Vector3.md)
+
+Vector minimum integer value
+
+#### Inherited from
+
+[Vector3](Vector3.md).[SAFE_MIN](Vector3.md#safe_min)
+
+#### Defined in
+
+[src/math/Vector3.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L26)
+
+___
+
+### X\_AXIS
+
+▪ `Static` `Readonly` **X\_AXIS**: [`Vector3`](Vector3.md)
+
+X axis positive axis coordinate (1, 0, 0).
+
+#### Inherited from
+
+[Vector3](Vector3.md).[X_AXIS](Vector3.md#x_axis)
+
+#### Defined in
+
+[src/math/Vector3.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L31)
+
+___
+
+### neg\_X\_AXIS
+
+▪ `Static` `Readonly` **neg\_X\_AXIS**: [`Vector3`](Vector3.md)
+
+The X-axis is negative (-1, 0, 0).
+
+#### Inherited from
+
+[Vector3](Vector3.md).[neg_X_AXIS](Vector3.md#neg_x_axis)
+
+#### Defined in
+
+[src/math/Vector3.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L36)
+
+___
+
+### Y\_AXIS
+
+▪ `Static` `Readonly` **Y\_AXIS**: [`Vector3`](Vector3.md)
+
+The y axis defined as a Vector3 object with coordinates (0,1,0).
+
+#### Inherited from
+
+[Vector3](Vector3.md).[Y_AXIS](Vector3.md#y_axis)
+
+#### Defined in
+
+[src/math/Vector3.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L41)
+
+___
+
+### Z\_AXIS
+
+▪ `Static` `Readonly` **Z\_AXIS**: [`Vector3`](Vector3.md)
+
+The z axis defined as a Vector3 object with coordinates (0,0,1).
+
+#### Inherited from
+
+[Vector3](Vector3.md).[Z_AXIS](Vector3.md#z_axis)
+
+#### Defined in
+
+[src/math/Vector3.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L46)
+
+___
+
+### x
+
+• **x**: `number` = `0`
+
+The first element of a Vector3 object, such as the x coordinate of
+a point in the three-dimensional space. The default value is 0.
+
+#### Inherited from
+
+[Vector3](Vector3.md).[x](Vector3.md#x)
+
+#### Defined in
+
+[src/math/Vector3.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L148)
+
+___
+
+### y
+
+• **y**: `number` = `0`
+
+The second element of a Vector3 object, such as the y coordinate of
+a point in the three-dimensional space. The default value is 0.
+
+#### Inherited from
+
+[Vector3](Vector3.md).[y](Vector3.md#y)
+
+#### Defined in
+
+[src/math/Vector3.ts:154](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L154)
+
+___
+
+### z
+
+• **z**: `number` = `0`
+
+The third element of a Vector3 object, such as the y coordinate of
+a point in the three-dimensional space. The default value is 0.
+
+#### Inherited from
+
+[Vector3](Vector3.md).[z](Vector3.md#z)
+
+#### Defined in
+
+[src/math/Vector3.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L160)
+
+___
+
+### w
+
+• **w**: `number` = `1`
+
+The z component of the vector,
+A three-dimensional position or projection that can be used as a perspective projection
+We can also do w in the quaternion
+
+#### Inherited from
+
+[Vector3](Vector3.md).[w](Vector3.md#w)
+
+#### Defined in
+
+[src/math/Vector3.ts:167](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L167)
+
+___
+
+### f
+
+• **f**: `number` = `0`
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L29)
+
+___
+
+### gg
+
+• **gg**: `number` = `0`
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L31)
+
+___
+
+### h
+
+• **h**: `number` = `0`
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:33](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L33)
+
+___
+
+### parent
+
+• **parent**: [`Navi3DTriangle`](Navi3DTriangle.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L35)
+
+___
+
+### costMultiplier
+
+• **costMultiplier**: `number` = `1.0`
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L37)
+
+___
+
+### openId
+
+• **openId**: `number` = `0`
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L39)
+
+___
+
+### closeId
+
+• **closeId**: `number` = `0`
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L41)
+
+## Accessors
+
+### ZERO
+
+• `get` **ZERO**(): [`Vector3`](Vector3.md)
+
+Returns a new vector with zero x, y, and z components
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Vector3.ZERO
+
+#### Defined in
+
+[src/math/Vector3.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L91)
+
+___
+
+### ONE
+
+• `get` **ONE**(): [`Vector3`](Vector3.md)
+
+Returns a new vector whose x, y, and z components are all 1
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Vector3.ONE
+
+#### Defined in
+
+[src/math/Vector3.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L98)
+
+___
+
+### LEFT
+
+• `get` **LEFT**(): [`Vector3`](Vector3.md)
+
+Returns a new vector pointing to the left, x is -1, y is 0, and z is 0
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Vector3.LEFT
+
+#### Defined in
+
+[src/math/Vector3.ts:105](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L105)
+
+___
+
+### RIGHT
+
+• `get` **RIGHT**(): [`Vector3`](Vector3.md)
+
+Returns a new vector pointing in the right direction, where x is 1, y is 0, and z is 0
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Vector3.RIGHT
+
+#### Defined in
+
+[src/math/Vector3.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L112)
+
+___
+
+### UP
+
+• `get` **UP**(): [`Vector3`](Vector3.md)
+
+Returns a new vector pointing upwards, that is, x equals 0, y equals 1, and z equals 0
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Vector3.UP
+
+#### Defined in
+
+[src/math/Vector3.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L119)
+
+___
+
+### DOWN
+
+• `get` **DOWN**(): [`Vector3`](Vector3.md)
+
+Returns a new vector pointing down, where x is 0, y is -1, and z is 0
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Vector3.DOWN
+
+#### Defined in
+
+[src/math/Vector3.ts:126](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L126)
+
+___
+
+### BACK
+
+• `get` **BACK**(): [`Vector3`](Vector3.md)
+
+Returns a new backward vector, x equals 0, y equals 0, and z equals negative 1
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Vector3.BACK
+
+#### Defined in
+
+[src/math/Vector3.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L133)
+
+___
+
+### FORWARD
+
+• `get` **FORWARD**(): [`Vector3`](Vector3.md)
+
+Returns a new forward-pointing vector, that is, x is 0, y is 0, and z is 1
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Vector3.FORWARD
+
+#### Defined in
+
+[src/math/Vector3.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L140)
+
+___
+
+### a
+
+• `get` **a**(): `number`
+
+get the w component
+
+#### Returns
+
+`number`
+
+value of w
+
+#### Inherited from
+
+Vector3.a
+
+#### Defined in
+
+[src/math/Vector3.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L233)
+
+• `set` **a**(`value`): `void`
+
+Set w component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Vector3.a
+
+#### Defined in
+
+[src/math/Vector3.ts:201](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L201)
+
+___
+
+### r
+
+• `get` **r**(): `number`
+
+get the x component
+
+#### Returns
+
+`number`
+
+value of x
+
+#### Inherited from
+
+Vector3.r
+
+#### Defined in
+
+[src/math/Vector3.ts:241](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L241)
+
+• `set` **r**(`value`): `void`
+
+Set x component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Vector3.r
+
+#### Defined in
+
+[src/math/Vector3.ts:209](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L209)
+
+___
+
+### g
+
+• `get` **g**(): `number`
+
+get the y component
+
+#### Returns
+
+`number`
+
+value of y
+
+#### Inherited from
+
+Vector3.g
+
+#### Defined in
+
+[src/math/Vector3.ts:249](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L249)
+
+• `set` **g**(`value`): `void`
+
+Set the y component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Vector3.g
+
+#### Defined in
+
+[src/math/Vector3.ts:217](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L217)
+
+___
+
+### b
+
+• `get` **b**(): `number`
+
+get the z component
+
+#### Returns
+
+`number`
+
+value of z
+
+#### Inherited from
+
+Vector3.b
+
+#### Defined in
+
+[src/math/Vector3.ts:257](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L257)
+
+• `set` **b**(`value`): `void`
+
+Set z component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Vector3.b
+
+#### Defined in
+
+[src/math/Vector3.ts:225](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L225)
+
+___
+
+### length
+
+• `get` **length**(): `number`
+
+The length of the vector, the distance from the origin (0, 0, 0) to (x, y, z)
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Vector3.length
+
+#### Defined in
+
+[src/math/Vector3.ts:264](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L264)
+
+___
+
+### lengthSquared
+
+• `get` **lengthSquared**(): `number`
+
+You get the square of the length of the vector
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Vector3.lengthSquared
+
+#### Defined in
+
+[src/math/Vector3.ts:272](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L272)
+
+___
+
+### position
+
+• `get` **position**(): `this`
+
+Get the current vector
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+Vector3.position
+
+#### Defined in
+
+[src/math/Vector3.ts:279](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L279)
+
+___
+
+### aabb
+
+• `get` **aabb**(): [`QuadAABB`](QuadAABB.md)
+
+#### Returns
+
+[`QuadAABB`](QuadAABB.md)
+
+#### Implementation of
+
+[IQuadNode](../interfaces/IQuadNode.md).[aabb](../interfaces/IQuadNode.md#aabb)
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L43)
+
+___
+
+### isTriangle
+
+• `get` **isTriangle**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Implementation of
+
+[IQuadNode](../interfaces/IQuadNode.md).[isTriangle](../interfaces/IQuadNode.md#istriangle)
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L58)
+
+___
+
+### id
+
+• `get` **id**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L104)
+
+___
+
+### plane
+
+• `get` **plane**(): [`Plane3D`](Plane3D.md)
+
+#### Returns
+
+[`Plane3D`](Plane3D.md)
+
+#### Implementation of
+
+[IQuadNode](../interfaces/IQuadNode.md).[plane](../interfaces/IQuadNode.md#plane)
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:108](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L108)
+
+___
+
+### points
+
+• `get` **points**(): [`Navi3DPoint`](Navi3DPoint.md)[]
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)[]
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L112)
+
+___
+
+### walkAble
+
+• `get` **walkAble**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L157)
+
+___
+
+### edges
+
+• `get` **edges**(): [`Navi3DEdge`](Navi3DEdge.md)[]
+
+#### Returns
+
+[`Navi3DEdge`](Navi3DEdge.md)[]
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L161)
+
+## Methods
+
+### getTowPointbyDir
+
+▸ **getTowPointbyDir**(`dir`, `tp1`, `tp2`, `width`, `aix`): `void`
+
+Obtain a vertical line segment with width through an orientation
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `dir` | [`Vector3`](Vector3.md) |
+| `tp1` | [`Vector3`](Vector3.md) |
+| `tp2` | [`Vector3`](Vector3.md) |
+| `width` | `number` |
+| `aix` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[getTowPointbyDir](Vector3.md#gettowpointbydir)
+
+#### Defined in
+
+[src/math/Vector3.ts:290](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L290)
+
+___
+
+### pointToLine
+
+▸ **pointToLine**(`point1`, `point2`, `position`): `number`
+
+Calculate the distance from the point to the line
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `point1` | [`Vector3`](Vector3.md) | Starting point of line segment |
+| `point2` | [`Vector3`](Vector3.md) | End point of line segment |
+| `position` | [`Vector3`](Vector3.md) | Point position |
+
+#### Returns
+
+`number`
+
+Distance from a point to a line segment
+
+#### Inherited from
+
+[Vector3](Vector3.md).[pointToLine](Vector3.md#pointtoline)
+
+#### Defined in
+
+[src/math/Vector3.ts:319](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L319)
+
+___
+
+### dot
+
+▸ **dot**(`a`, `b`): `number`
+
+Take the dot product of two vectors.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | Vector a |
+| `b` | [`Vector3`](Vector3.md) | Vector b |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[dot](Vector3.md#dot)
+
+#### Defined in
+
+[src/math/Vector3.ts:353](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L353)
+
+___
+
+### getPoints
+
+▸ **getPoints**(`total`, `randSeed`): `any`[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `total` | `number` |
+| `randSeed` | `number` |
+
+#### Returns
+
+`any`[]
+
+#### Inherited from
+
+[Vector3](Vector3.md).[getPoints](Vector3.md#getpoints)
+
+#### Defined in
+
+[src/math/Vector3.ts:357](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L357)
+
+___
+
+### getPointNumbers
+
+▸ **getPointNumbers**(`total`, `randSeed`): `any`[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `total` | `number` |
+| `randSeed` | `number` |
+
+#### Returns
+
+`any`[]
+
+#### Inherited from
+
+[Vector3](Vector3.md).[getPointNumbers](Vector3.md#getpointnumbers)
+
+#### Defined in
+
+[src/math/Vector3.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L366)
+
+___
+
+### getAngle
+
+▸ **getAngle**(`from`, `to`): `number`
+
+Returns the Angle, in degrees, between the source vector and the target vector.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `from` | [`Vector3`](Vector3.md) | source vector. |
+| `to` | [`Vector3`](Vector3.md) | target vector. |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[getAngle](Vector3.md#getangle)
+
+#### Defined in
+
+[src/math/Vector3.ts:380](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L380)
+
+___
+
+### sqrMagnitude
+
+▸ **sqrMagnitude**(`arg0`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[sqrMagnitude](Vector3.md#sqrmagnitude)
+
+#### Defined in
+
+[src/math/Vector3.ts:385](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L385)
+
+___
+
+### getZYAngle
+
+▸ **getZYAngle**(`zd`, `yd`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `zd` | [`Vector3`](Vector3.md) |
+| `yd` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[getZYAngle](Vector3.md#getzyangle)
+
+#### Defined in
+
+[src/math/Vector3.ts:389](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L389)
+
+___
+
+### sub
+
+▸ **sub**(`a`, `b`, `target?`): [`Vector3`](Vector3.md)
+
+Subtract two vectors
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | Vector a |
+| `b` | [`Vector3`](Vector3.md) | `undefined` | Vector b |
+| `target` | [`Vector3`](Vector3.md) | `null` | output vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[sub](Vector3.md#sub)
+
+#### Defined in
+
+[src/math/Vector3.ts:399](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L399)
+
+___
+
+### add
+
+▸ **add**(`a`, `b`, `target?`): [`Vector3`](Vector3.md)
+
+Add two vectors
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | Vector a |
+| `b` | [`Vector3`](Vector3.md) | `undefined` | Vector b |
+| `target` | [`Vector3`](Vector3.md) | `null` | output vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[add](Vector3.md#add)
+
+#### Defined in
+
+[src/math/Vector3.ts:415](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L415)
+
+___
+
+### distance
+
+▸ **distance**(`pt1`, `pt2`): `number`
+
+Calculate the distance between two vectors
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pt1` | [`Vector3`](Vector3.md) | Vector 1 |
+| `pt2` | [`Vector3`](Vector3.md) | Vector 2 |
+
+#### Returns
+
+`number`
+
+number The distance between two vectors
+
+#### Inherited from
+
+[Vector3](Vector3.md).[distance](Vector3.md#distance)
+
+#### Defined in
+
+[src/math/Vector3.ts:458](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L458)
+
+___
+
+### squareDistance
+
+▸ **squareDistance**(`pt1`, `pt2`): `number`
+
+Calculate the square distance between two vectors
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pt1` | [`Vector3`](Vector3.md) | Vector 1 |
+| `pt2` | [`Vector3`](Vector3.md) | Vector 2 |
+
+#### Returns
+
+`number`
+
+number The square distance between two vectors
+
+#### Inherited from
+
+[Vector3](Vector3.md).[squareDistance](Vector3.md#squaredistance)
+
+#### Defined in
+
+[src/math/Vector3.ts:471](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L471)
+
+___
+
+### distanceXZ
+
+▸ **distanceXZ**(`pt1`, `pt2`): `number`
+
+Calculate the distance between two vectors XZ axes
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pt1` | [`Vector3`](Vector3.md) | Vector 1 |
+| `pt2` | [`Vector3`](Vector3.md) | Vector 2 |
+
+#### Returns
+
+`number`
+
+number The distance between two vectors
+
+#### Inherited from
+
+[Vector3](Vector3.md).[distanceXZ](Vector3.md#distancexz)
+
+#### Defined in
+
+[src/math/Vector3.ts:483](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L483)
+
+___
+
+### set
+
+▸ **set**(`x`, `y`, `z`, `w?`): [`Navi3DTriangle`](Navi3DTriangle.md)
+
+Sets the current vector x, y, z, and w components
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `x` | `number` | `undefined` |
+| `y` | `number` | `undefined` |
+| `z` | `number` | `undefined` |
+| `w` | `number` | `1` |
+
+#### Returns
+
+[`Navi3DTriangle`](Navi3DTriangle.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[set](Vector3.md#set)
+
+#### Defined in
+
+[src/math/Vector3.ts:498](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L498)
+
+___
+
+### add
+
+▸ **add**(`a`, `target?`): [`Vector3`](Vector3.md)
+
+The vector is added to the vector
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | Additive vector |
+| `target` | [`Vector3`](Vector3.md) | `null` | Return vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+result
+
+#### Inherited from
+
+[Vector3](Vector3.md).[add](Vector3.md#add-1)
+
+#### Defined in
+
+[src/math/Vector3.ts:512](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L512)
+
+___
+
+### subVectors
+
+▸ **subVectors**(`a`, `b`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) |
+| `b` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[subVectors](Vector3.md#subvectors)
+
+#### Defined in
+
+[src/math/Vector3.ts:527](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L527)
+
+___
+
+### addScalar
+
+▸ **addScalar**(`scalar`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scalar` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[addScalar](Vector3.md#addscalar)
+
+#### Defined in
+
+[src/math/Vector3.ts:534](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L534)
+
+___
+
+### subScalar
+
+▸ **subScalar**(`scalar`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scalar` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[subScalar](Vector3.md#subscalar)
+
+#### Defined in
+
+[src/math/Vector3.ts:541](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L541)
+
+___
+
+### min
+
+▸ **min**(`v`, `target?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+| `target` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[min](Vector3.md#min-1)
+
+#### Defined in
+
+[src/math/Vector3.ts:548](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L548)
+
+___
+
+### max
+
+▸ **max**(`v`, `target?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+| `target` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[max](Vector3.md#max-1)
+
+#### Defined in
+
+[src/math/Vector3.ts:555](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L555)
+
+___
+
+### distanceToSquared
+
+▸ **distanceToSquared**(`v`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[distanceToSquared](Vector3.md#distancetosquared)
+
+#### Defined in
+
+[src/math/Vector3.ts:562](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L562)
+
+___
+
+### addXYZW
+
+▸ **addXYZW**(`x`, `y`, `z`, `w`, `target?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `x` | `number` | `undefined` |
+| `y` | `number` | `undefined` |
+| `z` | `number` | `undefined` |
+| `w` | `number` | `undefined` |
+| `target` | [`Vector3`](Vector3.md) | `null` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[addXYZW](Vector3.md#addxyzw)
+
+#### Defined in
+
+[src/math/Vector3.ts:569](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L569)
+
+___
+
+### clone
+
+▸ **clone**(): [`Vector3`](Vector3.md)
+
+Clone a vector with the same components as the current vector
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[clone](Vector3.md#clone)
+
+#### Defined in
+
+[src/math/Vector3.ts:587](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L587)
+
+___
+
+### copyFrom
+
+▸ **copyFrom**(`src`): [`Vector3`](Vector3.md)
+
+The components of the source vector are set to the current vector
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `src` | [`Vector3`](Vector3.md) | Original vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[copyFrom](Vector3.md#copyfrom)
+
+#### Defined in
+
+[src/math/Vector3.ts:596](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L596)
+
+___
+
+### decrementBy
+
+▸ **decrementBy**(`a`): `void`
+
+Subtract two vectors and assign the result to yourself
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | Minus vector |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[decrementBy](Vector3.md#decrementby)
+
+#### Defined in
+
+[src/math/Vector3.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L609)
+
+___
+
+### dotProduct
+
+▸ **dotProduct**(`a`): `number`
+
+Calculate the dot product of two vectors and return the Angle relationship between the two vectors
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | The vector that you need to compute |
+
+#### Returns
+
+`number`
+
+number Returns the Angle relationship between two vectors
+
+#### Inherited from
+
+[Vector3](Vector3.md).[dotProduct](Vector3.md#dotproduct)
+
+#### Defined in
+
+[src/math/Vector3.ts:621](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L621)
+
+___
+
+### equals
+
+▸ **equals**(`toCompare`, `allFour?`): `boolean`
+
+Find whether the values of two vectors are identical
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `toCompare` | [`Vector3`](Vector3.md) | `undefined` | The vector to compare |
+| `allFour` | `boolean` | `false` | The default parameter is 1, whether to compare the w component |
+
+#### Returns
+
+`boolean`
+
+A value of true if the specified Vector3 object is equal to the current Vector3 object; false if it is not equal.
+
+#### Inherited from
+
+[Vector3](Vector3.md).[equals](Vector3.md#equals)
+
+#### Defined in
+
+[src/math/Vector3.ts:643](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L643)
+
+___
+
+### incrementBy
+
+▸ **incrementBy**(`a`): `void`
+
+The current vector plus is equal to the vector, plus just the x, y, and z components
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | vector |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[incrementBy](Vector3.md#incrementby)
+
+#### Defined in
+
+[src/math/Vector3.ts:663](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L663)
+
+___
+
+### divide
+
+▸ **divide**(`v`): [`Vector3`](Vector3.md)
+
+The current vector divided by the vector or component
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | `any` | The vector or component that you want to divide |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3 Returns the result of the calculation
+
+#### Inherited from
+
+[Vector3](Vector3.md).[divide](Vector3.md#divide)
+
+#### Defined in
+
+[src/math/Vector3.ts:675](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L675)
+
+___
+
+### negate
+
+▸ **negate**(): [`Navi3DTriangle`](Navi3DTriangle.md)
+
+Sets the current Vector3 object to its inverse. The inverse object
+is also considered the opposite of the original object. The value of
+the x, y, and z properties of the current Vector3 object is changed
+to -x, -y, and -z.
+
+#### Returns
+
+[`Navi3DTriangle`](Navi3DTriangle.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[negate](Vector3.md#negate)
+
+#### Defined in
+
+[src/math/Vector3.ts:692](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L692)
+
+___
+
+### normalize
+
+▸ **normalize**(`thickness?`): [`Vector3`](Vector3.md)
+
+Scales the line segment between(0,0) and the current point to a set
+length.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `thickness` | `number` | `1` | The scaling value. For example, if the current Vector3 object is (0,3,4), and you normalize it to 1, the point returned is at(0,0.6,0.8). |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[normalize](Vector3.md#normalize)
+
+#### Defined in
+
+[src/math/Vector3.ts:707](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L707)
+
+___
+
+### applyQuaternion
+
+▸ **applyQuaternion**(`q`): [`Navi3DTriangle`](Navi3DTriangle.md)
+
+Apply the rotation quaternion
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `q` | `any` | quaternion |
+
+#### Returns
+
+[`Navi3DTriangle`](Navi3DTriangle.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[applyQuaternion](Vector3.md#applyquaternion)
+
+#### Defined in
+
+[src/math/Vector3.ts:724](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L724)
+
+___
+
+### applyMatrix4
+
+▸ **applyMatrix4**(`m`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m` | `any` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[applyMatrix4](Vector3.md#applymatrix4)
+
+#### Defined in
+
+[src/math/Vector3.ts:749](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L749)
+
+___
+
+### scaleBy
+
+▸ **scaleBy**(`s`): [`Vector3`](Vector3.md)
+
+Scales the current Vector3 object by a scalar, a magnitude. The
+Vector3 object's x, y, and z elements are multiplied by the scalar
+number specified in the parameter. For example, if the vector is
+scaled by ten, the result is a vector that is ten times longer. The
+scalar can also change the direction of the vector. Multiplying the
+vector by a negative number reverses its direction.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `s` | `number` | A multiplier (scalar) used to scale a Vector3 object. |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[scaleBy](Vector3.md#scaleby)
+
+#### Defined in
+
+[src/math/Vector3.ts:763](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L763)
+
+___
+
+### mul
+
+▸ **mul**(`s`): [`Vector3`](Vector3.md)
+
+The current vector times the scalar s
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `s` | `number` | scalar s |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[mul](Vector3.md#mul)
+
+#### Defined in
+
+[src/math/Vector3.ts:775](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L775)
+
+___
+
+### scale
+
+▸ **scale**(`s`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `s` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[scale](Vector3.md#scale)
+
+#### Defined in
+
+[src/math/Vector3.ts:783](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L783)
+
+___
+
+### scaleToRef
+
+▸ **scaleToRef**(`s`, `ref`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `s` | `number` |
+| `ref` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[scaleToRef](Vector3.md#scaletoref)
+
+#### Defined in
+
+[src/math/Vector3.ts:790](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L790)
+
+___
+
+### setTo
+
+▸ **setTo**(`xa`, `ya`, `za`, `wa?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `xa` | `number` | `undefined` | The first element, such as the x coordinate. |
+| `ya` | `number` | `undefined` | The second element, such as the y coordinate. |
+| `za` | `number` | `undefined` | The third element, such as the z coordinate. |
+| `wa` | `number` | `1` | - |
+
+#### Returns
+
+`void`
+
+**`Language`**
+
+en_US
+Sets the members of Vector3 to the specified values
+
+#### Inherited from
+
+[Vector3](Vector3.md).[setTo](Vector3.md#setto)
+
+#### Defined in
+
+[src/math/Vector3.ts:809](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L809)
+
+___
+
+### copy
+
+▸ **copy**(`src`): `this`
+
+Copy the components of the source vector to this vector
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `src` | [`Vector3`](Vector3.md) | Source vector |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[copy](Vector3.md#copy)
+
+#### Defined in
+
+[src/math/Vector3.ts:821](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L821)
+
+___
+
+### subtract
+
+▸ **subtract**(`a`, `target?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | The Vector3 object to be subtracted from the current Vector3 object. |
+| `target` | [`Vector3`](Vector3.md) | `null` | - |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+A new Vector3 object that is the difference between the
+ current Vector3 and the specified Vector3 object.
+
+**`Language`**
+
+en_US
+Subtracts the value of the x, y, and z elements of the current
+Vector3 object from the values of the x, y, and z elements of
+another Vector3 object. The subtract()
method does not
+change the current Vector3 object. Instead, this method returns a
+new Vector3 object with the new values.
+
+#### Inherited from
+
+[Vector3](Vector3.md).[subtract](Vector3.md#subtract)
+
+#### Defined in
+
+[src/math/Vector3.ts:842](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L842)
+
+___
+
+### multiply
+
+▸ **multiply**(`other`, `target?`): [`Vector3`](Vector3.md)
+
+Let's multiply that vector times that vector.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `other` | [`Vector3`](Vector3.md) | `undefined` | Multiplied vectors |
+| `target` | [`Vector3`](Vector3.md) | `null` | Returned vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[multiply](Vector3.md#multiply)
+
+#### Defined in
+
+[src/math/Vector3.ts:856](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L856)
+
+___
+
+### divided
+
+▸ **divided**(`other`, `target?`): [`Vector3`](Vector3.md)
+
+Let's divide this vector by this vector.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `other` | [`Vector3`](Vector3.md) | `undefined` | The vector that divides |
+| `target` | [`Vector3`](Vector3.md) | `null` | Returned vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[divided](Vector3.md#divided)
+
+#### Defined in
+
+[src/math/Vector3.ts:879](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L879)
+
+___
+
+### div
+
+▸ **div**(`v`, `target?`): [`Vector3`](Vector3.md)
+
+Divide that vector by the scalar
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | `number` | The scalar that divides |
+| `target?` | [`Vector3`](Vector3.md) | Output a Vector3 vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[div](Vector3.md#div)
+
+#### Defined in
+
+[src/math/Vector3.ts:902](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L902)
+
+___
+
+### lerp
+
+▸ **lerp**(`v0`, `v1`, `t`): `void`
+
+Computes the linear interpolation between two Vector3, and the result is the current object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v0` | [`Vector3`](Vector3.md) | Vector 1 |
+| `v1` | [`Vector3`](Vector3.md) | Vector 2 |
+| `t` | `number` | Interpolation factor |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[lerp](Vector3.md#lerp)
+
+#### Defined in
+
+[src/math/Vector3.ts:922](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L922)
+
+___
+
+### clamp
+
+▸ **clamp**(`min`, `max`): [`Vector3`](Vector3.md)
+
+The x, y, and z components of this vector are rounded upward to the nearest integers.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `min` | [`Vector3`](Vector3.md) | minimum value |
+| `max` | [`Vector3`](Vector3.md) | maximum value |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[clamp](Vector3.md#clamp)
+
+#### Defined in
+
+[src/math/Vector3.ts:944](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L944)
+
+___
+
+### toString
+
+▸ **toString**(): `string`
+
+Returns the string form of the current vector
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[toString](Vector3.md#tostring)
+
+#### Defined in
+
+[src/math/Vector3.ts:1010](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1010)
+
+___
+
+### normalizeToWay2D\_XY
+
+▸ **normalizeToWay2D_XY**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[normalizeToWay2D_XY](Vector3.md#normalizetoway2d_xy)
+
+#### Defined in
+
+[src/math/Vector3.ts:1026](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1026)
+
+___
+
+### toArray
+
+▸ **toArray**(): `number`[]
+
+#### Returns
+
+`number`[]
+
+#### Inherited from
+
+[Vector3](Vector3.md).[toArray](Vector3.md#toarray)
+
+#### Defined in
+
+[src/math/Vector3.ts:1044](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1044)
+
+___
+
+### copyToBytes
+
+▸ **copyToBytes**(`byte`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `byte` | `DataView` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[copyToBytes](Vector3.md#copytobytes)
+
+#### Defined in
+
+[src/math/Vector3.ts:1048](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1048)
+
+___
+
+### crossProduct
+
+▸ **crossProduct**(`a`, `target?`): [`Vector3`](Vector3.md)
+
+You take the cross product of two vectors,
+The cross product is going to be the perpendicular vector between these two vectors
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | Take the cross product of another vector |
+| `target` | [`Vector3`](Vector3.md) | `null` | - |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3 returns the cross product vector
+
+#### Inherited from
+
+[Vector3](Vector3.md).[crossProduct](Vector3.md#crossproduct)
+
+#### Defined in
+
+[src/math/Vector3.ts:1060](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1060)
+
+___
+
+### crossVectors
+
+▸ **crossVectors**(`a`, `b`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) |
+| `b` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[crossVectors](Vector3.md#crossvectors)
+
+#### Defined in
+
+[src/math/Vector3.ts:1069](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1069)
+
+___
+
+### multiplyScalar
+
+▸ **multiplyScalar**(`scalar`): [`Navi3DTriangle`](Navi3DTriangle.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scalar` | `number` |
+
+#### Returns
+
+[`Navi3DTriangle`](Navi3DTriangle.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[multiplyScalar](Vector3.md#multiplyscalar)
+
+#### Defined in
+
+[src/math/Vector3.ts:1074](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1074)
+
+___
+
+### setFromArray
+
+▸ **setFromArray**(`array`, `firstElementPos?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `array` | `number`[] | `undefined` |
+| `firstElementPos` | `number` | `0` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[setFromArray](Vector3.md#setfromarray)
+
+#### Defined in
+
+[src/math/Vector3.ts:1082](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1082)
+
+___
+
+### divideScalar
+
+▸ **divideScalar**(`scalar`): [`Navi3DTriangle`](Navi3DTriangle.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scalar` | `any` |
+
+#### Returns
+
+[`Navi3DTriangle`](Navi3DTriangle.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[divideScalar](Vector3.md#dividescalar)
+
+#### Defined in
+
+[src/math/Vector3.ts:1088](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1088)
+
+___
+
+### clampLength
+
+▸ **clampLength**(`min`, `max`): [`Navi3DTriangle`](Navi3DTriangle.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `min` | `number` |
+| `max` | `number` |
+
+#### Returns
+
+[`Navi3DTriangle`](Navi3DTriangle.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[clampLength](Vector3.md#clamplength)
+
+#### Defined in
+
+[src/math/Vector3.ts:1092](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1092)
+
+___
+
+### setScalar
+
+▸ **setScalar**(`value`): [`Navi3DTriangle`](Navi3DTriangle.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+[`Navi3DTriangle`](Navi3DTriangle.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[setScalar](Vector3.md#setscalar)
+
+#### Defined in
+
+[src/math/Vector3.ts:1097](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1097)
+
+___
+
+### addScaledVector
+
+▸ **addScaledVector**(`v`, `scale`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+| `scale` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[addScaledVector](Vector3.md#addscaledvector)
+
+#### Defined in
+
+[src/math/Vector3.ts:1104](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1104)
+
+___
+
+### pointInsideTriangle
+
+▸ **pointInsideTriangle**(`pt`, `pt0`, `pt1`, `pt2`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pt` | [`Vector3`](Vector3.md) |
+| `pt0` | [`Vector3`](Vector3.md) |
+| `pt1` | [`Vector3`](Vector3.md) |
+| `pt2` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Vector3](Vector3.md).[pointInsideTriangle](Vector3.md#pointinsidetriangle)
+
+#### Defined in
+
+[src/math/Vector3.ts:1133](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1133)
+
+___
+
+### serialize
+
+▸ **serialize**(`position`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `position` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Vector3](Vector3.md).[serialize](Vector3.md#serialize)
+
+#### Defined in
+
+[src/math/Vector3.ts:1162](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1162)
+
+___
+
+### initAABB
+
+▸ **initAABB**(): `void`
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+[IQuadNode](../interfaces/IQuadNode.md).[initAABB](../interfaces/IQuadNode.md#initaabb)
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L47)
+
+___
+
+### calcGlobalQuadAABB
+
+▸ **calcGlobalQuadAABB**(): `void`
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+[IQuadNode](../interfaces/IQuadNode.md).[calcGlobalQuadAABB](../interfaces/IQuadNode.md#calcglobalquadaabb)
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L55)
+
+___
+
+### addNeibour
+
+▸ **addNeibour**(`edge`, `triangle`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `edge` | [`Navi3DEdge`](Navi3DEdge.md) |
+| `triangle` | [`Navi3DTriangle`](Navi3DTriangle.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L116)
+
+___
+
+### getNeibourTriangles
+
+▸ **getNeibourTriangles**(`list?`, `edgeMask?`, `triangleMask?`): [`Navi3DTriangle`](Navi3DTriangle.md)[]
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `list` | [`Navi3DTriangle`](Navi3DTriangle.md)[] | `null` |
+| `edgeMask` | `number` | `1` |
+| `triangleMask` | `number` | `1` |
+
+#### Returns
+
+[`Navi3DTriangle`](Navi3DTriangle.md)[]
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:125](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L125)
+
+___
+
+### getEdges
+
+▸ **getEdges**(`list?`, `edgeMask?`): [`Navi3DEdge`](Navi3DEdge.md)[]
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `list` | [`Navi3DEdge`](Navi3DEdge.md)[] | `null` |
+| `edgeMask` | `number` | `1` |
+
+#### Returns
+
+[`Navi3DEdge`](Navi3DEdge.md)[]
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L145)
+
+___
+
+### testMask
+
+▸ **testMask**(`value`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L165)
+
+___
+
+### getEdgeAgainstPoint
+
+▸ **getEdgeAgainstPoint**(`edge`): [`Navi3DPoint`](Navi3DPoint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `edge` | [`Navi3DEdge`](Navi3DEdge.md) |
+
+#### Returns
+
+[`Navi3DPoint`](Navi3DPoint.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:169](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L169)
+
+___
+
+### getPointAgainstEdge
+
+▸ **getPointAgainstEdge**(`point`): [`Navi3DEdge`](Navi3DEdge.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `point` | [`Navi3DPoint`](Navi3DPoint.md) |
+
+#### Returns
+
+[`Navi3DEdge`](Navi3DEdge.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L173)
+
+___
+
+### getPublicEdge
+
+▸ **getPublicEdge**(`triangle`): [`Navi3DEdge`](Navi3DEdge.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `triangle` | [`Navi3DTriangle`](Navi3DTriangle.md) |
+
+#### Returns
+
+[`Navi3DEdge`](Navi3DEdge.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L177)
+
+___
+
+### loopPublicEdge
+
+▸ **loopPublicEdge**(`triangle`): [`Navi3DEdge`](Navi3DEdge.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `triangle` | [`Navi3DTriangle`](Navi3DTriangle.md) |
+
+#### Returns
+
+[`Navi3DEdge`](Navi3DEdge.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:189](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L189)
+
+___
+
+### randomPoint
+
+▸ **randomPoint**(): [`Vector3`](Vector3.md)
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/navigation/Navi3DTriangle.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/math/navigation/Navi3DTriangle.ts#L203)
diff --git a/docs/api/classes/OAnimationEvent.md b/docs/api/classes/OAnimationEvent.md
new file mode 100644
index 00000000..c864be1e
--- /dev/null
+++ b/docs/api/classes/OAnimationEvent.md
@@ -0,0 +1,378 @@
+# Class: OAnimationEvent
+
+Skeleton animation event
+
+## Hierarchy
+
+- [`CEvent`](CEvent.md)
+
+ ↳ **`OAnimationEvent`**
+
+### Constructors
+
+- [constructor](OAnimationEvent.md#constructor)
+
+### Properties
+
+- [skeletonAnimation](OAnimationEvent.md#skeletonanimation)
+- [target](OAnimationEvent.md#target)
+- [currentTarget](OAnimationEvent.md#currenttarget)
+- [type](OAnimationEvent.md#type)
+- [data](OAnimationEvent.md#data)
+- [param](OAnimationEvent.md#param)
+- [time](OAnimationEvent.md#time)
+- [delay](OAnimationEvent.md#delay)
+- [mouseCode](OAnimationEvent.md#mousecode)
+- [ctrlKey](OAnimationEvent.md#ctrlkey)
+- [metaKey](OAnimationEvent.md#metakey)
+- [altKey](OAnimationEvent.md#altkey)
+- [shiftKey](OAnimationEvent.md#shiftkey)
+- [targetTouches](OAnimationEvent.md#targettouches)
+- [changedTouches](OAnimationEvent.md#changedtouches)
+- [touches](OAnimationEvent.md#touches)
+- [view](OAnimationEvent.md#view)
+
+### Accessors
+
+- [isStopImmediatePropagation](OAnimationEvent.md#isstopimmediatepropagation)
+
+### Methods
+
+- [stopImmediatePropagation](OAnimationEvent.md#stopimmediatepropagation)
+
+## Constructors
+
+### constructor
+
+• **new OAnimationEvent**(`name`, `time`): [`OAnimationEvent`](OAnimationEvent.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `time` | `number` |
+
+#### Returns
+
+[`OAnimationEvent`](OAnimationEvent.md)
+
+#### Overrides
+
+[CEvent](CEvent.md).[constructor](CEvent.md#constructor)
+
+#### Defined in
+
+[src/components/anim/OAnimationEvent.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/OAnimationEvent.ts#L14)
+
+## Properties
+
+### skeletonAnimation
+
+• **skeletonAnimation**: [`SkeletonAnimationComponent`](SkeletonAnimationComponent.md)
+
+owner skeleton animation component
+
+#### Defined in
+
+[src/components/anim/OAnimationEvent.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/OAnimationEvent.ts#L12)
+
+___
+
+### target
+
+• **target**: [`Object3D`](Object3D.md)
+
+Event target, it's usually event dispatcher
+
+#### Inherited from
+
+[CEvent](CEvent.md).[target](CEvent.md#target)
+
+#### Defined in
+
+[src/event/CEvent.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L13)
+
+___
+
+### currentTarget
+
+• **currentTarget**: `CEventListener`
+
+Current event target, it's current bubble object
+
+#### Inherited from
+
+[CEvent](CEvent.md).[currentTarget](CEvent.md#currenttarget)
+
+#### Defined in
+
+[src/event/CEvent.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L18)
+
+___
+
+### type
+
+• **type**: `string`
+
+event type, it's registered string of key
+
+#### Inherited from
+
+[CEvent](CEvent.md).[type](CEvent.md#type)
+
+#### Defined in
+
+[src/event/CEvent.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L23)
+
+___
+
+### data
+
+• **data**: `any`
+
+extra data.Used for the transmission process of events, carrying data
+
+#### Inherited from
+
+[CEvent](CEvent.md).[data](CEvent.md#data)
+
+#### Defined in
+
+[src/event/CEvent.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L28)
+
+___
+
+### param
+
+• **param**: `any`
+
+The param data when event is registered
+
+#### Inherited from
+
+[CEvent](CEvent.md).[param](CEvent.md#param)
+
+#### Defined in
+
+[src/event/CEvent.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L34)
+
+___
+
+### time
+
+• **time**: `number` = `0`
+
+the time when event is
+
+#### Inherited from
+
+[CEvent](CEvent.md).[time](CEvent.md#time)
+
+#### Defined in
+
+[src/event/CEvent.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L40)
+
+___
+
+### delay
+
+• **delay**: `number` = `0`
+
+the delay time when event is dispatched.
+
+#### Inherited from
+
+[CEvent](CEvent.md).[delay](CEvent.md#delay)
+
+#### Defined in
+
+[src/event/CEvent.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L46)
+
+___
+
+### mouseCode
+
+• **mouseCode**: `number` = `0`
+
+mouse code, see
+
+**`Mouse Code`**
+
+[MouseCode](../enums/MouseCode.md)
+
+#### Inherited from
+
+[CEvent](CEvent.md).[mouseCode](CEvent.md#mousecode)
+
+#### Defined in
+
+[src/event/CEvent.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L52)
+
+___
+
+### ctrlKey
+
+• **ctrlKey**: `boolean`
+
+Is Ctrl key pressed when the event occurs
+
+#### Inherited from
+
+[CEvent](CEvent.md).[ctrlKey](CEvent.md#ctrlkey)
+
+#### Defined in
+
+[src/event/CEvent.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L57)
+
+___
+
+### metaKey
+
+• **metaKey**: `boolean`
+
+Is Meta key pressed when the event occurs
+
+#### Inherited from
+
+[CEvent](CEvent.md).[metaKey](CEvent.md#metakey)
+
+#### Defined in
+
+[src/event/CEvent.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L62)
+
+___
+
+### altKey
+
+• **altKey**: `boolean`
+
+Is Alt key pressed when the event occurs
+
+#### Inherited from
+
+[CEvent](CEvent.md).[altKey](CEvent.md#altkey)
+
+#### Defined in
+
+[src/event/CEvent.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L67)
+
+___
+
+### shiftKey
+
+• **shiftKey**: `boolean`
+
+Is Shift key pressed when the event occurs
+
+#### Inherited from
+
+[CEvent](CEvent.md).[shiftKey](CEvent.md#shiftkey)
+
+#### Defined in
+
+[src/event/CEvent.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L72)
+
+___
+
+### targetTouches
+
+• **targetTouches**: `TouchData`[]
+
+Collection of finger touch points, which registered
+
+#### Inherited from
+
+[CEvent](CEvent.md).[targetTouches](CEvent.md#targettouches)
+
+#### Defined in
+
+[src/event/CEvent.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L77)
+
+___
+
+### changedTouches
+
+• **changedTouches**: `TouchData`[]
+
+Collection of finger touch points changed
+
+#### Inherited from
+
+[CEvent](CEvent.md).[changedTouches](CEvent.md#changedtouches)
+
+#### Defined in
+
+[src/event/CEvent.ts:82](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L82)
+
+___
+
+### touches
+
+• **touches**: `TouchData`[]
+
+Collection of finger touch points
+
+#### Inherited from
+
+[CEvent](CEvent.md).[touches](CEvent.md#touches)
+
+#### Defined in
+
+[src/event/CEvent.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L87)
+
+___
+
+### view
+
+• **view**: [`View3D`](View3D.md)
+
+binded view3D object in event.
+
+#### Inherited from
+
+[CEvent](CEvent.md).[view](CEvent.md#view)
+
+#### Defined in
+
+[src/event/CEvent.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L94)
+
+## Accessors
+
+### isStopImmediatePropagation
+
+• `get` **isStopImmediatePropagation**(): `boolean`
+
+Returns stopImmediatePropagation value
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+CEvent.isStopImmediatePropagation
+
+#### Defined in
+
+[src/event/CEvent.ts:125](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L125)
+
+## Methods
+
+### stopImmediatePropagation
+
+▸ **stopImmediatePropagation**(): `void`
+
+Prevent bubbling of all event listeners in subsequent nodes of the current node in the event flow.
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEvent](CEvent.md).[stopImmediatePropagation](CEvent.md#stopimmediatepropagation)
+
+#### Defined in
+
+[src/event/CEvent.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L110)
diff --git a/docs/api/classes/Object3D.md b/docs/api/classes/Object3D.md
new file mode 100644
index 00000000..23de7ec5
--- /dev/null
+++ b/docs/api/classes/Object3D.md
@@ -0,0 +1,1666 @@
+# Class: Object3D
+
+The base class of most objects provides a series of properties and methods for manipulating objects in three-dimensional space.
+
+## Hierarchy
+
+- [`Entity`](Entity.md)
+
+ ↳ **`Object3D`**
+
+ ↳↳ [`Scene3D`](Scene3D.md)
+
+ ↳↳ [`InstancedMesh`](InstancedMesh.md)
+
+ ↳↳ [`Object3DTransformTools`](Object3DTransformTools.md)
+
+### Constructors
+
+- [constructor](Object3D.md#constructor)
+
+### Properties
+
+- [name](Object3D.md#name)
+- [transform](Object3D.md#transform)
+- [renderNode](Object3D.md#rendernode)
+- [entityChildren](Object3D.md#entitychildren)
+- [components](Object3D.md#components)
+- [prefabRef](Object3D.md#prefabref)
+- [serializeTag](Object3D.md#serializetag)
+
+### Accessors
+
+- [instanceID](Object3D.md#instanceid)
+- [numChildren](Object3D.md#numchildren)
+- [bound](Object3D.md#bound)
+- [isScene3D](Object3D.md#isscene3d)
+- [localPosition](Object3D.md#localposition)
+- [localRotation](Object3D.md#localrotation)
+- [localScale](Object3D.md#localscale)
+- [localQuaternion](Object3D.md#localquaternion)
+- [parent](Object3D.md#parent)
+- [parentObject](Object3D.md#parentobject)
+- [x](Object3D.md#x)
+- [y](Object3D.md#y)
+- [z](Object3D.md#z)
+- [scaleX](Object3D.md#scalex)
+- [scaleY](Object3D.md#scaley)
+- [scaleZ](Object3D.md#scalez)
+- [rotationX](Object3D.md#rotationx)
+- [rotationY](Object3D.md#rotationy)
+- [rotationZ](Object3D.md#rotationz)
+
+### Methods
+
+- [getObjectByName](Object3D.md#getobjectbyname)
+- [addChild](Object3D.md#addchild)
+- [removeChild](Object3D.md#removechild)
+- [removeAllChild](Object3D.md#removeallchild)
+- [removeSelf](Object3D.md#removeself)
+- [removeChildByIndex](Object3D.md#removechildbyindex)
+- [hasChild](Object3D.md#haschild)
+- [removeFromParent](Object3D.md#removefromparent)
+- [getChildByIndex](Object3D.md#getchildbyindex)
+- [getChildByName](Object3D.md#getchildbyname)
+- [noticeComponents](Object3D.md#noticecomponents)
+- [forChild](Object3D.md#forchild)
+- [addComponent](Object3D.md#addcomponent)
+- [getOrAddComponent](Object3D.md#getoraddcomponent)
+- [removeComponent](Object3D.md#removecomponent)
+- [hasComponent](Object3D.md#hascomponent)
+- [getComponent](Object3D.md#getcomponent)
+- [getComponentFromParent](Object3D.md#getcomponentfromparent)
+- [getComponentsInChild](Object3D.md#getcomponentsinchild)
+- [getComponents](Object3D.md#getcomponents)
+- [getComponentsExt](Object3D.md#getcomponentsext)
+- [getComponentsByProperty](Object3D.md#getcomponentsbyproperty)
+- [clone](Object3D.md#clone)
+- [notifyChange](Object3D.md#notifychange)
+- [traverse](Object3D.md#traverse)
+- [destroy](Object3D.md#destroy)
+- [dispatchEvent](Object3D.md#dispatchevent)
+- [addEventListener](Object3D.md#addeventlistener)
+- [removeEventListener](Object3D.md#removeeventlistener)
+- [removeEventListenerAt](Object3D.md#removeeventlistenerat)
+- [removeAllEventListener](Object3D.md#removealleventlistener)
+- [containEventListener](Object3D.md#containeventlistener)
+- [hasEventListener](Object3D.md#haseventlistener)
+
+## Constructors
+
+### constructor
+
+• **new Object3D**(): [`Object3D`](Object3D.md)
+
+Instantiate a 3D object
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Overrides
+
+[Entity](Entity.md).[constructor](Entity.md#constructor)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L24)
+
+## Properties
+
+### name
+
+• **name**: `string` = `''`
+
+The name of the object. The default value is an empty string.
+
+#### Inherited from
+
+[Entity](Entity.md).[name](Entity.md#name)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L24)
+
+___
+
+### transform
+
+• **transform**: [`Transform`](Transform.md)
+
+The Transform attached to this object.
+
+#### Inherited from
+
+[Entity](Entity.md).[transform](Entity.md#transform)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L42)
+
+___
+
+### renderNode
+
+• **renderNode**: `RenderNode`
+
+Renderer components
+
+#### Inherited from
+
+[Entity](Entity.md).[renderNode](Entity.md#rendernode)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L47)
+
+___
+
+### entityChildren
+
+• **entityChildren**: [`Entity`](Entity.md)[]
+
+An array containing sub objects of an object
+
+#### Inherited from
+
+[Entity](Entity.md).[entityChildren](Entity.md#entitychildren)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L52)
+
+___
+
+### components
+
+• **components**: `Map`\<`any`, [`IComponent`](../interfaces/IComponent.md)\>
+
+List of components attached to an object
+
+#### Inherited from
+
+[Entity](Entity.md).[components](Entity.md#components)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L57)
+
+___
+
+### prefabRef
+
+• `Optional` **prefabRef**: `string`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L19)
+
+___
+
+### serializeTag
+
+• `Optional` **serializeTag**: [`SerializeTag`](../types/SerializeTag.md)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L20)
+
+## Accessors
+
+### instanceID
+
+• `get` **instanceID**(): `string`
+
+The unique identifier of the object.
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Entity.instanceID
+
+#### Defined in
+
+[src/core/entities/Entity.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L32)
+
+___
+
+### numChildren
+
+• `get` **numChildren**(): `number`
+
+Returns the number of child objects of an object
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Entity.numChildren
+
+#### Defined in
+
+[src/core/entities/Entity.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L116)
+
+___
+
+### bound
+
+• `get` **bound**(): `IBound`
+
+#### Returns
+
+`IBound`
+
+#### Inherited from
+
+Entity.bound
+
+#### Defined in
+
+[src/core/entities/Entity.ts:277](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L277)
+
+• `set` **bound**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `IBound` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Entity.bound
+
+#### Defined in
+
+[src/core/entities/Entity.ts:282](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L282)
+
+___
+
+### isScene3D
+
+• `get` **isScene3D**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L30)
+
+___
+
+### localPosition
+
+• `get` **localPosition**(): [`Vector3`](Vector3.md)
+
+Get the position of an object relative to its parent
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:272](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L272)
+
+• `set` **localPosition**(`value`): `void`
+
+Set the position of an object relative to its parent
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:279](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L279)
+
+___
+
+### localRotation
+
+• `get` **localRotation**(): [`Vector3`](Vector3.md)
+
+Get the rotation attribute of an object relative to its parent
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:286](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L286)
+
+• `set` **localRotation**(`value`): `void`
+
+Set the rotation attribute of an object relative to its parent
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:293](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L293)
+
+___
+
+### localScale
+
+• `get` **localScale**(): [`Vector3`](Vector3.md)
+
+Get the scaling attribute of an object relative to its parent
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:300](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L300)
+
+• `set` **localScale**(`value`): `void`
+
+Set the scaling attribute of an object relative to its parent
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:307](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L307)
+
+___
+
+### localQuaternion
+
+• `get` **localQuaternion**(): [`Quaternion`](Quaternion.md)
+
+Get the rotation attribute of an object relative to its parent, which is a quaternion
+
+#### Returns
+
+[`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:314](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L314)
+
+• `set` **localQuaternion**(`value`): `void`
+
+Set the rotation attribute of an object relative to its parent, which is a quaternion
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Quaternion`](Quaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:321](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L321)
+
+___
+
+### parent
+
+• `get` **parent**(): [`Transform`](Transform.md)
+
+Transform component of object parent
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:336](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L336)
+
+___
+
+### parentObject
+
+• `get` **parentObject**(): [`Object3D`](Object3D.md)
+
+parent object3D
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:344](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L344)
+
+___
+
+### x
+
+• `get` **x**(): `number`
+
+Get the x coordinate relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:360](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L360)
+
+• `set` **x**(`value`): `void`
+
+Set the x coordinate relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:352](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L352)
+
+___
+
+### y
+
+• `get` **y**(): `number`
+
+Get the y coordinate relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:375](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L375)
+
+• `set` **y**(`value`): `void`
+
+Set the y coordinate relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:367](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L367)
+
+___
+
+### z
+
+• `get` **z**(): `number`
+
+Get the z coordinate relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:389](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L389)
+
+• `set` **z**(`value`): `void`
+
+Set the z coordinate relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:382](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L382)
+
+___
+
+### scaleX
+
+• `get` **scaleX**(): `number`
+
+Get the x scale relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:404](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L404)
+
+• `set` **scaleX**(`value`): `void`
+
+Set the x scale relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:396](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L396)
+
+___
+
+### scaleY
+
+• `get` **scaleY**(): `number`
+
+Get the y scale relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:420](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L420)
+
+• `set` **scaleY**(`value`): `void`
+
+Set the y scale relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L412)
+
+___
+
+### scaleZ
+
+• `get` **scaleZ**(): `number`
+
+Get the z scale relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:436](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L436)
+
+• `set` **scaleZ**(`value`): `void`
+
+Set the z scale relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:428](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L428)
+
+___
+
+### rotationX
+
+• `get` **rotationX**(): `number`
+
+Get the x rotation relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:452](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L452)
+
+• `set` **rotationX**(`value`): `void`
+
+Set the x rotation relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:444](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L444)
+
+___
+
+### rotationY
+
+• `get` **rotationY**(): `number`
+
+Get the y rotation relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:468](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L468)
+
+• `set` **rotationY**(`value`): `void`
+
+Set the y rotation relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:460](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L460)
+
+___
+
+### rotationZ
+
+• `get` **rotationZ**(): `number`
+
+Set the z rotation relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:484](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L484)
+
+• `set` **rotationZ**(`value`): `void`
+
+Set the z rotation relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:476](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L476)
+
+## Methods
+
+### getObjectByName
+
+▸ **getObjectByName**(`name`): [`Entity`](Entity.md)
+
+Starting from the object itself, search for the object and its children, and return the first child object with a matching name.
+For most objects, the name is an empty string by default. You must manually set it to use this method.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | input name |
+
+#### Returns
+
+[`Entity`](Entity.md)
+
+result Entity
+
+#### Inherited from
+
+[Entity](Entity.md).[getObjectByName](Entity.md#getobjectbyname)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L81)
+
+___
+
+### addChild
+
+▸ **addChild**(`child`): [`Entity`](Entity.md)
+
+Add an object as a child of this object. You can add any number of objects.
+Any current parent object on the object passed here will be deleted, as an object can only have at most one parent object.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | [`Entity`](Entity.md) | target child entity |
+
+#### Returns
+
+[`Entity`](Entity.md)
+
+#### Inherited from
+
+[Entity](Entity.md).[addChild](Entity.md#addchild)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:127](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L127)
+
+___
+
+### removeChild
+
+▸ **removeChild**(`child`): `void`
+
+Remove the child objects of the object. You can remove any number of objects.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | [`Entity`](Entity.md) | Removed objects |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Entity](Entity.md).[removeChild](Entity.md#removechild)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L152)
+
+___
+
+### removeAllChild
+
+▸ **removeAllChild**(): `void`
+
+Remove all children of the current object
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Entity](Entity.md).[removeAllChild](Entity.md#removeallchild)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L168)
+
+___
+
+### removeSelf
+
+▸ **removeSelf**(): `this`
+
+Remove the current node from the parent
+
+#### Returns
+
+`this`
+
+this
+
+#### Inherited from
+
+[Entity](Entity.md).[removeSelf](Entity.md#removeself)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L179)
+
+___
+
+### removeChildByIndex
+
+▸ **removeChildByIndex**(`index`): `void`
+
+Search for child nodes of objects and remove child objects with matching indexes.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index` | `number` | assign index |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Entity](Entity.md).[removeChildByIndex](Entity.md#removechildbyindex)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:189](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L189)
+
+___
+
+### hasChild
+
+▸ **hasChild**(`child`): `boolean`
+
+Does the current object contain a certain object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | [`Entity`](Entity.md) | certain object |
+
+#### Returns
+
+`boolean`
+
+boolean
+
+#### Inherited from
+
+[Entity](Entity.md).[hasChild](Entity.md#haschild)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L203)
+
+___
+
+### removeFromParent
+
+▸ **removeFromParent**(): `this`
+
+Remove the current node from the parent
+
+#### Returns
+
+`this`
+
+this
+
+#### Inherited from
+
+[Entity](Entity.md).[removeFromParent](Entity.md#removefromparent)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:213](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L213)
+
+___
+
+### getChildByIndex
+
+▸ **getChildByIndex**(`index`): [`Entity`](Entity.md)
+
+Search for object children and return the first child object with a matching index.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index` | `number` | matching index |
+
+#### Returns
+
+[`Entity`](Entity.md)
+
+child entity
+
+#### Inherited from
+
+[Entity](Entity.md).[getChildByIndex](Entity.md#getchildbyindex)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L227)
+
+___
+
+### getChildByName
+
+▸ **getChildByName**(`name`, `loopChild?`): `any`
+
+Search for object children and return a child object with a matching name.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `name` | `string` | `undefined` | matching name |
+| `loopChild` | `boolean` | `true` | Whether to traverse the children of the child object. The default value is true |
+
+#### Returns
+
+`any`
+
+result
+
+#### Inherited from
+
+[Entity](Entity.md).[getChildByName](Entity.md#getchildbyname)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:242](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L242)
+
+___
+
+### noticeComponents
+
+▸ **noticeComponents**(`key`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | keyof [`IComponent`](../interfaces/IComponent.md) |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Entity](Entity.md).[noticeComponents](Entity.md#noticecomponents)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:328](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L328)
+
+___
+
+### forChild
+
+▸ **forChild**(`call`): `void`
+
+Traverse all sub objects starting from the object itself.
+ If there are still sub objects in the sub object, recursively traverse.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `call` | `Function` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L41)
+
+___
+
+### addComponent
+
+▸ **addComponent**\<`T`\>(`c`, `param?`): `T`
+
+Create a new component and add it to the object, and return an instance of the component.
+ If a component of this type already exists, it will not be added and will return null.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+| `param?` | `any` | - |
+
+#### Returns
+
+`T`
+
+result component
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L55)
+
+___
+
+### getOrAddComponent
+
+▸ **getOrAddComponent**\<`T`\>(`c`): `T`
+
+Returns an instance of a component object of the specified type.
+ If there are no components of that type, a new component is created and added to the object.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`T`
+
+result component
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L76)
+
+___
+
+### removeComponent
+
+▸ **removeComponent**\<`T`\>(`c`): `void`
+
+Remove components of the specified type
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L89)
+
+___
+
+### hasComponent
+
+▸ **hasComponent**\<`T`\>(`c`): `boolean`
+
+Is there a component of the specified type
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | type of component |
+
+#### Returns
+
+`boolean`
+
+boolean
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L106)
+
+___
+
+### getComponent
+
+▸ **getComponent**\<`T`\>(`c`): `T`
+
+Returns a component of the specified type.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`T`
+
+result component
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L116)
+
+___
+
+### getComponentFromParent
+
+▸ **getComponentFromParent**\<`T`\>(`c`): `T`
+
+Returns a component object of the specified type from the parent node.
+ If there are no components of that type,
+ calls the parent object lookup of the parent object
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`T`
+
+reulst component
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L128)
+
+___
+
+### getComponentsInChild
+
+▸ **getComponentsInChild**\<`T`\>(`c`): `T`[]
+
+Returns an array of component objects of the specified type.
+ If there are no components of that type, search in the list of self body class objects
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`T`[]
+
+result components
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L148)
+
+___
+
+### getComponents
+
+▸ **getComponents**\<`T`\>(`c`, `outList?`, `includeInactive?`): `T`[]
+
+Returns all components of the specified type contained in the current object and its children.
+ If there are children in the child object, recursively search.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+| `outList?` | `T`[] | result component list |
+| `includeInactive?` | `boolean` | Whether to include invisible objects, default to false |
+
+#### Returns
+
+`T`[]
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:171](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L171)
+
+___
+
+### getComponentsExt
+
+▸ **getComponentsExt**\<`T`\>(`c`, `ret?`, `includeInactive?`): `T`[]
+
+Quickly obtain components and no longer access child nodes after obtaining them at a certain node
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+| `ret?` | `T`[] | List of incoming T |
+| `includeInactive?` | `boolean` | Whether to include invisible objects, default to false |
+
+#### Returns
+
+`T`[]
+
+{T}
+
+**`Memberof`**
+
+Object3D
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:196](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L196)
+
+___
+
+### getComponentsByProperty
+
+▸ **getComponentsByProperty**\<`T`\>(`key`, `value`, `findedAndBreak?`, `ret?`, `includeInactive?`): `T`[]
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `key` | `string` | `undefined` |
+| `value` | `any` | `undefined` |
+| `findedAndBreak` | `boolean` | `true` |
+| `ret?` | `T`[] | `undefined` |
+| `includeInactive?` | `boolean` | `undefined` |
+
+#### Returns
+
+`T`[]
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L211)
+
+___
+
+### clone
+
+▸ **clone**(): [`Object3D`](Object3D.md)
+
+clone a Object3D
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:238](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L238)
+
+___
+
+### notifyChange
+
+▸ **notifyChange**(): `void`
+
+Notify transformation attribute updates
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:328](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L328)
+
+___
+
+### traverse
+
+▸ **traverse**(`callback`): `void`
+
+Recursive child nodes and execute specified function
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `callback` | (`child`: `any`) => `void` | specified function |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:505](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L505)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+Release self
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[Entity](Entity.md).[destroy](Entity.md#destroy)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:520](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L520)
+
+___
+
+### dispatchEvent
+
+▸ **dispatchEvent**(`event`): `void`
+
+Dispatch an event to all registered objects with a specific type of listener.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `event` | [`CEvent`](CEvent.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Entity](Entity.md).[dispatchEvent](Entity.md#dispatchevent)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L24)
+
+___
+
+### addEventListener
+
+▸ **addEventListener**(`type`, `callback`, `thisObject`, `param?`, `priority?`): `number`
+
+register an event listener to event distancher.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event type. |
+| `callback` | `Function` | `undefined` | {Function} The callback function that handles events. This function must accept an Event3D object as its unique parameter and cannot return any result. for example: function(evt:Event3D):void. |
+| `thisObject` | `any` | `undefined` | {any} Current registration object, it'll call callback function. |
+| `param` | `any` | `null` | {any} the data binded to registered event, the default value is null. |
+| `priority` | `number` | `0` | {number} The priority of callback function execution, with a larger set value having priority to call |
+
+#### Returns
+
+`number`
+
+Returns register event id
+
+#### Inherited from
+
+[Entity](Entity.md).[addEventListener](Entity.md#addeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L79)
+
+___
+
+### removeEventListener
+
+▸ **removeEventListener**(`type`, `callback`, `thisObject`): `void`
+
+Remove Event Listening
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` \| `number` | {string} event type |
+| `callback` | `Function` | {Function} callback function of event register |
+| `thisObject` | `any` | {any} The current registered object. |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Entity](Entity.md).[removeEventListener](Entity.md#removeeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L113)
+
+___
+
+### removeEventListenerAt
+
+▸ **removeEventListenerAt**(`id`): `boolean`
+
+Remove an event Listening with id
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Entity](Entity.md).[removeEventListenerAt](Entity.md#removeeventlistenerat)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L133)
+
+___
+
+### removeAllEventListener
+
+▸ **removeAllEventListener**(`eventType?`): `void`
+
+Specify a event type to remove all related event listeners
+eventType event type, set null to remove all event listeners
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `eventType` | `string` \| `number` | `null` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Entity](Entity.md).[removeAllEventListener](Entity.md#removealleventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L153)
+
+___
+
+### containEventListener
+
+▸ **containEventListener**(`type`): `boolean`
+
+whether the target presence of a listener with event type.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` | {string} event type. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+[Entity](Entity.md).[containEventListener](Entity.md#containeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:185](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L185)
+
+___
+
+### hasEventListener
+
+▸ **hasEventListener**(`type`, `callback?`, `thisObject?`): `boolean`
+
+whether the target presence of a listener with event type. it associate more registration parameters.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event name. |
+| `callback` | `Function` | `null` | {Function} callback function of event register. |
+| `thisObject` | `any` | `null` | {any} The registered object. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+[Entity](Entity.md).[hasEventListener](Entity.md#haseventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L198)
diff --git a/docs/api/classes/Object3DTransformTools.md b/docs/api/classes/Object3DTransformTools.md
new file mode 100644
index 00000000..aea31797
--- /dev/null
+++ b/docs/api/classes/Object3DTransformTools.md
@@ -0,0 +1,2038 @@
+# Class: Object3DTransformTools
+
+Object3D transform controller
+
+## Hierarchy
+
+- [`Object3D`](Object3D.md)
+
+ ↳ **`Object3DTransformTools`**
+
+### Constructors
+
+- [constructor](Object3DTransformTools.md#constructor)
+
+### Properties
+
+- [name](Object3DTransformTools.md#name)
+- [transform](Object3DTransformTools.md#transform)
+- [renderNode](Object3DTransformTools.md#rendernode)
+- [entityChildren](Object3DTransformTools.md#entitychildren)
+- [components](Object3DTransformTools.md#components)
+- [prefabRef](Object3DTransformTools.md#prefabref)
+- [serializeTag](Object3DTransformTools.md#serializetag)
+- [mXObj](Object3DTransformTools.md#mxobj)
+- [mYObj](Object3DTransformTools.md#myobj)
+- [mZObj](Object3DTransformTools.md#mzobj)
+
+### Accessors
+
+- [instanceID](Object3DTransformTools.md#instanceid)
+- [numChildren](Object3DTransformTools.md#numchildren)
+- [bound](Object3DTransformTools.md#bound)
+- [isScene3D](Object3DTransformTools.md#isscene3d)
+- [localPosition](Object3DTransformTools.md#localposition)
+- [localRotation](Object3DTransformTools.md#localrotation)
+- [localScale](Object3DTransformTools.md#localscale)
+- [localQuaternion](Object3DTransformTools.md#localquaternion)
+- [parent](Object3DTransformTools.md#parent)
+- [parentObject](Object3DTransformTools.md#parentobject)
+- [x](Object3DTransformTools.md#x)
+- [y](Object3DTransformTools.md#y)
+- [z](Object3DTransformTools.md#z)
+- [scaleX](Object3DTransformTools.md#scalex)
+- [scaleY](Object3DTransformTools.md#scaley)
+- [scaleZ](Object3DTransformTools.md#scalez)
+- [rotationX](Object3DTransformTools.md#rotationx)
+- [rotationY](Object3DTransformTools.md#rotationy)
+- [rotationZ](Object3DTransformTools.md#rotationz)
+- [instance](Object3DTransformTools.md#instance)
+- [transformMode](Object3DTransformTools.md#transformmode)
+- [transformSpaceMode](Object3DTransformTools.md#transformspacemode)
+- [target](Object3DTransformTools.md#target)
+
+### Methods
+
+- [getObjectByName](Object3DTransformTools.md#getobjectbyname)
+- [addChild](Object3DTransformTools.md#addchild)
+- [removeChild](Object3DTransformTools.md#removechild)
+- [removeAllChild](Object3DTransformTools.md#removeallchild)
+- [removeSelf](Object3DTransformTools.md#removeself)
+- [removeChildByIndex](Object3DTransformTools.md#removechildbyindex)
+- [hasChild](Object3DTransformTools.md#haschild)
+- [removeFromParent](Object3DTransformTools.md#removefromparent)
+- [getChildByIndex](Object3DTransformTools.md#getchildbyindex)
+- [getChildByName](Object3DTransformTools.md#getchildbyname)
+- [noticeComponents](Object3DTransformTools.md#noticecomponents)
+- [forChild](Object3DTransformTools.md#forchild)
+- [addComponent](Object3DTransformTools.md#addcomponent)
+- [getOrAddComponent](Object3DTransformTools.md#getoraddcomponent)
+- [removeComponent](Object3DTransformTools.md#removecomponent)
+- [hasComponent](Object3DTransformTools.md#hascomponent)
+- [getComponent](Object3DTransformTools.md#getcomponent)
+- [getComponentFromParent](Object3DTransformTools.md#getcomponentfromparent)
+- [getComponentsInChild](Object3DTransformTools.md#getcomponentsinchild)
+- [getComponents](Object3DTransformTools.md#getcomponents)
+- [getComponentsExt](Object3DTransformTools.md#getcomponentsext)
+- [getComponentsByProperty](Object3DTransformTools.md#getcomponentsbyproperty)
+- [clone](Object3DTransformTools.md#clone)
+- [notifyChange](Object3DTransformTools.md#notifychange)
+- [traverse](Object3DTransformTools.md#traverse)
+- [destroy](Object3DTransformTools.md#destroy)
+- [dispatchEvent](Object3DTransformTools.md#dispatchevent)
+- [addEventListener](Object3DTransformTools.md#addeventlistener)
+- [removeEventListener](Object3DTransformTools.md#removeeventlistener)
+- [removeEventListenerAt](Object3DTransformTools.md#removeeventlistenerat)
+- [removeAllEventListener](Object3DTransformTools.md#removealleventlistener)
+- [containEventListener](Object3DTransformTools.md#containeventlistener)
+- [hasEventListener](Object3DTransformTools.md#haseventlistener)
+- [active](Object3DTransformTools.md#active)
+- [unActive](Object3DTransformTools.md#unactive)
+- [selectObject](Object3DTransformTools.md#selectobject)
+- [selectTransformMode](Object3DTransformTools.md#selecttransformmode)
+- [selectTransformSpaceMode](Object3DTransformTools.md#selecttransformspacemode)
+
+## Constructors
+
+### constructor
+
+• **new Object3DTransformTools**(): [`Object3DTransformTools`](Object3DTransformTools.md)
+
+#### Returns
+
+[`Object3DTransformTools`](Object3DTransformTools.md)
+
+#### Overrides
+
+[Object3D](Object3D.md).[constructor](Object3D.md#constructor)
+
+#### Defined in
+
+[src/util/transformUtil/Object3DTransformTools.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/Object3DTransformTools.ts#L40)
+
+## Properties
+
+### name
+
+• **name**: `string` = `''`
+
+The name of the object. The default value is an empty string.
+
+#### Inherited from
+
+[Object3D](Object3D.md).[name](Object3D.md#name)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L24)
+
+___
+
+### transform
+
+• **transform**: [`Transform`](Transform.md)
+
+The Transform attached to this object.
+
+#### Inherited from
+
+[Object3D](Object3D.md).[transform](Object3D.md#transform)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L42)
+
+___
+
+### renderNode
+
+• **renderNode**: `RenderNode`
+
+Renderer components
+
+#### Inherited from
+
+[Object3D](Object3D.md).[renderNode](Object3D.md#rendernode)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L47)
+
+___
+
+### entityChildren
+
+• **entityChildren**: [`Entity`](Entity.md)[]
+
+An array containing sub objects of an object
+
+#### Inherited from
+
+[Object3D](Object3D.md).[entityChildren](Object3D.md#entitychildren)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L52)
+
+___
+
+### components
+
+• **components**: `Map`\<`any`, [`IComponent`](../interfaces/IComponent.md)\>
+
+List of components attached to an object
+
+#### Inherited from
+
+[Object3D](Object3D.md).[components](Object3D.md#components)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L57)
+
+___
+
+### prefabRef
+
+• `Optional` **prefabRef**: `string`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[prefabRef](Object3D.md#prefabref)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L19)
+
+___
+
+### serializeTag
+
+• `Optional` **serializeTag**: [`SerializeTag`](../types/SerializeTag.md)
+
+#### Inherited from
+
+[Object3D](Object3D.md).[serializeTag](Object3D.md#serializetag)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L20)
+
+___
+
+### mXObj
+
+• **mXObj**: [`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/util/transformUtil/Object3DTransformTools.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/Object3DTransformTools.ts#L37)
+
+___
+
+### mYObj
+
+• **mYObj**: [`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/util/transformUtil/Object3DTransformTools.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/Object3DTransformTools.ts#L38)
+
+___
+
+### mZObj
+
+• **mZObj**: [`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/util/transformUtil/Object3DTransformTools.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/Object3DTransformTools.ts#L39)
+
+## Accessors
+
+### instanceID
+
+• `get` **instanceID**(): `string`
+
+The unique identifier of the object.
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Object3D.instanceID
+
+#### Defined in
+
+[src/core/entities/Entity.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L32)
+
+___
+
+### numChildren
+
+• `get` **numChildren**(): `number`
+
+Returns the number of child objects of an object
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.numChildren
+
+#### Defined in
+
+[src/core/entities/Entity.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L116)
+
+___
+
+### bound
+
+• `get` **bound**(): `IBound`
+
+#### Returns
+
+`IBound`
+
+#### Inherited from
+
+Object3D.bound
+
+#### Defined in
+
+[src/core/entities/Entity.ts:277](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L277)
+
+• `set` **bound**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `IBound` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.bound
+
+#### Defined in
+
+[src/core/entities/Entity.ts:282](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L282)
+
+___
+
+### isScene3D
+
+• `get` **isScene3D**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Object3D.isScene3D
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L30)
+
+___
+
+### localPosition
+
+• `get` **localPosition**(): [`Vector3`](Vector3.md)
+
+Get the position of an object relative to its parent
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Object3D.localPosition
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:272](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L272)
+
+• `set` **localPosition**(`value`): `void`
+
+Set the position of an object relative to its parent
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.localPosition
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:279](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L279)
+
+___
+
+### localRotation
+
+• `get` **localRotation**(): [`Vector3`](Vector3.md)
+
+Get the rotation attribute of an object relative to its parent
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Object3D.localRotation
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:286](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L286)
+
+• `set` **localRotation**(`value`): `void`
+
+Set the rotation attribute of an object relative to its parent
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.localRotation
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:293](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L293)
+
+___
+
+### localScale
+
+• `get` **localScale**(): [`Vector3`](Vector3.md)
+
+Get the scaling attribute of an object relative to its parent
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Object3D.localScale
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:300](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L300)
+
+• `set` **localScale**(`value`): `void`
+
+Set the scaling attribute of an object relative to its parent
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.localScale
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:307](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L307)
+
+___
+
+### localQuaternion
+
+• `get` **localQuaternion**(): [`Quaternion`](Quaternion.md)
+
+Get the rotation attribute of an object relative to its parent, which is a quaternion
+
+#### Returns
+
+[`Quaternion`](Quaternion.md)
+
+#### Inherited from
+
+Object3D.localQuaternion
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:314](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L314)
+
+• `set` **localQuaternion**(`value`): `void`
+
+Set the rotation attribute of an object relative to its parent, which is a quaternion
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Quaternion`](Quaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.localQuaternion
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:321](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L321)
+
+___
+
+### parent
+
+• `get` **parent**(): [`Transform`](Transform.md)
+
+Transform component of object parent
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+Object3D.parent
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:336](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L336)
+
+___
+
+### parentObject
+
+• `get` **parentObject**(): [`Object3D`](Object3D.md)
+
+parent object3D
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+Object3D.parentObject
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:344](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L344)
+
+___
+
+### x
+
+• `get` **x**(): `number`
+
+Get the x coordinate relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.x
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:360](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L360)
+
+• `set` **x**(`value`): `void`
+
+Set the x coordinate relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.x
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:352](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L352)
+
+___
+
+### y
+
+• `get` **y**(): `number`
+
+Get the y coordinate relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.y
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:375](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L375)
+
+• `set` **y**(`value`): `void`
+
+Set the y coordinate relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.y
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:367](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L367)
+
+___
+
+### z
+
+• `get` **z**(): `number`
+
+Get the z coordinate relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.z
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:389](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L389)
+
+• `set` **z**(`value`): `void`
+
+Set the z coordinate relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.z
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:382](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L382)
+
+___
+
+### scaleX
+
+• `get` **scaleX**(): `number`
+
+Get the x scale relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.scaleX
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:404](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L404)
+
+• `set` **scaleX**(`value`): `void`
+
+Set the x scale relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.scaleX
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:396](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L396)
+
+___
+
+### scaleY
+
+• `get` **scaleY**(): `number`
+
+Get the y scale relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.scaleY
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:420](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L420)
+
+• `set` **scaleY**(`value`): `void`
+
+Set the y scale relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.scaleY
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L412)
+
+___
+
+### scaleZ
+
+• `get` **scaleZ**(): `number`
+
+Get the z scale relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.scaleZ
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:436](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L436)
+
+• `set` **scaleZ**(`value`): `void`
+
+Set the z scale relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.scaleZ
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:428](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L428)
+
+___
+
+### rotationX
+
+• `get` **rotationX**(): `number`
+
+Get the x rotation relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.rotationX
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:452](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L452)
+
+• `set` **rotationX**(`value`): `void`
+
+Set the x rotation relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.rotationX
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:444](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L444)
+
+___
+
+### rotationY
+
+• `get` **rotationY**(): `number`
+
+Get the y rotation relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.rotationY
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:468](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L468)
+
+• `set` **rotationY**(`value`): `void`
+
+Set the y rotation relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.rotationY
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:460](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L460)
+
+___
+
+### rotationZ
+
+• `get` **rotationZ**(): `number`
+
+Set the z rotation relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.rotationZ
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:484](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L484)
+
+• `set` **rotationZ**(`value`): `void`
+
+Set the z rotation relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.rotationZ
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:476](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L476)
+
+___
+
+### instance
+
+• `get` **instance**(): [`Object3DTransformTools`](Object3DTransformTools.md)
+
+#### Returns
+
+[`Object3DTransformTools`](Object3DTransformTools.md)
+
+#### Defined in
+
+[src/util/transformUtil/Object3DTransformTools.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/Object3DTransformTools.ts#L26)
+
+___
+
+### transformMode
+
+• `get` **transformMode**(): `TransformMode`
+
+#### Returns
+
+`TransformMode`
+
+#### Defined in
+
+[src/util/transformUtil/Object3DTransformTools.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/Object3DTransformTools.ts#L58)
+
+___
+
+### transformSpaceMode
+
+• `get` **transformSpaceMode**(): `TransformSpaceMode`
+
+#### Returns
+
+`TransformSpaceMode`
+
+#### Defined in
+
+[src/util/transformUtil/Object3DTransformTools.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/Object3DTransformTools.ts#L62)
+
+___
+
+### target
+
+• `get` **target**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/util/transformUtil/Object3DTransformTools.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/Object3DTransformTools.ts#L75)
+
+## Methods
+
+### getObjectByName
+
+▸ **getObjectByName**(`name`): [`Entity`](Entity.md)
+
+Starting from the object itself, search for the object and its children, and return the first child object with a matching name.
+For most objects, the name is an empty string by default. You must manually set it to use this method.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | input name |
+
+#### Returns
+
+[`Entity`](Entity.md)
+
+result Entity
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getObjectByName](Object3D.md#getobjectbyname)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L81)
+
+___
+
+### addChild
+
+▸ **addChild**(`child`): [`Entity`](Entity.md)
+
+Add an object as a child of this object. You can add any number of objects.
+Any current parent object on the object passed here will be deleted, as an object can only have at most one parent object.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | [`Entity`](Entity.md) | target child entity |
+
+#### Returns
+
+[`Entity`](Entity.md)
+
+#### Inherited from
+
+[Object3D](Object3D.md).[addChild](Object3D.md#addchild)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:127](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L127)
+
+___
+
+### removeChild
+
+▸ **removeChild**(`child`): `void`
+
+Remove the child objects of the object. You can remove any number of objects.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | [`Entity`](Entity.md) | Removed objects |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeChild](Object3D.md#removechild)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L152)
+
+___
+
+### removeAllChild
+
+▸ **removeAllChild**(): `void`
+
+Remove all children of the current object
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeAllChild](Object3D.md#removeallchild)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L168)
+
+___
+
+### removeSelf
+
+▸ **removeSelf**(): `this`
+
+Remove the current node from the parent
+
+#### Returns
+
+`this`
+
+this
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeSelf](Object3D.md#removeself)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L179)
+
+___
+
+### removeChildByIndex
+
+▸ **removeChildByIndex**(`index`): `void`
+
+Search for child nodes of objects and remove child objects with matching indexes.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index` | `number` | assign index |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeChildByIndex](Object3D.md#removechildbyindex)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:189](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L189)
+
+___
+
+### hasChild
+
+▸ **hasChild**(`child`): `boolean`
+
+Does the current object contain a certain object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | [`Entity`](Entity.md) | certain object |
+
+#### Returns
+
+`boolean`
+
+boolean
+
+#### Inherited from
+
+[Object3D](Object3D.md).[hasChild](Object3D.md#haschild)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L203)
+
+___
+
+### removeFromParent
+
+▸ **removeFromParent**(): `this`
+
+Remove the current node from the parent
+
+#### Returns
+
+`this`
+
+this
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeFromParent](Object3D.md#removefromparent)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:213](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L213)
+
+___
+
+### getChildByIndex
+
+▸ **getChildByIndex**(`index`): [`Entity`](Entity.md)
+
+Search for object children and return the first child object with a matching index.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index` | `number` | matching index |
+
+#### Returns
+
+[`Entity`](Entity.md)
+
+child entity
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getChildByIndex](Object3D.md#getchildbyindex)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L227)
+
+___
+
+### getChildByName
+
+▸ **getChildByName**(`name`, `loopChild?`): `any`
+
+Search for object children and return a child object with a matching name.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `name` | `string` | `undefined` | matching name |
+| `loopChild` | `boolean` | `true` | Whether to traverse the children of the child object. The default value is true |
+
+#### Returns
+
+`any`
+
+result
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getChildByName](Object3D.md#getchildbyname)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:242](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L242)
+
+___
+
+### noticeComponents
+
+▸ **noticeComponents**(`key`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | keyof [`IComponent`](../interfaces/IComponent.md) |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[noticeComponents](Object3D.md#noticecomponents)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:328](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L328)
+
+___
+
+### forChild
+
+▸ **forChild**(`call`): `void`
+
+Traverse all sub objects starting from the object itself.
+ If there are still sub objects in the sub object, recursively traverse.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `call` | `Function` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[forChild](Object3D.md#forchild)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L41)
+
+___
+
+### addComponent
+
+▸ **addComponent**\<`T`\>(`c`, `param?`): `T`
+
+Create a new component and add it to the object, and return an instance of the component.
+ If a component of this type already exists, it will not be added and will return null.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+| `param?` | `any` | - |
+
+#### Returns
+
+`T`
+
+result component
+
+#### Inherited from
+
+[Object3D](Object3D.md).[addComponent](Object3D.md#addcomponent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L55)
+
+___
+
+### getOrAddComponent
+
+▸ **getOrAddComponent**\<`T`\>(`c`): `T`
+
+Returns an instance of a component object of the specified type.
+ If there are no components of that type, a new component is created and added to the object.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`T`
+
+result component
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getOrAddComponent](Object3D.md#getoraddcomponent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L76)
+
+___
+
+### removeComponent
+
+▸ **removeComponent**\<`T`\>(`c`): `void`
+
+Remove components of the specified type
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeComponent](Object3D.md#removecomponent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L89)
+
+___
+
+### hasComponent
+
+▸ **hasComponent**\<`T`\>(`c`): `boolean`
+
+Is there a component of the specified type
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | type of component |
+
+#### Returns
+
+`boolean`
+
+boolean
+
+#### Inherited from
+
+[Object3D](Object3D.md).[hasComponent](Object3D.md#hascomponent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L106)
+
+___
+
+### getComponent
+
+▸ **getComponent**\<`T`\>(`c`): `T`
+
+Returns a component of the specified type.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`T`
+
+result component
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponent](Object3D.md#getcomponent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L116)
+
+___
+
+### getComponentFromParent
+
+▸ **getComponentFromParent**\<`T`\>(`c`): `T`
+
+Returns a component object of the specified type from the parent node.
+ If there are no components of that type,
+ calls the parent object lookup of the parent object
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`T`
+
+reulst component
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponentFromParent](Object3D.md#getcomponentfromparent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L128)
+
+___
+
+### getComponentsInChild
+
+▸ **getComponentsInChild**\<`T`\>(`c`): `T`[]
+
+Returns an array of component objects of the specified type.
+ If there are no components of that type, search in the list of self body class objects
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`T`[]
+
+result components
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponentsInChild](Object3D.md#getcomponentsinchild)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L148)
+
+___
+
+### getComponents
+
+▸ **getComponents**\<`T`\>(`c`, `outList?`, `includeInactive?`): `T`[]
+
+Returns all components of the specified type contained in the current object and its children.
+ If there are children in the child object, recursively search.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+| `outList?` | `T`[] | result component list |
+| `includeInactive?` | `boolean` | Whether to include invisible objects, default to false |
+
+#### Returns
+
+`T`[]
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponents](Object3D.md#getcomponents)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:171](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L171)
+
+___
+
+### getComponentsExt
+
+▸ **getComponentsExt**\<`T`\>(`c`, `ret?`, `includeInactive?`): `T`[]
+
+Quickly obtain components and no longer access child nodes after obtaining them at a certain node
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+| `ret?` | `T`[] | List of incoming T |
+| `includeInactive?` | `boolean` | Whether to include invisible objects, default to false |
+
+#### Returns
+
+`T`[]
+
+{T}
+
+**`Memberof`**
+
+Object3D
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponentsExt](Object3D.md#getcomponentsext)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:196](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L196)
+
+___
+
+### getComponentsByProperty
+
+▸ **getComponentsByProperty**\<`T`\>(`key`, `value`, `findedAndBreak?`, `ret?`, `includeInactive?`): `T`[]
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `key` | `string` | `undefined` |
+| `value` | `any` | `undefined` |
+| `findedAndBreak` | `boolean` | `true` |
+| `ret?` | `T`[] | `undefined` |
+| `includeInactive?` | `boolean` | `undefined` |
+
+#### Returns
+
+`T`[]
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponentsByProperty](Object3D.md#getcomponentsbyproperty)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L211)
+
+___
+
+### clone
+
+▸ **clone**(): [`Object3D`](Object3D.md)
+
+clone a Object3D
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+[Object3D](Object3D.md).[clone](Object3D.md#clone)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:238](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L238)
+
+___
+
+### notifyChange
+
+▸ **notifyChange**(): `void`
+
+Notify transformation attribute updates
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[notifyChange](Object3D.md#notifychange)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:328](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L328)
+
+___
+
+### traverse
+
+▸ **traverse**(`callback`): `void`
+
+Recursive child nodes and execute specified function
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `callback` | (`child`: `any`) => `void` | specified function |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[traverse](Object3D.md#traverse)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:505](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L505)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+Release self
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[destroy](Object3D.md#destroy)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:520](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L520)
+
+___
+
+### dispatchEvent
+
+▸ **dispatchEvent**(`event`): `void`
+
+Dispatch an event to all registered objects with a specific type of listener.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `event` | [`CEvent`](CEvent.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[dispatchEvent](Object3D.md#dispatchevent)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L24)
+
+___
+
+### addEventListener
+
+▸ **addEventListener**(`type`, `callback`, `thisObject`, `param?`, `priority?`): `number`
+
+register an event listener to event distancher.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event type. |
+| `callback` | `Function` | `undefined` | {Function} The callback function that handles events. This function must accept an Event3D object as its unique parameter and cannot return any result. for example: function(evt:Event3D):void. |
+| `thisObject` | `any` | `undefined` | {any} Current registration object, it'll call callback function. |
+| `param` | `any` | `null` | {any} the data binded to registered event, the default value is null. |
+| `priority` | `number` | `0` | {number} The priority of callback function execution, with a larger set value having priority to call |
+
+#### Returns
+
+`number`
+
+Returns register event id
+
+#### Inherited from
+
+[Object3D](Object3D.md).[addEventListener](Object3D.md#addeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L79)
+
+___
+
+### removeEventListener
+
+▸ **removeEventListener**(`type`, `callback`, `thisObject`): `void`
+
+Remove Event Listening
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` \| `number` | {string} event type |
+| `callback` | `Function` | {Function} callback function of event register |
+| `thisObject` | `any` | {any} The current registered object. |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeEventListener](Object3D.md#removeeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L113)
+
+___
+
+### removeEventListenerAt
+
+▸ **removeEventListenerAt**(`id`): `boolean`
+
+Remove an event Listening with id
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeEventListenerAt](Object3D.md#removeeventlistenerat)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L133)
+
+___
+
+### removeAllEventListener
+
+▸ **removeAllEventListener**(`eventType?`): `void`
+
+Specify a event type to remove all related event listeners
+eventType event type, set null to remove all event listeners
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `eventType` | `string` \| `number` | `null` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeAllEventListener](Object3D.md#removealleventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L153)
+
+___
+
+### containEventListener
+
+▸ **containEventListener**(`type`): `boolean`
+
+whether the target presence of a listener with event type.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` | {string} event type. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+[Object3D](Object3D.md).[containEventListener](Object3D.md#containeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:185](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L185)
+
+___
+
+### hasEventListener
+
+▸ **hasEventListener**(`type`, `callback?`, `thisObject?`): `boolean`
+
+whether the target presence of a listener with event type. it associate more registration parameters.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event name. |
+| `callback` | `Function` | `null` | {Function} callback function of event register. |
+| `thisObject` | `any` | `null` | {any} The registered object. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+[Object3D](Object3D.md).[hasEventListener](Object3D.md#haseventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L198)
+
+___
+
+### active
+
+▸ **active**(`scene`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scene` | [`Scene3D`](Scene3D.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/transformUtil/Object3DTransformTools.ts:66](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/Object3DTransformTools.ts#L66)
+
+___
+
+### unActive
+
+▸ **unActive**(`scene`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scene` | [`Scene3D`](Scene3D.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/transformUtil/Object3DTransformTools.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/Object3DTransformTools.ts#L71)
+
+___
+
+### selectObject
+
+▸ **selectObject**(`obj`, `transformMode?`, `spaceMode?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) |
+| `transformMode?` | `TransformMode` |
+| `spaceMode?` | `TransformSpaceMode` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/transformUtil/Object3DTransformTools.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/Object3DTransformTools.ts#L79)
+
+___
+
+### selectTransformMode
+
+▸ **selectTransformMode**(`transformMode`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `transformMode` | `TransformMode` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/transformUtil/Object3DTransformTools.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/Object3DTransformTools.ts#L99)
+
+___
+
+### selectTransformSpaceMode
+
+▸ **selectTransformSpaceMode**(`spaceMode`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `spaceMode` | `TransformSpaceMode` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/transformUtil/Object3DTransformTools.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/Object3DTransformTools.ts#L111)
diff --git a/docs/api/classes/Object3DUtil.md b/docs/api/classes/Object3DUtil.md
new file mode 100644
index 00000000..6e5e1d30
--- /dev/null
+++ b/docs/api/classes/Object3DUtil.md
@@ -0,0 +1,223 @@
+# Class: Object3DUtil
+
+### Constructors
+
+- [constructor](Object3DUtil.md#constructor)
+
+### Accessors
+
+- [CubeMesh](Object3DUtil.md#cubemesh)
+- [SphereMesh](Object3DUtil.md#spheremesh)
+- [Sphere](Object3DUtil.md#sphere)
+
+### Methods
+
+- [GetCube](Object3DUtil.md#getcube)
+- [GetMaterial](Object3DUtil.md#getmaterial)
+- [GetPlane](Object3DUtil.md#getplane)
+- [GetSingleCube](Object3DUtil.md#getsinglecube)
+- [GetSingleSphere](Object3DUtil.md#getsinglesphere)
+- [GetSingleCube2](Object3DUtil.md#getsinglecube2)
+- [GetPointLight](Object3DUtil.md#getpointlight)
+
+## Constructors
+
+### constructor
+
+• **new Object3DUtil**(): [`Object3DUtil`](Object3DUtil.md)
+
+#### Returns
+
+[`Object3DUtil`](Object3DUtil.md)
+
+## Accessors
+
+### CubeMesh
+
+• `get` **CubeMesh**(): [`BoxGeometry`](BoxGeometry.md)
+
+#### Returns
+
+[`BoxGeometry`](BoxGeometry.md)
+
+#### Defined in
+
+[src/util/Object3DUtil.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/util/Object3DUtil.ts#L37)
+
+___
+
+### SphereMesh
+
+• `get` **SphereMesh**(): [`SphereGeometry`](SphereGeometry.md)
+
+#### Returns
+
+[`SphereGeometry`](SphereGeometry.md)
+
+#### Defined in
+
+[src/util/Object3DUtil.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/util/Object3DUtil.ts#L42)
+
+___
+
+### Sphere
+
+• `get` **Sphere**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/util/Object3DUtil.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/util/Object3DUtil.ts#L111)
+
+## Methods
+
+### GetCube
+
+▸ **GetCube**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/util/Object3DUtil.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/util/Object3DUtil.ts#L47)
+
+___
+
+### GetMaterial
+
+▸ **GetMaterial**(`tex`): [`Material`](Material.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tex` | [`Texture`](Texture.md) |
+
+#### Returns
+
+[`Material`](Material.md)
+
+#### Defined in
+
+[src/util/Object3DUtil.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/util/Object3DUtil.ts#L57)
+
+___
+
+### GetPlane
+
+▸ **GetPlane**(`tex`): [`Object3D`](Object3D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tex` | [`Texture`](Texture.md) |
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/util/Object3DUtil.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/util/Object3DUtil.ts#L67)
+
+___
+
+### GetSingleCube
+
+▸ **GetSingleCube**(`sizeX`, `sizeY`, `sizeZ`, `r`, `g`, `b`): [`Object3D`](Object3D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `sizeX` | `number` |
+| `sizeY` | `number` |
+| `sizeZ` | `number` |
+| `r` | `number` |
+| `g` | `number` |
+| `b` | `number` |
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/util/Object3DUtil.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/util/Object3DUtil.ts#L81)
+
+___
+
+### GetSingleSphere
+
+▸ **GetSingleSphere**(`radius`, `r`, `g`, `b`): [`Object3D`](Object3D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radius` | `number` |
+| `r` | `number` |
+| `g` | `number` |
+| `b` | `number` |
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/util/Object3DUtil.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/util/Object3DUtil.ts#L97)
+
+___
+
+### GetSingleCube2
+
+▸ **GetSingleCube2**(`mat`, `size?`): [`Object3D`](Object3D.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `mat` | [`Material`](Material.md) | `undefined` |
+| `size` | `number` | `10` |
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/util/Object3DUtil.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/util/Object3DUtil.ts#L121)
+
+___
+
+### GetPointLight
+
+▸ **GetPointLight**(`pos`, `rotation`, `radius`, `r`, `g`, `b`, `intensity?`, `castShadow?`): [`PointLight`](PointLight.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `pos` | [`Vector3`](Vector3.md) | `undefined` |
+| `rotation` | [`Vector3`](Vector3.md) | `undefined` |
+| `radius` | `number` | `undefined` |
+| `r` | `number` | `undefined` |
+| `g` | `number` | `undefined` |
+| `b` | `number` | `undefined` |
+| `intensity` | `number` | `1` |
+| `castShadow` | `boolean` | `true` |
+
+#### Returns
+
+[`PointLight`](PointLight.md)
+
+#### Defined in
+
+[src/util/Object3DUtil.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/util/Object3DUtil.ts#L132)
diff --git a/docs/api/classes/Octree.md b/docs/api/classes/Octree.md
new file mode 100644
index 00000000..7595d905
--- /dev/null
+++ b/docs/api/classes/Octree.md
@@ -0,0 +1,257 @@
+# Class: Octree
+
+### Constructors
+
+- [constructor](Octree.md#constructor)
+
+### Properties
+
+- [entities](Octree.md#entities)
+- [box](Octree.md#box)
+- [subTrees](Octree.md#subtrees)
+- [parent](Octree.md#parent)
+- [level](Octree.md#level)
+- [maxSplitLevel](Octree.md#maxsplitlevel)
+- [index](Octree.md#index)
+- [uuid](Octree.md#uuid)
+- [\_\_rayCastTempVector](Octree.md#__raycasttempvector)
+
+### Methods
+
+- [tryInsertEntity](Octree.md#tryinsertentity)
+- [rayCasts](Octree.md#raycasts)
+- [frustumCasts](Octree.md#frustumcasts)
+- [getRenderNode](Octree.md#getrendernode)
+- [boxCasts](Octree.md#boxcasts)
+- [clean](Octree.md#clean)
+
+## Constructors
+
+### constructor
+
+• **new Octree**(`size`, `index?`, `parent?`, `level?`): [`Octree`](Octree.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `size` | `BoundingBox` | `undefined` |
+| `index` | `number` | `0` |
+| `parent` | [`Octree`](Octree.md) | `null` |
+| `level` | `number` | `0` |
+
+#### Returns
+
+[`Octree`](Octree.md)
+
+#### Defined in
+
+[src/core/tree/octree/Octree.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/Octree.ts#L26)
+
+## Properties
+
+### entities
+
+• `Readonly` **entities**: `Map`\<`string`, [`OctreeEntity`](OctreeEntity.md)\>
+
+#### Defined in
+
+[src/core/tree/octree/Octree.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/Octree.ts#L16)
+
+___
+
+### box
+
+• `Readonly` **box**: `BoundingBox`
+
+#### Defined in
+
+[src/core/tree/octree/Octree.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/Octree.ts#L17)
+
+___
+
+### subTrees
+
+• `Readonly` **subTrees**: [`Octree`](Octree.md)[] = `[]`
+
+#### Defined in
+
+[src/core/tree/octree/Octree.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/Octree.ts#L18)
+
+___
+
+### parent
+
+• `Readonly` **parent**: [`Octree`](Octree.md)
+
+#### Defined in
+
+[src/core/tree/octree/Octree.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/Octree.ts#L19)
+
+___
+
+### level
+
+• `Readonly` **level**: `number`
+
+#### Defined in
+
+[src/core/tree/octree/Octree.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/Octree.ts#L20)
+
+___
+
+### maxSplitLevel
+
+▪ `Static` `Readonly` **maxSplitLevel**: ``6``
+
+#### Defined in
+
+[src/core/tree/octree/Octree.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/Octree.ts#L21)
+
+___
+
+### index
+
+• `Readonly` **index**: `number`
+
+#### Defined in
+
+[src/core/tree/octree/Octree.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/Octree.ts#L23)
+
+___
+
+### uuid
+
+• `Readonly` **uuid**: `string`
+
+#### Defined in
+
+[src/core/tree/octree/Octree.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/Octree.ts#L24)
+
+___
+
+### \_\_rayCastTempVector
+
+• **\_\_rayCastTempVector**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/core/tree/octree/Octree.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/Octree.ts#L84)
+
+## Methods
+
+### tryInsertEntity
+
+▸ **tryInsertEntity**(`entity`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `entity` | [`OctreeEntity`](OctreeEntity.md) |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/tree/octree/Octree.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/Octree.ts#L35)
+
+___
+
+### rayCasts
+
+▸ **rayCasts**(`ray`, `ret`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ray` | [`Ray`](Ray.md) |
+| `ret` | [`OctreeEntity`](OctreeEntity.md)[] |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/tree/octree/Octree.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/Octree.ts#L85)
+
+___
+
+### frustumCasts
+
+▸ **frustumCasts**(`frustum`, `ret`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `frustum` | `Frustum` |
+| `ret` | [`OctreeEntity`](OctreeEntity.md)[] |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/tree/octree/Octree.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/Octree.ts#L98)
+
+___
+
+### getRenderNode
+
+▸ **getRenderNode**(`frustum`, `ret`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `frustum` | `Frustum` |
+| `ret` | `CollectInfo` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/tree/octree/Octree.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/Octree.ts#L115)
+
+___
+
+### boxCasts
+
+▸ **boxCasts**(`box`, `ret`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `box` | `BoundingBox` |
+| `ret` | [`OctreeEntity`](OctreeEntity.md)[] |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/tree/octree/Octree.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/Octree.ts#L147)
+
+___
+
+### clean
+
+▸ **clean**(): `this`
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/core/tree/octree/Octree.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/Octree.ts#L160)
diff --git a/docs/api/classes/OctreeEntity.md b/docs/api/classes/OctreeEntity.md
new file mode 100644
index 00000000..0e86c1aa
--- /dev/null
+++ b/docs/api/classes/OctreeEntity.md
@@ -0,0 +1,121 @@
+# Class: OctreeEntity
+
+### Constructors
+
+- [constructor](OctreeEntity.md#constructor)
+
+### Properties
+
+- [renderer](OctreeEntity.md#renderer)
+- [owner](OctreeEntity.md#owner)
+- [uuid](OctreeEntity.md#uuid)
+
+### Methods
+
+- [leaveNode](OctreeEntity.md#leavenode)
+- [enterNode](OctreeEntity.md#enternode)
+- [update](OctreeEntity.md#update)
+
+## Constructors
+
+### constructor
+
+• **new OctreeEntity**(`renderer`): [`OctreeEntity`](OctreeEntity.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `renderer` | `RenderNode` |
+
+#### Returns
+
+[`OctreeEntity`](OctreeEntity.md)
+
+#### Defined in
+
+[src/core/tree/octree/OctreeEntity.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/OctreeEntity.ts#L8)
+
+## Properties
+
+### renderer
+
+• `Readonly` **renderer**: `RenderNode`
+
+#### Defined in
+
+[src/core/tree/octree/OctreeEntity.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/OctreeEntity.ts#L5)
+
+___
+
+### owner
+
+• **owner**: [`Octree`](Octree.md)
+
+#### Defined in
+
+[src/core/tree/octree/OctreeEntity.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/OctreeEntity.ts#L6)
+
+___
+
+### uuid
+
+• `Readonly` **uuid**: `string`
+
+#### Defined in
+
+[src/core/tree/octree/OctreeEntity.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/OctreeEntity.ts#L7)
+
+## Methods
+
+### leaveNode
+
+▸ **leaveNode**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/tree/octree/OctreeEntity.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/OctreeEntity.ts#L13)
+
+___
+
+### enterNode
+
+▸ **enterNode**(`node`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `node` | [`Octree`](Octree.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/tree/octree/OctreeEntity.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/OctreeEntity.ts#L20)
+
+___
+
+### update
+
+▸ **update**(`root`): [`Octree`](Octree.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `root` | [`Octree`](Octree.md) |
+
+#### Returns
+
+[`Octree`](Octree.md)
+
+#### Defined in
+
+[src/core/tree/octree/OctreeEntity.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/octree/OctreeEntity.ts#L26)
diff --git a/docs/api/classes/OrbitController.md b/docs/api/classes/OrbitController.md
new file mode 100644
index 00000000..95338c4b
--- /dev/null
+++ b/docs/api/classes/OrbitController.md
@@ -0,0 +1,843 @@
+# Class: OrbitController
+
+Orbit Camera Controller
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`OrbitController`**
+
+### Constructors
+
+- [constructor](OrbitController.md#constructor)
+
+### Properties
+
+- [object3D](OrbitController.md#object3d)
+- [isDestroyed](OrbitController.md#isdestroyed)
+- [autoRotate](OrbitController.md#autorotate)
+- [autoRotateSpeed](OrbitController.md#autorotatespeed)
+- [rotateFactor](OrbitController.md#rotatefactor)
+- [zoomFactor](OrbitController.md#zoomfactor)
+- [panFactor](OrbitController.md#panfactor)
+
+### Accessors
+
+- [eventDispatcher](OrbitController.md#eventdispatcher)
+- [isStart](OrbitController.md#isstart)
+- [transform](OrbitController.md#transform)
+- [enable](OrbitController.md#enable)
+- [target](OrbitController.md#target)
+- [smooth](OrbitController.md#smooth)
+- [minDistance](OrbitController.md#mindistance)
+- [maxDistance](OrbitController.md#maxdistance)
+- [minPolarAngle](OrbitController.md#minpolarangle)
+- [maxPolarAngle](OrbitController.md#maxpolarangle)
+- [spherical](OrbitController.md#spherical)
+
+### Methods
+
+- [init](OrbitController.md#init)
+- [stop](OrbitController.md#stop)
+- [onLateUpdate](OrbitController.md#onlateupdate)
+- [onBeforeUpdate](OrbitController.md#onbeforeupdate)
+- [onCompute](OrbitController.md#oncompute)
+- [onGraphic](OrbitController.md#ongraphic)
+- [onParentChange](OrbitController.md#onparentchange)
+- [onAddChild](OrbitController.md#onaddchild)
+- [onRemoveChild](OrbitController.md#onremovechild)
+- [cloneTo](OrbitController.md#cloneto)
+- [copyComponent](OrbitController.md#copycomponent)
+- [beforeDestroy](OrbitController.md#beforedestroy)
+- [destroy](OrbitController.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new OrbitController**(): [`OrbitController`](OrbitController.md)
+
+#### Returns
+
+[`OrbitController`](OrbitController.md)
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L57)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### autoRotate
+
+• **autoRotate**: `boolean` = `false`
+
+Whether to enable automatic rotation
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L21)
+
+___
+
+### autoRotateSpeed
+
+• **autoRotateSpeed**: `number` = `0.1`
+
+Automatic rotation speed coefficient
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L25)
+
+___
+
+### rotateFactor
+
+• **rotateFactor**: `number` = `0.5`
+
+Rotation speed coefficient
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L29)
+
+___
+
+### zoomFactor
+
+• **zoomFactor**: `number` = `0.1`
+
+Scale speed coefficient
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:33](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L33)
+
+___
+
+### panFactor
+
+• **panFactor**: `number` = `0.25`
+
+Angle translation velocity coefficient
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L37)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### target
+
+• `get` **target**(): [`Vector3`](Vector3.md)
+
+Get the target position
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L63)
+
+• `set` **target**(`v`): `void`
+
+Set the target position
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L69)
+
+___
+
+### smooth
+
+• `get` **smooth**(): `number`
+
+Set smoothing coefficient of controller
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L76)
+
+• `set` **smooth**(`v`): `void`
+
+Get smoothing coefficient of controller
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:82](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L82)
+
+___
+
+### minDistance
+
+• `get` **minDistance**(): `number`
+
+Get the minimum distance between the camera and the target coordinate
+
+#### Returns
+
+`number`
+
+**`Default Value`**
+
+```ts
+1
+```
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L89)
+
+• `set` **minDistance**(`v`): `void`
+
+Set the minimum distance between the camera and the target position
+min value: 0.000002
+max value: `this._maxDistance` [maxDistance](OrbitController.md#maxdistance)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L97)
+
+___
+
+### maxDistance
+
+• `get` **maxDistance**(): `number`
+
+Get the max distance between the camera and the target position
+
+#### Returns
+
+`number`
+
+**`Default Value`**
+
+```ts
+100000
+```
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L104)
+
+• `set` **maxDistance**(`v`): `void`
+
+Set the max distance between the camera and the target position
+min - `this._maxDistance`
+max - Infinity
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L112)
+
+___
+
+### minPolarAngle
+
+• `get` **minPolarAngle**(): `number`
+
+Get the lower elevation limit of the camera from the xz plane
+
+#### Returns
+
+`number`
+
+**`Default Value`**
+
+```ts
+-90
+```
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L120)
+
+• `set` **minPolarAngle**(`v`): `void`
+
+Set the lower elevation limit of the camera from the xz plane
+min - -90
+max - [maxPolarAngle](OrbitController.md#maxpolarangle)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L128)
+
+___
+
+### maxPolarAngle
+
+• `get` **maxPolarAngle**(): `number`
+
+Get the upper elevation limit of the camera from the xz plane
+
+#### Returns
+
+`number`
+
+**`Default Value`**
+
+```ts
+90
+```
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L135)
+
+• `set` **maxPolarAngle**(`v`): `void`
+
+Set the upper elevation limit of the camera to the xz plane
+min - less than [minPolarAngle](OrbitController.md#minpolarangle)
+max - 90
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:143](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L143)
+
+___
+
+### spherical
+
+• `get` **spherical**(): `Spherical`
+
+#### Returns
+
+`Spherical`
+
+#### Defined in
+
+[src/components/controller/OrbitController.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts#L147)
+
+## Methods
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[init](ComponentBase.md#init)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[destroy](ComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
diff --git a/docs/api/classes/OrderMap.md b/docs/api/classes/OrderMap.md
new file mode 100644
index 00000000..ae00cb91
--- /dev/null
+++ b/docs/api/classes/OrderMap.md
@@ -0,0 +1,373 @@
+# Class: OrderMap\
+
+## Type parameters
+
+| Name |
+| :------ |
+| `K` |
+| `V` |
+
+## Hierarchy
+
+- `Map`\<`K`, `V`\>
+
+ ↳ **`OrderMap`**
+
+### Constructors
+
+- [constructor](OrderMap.md#constructor)
+
+### Properties
+
+- [size](OrderMap.md#size)
+- [[toStringTag]](OrderMap.md#[tostringtag])
+- [[species]](OrderMap.md#[species])
+- [valueList](OrderMap.md#valuelist)
+- [keyList](OrderMap.md#keylist)
+- [isChange](OrderMap.md#ischange)
+
+### Methods
+
+- [forEach](OrderMap.md#foreach)
+- [get](OrderMap.md#get)
+- [has](OrderMap.md#has)
+- [[iterator]](OrderMap.md#[iterator])
+- [entries](OrderMap.md#entries)
+- [keys](OrderMap.md#keys)
+- [values](OrderMap.md#values)
+- [delete](OrderMap.md#delete)
+- [set](OrderMap.md#set)
+- [clear](OrderMap.md#clear)
+
+## Constructors
+
+### constructor
+
+• **new OrderMap**\<`K`, `V`\>(`iterable?`, `recordKey?`, `recordValue?`): [`OrderMap`](OrderMap.md)\<`K`, `V`\>
+
+#### Type parameters
+
+| Name |
+| :------ |
+| `K` |
+| `V` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `iterable?` | `Iterable`\ |
+| `recordKey?` | `boolean` |
+| `recordValue?` | `boolean` |
+
+#### Returns
+
+[`OrderMap`](OrderMap.md)\<`K`, `V`\>
+
+#### Overrides
+
+Map\<K, V\>.constructor
+
+#### Defined in
+
+[src/math/OrderMap.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/math/OrderMap.ts#L5)
+
+## Properties
+
+### size
+
+• `Readonly` **size**: `number`
+
+#### Inherited from
+
+Map.size
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.collection.d.ts:45
+
+___
+
+### [toStringTag]
+
+• `Readonly` **[toStringTag]**: `string`
+
+#### Inherited from
+
+Map.[toStringTag]
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts:137
+
+___
+
+### [species]
+
+▪ `Static` `Readonly` **[species]**: `MapConstructor`
+
+#### Inherited from
+
+Map.[species]
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts:319
+
+___
+
+### valueList
+
+• `Readonly` **valueList**: `V`[]
+
+#### Defined in
+
+[src/math/OrderMap.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/math/OrderMap.ts#L2)
+
+___
+
+### keyList
+
+• `Readonly` **keyList**: `K`[]
+
+#### Defined in
+
+[src/math/OrderMap.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/math/OrderMap.ts#L3)
+
+___
+
+### isChange
+
+• **isChange**: `boolean` = `true`
+
+#### Defined in
+
+[src/math/OrderMap.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/math/OrderMap.ts#L4)
+
+## Methods
+
+### forEach
+
+▸ **forEach**(`callbackfn`, `thisArg?`): `void`
+
+Executes a provided function once per each key/value pair in the Map, in insertion order.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `callbackfn` | (`value`: `V`, `key`: `K`, `map`: `Map`\<`K`, `V`\>) => `void` |
+| `thisArg?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Map.forEach
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.collection.d.ts:28
+
+___
+
+### get
+
+▸ **get**(`key`): `V`
+
+Returns a specified element from the Map object. If the value that is associated to the provided key is an object, then you will get a reference to that object and any change made to that object will effectively modify it inside the Map.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `K` |
+
+#### Returns
+
+`V`
+
+Returns the element associated with the specified key. If no element is associated with the specified key, undefined is returned.
+
+#### Inherited from
+
+Map.get
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.collection.d.ts:33
+
+___
+
+### has
+
+▸ **has**(`key`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `K` |
+
+#### Returns
+
+`boolean`
+
+boolean indicating whether an element with the specified key exists or not.
+
+#### Inherited from
+
+Map.has
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.collection.d.ts:37
+
+___
+
+### [iterator]
+
+▸ **[iterator]**(): `IterableIterator`\<[`K`, `V`]\>
+
+Returns an iterable of entries in the map.
+
+#### Returns
+
+`IterableIterator`\<[`K`, `V`]\>
+
+#### Inherited from
+
+Map.[iterator]
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts:119
+
+___
+
+### entries
+
+▸ **entries**(): `IterableIterator`\<[`K`, `V`]\>
+
+Returns an iterable of key, value pairs for every entry in the map.
+
+#### Returns
+
+`IterableIterator`\<[`K`, `V`]\>
+
+#### Inherited from
+
+Map.entries
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts:124
+
+___
+
+### keys
+
+▸ **keys**(): `IterableIterator`\<`K`\>
+
+Returns an iterable of keys in the map
+
+#### Returns
+
+`IterableIterator`\<`K`\>
+
+#### Inherited from
+
+Map.keys
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts:129
+
+___
+
+### values
+
+▸ **values**(): `IterableIterator`\<`V`\>
+
+Returns an iterable of values in the map
+
+#### Returns
+
+`IterableIterator`\<`V`\>
+
+#### Inherited from
+
+Map.values
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts:134
+
+___
+
+### delete
+
+▸ **delete**(`key`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `K` |
+
+#### Returns
+
+`boolean`
+
+#### Overrides
+
+Map.delete
+
+#### Defined in
+
+[src/math/OrderMap.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/math/OrderMap.ts#L18)
+
+___
+
+### set
+
+▸ **set**(`key`, `value`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `K` |
+| `value` | `V` |
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+Map.set
+
+#### Defined in
+
+[src/math/OrderMap.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/math/OrderMap.ts#L47)
+
+___
+
+### clear
+
+▸ **clear**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+Map.clear
+
+#### Defined in
+
+[src/math/OrderMap.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/math/OrderMap.ts#L56)
diff --git a/docs/api/classes/OutlinePost.md b/docs/api/classes/OutlinePost.md
new file mode 100644
index 00000000..b30ed54c
--- /dev/null
+++ b/docs/api/classes/OutlinePost.md
@@ -0,0 +1,247 @@
+# Class: OutlinePost
+
+post effect out line
+OutlinePostManager,
+```
+ setting
+ let cfg = {@link Engine3D.setting.render.postProcessing.outline};
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ Engine3D.startRender(renderJob);
+```
+
+## Hierarchy
+
+- `PostBase`
+
+ ↳ **`OutlinePost`**
+
+### Constructors
+
+- [constructor](OutlinePost.md#constructor)
+
+### Properties
+
+- [enable](OutlinePost.md#enable)
+- [postRenderer](OutlinePost.md#postrenderer)
+
+### Accessors
+
+- [outlinePixel](OutlinePost.md#outlinepixel)
+- [fadeOutlinePixel](OutlinePost.md#fadeoutlinepixel)
+- [strength](OutlinePost.md#strength)
+- [useAddMode](OutlinePost.md#useaddmode)
+
+### Methods
+
+- [onResize](OutlinePost.md#onresize)
+- [destroy](OutlinePost.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new OutlinePost**(): [`OutlinePost`](OutlinePost.md)
+
+#### Returns
+
+[`OutlinePost`](OutlinePost.md)
+
+#### Overrides
+
+PostBase.constructor
+
+#### Defined in
+
+[src/gfx/renderJob/post/OutlinePost.ts:101](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/OutlinePost.ts#L101)
+
+## Properties
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+PostBase.enable
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L20)
+
+___
+
+### postRenderer
+
+• **postRenderer**: `PostRenderer`
+
+#### Inherited from
+
+PostBase.postRenderer
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L21)
+
+## Accessors
+
+### outlinePixel
+
+• `get` **outlinePixel**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/OutlinePost.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/OutlinePost.ts#L128)
+
+• `set` **outlinePixel**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/OutlinePost.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/OutlinePost.ts#L120)
+
+___
+
+### fadeOutlinePixel
+
+• `get` **fadeOutlinePixel**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/OutlinePost.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/OutlinePost.ts#L140)
+
+• `set` **fadeOutlinePixel**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/OutlinePost.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/OutlinePost.ts#L132)
+
+___
+
+### strength
+
+• `get` **strength**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/OutlinePost.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/OutlinePost.ts#L152)
+
+• `set` **strength**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/OutlinePost.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/OutlinePost.ts#L144)
+
+___
+
+### useAddMode
+
+• `get` **useAddMode**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/gfx/renderJob/post/OutlinePost.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/OutlinePost.ts#L160)
+
+• `set` **useAddMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/OutlinePost.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/OutlinePost.ts#L156)
+
+## Methods
+
+### onResize
+
+▸ **onResize**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.onResize
+
+#### Defined in
+
+[src/gfx/renderJob/post/OutlinePost.ts:299](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/OutlinePost.ts#L299)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PostBase.destroy
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L87)
diff --git a/docs/api/classes/OutlinePostData.md b/docs/api/classes/OutlinePostData.md
new file mode 100644
index 00000000..23186233
--- /dev/null
+++ b/docs/api/classes/OutlinePostData.md
@@ -0,0 +1,140 @@
+# Class: OutlinePostData
+
+### Constructors
+
+- [constructor](OutlinePostData.md#constructor)
+
+### Properties
+
+- [SlotCount](OutlinePostData.md#slotcount)
+- [MaxEntities](OutlinePostData.md#maxentities)
+- [defaultColor](OutlinePostData.md#defaultcolor)
+
+### Methods
+
+- [clear](OutlinePostData.md#clear)
+- [clearAt](OutlinePostData.md#clearat)
+- [fillDataAt](OutlinePostData.md#filldataat)
+- [fetchData](OutlinePostData.md#fetchdata)
+
+## Constructors
+
+### constructor
+
+• **new OutlinePostData**(): [`OutlinePostData`](OutlinePostData.md)
+
+#### Returns
+
+[`OutlinePostData`](OutlinePostData.md)
+
+#### Defined in
+
+[src/io/OutlinePostData.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/io/OutlinePostData.ts#L19)
+
+## Properties
+
+### SlotCount
+
+• `Readonly` **SlotCount**: `number` = `8`
+
+#### Defined in
+
+[src/io/OutlinePostData.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/io/OutlinePostData.ts#L12)
+
+___
+
+### MaxEntities
+
+• `Readonly` **MaxEntities**: `number` = `16`
+
+#### Defined in
+
+[src/io/OutlinePostData.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/io/OutlinePostData.ts#L13)
+
+___
+
+### defaultColor
+
+• `Readonly` **defaultColor**: [`Color`](Color.md)
+
+#### Defined in
+
+[src/io/OutlinePostData.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/io/OutlinePostData.ts#L14)
+
+## Methods
+
+### clear
+
+▸ **clear**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/io/OutlinePostData.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/io/OutlinePostData.ts#L30)
+
+___
+
+### clearAt
+
+▸ **clearAt**(`slotIndex`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `slotIndex` | `number` |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/io/OutlinePostData.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/io/OutlinePostData.ts#L36)
+
+___
+
+### fillDataAt
+
+▸ **fillDataAt**(`slot`, `indexList`, `color`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `slot` | `number` |
+| `indexList` | `number`[] |
+| `color` | [`Color`](Color.md) |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/io/OutlinePostData.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/io/OutlinePostData.ts#L45)
+
+___
+
+### fetchData
+
+▸ **fetchData**(`target`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `target` | `Object` |
+| `target.dirty` | `boolean` |
+| `target.slots` | [`OutlinePostSlot`](OutlinePostSlot.md)[] |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/io/OutlinePostData.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/io/OutlinePostData.ts#L59)
diff --git a/docs/api/classes/OutlinePostManager.md b/docs/api/classes/OutlinePostManager.md
new file mode 100644
index 00000000..7c6a5a08
--- /dev/null
+++ b/docs/api/classes/OutlinePostManager.md
@@ -0,0 +1,87 @@
+# Class: OutlinePostManager
+
+manager of outline effect
+
+### Constructors
+
+- [constructor](OutlinePostManager.md#constructor)
+
+### Methods
+
+- [setOutline](OutlinePostManager.md#setoutline)
+- [setOutlineList](OutlinePostManager.md#setoutlinelist)
+- [clearOutline](OutlinePostManager.md#clearoutline)
+
+## Constructors
+
+### constructor
+
+• **new OutlinePostManager**(): [`OutlinePostManager`](OutlinePostManager.md)
+
+#### Returns
+
+[`OutlinePostManager`](OutlinePostManager.md)
+
+## Methods
+
+### setOutline
+
+▸ **setOutline**(`objectList`, `color?`): `void`
+
+config outline manager.
+Specify specific 3D objects to use the specified color for display outline
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `objectList` | [`Object3D`](Object3D.md)[] | A set of 3D objects |
+| `color?` | [`Color`](Color.md) | Specified color for outline |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/io/OutlineManager.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/io/OutlineManager.ts#L20)
+
+___
+
+### setOutlineList
+
+▸ **setOutlineList**(`groupList`, `colorList?`): `void`
+
+config outline manager.
+The first set of objects uses the first color to display outline, and so on
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `groupList` | [`Object3D`](Object3D.md)[][] | A group of 3D objects set |
+| `colorList?` | [`Color`](Color.md)[] | Specified color list for outline |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/io/OutlineManager.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/io/OutlineManager.ts#L30)
+
+___
+
+### clearOutline
+
+▸ **clearOutline**(): `this`
+
+clear outline effect
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/io/OutlineManager.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/io/OutlineManager.ts#L50)
diff --git a/docs/api/classes/OutlinePostSlot.md b/docs/api/classes/OutlinePostSlot.md
new file mode 100644
index 00000000..7b917c7b
--- /dev/null
+++ b/docs/api/classes/OutlinePostSlot.md
@@ -0,0 +1,51 @@
+# Class: OutlinePostSlot
+
+### Constructors
+
+- [constructor](OutlinePostSlot.md#constructor)
+
+### Properties
+
+- [indexList](OutlinePostSlot.md#indexlist)
+- [color](OutlinePostSlot.md#color)
+- [count](OutlinePostSlot.md#count)
+
+## Constructors
+
+### constructor
+
+• **new OutlinePostSlot**(): [`OutlinePostSlot`](OutlinePostSlot.md)
+
+#### Returns
+
+[`OutlinePostSlot`](OutlinePostSlot.md)
+
+## Properties
+
+### indexList
+
+• **indexList**: `Float32Array`
+
+#### Defined in
+
+[src/io/OutlinePostData.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/io/OutlinePostData.ts#L5)
+
+___
+
+### color
+
+• **color**: [`Color`](Color.md)
+
+#### Defined in
+
+[src/io/OutlinePostData.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/io/OutlinePostData.ts#L6)
+
+___
+
+### count
+
+• **count**: `number`
+
+#### Defined in
+
+[src/io/OutlinePostData.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/io/OutlinePostData.ts#L7)
diff --git a/docs/api/classes/PassShader.md b/docs/api/classes/PassShader.md
new file mode 100644
index 00000000..437b469a
--- /dev/null
+++ b/docs/api/classes/PassShader.md
@@ -0,0 +1,62 @@
+# Class: PassShader
+
+### Constructors
+
+- [constructor](PassShader.md#constructor)
+
+### Properties
+
+- [passType](PassShader.md#passtype)
+- [shaderState](PassShader.md#shaderstate)
+- [vertexShader](PassShader.md#vertexshader)
+- [fragmentShader](PassShader.md#fragmentshader)
+
+## Constructors
+
+### constructor
+
+• **new PassShader**(): [`PassShader`](PassShader.md)
+
+#### Returns
+
+[`PassShader`](PassShader.md)
+
+## Properties
+
+### passType
+
+• **passType**: `string` = `''`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/util/MorePassParser.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/util/MorePassParser.ts#L9)
+
+___
+
+### shaderState
+
+• **shaderState**: `Map`\<`string`, `any`\>
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/util/MorePassParser.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/util/MorePassParser.ts#L10)
+
+___
+
+### vertexShader
+
+• **vertexShader**: `string` = `''`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/util/MorePassParser.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/util/MorePassParser.ts#L11)
+
+___
+
+### fragmentShader
+
+• **fragmentShader**: `string` = `''`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/util/MorePassParser.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/util/MorePassParser.ts#L12)
diff --git a/docs/api/classes/PickFire.md b/docs/api/classes/PickFire.md
new file mode 100644
index 00000000..8fa63b48
--- /dev/null
+++ b/docs/api/classes/PickFire.md
@@ -0,0 +1,341 @@
+# Class: PickFire
+
+Management and triggering for picking 3D objects
+
+## Hierarchy
+
+- [`CEventDispatcher`](CEventDispatcher.md)
+
+ ↳ **`PickFire`**
+
+### Constructors
+
+- [constructor](PickFire.md#constructor)
+
+### Properties
+
+- [ray](PickFire.md#ray)
+- [isTouching](PickFire.md#istouching)
+- [mouseEnableMap](PickFire.md#mouseenablemap)
+
+### Methods
+
+- [dispatchEvent](PickFire.md#dispatchevent)
+- [destroy](PickFire.md#destroy)
+- [addEventListener](PickFire.md#addeventlistener)
+- [removeEventListener](PickFire.md#removeeventlistener)
+- [removeEventListenerAt](PickFire.md#removeeventlistenerat)
+- [removeAllEventListener](PickFire.md#removealleventlistener)
+- [containEventListener](PickFire.md#containeventlistener)
+- [hasEventListener](PickFire.md#haseventlistener)
+- [start](PickFire.md#start)
+- [stop](PickFire.md#stop)
+
+## Constructors
+
+### constructor
+
+• **new PickFire**(`view`): [`PickFire`](PickFire.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+
+#### Returns
+
+[`PickFire`](PickFire.md)
+
+#### Overrides
+
+[CEventDispatcher](CEventDispatcher.md).[constructor](CEventDispatcher.md#constructor)
+
+#### Defined in
+
+[src/io/PickFire.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/io/PickFire.ts#L47)
+
+## Properties
+
+### ray
+
+• **ray**: [`Ray`](Ray.md)
+
+The ray used to pick 3D objects
+
+#### Defined in
+
+[src/io/PickFire.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/io/PickFire.ts#L22)
+
+___
+
+### isTouching
+
+• **isTouching**: `boolean` = `false`
+
+whether it's touching
+
+#### Defined in
+
+[src/io/PickFire.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/io/PickFire.ts#L27)
+
+___
+
+### mouseEnableMap
+
+• **mouseEnableMap**: `Map`\<`number`, [`ColliderComponent`](ColliderComponent.md)\>
+
+a map records the association information between meshID(matrix id) and ColliderComponent
+
+#### Defined in
+
+[src/io/PickFire.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/io/PickFire.ts#L44)
+
+## Methods
+
+### dispatchEvent
+
+▸ **dispatchEvent**(`event`): `void`
+
+Dispatch an event to all registered objects with a specific type of listener.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `event` | [`CEvent`](CEvent.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[dispatchEvent](CEventDispatcher.md#dispatchevent)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L24)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+release all registered event.
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[destroy](CEventDispatcher.md#destroy)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L55)
+
+___
+
+### addEventListener
+
+▸ **addEventListener**(`type`, `callback`, `thisObject`, `param?`, `priority?`): `number`
+
+register an event listener to event distancher.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event type. |
+| `callback` | `Function` | `undefined` | {Function} The callback function that handles events. This function must accept an Event3D object as its unique parameter and cannot return any result. for example: function(evt:Event3D):void. |
+| `thisObject` | `any` | `undefined` | {any} Current registration object, it'll call callback function. |
+| `param` | `any` | `null` | {any} the data binded to registered event, the default value is null. |
+| `priority` | `number` | `0` | {number} The priority of callback function execution, with a larger set value having priority to call |
+
+#### Returns
+
+`number`
+
+Returns register event id
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[addEventListener](CEventDispatcher.md#addeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L79)
+
+___
+
+### removeEventListener
+
+▸ **removeEventListener**(`type`, `callback`, `thisObject`): `void`
+
+Remove Event Listening
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` \| `number` | {string} event type |
+| `callback` | `Function` | {Function} callback function of event register |
+| `thisObject` | `any` | {any} The current registered object. |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[removeEventListener](CEventDispatcher.md#removeeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L113)
+
+___
+
+### removeEventListenerAt
+
+▸ **removeEventListenerAt**(`id`): `boolean`
+
+Remove an event Listening with id
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[removeEventListenerAt](CEventDispatcher.md#removeeventlistenerat)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L133)
+
+___
+
+### removeAllEventListener
+
+▸ **removeAllEventListener**(`eventType?`): `void`
+
+Specify a event type to remove all related event listeners
+eventType event type, set null to remove all event listeners
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `eventType` | `string` \| `number` | `null` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[removeAllEventListener](CEventDispatcher.md#removealleventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L153)
+
+___
+
+### containEventListener
+
+▸ **containEventListener**(`type`): `boolean`
+
+whether the target presence of a listener with event type.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` | {string} event type. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[containEventListener](CEventDispatcher.md#containeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:185](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L185)
+
+___
+
+### hasEventListener
+
+▸ **hasEventListener**(`type`, `callback?`, `thisObject?`): `boolean`
+
+whether the target presence of a listener with event type. it associate more registration parameters.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event name. |
+| `callback` | `Function` | `null` | {Function} callback function of event register. |
+| `thisObject` | `any` | `null` | {any} The registered object. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+[CEventDispatcher](CEventDispatcher.md).[hasEventListener](CEventDispatcher.md#haseventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L198)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+start this manager
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/io/PickFire.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/io/PickFire.ts#L71)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+stop this manager
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/io/PickFire.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/io/PickFire.ts#L90)
diff --git a/docs/api/classes/PipelinePool.md b/docs/api/classes/PipelinePool.md
new file mode 100644
index 00000000..45b284e5
--- /dev/null
+++ b/docs/api/classes/PipelinePool.md
@@ -0,0 +1,61 @@
+# Class: PipelinePool
+
+### Constructors
+
+- [constructor](PipelinePool.md#constructor)
+
+### Methods
+
+- [getSharePipeline](PipelinePool.md#getsharepipeline)
+- [setSharePipeline](PipelinePool.md#setsharepipeline)
+
+## Constructors
+
+### constructor
+
+• **new PipelinePool**(): [`PipelinePool`](PipelinePool.md)
+
+#### Returns
+
+[`PipelinePool`](PipelinePool.md)
+
+## Methods
+
+### getSharePipeline
+
+▸ **getSharePipeline**(`shaderVariant`): `GPURenderPipeline`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shaderVariant` | `string` |
+
+#### Returns
+
+`GPURenderPipeline`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/PipelinePool.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/PipelinePool.ts#L6)
+
+___
+
+### setSharePipeline
+
+▸ **setSharePipeline**(`shaderVariant`, `pipeline`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shaderVariant` | `string` |
+| `pipeline` | `GPURenderPipeline` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/PipelinePool.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/PipelinePool.ts#L15)
diff --git a/docs/api/classes/Plane.md b/docs/api/classes/Plane.md
new file mode 100644
index 00000000..1a70f8e2
--- /dev/null
+++ b/docs/api/classes/Plane.md
@@ -0,0 +1,134 @@
+# Class: Plane
+
+Plane mathematics class
+
+### Constructors
+
+- [constructor](Plane.md#constructor)
+
+### Properties
+
+- [point](Plane.md#point)
+- [normal](Plane.md#normal)
+
+### Methods
+
+- [clone](Plane.md#clone)
+- [intersectsLine](Plane.md#intersectsline)
+- [intersectsRay](Plane.md#intersectsray)
+
+## Constructors
+
+### constructor
+
+• **new Plane**(`pos`, `normal`): [`Plane`](Plane.md)
+
+Constructs a new plane object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pos` | [`Vector3`](Vector3.md) | Plane position |
+| `normal` | [`Vector3`](Vector3.md) | Plane normal quantity |
+
+#### Returns
+
+[`Plane`](Plane.md)
+
+#### Defined in
+
+[src/math/Plane.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane.ts#L29)
+
+## Properties
+
+### point
+
+• **point**: [`Vector3`](Vector3.md)
+
+Center position of plane
+
+#### Defined in
+
+[src/math/Plane.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane.ts#L12)
+
+___
+
+### normal
+
+• **normal**: [`Vector3`](Vector3.md) = `Vector3.UP`
+
+Plane normal vector
+
+#### Defined in
+
+[src/math/Plane.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane.ts#L17)
+
+## Methods
+
+### clone
+
+▸ **clone**(): [`Plane`](Plane.md)
+
+Clones the current plane object
+
+#### Returns
+
+[`Plane`](Plane.md)
+
+New plane object
+
+#### Defined in
+
+[src/math/Plane.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane.ts#L38)
+
+___
+
+### intersectsLine
+
+▸ **intersectsLine**(`start`, `end`, `point`): `boolean`
+
+Determine whether the plane intersects a line segment and calculate the intersection point
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `start` | [`Vector3`](Vector3.md) | Starting point of line segment |
+| `end` | [`Vector3`](Vector3.md) | End point of line segment |
+| `point` | [`Vector3`](Vector3.md) | Point of output intersection |
+
+#### Returns
+
+`boolean`
+
+Returns whether it intersects
+
+#### Defined in
+
+[src/math/Plane.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane.ts#L50)
+
+___
+
+### intersectsRay
+
+▸ **intersectsRay**(`ray`, `targetPoint?`): `boolean`
+
+Determine whether the plane intersects a ray and calculate the intersection point
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `ray` | [`Ray`](Ray.md) | Ray of input |
+| `targetPoint?` | [`Vector3`](Vector3.md) | - |
+
+#### Returns
+
+`boolean`
+
+Returns whether it intersects
+
+#### Defined in
+
+[src/math/Plane.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane.ts#L70)
diff --git a/docs/api/classes/Plane3D.md b/docs/api/classes/Plane3D.md
new file mode 100644
index 00000000..07a0c071
--- /dev/null
+++ b/docs/api/classes/Plane3D.md
@@ -0,0 +1,355 @@
+# Class: Plane3D
+
+**`Language`**
+
+zh_CN
+
+**`Classdesc`**
+
+Plane3D 类 3D空间中的平面表示数据
+由a,b,c,d4个分量组成 在三维空间中定义了一个平面 Ax + By + Cz + D = 0
+
+**`Include Example`**
+
+geom/Plane3D.ts
+
+**`Version`**
+
+**`Platform`**
+
+Web,Native
+
+### Constructors
+
+- [constructor](Plane3D.md#constructor)
+
+### Properties
+
+- [a](Plane3D.md#a)
+- [b](Plane3D.md#b)
+- [c](Plane3D.md#c)
+- [d](Plane3D.md#d)
+
+### Methods
+
+- [setTo](Plane3D.md#setto)
+- [fromPoints](Plane3D.md#frompoints)
+- [fromNormalAndPoint](Plane3D.md#fromnormalandpoint)
+- [normalize](Plane3D.md#normalize)
+- [distance](Plane3D.md#distance)
+- [classifyPoint](Plane3D.md#classifypoint)
+- [toString](Plane3D.md#tostring)
+
+## Constructors
+
+### constructor
+
+• **new Plane3D**(`a?`, `b?`, `c?`, `d?`): [`Plane3D`](Plane3D.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `a` | `number` | `0` |
+| `b` | `number` | `0` |
+| `c` | `number` | `0` |
+| `d` | `number` | `0` |
+
+#### Returns
+
+[`Plane3D`](Plane3D.md)
+
+**`Language`**
+
+zh_CN
+创建一个平面实例
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/math/Plane3D.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane3D.ts#L93)
+
+## Properties
+
+### a
+
+• **a**: `number`
+
+**`Language`**
+
+zh_CN
+平面中的a分量
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/math/Plane3D.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane3D.ts#L24)
+
+___
+
+### b
+
+• **b**: `number`
+
+**`Language`**
+
+zh_CN
+平面中的b分量
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/math/Plane3D.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane3D.ts#L35)
+
+___
+
+### c
+
+• **c**: `number`
+
+**`Language`**
+
+zh_CN
+平面中的c分量
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/math/Plane3D.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane3D.ts#L46)
+
+___
+
+### d
+
+• **d**: `number`
+
+**`Language`**
+
+zh_CN
+平面中的d分量
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/math/Plane3D.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane3D.ts#L57)
+
+## Methods
+
+### setTo
+
+▸ **setTo**(`a?`, `b?`, `c?`, `d?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `a` | `number` | `0` |
+| `b` | `number` | `0` |
+| `c` | `number` | `0` |
+| `d` | `number` | `0` |
+
+#### Returns
+
+`void`
+
+**`Language`**
+
+zh_CN
+填充平面的各分量的值
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/math/Plane3D.ts:109](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane3D.ts#L109)
+
+___
+
+### fromPoints
+
+▸ **fromPoints**(`p0`, `p1`, `p2`): `void`
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `p0` | [`Vector3`](Vector3.md) | Vector3 |
+| `p1` | [`Vector3`](Vector3.md) | Vector3 |
+| `p2` | [`Vector3`](Vector3.md) | Vector3 |
+
+#### Returns
+
+`void`
+
+**`Language`**
+
+zh_CN
+由3个坐标来创建一个3d平面
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/math/Plane3D.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane3D.ts#L132)
+
+___
+
+### fromNormalAndPoint
+
+▸ **fromNormalAndPoint**(`normal`, `point`): `void`
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `normal` | [`Vector3`](Vector3.md) | Vector3 |
+| `point` | [`Vector3`](Vector3.md) | Vector3 |
+
+#### Returns
+
+`void`
+
+**`Language`**
+
+zh_CN
+由一条normal向量和一个坐标创建一个3d平面
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/math/Plane3D.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane3D.ts#L160)
+
+___
+
+### normalize
+
+▸ **normalize**(): `number`
+
+#### Returns
+
+`number`
+
+number 返回平面长度
+
+**`Language`**
+
+zh_CN
+单位化3d平面
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/math/Plane3D.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane3D.ts#L178)
+
+___
+
+### distance
+
+▸ **distance**(`p`): `number`
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `p` | [`Vector3`](Vector3.md) | Vector3 |
+
+#### Returns
+
+`number`
+
+number 返回计算后的距离
+
+**`Language`**
+
+zh_CN
+计算3d平面到点p的距离
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/math/Plane3D.ts:204](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane3D.ts#L204)
+
+___
+
+### classifyPoint
+
+▸ **classifyPoint**(`p`, `epsilon?`): `number`
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `p` | [`Vector3`](Vector3.md) | `undefined` | Vector3 |
+| `epsilon` | `number` | `0.01` | 相对偏移值 |
+
+#### Returns
+
+`number`
+
+number int Plane3.FRONT or Plane3D.BACK or Plane3D.INTERSECT
+
+**`Language`**
+
+zh_CN
+计算3d平面和点p的空间关系
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/math/Plane3D.ts:225](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane3D.ts#L225)
+
+___
+
+### toString
+
+▸ **toString**(): `string`
+
+#### Returns
+
+`string`
+
+string
+
+**`Language`**
+
+zh_CN
+当前Plane3D以字符串形式返回
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/math/Plane3D.ts:245](https://github.com/Orillusion/orillusion/blob/main/src/math/Plane3D.ts#L245)
diff --git a/docs/api/classes/PlaneClassification.md b/docs/api/classes/PlaneClassification.md
new file mode 100644
index 00000000..5fa9ce60
--- /dev/null
+++ b/docs/api/classes/PlaneClassification.md
@@ -0,0 +1,118 @@
+# Class: PlaneClassification
+
+### Constructors
+
+- [constructor](PlaneClassification.md#constructor)
+
+### Properties
+
+- [BACK](PlaneClassification.md#back)
+- [FRONT](PlaneClassification.md#front)
+- [IN](PlaneClassification.md#in)
+- [OUT](PlaneClassification.md#out)
+- [INTERSECT](PlaneClassification.md#intersect)
+
+## Constructors
+
+### constructor
+
+• **new PlaneClassification**(): [`PlaneClassification`](PlaneClassification.md)
+
+#### Returns
+
+[`PlaneClassification`](PlaneClassification.md)
+
+## Properties
+
+### BACK
+
+▪ `Static` **BACK**: `number` = `0`
+
+**`Language`**
+
+zh_CN
+背面
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/math/PlaneClassification.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/math/PlaneClassification.ts#L7)
+
+___
+
+### FRONT
+
+▪ `Static` **FRONT**: `number` = `1`
+
+**`Language`**
+
+zh_CN
+正面
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/math/PlaneClassification.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/math/PlaneClassification.ts#L14)
+
+___
+
+### IN
+
+▪ `Static` **IN**: `number` = `0`
+
+**`Language`**
+
+zh_CN
+在法线朝上的一面
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/math/PlaneClassification.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/math/PlaneClassification.ts#L21)
+
+___
+
+### OUT
+
+▪ `Static` **OUT**: `number` = `1`
+
+**`Language`**
+
+zh_CN
+在法线朝下的一面
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/math/PlaneClassification.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/math/PlaneClassification.ts#L28)
+
+___
+
+### INTERSECT
+
+▪ `Static` **INTERSECT**: `number` = `2`
+
+**`Language`**
+
+zh_CN
+相交
+
+**`Platform`**
+
+Web,Native
+
+#### Defined in
+
+[src/math/PlaneClassification.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/math/PlaneClassification.ts#L35)
diff --git a/docs/api/classes/PlaneGeometry.md b/docs/api/classes/PlaneGeometry.md
new file mode 100644
index 00000000..7c84e3d2
--- /dev/null
+++ b/docs/api/classes/PlaneGeometry.md
@@ -0,0 +1,683 @@
+# Class: PlaneGeometry
+
+Plane geometry
+
+## Hierarchy
+
+- [`GeometryBase`](GeometryBase.md)
+
+ ↳ **`PlaneGeometry`**
+
+### Constructors
+
+- [constructor](PlaneGeometry.md#constructor)
+
+### Properties
+
+- [instanceID](PlaneGeometry.md#instanceid)
+- [name](PlaneGeometry.md#name)
+- [subGeometries](PlaneGeometry.md#subgeometries)
+- [morphTargetsRelative](PlaneGeometry.md#morphtargetsrelative)
+- [morphTargetDictionary](PlaneGeometry.md#morphtargetdictionary)
+- [skinNames](PlaneGeometry.md#skinnames)
+- [bindPose](PlaneGeometry.md#bindpose)
+- [blendShapeData](PlaneGeometry.md#blendshapedata)
+- [vertexDim](PlaneGeometry.md#vertexdim)
+- [vertexCount](PlaneGeometry.md#vertexcount)
+- [width](PlaneGeometry.md#width)
+- [height](PlaneGeometry.md#height)
+- [segmentW](PlaneGeometry.md#segmentw)
+- [segmentH](PlaneGeometry.md#segmenth)
+- [up](PlaneGeometry.md#up)
+
+### Accessors
+
+- [indicesBuffer](PlaneGeometry.md#indicesbuffer)
+- [vertexBuffer](PlaneGeometry.md#vertexbuffer)
+- [vertexAttributes](PlaneGeometry.md#vertexattributes)
+- [vertexAttributeMap](PlaneGeometry.md#vertexattributemap)
+- [geometryType](PlaneGeometry.md#geometrytype)
+- [bounds](PlaneGeometry.md#bounds)
+
+### Methods
+
+- [addSubGeometry](PlaneGeometry.md#addsubgeometry)
+- [generate](PlaneGeometry.md#generate)
+- [setIndices](PlaneGeometry.md#setindices)
+- [setAttribute](PlaneGeometry.md#setattribute)
+- [getAttribute](PlaneGeometry.md#getattribute)
+- [hasAttribute](PlaneGeometry.md#hasattribute)
+- [genWireframe](PlaneGeometry.md#genwireframe)
+- [compute](PlaneGeometry.md#compute)
+- [computeNormals](PlaneGeometry.md#computenormals)
+- [isPrimitive](PlaneGeometry.md#isprimitive)
+- [destroy](PlaneGeometry.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new PlaneGeometry**(`width`, `height`, `segmentW?`, `segmentH?`, `up?`): [`PlaneGeometry`](PlaneGeometry.md)
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `width` | `number` | `undefined` | Width of the plane |
+| `height` | `number` | `undefined` | Height of the plane |
+| `segmentW` | `number` | `1` | Number of width segments of a plane |
+| `segmentH` | `number` | `1` | Number of height segments of a plane |
+| `up` | [`Vector3`](Vector3.md) | `Vector3.Y_AXIS` | Define the normal vector of a plane |
+
+#### Returns
+
+[`PlaneGeometry`](PlaneGeometry.md)
+
+#### Overrides
+
+[GeometryBase](GeometryBase.md).[constructor](GeometryBase.md#constructor)
+
+#### Defined in
+
+[src/shape/PlaneGeometry.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/shape/PlaneGeometry.ts#L41)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[instanceID](GeometryBase.md#instanceid)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L39)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[name](GeometryBase.md#name)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L40)
+
+___
+
+### subGeometries
+
+• **subGeometries**: [`SubGeometry`](SubGeometry.md)[] = `[]`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[subGeometries](GeometryBase.md#subgeometries)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L41)
+
+___
+
+### morphTargetsRelative
+
+• **morphTargetsRelative**: `boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetsRelative](GeometryBase.md#morphtargetsrelative)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L42)
+
+___
+
+### morphTargetDictionary
+
+• **morphTargetDictionary**: `Object`
+
+#### Index signature
+
+▪ [blenderName: `string`]: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetDictionary](GeometryBase.md#morphtargetdictionary)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L43)
+
+___
+
+### skinNames
+
+• **skinNames**: `string`[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[skinNames](GeometryBase.md#skinnames)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L44)
+
+___
+
+### bindPose
+
+• **bindPose**: [`Matrix4`](Matrix4.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[bindPose](GeometryBase.md#bindpose)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L45)
+
+___
+
+### blendShapeData
+
+• **blendShapeData**: [`BlendShapeData`](BlendShapeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[blendShapeData](GeometryBase.md#blendshapedata)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L46)
+
+___
+
+### vertexDim
+
+• **vertexDim**: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexDim](GeometryBase.md#vertexdim)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L47)
+
+___
+
+### vertexCount
+
+• **vertexCount**: `number` = `0`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexCount](GeometryBase.md#vertexcount)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L48)
+
+___
+
+### width
+
+• **width**: `number`
+
+Width of the plane
+
+#### Defined in
+
+[src/shape/PlaneGeometry.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/shape/PlaneGeometry.ts#L14)
+
+___
+
+### height
+
+• **height**: `number`
+
+Height of the plane
+
+#### Defined in
+
+[src/shape/PlaneGeometry.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/shape/PlaneGeometry.ts#L18)
+
+___
+
+### segmentW
+
+• **segmentW**: `number`
+
+Number of width segments of a plane
+
+#### Defined in
+
+[src/shape/PlaneGeometry.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/shape/PlaneGeometry.ts#L22)
+
+___
+
+### segmentH
+
+• **segmentH**: `number`
+
+Number of height segments of a plane
+
+#### Defined in
+
+[src/shape/PlaneGeometry.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/shape/PlaneGeometry.ts#L26)
+
+___
+
+### up
+
+• **up**: [`Vector3`](Vector3.md)
+
+Define the normal vector of a plane
+
+#### Defined in
+
+[src/shape/PlaneGeometry.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/shape/PlaneGeometry.ts#L30)
+
+## Accessors
+
+### indicesBuffer
+
+• `get` **indicesBuffer**(): [`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Returns
+
+[`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Inherited from
+
+GeometryBase.indicesBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L69)
+
+___
+
+### vertexBuffer
+
+• `get` **vertexBuffer**(): [`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Returns
+
+[`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Inherited from
+
+GeometryBase.vertexBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L73)
+
+___
+
+### vertexAttributes
+
+• `get` **vertexAttributes**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+GeometryBase.vertexAttributes
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L77)
+
+___
+
+### vertexAttributeMap
+
+• `get` **vertexAttributeMap**(): `Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Returns
+
+`Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Inherited from
+
+GeometryBase.vertexAttributeMap
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L81)
+
+___
+
+### geometryType
+
+• `get` **geometryType**(): [`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Returns
+
+[`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L85)
+
+• `set` **geometryType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryVertexType`](../enums/GeometryVertexType.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L88)
+
+___
+
+### bounds
+
+• `get` **bounds**(): `BoundingBox`
+
+#### Returns
+
+`BoundingBox`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L92)
+
+• `set` **bounds**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BoundingBox` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L135)
+
+## Methods
+
+### addSubGeometry
+
+▸ **addSubGeometry**(`...lodLevels`): [`SubGeometry`](SubGeometry.md)
+
+add subGeometry from lod level
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `...lodLevels` | [`LODDescriptor`](../types/LODDescriptor.md)[] |
+
+#### Returns
+
+[`SubGeometry`](SubGeometry.md)
+
+**`See`**
+
+LODDescriptor
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[addSubGeometry](GeometryBase.md#addsubgeometry)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L144)
+
+___
+
+### generate
+
+▸ **generate**(`shaderReflection`): `void`
+
+create geometry by shaderReflection
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `shaderReflection` | `ShaderReflection` | ShaderReflection |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[generate](GeometryBase.md#generate)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L155)
+
+___
+
+### setIndices
+
+▸ **setIndices**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setIndices](GeometryBase.md#setindices)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L165)
+
+___
+
+### setAttribute
+
+▸ **setAttribute**(`attribute`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setAttribute](GeometryBase.md#setattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L177)
+
+___
+
+### getAttribute
+
+▸ **getAttribute**(`attribute`): [`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+[`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[getAttribute](GeometryBase.md#getattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L190)
+
+___
+
+### hasAttribute
+
+▸ **hasAttribute**(`attribute`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[hasAttribute](GeometryBase.md#hasattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L194)
+
+___
+
+### genWireframe
+
+▸ **genWireframe**(): [`Vector3`](Vector3.md)[]
+
+#### Returns
+
+[`Vector3`](Vector3.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[genWireframe](GeometryBase.md#genwireframe)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L198)
+
+___
+
+### compute
+
+▸ **compute**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[compute](GeometryBase.md#compute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L251)
+
+___
+
+### computeNormals
+
+▸ **computeNormals**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[computeNormals](GeometryBase.md#computenormals)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:270](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L270)
+
+___
+
+### isPrimitive
+
+▸ **isPrimitive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[isPrimitive](GeometryBase.md#isprimitive)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L312)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[destroy](GeometryBase.md#destroy)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:316](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L316)
diff --git a/docs/api/classes/PointLight.md b/docs/api/classes/PointLight.md
new file mode 100644
index 00000000..9f393ce7
--- /dev/null
+++ b/docs/api/classes/PointLight.md
@@ -0,0 +1,1342 @@
+# Class: PointLight
+
+Point light source.
+A single point light source that illuminates all directions.
+A common example is to simulate the light emitted by a light bulb, where a point light source cannot create shadows.
+
+## Hierarchy
+
+- `LightBase`
+
+ ↳ **`PointLight`**
+
+### Constructors
+
+- [constructor](PointLight.md#constructor)
+
+### Properties
+
+- [object3D](PointLight.md#object3d)
+- [isDestroyed](PointLight.md#isdestroyed)
+- [name](PointLight.md#name)
+- [size](PointLight.md#size)
+- [lightData](PointLight.md#lightdata)
+- [dirFix](PointLight.md#dirfix)
+- [bindOnChange](PointLight.md#bindonchange)
+- [needUpdateShadow](PointLight.md#needupdateshadow)
+- [realTimeShadow](PointLight.md#realtimeshadow)
+
+### Accessors
+
+- [eventDispatcher](PointLight.md#eventdispatcher)
+- [isStart](PointLight.md#isstart)
+- [transform](PointLight.md#transform)
+- [enable](PointLight.md#enable)
+- [iesProfiles](PointLight.md#iesprofiles)
+- [iesProfile](PointLight.md#iesprofile)
+- [r](PointLight.md#r)
+- [g](PointLight.md#g)
+- [b](PointLight.md#b)
+- [lightColor](PointLight.md#lightcolor)
+- [color](PointLight.md#color)
+- [intensity](PointLight.md#intensity)
+- [castShadow](PointLight.md#castshadow)
+- [shadowIndex](PointLight.md#shadowindex)
+- [castGI](PointLight.md#castgi)
+- [direction](PointLight.md#direction)
+- [range](PointLight.md#range)
+- [at](PointLight.md#at)
+- [radius](PointLight.md#radius)
+- [quadratic](PointLight.md#quadratic)
+
+### Methods
+
+- [stop](PointLight.md#stop)
+- [onLateUpdate](PointLight.md#onlateupdate)
+- [onBeforeUpdate](PointLight.md#onbeforeupdate)
+- [onCompute](PointLight.md#oncompute)
+- [onParentChange](PointLight.md#onparentchange)
+- [onAddChild](PointLight.md#onaddchild)
+- [onRemoveChild](PointLight.md#onremovechild)
+- [cloneTo](PointLight.md#cloneto)
+- [copyComponent](PointLight.md#copycomponent)
+- [beforeDestroy](PointLight.md#beforedestroy)
+- [onEnable](PointLight.md#onenable)
+- [onDisable](PointLight.md#ondisable)
+- [destroy](PointLight.md#destroy)
+- [init](PointLight.md#init)
+- [start](PointLight.md#start)
+- [onUpdate](PointLight.md#onupdate)
+- [onGraphic](PointLight.md#ongraphic)
+- [debug](PointLight.md#debug)
+- [debugDraw](PointLight.md#debugdraw)
+
+## Constructors
+
+### constructor
+
+• **new PointLight**(): [`PointLight`](PointLight.md)
+
+#### Returns
+
+[`PointLight`](PointLight.md)
+
+#### Overrides
+
+LightBase.constructor
+
+#### Defined in
+
+[src/components/lights/PointLight.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/PointLight.ts#L16)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+LightBase.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+LightBase.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### name
+
+• **name**: `string`
+
+light name
+
+#### Inherited from
+
+LightBase.name
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L22)
+
+___
+
+### size
+
+• **size**: `number` = `1`
+
+light size
+
+#### Inherited from
+
+LightBase.size
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L26)
+
+___
+
+### lightData
+
+• **lightData**: `LightData`
+
+light source data
+
+#### Inherited from
+
+LightBase.lightData
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L31)
+
+___
+
+### dirFix
+
+• **dirFix**: `number` = `1`
+
+fix light direction
+
+#### Inherited from
+
+LightBase.dirFix
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L36)
+
+___
+
+### bindOnChange
+
+• **bindOnChange**: () => `void`
+
+Callback function when binding changes
+
+#### Type declaration
+
+▸ (): `void`
+
+Callback function when binding changes
+
+##### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.bindOnChange
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L41)
+
+___
+
+### needUpdateShadow
+
+• **needUpdateShadow**: `boolean` = `true`
+
+#### Inherited from
+
+LightBase.needUpdateShadow
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L43)
+
+___
+
+### realTimeShadow
+
+• **realTimeShadow**: `boolean` = `true`
+
+Whether to enable real-time rendering of shadows
+
+#### Inherited from
+
+LightBase.realTimeShadow
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L48)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+LightBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LightBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+LightBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LightBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### iesProfiles
+
+• `set` **iesProfiles**(`iesProfiles`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `iesProfiles` | [`IESProfiles`](IESProfiles.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.iesProfiles
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:125](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L125)
+
+___
+
+### iesProfile
+
+• `get` **iesProfile**(): [`IESProfiles`](IESProfiles.md)
+
+#### Returns
+
+[`IESProfiles`](IESProfiles.md)
+
+#### Inherited from
+
+LightBase.iesProfile
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L132)
+
+___
+
+### r
+
+• `get` **r**(): `number`
+
+Get the red component of the lighting color
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LightBase.r
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L139)
+
+• `set` **r**(`value`): `void`
+
+Set the red component of the lighting color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.r
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:146](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L146)
+
+___
+
+### g
+
+• `get` **g**(): `number`
+
+Get the green component of the lighting color
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LightBase.g
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:154](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L154)
+
+• `set` **g**(`value`): `void`
+
+Set the green component of the lighting color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.g
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L161)
+
+___
+
+### b
+
+• `get` **b**(): `number`
+
+Get the blue component of the lighting color
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LightBase.b
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:169](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L169)
+
+• `set` **b**(`value`): `void`
+
+Set the blue component of the lighting color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.b
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:175](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L175)
+
+___
+
+### lightColor
+
+• `get` **lightColor**(): [`Color`](Color.md)
+
+Get light source color
+
+#### Returns
+
+[`Color`](Color.md)
+
+Color
+
+#### Inherited from
+
+LightBase.lightColor
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:183](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L183)
+
+• `set` **lightColor**(`value`): `void`
+
+Set light source color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.lightColor
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L190)
+
+___
+
+### color
+
+• `get` **color**(): [`Color`](Color.md)
+
+Get light source color
+
+#### Returns
+
+[`Color`](Color.md)
+
+Color
+
+#### Inherited from
+
+LightBase.color
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L199)
+
+• `set` **color**(`value`): `void`
+
+Set light source color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.color
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L207)
+
+___
+
+### intensity
+
+• `get` **intensity**(): `number`
+
+Get Illumination intensity of light source
+
+#### Returns
+
+`number`
+
+number
+
+#### Inherited from
+
+LightBase.intensity
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L216)
+
+• `set` **intensity**(`value`): `void`
+
+Set Illumination intensity of light source
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.intensity
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L224)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LightBase.castShadow
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L240)
+
+• `set` **castShadow**(`value`): `void`
+
+Cast Light Shadow
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.castShadow
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L233)
+
+___
+
+### shadowIndex
+
+• `get` **shadowIndex**(): `number`
+
+get shadow index at shadow map list
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LightBase.shadowIndex
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L247)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+get gi is enable
+
+#### Returns
+
+`boolean`
+
+boolean
+
+#### Inherited from
+
+LightBase.castGI
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:256](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L256)
+
+• `set` **castGI**(`value`): `void`
+
+set gi is enable
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.castGI
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:263](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L263)
+
+___
+
+### direction
+
+• `get` **direction**(): [`Vector3`](Vector3.md)
+
+light source direction
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3
+
+#### Inherited from
+
+LightBase.direction
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:277](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L277)
+
+___
+
+### range
+
+• `get` **range**(): `number`
+
+Get the range of the light source
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/lights/PointLight.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/PointLight.ts#L34)
+
+• `set` **range**(`value`): `void`
+
+Set the range of the light source
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/PointLight.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/PointLight.ts#L42)
+
+___
+
+### at
+
+• `get` **at**(): `number`
+
+Get the illumination distance of the light source
+
+#### Returns
+
+`number`
+
+**`Memberof`**
+
+PointLight
+
+#### Defined in
+
+[src/components/lights/PointLight.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/PointLight.ts#L53)
+
+• `set` **at**(`value`): `void`
+
+Set the illumination distance of the light source
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+**`Memberof`**
+
+PointLight
+
+#### Defined in
+
+[src/components/lights/PointLight.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/PointLight.ts#L64)
+
+___
+
+### radius
+
+• `get` **radius**(): `number`
+
+Get the radius to control the light
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/lights/PointLight.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/PointLight.ts#L72)
+
+• `set` **radius**(`value`): `void`
+
+Set the radius of the control light
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/PointLight.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/PointLight.ts#L79)
+
+___
+
+### quadratic
+
+• `get` **quadratic**(): `number`
+
+Get the radius to control the light
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/lights/PointLight.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/PointLight.ts#L87)
+
+• `set` **quadratic**(`value`): `void`
+
+Set the radius of the control light
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/PointLight.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/PointLight.ts#L94)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+LightBase.copyComponent
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.beforeDestroy
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.onEnable
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L114)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.onDisable
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L119)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.destroy
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:281](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L281)
+
+___
+
+### init
+
+▸ **init**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LightBase.init
+
+#### Defined in
+
+[src/components/lights/PointLight.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/PointLight.ts#L20)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LightBase.start
+
+#### Defined in
+
+[src/components/lights/PointLight.ts:101](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/PointLight.ts#L101)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LightBase.onUpdate
+
+#### Defined in
+
+[src/components/lights/PointLight.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/PointLight.ts#L106)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LightBase.onGraphic
+
+#### Defined in
+
+[src/components/lights/PointLight.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/PointLight.ts#L110)
+
+___
+
+### debug
+
+▸ **debug**(): `void`
+
+enable GUI debug
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/PointLight.ts:127](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/PointLight.ts#L127)
+
+___
+
+### debugDraw
+
+▸ **debugDraw**(`show`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `show` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/PointLight.ts:130](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/PointLight.ts#L130)
diff --git a/docs/api/classes/PointerEvent3D.md b/docs/api/classes/PointerEvent3D.md
new file mode 100644
index 00000000..b69cd17e
--- /dev/null
+++ b/docs/api/classes/PointerEvent3D.md
@@ -0,0 +1,773 @@
+# Class: PointerEvent3D
+
+enum event type of pointer.
+[InputSystem](InputSystem.md)
+
+## Hierarchy
+
+- [`CEvent`](CEvent.md)
+
+ ↳ **`PointerEvent3D`**
+
+### Constructors
+
+- [constructor](PointerEvent3D.md#constructor)
+
+### Properties
+
+- [target](PointerEvent3D.md#target)
+- [currentTarget](PointerEvent3D.md#currenttarget)
+- [type](PointerEvent3D.md#type)
+- [data](PointerEvent3D.md#data)
+- [param](PointerEvent3D.md#param)
+- [time](PointerEvent3D.md#time)
+- [delay](PointerEvent3D.md#delay)
+- [mouseCode](PointerEvent3D.md#mousecode)
+- [ctrlKey](PointerEvent3D.md#ctrlkey)
+- [metaKey](PointerEvent3D.md#metakey)
+- [altKey](PointerEvent3D.md#altkey)
+- [shiftKey](PointerEvent3D.md#shiftkey)
+- [targetTouches](PointerEvent3D.md#targettouches)
+- [changedTouches](PointerEvent3D.md#changedtouches)
+- [touches](PointerEvent3D.md#touches)
+- [view](PointerEvent3D.md#view)
+- [PICK\_OVER](PointerEvent3D.md#pick_over)
+- [PICK\_OVER\_GUI](PointerEvent3D.md#pick_over_gui)
+- [PICK\_CLICK](PointerEvent3D.md#pick_click)
+- [PICK\_CLICK\_GUI](PointerEvent3D.md#pick_click_gui)
+- [PICK\_OUT](PointerEvent3D.md#pick_out)
+- [PICK\_OUT\_GUI](PointerEvent3D.md#pick_out_gui)
+- [PICK\_MOVE](PointerEvent3D.md#pick_move)
+- [PICK\_UP](PointerEvent3D.md#pick_up)
+- [PICK\_UP\_GUI](PointerEvent3D.md#pick_up_gui)
+- [PICK\_DOWN](PointerEvent3D.md#pick_down)
+- [PICK\_DOWN\_GUI](PointerEvent3D.md#pick_down_gui)
+- [POINTER\_RIGHT\_CLICK](PointerEvent3D.md#pointer_right_click)
+- [POINTER\_MID\_UP](PointerEvent3D.md#pointer_mid_up)
+- [POINTER\_MID\_DOWN](PointerEvent3D.md#pointer_mid_down)
+- [POINTER\_CLICK](PointerEvent3D.md#pointer_click)
+- [POINTER\_MOVE](PointerEvent3D.md#pointer_move)
+- [POINTER\_DOWN](PointerEvent3D.md#pointer_down)
+- [POINTER\_UP](PointerEvent3D.md#pointer_up)
+- [POINTER\_OUT](PointerEvent3D.md#pointer_out)
+- [POINTER\_OVER](PointerEvent3D.md#pointer_over)
+- [POINTER\_WHEEL](PointerEvent3D.md#pointer_wheel)
+- [pointerId](PointerEvent3D.md#pointerid)
+- [pointerType](PointerEvent3D.md#pointertype)
+- [isPrimary](PointerEvent3D.md#isprimary)
+- [pressure](PointerEvent3D.md#pressure)
+- [mouseX](PointerEvent3D.md#mousex)
+- [mouseY](PointerEvent3D.md#mousey)
+- [movementX](PointerEvent3D.md#movementx)
+- [movementY](PointerEvent3D.md#movementy)
+- [deltaX](PointerEvent3D.md#deltax)
+- [deltaY](PointerEvent3D.md#deltay)
+
+### Accessors
+
+- [isStopImmediatePropagation](PointerEvent3D.md#isstopimmediatepropagation)
+
+### Methods
+
+- [stopImmediatePropagation](PointerEvent3D.md#stopimmediatepropagation)
+
+## Constructors
+
+### constructor
+
+• **new PointerEvent3D**(`eventType?`, `data?`): [`PointerEvent3D`](PointerEvent3D.md)
+
+Create a new event, with type and data
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `eventType` | `string` | `null` | {any} eventType |
+| `data` | `any` | `null` | {any} param |
+
+#### Returns
+
+[`PointerEvent3D`](PointerEvent3D.md)
+
+#### Inherited from
+
+[CEvent](CEvent.md).[constructor](CEvent.md#constructor)
+
+#### Defined in
+
+[src/event/CEvent.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L102)
+
+## Properties
+
+### target
+
+• **target**: [`Object3D`](Object3D.md)
+
+Event target, it's usually event dispatcher
+
+#### Inherited from
+
+[CEvent](CEvent.md).[target](CEvent.md#target)
+
+#### Defined in
+
+[src/event/CEvent.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L13)
+
+___
+
+### currentTarget
+
+• **currentTarget**: `CEventListener`
+
+Current event target, it's current bubble object
+
+#### Inherited from
+
+[CEvent](CEvent.md).[currentTarget](CEvent.md#currenttarget)
+
+#### Defined in
+
+[src/event/CEvent.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L18)
+
+___
+
+### type
+
+• **type**: `string`
+
+event type, it's registered string of key
+
+#### Inherited from
+
+[CEvent](CEvent.md).[type](CEvent.md#type)
+
+#### Defined in
+
+[src/event/CEvent.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L23)
+
+___
+
+### data
+
+• **data**: `any`
+
+extra data.Used for the transmission process of events, carrying data
+
+#### Inherited from
+
+[CEvent](CEvent.md).[data](CEvent.md#data)
+
+#### Defined in
+
+[src/event/CEvent.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L28)
+
+___
+
+### param
+
+• **param**: `any`
+
+The param data when event is registered
+
+#### Inherited from
+
+[CEvent](CEvent.md).[param](CEvent.md#param)
+
+#### Defined in
+
+[src/event/CEvent.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L34)
+
+___
+
+### time
+
+• **time**: `number` = `0`
+
+the time when event is
+
+#### Inherited from
+
+[CEvent](CEvent.md).[time](CEvent.md#time)
+
+#### Defined in
+
+[src/event/CEvent.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L40)
+
+___
+
+### delay
+
+• **delay**: `number` = `0`
+
+the delay time when event is dispatched.
+
+#### Inherited from
+
+[CEvent](CEvent.md).[delay](CEvent.md#delay)
+
+#### Defined in
+
+[src/event/CEvent.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L46)
+
+___
+
+### mouseCode
+
+• **mouseCode**: `number` = `0`
+
+mouse code, see
+
+**`Mouse Code`**
+
+[MouseCode](../enums/MouseCode.md)
+
+#### Inherited from
+
+[CEvent](CEvent.md).[mouseCode](CEvent.md#mousecode)
+
+#### Defined in
+
+[src/event/CEvent.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L52)
+
+___
+
+### ctrlKey
+
+• **ctrlKey**: `boolean`
+
+Is Ctrl key pressed when the event occurs
+
+#### Inherited from
+
+[CEvent](CEvent.md).[ctrlKey](CEvent.md#ctrlkey)
+
+#### Defined in
+
+[src/event/CEvent.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L57)
+
+___
+
+### metaKey
+
+• **metaKey**: `boolean`
+
+Is Meta key pressed when the event occurs
+
+#### Inherited from
+
+[CEvent](CEvent.md).[metaKey](CEvent.md#metakey)
+
+#### Defined in
+
+[src/event/CEvent.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L62)
+
+___
+
+### altKey
+
+• **altKey**: `boolean`
+
+Is Alt key pressed when the event occurs
+
+#### Inherited from
+
+[CEvent](CEvent.md).[altKey](CEvent.md#altkey)
+
+#### Defined in
+
+[src/event/CEvent.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L67)
+
+___
+
+### shiftKey
+
+• **shiftKey**: `boolean`
+
+Is Shift key pressed when the event occurs
+
+#### Inherited from
+
+[CEvent](CEvent.md).[shiftKey](CEvent.md#shiftkey)
+
+#### Defined in
+
+[src/event/CEvent.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L72)
+
+___
+
+### targetTouches
+
+• **targetTouches**: `TouchData`[]
+
+Collection of finger touch points, which registered
+
+#### Inherited from
+
+[CEvent](CEvent.md).[targetTouches](CEvent.md#targettouches)
+
+#### Defined in
+
+[src/event/CEvent.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L77)
+
+___
+
+### changedTouches
+
+• **changedTouches**: `TouchData`[]
+
+Collection of finger touch points changed
+
+#### Inherited from
+
+[CEvent](CEvent.md).[changedTouches](CEvent.md#changedtouches)
+
+#### Defined in
+
+[src/event/CEvent.ts:82](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L82)
+
+___
+
+### touches
+
+• **touches**: `TouchData`[]
+
+Collection of finger touch points
+
+#### Inherited from
+
+[CEvent](CEvent.md).[touches](CEvent.md#touches)
+
+#### Defined in
+
+[src/event/CEvent.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L87)
+
+___
+
+### view
+
+• **view**: [`View3D`](View3D.md)
+
+binded view3D object in event.
+
+#### Inherited from
+
+[CEvent](CEvent.md).[view](CEvent.md#view)
+
+#### Defined in
+
+[src/event/CEvent.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L94)
+
+___
+
+### PICK\_OVER
+
+▪ `Static` **PICK\_OVER**: `string` = `'onPickOver'`
+
+Triggered when the touch point enters the collision
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L13)
+
+___
+
+### PICK\_OVER\_GUI
+
+▪ `Static` **PICK\_OVER\_GUI**: `string` = `'onPickOverGUI'`
+
+Triggered when the touch point enters the interactive GUI
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L18)
+
+___
+
+### PICK\_CLICK
+
+▪ `Static` **PICK\_CLICK**: `string` = `'onPickClick'`
+
+Triggered when the touch point clicked the collision
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L23)
+
+___
+
+### PICK\_CLICK\_GUI
+
+▪ `Static` **PICK\_CLICK\_GUI**: `string` = `'onPickClickGUI'`
+
+Triggered when the touch point clicked the interactive GUI
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L28)
+
+___
+
+### PICK\_OUT
+
+▪ `Static` **PICK\_OUT**: `string` = `'onPickOut'`
+
+Triggered when the touch point leave the collision
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:33](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L33)
+
+___
+
+### PICK\_OUT\_GUI
+
+▪ `Static` **PICK\_OUT\_GUI**: `string` = `'onPickOutGUI'`
+
+Triggered when the touch point leave the interactive GUI
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L38)
+
+___
+
+### PICK\_MOVE
+
+▪ `Static` **PICK\_MOVE**: `string` = `'onPickMove'`
+
+Triggered when the touch point move on the collision
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L43)
+
+___
+
+### PICK\_UP
+
+▪ `Static` **PICK\_UP**: `string` = `'onPickUp'`
+
+Triggered when the touch point release from the collision
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L48)
+
+___
+
+### PICK\_UP\_GUI
+
+▪ `Static` **PICK\_UP\_GUI**: `string` = `'onPickUpGUI'`
+
+Triggered when the touch point release from the interactive GUI
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L53)
+
+___
+
+### PICK\_DOWN
+
+▪ `Static` **PICK\_DOWN**: `string` = `'onPickDown'`
+
+Triggered when the touch point pressed the collision
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L58)
+
+___
+
+### PICK\_DOWN\_GUI
+
+▪ `Static` **PICK\_DOWN\_GUI**: `string` = `'onPickDownGUI'`
+
+Triggered when the touch point pressed the interactive GUI
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L63)
+
+___
+
+### POINTER\_RIGHT\_CLICK
+
+▪ `Static` **POINTER\_RIGHT\_CLICK**: `string` = `'onPointerRightClick'`
+
+Triggered when the right pointer clicked
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L69)
+
+___
+
+### POINTER\_MID\_UP
+
+▪ `Static` **POINTER\_MID\_UP**: `string` = `'onPointerMidUp'`
+
+Triggered when the middle pointer released
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:74](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L74)
+
+___
+
+### POINTER\_MID\_DOWN
+
+▪ `Static` **POINTER\_MID\_DOWN**: `string` = `'onPointerMidDown'`
+
+Triggered when the middle pointer pressed
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L79)
+
+___
+
+### POINTER\_CLICK
+
+▪ `Static` **POINTER\_CLICK**: `string` = `'onPointerClick'`
+
+Triggered when the pointer clicked
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L84)
+
+___
+
+### POINTER\_MOVE
+
+▪ `Static` **POINTER\_MOVE**: `string` = `'onPointerMove'`
+
+Triggered when the pointer moved
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L90)
+
+___
+
+### POINTER\_DOWN
+
+▪ `Static` **POINTER\_DOWN**: `string` = `'onPointerDown'`
+
+Triggered when the pointer pressed
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L96)
+
+___
+
+### POINTER\_UP
+
+▪ `Static` **POINTER\_UP**: `string` = `'onPointerUp'`
+
+Triggered when the pointer released
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L102)
+
+___
+
+### POINTER\_OUT
+
+▪ `Static` **POINTER\_OUT**: `string` = `'onPointerOut'`
+
+Triggered when the pointer move out
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:108](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L108)
+
+___
+
+### POINTER\_OVER
+
+▪ `Static` **POINTER\_OVER**: `string` = `'onPointerOver'`
+
+Triggered when the pointer move over
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L114)
+
+___
+
+### POINTER\_WHEEL
+
+▪ `Static` **POINTER\_WHEEL**: `string` = `'onPointerWheel'`
+
+Triggered when the wheel pointer is used
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L120)
+
+___
+
+### pointerId
+
+• **pointerId**: `number`
+
+A unique identifier for an event caused by a pointer.
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:125](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L125)
+
+___
+
+### pointerType
+
+• **pointerType**: `string`
+
+event type
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:130](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L130)
+
+___
+
+### isPrimary
+
+• **isPrimary**: `boolean`
+
+whether it's the preferred pointer in this type of pointer.
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L135)
+
+___
+
+### pressure
+
+• **pressure**: `number`
+
+Normalize values
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L140)
+
+___
+
+### mouseX
+
+• **mouseX**: `number`
+
+coord x of mouse
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L145)
+
+___
+
+### mouseY
+
+• **mouseY**: `number`
+
+coord y of mouse
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:150](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L150)
+
+___
+
+### movementX
+
+• **movementX**: `number`
+
+delta of coord x of mouse
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L155)
+
+___
+
+### movementY
+
+• **movementY**: `number`
+
+delta of coord y of mouse
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L160)
+
+___
+
+### deltaX
+
+• **deltaX**: `number`
+
+Returns a negative value when scrolling left,
+a positive value when scrolling right, otherwise 0.
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:166](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L166)
+
+___
+
+### deltaY
+
+• **deltaY**: `number`
+
+Returns a positive value when scrolling down,
+ a negative value when scrolling up, otherwise 0.
+
+#### Defined in
+
+[src/event/eventConst/PointerEvent3D.ts:172](https://github.com/Orillusion/orillusion/blob/main/src/event/eventConst/PointerEvent3D.ts#L172)
+
+## Accessors
+
+### isStopImmediatePropagation
+
+• `get` **isStopImmediatePropagation**(): `boolean`
+
+Returns stopImmediatePropagation value
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+CEvent.isStopImmediatePropagation
+
+#### Defined in
+
+[src/event/CEvent.ts:125](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L125)
+
+## Methods
+
+### stopImmediatePropagation
+
+▸ **stopImmediatePropagation**(): `void`
+
+Prevent bubbling of all event listeners in subsequent nodes of the current node in the event flow.
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[CEvent](CEvent.md).[stopImmediatePropagation](CEvent.md#stopimmediatepropagation)
+
+#### Defined in
+
+[src/event/CEvent.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/event/CEvent.ts#L110)
diff --git a/docs/api/classes/PoolNode.md b/docs/api/classes/PoolNode.md
new file mode 100644
index 00000000..bb743b26
--- /dev/null
+++ b/docs/api/classes/PoolNode.md
@@ -0,0 +1,107 @@
+# Class: PoolNode\
+
+## Type parameters
+
+| Name |
+| :------ |
+| `T` |
+
+### Constructors
+
+- [constructor](PoolNode.md#constructor)
+
+### Methods
+
+- [pushBack](PoolNode.md#pushback)
+- [getUseList](PoolNode.md#getuselist)
+- [getOne](PoolNode.md#getone)
+- [hasFree](PoolNode.md#hasfree)
+
+## Constructors
+
+### constructor
+
+• **new PoolNode**\<`T`\>(): [`PoolNode`](PoolNode.md)\<`T`\>
+
+#### Type parameters
+
+| Name |
+| :------ |
+| `T` |
+
+#### Returns
+
+[`PoolNode`](PoolNode.md)\<`T`\>
+
+#### Defined in
+
+[src/core/pool/ObjectPool.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/core/pool/ObjectPool.ts#L6)
+
+## Methods
+
+### pushBack
+
+▸ **pushBack**(`node`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `node` | `T` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/pool/ObjectPool.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/core/pool/ObjectPool.ts#L11)
+
+___
+
+### getUseList
+
+▸ **getUseList**(): `T`[]
+
+#### Returns
+
+`T`[]
+
+#### Defined in
+
+[src/core/pool/ObjectPool.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/core/pool/ObjectPool.ts#L19)
+
+___
+
+### getOne
+
+▸ **getOne**(`instance`, `param?`): `T`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `instance` | (`arg?`: `any`) => `T` |
+| `param?` | `any` |
+
+#### Returns
+
+`T`
+
+#### Defined in
+
+[src/core/pool/ObjectPool.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/core/pool/ObjectPool.ts#L23)
+
+___
+
+### hasFree
+
+▸ **hasFree**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/pool/ObjectPool.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/core/pool/ObjectPool.ts#L38)
diff --git a/docs/api/classes/PostProcessingComponent.md b/docs/api/classes/PostProcessingComponent.md
new file mode 100644
index 00000000..8bbafdab
--- /dev/null
+++ b/docs/api/classes/PostProcessingComponent.md
@@ -0,0 +1,681 @@
+# Class: PostProcessingComponent
+
+Components are used to attach functionality to object3D, it has an owner object3D.
+The component can receive update events at each frame.
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`PostProcessingComponent`**
+
+### Constructors
+
+- [constructor](PostProcessingComponent.md#constructor)
+
+### Properties
+
+- [object3D](PostProcessingComponent.md#object3d)
+- [isDestroyed](PostProcessingComponent.md#isdestroyed)
+
+### Accessors
+
+- [eventDispatcher](PostProcessingComponent.md#eventdispatcher)
+- [isStart](PostProcessingComponent.md#isstart)
+- [transform](PostProcessingComponent.md#transform)
+- [enable](PostProcessingComponent.md#enable)
+
+### Methods
+
+- [onUpdate](PostProcessingComponent.md#onupdate)
+- [onLateUpdate](PostProcessingComponent.md#onlateupdate)
+- [onBeforeUpdate](PostProcessingComponent.md#onbeforeupdate)
+- [onCompute](PostProcessingComponent.md#oncompute)
+- [onGraphic](PostProcessingComponent.md#ongraphic)
+- [onParentChange](PostProcessingComponent.md#onparentchange)
+- [onAddChild](PostProcessingComponent.md#onaddchild)
+- [onRemoveChild](PostProcessingComponent.md#onremovechild)
+- [cloneTo](PostProcessingComponent.md#cloneto)
+- [copyComponent](PostProcessingComponent.md#copycomponent)
+- [beforeDestroy](PostProcessingComponent.md#beforedestroy)
+- [destroy](PostProcessingComponent.md#destroy)
+- [init](PostProcessingComponent.md#init)
+- [start](PostProcessingComponent.md#start)
+- [stop](PostProcessingComponent.md#stop)
+- [onEnable](PostProcessingComponent.md#onenable)
+- [onDisable](PostProcessingComponent.md#ondisable)
+- [addPost](PostProcessingComponent.md#addpost)
+- [removePost](PostProcessingComponent.md#removepost)
+- [getPost](PostProcessingComponent.md#getpost)
+
+## Constructors
+
+### constructor
+
+• **new PostProcessingComponent**(): [`PostProcessingComponent`](PostProcessingComponent.md)
+
+#### Returns
+
+[`PostProcessingComponent`](PostProcessingComponent.md)
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onUpdate](ComponentBase.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[destroy](ComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[init](ComponentBase.md#init)
+
+#### Defined in
+
+[src/components/post/PostProcessingComponent.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/components/post/PostProcessingComponent.ts#L11)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[start](ComponentBase.md#start)
+
+#### Defined in
+
+[src/components/post/PostProcessingComponent.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/components/post/PostProcessingComponent.ts#L15)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/post/PostProcessingComponent.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/post/PostProcessingComponent.ts#L19)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[onEnable](ComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/post/PostProcessingComponent.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/post/PostProcessingComponent.ts#L23)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[onDisable](ComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/post/PostProcessingComponent.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/components/post/PostProcessingComponent.ts#L27)
+
+___
+
+### addPost
+
+▸ **addPost**\<`T`\>(`c`): `T`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `PostBase` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> |
+
+#### Returns
+
+`T`
+
+#### Defined in
+
+[src/components/post/PostProcessingComponent.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/post/PostProcessingComponent.ts#L47)
+
+___
+
+### removePost
+
+▸ **removePost**\<`T`\>(`c`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `PostBase` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/post/PostProcessingComponent.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/post/PostProcessingComponent.ts#L56)
+
+___
+
+### getPost
+
+▸ **getPost**\<`T`\>(`c`): `T`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `PostBase` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> |
+
+#### Returns
+
+`T`
+
+#### Defined in
+
+[src/components/post/PostProcessingComponent.ts:66](https://github.com/Orillusion/orillusion/blob/main/src/components/post/PostProcessingComponent.ts#L66)
diff --git a/docs/api/classes/PrefabAvatarData.md b/docs/api/classes/PrefabAvatarData.md
new file mode 100644
index 00000000..4aa4bfbc
--- /dev/null
+++ b/docs/api/classes/PrefabAvatarData.md
@@ -0,0 +1,86 @@
+# Class: PrefabAvatarData
+
+### Constructors
+
+- [constructor](PrefabAvatarData.md#constructor)
+
+### Properties
+
+- [name](PrefabAvatarData.md#name)
+- [count](PrefabAvatarData.md#count)
+- [boneData](PrefabAvatarData.md#bonedata)
+- [boneMap](PrefabAvatarData.md#bonemap)
+
+### Methods
+
+- [formBytes](PrefabAvatarData.md#formbytes)
+
+## Constructors
+
+### constructor
+
+• **new PrefabAvatarData**(): [`PrefabAvatarData`](PrefabAvatarData.md)
+
+#### Returns
+
+[`PrefabAvatarData`](PrefabAvatarData.md)
+
+## Properties
+
+### name
+
+• **name**: `string`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabAvatarData.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabAvatarData.ts#L5)
+
+___
+
+### count
+
+• **count**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabAvatarData.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabAvatarData.ts#L6)
+
+___
+
+### boneData
+
+• **boneData**: [`PrefabBoneData`](PrefabBoneData.md)[]
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabAvatarData.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabAvatarData.ts#L7)
+
+___
+
+### boneMap
+
+• **boneMap**: `Map`\<`string`, [`PrefabBoneData`](PrefabBoneData.md)\>
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabAvatarData.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabAvatarData.ts#L8)
+
+## Methods
+
+### formBytes
+
+▸ **formBytes**(`bytes`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bytes` | `BytesArray` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabAvatarData.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabAvatarData.ts#L9)
diff --git a/docs/api/classes/PrefabAvatarParser.md b/docs/api/classes/PrefabAvatarParser.md
new file mode 100644
index 00000000..50d90d4f
--- /dev/null
+++ b/docs/api/classes/PrefabAvatarParser.md
@@ -0,0 +1,289 @@
+# Class: PrefabAvatarParser
+
+## Hierarchy
+
+- `ParserBase`
+
+ ↳ **`PrefabAvatarParser`**
+
+### Constructors
+
+- [constructor](PrefabAvatarParser.md#constructor)
+
+### Properties
+
+- [format](PrefabAvatarParser.md#format)
+- [baseUrl](PrefabAvatarParser.md#baseurl)
+- [initUrl](PrefabAvatarParser.md#initurl)
+- [loaderFunctions](PrefabAvatarParser.md#loaderfunctions)
+- [userData](PrefabAvatarParser.md#userdata)
+- [data](PrefabAvatarParser.md#data)
+
+### Methods
+
+- [parser](PrefabAvatarParser.md#parser)
+- [parseString](PrefabAvatarParser.md#parsestring)
+- [parseJson](PrefabAvatarParser.md#parsejson)
+- [parseBuffer](PrefabAvatarParser.md#parsebuffer)
+- [parseTexture](PrefabAvatarParser.md#parsetexture)
+- [parse](PrefabAvatarParser.md#parse)
+- [verification](PrefabAvatarParser.md#verification)
+
+## Constructors
+
+### constructor
+
+• **new PrefabAvatarParser**(): [`PrefabAvatarParser`](PrefabAvatarParser.md)
+
+#### Returns
+
+[`PrefabAvatarParser`](PrefabAvatarParser.md)
+
+#### Inherited from
+
+ParserBase.constructor
+
+## Properties
+
+### format
+
+▪ `Static` **format**: [`ParserFormat`](../enums/ParserFormat.md) = `ParserFormat.BIN`
+
+#### Overrides
+
+ParserBase.format
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabAvatarParser.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabAvatarParser.ts#L13)
+
+___
+
+### baseUrl
+
+• **baseUrl**: `string`
+
+#### Inherited from
+
+ParserBase.baseUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L11)
+
+___
+
+### initUrl
+
+• **initUrl**: `string`
+
+#### Inherited from
+
+ParserBase.initUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L12)
+
+___
+
+### loaderFunctions
+
+• `Optional` **loaderFunctions**: [`LoaderFunctions`](../types/LoaderFunctions.md)
+
+#### Inherited from
+
+ParserBase.loaderFunctions
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L13)
+
+___
+
+### userData
+
+• `Optional` **userData**: `any`
+
+#### Inherited from
+
+ParserBase.userData
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L14)
+
+___
+
+### data
+
+• **data**: `any`
+
+#### Inherited from
+
+ParserBase.data
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L15)
+
+## Methods
+
+### parser
+
+▸ **parser**(`bytesStream`, `prefabParser`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bytesStream` | `BytesArray` |
+| `prefabParser` | [`PrefabParser`](PrefabParser.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabAvatarParser.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabAvatarParser.ts#L14)
+
+___
+
+### parseString
+
+▸ **parseString**(`str`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseString
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L17)
+
+___
+
+### parseJson
+
+▸ **parseJson**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `object` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseJson
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L19)
+
+___
+
+### parseBuffer
+
+▸ **parseBuffer**(`buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseBuffer
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L21)
+
+___
+
+### parseTexture
+
+▸ **parseTexture**(`buffer`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+ParserBase.parseTexture
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L23)
+
+___
+
+### parse
+
+▸ **parse**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parse
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L27)
+
+___
+
+### verification
+
+▸ **verification**(): `boolean`
+
+Verify parsing validity
+
+#### Returns
+
+`boolean`
+
+#### Overrides
+
+ParserBase.verification
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabAvatarParser.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabAvatarParser.ts#L28)
diff --git a/docs/api/classes/PrefabBoneData.md b/docs/api/classes/PrefabBoneData.md
new file mode 100644
index 00000000..0eacf255
--- /dev/null
+++ b/docs/api/classes/PrefabBoneData.md
@@ -0,0 +1,152 @@
+# Class: PrefabBoneData
+
+### Constructors
+
+- [constructor](PrefabBoneData.md#constructor)
+
+### Properties
+
+- [boneName](PrefabBoneData.md#bonename)
+- [bonePath](PrefabBoneData.md#bonepath)
+- [parentBoneName](PrefabBoneData.md#parentbonename)
+- [boneID](PrefabBoneData.md#boneid)
+- [parentBoneID](PrefabBoneData.md#parentboneid)
+- [instanceID](PrefabBoneData.md#instanceid)
+- [parentInstanceID](PrefabBoneData.md#parentinstanceid)
+- [t](PrefabBoneData.md#t)
+- [q](PrefabBoneData.md#q)
+- [s](PrefabBoneData.md#s)
+
+### Methods
+
+- [formBytes](PrefabBoneData.md#formbytes)
+
+## Constructors
+
+### constructor
+
+• **new PrefabBoneData**(): [`PrefabBoneData`](PrefabBoneData.md)
+
+#### Returns
+
+[`PrefabBoneData`](PrefabBoneData.md)
+
+## Properties
+
+### boneName
+
+• **boneName**: `string`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabBoneData.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabBoneData.ts#L6)
+
+___
+
+### bonePath
+
+• **bonePath**: `string`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabBoneData.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabBoneData.ts#L7)
+
+___
+
+### parentBoneName
+
+• **parentBoneName**: `string`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabBoneData.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabBoneData.ts#L8)
+
+___
+
+### boneID
+
+• **boneID**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabBoneData.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabBoneData.ts#L9)
+
+___
+
+### parentBoneID
+
+• **parentBoneID**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabBoneData.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabBoneData.ts#L10)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabBoneData.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabBoneData.ts#L11)
+
+___
+
+### parentInstanceID
+
+• **parentInstanceID**: `string`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabBoneData.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabBoneData.ts#L12)
+
+___
+
+### t
+
+• **t**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabBoneData.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabBoneData.ts#L13)
+
+___
+
+### q
+
+• **q**: [`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabBoneData.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabBoneData.ts#L14)
+
+___
+
+### s
+
+• **s**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabBoneData.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabBoneData.ts#L15)
+
+## Methods
+
+### formBytes
+
+▸ **formBytes**(`bytes`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bytes` | `BytesArray` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabBoneData.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabBoneData.ts#L17)
diff --git a/docs/api/classes/PrefabMaterialParser.md b/docs/api/classes/PrefabMaterialParser.md
new file mode 100644
index 00000000..c5a40317
--- /dev/null
+++ b/docs/api/classes/PrefabMaterialParser.md
@@ -0,0 +1,289 @@
+# Class: PrefabMaterialParser
+
+## Hierarchy
+
+- `ParserBase`
+
+ ↳ **`PrefabMaterialParser`**
+
+### Constructors
+
+- [constructor](PrefabMaterialParser.md#constructor)
+
+### Properties
+
+- [format](PrefabMaterialParser.md#format)
+- [baseUrl](PrefabMaterialParser.md#baseurl)
+- [initUrl](PrefabMaterialParser.md#initurl)
+- [loaderFunctions](PrefabMaterialParser.md#loaderfunctions)
+- [userData](PrefabMaterialParser.md#userdata)
+- [data](PrefabMaterialParser.md#data)
+
+### Methods
+
+- [parserMaterial](PrefabMaterialParser.md#parsermaterial)
+- [parseString](PrefabMaterialParser.md#parsestring)
+- [parseJson](PrefabMaterialParser.md#parsejson)
+- [parseBuffer](PrefabMaterialParser.md#parsebuffer)
+- [parseTexture](PrefabMaterialParser.md#parsetexture)
+- [parse](PrefabMaterialParser.md#parse)
+- [verification](PrefabMaterialParser.md#verification)
+
+## Constructors
+
+### constructor
+
+• **new PrefabMaterialParser**(): [`PrefabMaterialParser`](PrefabMaterialParser.md)
+
+#### Returns
+
+[`PrefabMaterialParser`](PrefabMaterialParser.md)
+
+#### Inherited from
+
+ParserBase.constructor
+
+## Properties
+
+### format
+
+▪ `Static` **format**: [`ParserFormat`](../enums/ParserFormat.md) = `ParserFormat.TEXT`
+
+#### Overrides
+
+ParserBase.format
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabMaterialParser.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabMaterialParser.ts#L15)
+
+___
+
+### baseUrl
+
+• **baseUrl**: `string`
+
+#### Inherited from
+
+ParserBase.baseUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L11)
+
+___
+
+### initUrl
+
+• **initUrl**: `string`
+
+#### Inherited from
+
+ParserBase.initUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L12)
+
+___
+
+### loaderFunctions
+
+• `Optional` **loaderFunctions**: [`LoaderFunctions`](../types/LoaderFunctions.md)
+
+#### Inherited from
+
+ParserBase.loaderFunctions
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L13)
+
+___
+
+### userData
+
+• `Optional` **userData**: `any`
+
+#### Inherited from
+
+ParserBase.userData
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L14)
+
+___
+
+### data
+
+• **data**: `any`
+
+#### Inherited from
+
+ParserBase.data
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L15)
+
+## Methods
+
+### parserMaterial
+
+▸ **parserMaterial**(`bytesStream`, `prefabParser`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bytesStream` | `BytesArray` |
+| `prefabParser` | [`PrefabParser`](PrefabParser.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabMaterialParser.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabMaterialParser.ts#L17)
+
+___
+
+### parseString
+
+▸ **parseString**(`str`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseString
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L17)
+
+___
+
+### parseJson
+
+▸ **parseJson**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `object` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseJson
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L19)
+
+___
+
+### parseBuffer
+
+▸ **parseBuffer**(`buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseBuffer
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L21)
+
+___
+
+### parseTexture
+
+▸ **parseTexture**(`buffer`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+ParserBase.parseTexture
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L23)
+
+___
+
+### parse
+
+▸ **parse**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parse
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L27)
+
+___
+
+### verification
+
+▸ **verification**(): `boolean`
+
+Verify parsing validity
+
+#### Returns
+
+`boolean`
+
+#### Overrides
+
+ParserBase.verification
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabMaterialParser.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabMaterialParser.ts#L93)
diff --git a/docs/api/classes/PrefabMeshData.md b/docs/api/classes/PrefabMeshData.md
new file mode 100644
index 00000000..d5b2bfd7
--- /dev/null
+++ b/docs/api/classes/PrefabMeshData.md
@@ -0,0 +1,139 @@
+# Class: PrefabMeshData
+
+### Constructors
+
+- [constructor](PrefabMeshData.md#constructor)
+
+### Properties
+
+- [name](PrefabMeshData.md#name)
+- [meshName](PrefabMeshData.md#meshname)
+- [meshID](PrefabMeshData.md#meshid)
+- [vertexCount](PrefabMeshData.md#vertexcount)
+- [vertexStrip](PrefabMeshData.md#vertexstrip)
+- [vertexBuffer](PrefabMeshData.md#vertexbuffer)
+- [indices](PrefabMeshData.md#indices)
+- [attributes](PrefabMeshData.md#attributes)
+- [bones](PrefabMeshData.md#bones)
+- [bindPose](PrefabMeshData.md#bindpose)
+- [blendShapeData](PrefabMeshData.md#blendshapedata)
+
+## Constructors
+
+### constructor
+
+• **new PrefabMeshData**(): [`PrefabMeshData`](PrefabMeshData.md)
+
+#### Returns
+
+[`PrefabMeshData`](PrefabMeshData.md)
+
+## Properties
+
+### name
+
+• **name**: `string`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabMeshData.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabMeshData.ts#L5)
+
+___
+
+### meshName
+
+• **meshName**: `string`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabMeshData.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabMeshData.ts#L6)
+
+___
+
+### meshID
+
+• **meshID**: `string`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabMeshData.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabMeshData.ts#L7)
+
+___
+
+### vertexCount
+
+• **vertexCount**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabMeshData.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabMeshData.ts#L8)
+
+___
+
+### vertexStrip
+
+• **vertexStrip**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabMeshData.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabMeshData.ts#L9)
+
+___
+
+### vertexBuffer
+
+• **vertexBuffer**: `Float32Array`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabMeshData.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabMeshData.ts#L10)
+
+___
+
+### indices
+
+• **indices**: `Uint16Array` \| `Uint32Array`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabMeshData.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabMeshData.ts#L11)
+
+___
+
+### attributes
+
+• **attributes**: \{ `attribute`: `string` ; `dim`: `number` ; `pos`: `number` }[]
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabMeshData.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabMeshData.ts#L13)
+
+___
+
+### bones
+
+• **bones**: `string`[]
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabMeshData.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabMeshData.ts#L15)
+
+___
+
+### bindPose
+
+• **bindPose**: [`Matrix4`](Matrix4.md)[]
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabMeshData.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabMeshData.ts#L16)
+
+___
+
+### blendShapeData
+
+• **blendShapeData**: [`BlendShapeData`](BlendShapeData.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabMeshData.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabMeshData.ts#L17)
diff --git a/docs/api/classes/PrefabMeshParser.md b/docs/api/classes/PrefabMeshParser.md
new file mode 100644
index 00000000..35b37400
--- /dev/null
+++ b/docs/api/classes/PrefabMeshParser.md
@@ -0,0 +1,289 @@
+# Class: PrefabMeshParser
+
+## Hierarchy
+
+- `ParserBase`
+
+ ↳ **`PrefabMeshParser`**
+
+### Constructors
+
+- [constructor](PrefabMeshParser.md#constructor)
+
+### Properties
+
+- [format](PrefabMeshParser.md#format)
+- [baseUrl](PrefabMeshParser.md#baseurl)
+- [initUrl](PrefabMeshParser.md#initurl)
+- [loaderFunctions](PrefabMeshParser.md#loaderfunctions)
+- [userData](PrefabMeshParser.md#userdata)
+- [data](PrefabMeshParser.md#data)
+
+### Methods
+
+- [parserMeshs](PrefabMeshParser.md#parsermeshs)
+- [parseString](PrefabMeshParser.md#parsestring)
+- [parseJson](PrefabMeshParser.md#parsejson)
+- [parseTexture](PrefabMeshParser.md#parsetexture)
+- [parse](PrefabMeshParser.md#parse)
+- [parseBuffer](PrefabMeshParser.md#parsebuffer)
+- [verification](PrefabMeshParser.md#verification)
+
+## Constructors
+
+### constructor
+
+• **new PrefabMeshParser**(): [`PrefabMeshParser`](PrefabMeshParser.md)
+
+#### Returns
+
+[`PrefabMeshParser`](PrefabMeshParser.md)
+
+#### Inherited from
+
+ParserBase.constructor
+
+## Properties
+
+### format
+
+▪ `Static` **format**: [`ParserFormat`](../enums/ParserFormat.md) = `ParserFormat.BIN`
+
+#### Overrides
+
+ParserBase.format
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabMeshParser.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabMeshParser.ts#L14)
+
+___
+
+### baseUrl
+
+• **baseUrl**: `string`
+
+#### Inherited from
+
+ParserBase.baseUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L11)
+
+___
+
+### initUrl
+
+• **initUrl**: `string`
+
+#### Inherited from
+
+ParserBase.initUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L12)
+
+___
+
+### loaderFunctions
+
+• `Optional` **loaderFunctions**: [`LoaderFunctions`](../types/LoaderFunctions.md)
+
+#### Inherited from
+
+ParserBase.loaderFunctions
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L13)
+
+___
+
+### userData
+
+• `Optional` **userData**: `any`
+
+#### Inherited from
+
+ParserBase.userData
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L14)
+
+___
+
+### data
+
+• **data**: `any`
+
+#### Inherited from
+
+ParserBase.data
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L15)
+
+## Methods
+
+### parserMeshs
+
+▸ **parserMeshs**(`bytesStream`, `prefabParser`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bytesStream` | `BytesArray` |
+| `prefabParser` | [`PrefabParser`](PrefabParser.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabMeshParser.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabMeshParser.ts#L19)
+
+___
+
+### parseString
+
+▸ **parseString**(`str`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseString
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L17)
+
+___
+
+### parseJson
+
+▸ **parseJson**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `object` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseJson
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L19)
+
+___
+
+### parseTexture
+
+▸ **parseTexture**(`buffer`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+ParserBase.parseTexture
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L23)
+
+___
+
+### parse
+
+▸ **parse**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parse
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L27)
+
+___
+
+### parseBuffer
+
+▸ **parseBuffer**(`buffer`): `Promise`\<`void`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Overrides
+
+ParserBase.parseBuffer
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabMeshParser.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabMeshParser.ts#L16)
+
+___
+
+### verification
+
+▸ **verification**(): `boolean`
+
+Verify parsing validity
+
+#### Returns
+
+`boolean`
+
+#### Overrides
+
+ParserBase.verification
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabMeshParser.ts:154](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabMeshParser.ts#L154)
diff --git a/docs/api/classes/PrefabNode.md b/docs/api/classes/PrefabNode.md
new file mode 100644
index 00000000..da37657a
--- /dev/null
+++ b/docs/api/classes/PrefabNode.md
@@ -0,0 +1,119 @@
+# Class: PrefabNode
+
+### Constructors
+
+- [constructor](PrefabNode.md#constructor)
+
+### Properties
+
+- [name](PrefabNode.md#name)
+- [parentName](PrefabNode.md#parentname)
+- [position](PrefabNode.md#position)
+- [rotation](PrefabNode.md#rotation)
+- [scale](PrefabNode.md#scale)
+- [comDatas](PrefabNode.md#comdatas)
+- [child](PrefabNode.md#child)
+
+### Methods
+
+- [parser](PrefabNode.md#parser)
+
+## Constructors
+
+### constructor
+
+• **new PrefabNode**(): [`PrefabNode`](PrefabNode.md)
+
+#### Returns
+
+[`PrefabNode`](PrefabNode.md)
+
+## Properties
+
+### name
+
+• **name**: `string`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabNode.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabNode.ts#L28)
+
+___
+
+### parentName
+
+• **parentName**: `string`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabNode.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabNode.ts#L30)
+
+___
+
+### position
+
+• **position**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabNode.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabNode.ts#L32)
+
+___
+
+### rotation
+
+• **rotation**: [`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabNode.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabNode.ts#L34)
+
+___
+
+### scale
+
+• **scale**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabNode.ts#L36)
+
+___
+
+### comDatas
+
+• **comDatas**: [`ComData`](ComData.md)[]
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabNode.ts#L38)
+
+___
+
+### child
+
+• **child**: [`PrefabNode`](PrefabNode.md)[]
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabNode.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabNode.ts#L40)
+
+## Methods
+
+### parser
+
+▸ **parser**(`bytesArray`): [`PrefabNode`](PrefabNode.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bytesArray` | `BytesArray` |
+
+#### Returns
+
+[`PrefabNode`](PrefabNode.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabNode.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabNode.ts#L42)
diff --git a/docs/api/classes/PrefabParser.md b/docs/api/classes/PrefabParser.md
new file mode 100644
index 00000000..9d6f3e9f
--- /dev/null
+++ b/docs/api/classes/PrefabParser.md
@@ -0,0 +1,304 @@
+# Class: PrefabParser
+
+## Hierarchy
+
+- `ParserBase`
+
+ ↳ **`PrefabParser`**
+
+### Constructors
+
+- [constructor](PrefabParser.md#constructor)
+
+### Properties
+
+- [baseUrl](PrefabParser.md#baseurl)
+- [initUrl](PrefabParser.md#initurl)
+- [useWebp](PrefabParser.md#usewebp)
+- [format](PrefabParser.md#format)
+- [loaderFunctions](PrefabParser.md#loaderfunctions)
+- [userData](PrefabParser.md#userdata)
+- [data](PrefabParser.md#data)
+- [avatarDic](PrefabParser.md#avatardic)
+- [nodeData](PrefabParser.md#nodedata)
+
+### Methods
+
+- [parseString](PrefabParser.md#parsestring)
+- [parseJson](PrefabParser.md#parsejson)
+- [parseTexture](PrefabParser.md#parsetexture)
+- [parse](PrefabParser.md#parse)
+- [parseBuffer](PrefabParser.md#parsebuffer)
+- [verification](PrefabParser.md#verification)
+
+## Constructors
+
+### constructor
+
+• **new PrefabParser**(): [`PrefabParser`](PrefabParser.md)
+
+#### Returns
+
+[`PrefabParser`](PrefabParser.md)
+
+#### Inherited from
+
+ParserBase.constructor
+
+## Properties
+
+### baseUrl
+
+• **baseUrl**: `string`
+
+#### Inherited from
+
+ParserBase.baseUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L11)
+
+___
+
+### initUrl
+
+• **initUrl**: `string`
+
+#### Inherited from
+
+ParserBase.initUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L12)
+
+___
+
+### useWebp
+
+▪ `Static` **useWebp**: `boolean` = `true`
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabParser.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabParser.ts#L26)
+
+___
+
+### format
+
+▪ `Static` **format**: [`ParserFormat`](../enums/ParserFormat.md) = `ParserFormat.BIN`
+
+#### Overrides
+
+ParserBase.format
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabParser.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabParser.ts#L27)
+
+___
+
+### loaderFunctions
+
+• `Optional` **loaderFunctions**: [`LoaderFunctions`](../types/LoaderFunctions.md)
+
+#### Inherited from
+
+ParserBase.loaderFunctions
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L13)
+
+___
+
+### userData
+
+• `Optional` **userData**: `any`
+
+#### Inherited from
+
+ParserBase.userData
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L14)
+
+___
+
+### data
+
+• **data**: `any`
+
+#### Inherited from
+
+ParserBase.data
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L15)
+
+___
+
+### avatarDic
+
+• **avatarDic**: `Object`
+
+#### Index signature
+
+▪ [name: `string`]: [`PrefabAvatarData`](PrefabAvatarData.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabParser.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabParser.ts#L28)
+
+___
+
+### nodeData
+
+• **nodeData**: [`PrefabNode`](PrefabNode.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabParser.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabParser.ts#L29)
+
+## Methods
+
+### parseString
+
+▸ **parseString**(`str`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseString
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L17)
+
+___
+
+### parseJson
+
+▸ **parseJson**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `object` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseJson
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L19)
+
+___
+
+### parseTexture
+
+▸ **parseTexture**(`buffer`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+ParserBase.parseTexture
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L23)
+
+___
+
+### parse
+
+▸ **parse**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parse
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L27)
+
+___
+
+### parseBuffer
+
+▸ **parseBuffer**(`buffer`): `Promise`\<`void`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Overrides
+
+ParserBase.parseBuffer
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabParser.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabParser.ts#L30)
+
+___
+
+### verification
+
+▸ **verification**(): `boolean`
+
+Verify parsing validity
+
+#### Returns
+
+`boolean`
+
+#### Overrides
+
+ParserBase.verification
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabParser.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabParser.ts#L92)
diff --git a/docs/api/classes/PrefabStringUtil.md b/docs/api/classes/PrefabStringUtil.md
new file mode 100644
index 00000000..f6e2feff
--- /dev/null
+++ b/docs/api/classes/PrefabStringUtil.md
@@ -0,0 +1,228 @@
+# Class: PrefabStringUtil
+
+### Constructors
+
+- [constructor](PrefabStringUtil.md#constructor)
+
+### Methods
+
+- [getNumber](PrefabStringUtil.md#getnumber)
+- [getInt](PrefabStringUtil.md#getint)
+- [getBoolean](PrefabStringUtil.md#getboolean)
+- [getNumberArray](PrefabStringUtil.md#getnumberarray)
+- [getStringArray](PrefabStringUtil.md#getstringarray)
+- [getVector2](PrefabStringUtil.md#getvector2)
+- [getVector3](PrefabStringUtil.md#getvector3)
+- [getVector4](PrefabStringUtil.md#getvector4)
+- [getQuaternion](PrefabStringUtil.md#getquaternion)
+- [getColor](PrefabStringUtil.md#getcolor)
+
+## Constructors
+
+### constructor
+
+• **new PrefabStringUtil**(): [`PrefabStringUtil`](PrefabStringUtil.md)
+
+#### Returns
+
+[`PrefabStringUtil`](PrefabStringUtil.md)
+
+## Methods
+
+### getNumber
+
+▸ **getNumber**(`st`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `st` | `string` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabStringUtil.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabStringUtil.ts#L5)
+
+___
+
+### getInt
+
+▸ **getInt**(`st`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `st` | `string` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabStringUtil.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabStringUtil.ts#L10)
+
+___
+
+### getBoolean
+
+▸ **getBoolean**(`st`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `st` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabStringUtil.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabStringUtil.ts#L15)
+
+___
+
+### getNumberArray
+
+▸ **getNumberArray**(`st`): `string`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `st` | `string` |
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabStringUtil.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabStringUtil.ts#L20)
+
+___
+
+### getStringArray
+
+▸ **getStringArray**(`st`): `string`[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `st` | `string` |
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabStringUtil.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabStringUtil.ts#L32)
+
+___
+
+### getVector2
+
+▸ **getVector2**(`st`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `st` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabStringUtil.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabStringUtil.ts#L44)
+
+___
+
+### getVector3
+
+▸ **getVector3**(`st`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `st` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabStringUtil.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabStringUtil.ts#L48)
+
+___
+
+### getVector4
+
+▸ **getVector4**(`st`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `st` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabStringUtil.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabStringUtil.ts#L52)
+
+___
+
+### getQuaternion
+
+▸ **getQuaternion**(`st`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `st` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabStringUtil.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabStringUtil.ts#L56)
+
+___
+
+### getColor
+
+▸ **getColor**(`st`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `st` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabStringUtil.ts:60](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabStringUtil.ts#L60)
diff --git a/docs/api/classes/PrefabTextureData.md b/docs/api/classes/PrefabTextureData.md
new file mode 100644
index 00000000..d4a17c86
--- /dev/null
+++ b/docs/api/classes/PrefabTextureData.md
@@ -0,0 +1,139 @@
+# Class: PrefabTextureData
+
+### Constructors
+
+- [constructor](PrefabTextureData.md#constructor)
+
+### Properties
+
+- [property](PrefabTextureData.md#property)
+- [name](PrefabTextureData.md#name)
+- [texture](PrefabTextureData.md#texture)
+- [texelSize](PrefabTextureData.md#texelsize)
+- [wrapModeU](PrefabTextureData.md#wrapmodeu)
+- [wrapModeV](PrefabTextureData.md#wrapmodev)
+- [wrapModeW](PrefabTextureData.md#wrapmodew)
+- [wrapMode](PrefabTextureData.md#wrapmode)
+- [anisoLevel](PrefabTextureData.md#anisolevel)
+- [dimension](PrefabTextureData.md#dimension)
+- [filterMode](PrefabTextureData.md#filtermode)
+
+## Constructors
+
+### constructor
+
+• **new PrefabTextureData**(): [`PrefabTextureData`](PrefabTextureData.md)
+
+#### Returns
+
+[`PrefabTextureData`](PrefabTextureData.md)
+
+## Properties
+
+### property
+
+• **property**: `string`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabTextureData.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabTextureData.ts#L5)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabTextureData.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabTextureData.ts#L6)
+
+___
+
+### texture
+
+• **texture**: [`BitmapTexture2D`](BitmapTexture2D.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabTextureData.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabTextureData.ts#L7)
+
+___
+
+### texelSize
+
+• **texelSize**: [`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabTextureData.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabTextureData.ts#L8)
+
+___
+
+### wrapModeU
+
+• **wrapModeU**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabTextureData.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabTextureData.ts#L9)
+
+___
+
+### wrapModeV
+
+• **wrapModeV**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabTextureData.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabTextureData.ts#L10)
+
+___
+
+### wrapModeW
+
+• **wrapModeW**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabTextureData.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabTextureData.ts#L11)
+
+___
+
+### wrapMode
+
+• **wrapMode**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabTextureData.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabTextureData.ts#L12)
+
+___
+
+### anisoLevel
+
+• **anisoLevel**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabTextureData.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabTextureData.ts#L13)
+
+___
+
+### dimension
+
+• **dimension**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabTextureData.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabTextureData.ts#L14)
+
+___
+
+### filterMode
+
+• **filterMode**: `number`
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/PrefabTextureData.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/PrefabTextureData.ts#L15)
diff --git a/docs/api/classes/PrefabTextureParser.md b/docs/api/classes/PrefabTextureParser.md
new file mode 100644
index 00000000..6ee665dc
--- /dev/null
+++ b/docs/api/classes/PrefabTextureParser.md
@@ -0,0 +1,290 @@
+# Class: PrefabTextureParser
+
+## Hierarchy
+
+- `ParserBase`
+
+ ↳ **`PrefabTextureParser`**
+
+### Constructors
+
+- [constructor](PrefabTextureParser.md#constructor)
+
+### Properties
+
+- [format](PrefabTextureParser.md#format)
+- [baseUrl](PrefabTextureParser.md#baseurl)
+- [initUrl](PrefabTextureParser.md#initurl)
+- [loaderFunctions](PrefabTextureParser.md#loaderfunctions)
+- [userData](PrefabTextureParser.md#userdata)
+- [data](PrefabTextureParser.md#data)
+
+### Methods
+
+- [parserTexture](PrefabTextureParser.md#parsertexture)
+- [parseString](PrefabTextureParser.md#parsestring)
+- [parseJson](PrefabTextureParser.md#parsejson)
+- [parseBuffer](PrefabTextureParser.md#parsebuffer)
+- [parseTexture](PrefabTextureParser.md#parsetexture)
+- [parse](PrefabTextureParser.md#parse)
+- [verification](PrefabTextureParser.md#verification)
+
+## Constructors
+
+### constructor
+
+• **new PrefabTextureParser**(): [`PrefabTextureParser`](PrefabTextureParser.md)
+
+#### Returns
+
+[`PrefabTextureParser`](PrefabTextureParser.md)
+
+#### Inherited from
+
+ParserBase.constructor
+
+## Properties
+
+### format
+
+▪ `Static` **format**: [`ParserFormat`](../enums/ParserFormat.md) = `ParserFormat.TEXT`
+
+#### Overrides
+
+ParserBase.format
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabTextureParser.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabTextureParser.ts#L11)
+
+___
+
+### baseUrl
+
+• **baseUrl**: `string`
+
+#### Inherited from
+
+ParserBase.baseUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L11)
+
+___
+
+### initUrl
+
+• **initUrl**: `string`
+
+#### Inherited from
+
+ParserBase.initUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L12)
+
+___
+
+### loaderFunctions
+
+• `Optional` **loaderFunctions**: [`LoaderFunctions`](../types/LoaderFunctions.md)
+
+#### Inherited from
+
+ParserBase.loaderFunctions
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L13)
+
+___
+
+### userData
+
+• `Optional` **userData**: `any`
+
+#### Inherited from
+
+ParserBase.userData
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L14)
+
+___
+
+### data
+
+• **data**: `any`
+
+#### Inherited from
+
+ParserBase.data
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L15)
+
+## Methods
+
+### parserTexture
+
+▸ **parserTexture**(`bytesStream`, `prefabParser`, `loaderFunctions`): `Promise`\<`void`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bytesStream` | `BytesArray` |
+| `prefabParser` | [`PrefabParser`](PrefabParser.md) |
+| `loaderFunctions` | [`LoaderFunctions`](../types/LoaderFunctions.md) |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabTextureParser.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabTextureParser.ts#L13)
+
+___
+
+### parseString
+
+▸ **parseString**(`str`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseString
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L17)
+
+___
+
+### parseJson
+
+▸ **parseJson**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `object` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseJson
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L19)
+
+___
+
+### parseBuffer
+
+▸ **parseBuffer**(`buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseBuffer
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L21)
+
+___
+
+### parseTexture
+
+▸ **parseTexture**(`buffer`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+ParserBase.parseTexture
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L23)
+
+___
+
+### parse
+
+▸ **parse**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parse
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L27)
+
+___
+
+### verification
+
+▸ **verification**(): `boolean`
+
+Verify parsing validity
+
+#### Returns
+
+`boolean`
+
+#### Overrides
+
+ParserBase.verification
+
+#### Defined in
+
+[src/loader/parser/prefab/PrefabTextureParser.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/PrefabTextureParser.ts#L40)
diff --git a/docs/api/classes/ProbeGBufferFrame.md b/docs/api/classes/ProbeGBufferFrame.md
new file mode 100644
index 00000000..eef2a9d0
--- /dev/null
+++ b/docs/api/classes/ProbeGBufferFrame.md
@@ -0,0 +1,260 @@
+# Class: ProbeGBufferFrame
+
+## Hierarchy
+
+- [`RTFrame`](RTFrame.md)
+
+ ↳ **`ProbeGBufferFrame`**
+
+### Constructors
+
+- [constructor](ProbeGBufferFrame.md#constructor)
+
+### Properties
+
+- [label](ProbeGBufferFrame.md#label)
+- [customSize](ProbeGBufferFrame.md#customsize)
+- [renderTargets](ProbeGBufferFrame.md#rendertargets)
+- [rtDescriptors](ProbeGBufferFrame.md#rtdescriptors)
+- [zPreTexture](ProbeGBufferFrame.md#zpretexture)
+- [depthTexture](ProbeGBufferFrame.md#depthtexture)
+- [depthViewIndex](ProbeGBufferFrame.md#depthviewindex)
+- [depthCleanValue](ProbeGBufferFrame.md#depthcleanvalue)
+- [depthLoadOp](ProbeGBufferFrame.md#depthloadop)
+- [isOutTarget](ProbeGBufferFrame.md#isouttarget)
+
+### Methods
+
+- [crateGBuffer](ProbeGBufferFrame.md#crategbuffer)
+- [clone2Frame](ProbeGBufferFrame.md#clone2frame)
+- [clone](ProbeGBufferFrame.md#clone)
+
+## Constructors
+
+### constructor
+
+• **new ProbeGBufferFrame**(`rtWidth`, `rtHeight`, `autoResize?`): [`ProbeGBufferFrame`](ProbeGBufferFrame.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `rtWidth` | `number` | `undefined` |
+| `rtHeight` | `number` | `undefined` |
+| `autoResize` | `boolean` | `true` |
+
+#### Returns
+
+[`ProbeGBufferFrame`](ProbeGBufferFrame.md)
+
+#### Overrides
+
+[RTFrame](RTFrame.md).[constructor](RTFrame.md#constructor)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/ProbeGBufferFrame.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/ProbeGBufferFrame.ts#L8)
+
+## Properties
+
+### label
+
+• **label**: `string`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[label](RTFrame.md#label)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L5)
+
+___
+
+### customSize
+
+• **customSize**: `boolean` = `false`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[customSize](RTFrame.md#customsize)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L6)
+
+___
+
+### renderTargets
+
+• **renderTargets**: `RenderTexture`[]
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[renderTargets](RTFrame.md#rendertargets)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L7)
+
+___
+
+### rtDescriptors
+
+• **rtDescriptors**: [`RTDescriptor`](RTDescriptor.md)[]
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[rtDescriptors](RTFrame.md#rtdescriptors)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L8)
+
+___
+
+### zPreTexture
+
+• **zPreTexture**: `RenderTexture`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[zPreTexture](RTFrame.md#zpretexture)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L10)
+
+___
+
+### depthTexture
+
+• **depthTexture**: `RenderTexture`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[depthTexture](RTFrame.md#depthtexture)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L11)
+
+___
+
+### depthViewIndex
+
+• **depthViewIndex**: `number` = `0`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[depthViewIndex](RTFrame.md#depthviewindex)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L13)
+
+___
+
+### depthCleanValue
+
+• **depthCleanValue**: `number` = `1`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[depthCleanValue](RTFrame.md#depthcleanvalue)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L14)
+
+___
+
+### depthLoadOp
+
+• **depthLoadOp**: `GPULoadOp`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[depthLoadOp](RTFrame.md#depthloadop)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L15)
+
+___
+
+### isOutTarget
+
+• **isOutTarget**: `boolean` = `true`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[isOutTarget](RTFrame.md#isouttarget)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L16)
+
+## Methods
+
+### crateGBuffer
+
+▸ **crateGBuffer**(`rtWidth`, `rtHeight`, `autoResize`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rtWidth` | `number` |
+| `rtHeight` | `number` |
+| `autoResize` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/ProbeGBufferFrame.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/ProbeGBufferFrame.ts#L13)
+
+___
+
+### clone2Frame
+
+▸ **clone2Frame**(`rtFrame`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rtFrame` | [`RTFrame`](RTFrame.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[clone2Frame](RTFrame.md#clone2frame)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L26)
+
+___
+
+### clone
+
+▸ **clone**(): [`RTFrame`](RTFrame.md)
+
+#### Returns
+
+[`RTFrame`](RTFrame.md)
+
+#### Inherited from
+
+[RTFrame](RTFrame.md).[clone](RTFrame.md#clone)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L41)
diff --git a/docs/api/classes/ProfilerUtil.md b/docs/api/classes/ProfilerUtil.md
new file mode 100644
index 00000000..07c87158
--- /dev/null
+++ b/docs/api/classes/ProfilerUtil.md
@@ -0,0 +1,337 @@
+# Class: ProfilerUtil
+
+### Constructors
+
+- [constructor](ProfilerUtil.md#constructor)
+
+### Properties
+
+- [viewMap](ProfilerUtil.md#viewmap)
+- [testObj](ProfilerUtil.md#testobj)
+
+### Methods
+
+- [startView](ProfilerUtil.md#startview)
+- [viewCount](ProfilerUtil.md#viewcount)
+- [viewCount\_vertex](ProfilerUtil.md#viewcount_vertex)
+- [viewCount\_indices](ProfilerUtil.md#viewcount_indices)
+- [viewCount\_tri](ProfilerUtil.md#viewcount_tri)
+- [viewCount\_instance](ProfilerUtil.md#viewcount_instance)
+- [viewCount\_draw](ProfilerUtil.md#viewcount_draw)
+- [viewCount\_pipeline](ProfilerUtil.md#viewcount_pipeline)
+- [start](ProfilerUtil.md#start)
+- [end](ProfilerUtil.md#end)
+- [countStart](ProfilerUtil.md#countstart)
+- [countEnd](ProfilerUtil.md#countend)
+- [print](ProfilerUtil.md#print)
+
+## Constructors
+
+### constructor
+
+• **new ProfilerUtil**(): [`ProfilerUtil`](ProfilerUtil.md)
+
+#### Returns
+
+[`ProfilerUtil`](ProfilerUtil.md)
+
+## Properties
+
+### viewMap
+
+▪ `Static` **viewMap**: `Map`\<[`View3D`](View3D.md), [`ProfilerDraw`](../types/ProfilerDraw.md)\>
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L37)
+
+___
+
+### testObj
+
+▪ `Static` **testObj**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `testValue1` | `number` |
+| `testValue2` | `number` |
+| `testValue3` | `number` |
+| `testValue4` | `number` |
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L39)
+
+## Methods
+
+### startView
+
+▸ **startView**(`view`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L46)
+
+___
+
+### viewCount
+
+▸ **viewCount**(`view`): [`ProfilerDraw`](../types/ProfilerDraw.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+
+#### Returns
+
+[`ProfilerDraw`](../types/ProfilerDraw.md)
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L81)
+
+___
+
+### viewCount\_vertex
+
+▸ **viewCount_vertex**(`view`, `pass`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `pass` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:86](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L86)
+
+___
+
+### viewCount\_indices
+
+▸ **viewCount_indices**(`view`, `pass`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `pass` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L90)
+
+___
+
+### viewCount\_tri
+
+▸ **viewCount_tri**(`view`, `pass`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `pass` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L94)
+
+___
+
+### viewCount\_instance
+
+▸ **viewCount_instance**(`view`, `pass`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `pass` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L98)
+
+___
+
+### viewCount\_draw
+
+▸ **viewCount_draw**(`view`, `pass`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `pass` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L102)
+
+___
+
+### viewCount\_pipeline
+
+▸ **viewCount_pipeline**(`view`, `pass`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `pass` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L106)
+
+___
+
+### start
+
+▸ **start**(`id`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L110)
+
+___
+
+### end
+
+▸ **end**(`id`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:129](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L129)
+
+___
+
+### countStart
+
+▸ **countStart**(`id`, `id2?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `id` | `string` | `undefined` |
+| `id2` | `string` | `""` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:137](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L137)
+
+___
+
+### countEnd
+
+▸ **countEnd**(`id`, `id2`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `string` |
+| `id2` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L160)
+
+___
+
+### print
+
+▸ **print**(`id`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:181](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L181)
diff --git a/docs/api/classes/PropertyAnimTag.md b/docs/api/classes/PropertyAnimTag.md
new file mode 100644
index 00000000..cb81a9cc
--- /dev/null
+++ b/docs/api/classes/PropertyAnimTag.md
@@ -0,0 +1,51 @@
+# Class: PropertyAnimTag
+
+### Constructors
+
+- [constructor](PropertyAnimTag.md#constructor)
+
+### Properties
+
+- [transform](PropertyAnimTag.md#transform)
+- [quaternion](PropertyAnimTag.md#quaternion)
+- [materialColor](PropertyAnimTag.md#materialcolor)
+
+## Constructors
+
+### constructor
+
+• **new PropertyAnimTag**(): [`PropertyAnimTag`](PropertyAnimTag.md)
+
+#### Returns
+
+[`PropertyAnimTag`](PropertyAnimTag.md)
+
+## Properties
+
+### transform
+
+• `Optional` **transform**: `boolean`
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyHelp.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyHelp.ts#L2)
+
+___
+
+### quaternion
+
+• `Optional` **quaternion**: `boolean`
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyHelp.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyHelp.ts#L3)
+
+___
+
+### materialColor
+
+• `Optional` **materialColor**: `boolean`
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyHelp.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyHelp.ts#L4)
diff --git a/docs/api/classes/PropertyAnimation.md b/docs/api/classes/PropertyAnimation.md
new file mode 100644
index 00000000..7b84ff67
--- /dev/null
+++ b/docs/api/classes/PropertyAnimation.md
@@ -0,0 +1,777 @@
+# Class: PropertyAnimation
+
+Attribute Animation Component
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`PropertyAnimation`**
+
+### Constructors
+
+- [constructor](PropertyAnimation.md#constructor)
+
+### Properties
+
+- [object3D](PropertyAnimation.md#object3d)
+- [isDestroyed](PropertyAnimation.md#isdestroyed)
+- [defaultClip](PropertyAnimation.md#defaultclip)
+- [autoPlay](PropertyAnimation.md#autoplay)
+
+### Accessors
+
+- [eventDispatcher](PropertyAnimation.md#eventdispatcher)
+- [isStart](PropertyAnimation.md#isstart)
+- [transform](PropertyAnimation.md#transform)
+- [enable](PropertyAnimation.md#enable)
+- [speed](PropertyAnimation.md#speed)
+- [currentClip](PropertyAnimation.md#currentclip)
+- [time](PropertyAnimation.md#time)
+
+### Methods
+
+- [onEnable](PropertyAnimation.md#onenable)
+- [onDisable](PropertyAnimation.md#ondisable)
+- [onLateUpdate](PropertyAnimation.md#onlateupdate)
+- [onBeforeUpdate](PropertyAnimation.md#onbeforeupdate)
+- [onCompute](PropertyAnimation.md#oncompute)
+- [onGraphic](PropertyAnimation.md#ongraphic)
+- [onParentChange](PropertyAnimation.md#onparentchange)
+- [onAddChild](PropertyAnimation.md#onaddchild)
+- [onRemoveChild](PropertyAnimation.md#onremovechild)
+- [beforeDestroy](PropertyAnimation.md#beforedestroy)
+- [destroy](PropertyAnimation.md#destroy)
+- [registerEventKeyFrame](PropertyAnimation.md#registereventkeyframe)
+- [appendClip](PropertyAnimation.md#appendclip)
+- [stop](PropertyAnimation.md#stop)
+- [toggle](PropertyAnimation.md#toggle)
+- [getClip](PropertyAnimation.md#getclip)
+- [seek](PropertyAnimation.md#seek)
+- [play](PropertyAnimation.md#play)
+- [copyComponent](PropertyAnimation.md#copycomponent)
+- [cloneTo](PropertyAnimation.md#cloneto)
+
+## Constructors
+
+### constructor
+
+• **new PropertyAnimation**(): [`PropertyAnimation`](PropertyAnimation.md)
+
+#### Returns
+
+[`PropertyAnimation`](PropertyAnimation.md)
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimation.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimation.ts#L27)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### defaultClip
+
+• **defaultClip**: `string`
+
+name of default animation clip
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimation.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimation.ts#L17)
+
+___
+
+### autoPlay
+
+• **autoPlay**: `boolean`
+
+is it play auto
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimation.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimation.ts#L21)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### speed
+
+• `get` **speed**(): `number`
+
+get playing speed
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimation.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimation.ts#L98)
+
+• `set` **speed**(`value`): `void`
+
+set playing speed
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimation.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimation.ts#L91)
+
+___
+
+### currentClip
+
+• `get` **currentClip**(): `PropertyAnimClip`
+
+get animation clip which is playing now
+
+#### Returns
+
+`PropertyAnimClip`
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimation.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimation.ts#L135)
+
+___
+
+### time
+
+• `get` **time**(): `number`
+
+get time of current animator
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimation.ts:142](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimation.ts#L142)
+
+## Methods
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onEnable](ComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onDisable](ComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[destroy](ComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
+
+___
+
+### registerEventKeyFrame
+
+▸ **registerEventKeyFrame**(`frame`): `void`
+
+register a event to animator
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `frame` | `AnimatorEventKeyframe` | source AnimatorEventKeyframe |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimation.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimation.ts#L38)
+
+___
+
+### appendClip
+
+▸ **appendClip**(`clip`): `void`
+
+append a perperty animation clip
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `clip` | `PropertyAnimClip` | source PropertyAnimClip |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimation.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimation.ts#L65)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+stop playing
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimation.ts:105](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimation.ts#L105)
+
+___
+
+### toggle
+
+▸ **toggle**(): `void`
+
+stop or resume playing
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimation.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimation.ts#L112)
+
+___
+
+### getClip
+
+▸ **getClip**(`name`): `PropertyAnimClip`
+
+get animation clip by clip name
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`PropertyAnimClip`
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimation.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimation.ts#L121)
+
+___
+
+### seek
+
+▸ **seek**(`time`): `void`
+
+seek the animation to assign time
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `time` | `number` | assign time |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimation.ts:150](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimation.ts#L150)
+
+___
+
+### play
+
+▸ **play**(`name`, `reset?`): `PropertyAnimClip`
+
+play animation by given name
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `name` | `string` | `undefined` | animation name |
+| `reset` | `boolean` | `true` | if true, play the animation from time 0 |
+
+#### Returns
+
+`PropertyAnimClip`
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimation.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimation.ts#L160)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimation.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimation.ts#L179)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+Create a new PropertyAnimation component, copy the properties of the current component,
+and add them to the target object.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimation.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimation.ts#L194)
diff --git a/docs/api/classes/PropertyAnimationClip.md b/docs/api/classes/PropertyAnimationClip.md
new file mode 100644
index 00000000..a745a992
--- /dev/null
+++ b/docs/api/classes/PropertyAnimationClip.md
@@ -0,0 +1,166 @@
+# Class: PropertyAnimationClip
+
+Animation Cureve
+has frame list data
+
+### Constructors
+
+- [constructor](PropertyAnimationClip.md#constructor)
+
+### Properties
+
+- [clipName](PropertyAnimationClip.md#clipname)
+- [loopTime](PropertyAnimationClip.md#looptime)
+- [startTime](PropertyAnimationClip.md#starttime)
+- [stopTime](PropertyAnimationClip.md#stoptime)
+- [sampleRate](PropertyAnimationClip.md#samplerate)
+- [useSkeletonPos](PropertyAnimationClip.md#useskeletonpos)
+- [useSkeletonScale](PropertyAnimationClip.md#useskeletonscale)
+- [positionCurves](PropertyAnimationClip.md#positioncurves)
+- [rotationCurves](PropertyAnimationClip.md#rotationcurves)
+- [scaleCurves](PropertyAnimationClip.md#scalecurves)
+- [floatCurves](PropertyAnimationClip.md#floatcurves)
+
+### Methods
+
+- [formBytes](PropertyAnimationClip.md#formbytes)
+
+## Constructors
+
+### constructor
+
+• **new PropertyAnimationClip**(): [`PropertyAnimationClip`](PropertyAnimationClip.md)
+
+#### Returns
+
+[`PropertyAnimationClip`](PropertyAnimationClip.md)
+
+## Properties
+
+### clipName
+
+• **clipName**: `string`
+
+#### Defined in
+
+[src/math/AnimationCurveClip.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveClip.ts#L13)
+
+___
+
+### loopTime
+
+• **loopTime**: `boolean`
+
+#### Defined in
+
+[src/math/AnimationCurveClip.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveClip.ts#L14)
+
+___
+
+### startTime
+
+• **startTime**: `number`
+
+#### Defined in
+
+[src/math/AnimationCurveClip.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveClip.ts#L15)
+
+___
+
+### stopTime
+
+• **stopTime**: `number`
+
+#### Defined in
+
+[src/math/AnimationCurveClip.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveClip.ts#L16)
+
+___
+
+### sampleRate
+
+• **sampleRate**: `number`
+
+#### Defined in
+
+[src/math/AnimationCurveClip.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveClip.ts#L17)
+
+___
+
+### useSkeletonPos
+
+• **useSkeletonPos**: `boolean`
+
+#### Defined in
+
+[src/math/AnimationCurveClip.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveClip.ts#L18)
+
+___
+
+### useSkeletonScale
+
+• **useSkeletonScale**: `boolean`
+
+#### Defined in
+
+[src/math/AnimationCurveClip.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveClip.ts#L19)
+
+___
+
+### positionCurves
+
+• **positionCurves**: `Map`\<`string`, [`AnimationCurveT`](AnimationCurveT.md)\>
+
+#### Defined in
+
+[src/math/AnimationCurveClip.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveClip.ts#L20)
+
+___
+
+### rotationCurves
+
+• **rotationCurves**: `Map`\<`string`, [`AnimationCurveT`](AnimationCurveT.md)\>
+
+#### Defined in
+
+[src/math/AnimationCurveClip.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveClip.ts#L21)
+
+___
+
+### scaleCurves
+
+• **scaleCurves**: `Map`\<`string`, [`AnimationCurveT`](AnimationCurveT.md)\>
+
+#### Defined in
+
+[src/math/AnimationCurveClip.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveClip.ts#L22)
+
+___
+
+### floatCurves
+
+• **floatCurves**: `Map`\<`string`, [`AnimationCurveT`](AnimationCurveT.md)\>
+
+#### Defined in
+
+[src/math/AnimationCurveClip.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveClip.ts#L23)
+
+## Methods
+
+### formBytes
+
+▸ **formBytes**(`bytes`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bytes` | `BytesArray` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/AnimationCurveClip.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveClip.ts#L25)
diff --git a/docs/api/classes/PropertyAnimationClipState.md b/docs/api/classes/PropertyAnimationClipState.md
new file mode 100644
index 00000000..6e663617
--- /dev/null
+++ b/docs/api/classes/PropertyAnimationClipState.md
@@ -0,0 +1,68 @@
+# Class: PropertyAnimationClipState
+
+### Constructors
+
+- [constructor](PropertyAnimationClipState.md#constructor)
+
+### Properties
+
+- [clip](PropertyAnimationClipState.md#clip)
+- [weight](PropertyAnimationClipState.md#weight)
+
+### Accessors
+
+- [totalTime](PropertyAnimationClipState.md#totaltime)
+
+## Constructors
+
+### constructor
+
+• **new PropertyAnimationClipState**(`clip`): [`PropertyAnimationClipState`](PropertyAnimationClipState.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `clip` | [`PropertyAnimationClip`](PropertyAnimationClip.md) |
+
+#### Returns
+
+[`PropertyAnimationClipState`](PropertyAnimationClipState.md)
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:443](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L443)
+
+## Properties
+
+### clip
+
+• **clip**: [`PropertyAnimationClip`](PropertyAnimationClip.md)
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:436](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L436)
+
+___
+
+### weight
+
+• **weight**: `number` = `0.0`
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:437](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L437)
+
+## Accessors
+
+### totalTime
+
+• `get` **totalTime**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/anim/AnimatorComponent.ts:439](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/AnimatorComponent.ts#L439)
diff --git a/docs/api/classes/QuadAABB.md b/docs/api/classes/QuadAABB.md
new file mode 100644
index 00000000..c5378fb0
--- /dev/null
+++ b/docs/api/classes/QuadAABB.md
@@ -0,0 +1,355 @@
+# Class: QuadAABB
+
+### Constructors
+
+- [constructor](QuadAABB.md#constructor)
+
+### Properties
+
+- [minPosX](QuadAABB.md#minposx)
+- [minPosY](QuadAABB.md#minposy)
+- [maxPosX](QuadAABB.md#maxposx)
+- [maxPosY](QuadAABB.md#maxposy)
+- [testID](QuadAABB.md#testid)
+- [points](QuadAABB.md#points)
+
+### Accessors
+
+- [radius](QuadAABB.md#radius)
+- [sideX](QuadAABB.md#sidex)
+- [sideY](QuadAABB.md#sidey)
+- [centreX](QuadAABB.md#centrex)
+- [centreY](QuadAABB.md#centrey)
+
+### Methods
+
+- [setAABox](QuadAABB.md#setaabox)
+- [setOffset](QuadAABB.md#setoffset)
+- [setContainRect](QuadAABB.md#setcontainrect)
+- [clear](QuadAABB.md#clear)
+- [addPoint](QuadAABB.md#addpoint)
+- [clone](QuadAABB.md#clone)
+- [overlapTest](QuadAABB.md#overlaptest)
+- [isPointInside](QuadAABB.md#ispointinside)
+- [isIntersectLineSegment](QuadAABB.md#isintersectlinesegment)
+
+## Constructors
+
+### constructor
+
+• **new QuadAABB**(): [`QuadAABB`](QuadAABB.md)
+
+#### Returns
+
+[`QuadAABB`](QuadAABB.md)
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L21)
+
+## Properties
+
+### minPosX
+
+• **minPosX**: `number` = `0`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L5)
+
+___
+
+### minPosY
+
+• **minPosY**: `number` = `0`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L7)
+
+___
+
+### maxPosX
+
+• **maxPosX**: `number` = `0`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L9)
+
+___
+
+### maxPosY
+
+• **maxPosY**: `number` = `0`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L11)
+
+___
+
+### testID
+
+• **testID**: `number` = `0`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L13)
+
+___
+
+### points
+
+• **points**: [`Vector3`](Vector3.md)[]
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L15)
+
+## Accessors
+
+### radius
+
+• `get` **radius**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L87)
+
+___
+
+### sideX
+
+• `get` **sideX**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L91)
+
+___
+
+### sideY
+
+• `get` **sideY**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:95](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L95)
+
+___
+
+### centreX
+
+• `get` **centreX**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L99)
+
+___
+
+### centreY
+
+• `get` **centreY**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L103)
+
+## Methods
+
+### setAABox
+
+▸ **setAABox**(`cx`, `cy`, `sideX`, `sideY`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cx` | `number` |
+| `cy` | `number` |
+| `sideX` | `number` |
+| `sideY` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L28)
+
+___
+
+### setOffset
+
+▸ **setOffset**(`vec`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `vec` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L37)
+
+___
+
+### setContainRect
+
+▸ **setContainRect**(`minX`, `minY`, `maxX`, `maxY`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `minX` | `number` |
+| `minY` | `number` |
+| `maxX` | `number` |
+| `maxY` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L48)
+
+___
+
+### clear
+
+▸ **clear**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L55)
+
+___
+
+### addPoint
+
+▸ **addPoint**(`pos`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pos` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L64)
+
+___
+
+### clone
+
+▸ **clone**(): [`QuadAABB`](QuadAABB.md)
+
+#### Returns
+
+[`QuadAABB`](QuadAABB.md)
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L79)
+
+___
+
+### overlapTest
+
+▸ **overlapTest**(`box`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `box` | [`QuadAABB`](QuadAABB.md) |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L107)
+
+___
+
+### isPointInside
+
+▸ **isPointInside**(`pos`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pos` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L115)
+
+___
+
+### isIntersectLineSegment
+
+▸ **isIntersectLineSegment**(`p1x`, `p1y`, `p2x`, `p2y`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `p1x` | `number` |
+| `p1y` | `number` |
+| `p2x` | `number` |
+| `p2y` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/tree/quad/QuadAABB.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadAABB.ts#L122)
diff --git a/docs/api/classes/QuadRoot.md b/docs/api/classes/QuadRoot.md
new file mode 100644
index 00000000..9b6a0764
--- /dev/null
+++ b/docs/api/classes/QuadRoot.md
@@ -0,0 +1,96 @@
+# Class: QuadRoot
+
+### Constructors
+
+- [constructor](QuadRoot.md#constructor)
+
+### Methods
+
+- [createQuadTree](QuadRoot.md#createquadtree)
+- [getNodesByAABB](QuadRoot.md#getnodesbyaabb)
+- [getTriangleAtPoint](QuadRoot.md#gettriangleatpoint)
+
+## Constructors
+
+### constructor
+
+• **new QuadRoot**(`maxNodesPerCell?`, `minCellSize?`): [`QuadRoot`](QuadRoot.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `maxNodesPerCell` | `number` | `10` |
+| `minCellSize` | `number` | `500` |
+
+#### Returns
+
+[`QuadRoot`](QuadRoot.md)
+
+#### Defined in
+
+[src/core/tree/quad/QuadRoot.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadRoot.ts#L20)
+
+## Methods
+
+### createQuadTree
+
+▸ **createQuadTree**(`nodes`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `nodes` | [`IQuadNode`](../interfaces/IQuadNode.md)[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/tree/quad/QuadRoot.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadRoot.ts#L28)
+
+___
+
+### getNodesByAABB
+
+▸ **getNodesByAABB**(`minX`, `minY`, `maxX`, `maxY`): [`IQuadNode`](../interfaces/IQuadNode.md)[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `minX` | `number` |
+| `minY` | `number` |
+| `maxX` | `number` |
+| `maxY` | `number` |
+
+#### Returns
+
+[`IQuadNode`](../interfaces/IQuadNode.md)[]
+
+#### Defined in
+
+[src/core/tree/quad/QuadRoot.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadRoot.ts#L35)
+
+___
+
+### getTriangleAtPoint
+
+▸ **getTriangleAtPoint**(`point`, `threshold?`): [`IQuadNode`](../interfaces/IQuadNode.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `point` | [`Vector3`](Vector3.md) | `undefined` |
+| `threshold` | `number` | `5` |
+
+#### Returns
+
+[`IQuadNode`](../interfaces/IQuadNode.md)
+
+#### Defined in
+
+[src/core/tree/quad/QuadRoot.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadRoot.ts#L56)
diff --git a/docs/api/classes/QuadShader.md b/docs/api/classes/QuadShader.md
new file mode 100644
index 00000000..5deb3d3a
--- /dev/null
+++ b/docs/api/classes/QuadShader.md
@@ -0,0 +1,906 @@
+# Class: QuadShader
+
+## Hierarchy
+
+- [`Shader`](Shader.md)
+
+ ↳ **`QuadShader`**
+
+### Constructors
+
+- [constructor](QuadShader.md#constructor)
+
+### Properties
+
+- [computes](QuadShader.md#computes)
+- [passShader](QuadShader.md#passshader)
+
+### Methods
+
+- [addRenderPass](QuadShader.md#addrenderpass)
+- [removeShader](QuadShader.md#removeshader)
+- [removeShaderByIndex](QuadShader.md#removeshaderbyindex)
+- [getSubShaders](QuadShader.md#getsubshaders)
+- [hasSubShaders](QuadShader.md#hassubshaders)
+- [getDefaultShaders](QuadShader.md#getdefaultshaders)
+- [getDefaultColorShader](QuadShader.md#getdefaultcolorshader)
+- [setDefine](QuadShader.md#setdefine)
+- [hasDefine](QuadShader.md#hasdefine)
+- [deleteDefine](QuadShader.md#deletedefine)
+- [setUniform](QuadShader.md#setuniform)
+- [setUniformFloat](QuadShader.md#setuniformfloat)
+- [setUniformVector2](QuadShader.md#setuniformvector2)
+- [setUniformVector3](QuadShader.md#setuniformvector3)
+- [setUniformVector4](QuadShader.md#setuniformvector4)
+- [setUniformColor](QuadShader.md#setuniformcolor)
+- [getUniform](QuadShader.md#getuniform)
+- [getUniformFloat](QuadShader.md#getuniformfloat)
+- [getUniformVector2](QuadShader.md#getuniformvector2)
+- [getUniformVector3](QuadShader.md#getuniformvector3)
+- [getUniformVector4](QuadShader.md#getuniformvector4)
+- [getUniformColor](QuadShader.md#getuniformcolor)
+- [setTexture](QuadShader.md#settexture)
+- [getTexture](QuadShader.md#gettexture)
+- [setUniformBuffer](QuadShader.md#setuniformbuffer)
+- [getUniformBuffer](QuadShader.md#getuniformbuffer)
+- [setStorageBuffer](QuadShader.md#setstoragebuffer)
+- [getStorageBuffer](QuadShader.md#getstoragebuffer)
+- [setStructStorageBuffer](QuadShader.md#setstructstoragebuffer)
+- [getStructStorageBuffer](QuadShader.md#getstructstoragebuffer)
+- [noticeValueChange](QuadShader.md#noticevaluechange)
+- [destroy](QuadShader.md#destroy)
+- [clone](QuadShader.md#clone)
+- [applyUniform](QuadShader.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new QuadShader**(`vs?`, `fs?`): [`QuadShader`](QuadShader.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `vs` | `string` | `'QuadGlsl_vs'` |
+| `fs` | `string` | `'QuadGlsl_fs'` |
+
+#### Returns
+
+[`QuadShader`](QuadShader.md)
+
+#### Overrides
+
+[Shader](Shader.md).[constructor](Shader.md#constructor)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/QuadShader.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/QuadShader.ts#L15)
+
+## Properties
+
+### computes
+
+• **computes**: [`RenderShaderCompute`](RenderShaderCompute.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[computes](Shader.md#computes)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L19)
+
+___
+
+### passShader
+
+• **passShader**: `Map`\<`PassType`, [`RenderShaderPass`](RenderShaderPass.md)[]\>
+
+#### Inherited from
+
+[Shader](Shader.md).[passShader](Shader.md#passshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L21)
+
+## Methods
+
+### addRenderPass
+
+▸ **addRenderPass**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[addRenderPass](Shader.md#addrenderpass)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L28)
+
+___
+
+### removeShader
+
+▸ **removeShader**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShader](Shader.md#removeshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L38)
+
+___
+
+### removeShaderByIndex
+
+▸ **removeShaderByIndex**(`passType`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `passType` | `PassType` | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShaderByIndex](Shader.md#removeshaderbyindex)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L52)
+
+___
+
+### getSubShaders
+
+▸ **getSubShaders**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getSubShaders](Shader.md#getsubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L63)
+
+___
+
+### hasSubShaders
+
+▸ **hasSubShaders**(`passType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasSubShaders](Shader.md#hassubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L67)
+
+___
+
+### getDefaultShaders
+
+▸ **getDefaultShaders**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultShaders](Shader.md#getdefaultshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L72)
+
+___
+
+### getDefaultColorShader
+
+▸ **getDefaultColorShader**(): [`RenderShaderPass`](RenderShaderPass.md)
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultColorShader](Shader.md#getdefaultcolorshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L76)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setDefine](Shader.md#setdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L80)
+
+___
+
+### hasDefine
+
+▸ **hasDefine**(`arg0`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasDefine](Shader.md#hasdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L88)
+
+___
+
+### deleteDefine
+
+▸ **deleteDefine**(`arg0`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[deleteDefine](Shader.md#deletedefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L99)
+
+___
+
+### setUniform
+
+▸ **setUniform**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniform](Shader.md#setuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L107)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformFloat](Shader.md#setuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L115)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector2](Shader.md#setuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L123)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector3](Shader.md#setuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L131)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector4](Shader.md#setuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L139)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformColor](Shader.md#setuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L147)
+
+___
+
+### getUniform
+
+▸ **getUniform**(`arg0`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniform](Shader.md#getuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L155)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`arg0`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformFloat](Shader.md#getuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:159](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L159)
+
+___
+
+### getUniformVector2
+
+▸ **getUniformVector2**(`arg0`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector2](Shader.md#getuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:163](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L163)
+
+___
+
+### getUniformVector3
+
+▸ **getUniformVector3**(`arg0`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector3](Shader.md#getuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:167](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L167)
+
+___
+
+### getUniformVector4
+
+▸ **getUniformVector4**(`arg0`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector4](Shader.md#getuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:171](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L171)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`arg0`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformColor](Shader.md#getuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:175](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L175)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setTexture](Shader.md#settexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L179)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`arg0`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getTexture](Shader.md#gettexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:188](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L188)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformBuffer](Shader.md#setuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:192](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L192)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformBuffer](Shader.md#getuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L200)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStorageBuffer](Shader.md#setstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:204](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L204)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`arg0`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getStorageBuffer](Shader.md#getstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:212](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L212)
+
+___
+
+### setStructStorageBuffer
+
+▸ **setStructStorageBuffer**\<`T`\>(`arg0`, `arg1`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StructStorageGPUBuffer`](StructStorageGPUBuffer.md)\<`T`\> |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStructStorageBuffer](Shader.md#setstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L216)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getStructStorageBuffer](Shader.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L224)
+
+___
+
+### noticeValueChange
+
+▸ **noticeValueChange**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[noticeValueChange](Shader.md#noticevaluechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L228)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[destroy](Shader.md#destroy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:236](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L236)
+
+___
+
+### clone
+
+▸ **clone**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[clone](Shader.md#clone)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L240)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[applyUniform](Shader.md#applyuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:249](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L249)
diff --git a/docs/api/classes/QuadTree.md b/docs/api/classes/QuadTree.md
new file mode 100644
index 00000000..83ed8683
--- /dev/null
+++ b/docs/api/classes/QuadTree.md
@@ -0,0 +1,123 @@
+# Class: QuadTree
+
+### Constructors
+
+- [constructor](QuadTree.md#constructor)
+
+### Methods
+
+- [getQuadNode](QuadTree.md#getquadnode)
+- [clear](QuadTree.md#clear)
+- [initNodes](QuadTree.md#initnodes)
+- [buildQuadTree](QuadTree.md#buildquadtree)
+- [getNodesIntersectingtAABox](QuadTree.md#getnodesintersectingtaabox)
+
+## Constructors
+
+### constructor
+
+• **new QuadTree**(): [`QuadTree`](QuadTree.md)
+
+#### Returns
+
+[`QuadTree`](QuadTree.md)
+
+#### Defined in
+
+[src/core/tree/quad/QuadTree.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadTree.ts#L20)
+
+## Methods
+
+### getQuadNode
+
+▸ **getQuadNode**(`idx`): [`IQuadNode`](../interfaces/IQuadNode.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `idx` | `number` |
+
+#### Returns
+
+[`IQuadNode`](../interfaces/IQuadNode.md)
+
+#### Defined in
+
+[src/core/tree/quad/QuadTree.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadTree.ts#L28)
+
+___
+
+### clear
+
+▸ **clear**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/tree/quad/QuadTree.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadTree.ts#L32)
+
+___
+
+### initNodes
+
+▸ **initNodes**(`nodes`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `nodes` | [`IQuadNode`](../interfaces/IQuadNode.md)[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/tree/quad/QuadTree.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadTree.ts#L37)
+
+___
+
+### buildQuadTree
+
+▸ **buildQuadTree**(`maxNodesPerCell`, `minCellSize`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `maxNodesPerCell` | `number` |
+| `minCellSize` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/tree/quad/QuadTree.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadTree.ts#L49)
+
+___
+
+### getNodesIntersectingtAABox
+
+▸ **getNodesIntersectingtAABox**(`result`, `aabb`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `result` | `number`[] |
+| `aabb` | [`QuadAABB`](QuadAABB.md) |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/tree/quad/QuadTree.ts:176](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadTree.ts#L176)
diff --git a/docs/api/classes/QuadTreeCell.md b/docs/api/classes/QuadTreeCell.md
new file mode 100644
index 00000000..ad043f2b
--- /dev/null
+++ b/docs/api/classes/QuadTreeCell.md
@@ -0,0 +1,121 @@
+# Class: QuadTreeCell
+
+### Constructors
+
+- [constructor](QuadTreeCell.md#constructor)
+
+### Properties
+
+- [NUM\_CHILDREN](QuadTreeCell.md#num_children)
+- [childCellIndices](QuadTreeCell.md#childcellindices)
+- [nodeIndices](QuadTreeCell.md#nodeindices)
+- [aabb](QuadTreeCell.md#aabb)
+- [points](QuadTreeCell.md#points)
+
+### Methods
+
+- [isLeaf](QuadTreeCell.md#isleaf)
+- [clear](QuadTreeCell.md#clear)
+
+## Constructors
+
+### constructor
+
+• **new QuadTreeCell**(`aabox`): [`QuadTreeCell`](QuadTreeCell.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `aabox` | [`QuadAABB`](QuadAABB.md) |
+
+#### Returns
+
+[`QuadTreeCell`](QuadTreeCell.md)
+
+#### Defined in
+
+[src/core/tree/quad/QuadTreeCell.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadTreeCell.ts#L17)
+
+## Properties
+
+### NUM\_CHILDREN
+
+▪ `Static` **NUM\_CHILDREN**: `number` = `4`
+
+#### Defined in
+
+[src/core/tree/quad/QuadTreeCell.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadTreeCell.ts#L7)
+
+___
+
+### childCellIndices
+
+• **childCellIndices**: `number`[]
+
+#### Defined in
+
+[src/core/tree/quad/QuadTreeCell.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadTreeCell.ts#L9)
+
+___
+
+### nodeIndices
+
+• **nodeIndices**: `number`[]
+
+#### Defined in
+
+[src/core/tree/quad/QuadTreeCell.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadTreeCell.ts#L11)
+
+___
+
+### aabb
+
+• **aabb**: [`QuadAABB`](QuadAABB.md)
+
+#### Defined in
+
+[src/core/tree/quad/QuadTreeCell.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadTreeCell.ts#L13)
+
+___
+
+### points
+
+• **points**: [`Vector3`](Vector3.md)[]
+
+#### Defined in
+
+[src/core/tree/quad/QuadTreeCell.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadTreeCell.ts#L15)
+
+## Methods
+
+### isLeaf
+
+▸ **isLeaf**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+**`Language`**
+
+zh_CN
+Indicates if we contain triangles (if not then we should/might have children)
+
+#### Defined in
+
+[src/core/tree/quad/QuadTreeCell.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadTreeCell.ts#L36)
+
+___
+
+### clear
+
+▸ **clear**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/tree/quad/QuadTreeCell.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/QuadTreeCell.ts#L40)
diff --git a/docs/api/classes/Quaternion.md b/docs/api/classes/Quaternion.md
new file mode 100644
index 00000000..c052603c
--- /dev/null
+++ b/docs/api/classes/Quaternion.md
@@ -0,0 +1,617 @@
+# Class: Quaternion
+
+Quaternions are used to represent rotations.
+
+### Constructors
+
+- [constructor](Quaternion.md#constructor)
+
+### Properties
+
+- [HELP\_0](Quaternion.md#help_0)
+- [HELP\_1](Quaternion.md#help_1)
+- [HELP\_2](Quaternion.md#help_2)
+- [\_zero](Quaternion.md#_zero)
+- [CALCULATION\_QUATERNION](Quaternion.md#calculation_quaternion)
+
+### Accessors
+
+- [magnitude](Quaternion.md#magnitude)
+
+### Methods
+
+- [identity](Quaternion.md#identity)
+- [quaternionToMatrix](Quaternion.md#quaterniontomatrix)
+- [set](Quaternion.md#set)
+- [divide](Quaternion.md#divide)
+- [multiply](Quaternion.md#multiply)
+- [multiplyVector](Quaternion.md#multiplyvector)
+- [fromAxisAngle](Quaternion.md#fromaxisangle)
+- [toAxisAngle](Quaternion.md#toaxisangle)
+- [slerp](Quaternion.md#slerp)
+- [lerp](Quaternion.md#lerp)
+- [fromEulerAngles](Quaternion.md#fromeulerangles)
+- [setFromRotationMatrix](Quaternion.md#setfromrotationmatrix)
+- [getEulerAngles](Quaternion.md#geteulerangles)
+- [normalize](Quaternion.md#normalize)
+- [toString](Quaternion.md#tostring)
+- [fromMatrix](Quaternion.md#frommatrix)
+- [inverse](Quaternion.md#inverse)
+- [clone](Quaternion.md#clone)
+- [transformVector](Quaternion.md#transformvector)
+- [copyFrom](Quaternion.md#copyfrom)
+- [mul](Quaternion.md#mul)
+- [serialize](Quaternion.md#serialize)
+
+## Constructors
+
+### constructor
+
+• **new Quaternion**(`x?`, `y?`, `z?`, `w?`): [`Quaternion`](Quaternion.md)
+
+Create a new quaternion object
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `x` | `number` | `0` | The X component of a quaternion. |
+| `y` | `number` | `0` | The Y component of a quaternion. |
+| `z` | `number` | `0` | The Z component of a quaternion. |
+| `w` | `number` | `1` | The W component of a quaternion. |
+
+#### Returns
+
+[`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/math/Quaternion.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L40)
+
+## Properties
+
+### HELP\_0
+
+▪ `Static` **HELP\_0**: [`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/math/Quaternion.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L11)
+
+___
+
+### HELP\_1
+
+▪ `Static` **HELP\_1**: [`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/math/Quaternion.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L12)
+
+___
+
+### HELP\_2
+
+▪ `Static` **HELP\_2**: [`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/math/Quaternion.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L13)
+
+___
+
+### \_zero
+
+▪ `Static` **\_zero**: [`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/math/Quaternion.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L14)
+
+___
+
+### CALCULATION\_QUATERNION
+
+▪ `Static` **CALCULATION\_QUATERNION**: [`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/math/Quaternion.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L15)
+
+## Accessors
+
+### magnitude
+
+• `get` **magnitude**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Quaternion.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L102)
+
+## Methods
+
+### identity
+
+▸ **identity**(): [`Quaternion`](Quaternion.md)
+
+Identity quaternion
+
+#### Returns
+
+[`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/math/Quaternion.ts:51](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L51)
+
+___
+
+### quaternionToMatrix
+
+▸ **quaternionToMatrix**(`q`, `m`): `void`
+
+Converts quaternions to matrices
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `q` | [`Quaternion`](Quaternion.md) | Quaternion |
+| `m` | `any` | Matrix |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Quaternion.ts:60](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L60)
+
+___
+
+### set
+
+▸ **set**(`x?`, `y?`, `z?`, `w?`): [`Quaternion`](Quaternion.md)
+
+Set the x, y, z, and w components of the existing quaternions.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `x` | `number` | `0` | The X component of a quaternion. |
+| `y` | `number` | `0` | The Y component of a quaternion. |
+| `z` | `number` | `0` | The Z component of a quaternion. |
+| `w` | `number` | `1` | The W component of a quaternion. |
+
+#### Returns
+
+[`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/math/Quaternion.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L113)
+
+___
+
+### divide
+
+▸ **divide**(`v`): [`Quaternion`](Quaternion.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `any` |
+
+#### Returns
+
+[`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/math/Quaternion.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L121)
+
+___
+
+### multiply
+
+▸ **multiply**(`qa`, `qb`): `void`
+
+Multiply two quaternions
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `qa` | [`Quaternion`](Quaternion.md) | Quaternion 1 |
+| `qb` | [`Quaternion`](Quaternion.md) | Quaternion 2 |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Quaternion.ts:149](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L149)
+
+___
+
+### multiplyVector
+
+▸ **multiplyVector**(`vector`, `target?`): [`Quaternion`](Quaternion.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `vector` | [`Vector3`](Vector3.md) | `undefined` |
+| `target` | [`Quaternion`](Quaternion.md) | `null` |
+
+#### Returns
+
+[`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/math/Quaternion.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L165)
+
+___
+
+### fromAxisAngle
+
+▸ **fromAxisAngle**(`axis`, `angle`): `void`
+
+Set the quaternion with a given rotation of the axis and Angle.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `axis` | [`Vector3`](Vector3.md) | axis |
+| `angle` | `number` | angle |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Quaternion.ts:184](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L184)
+
+___
+
+### toAxisAngle
+
+▸ **toAxisAngle**(`axis`): `number`
+
+Turn quaternions into angles
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `axis` | [`Vector3`](Vector3.md) | axis |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Quaternion.ts:202](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L202)
+
+___
+
+### slerp
+
+▸ **slerp**(`qa`, `qb`, `t`): `void`
+
+Spherically interpolates between two quaternions, providing an interpolation between rotations with constant angle change rate.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `qa` | [`Quaternion`](Quaternion.md) | The first quaternion to interpolate. |
+| `qb` | [`Quaternion`](Quaternion.md) | The second quaternion to interpolate. |
+| `t` | `number` | The interpolation weight, a value between 0 and 1. |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Quaternion.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L227)
+
+___
+
+### lerp
+
+▸ **lerp**(`qa`, `qb`, `t`): `void`
+
+Linearly interpolates between two quaternions.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `qa` | [`Quaternion`](Quaternion.md) | The first quaternion to interpolate. |
+| `qb` | [`Quaternion`](Quaternion.md) | The second quaternion to interpolate. |
+| `t` | `number` | The interpolation weight, a value between 0 and 1. |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Quaternion.ts:277](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L277)
+
+___
+
+### fromEulerAngles
+
+▸ **fromEulerAngles**(`ax`, `ay`, `az`): [`Quaternion`](Quaternion.md)
+
+Fills the quaternion object with values representing the given euler rotation.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `ax` | `number` | The angle in radians of the rotation around the ax axis. |
+| `ay` | `number` | The angle in radians of the rotation around the ay axis. |
+| `az` | `number` | The angle in radians of the rotation around the az axis. |
+
+#### Returns
+
+[`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/math/Quaternion.ts:314](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L314)
+
+___
+
+### setFromRotationMatrix
+
+▸ **setFromRotationMatrix**(`m`): [`Quaternion`](Quaternion.md)
+
+Sets the current quaternion from the rotation matrix
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m` | `Object` |
+| `m.rawData` | `Float32Array` |
+
+#### Returns
+
+[`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/math/Quaternion.ts:342](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L342)
+
+___
+
+### getEulerAngles
+
+▸ **getEulerAngles**(`eulers?`): [`Vector3`](Vector3.md)
+
+Get the Euler Angle
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `eulers?` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Quaternion.ts:393](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L393)
+
+___
+
+### normalize
+
+▸ **normalize**(`val?`): `void`
+
+The normalize of the quaternion. Convert this quaternion to a normalize coefficient.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `val` | `number` | `1` | normalize coefficient, which is 1 by default |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Quaternion.ts:432](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L432)
+
+___
+
+### toString
+
+▸ **toString**(): `string`
+
+Returns the value of a quaternion as a string
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/math/Quaternion.ts:445](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L445)
+
+___
+
+### fromMatrix
+
+▸ **fromMatrix**(`matrix`): `void`
+
+Extracts a quaternion rotation matrix out of a given Matrix3D object.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `matrix` | `any` | The Matrix3D out of which the rotation will be extracted. |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Quaternion.ts:453](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L453)
+
+___
+
+### inverse
+
+▸ **inverse**(`target?`): [`Quaternion`](Quaternion.md)
+
+Returns a quaternion that inverts the current quaternion
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `target` | [`Quaternion`](Quaternion.md) | `null` | The default parameter is null. If the current parameter is null, a new quaternion object is returned |
+
+#### Returns
+
+[`Quaternion`](Quaternion.md)
+
+Quaternion Result
+
+#### Defined in
+
+[src/math/Quaternion.ts:466](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L466)
+
+___
+
+### clone
+
+▸ **clone**(): [`Quaternion`](Quaternion.md)
+
+Clones the quaternion.
+
+#### Returns
+
+[`Quaternion`](Quaternion.md)
+
+An exact duplicate of the current Quaternion.
+
+#### Defined in
+
+[src/math/Quaternion.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L486)
+
+___
+
+### transformVector
+
+▸ **transformVector**(`vector`, `target?`): [`Vector3`](Vector3.md)
+
+Rotates a point.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `vector` | [`Vector3`](Vector3.md) | `undefined` | The Vector3D object to be rotated. |
+| `target` | [`Vector3`](Vector3.md) | `null` | An optional Vector3D object that will contain the rotated coordinates. If not provided, a new object will be created. |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+A Vector3D object containing the rotated point.
+
+#### Defined in
+
+[src/math/Quaternion.ts:496](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L496)
+
+___
+
+### copyFrom
+
+▸ **copyFrom**(`q`): `this`
+
+Copies the data from a quaternion into this instance.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `q` | [`Vector3`](Vector3.md) \| [`Quaternion`](Quaternion.md) | The quaternion to copy from. |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/Quaternion.ts:523](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L523)
+
+___
+
+### mul
+
+▸ **mul**(`lhs`, `rhs`, `target?`): [`Quaternion`](Quaternion.md)
+
+from untiy API
+op
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lhs` | [`Quaternion`](Quaternion.md) |
+| `rhs` | [`Quaternion`](Quaternion.md) |
+| `target?` | [`Quaternion`](Quaternion.md) |
+
+#### Returns
+
+[`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/math/Quaternion.ts:536](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L536)
+
+___
+
+### serialize
+
+▸ **serialize**(`value`): [`Quaternion`](Quaternion.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Quaternion`](Quaternion.md) |
+
+#### Returns
+
+[`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/math/Quaternion.ts:554](https://github.com/Orillusion/orillusion/blob/main/src/math/Quaternion.ts#L554)
diff --git a/docs/api/classes/RTDescriptor.md b/docs/api/classes/RTDescriptor.md
new file mode 100644
index 00000000..fdc74ef1
--- /dev/null
+++ b/docs/api/classes/RTDescriptor.md
@@ -0,0 +1,51 @@
+# Class: RTDescriptor
+
+### Constructors
+
+- [constructor](RTDescriptor.md#constructor)
+
+### Properties
+
+- [storeOp](RTDescriptor.md#storeop)
+- [loadOp](RTDescriptor.md#loadop)
+- [clearValue](RTDescriptor.md#clearvalue)
+
+## Constructors
+
+### constructor
+
+• **new RTDescriptor**(): [`RTDescriptor`](RTDescriptor.md)
+
+#### Returns
+
+[`RTDescriptor`](RTDescriptor.md)
+
+## Properties
+
+### storeOp
+
+• **storeOp**: `string` = `'store'`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/descriptor/RTDescriptor.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/descriptor/RTDescriptor.ts#L2)
+
+___
+
+### loadOp
+
+• **loadOp**: `GPULoadOp`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/descriptor/RTDescriptor.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/descriptor/RTDescriptor.ts#L3)
+
+___
+
+### clearValue
+
+• **clearValue**: `GPUColor`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/descriptor/RTDescriptor.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/descriptor/RTDescriptor.ts#L4)
diff --git a/docs/api/classes/RTFrame.md b/docs/api/classes/RTFrame.md
new file mode 100644
index 00000000..be2dc1cb
--- /dev/null
+++ b/docs/api/classes/RTFrame.md
@@ -0,0 +1,191 @@
+# Class: RTFrame
+
+## Hierarchy
+
+- **`RTFrame`**
+
+ ↳ [`GBufferFrame`](GBufferFrame.md)
+
+ ↳ [`GBufferFrameA`](GBufferFrameA.md)
+
+ ↳ [`ProbeGBufferFrame`](ProbeGBufferFrame.md)
+
+### Constructors
+
+- [constructor](RTFrame.md#constructor)
+
+### Properties
+
+- [label](RTFrame.md#label)
+- [customSize](RTFrame.md#customsize)
+- [renderTargets](RTFrame.md#rendertargets)
+- [rtDescriptors](RTFrame.md#rtdescriptors)
+- [zPreTexture](RTFrame.md#zpretexture)
+- [depthTexture](RTFrame.md#depthtexture)
+- [depthViewIndex](RTFrame.md#depthviewindex)
+- [depthCleanValue](RTFrame.md#depthcleanvalue)
+- [depthLoadOp](RTFrame.md#depthloadop)
+- [isOutTarget](RTFrame.md#isouttarget)
+
+### Methods
+
+- [clone2Frame](RTFrame.md#clone2frame)
+- [clone](RTFrame.md#clone)
+
+## Constructors
+
+### constructor
+
+• **new RTFrame**(`attachments`, `rtDescriptors`, `depthTexture?`, `zPreTexture?`, `isOutTarget?`): [`RTFrame`](RTFrame.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `attachments` | `RenderTexture`[] | `undefined` |
+| `rtDescriptors` | [`RTDescriptor`](RTDescriptor.md)[] | `undefined` |
+| `depthTexture?` | `RenderTexture` | `undefined` |
+| `zPreTexture?` | `RenderTexture` | `undefined` |
+| `isOutTarget` | `boolean` | `true` |
+
+#### Returns
+
+[`RTFrame`](RTFrame.md)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L18)
+
+## Properties
+
+### label
+
+• **label**: `string`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L5)
+
+___
+
+### customSize
+
+• **customSize**: `boolean` = `false`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L6)
+
+___
+
+### renderTargets
+
+• **renderTargets**: `RenderTexture`[]
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L7)
+
+___
+
+### rtDescriptors
+
+• **rtDescriptors**: [`RTDescriptor`](RTDescriptor.md)[]
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L8)
+
+___
+
+### zPreTexture
+
+• **zPreTexture**: `RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L10)
+
+___
+
+### depthTexture
+
+• **depthTexture**: `RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L11)
+
+___
+
+### depthViewIndex
+
+• **depthViewIndex**: `number` = `0`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L13)
+
+___
+
+### depthCleanValue
+
+• **depthCleanValue**: `number` = `1`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L14)
+
+___
+
+### depthLoadOp
+
+• **depthLoadOp**: `GPULoadOp`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L15)
+
+___
+
+### isOutTarget
+
+• **isOutTarget**: `boolean` = `true`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L16)
+
+## Methods
+
+### clone2Frame
+
+▸ **clone2Frame**(`rtFrame`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rtFrame` | [`RTFrame`](RTFrame.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L26)
+
+___
+
+### clone
+
+▸ **clone**(): [`RTFrame`](RTFrame.md)
+
+#### Returns
+
+[`RTFrame`](RTFrame.md)
+
+#### Defined in
+
+[src/gfx/renderJob/frame/RTFrame.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/frame/RTFrame.ts#L41)
diff --git a/docs/api/classes/RTResourceConfig.md b/docs/api/classes/RTResourceConfig.md
new file mode 100644
index 00000000..4d6cf7cb
--- /dev/null
+++ b/docs/api/classes/RTResourceConfig.md
@@ -0,0 +1,106 @@
+# Class: RTResourceConfig
+
+### Constructors
+
+- [constructor](RTResourceConfig.md#constructor)
+
+### Properties
+
+- [compressGBufferTex\_NAME](RTResourceConfig.md#compressgbuffertex_name)
+- [colorBufferTex\_NAME](RTResourceConfig.md#colorbuffertex_name)
+- [positionBufferTex\_NAME](RTResourceConfig.md#positionbuffertex_name)
+- [normalBufferTex\_NAME](RTResourceConfig.md#normalbuffertex_name)
+- [materialBufferTex\_NAME](RTResourceConfig.md#materialbuffertex_name)
+- [zBufferTexture\_NAME](RTResourceConfig.md#zbuffertexture_name)
+- [zPreDepthTexture\_NAME](RTResourceConfig.md#zpredepthtexture_name)
+- [outTex\_NAME](RTResourceConfig.md#outtex_name)
+
+## Constructors
+
+### constructor
+
+• **new RTResourceConfig**(): [`RTResourceConfig`](RTResourceConfig.md)
+
+#### Returns
+
+[`RTResourceConfig`](RTResourceConfig.md)
+
+## Properties
+
+### compressGBufferTex\_NAME
+
+▪ `Static` **compressGBufferTex\_NAME**: `string` = `'compressGBufferTex_NAME'`
+
+#### Defined in
+
+[src/gfx/renderJob/config/RTResourceConfig.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/config/RTResourceConfig.ts#L2)
+
+___
+
+### colorBufferTex\_NAME
+
+▪ `Static` **colorBufferTex\_NAME**: `string` = `'colorBufferTex'`
+
+#### Defined in
+
+[src/gfx/renderJob/config/RTResourceConfig.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/config/RTResourceConfig.ts#L3)
+
+___
+
+### positionBufferTex\_NAME
+
+▪ `Static` **positionBufferTex\_NAME**: `string` = `'positionBufferTex'`
+
+#### Defined in
+
+[src/gfx/renderJob/config/RTResourceConfig.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/config/RTResourceConfig.ts#L4)
+
+___
+
+### normalBufferTex\_NAME
+
+▪ `Static` **normalBufferTex\_NAME**: `string` = `'normalBufferTex'`
+
+#### Defined in
+
+[src/gfx/renderJob/config/RTResourceConfig.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/config/RTResourceConfig.ts#L5)
+
+___
+
+### materialBufferTex\_NAME
+
+▪ `Static` **materialBufferTex\_NAME**: `string` = `'materialBufferTex'`
+
+#### Defined in
+
+[src/gfx/renderJob/config/RTResourceConfig.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/config/RTResourceConfig.ts#L6)
+
+___
+
+### zBufferTexture\_NAME
+
+▪ `Static` **zBufferTexture\_NAME**: `string` = `'zBufferTexture'`
+
+#### Defined in
+
+[src/gfx/renderJob/config/RTResourceConfig.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/config/RTResourceConfig.ts#L7)
+
+___
+
+### zPreDepthTexture\_NAME
+
+▪ `Static` **zPreDepthTexture\_NAME**: `string` = `'zPreDepthTexture'`
+
+#### Defined in
+
+[src/gfx/renderJob/config/RTResourceConfig.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/config/RTResourceConfig.ts#L8)
+
+___
+
+### outTex\_NAME
+
+▪ `Static` **outTex\_NAME**: `string` = `'outTex'`
+
+#### Defined in
+
+[src/gfx/renderJob/config/RTResourceConfig.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/config/RTResourceConfig.ts#L9)
diff --git a/docs/api/classes/Rand.md b/docs/api/classes/Rand.md
new file mode 100644
index 00000000..f85d3d4d
--- /dev/null
+++ b/docs/api/classes/Rand.md
@@ -0,0 +1,184 @@
+# Class: Rand
+
+'Rand' is a random number generator based on an improved xorshift algorithm,
+which is a modification of the Linear Congruential Generator (LCG) method.
+
+### Constructors
+
+- [constructor](Rand.md#constructor)
+
+### Accessors
+
+- [seed](Rand.md#seed)
+
+### Methods
+
+- [getFloatFromInt](Rand.md#getfloatfromint)
+- [getByteFromInt](Rand.md#getbytefromint)
+- [clone](Rand.md#clone)
+- [get](Rand.md#get)
+- [getFloat](Rand.md#getfloat)
+- [getSignedFloat](Rand.md#getsignedfloat)
+
+## Constructors
+
+### constructor
+
+• **new Rand**(`seed?`): [`Rand`](Rand.md)
+
+Create a random number generator object with a specified seed.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `seed` | `number` | `0` | Random seed |
+
+#### Returns
+
+[`Rand`](Rand.md)
+
+#### Defined in
+
+[src/math/Rand.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/math/Rand.ts#L18)
+
+## Accessors
+
+### seed
+
+• `get` **seed**(): `number`
+
+Random seed
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Rand.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/math/Rand.ts#L25)
+
+• `set` **seed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Rand.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/math/Rand.ts#L29)
+
+## Methods
+
+### getFloatFromInt
+
+▸ **getFloatFromInt**(`value`): `number`
+
+Convert an integer to a floating-point number
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `any` | integer |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Rand.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/math/Rand.ts#L41)
+
+___
+
+### getByteFromInt
+
+▸ **getByteFromInt**(`value`): `number`
+
+Converts an integer to a single-byte integer
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `any` | integer |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Rand.ts:51](https://github.com/Orillusion/orillusion/blob/main/src/math/Rand.ts#L51)
+
+___
+
+### clone
+
+▸ **clone**(): [`Rand`](Rand.md)
+
+Returns a new random number generator object with the same seed state as
+the current random number generator object
+
+#### Returns
+
+[`Rand`](Rand.md)
+
+#### Defined in
+
+[src/math/Rand.ts:61](https://github.com/Orillusion/orillusion/blob/main/src/math/Rand.ts#L61)
+
+___
+
+### get
+
+▸ **get**(): `number`
+
+Generate a random number
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Rand.ts:74](https://github.com/Orillusion/orillusion/blob/main/src/math/Rand.ts#L74)
+
+___
+
+### getFloat
+
+▸ **getFloat**(): `number`
+
+Randomly generate a floating-point number 0.0 to 1.0
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Rand.ts:86](https://github.com/Orillusion/orillusion/blob/main/src/math/Rand.ts#L86)
+
+___
+
+### getSignedFloat
+
+▸ **getSignedFloat**(): `number`
+
+Randomly generates signed floating-point numbers -1.0 to 1.0
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Rand.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/math/Rand.ts#L94)
diff --git a/docs/api/classes/Ray.md b/docs/api/classes/Ray.md
new file mode 100644
index 00000000..62863040
--- /dev/null
+++ b/docs/api/classes/Ray.md
@@ -0,0 +1,444 @@
+# Class: Ray
+
+Ray
+
+### Constructors
+
+- [constructor](Ray.md#constructor)
+
+### Properties
+
+- [origin](Ray.md#origin)
+- [length](Ray.md#length)
+
+### Accessors
+
+- [direction](Ray.md#direction)
+
+### Methods
+
+- [clone](Ray.md#clone)
+- [intersectBox](Ray.md#intersectbox)
+- [pointAt](Ray.md#pointat)
+- [copy](Ray.md#copy)
+- [setApproxDirection](Ray.md#setapproxdirection)
+- [setOrigin](Ray.md#setorigin)
+- [getOrigin](Ray.md#getorigin)
+- [getPoint](Ray.md#getpoint)
+- [sqrDistToPoint](Ray.md#sqrdisttopoint)
+- [applyMatrix](Ray.md#applymatrix)
+- [pointInTriangle](Ray.md#pointintriangle)
+- [intersectTriangle](Ray.md#intersecttriangle)
+- [intersectSphere](Ray.md#intersectsphere)
+- [intersectionSegment](Ray.md#intersectionsegment)
+
+## Constructors
+
+### constructor
+
+• **new Ray**(`origin?`, `dir?`): [`Ray`](Ray.md)
+
+Build a new ray object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `origin?` | [`Vector3`](Vector3.md) | Ray starting point |
+| `dir?` | [`Vector3`](Vector3.md) | Ray direction |
+
+#### Returns
+
+[`Ray`](Ray.md)
+
+#### Defined in
+
+[src/math/Ray.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L34)
+
+## Properties
+
+### origin
+
+• **origin**: [`Vector3`](Vector3.md)
+
+Ray starting point
+
+#### Defined in
+
+[src/math/Ray.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L16)
+
+___
+
+### length
+
+• **length**: `number` = `Number.MAX_VALUE`
+
+length
+
+#### Defined in
+
+[src/math/Ray.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L21)
+
+## Accessors
+
+### direction
+
+• `get` **direction**(): [`Vector3`](Vector3.md)
+
+Ray direction
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Ray.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L43)
+
+• `set` **direction**(`dir`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `dir` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Ray.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L47)
+
+## Methods
+
+### clone
+
+▸ **clone**(): [`Ray`](Ray.md)
+
+Clone a new Ray object
+
+#### Returns
+
+[`Ray`](Ray.md)
+
+#### Defined in
+
+[src/math/Ray.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L56)
+
+___
+
+### intersectBox
+
+▸ **intersectBox**(`box`, `target?`): [`Vector3`](Vector3.md)
+
+Determine whether it intersects a bounding box
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `box` | `IBound` | bounding box |
+| `target?` | [`Vector3`](Vector3.md) | - |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+whether intersect
+
+#### Defined in
+
+[src/math/Ray.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L69)
+
+___
+
+### pointAt
+
+▸ **pointAt**(`t`, `target?`): [`Vector3`](Vector3.md)
+
+Calculate a point on the ray
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `t` | `number` | Length scalar |
+| `target?` | [`Vector3`](Vector3.md) | output target |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+result
+
+#### Defined in
+
+[src/math/Ray.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L120)
+
+___
+
+### copy
+
+▸ **copy**(`src`): `this`
+
+Sets the ray to be a copy of the original ray
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `src` | [`Ray`](Ray.md) | Ray object source |
+
+#### Returns
+
+`this`
+
+New ray object
+
+#### Defined in
+
+[src/math/Ray.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L133)
+
+___
+
+### setApproxDirection
+
+▸ **setApproxDirection**(`dir`): `void`
+
+Fast to the approximate ray direction
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `dir` | [`Vector3`](Vector3.md) | direction |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Ray.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L145)
+
+___
+
+### setOrigin
+
+▸ **setOrigin**(`origin`): `void`
+
+Set ray origin
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `origin` | [`Vector3`](Vector3.md) | ray origin |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Ray.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L153)
+
+___
+
+### getOrigin
+
+▸ **getOrigin**(): [`Vector3`](Vector3.md)
+
+Get ray origin
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Ray.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L160)
+
+___
+
+### getPoint
+
+▸ **getPoint**(`t`): [`Vector3`](Vector3.md)
+
+Gets the point at the specified position on the ray
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `t` | `number` | Length position |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Returns a point at the specified location
+
+#### Defined in
+
+[src/math/Ray.ts:169](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L169)
+
+___
+
+### sqrDistToPoint
+
+▸ **sqrDistToPoint**(`P`): `number`
+
+Calculate the distance from a point
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `P` | [`Vector3`](Vector3.md) | Specify Point |
+
+#### Returns
+
+`number`
+
+result
+
+#### Defined in
+
+[src/math/Ray.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L179)
+
+___
+
+### applyMatrix
+
+▸ **applyMatrix**(`mat4`): `void`
+
+Applied matrix transformation
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `mat4` | [`Matrix4`](Matrix4.md) | matrix |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Ray.ts:195](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L195)
+
+___
+
+### pointInTriangle
+
+▸ **pointInTriangle**(`P`, `A`, `B`, `C`): `boolean`
+
+Calculates whether a specified point is inside a triangle
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `P` | [`Vector3`](Vector3.md) | point |
+| `A` | [`Vector3`](Vector3.md) | Triangle vertex 1 |
+| `B` | [`Vector3`](Vector3.md) | Triangle vertex 2 |
+| `C` | [`Vector3`](Vector3.md) | Triangle vertex 3 |
+
+#### Returns
+
+`boolean`
+
+whether it is inside a triangle
+
+#### Defined in
+
+[src/math/Ray.ts:212](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L212)
+
+___
+
+### intersectTriangle
+
+▸ **intersectTriangle**(`orig`, `dir`, `face`): [`Vector3`](Vector3.md)
+
+Determine whether a ray intersects a triangle
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `orig` | [`Vector3`](Vector3.md) | Ray starting point |
+| `dir` | [`Vector3`](Vector3.md) | Ray direction |
+| `face` | `Triangle` | triangle |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+point of intersection
+
+#### Defined in
+
+[src/math/Ray.ts:257](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L257)
+
+___
+
+### intersectSphere
+
+▸ **intersectSphere**(`o`, `dir`, `center`, `radius`): [`Vector3`](Vector3.md)
+
+Determine whether a ray intersects the sphere
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `o` | [`Vector3`](Vector3.md) | Ray starting point |
+| `dir` | [`Vector3`](Vector3.md) | Ray direction |
+| `center` | [`Vector3`](Vector3.md) | Sphere center |
+| `radius` | `number` | radius of sphericity |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+point of intersection
+
+#### Defined in
+
+[src/math/Ray.ts:320](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L320)
+
+___
+
+### intersectionSegment
+
+▸ **intersectionSegment**(`sega`, `segb`, `threshold`): `Object`
+
+A test of the intersection between a ray and
+a given line segment within a given tolerance (threshold)
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `sega` | [`Vector3`](Vector3.md) | The first point of a line segment used to test the intersection |
+| `segb` | [`Vector3`](Vector3.md) | The second point of a line segment used to test the intersection |
+| `threshold` | `number` | Margin, if the ray does not intersect the line segment but is close to the given threshold, the intersection is successful |
+
+#### Returns
+
+`Object`
+
+If there is an intersection, then the distance from the ray origin to the intersection, if there is no intersection, is -1
+
+| Name | Type |
+| :------ | :------ |
+| `out` | [`Vector3`](Vector3.md) |
+| `length` | `number` |
+
+#### Defined in
+
+[src/math/Ray.ts:352](https://github.com/Orillusion/orillusion/blob/main/src/math/Ray.ts#L352)
diff --git a/docs/api/classes/Rect.md b/docs/api/classes/Rect.md
new file mode 100644
index 00000000..2b6b7f5d
--- /dev/null
+++ b/docs/api/classes/Rect.md
@@ -0,0 +1,396 @@
+# Class: Rect
+
+Rectangular region
+
+### Constructors
+
+- [constructor](Rect.md#constructor)
+
+### Properties
+
+- [x](Rect.md#x)
+- [y](Rect.md#y)
+- [w](Rect.md#w)
+- [h](Rect.md#h)
+
+### Accessors
+
+- [width](Rect.md#width)
+- [height](Rect.md#height)
+
+### Methods
+
+- [pointInRect](Rect.md#pointinrect)
+- [clone](Rect.md#clone)
+- [copyFrom](Rect.md#copyfrom)
+- [copyTo](Rect.md#copyto)
+- [inner](Rect.md#inner)
+- [equal](Rect.md#equal)
+- [equalArea](Rect.md#equalarea)
+- [equalInnerArea](Rect.md#equalinnerarea)
+- [innerArea](Rect.md#innerarea)
+- [setTo](Rect.md#setto)
+
+## Constructors
+
+### constructor
+
+• **new Rect**(`x?`, `y?`, `width?`, `height?`): [`Rect`](Rect.md)
+
+Creates a new rectangular area object
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `x` | `number` | `0` | The x-coordinate of the rectangle |
+| `y` | `number` | `0` | The y coordinate of the rectangle |
+| `width` | `number` | `0` | Width of a rectangle |
+| `height` | `number` | `0` | Height of rectangle |
+
+#### Returns
+
+[`Rect`](Rect.md)
+
+#### Defined in
+
+[src/math/Rect.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L34)
+
+## Properties
+
+### x
+
+• **x**: `number`
+
+The x-coordinate of the rectangle
+
+#### Defined in
+
+[src/math/Rect.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L10)
+
+___
+
+### y
+
+• **y**: `number`
+
+The y-coordinate of the rectangle
+
+#### Defined in
+
+[src/math/Rect.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L15)
+
+___
+
+### w
+
+• **w**: `number`
+
+Width of a rectangle
+
+#### Defined in
+
+[src/math/Rect.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L20)
+
+___
+
+### h
+
+• **h**: `number`
+
+Height of rectangle
+
+#### Defined in
+
+[src/math/Rect.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L25)
+
+## Accessors
+
+### width
+
+• `get` **width**(): `number`
+
+Width of a rectangle
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Rect.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L44)
+
+• `set` **width**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Rect.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L48)
+
+___
+
+### height
+
+• `get` **height**(): `number`
+
+Height of rectangle
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Rect.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L55)
+
+• `set` **height**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Rect.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L59)
+
+## Methods
+
+### pointInRect
+
+▸ **pointInRect**(`x`, `y`, `lt_x`, `lt_y`, `rb_x`, `rb_y`): `boolean`
+
+Whether the point is within the specified area
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `x` | `number` | x value of point |
+| `y` | `number` | y value of point |
+| `lt_x` | `number` | The x value in the upper left corner |
+| `lt_y` | `number` | The y value in the upper left corner |
+| `rb_x` | `number` | The x value in the lower right corner |
+| `rb_y` | `number` | The y value in the lower right corner |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/Rect.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L73)
+
+___
+
+### clone
+
+▸ **clone**(): [`Rect`](Rect.md)
+
+Returns a new rectangular area object with the same properties as the current rectangular area
+
+#### Returns
+
+[`Rect`](Rect.md)
+
+#### Defined in
+
+[src/math/Rect.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L85)
+
+___
+
+### copyFrom
+
+▸ **copyFrom**(`rect`): `void`
+
+Copy the properties of the source object to this object
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rect` | [`Rect`](Rect.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Rect.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L94)
+
+___
+
+### copyTo
+
+▸ **copyTo**(`rect`): `void`
+
+Copy the properties of this object to the target object
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rect` | [`Rect`](Rect.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Rect.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L106)
+
+___
+
+### inner
+
+▸ **inner**(`x`, `y`): `boolean`
+
+Whether the point is in this area
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `x` | `number` | x value of point |
+| `y` | `number` | y value of point |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/Rect.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L116)
+
+___
+
+### equal
+
+▸ **equal**(`rectangle`): `boolean`
+
+Whether the current rectangle is equal to the target rectangle
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `rectangle` | [`Rect`](Rect.md) | Target rectangle |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/Rect.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L128)
+
+___
+
+### equalArea
+
+▸ **equalArea**(`x`, `y`, `width`, `height`): `boolean`
+
+Whether the current rectangle is equal to the target rectangle
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `x` | `number` | The x value of the rectangle |
+| `y` | `number` | The y value of the rectangle |
+| `width` | `number` | Rectangle width |
+| `height` | `number` | Rectangular height |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/Rect.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L140)
+
+___
+
+### equalInnerArea
+
+▸ **equalInnerArea**(`source`): `boolean`
+
+Whether this rectangle overlaps with the target object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `source` | [`Rect`](Rect.md) | Source object |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/Rect.ts:149](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L149)
+
+___
+
+### innerArea
+
+▸ **innerArea**(`source`, `target`): [`Rect`](Rect.md)
+
+Returns the overlap of two rectangles
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `source` | [`Rect`](Rect.md) | source object |
+| `target` | [`Rect`](Rect.md) | target object |
+
+#### Returns
+
+[`Rect`](Rect.md)
+
+#### Defined in
+
+[src/math/Rect.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L174)
+
+___
+
+### setTo
+
+▸ **setTo**(`x`, `y`, `width`, `height`): `void`
+
+Sets the properties of the rectangle
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `x` | `number` | x value |
+| `y` | `number` | y value |
+| `width` | `number` | Rectangle width |
+| `height` | `number` | Rectangular height |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Rect.ts:213](https://github.com/Orillusion/orillusion/blob/main/src/math/Rect.ts#L213)
diff --git a/docs/api/classes/Reference.md b/docs/api/classes/Reference.md
new file mode 100644
index 00000000..15506e41
--- /dev/null
+++ b/docs/api/classes/Reference.md
@@ -0,0 +1,153 @@
+# Class: Reference
+
+instance reference statistics module
+apply any instance , used full destroy
+
+### Constructors
+
+- [constructor](Reference.md#constructor)
+
+### Methods
+
+- [getInstance](Reference.md#getinstance)
+- [attached](Reference.md#attached)
+- [detached](Reference.md#detached)
+- [hasReference](Reference.md#hasreference)
+- [getReferenceCount](Reference.md#getreferencecount)
+- [getReference](Reference.md#getreference)
+
+## Constructors
+
+### constructor
+
+• **new Reference**(): [`Reference`](Reference.md)
+
+#### Returns
+
+[`Reference`](Reference.md)
+
+## Methods
+
+### getInstance
+
+▸ **getInstance**(): [`Reference`](Reference.md)
+
+#### Returns
+
+[`Reference`](Reference.md)
+
+#### Defined in
+
+[src/util/Reference.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/util/Reference.ts#L10)
+
+___
+
+### attached
+
+▸ **attached**(`ref`, `target`): `void`
+
+current instance attached from parent instance
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `ref` | `any` | reference current |
+| `target` | `any` | reference parent |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/Reference.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/util/Reference.ts#L20)
+
+___
+
+### detached
+
+▸ **detached**(`ref`, `target`): `void`
+
+current instance detached from parent instance
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `ref` | `any` | reference current |
+| `target` | `any` | reference parent |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/Reference.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/util/Reference.ts#L35)
+
+___
+
+### hasReference
+
+▸ **hasReference**(`ref`): `boolean`
+
+current instance has reference
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ref` | `any` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/util/Reference.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/util/Reference.ts#L45)
+
+___
+
+### getReferenceCount
+
+▸ **getReferenceCount**(`ref`): `number`
+
+get current instance reference count
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ref` | `any` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/util/Reference.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/util/Reference.ts#L58)
+
+___
+
+### getReference
+
+▸ **getReference**(`ref`): `Map`\<`any`, `any`\>
+
+get current instance reference from where
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ref` | `any` |
+
+#### Returns
+
+`Map`\<`any`, `any`\>
+
+#### Defined in
+
+[src/util/Reference.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/util/Reference.ts#L71)
diff --git a/docs/api/classes/Reflection.md b/docs/api/classes/Reflection.md
new file mode 100644
index 00000000..817f0a29
--- /dev/null
+++ b/docs/api/classes/Reflection.md
@@ -0,0 +1,1401 @@
+# Class: Reflection
+
+Sky Box Renderer Component
+
+## Hierarchy
+
+- `RenderNode`
+
+ ↳ **`Reflection`**
+
+ ↳↳ [`SphereReflection`](SphereReflection.md)
+
+### Constructors
+
+- [constructor](Reflection.md#constructor)
+
+### Properties
+
+- [object3D](Reflection.md#object3d)
+- [isDestroyed](Reflection.md#isdestroyed)
+- [gid](Reflection.md#gid)
+- [needUpdate](Reflection.md#needupdate)
+- [autoUpdate](Reflection.md#autoupdate)
+- [radius](Reflection.md#radius)
+- [instanceCount](Reflection.md#instancecount)
+- [lodLevel](Reflection.md#lodlevel)
+- [alwaysRender](Reflection.md#alwaysrender)
+- [instanceID](Reflection.md#instanceid)
+- [drawType](Reflection.md#drawtype)
+- [isRenderOrderChange](Reflection.md#isrenderorderchange)
+- [needSortOnCameraZ](Reflection.md#needsortoncameraz)
+- [isRecievePostEffectUI](Reflection.md#isrecieveposteffectui)
+
+### Accessors
+
+- [eventDispatcher](Reflection.md#eventdispatcher)
+- [isStart](Reflection.md#isstart)
+- [transform](Reflection.md#transform)
+- [enable](Reflection.md#enable)
+- [renderLayer](Reflection.md#renderlayer)
+- [geometry](Reflection.md#geometry)
+- [rendererMask](Reflection.md#renderermask)
+- [renderOrder](Reflection.md#renderorder)
+- [materials](Reflection.md#materials)
+- [castShadow](Reflection.md#castshadow)
+- [castGI](Reflection.md#castgi)
+- [castReflection](Reflection.md#castreflection)
+
+### Methods
+
+- [start](Reflection.md#start)
+- [stop](Reflection.md#stop)
+- [onUpdate](Reflection.md#onupdate)
+- [onLateUpdate](Reflection.md#onlateupdate)
+- [onBeforeUpdate](Reflection.md#onbeforeupdate)
+- [onCompute](Reflection.md#oncompute)
+- [onGraphic](Reflection.md#ongraphic)
+- [onParentChange](Reflection.md#onparentchange)
+- [onAddChild](Reflection.md#onaddchild)
+- [onRemoveChild](Reflection.md#onremovechild)
+- [cloneTo](Reflection.md#cloneto)
+- [init](Reflection.md#init)
+- [onEnable](Reflection.md#onenable)
+- [onDisable](Reflection.md#ondisable)
+- [renderPass2](Reflection.md#renderpass2)
+- [attachSceneOctree](Reflection.md#attachsceneoctree)
+- [detachSceneOctree](Reflection.md#detachsceneoctree)
+- [copyComponent](Reflection.md#copycomponent)
+- [addMask](Reflection.md#addmask)
+- [removeMask](Reflection.md#removemask)
+- [hasMask](Reflection.md#hasmask)
+- [addRendererMask](Reflection.md#addrenderermask)
+- [removeRendererMask](Reflection.md#removerenderermask)
+- [selfCloneMaterials](Reflection.md#selfclonematerials)
+- [renderPass](Reflection.md#renderpass)
+- [recordRenderPass2](Reflection.md#recordrenderpass2)
+- [preInit](Reflection.md#preinit)
+- [nodeUpdate](Reflection.md#nodeupdate)
+- [beforeDestroy](Reflection.md#beforedestroy)
+- [destroy](Reflection.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new Reflection**(): [`Reflection`](Reflection.md)
+
+#### Returns
+
+[`Reflection`](Reflection.md)
+
+#### Inherited from
+
+RenderNode.constructor
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+RenderNode.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+RenderNode.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### gid
+
+• **gid**: `number` = `0`
+
+#### Defined in
+
+[src/components/renderer/Reflection.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/Reflection.ts#L19)
+
+___
+
+### needUpdate
+
+• **needUpdate**: `boolean` = `true`
+
+#### Defined in
+
+[src/components/renderer/Reflection.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/Reflection.ts#L20)
+
+___
+
+### autoUpdate
+
+• **autoUpdate**: `boolean` = `false`
+
+#### Defined in
+
+[src/components/renderer/Reflection.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/Reflection.ts#L21)
+
+___
+
+### radius
+
+• **radius**: `number` = `500`
+
+#### Defined in
+
+[src/components/renderer/Reflection.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/Reflection.ts#L22)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+RenderNode.instanceCount
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+RenderNode.lodLevel
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+RenderNode.alwaysRender
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+RenderNode.instanceID
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+RenderNode.drawType
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+RenderNode.isRenderOrderChange
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+RenderNode.needSortOnCameraZ
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+RenderNode.isRecievePostEffectUI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+RenderNode.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+RenderNode.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+RenderNode.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### geometry
+
+• `get` **geometry**(): [`GeometryBase`](GeometryBase.md)
+
+#### Returns
+
+[`GeometryBase`](GeometryBase.md)
+
+#### Inherited from
+
+RenderNode.geometry
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L122)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryBase`](GeometryBase.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.geometry
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:126](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L126)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+RenderNode.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+RenderNode.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): [`Material`](Material.md)[]
+
+#### Returns
+
+[`Material`](Material.md)[]
+
+#### Inherited from
+
+RenderNode.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Material`](Material.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+## Methods
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.start
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### init
+
+▸ **init**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.init
+
+#### Defined in
+
+[src/components/renderer/Reflection.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/Reflection.ts#L23)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.onEnable
+
+#### Defined in
+
+[src/components/renderer/Reflection.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/Reflection.ts#L34)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.onDisable
+
+#### Defined in
+
+[src/components/renderer/Reflection.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/Reflection.ts#L38)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.renderPass2
+
+#### Defined in
+
+[src/components/renderer/Reflection.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/Reflection.ts#L42)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | [`Octree`](Octree.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.attachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.detachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+RenderNode.copyComponent
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:95](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L95)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.addMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.removeMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.hasMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.addRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.removeRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+RenderNode.selfCloneMaterials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `passType` | `PassType` |
+| `renderContext` | [`RenderContext`](RenderContext.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.renderPass
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L370)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.recordRenderPass2
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.preInit
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### nodeUpdate
+
+▸ **nodeUpdate**(`view`, `passType`, `renderPassState`, `clusterLightingBuffer?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `passType` | `PassType` |
+| `renderPassState` | `RendererPassState` |
+| `clusterLightingBuffer?` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.nodeUpdate
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:523](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L523)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.beforeDestroy
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.destroy
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:625](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L625)
diff --git a/docs/api/classes/ReflectionMaterial.md b/docs/api/classes/ReflectionMaterial.md
new file mode 100644
index 00000000..637a354b
--- /dev/null
+++ b/docs/api/classes/ReflectionMaterial.md
@@ -0,0 +1,1189 @@
+# Class: ReflectionMaterial
+
+Unlit Mateiral
+A non glossy surface material without specular highlights.
+
+## Hierarchy
+
+- [`Material`](Material.md)
+
+ ↳ **`ReflectionMaterial`**
+
+### Constructors
+
+- [constructor](ReflectionMaterial.md#constructor)
+
+### Properties
+
+- [instanceID](ReflectionMaterial.md#instanceid)
+- [name](ReflectionMaterial.md#name)
+- [enable](ReflectionMaterial.md#enable)
+
+### Accessors
+
+- [shader](ReflectionMaterial.md#shader)
+- [doubleSide](ReflectionMaterial.md#doubleside)
+- [castShadow](ReflectionMaterial.md#castshadow)
+- [acceptShadow](ReflectionMaterial.md#acceptshadow)
+- [castReflection](ReflectionMaterial.md#castreflection)
+- [blendMode](ReflectionMaterial.md#blendmode)
+- [depthCompare](ReflectionMaterial.md#depthcompare)
+- [transparent](ReflectionMaterial.md#transparent)
+- [cullMode](ReflectionMaterial.md#cullmode)
+- [depthWriteEnabled](ReflectionMaterial.md#depthwriteenabled)
+- [useBillboard](ReflectionMaterial.md#usebillboard)
+- [baseMap](ReflectionMaterial.md#basemap)
+- [baseColor](ReflectionMaterial.md#basecolor)
+- [reflectionIndex](ReflectionMaterial.md#reflectionindex)
+- [envMap](ReflectionMaterial.md#envmap)
+
+### Methods
+
+- [getPass](ReflectionMaterial.md#getpass)
+- [getAllPass](ReflectionMaterial.md#getallpass)
+- [clone](ReflectionMaterial.md#clone)
+- [destroy](ReflectionMaterial.md#destroy)
+- [setDefine](ReflectionMaterial.md#setdefine)
+- [setTexture](ReflectionMaterial.md#settexture)
+- [setStorageBuffer](ReflectionMaterial.md#setstoragebuffer)
+- [setUniformBuffer](ReflectionMaterial.md#setuniformbuffer)
+- [setUniformFloat](ReflectionMaterial.md#setuniformfloat)
+- [setUniformVector2](ReflectionMaterial.md#setuniformvector2)
+- [setUniformVector3](ReflectionMaterial.md#setuniformvector3)
+- [setUniformVector4](ReflectionMaterial.md#setuniformvector4)
+- [setUniformColor](ReflectionMaterial.md#setuniformcolor)
+- [getUniformFloat](ReflectionMaterial.md#getuniformfloat)
+- [getUniformV2](ReflectionMaterial.md#getuniformv2)
+- [getUniformV3](ReflectionMaterial.md#getuniformv3)
+- [getUniformV4](ReflectionMaterial.md#getuniformv4)
+- [getUniformColor](ReflectionMaterial.md#getuniformcolor)
+- [getTexture](ReflectionMaterial.md#gettexture)
+- [getStorageBuffer](ReflectionMaterial.md#getstoragebuffer)
+- [getStructStorageBuffer](ReflectionMaterial.md#getstructstoragebuffer)
+- [getUniformBuffer](ReflectionMaterial.md#getuniformbuffer)
+- [applyUniform](ReflectionMaterial.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new ReflectionMaterial**(): [`ReflectionMaterial`](ReflectionMaterial.md)
+
+#### Returns
+
+[`ReflectionMaterial`](ReflectionMaterial.md)
+
+#### Overrides
+
+[Material](Material.md).[constructor](Material.md#constructor)
+
+#### Defined in
+
+[src/materials/ReflectionMaterial.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/materials/ReflectionMaterial.ts#L20)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+Material Unique Identifier
+
+#### Inherited from
+
+[Material](Material.md).[instanceID](Material.md#instanceid)
+
+#### Defined in
+
+[src/materials/Material.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L19)
+
+___
+
+### name
+
+• **name**: `string`
+
+name of this material
+
+#### Inherited from
+
+[Material](Material.md).[name](Material.md#name)
+
+#### Defined in
+
+[src/materials/Material.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L25)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+[Material](Material.md).[enable](Material.md#enable)
+
+#### Defined in
+
+[src/materials/Material.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L27)
+
+## Accessors
+
+### shader
+
+• `get` **shader**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L41)
+
+• `set` **shader**(`shader`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shader` | [`Shader`](Shader.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L36)
+
+___
+
+### doubleSide
+
+• `get` **doubleSide**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L45)
+
+• `set` **doubleSide**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L49)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L53)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L57)
+
+___
+
+### acceptShadow
+
+• `get` **acceptShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L64)
+
+• `set` **acceptShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L68)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L77)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L81)
+
+___
+
+### blendMode
+
+• `get` **blendMode**(): [`BlendMode`](../enums/BlendMode.md)
+
+#### Returns
+
+[`BlendMode`](../enums/BlendMode.md)
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L85)
+
+• `set` **blendMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`BlendMode`](../enums/BlendMode.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L89)
+
+___
+
+### depthCompare
+
+• `get` **depthCompare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L93)
+
+• `set` **depthCompare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L97)
+
+___
+
+### transparent
+
+• `get` **transparent**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L102)
+
+• `set` **transparent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L106)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L113)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L117)
+
+___
+
+### depthWriteEnabled
+
+• `get` **depthWriteEnabled**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L128)
+
+• `set` **depthWriteEnabled**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L132)
+
+___
+
+### useBillboard
+
+• `set` **useBillboard**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.useBillboard
+
+#### Defined in
+
+[src/materials/Material.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L136)
+
+___
+
+### baseMap
+
+• `get` **baseMap**(): [`Texture`](Texture.md)
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/materials/ReflectionMaterial.ts:33](https://github.com/Orillusion/orillusion/blob/main/src/materials/ReflectionMaterial.ts#L33)
+
+• `set` **baseMap**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/ReflectionMaterial.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/materials/ReflectionMaterial.ts#L29)
+
+___
+
+### baseColor
+
+• `get` **baseColor**(): [`Color`](Color.md)
+
+get base color (tint color)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/materials/ReflectionMaterial.ts:51](https://github.com/Orillusion/orillusion/blob/main/src/materials/ReflectionMaterial.ts#L51)
+
+• `set` **baseColor**(`color`): `void`
+
+set base color (tint color)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `color` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/ReflectionMaterial.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/materials/ReflectionMaterial.ts#L40)
+
+___
+
+### reflectionIndex
+
+• `set` **reflectionIndex**(`i`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/ReflectionMaterial.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/materials/ReflectionMaterial.ts#L44)
+
+___
+
+### envMap
+
+• `set` **envMap**(`texture`): `void`
+
+set environment texture, usually referring to cubemap
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/ReflectionMaterial.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/materials/ReflectionMaterial.ts#L58)
+
+## Methods
+
+### getPass
+
+▸ **getPass**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get render pass by renderType
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getPass](Material.md#getpass)
+
+#### Defined in
+
+[src/materials/Material.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L145)
+
+___
+
+### getAllPass
+
+▸ **getAllPass**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get all color render pass
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getAllPass](Material.md#getallpass)
+
+#### Defined in
+
+[src/materials/Material.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L153)
+
+___
+
+### clone
+
+▸ **clone**(): [`Material`](Material.md)
+
+clone one material
+
+#### Returns
+
+[`Material`](Material.md)
+
+Material
+
+#### Inherited from
+
+[Material](Material.md).[clone](Material.md#clone)
+
+#### Defined in
+
+[src/materials/Material.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L161)
+
+___
+
+### destroy
+
+▸ **destroy**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[destroy](Material.md#destroy)
+
+#### Defined in
+
+[src/materials/Material.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L168)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`define`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `define` | `string` |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setDefine](Material.md#setdefine)
+
+#### Defined in
+
+[src/materials/Material.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L174)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`propertyName`, `texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setTexture](Material.md#settexture)
+
+#### Defined in
+
+[src/materials/Material.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L178)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setStorageBuffer](Material.md#setstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L182)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformBuffer](Material.md#setuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L186)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformFloat](Material.md#setuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L191)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector2](Material.md#setuniformvector2)
+
+#### Defined in
+
+[src/materials/Material.ts:195](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L195)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector3](Material.md#setuniformvector3)
+
+#### Defined in
+
+[src/materials/Material.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L199)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector4](Material.md#setuniformvector4)
+
+#### Defined in
+
+[src/materials/Material.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L203)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformColor](Material.md#setuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L207)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`str`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformFloat](Material.md#getuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L211)
+
+___
+
+### getUniformV2
+
+▸ **getUniformV2**(`str`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV2](Material.md#getuniformv2)
+
+#### Defined in
+
+[src/materials/Material.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L215)
+
+___
+
+### getUniformV3
+
+▸ **getUniformV3**(`str`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV3](Material.md#getuniformv3)
+
+#### Defined in
+
+[src/materials/Material.ts:219](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L219)
+
+___
+
+### getUniformV4
+
+▸ **getUniformV4**(`str`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV4](Material.md#getuniformv4)
+
+#### Defined in
+
+[src/materials/Material.ts:223](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L223)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`str`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformColor](Material.md#getuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L227)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`str`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Material](Material.md).[getTexture](Material.md#gettexture)
+
+#### Defined in
+
+[src/materials/Material.ts:231](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L231)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`str`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Material](Material.md).[getStorageBuffer](Material.md#getstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:235](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L235)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getStructStorageBuffer](Material.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:239](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L239)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformBuffer](Material.md#getuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:243](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L243)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[applyUniform](Material.md#applyuniform)
+
+#### Defined in
+
+[src/materials/Material.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L247)
diff --git a/docs/api/classes/ReflectionShader.md b/docs/api/classes/ReflectionShader.md
new file mode 100644
index 00000000..6ddd555f
--- /dev/null
+++ b/docs/api/classes/ReflectionShader.md
@@ -0,0 +1,1148 @@
+# Class: ReflectionShader
+
+## Hierarchy
+
+- [`Shader`](Shader.md)
+
+ ↳ **`ReflectionShader`**
+
+### Constructors
+
+- [constructor](ReflectionShader.md#constructor)
+
+### Properties
+
+- [computes](ReflectionShader.md#computes)
+- [passShader](ReflectionShader.md#passshader)
+
+### Accessors
+
+- [\_MainTex](ReflectionShader.md#_maintex)
+- [\_BumpMap](ReflectionShader.md#_bumpmap)
+- [\_MaskTex](ReflectionShader.md#_masktex)
+- [\_UVTransform](ReflectionShader.md#_uvtransform)
+- [\_Metallic](ReflectionShader.md#_metallic)
+- [\_Roughness](ReflectionShader.md#_roughness)
+- [\_MainColor](ReflectionShader.md#_maincolor)
+- [\_AlphaCutoff](ReflectionShader.md#_alphacutoff)
+- [\_DoubleSidedEnable](ReflectionShader.md#_doublesidedenable)
+- [\_SurfaceType](ReflectionShader.md#_surfacetype)
+- [\_AlphaCutoffEnable](ReflectionShader.md#_alphacutoffenable)
+
+### Methods
+
+- [addRenderPass](ReflectionShader.md#addrenderpass)
+- [removeShader](ReflectionShader.md#removeshader)
+- [removeShaderByIndex](ReflectionShader.md#removeshaderbyindex)
+- [getSubShaders](ReflectionShader.md#getsubshaders)
+- [hasSubShaders](ReflectionShader.md#hassubshaders)
+- [getDefaultShaders](ReflectionShader.md#getdefaultshaders)
+- [getDefaultColorShader](ReflectionShader.md#getdefaultcolorshader)
+- [setDefine](ReflectionShader.md#setdefine)
+- [hasDefine](ReflectionShader.md#hasdefine)
+- [deleteDefine](ReflectionShader.md#deletedefine)
+- [setUniform](ReflectionShader.md#setuniform)
+- [setUniformFloat](ReflectionShader.md#setuniformfloat)
+- [setUniformVector2](ReflectionShader.md#setuniformvector2)
+- [setUniformVector3](ReflectionShader.md#setuniformvector3)
+- [setUniformVector4](ReflectionShader.md#setuniformvector4)
+- [setUniformColor](ReflectionShader.md#setuniformcolor)
+- [getUniform](ReflectionShader.md#getuniform)
+- [getUniformFloat](ReflectionShader.md#getuniformfloat)
+- [getUniformVector2](ReflectionShader.md#getuniformvector2)
+- [getUniformVector3](ReflectionShader.md#getuniformvector3)
+- [getUniformVector4](ReflectionShader.md#getuniformvector4)
+- [getUniformColor](ReflectionShader.md#getuniformcolor)
+- [setTexture](ReflectionShader.md#settexture)
+- [getTexture](ReflectionShader.md#gettexture)
+- [setUniformBuffer](ReflectionShader.md#setuniformbuffer)
+- [getUniformBuffer](ReflectionShader.md#getuniformbuffer)
+- [setStorageBuffer](ReflectionShader.md#setstoragebuffer)
+- [getStorageBuffer](ReflectionShader.md#getstoragebuffer)
+- [setStructStorageBuffer](ReflectionShader.md#setstructstoragebuffer)
+- [getStructStorageBuffer](ReflectionShader.md#getstructstoragebuffer)
+- [noticeValueChange](ReflectionShader.md#noticevaluechange)
+- [destroy](ReflectionShader.md#destroy)
+- [clone](ReflectionShader.md#clone)
+- [applyUniform](ReflectionShader.md#applyuniform)
+- [setDefault](ReflectionShader.md#setdefault)
+
+## Constructors
+
+### constructor
+
+• **new ReflectionShader**(): [`ReflectionShader`](ReflectionShader.md)
+
+#### Returns
+
+[`ReflectionShader`](ReflectionShader.md)
+
+#### Overrides
+
+[Shader](Shader.md).[constructor](Shader.md#constructor)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/ReflectionShader.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/ReflectionShader.ts#L13)
+
+## Properties
+
+### computes
+
+• **computes**: [`RenderShaderCompute`](RenderShaderCompute.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[computes](Shader.md#computes)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L19)
+
+___
+
+### passShader
+
+• **passShader**: `Map`\<`PassType`, [`RenderShaderPass`](RenderShaderPass.md)[]\>
+
+#### Inherited from
+
+[Shader](Shader.md).[passShader](Shader.md#passshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L21)
+
+## Accessors
+
+### \_MainTex
+
+• `set` **_MainTex**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/ReflectionShader.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/ReflectionShader.ts#L41)
+
+___
+
+### \_BumpMap
+
+• `set` **_BumpMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/ReflectionShader.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/ReflectionShader.ts#L45)
+
+___
+
+### \_MaskTex
+
+• `set` **_MaskTex**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/ReflectionShader.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/ReflectionShader.ts#L49)
+
+___
+
+### \_UVTransform
+
+• `set` **_UVTransform**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/ReflectionShader.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/ReflectionShader.ts#L53)
+
+___
+
+### \_Metallic
+
+• `set` **_Metallic**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/ReflectionShader.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/ReflectionShader.ts#L57)
+
+___
+
+### \_Roughness
+
+• `set` **_Roughness**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/ReflectionShader.ts:61](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/ReflectionShader.ts#L61)
+
+___
+
+### \_MainColor
+
+• `set` **_MainColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/ReflectionShader.ts:66](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/ReflectionShader.ts#L66)
+
+___
+
+### \_AlphaCutoff
+
+• `set` **_AlphaCutoff**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/ReflectionShader.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/ReflectionShader.ts#L70)
+
+___
+
+### \_DoubleSidedEnable
+
+• `set` **_DoubleSidedEnable**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/ReflectionShader.ts:74](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/ReflectionShader.ts#L74)
+
+___
+
+### \_SurfaceType
+
+• `set` **_SurfaceType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/ReflectionShader.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/ReflectionShader.ts#L79)
+
+___
+
+### \_AlphaCutoffEnable
+
+• `set` **_AlphaCutoffEnable**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/ReflectionShader.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/ReflectionShader.ts#L88)
+
+## Methods
+
+### addRenderPass
+
+▸ **addRenderPass**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[addRenderPass](Shader.md#addrenderpass)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L28)
+
+___
+
+### removeShader
+
+▸ **removeShader**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShader](Shader.md#removeshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L38)
+
+___
+
+### removeShaderByIndex
+
+▸ **removeShaderByIndex**(`passType`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `passType` | `PassType` | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShaderByIndex](Shader.md#removeshaderbyindex)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L52)
+
+___
+
+### getSubShaders
+
+▸ **getSubShaders**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getSubShaders](Shader.md#getsubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L63)
+
+___
+
+### hasSubShaders
+
+▸ **hasSubShaders**(`passType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasSubShaders](Shader.md#hassubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L67)
+
+___
+
+### getDefaultShaders
+
+▸ **getDefaultShaders**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultShaders](Shader.md#getdefaultshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L72)
+
+___
+
+### getDefaultColorShader
+
+▸ **getDefaultColorShader**(): [`RenderShaderPass`](RenderShaderPass.md)
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultColorShader](Shader.md#getdefaultcolorshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L76)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setDefine](Shader.md#setdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L80)
+
+___
+
+### hasDefine
+
+▸ **hasDefine**(`arg0`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasDefine](Shader.md#hasdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L88)
+
+___
+
+### deleteDefine
+
+▸ **deleteDefine**(`arg0`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[deleteDefine](Shader.md#deletedefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L99)
+
+___
+
+### setUniform
+
+▸ **setUniform**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniform](Shader.md#setuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L107)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformFloat](Shader.md#setuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L115)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector2](Shader.md#setuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L123)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector3](Shader.md#setuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L131)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector4](Shader.md#setuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L139)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformColor](Shader.md#setuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L147)
+
+___
+
+### getUniform
+
+▸ **getUniform**(`arg0`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniform](Shader.md#getuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L155)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`arg0`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformFloat](Shader.md#getuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:159](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L159)
+
+___
+
+### getUniformVector2
+
+▸ **getUniformVector2**(`arg0`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector2](Shader.md#getuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:163](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L163)
+
+___
+
+### getUniformVector3
+
+▸ **getUniformVector3**(`arg0`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector3](Shader.md#getuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:167](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L167)
+
+___
+
+### getUniformVector4
+
+▸ **getUniformVector4**(`arg0`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector4](Shader.md#getuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:171](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L171)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`arg0`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformColor](Shader.md#getuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:175](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L175)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setTexture](Shader.md#settexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L179)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`arg0`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getTexture](Shader.md#gettexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:188](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L188)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformBuffer](Shader.md#setuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:192](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L192)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformBuffer](Shader.md#getuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L200)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStorageBuffer](Shader.md#setstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:204](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L204)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`arg0`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getStorageBuffer](Shader.md#getstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:212](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L212)
+
+___
+
+### setStructStorageBuffer
+
+▸ **setStructStorageBuffer**\<`T`\>(`arg0`, `arg1`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StructStorageGPUBuffer`](StructStorageGPUBuffer.md)\<`T`\> |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStructStorageBuffer](Shader.md#setstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L216)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getStructStorageBuffer](Shader.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L224)
+
+___
+
+### noticeValueChange
+
+▸ **noticeValueChange**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[noticeValueChange](Shader.md#noticevaluechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L228)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[destroy](Shader.md#destroy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:236](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L236)
+
+___
+
+### clone
+
+▸ **clone**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[clone](Shader.md#clone)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L240)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[applyUniform](Shader.md#applyuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:249](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L249)
+
+___
+
+### setDefault
+
+▸ **setDefault**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/ReflectionShader.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/ReflectionShader.ts#L34)
diff --git a/docs/api/classes/RenderContext.md b/docs/api/classes/RenderContext.md
new file mode 100644
index 00000000..9823a08c
--- /dev/null
+++ b/docs/api/classes/RenderContext.md
@@ -0,0 +1,230 @@
+# Class: RenderContext
+
+### Constructors
+
+- [constructor](RenderContext.md#constructor)
+
+### Properties
+
+- [command](RenderContext.md#command)
+- [encoder](RenderContext.md#encoder)
+
+### Accessors
+
+- [rendererPassState](RenderContext.md#rendererpassstate)
+
+### Methods
+
+- [clean](RenderContext.md#clean)
+- [beginContinueRendererPassState](RenderContext.md#begincontinuerendererpassstate)
+- [beginOpaqueRenderPass](RenderContext.md#beginopaquerenderpass)
+- [beginTransparentRenderPass](RenderContext.md#begintransparentrenderpass)
+- [specialtRenderPass](RenderContext.md#specialtrenderpass)
+- [endRenderPass](RenderContext.md#endrenderpass)
+- [begineNewCommand](RenderContext.md#beginenewcommand)
+- [endCommand](RenderContext.md#endcommand)
+- [beginNewEncoder](RenderContext.md#beginnewencoder)
+- [endEncoder](RenderContext.md#endencoder)
+
+## Constructors
+
+### constructor
+
+• **new RenderContext**(`rtFrame`): [`RenderContext`](RenderContext.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rtFrame` | [`RTFrame`](RTFrame.md) |
+
+#### Returns
+
+[`RenderContext`](RenderContext.md)
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/RenderContext.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/RenderContext.ts#L13)
+
+## Properties
+
+### command
+
+• **command**: `GPUCommandEncoder`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/RenderContext.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/RenderContext.ts#L8)
+
+___
+
+### encoder
+
+• **encoder**: `GPURenderPassEncoder`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/RenderContext.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/RenderContext.ts#L9)
+
+## Accessors
+
+### rendererPassState
+
+• `get` **rendererPassState**(): `RendererPassState`
+
+#### Returns
+
+`RendererPassState`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/RenderContext.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/RenderContext.ts#L45)
+
+## Methods
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/RenderContext.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/RenderContext.ts#L18)
+
+___
+
+### beginContinueRendererPassState
+
+▸ **beginContinueRendererPassState**(`color_loadOp?`, `depth_loadOp?`): `RendererPassState`
+
+continue renderer pass state
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `color_loadOp` | `GPULoadOp` | `'load'` |
+| `depth_loadOp` | `GPULoadOp` | `'load'` |
+
+#### Returns
+
+`RendererPassState`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/RenderContext.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/RenderContext.ts#L27)
+
+___
+
+### beginOpaqueRenderPass
+
+▸ **beginOpaqueRenderPass**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/RenderContext.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/RenderContext.ts#L49)
+
+___
+
+### beginTransparentRenderPass
+
+▸ **beginTransparentRenderPass**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/RenderContext.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/RenderContext.ts#L55)
+
+___
+
+### specialtRenderPass
+
+▸ **specialtRenderPass**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/RenderContext.ts:61](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/RenderContext.ts#L61)
+
+___
+
+### endRenderPass
+
+▸ **endRenderPass**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/RenderContext.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/RenderContext.ts#L67)
+
+___
+
+### begineNewCommand
+
+▸ **begineNewCommand**(): `GPUCommandEncoder`
+
+#### Returns
+
+`GPUCommandEncoder`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/RenderContext.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/RenderContext.ts#L72)
+
+___
+
+### endCommand
+
+▸ **endCommand**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/RenderContext.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/RenderContext.ts#L77)
+
+___
+
+### beginNewEncoder
+
+▸ **beginNewEncoder**(): `GPURenderPassEncoder`
+
+#### Returns
+
+`GPURenderPassEncoder`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/RenderContext.ts:82](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/RenderContext.ts#L82)
+
+___
+
+### endEncoder
+
+▸ **endEncoder**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/RenderContext.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/RenderContext.ts#L87)
diff --git a/docs/api/classes/RenderShaderCollect.md b/docs/api/classes/RenderShaderCollect.md
new file mode 100644
index 00000000..fc9f199b
--- /dev/null
+++ b/docs/api/classes/RenderShaderCollect.md
@@ -0,0 +1,85 @@
+# Class: RenderShaderCollect
+
+### Constructors
+
+- [constructor](RenderShaderCollect.md#constructor)
+
+### Properties
+
+- [renderShaderUpdateList](RenderShaderCollect.md#rendershaderupdatelist)
+- [renderNodeList](RenderShaderCollect.md#rendernodelist)
+
+### Methods
+
+- [collect\_add](RenderShaderCollect.md#collect_add)
+- [collect\_remove](RenderShaderCollect.md#collect_remove)
+
+## Constructors
+
+### constructor
+
+• **new RenderShaderCollect**(): [`RenderShaderCollect`](RenderShaderCollect.md)
+
+#### Returns
+
+[`RenderShaderCollect`](RenderShaderCollect.md)
+
+## Properties
+
+### renderShaderUpdateList
+
+• **renderShaderUpdateList**: `Map`\<[`View3D`](View3D.md), [`RenderShaderList`](../types/RenderShaderList.md)\>
+
+#### Defined in
+
+[src/gfx/renderJob/collect/RenderShaderCollect.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/RenderShaderCollect.ts#L8)
+
+___
+
+### renderNodeList
+
+• **renderNodeList**: `Map`\<[`View3D`](View3D.md), `Map`\<`string`, `RenderNode`\>\>
+
+#### Defined in
+
+[src/gfx/renderJob/collect/RenderShaderCollect.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/RenderShaderCollect.ts#L9)
+
+## Methods
+
+### collect\_add
+
+▸ **collect_add**(`node`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `node` | `RenderNode` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/collect/RenderShaderCollect.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/RenderShaderCollect.ts#L11)
+
+___
+
+### collect\_remove
+
+▸ **collect_remove**(`node`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `node` | `RenderNode` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/collect/RenderShaderCollect.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/RenderShaderCollect.ts#L43)
diff --git a/docs/api/classes/RenderShaderCompute.md b/docs/api/classes/RenderShaderCompute.md
new file mode 100644
index 00000000..912f84ae
--- /dev/null
+++ b/docs/api/classes/RenderShaderCompute.md
@@ -0,0 +1,44 @@
+# Class: RenderShaderCompute
+
+### Constructors
+
+- [constructor](RenderShaderCompute.md#constructor)
+
+### Methods
+
+- [onUpdate](RenderShaderCompute.md#onupdate)
+
+## Constructors
+
+### constructor
+
+• **new RenderShaderCompute**(`shaderStr`, `sourceShader`): [`RenderShaderCompute`](RenderShaderCompute.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shaderStr` | `string` |
+| `sourceShader` | [`Shader`](Shader.md) |
+
+#### Returns
+
+[`RenderShaderCompute`](RenderShaderCompute.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/compute/RenderShaderCompute.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/compute/RenderShaderCompute.ts#L11)
+
+## Methods
+
+### onUpdate
+
+▸ **onUpdate**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/compute/RenderShaderCompute.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/compute/RenderShaderCompute.ts#L25)
diff --git a/docs/api/classes/RenderShaderPass.md b/docs/api/classes/RenderShaderPass.md
new file mode 100644
index 00000000..cdbe8680
--- /dev/null
+++ b/docs/api/classes/RenderShaderPass.md
@@ -0,0 +1,1633 @@
+# Class: RenderShaderPass
+
+## Hierarchy
+
+- [`ShaderPassBase`](ShaderPassBase.md)
+
+ ↳ **`RenderShaderPass`**
+
+### Constructors
+
+- [constructor](RenderShaderPass.md#constructor)
+
+### Properties
+
+- [passType](RenderShaderPass.md#passtype)
+- [useRz](RenderShaderPass.md#userz)
+- [vsName](RenderShaderPass.md#vsname)
+- [fsName](RenderShaderPass.md#fsname)
+- [shaderState](RenderShaderPass.md#shaderstate)
+- [textures](RenderShaderPass.md#textures)
+- [pipeline](RenderShaderPass.md#pipeline)
+- [bindGroupLayouts](RenderShaderPass.md#bindgrouplayouts)
+- [envMap](RenderShaderPass.md#envmap)
+- [prefilterMap](RenderShaderPass.md#prefiltermap)
+- [reflectionMap](RenderShaderPass.md#reflectionmap)
+- [outBufferMask](RenderShaderPass.md#outbuffermask)
+- [instanceID](RenderShaderPass.md#instanceid)
+- [shaderVariant](RenderShaderPass.md#shadervariant)
+- [vsEntryPoint](RenderShaderPass.md#vsentrypoint)
+- [fsEntryPoint](RenderShaderPass.md#fsentrypoint)
+- [bindGroups](RenderShaderPass.md#bindgroups)
+- [shaderReflection](RenderShaderPass.md#shaderreflection)
+- [defineValue](RenderShaderPass.md#definevalue)
+- [constValues](RenderShaderPass.md#constvalues)
+- [uniforms](RenderShaderPass.md#uniforms)
+- [materialDataUniformBuffer](RenderShaderPass.md#materialdatauniformbuffer)
+
+### Accessors
+
+- [renderOrder](RenderShaderPass.md#renderorder)
+- [doubleSide](RenderShaderPass.md#doubleside)
+- [depthWriteEnabled](RenderShaderPass.md#depthwriteenabled)
+- [cullMode](RenderShaderPass.md#cullmode)
+- [frontFace](RenderShaderPass.md#frontface)
+- [depthBias](RenderShaderPass.md#depthbias)
+- [topology](RenderShaderPass.md#topology)
+- [blendMode](RenderShaderPass.md#blendmode)
+- [depthCompare](RenderShaderPass.md#depthcompare)
+- [baseColor](RenderShaderPass.md#basecolor)
+
+### Methods
+
+- [setShaderEntry](RenderShaderPass.md#setshaderentry)
+- [setUniform](RenderShaderPass.md#setuniform)
+- [setTexture](RenderShaderPass.md#settexture)
+- [getTexture](RenderShaderPass.md#gettexture)
+- [genRenderPipeline](RenderShaderPass.md#genrenderpipeline)
+- [reBuild](RenderShaderPass.md#rebuild)
+- [apply](RenderShaderPass.md#apply)
+- [preCompile](RenderShaderPass.md#precompile)
+- [applyPostDefine](RenderShaderPass.md#applypostdefine)
+- [setBindGroup](RenderShaderPass.md#setbindgroup)
+- [destroy](RenderShaderPass.md#destroy)
+- [destroyShader](RenderShaderPass.md#destroyshader)
+- [getShader](RenderShaderPass.md#getshader)
+- [createShader](RenderShaderPass.md#createshader)
+- [noticeShaderChange](RenderShaderPass.md#noticeshaderchange)
+- [noticeValueChange](RenderShaderPass.md#noticevaluechange)
+- [setStorageBuffer](RenderShaderPass.md#setstoragebuffer)
+- [setStructStorageBuffer](RenderShaderPass.md#setstructstoragebuffer)
+- [setUniformBuffer](RenderShaderPass.md#setuniformbuffer)
+- [setDefine](RenderShaderPass.md#setdefine)
+- [hasDefine](RenderShaderPass.md#hasdefine)
+- [deleteDefine](RenderShaderPass.md#deletedefine)
+- [setUniformFloat](RenderShaderPass.md#setuniformfloat)
+- [setUniformVector2](RenderShaderPass.md#setuniformvector2)
+- [setUniformVector3](RenderShaderPass.md#setuniformvector3)
+- [setUniformVector4](RenderShaderPass.md#setuniformvector4)
+- [setUniformColor](RenderShaderPass.md#setuniformcolor)
+- [setUniformArray](RenderShaderPass.md#setuniformarray)
+- [getUniform](RenderShaderPass.md#getuniform)
+- [getUniformFloat](RenderShaderPass.md#getuniformfloat)
+- [getUniformVector2](RenderShaderPass.md#getuniformvector2)
+- [getUniformVector3](RenderShaderPass.md#getuniformvector3)
+- [getUniformVector4](RenderShaderPass.md#getuniformvector4)
+- [getUniformColor](RenderShaderPass.md#getuniformcolor)
+- [getBuffer](RenderShaderPass.md#getbuffer)
+- [applyUniform](RenderShaderPass.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new RenderShaderPass**(`vs`, `fs`): [`RenderShaderPass`](RenderShaderPass.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `vs` | `string` |
+| `fs` | `string` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)
+
+#### Overrides
+
+[ShaderPassBase](ShaderPassBase.md).[constructor](ShaderPassBase.md#constructor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:86](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L86)
+
+## Properties
+
+### passType
+
+• **passType**: `PassType` = `PassType.COLOR`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L34)
+
+___
+
+### useRz
+
+• **useRz**: `boolean` = `false`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L36)
+
+___
+
+### vsName
+
+• **vsName**: `string`
+
+Vertex shader name
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L41)
+
+___
+
+### fsName
+
+• **fsName**: `string`
+
+Fragment shader name
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L46)
+
+___
+
+### shaderState
+
+• **shaderState**: `ShaderState`
+
+State of the shader
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:51](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L51)
+
+___
+
+### textures
+
+• **textures**: `Object`
+
+The collection of textures used in shading
+
+#### Index signature
+
+▪ [name: `string`]: [`Texture`](Texture.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L56)
+
+___
+
+### pipeline
+
+• **pipeline**: `GPURenderPipeline`
+
+Render pipeline
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:61](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L61)
+
+___
+
+### bindGroupLayouts
+
+• **bindGroupLayouts**: `GPUBindGroupLayout`[]
+
+BindGroup layout
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:66](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L66)
+
+___
+
+### envMap
+
+• **envMap**: [`Texture`](Texture.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L70)
+
+___
+
+### prefilterMap
+
+• **prefilterMap**: [`Texture`](Texture.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L72)
+
+___
+
+### reflectionMap
+
+• **reflectionMap**: [`Texture`](Texture.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L73)
+
+___
+
+### outBufferMask
+
+• **outBufferMask**: `Vector4`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L84)
+
+___
+
+### instanceID
+
+• `Readonly` **instanceID**: `string`
+
+Shader Unique instance id
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[instanceID](ShaderPassBase.md#instanceid)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L21)
+
+___
+
+### shaderVariant
+
+• **shaderVariant**: `string`
+
+Shader variant value
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[shaderVariant](ShaderPassBase.md#shadervariant)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L26)
+
+___
+
+### vsEntryPoint
+
+• **vsEntryPoint**: `string`
+
+Vertex stage entry point name
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[vsEntryPoint](ShaderPassBase.md#vsentrypoint)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L31)
+
+___
+
+### fsEntryPoint
+
+• **fsEntryPoint**: `string`
+
+Fragment stage entry point name
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[fsEntryPoint](ShaderPassBase.md#fsentrypoint)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L36)
+
+___
+
+### bindGroups
+
+• **bindGroups**: `GPUBindGroup`[]
+
+BindGroup collection
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[bindGroups](ShaderPassBase.md#bindgroups)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L41)
+
+___
+
+### shaderReflection
+
+• **shaderReflection**: `ShaderReflection`
+
+Shader reflection info
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[shaderReflection](ShaderPassBase.md#shaderreflection)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L46)
+
+___
+
+### defineValue
+
+• **defineValue**: `Object`
+
+The defined syntax value of the Shader when it is precompiled
+
+#### Index signature
+
+▪ [name: `string`]: `any`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[defineValue](ShaderPassBase.md#definevalue)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:51](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L51)
+
+___
+
+### constValues
+
+• **constValues**: `Object`
+
+The constant value of the Shader when it is precompiled
+
+#### Index signature
+
+▪ [name: `string`]: `any`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[constValues](ShaderPassBase.md#constvalues)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L56)
+
+___
+
+### uniforms
+
+• **uniforms**: `Object`
+
+Uniforms data collection
+
+#### Index signature
+
+▪ [name: `string`]: `UniformNode`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[uniforms](ShaderPassBase.md#uniforms)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:61](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L61)
+
+___
+
+### materialDataUniformBuffer
+
+• **materialDataUniformBuffer**: [`MaterialDataUniformGPUBuffer`](MaterialDataUniformGPUBuffer.md)
+
+Uniform data for materials
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[materialDataUniformBuffer](ShaderPassBase.md#materialdatauniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:66](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L66)
+
+## Accessors
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+Blend mode
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L121)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:125](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L125)
+
+___
+
+### doubleSide
+
+• `get` **doubleSide**(): `boolean`
+
+Cull mode
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L135)
+
+• `set` **doubleSide**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L139)
+
+___
+
+### depthWriteEnabled
+
+• `get` **depthWriteEnabled**(): `boolean`
+
+depthWriteEnabled mode
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:150](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L150)
+
+• `set` **depthWriteEnabled**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:154](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L154)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+get render face cull mode
+
+#### Returns
+
+`GPUCullMode`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L164)
+
+• `set` **cullMode**(`value`): `void`
+
+set render face cull mode
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:171](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L171)
+
+___
+
+### frontFace
+
+• `get` **frontFace**(): `GPUFrontFace`
+
+get front face mode
+
+#### Returns
+
+`GPUFrontFace`
+
+**`GPUFront Face`**
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L182)
+
+• `set` **frontFace**(`value`): `void`
+
+set front face mode
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFrontFace` |
+
+#### Returns
+
+`void`
+
+**`GPUFront Face`**
+
+value
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L190)
+
+___
+
+### depthBias
+
+• `get` **depthBias**(): `number`
+
+Depth bias
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L200)
+
+• `set` **depthBias**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:204](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L204)
+
+___
+
+### topology
+
+• `get` **topology**(): `GPUPrimitiveTopology`
+
+Primitive topology
+
+#### Returns
+
+`GPUPrimitiveTopology`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:214](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L214)
+
+• `set` **topology**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUPrimitiveTopology` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:218](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L218)
+
+___
+
+### blendMode
+
+• `get` **blendMode**(): [`BlendMode`](../enums/BlendMode.md)
+
+Blend mode
+
+#### Returns
+
+[`BlendMode`](../enums/BlendMode.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L228)
+
+• `set` **blendMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`BlendMode`](../enums/BlendMode.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L232)
+
+___
+
+### depthCompare
+
+• `get` **depthCompare**(): `GPUCompareFunction`
+
+Depth compare function
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:245](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L245)
+
+• `set` **depthCompare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:249](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L249)
+
+___
+
+### baseColor
+
+• `get` **baseColor**(): [`Color`](Color.md)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:301](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L301)
+
+• `set` **baseColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:305](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L305)
+
+## Methods
+
+### setShaderEntry
+
+▸ **setShaderEntry**(`vsEntryPoint?`, `fsEntryPoint?`): `void`
+
+Sets the entry point names for the RenderShader vertex phase and fragment phase
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `vsEntryPoint` | `string` | `''` |
+| `fsEntryPoint` | `string` | `''` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:261](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L261)
+
+___
+
+### setUniform
+
+▸ **setUniform**(`name`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `value` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ShaderPassBase](ShaderPassBase.md).[setUniform](ShaderPassBase.md#setuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:271](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L271)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`name`, `texture`): `void`
+
+Set the texture used in the Render Shader code
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | Name in the shader code |
+| `texture` | [`Texture`](Texture.md) | Texture object |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:281](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L281)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`name`): [`Texture`](Texture.md)
+
+Get the texture used in the Render Shader code
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | Name in the shader code |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+Texture object
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:314](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L314)
+
+___
+
+### genRenderPipeline
+
+▸ **genRenderPipeline**(`geometry`, `renderPassState`): `void`
+
+Create a rendering pipeline
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `geometry` | [`GeometryBase`](GeometryBase.md) |
+| `renderPassState` | `RendererPassState` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:323](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L323)
+
+___
+
+### reBuild
+
+▸ **reBuild**(`geometry`, `rendererPassState`): `void`
+
+Recompile the shader and create the rendering pipeline
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `geometry` | [`GeometryBase`](GeometryBase.md) |
+| `rendererPassState` | `RendererPassState` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:333](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L333)
+
+___
+
+### apply
+
+▸ **apply**(`geometry`, `rendererPassState`, `noticeFun?`): `void`
+
+Apply render shader state value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `geometry` | [`GeometryBase`](GeometryBase.md) |
+| `rendererPassState` | `RendererPassState` |
+| `noticeFun?` | `Function` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:347](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L347)
+
+___
+
+### preCompile
+
+▸ **preCompile**(`geometry`): `void`
+
+Precompile the shader code
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `geometry` | [`GeometryBase`](GeometryBase.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:374](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L374)
+
+___
+
+### applyPostDefine
+
+▸ **applyPostDefine**(`shader`, `renderPassState`): `string`
+
+Apply defines syntax values
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shader` | `string` |
+| `renderPassState` | `RendererPassState` |
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:387](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L387)
+
+___
+
+### setBindGroup
+
+▸ **setBindGroup**(`groupIndex`, `group`): `void`
+
+Set GPUBindGroup to the specified index slot
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `groupIndex` | `number` |
+| `group` | `GPUBindGroup` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:415](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L415)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+Destroy and release render shader related resources
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ShaderPassBase](ShaderPassBase.md).[destroy](ShaderPassBase.md#destroy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:949](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L949)
+
+___
+
+### destroyShader
+
+▸ **destroyShader**(`instanceID`): `void`
+
+Destroy a RenderShader object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `instanceID` | `string` | instance ID of the RenderShader |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:992](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L992)
+
+___
+
+### getShader
+
+▸ **getShader**(`instanceID`): [`RenderShaderPass`](RenderShaderPass.md)
+
+Get the RenderShader object by specifying the RenderShader instance ID
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `instanceID` | `string` | instance ID of the RenderShader |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)
+
+RenderShader object
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:1005](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L1005)
+
+___
+
+### createShader
+
+▸ **createShader**(`vs`, `fs`): `string`
+
+Create a RenderShader with vertex shaders and fragment shaders
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `vs` | `string` | Vertex shader name |
+| `fs` | `string` | Fragment shader name |
+
+#### Returns
+
+`string`
+
+Returns the instance ID of the RenderShader
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/RenderShaderPass.ts:1015](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/RenderShaderPass.ts#L1015)
+
+___
+
+### noticeShaderChange
+
+▸ **noticeShaderChange**(): `void`
+
+notice shader change
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[noticeShaderChange](ShaderPassBase.md#noticeshaderchange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L83)
+
+___
+
+### noticeValueChange
+
+▸ **noticeValueChange**(): `void`
+
+notice shader state change
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[noticeValueChange](ShaderPassBase.md#noticevaluechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L90)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`name`, `buffer`): `void`
+
+set storage gpu buffer
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | buffer name |
+| `buffer` | [`StorageGPUBuffer`](StorageGPUBuffer.md) | storage useAge gpu buffer |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[setStorageBuffer](ShaderPassBase.md#setstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L99)
+
+___
+
+### setStructStorageBuffer
+
+▸ **setStructStorageBuffer**\<`T`\>(`name`, `buffer`): `void`
+
+set struct storage gpu buffer
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | buffer name |
+| `buffer` | [`StructStorageGPUBuffer`](StructStorageGPUBuffer.md)\<`T`\> | struct storage useAge gpu buffer |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[setStructStorageBuffer](ShaderPassBase.md#setstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L113)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`name`, `buffer`): `void`
+
+set uniform gpu buffer min size 256
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `buffer` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[setUniformBuffer](ShaderPassBase.md#setuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:127](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L127)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`defineName`, `value`): `void`
+
+set define value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `defineName` | `string` |
+| `value` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[setDefine](ShaderPassBase.md#setdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:141](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L141)
+
+___
+
+### hasDefine
+
+▸ **hasDefine**(`defineName`): `boolean`
+
+Whether there is a define key
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `defineName` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[hasDefine](ShaderPassBase.md#hasdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L155)
+
+___
+
+### deleteDefine
+
+▸ **deleteDefine**(`defineName`): `void`
+
+delete define value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `defineName` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[deleteDefine](ShaderPassBase.md#deletedefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:163](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L163)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`name`, `value`): `void`
+
+set uniform float value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[setUniformFloat](ShaderPassBase.md#setuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L173)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`name`, `value`): `void`
+
+set uniform vector2 value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `value` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[setUniformVector2](ShaderPassBase.md#setuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:187](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L187)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`name`, `value`): `void`
+
+set uniform vector3 value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[setUniformVector3](ShaderPassBase.md#setuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:201](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L201)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`name`, `value`): `void`
+
+set uniform vector4 value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[setUniformVector4](ShaderPassBase.md#setuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:214](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L214)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`name`, `value`): `void`
+
+set uniform color value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[setUniformColor](ShaderPassBase.md#setuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L227)
+
+___
+
+### setUniformArray
+
+▸ **setUniformArray**(`name`, `value`): `void`
+
+set uniform array value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `value` | `Float32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[setUniformArray](ShaderPassBase.md#setuniformarray)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L240)
+
+___
+
+### getUniform
+
+▸ **getUniform**(`name`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[getUniform](ShaderPassBase.md#getuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:256](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L256)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[getUniformFloat](ShaderPassBase.md#getuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:260](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L260)
+
+___
+
+### getUniformVector2
+
+▸ **getUniformVector2**(`name`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[getUniformVector2](ShaderPassBase.md#getuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:264](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L264)
+
+___
+
+### getUniformVector3
+
+▸ **getUniformVector3**(`name`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[getUniformVector3](ShaderPassBase.md#getuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:268](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L268)
+
+___
+
+### getUniformVector4
+
+▸ **getUniformVector4**(`name`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[getUniformVector4](ShaderPassBase.md#getuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:272](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L272)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`name`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[getUniformColor](ShaderPassBase.md#getuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:276](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L276)
+
+___
+
+### getBuffer
+
+▸ **getBuffer**(`name`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[getBuffer](ShaderPassBase.md#getbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:280](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L280)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ShaderPassBase](ShaderPassBase.md).[applyUniform](ShaderPassBase.md#applyuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:288](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L288)
diff --git a/docs/api/classes/RendererMap.md b/docs/api/classes/RendererMap.md
new file mode 100644
index 00000000..8081193d
--- /dev/null
+++ b/docs/api/classes/RendererMap.md
@@ -0,0 +1,94 @@
+# Class: RendererMap
+
+### Constructors
+
+- [constructor](RendererMap.md#constructor)
+
+### Methods
+
+- [addRenderer](RendererMap.md#addrenderer)
+- [getRenderer](RendererMap.md#getrenderer)
+- [getAllRenderer](RendererMap.md#getallrenderer)
+- [getAllPassRenderer](RendererMap.md#getallpassrenderer)
+
+## Constructors
+
+### constructor
+
+• **new RendererMap**(): [`RendererMap`](RendererMap.md)
+
+#### Returns
+
+[`RendererMap`](RendererMap.md)
+
+#### Defined in
+
+[src/gfx/renderJob/jobs/RenderMap.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/jobs/RenderMap.ts#L11)
+
+## Methods
+
+### addRenderer
+
+▸ **addRenderer**(`renderer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `renderer` | `RendererBase` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/jobs/RenderMap.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/jobs/RenderMap.ts#L16)
+
+___
+
+### getRenderer
+
+▸ **getRenderer**(`passType`): `RendererBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+`RendererBase`
+
+#### Defined in
+
+[src/gfx/renderJob/jobs/RenderMap.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/jobs/RenderMap.ts#L27)
+
+___
+
+### getAllRenderer
+
+▸ **getAllRenderer**(): `Map`\<`PassType`, `RendererBase`\>
+
+#### Returns
+
+`Map`\<`PassType`, `RendererBase`\>
+
+#### Defined in
+
+[src/gfx/renderJob/jobs/RenderMap.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/jobs/RenderMap.ts#L35)
+
+___
+
+### getAllPassRenderer
+
+▸ **getAllPassRenderer**(): `RendererBase`[]
+
+#### Returns
+
+`RendererBase`[]
+
+#### Defined in
+
+[src/gfx/renderJob/jobs/RenderMap.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/jobs/RenderMap.ts#L39)
diff --git a/docs/api/classes/Res.md b/docs/api/classes/Res.md
new file mode 100644
index 00000000..a944d31a
--- /dev/null
+++ b/docs/api/classes/Res.md
@@ -0,0 +1,934 @@
+# Class: Res
+
+Resource management classes for textures, materials, models, and preset bodies.
+
+### Constructors
+
+- [constructor](Res.md#constructor)
+
+### Properties
+
+- [normalTexture](Res.md#normaltexture)
+- [maskTexture](Res.md#masktexture)
+- [whiteTexture](Res.md#whitetexture)
+- [blackTexture](Res.md#blacktexture)
+- [redTexture](Res.md#redtexture)
+- [blueTexture](Res.md#bluetexture)
+- [greenTexture](Res.md#greentexture)
+- [yellowTexture](Res.md#yellowtexture)
+- [grayTexture](Res.md#graytexture)
+- [defaultSky](Res.md#defaultsky)
+- [defaultGUITexture](Res.md#defaultguitexture)
+- [defaultGUISprite](Res.md#defaultguisprite)
+- [defaultMaterial](Res.md#defaultmaterial)
+
+### Methods
+
+- [getGltf](Res.md#getgltf)
+- [addObj](Res.md#addobj)
+- [getObj](Res.md#getobj)
+- [addTexture](Res.md#addtexture)
+- [getTexture](Res.md#gettexture)
+- [addGeometry](Res.md#addgeometry)
+- [getGeometry](Res.md#getgeometry)
+- [addMat](Res.md#addmat)
+- [getMat](Res.md#getmat)
+- [addPrefab](Res.md#addprefab)
+- [getPrefab](Res.md#getprefab)
+- [addAtlas](Res.md#addatlas)
+- [getAtlas](Res.md#getatlas)
+- [getGUISprite](Res.md#getguisprite)
+- [load](Res.md#load)
+- [loadGltf](Res.md#loadgltf)
+- [loadObj](Res.md#loadobj)
+- [loadB3DM](Res.md#loadb3dm)
+- [loadI3DM](Res.md#loadi3dm)
+- [loadTexture](Res.md#loadtexture)
+- [loadBitmapTextures](Res.md#loadbitmaptextures)
+- [loadHDRTexture](Res.md#loadhdrtexture)
+- [loadHDRTextureCube](Res.md#loadhdrtexturecube)
+- [loadLDRTextureCube](Res.md#loadldrtexturecube)
+- [loadTextureCubeMaps](Res.md#loadtexturecubemaps)
+- [loadTextureCubeStd](Res.md#loadtexturecubestd)
+- [loadJSON](Res.md#loadjson)
+- [loadFont](Res.md#loadfont)
+- [loadAtlas](Res.md#loadatlas)
+- [createTexture](Res.md#createtexture)
+- [fillColor](Res.md#fillcolor)
+- [initDefault](Res.md#initdefault)
+
+## Constructors
+
+### constructor
+
+• **new Res**(): [`Res`](Res.md)
+
+#### Returns
+
+[`Res`](Res.md)
+
+#### Defined in
+
+[src/assets/Res.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L50)
+
+## Properties
+
+### normalTexture
+
+• **normalTexture**: [`Uint8ArrayTexture`](Uint8ArrayTexture.md)
+
+normal texture
+
+#### Defined in
+
+[src/assets/Res.ts:435](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L435)
+
+___
+
+### maskTexture
+
+• **maskTexture**: [`Uint8ArrayTexture`](Uint8ArrayTexture.md)
+
+#### Defined in
+
+[src/assets/Res.ts:436](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L436)
+
+___
+
+### whiteTexture
+
+• **whiteTexture**: [`Uint8ArrayTexture`](Uint8ArrayTexture.md)
+
+#### Defined in
+
+[src/assets/Res.ts:437](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L437)
+
+___
+
+### blackTexture
+
+• **blackTexture**: [`Uint8ArrayTexture`](Uint8ArrayTexture.md)
+
+#### Defined in
+
+[src/assets/Res.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L438)
+
+___
+
+### redTexture
+
+• **redTexture**: [`Uint8ArrayTexture`](Uint8ArrayTexture.md)
+
+#### Defined in
+
+[src/assets/Res.ts:439](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L439)
+
+___
+
+### blueTexture
+
+• **blueTexture**: [`Uint8ArrayTexture`](Uint8ArrayTexture.md)
+
+#### Defined in
+
+[src/assets/Res.ts:440](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L440)
+
+___
+
+### greenTexture
+
+• **greenTexture**: [`Uint8ArrayTexture`](Uint8ArrayTexture.md)
+
+#### Defined in
+
+[src/assets/Res.ts:441](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L441)
+
+___
+
+### yellowTexture
+
+• **yellowTexture**: [`Uint8ArrayTexture`](Uint8ArrayTexture.md)
+
+#### Defined in
+
+[src/assets/Res.ts:442](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L442)
+
+___
+
+### grayTexture
+
+• **grayTexture**: [`Uint8ArrayTexture`](Uint8ArrayTexture.md)
+
+#### Defined in
+
+[src/assets/Res.ts:443](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L443)
+
+___
+
+### defaultSky
+
+• **defaultSky**: [`HDRTextureCube`](HDRTextureCube.md)
+
+#### Defined in
+
+[src/assets/Res.ts:445](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L445)
+
+___
+
+### defaultGUITexture
+
+• **defaultGUITexture**: `GUITexture`
+
+#### Defined in
+
+[src/assets/Res.ts:447](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L447)
+
+___
+
+### defaultGUISprite
+
+• **defaultGUISprite**: [`GUISprite`](GUISprite.md)
+
+#### Defined in
+
+[src/assets/Res.ts:448](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L448)
+
+___
+
+### defaultMaterial
+
+• **defaultMaterial**: [`LitMaterial`](LitMaterial.md)
+
+#### Defined in
+
+[src/assets/Res.ts:449](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L449)
+
+## Methods
+
+### getGltf
+
+▸ **getGltf**(`url`): `GLTF_Info`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `url` | `string` |
+
+#### Returns
+
+`GLTF_Info`
+
+#### Defined in
+
+[src/assets/Res.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L62)
+
+___
+
+### addObj
+
+▸ **addObj**(`url`, `obj`): `void`
+
+add a obj with reference of url
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | file path |
+| `obj` | `any` | - |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/assets/Res.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L71)
+
+___
+
+### getObj
+
+▸ **getObj**(`url`): `any`
+
+get obj by url
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | file path |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/assets/Res.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L80)
+
+___
+
+### addTexture
+
+▸ **addTexture**(`url`, `texture`): `void`
+
+add a texture with reference of url
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | file path |
+| `texture` | [`Texture`](Texture.md) | source texture |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/assets/Res.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L89)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`url`): [`Texture`](Texture.md)
+
+get texture by url
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | file path |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/assets/Res.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L98)
+
+___
+
+### addGeometry
+
+▸ **addGeometry**(`url`, `geo`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `url` | `string` |
+| `geo` | [`GeometryBase`](GeometryBase.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/assets/Res.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L102)
+
+___
+
+### getGeometry
+
+▸ **getGeometry**(`url`): [`GeometryBase`](GeometryBase.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `url` | `string` |
+
+#### Returns
+
+[`GeometryBase`](GeometryBase.md)
+
+#### Defined in
+
+[src/assets/Res.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L106)
+
+___
+
+### addMat
+
+▸ **addMat**(`name`, `mat`): `Map`\<`string`, [`Material`](Material.md)\>
+
+add a material with reference of name
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | material name |
+| `mat` | [`Material`](Material.md) | target material |
+
+#### Returns
+
+`Map`\<`string`, [`Material`](Material.md)\>
+
+#### Defined in
+
+[src/assets/Res.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L115)
+
+___
+
+### getMat
+
+▸ **getMat**(`name`): [`Material`](Material.md)
+
+get material by name
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | material name |
+
+#### Returns
+
+[`Material`](Material.md)
+
+#### Defined in
+
+[src/assets/Res.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L124)
+
+___
+
+### addPrefab
+
+▸ **addPrefab**(`name`, `rootScene`): `void`
+
+add prefab with reference name
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | prefab name |
+| `rootScene` | [`Object3D`](Object3D.md) | root object of prefab |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/assets/Res.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L133)
+
+___
+
+### getPrefab
+
+▸ **getPrefab**(`name`): [`Object3D`](Object3D.md)
+
+get prefab by name
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | prefab name |
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/assets/Res.ts:142](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L142)
+
+___
+
+### addAtlas
+
+▸ **addAtlas**(`name`, `atlas`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `atlas` | [`GUIAtlasTexture`](GUIAtlasTexture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/assets/Res.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L147)
+
+___
+
+### getAtlas
+
+▸ **getAtlas**(`name`): [`GUIAtlasTexture`](GUIAtlasTexture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`GUIAtlasTexture`](GUIAtlasTexture.md)
+
+#### Defined in
+
+[src/assets/Res.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L152)
+
+___
+
+### getGUISprite
+
+▸ **getGUISprite**(`id`): [`GUISprite`](GUISprite.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `string` |
+
+#### Returns
+
+[`GUISprite`](GUISprite.md)
+
+#### Defined in
+
+[src/assets/Res.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L156)
+
+___
+
+### load
+
+▸ **load**\<`T`\>(`url`, `c`, `loaderFunctions?`): `Promise`\<`any`\>
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `ParserBase` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `url` | `string` |
+| `c` | [`Parser`](../types/Parser.md)\<`T`\> |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) |
+
+#### Returns
+
+`Promise`\<`any`\>
+
+#### Defined in
+
+[src/assets/Res.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L165)
+
+___
+
+### loadGltf
+
+▸ **loadGltf**(`url`, `loaderFunctions?`): `Promise`\<[`Object3D`](Object3D.md)\>
+
+load a gltf file
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | the url of file |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | callback |
+
+#### Returns
+
+`Promise`\<[`Object3D`](Object3D.md)\>
+
+#### Defined in
+
+[src/assets/Res.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L178)
+
+___
+
+### loadObj
+
+▸ **loadObj**(`url`, `loaderFunctions?`): `Promise`\<[`Object3D`](Object3D.md)\>
+
+load obj file
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | obj file path |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | callback |
+
+#### Returns
+
+`Promise`\<[`Object3D`](Object3D.md)\>
+
+#### Defined in
+
+[src/assets/Res.ts:205](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L205)
+
+___
+
+### loadB3DM
+
+▸ **loadB3DM**(`url`, `loaderFunctions?`, `userData?`): `Promise`\<[`Object3D`](Object3D.md)\>
+
+load b3dm file by url
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | path of file |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | callback |
+| `userData?` | `any` | - |
+
+#### Returns
+
+`Promise`\<[`Object3D`](Object3D.md)\>
+
+#### Defined in
+
+[src/assets/Res.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L228)
+
+___
+
+### loadI3DM
+
+▸ **loadI3DM**(`url`, `loaderFunctions?`, `userData?`): `Promise`\<[`Object3D`](Object3D.md)\>
+
+load i3dm file by url
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | path of i3dm file |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | callback |
+| `userData?` | `any` | - |
+
+#### Returns
+
+`Promise`\<[`Object3D`](Object3D.md)\>
+
+#### Defined in
+
+[src/assets/Res.ts:245](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L245)
+
+___
+
+### loadTexture
+
+▸ **loadTexture**(`url`, `loaderFunctions?`, `flipY?`): `Promise`\<[`Texture`](Texture.md)\>
+
+load texture by url
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | texture path |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | callback |
+| `flipY?` | `boolean` | use flip y or not |
+
+#### Returns
+
+`Promise`\<[`Texture`](Texture.md)\>
+
+#### Defined in
+
+[src/assets/Res.ts:263](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L263)
+
+___
+
+### loadBitmapTextures
+
+▸ **loadBitmapTextures**(`urls`, `count?`, `loaderFunctions?`, `flipY?`): `Promise`\<[`BitmapTexture2D`](BitmapTexture2D.md)[]\>
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `urls` | `string`[] | `undefined` |
+| `count` | `number` | `5` |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | `undefined` |
+| `flipY?` | `boolean` | `undefined` |
+
+#### Returns
+
+`Promise`\<[`BitmapTexture2D`](BitmapTexture2D.md)[]\>
+
+#### Defined in
+
+[src/assets/Res.ts:296](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L296)
+
+___
+
+### loadHDRTexture
+
+▸ **loadHDRTexture**(`url`, `loaderFunctions?`): `Promise`\<[`Texture`](Texture.md)\>
+
+load a hdr texture
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | texture url |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | callback |
+
+#### Returns
+
+`Promise`\<[`Texture`](Texture.md)\>
+
+#### Defined in
+
+[src/assets/Res.ts:313](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L313)
+
+___
+
+### loadHDRTextureCube
+
+▸ **loadHDRTextureCube**(`url`, `loaderFunctions?`): `Promise`\<[`Texture`](Texture.md)\>
+
+load hdr cube texture
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | file url |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | callback |
+
+#### Returns
+
+`Promise`\<[`Texture`](Texture.md)\>
+
+#### Defined in
+
+[src/assets/Res.ts:331](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L331)
+
+___
+
+### loadLDRTextureCube
+
+▸ **loadLDRTextureCube**(`url`, `loaderFunctions?`): `Promise`\<[`Texture`](Texture.md)\>
+
+load ldr cube texture
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | file path |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | callback |
+
+#### Returns
+
+`Promise`\<[`Texture`](Texture.md)\>
+
+#### Defined in
+
+[src/assets/Res.ts:347](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L347)
+
+___
+
+### loadTextureCubeMaps
+
+▸ **loadTextureCubeMaps**(`urls`): `Promise`\<[`Texture`](Texture.md)\>
+
+load texture data from array of web url.
+make sure there are six images in a group,
+and the order is: [+X, -X, +Y, -Y, +Z, -Z]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `urls` | `string`[] |
+
+#### Returns
+
+`Promise`\<[`Texture`](Texture.md)\>
+
+#### Defined in
+
+[src/assets/Res.ts:363](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L363)
+
+___
+
+### loadTextureCubeStd
+
+▸ **loadTextureCubeStd**(`url`, `loaderFunctions?`): `Promise`\<[`Texture`](Texture.md)\>
+
+load texture data from url.
+the image is assembled from six images into cross shaped image.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | the path of image |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | - |
+
+#### Returns
+
+`Promise`\<[`Texture`](Texture.md)\>
+
+#### Defined in
+
+[src/assets/Res.ts:380](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L380)
+
+___
+
+### loadJSON
+
+▸ **loadJSON**(`url`, `loaderFunctions?`): `Promise`\<`void` \| `object`\>
+
+load json data from url.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | the path of image |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | - |
+
+#### Returns
+
+`Promise`\<`void` \| `object`\>
+
+#### Defined in
+
+[src/assets/Res.ts:394](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L394)
+
+___
+
+### loadFont
+
+▸ **loadFont**(`url`, `loaderFunctions?`, `userData?`): `Promise`\<[`FontInfo`](FontInfo.md)\>
+
+load font file by url
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | font file url |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | callback |
+| `userData?` | `any` | - |
+
+#### Returns
+
+`Promise`\<[`FontInfo`](FontInfo.md)\>
+
+#### Defined in
+
+[src/assets/Res.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L412)
+
+___
+
+### loadAtlas
+
+▸ **loadAtlas**(`url`, `loaderFunctions?`): `Promise`\<[`FontInfo`](FontInfo.md)\>
+
+load a atlas file by url
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | file path |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | callback |
+
+#### Returns
+
+`Promise`\<[`FontInfo`](FontInfo.md)\>
+
+#### Defined in
+
+[src/assets/Res.ts:426](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L426)
+
+___
+
+### createTexture
+
+▸ **createTexture**(`width`, `height`, `r`, `g`, `b`, `a`, `name?`): [`Uint8ArrayTexture`](Uint8ArrayTexture.md)
+
+create a texture
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `width` | `number` | width of texture |
+| `height` | `number` | height of texture |
+| `r` | `number` | component-red |
+| `g` | `number` | component-green |
+| `b` | `number` | component-blue |
+| `a` | `number` | component-alpha(0 for transparent,1 for opaque) |
+| `name?` | `string` | name string |
+
+#### Returns
+
+[`Uint8ArrayTexture`](Uint8ArrayTexture.md)
+
+#### Defined in
+
+[src/assets/Res.ts:462](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L462)
+
+___
+
+### fillColor
+
+▸ **fillColor**(`array`, `w`, `h`, `r`, `g`, `b`, `a`): `void`
+
+fill slod color to this texture
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `array` | `any` | data of texture |
+| `w` | `number` | width of texture |
+| `h` | `number` | height of texture |
+| `r` | `number` | component-red |
+| `g` | `number` | component-green |
+| `b` | `number` | component-blue |
+| `a` | `number` | component-alpha(0 for transparent,1 for opaque) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/assets/Res.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L486)
+
+___
+
+### initDefault
+
+▸ **initDefault**(): `void`
+
+Initialize a common texture object. Provide a universal solid color texture object.
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/assets/Res.ts:501](https://github.com/Orillusion/orillusion/blob/main/src/assets/Res.ts#L501)
diff --git a/docs/api/classes/RotationControlComponents.md b/docs/api/classes/RotationControlComponents.md
new file mode 100644
index 00000000..70aec41e
--- /dev/null
+++ b/docs/api/classes/RotationControlComponents.md
@@ -0,0 +1,805 @@
+# Class: RotationControlComponents
+
+Components are used to attach functionality to object3D, it has an owner object3D.
+The component can receive update events at each frame.
+
+## Hierarchy
+
+- [`TransformControllerBaseComponent`](TransformControllerBaseComponent.md)
+
+ ↳ **`RotationControlComponents`**
+
+### Constructors
+
+- [constructor](RotationControlComponents.md#constructor)
+
+### Properties
+
+- [object3D](RotationControlComponents.md#object3d)
+- [isDestroyed](RotationControlComponents.md#isdestroyed)
+
+### Accessors
+
+- [eventDispatcher](RotationControlComponents.md#eventdispatcher)
+- [isStart](RotationControlComponents.md#isstart)
+- [transform](RotationControlComponents.md#transform)
+- [enable](RotationControlComponents.md#enable)
+- [target](RotationControlComponents.md#target)
+- [mX](RotationControlComponents.md#mx)
+- [mY](RotationControlComponents.md#my)
+- [mZ](RotationControlComponents.md#mz)
+- [transformSpaceMode](RotationControlComponents.md#transformspacemode)
+
+### Methods
+
+- [stop](RotationControlComponents.md#stop)
+- [onLateUpdate](RotationControlComponents.md#onlateupdate)
+- [onBeforeUpdate](RotationControlComponents.md#onbeforeupdate)
+- [onCompute](RotationControlComponents.md#oncompute)
+- [onGraphic](RotationControlComponents.md#ongraphic)
+- [onParentChange](RotationControlComponents.md#onparentchange)
+- [onAddChild](RotationControlComponents.md#onaddchild)
+- [onRemoveChild](RotationControlComponents.md#onremovechild)
+- [cloneTo](RotationControlComponents.md#cloneto)
+- [copyComponent](RotationControlComponents.md#copycomponent)
+- [beforeDestroy](RotationControlComponents.md#beforedestroy)
+- [destroy](RotationControlComponents.md#destroy)
+- [onMouseDown](RotationControlComponents.md#onmousedown)
+- [onMouseUp](RotationControlComponents.md#onmouseup)
+- [init](RotationControlComponents.md#init)
+- [start](RotationControlComponents.md#start)
+- [onEnable](RotationControlComponents.md#onenable)
+- [onDisable](RotationControlComponents.md#ondisable)
+- [reset](RotationControlComponents.md#reset)
+- [onMouseMove](RotationControlComponents.md#onmousemove)
+- [onUpdate](RotationControlComponents.md#onupdate)
+
+## Constructors
+
+### constructor
+
+• **new RotationControlComponents**(): [`RotationControlComponents`](RotationControlComponents.md)
+
+#### Returns
+
+[`RotationControlComponents`](RotationControlComponents.md)
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[constructor](TransformControllerBaseComponent.md#constructor)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L29)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[object3D](TransformControllerBaseComponent.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[isDestroyed](TransformControllerBaseComponent.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TransformControllerBaseComponent.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+TransformControllerBaseComponent.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+TransformControllerBaseComponent.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TransformControllerBaseComponent.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### target
+
+• `get` **target**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.target
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L40)
+
+___
+
+### mX
+
+• `get` **mX**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.mX
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L44)
+
+___
+
+### mY
+
+• `get` **mY**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.mY
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L48)
+
+___
+
+### mZ
+
+• `get` **mZ**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.mZ
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L52)
+
+___
+
+### transformSpaceMode
+
+• `get` **transformSpaceMode**(): `TransformSpaceMode`
+
+#### Returns
+
+`TransformSpaceMode`
+
+#### Inherited from
+
+TransformControllerBaseComponent.transformSpaceMode
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L56)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[stop](TransformControllerBaseComponent.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onLateUpdate](TransformControllerBaseComponent.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onBeforeUpdate](TransformControllerBaseComponent.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onCompute](TransformControllerBaseComponent.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onGraphic](TransformControllerBaseComponent.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onParentChange](TransformControllerBaseComponent.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onAddChild](TransformControllerBaseComponent.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onRemoveChild](TransformControllerBaseComponent.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[cloneTo](TransformControllerBaseComponent.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[copyComponent](TransformControllerBaseComponent.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[beforeDestroy](TransformControllerBaseComponent.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[destroy](TransformControllerBaseComponent.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
+
+___
+
+### onMouseDown
+
+▸ **onMouseDown**(`e`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `e` | [`PointerEvent3D`](PointerEvent3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onMouseDown](TransformControllerBaseComponent.md#onmousedown)
+
+#### Defined in
+
+[src/util/transformUtil/RotationControlComponents.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/RotationControlComponents.ts#L140)
+
+___
+
+### onMouseUp
+
+▸ **onMouseUp**(`e`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `e` | [`PointerEvent3D`](PointerEvent3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onMouseUp](TransformControllerBaseComponent.md#onmouseup)
+
+#### Defined in
+
+[src/util/transformUtil/RotationControlComponents.ts:151](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/RotationControlComponents.ts#L151)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[init](TransformControllerBaseComponent.md#init)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:60](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L60)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[start](TransformControllerBaseComponent.md#start)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L94)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onEnable](TransformControllerBaseComponent.md#onenable)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L98)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onDisable](TransformControllerBaseComponent.md#ondisable)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L107)
+
+___
+
+### reset
+
+▸ **reset**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[reset](TransformControllerBaseComponent.md#reset)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L115)
+
+___
+
+### onMouseMove
+
+▸ **onMouseMove**(`e`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `e` | [`PointerEvent3D`](PointerEvent3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onMouseMove](TransformControllerBaseComponent.md#onmousemove)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:220](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L220)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onUpdate](TransformControllerBaseComponent.md#onupdate)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:282](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L282)
diff --git a/docs/api/classes/SSGIPost.md b/docs/api/classes/SSGIPost.md
new file mode 100644
index 00000000..cc329e14
--- /dev/null
+++ b/docs/api/classes/SSGIPost.md
@@ -0,0 +1,559 @@
+# Class: SSGIPost
+
+Ground base Ambient Occlusion
+Let the intersection of the object and the object imitate the effect of the light being cross-occluded
+```
+gtao setting
+let cfg = {@link Engine3D.setting.render.postProcessing.gtao};
+```
+
+## Hierarchy
+
+- `PostBase`
+
+ ↳ **`SSGIPost`**
+
+### Constructors
+
+- [constructor](SSGIPost.md#constructor)
+
+### Properties
+
+- [enable](SSGIPost.md#enable)
+- [postRenderer](SSGIPost.md#postrenderer)
+- [newTexture](SSGIPost.md#newtexture)
+- [oldTexture](SSGIPost.md#oldtexture)
+- [combineTexture](SSGIPost.md#combinetexture)
+- [delayCompute](SSGIPost.md#delaycompute)
+- [combineCompute](SSGIPost.md#combinecompute)
+- [rtFrame](SSGIPost.md#rtframe)
+- [textureScaleSmallCompute](SSGIPost.md#texturescalesmallcompute)
+- [textureScaleBigCompute](SSGIPost.md#texturescalebigcompute)
+- [view](SSGIPost.md#view)
+- [colorTexture](SSGIPost.md#colortexture)
+- [posTexture](SSGIPost.md#postexture)
+- [normalTexture](SSGIPost.md#normaltexture)
+- [gBufferTexture](SSGIPost.md#gbuffertexture)
+- [lastPosTexture](SSGIPost.md#lastpostexture)
+- [downSampleCofe](SSGIPost.md#downsamplecofe)
+- [debugChanal](SSGIPost.md#debugchanal)
+- [updateBuffer](SSGIPost.md#updatebuffer)
+
+### Accessors
+
+- [ins](SSGIPost.md#ins)
+- [delay](SSGIPost.md#delay)
+- [colorIns](SSGIPost.md#colorins)
+- [frameCount](SSGIPost.md#framecount)
+- [d1](SSGIPost.md#d1)
+
+### Methods
+
+- [destroy](SSGIPost.md#destroy)
+- [onCameraChange](SSGIPost.md#oncamerachange)
+- [onDetach](SSGIPost.md#ondetach)
+- [render](SSGIPost.md#render)
+- [compute](SSGIPost.md#compute)
+- [onResize](SSGIPost.md#onresize)
+
+## Constructors
+
+### constructor
+
+• **new SSGIPost**(): [`SSGIPost`](SSGIPost.md)
+
+#### Returns
+
+[`SSGIPost`](SSGIPost.md)
+
+#### Overrides
+
+PostBase.constructor
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L70)
+
+## Properties
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+PostBase.enable
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L20)
+
+___
+
+### postRenderer
+
+• **postRenderer**: `PostRenderer`
+
+#### Inherited from
+
+PostBase.postRenderer
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L21)
+
+___
+
+### newTexture
+
+• **newTexture**: `VirtualTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L41)
+
+___
+
+### oldTexture
+
+• **oldTexture**: `VirtualTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L42)
+
+___
+
+### combineTexture
+
+• **combineTexture**: `VirtualTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L43)
+
+___
+
+### delayCompute
+
+• **delayCompute**: `ComputeShader`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L53)
+
+___
+
+### combineCompute
+
+• **combineCompute**: `ComputeShader`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L54)
+
+___
+
+### rtFrame
+
+• **rtFrame**: [`RTFrame`](RTFrame.md)
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L56)
+
+___
+
+### textureScaleSmallCompute
+
+• **textureScaleSmallCompute**: [`TextureScaleCompute`](TextureScaleCompute.md)
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L57)
+
+___
+
+### textureScaleBigCompute
+
+• **textureScaleBigCompute**: [`TextureScaleCompute`](TextureScaleCompute.md)
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L58)
+
+___
+
+### view
+
+• **view**: [`View3D`](View3D.md)
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L59)
+
+___
+
+### colorTexture
+
+• **colorTexture**: `RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:60](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L60)
+
+___
+
+### posTexture
+
+• **posTexture**: `RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:61](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L61)
+
+___
+
+### normalTexture
+
+• **normalTexture**: `RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L62)
+
+___
+
+### gBufferTexture
+
+• **gBufferTexture**: `RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L63)
+
+___
+
+### lastPosTexture
+
+• **lastPosTexture**: `RenderTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L64)
+
+___
+
+### downSampleCofe
+
+• **downSampleCofe**: `number` = `1.0`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L65)
+
+___
+
+### debugChanal
+
+• **debugChanal**: `string` = `"0"`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L67)
+
+___
+
+### updateBuffer
+
+• **updateBuffer**: [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L69)
+
+## Accessors
+
+### ins
+
+• `get` **ins**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L112)
+
+• `set` **ins**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L107)
+
+___
+
+### delay
+
+• `get` **delay**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L121)
+
+• `set` **delay**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L116)
+
+___
+
+### colorIns
+
+• `get` **colorIns**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L131)
+
+• `set` **colorIns**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:126](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L126)
+
+___
+
+### frameCount
+
+• `get` **frameCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L140)
+
+• `set` **frameCount**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L135)
+
+___
+
+### d1
+
+• `get` **d1**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:149](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L149)
+
+• `set` **d1**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L144)
+
+## Methods
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PostBase.destroy
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L87)
+
+___
+
+### onCameraChange
+
+▸ **onCameraChange**(`oldPos`, `newPos`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `oldPos` | [`Vector3`](Vector3.md) |
+| `newPos` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L94)
+
+___
+
+### onDetach
+
+▸ **onDetach**(`view`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.onDetach
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L103)
+
+___
+
+### render
+
+▸ **render**(`view`, `command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.render
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L233)
+
+___
+
+### compute
+
+▸ **compute**(`view`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.compute
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:239](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L239)
+
+___
+
+### onResize
+
+▸ **onResize**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.onResize
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSGIPost.ts:287](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSGIPost.ts#L287)
diff --git a/docs/api/classes/SSRPost.md b/docs/api/classes/SSRPost.md
new file mode 100644
index 00000000..71e91c6a
--- /dev/null
+++ b/docs/api/classes/SSRPost.md
@@ -0,0 +1,332 @@
+# Class: SSRPost
+
+Screen space reflection
+```
+ //setting
+ let cfg = {@link Engine3D.setting.render.postProcessing.ssr};
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+
+
+ Engine3D.startRender(renderJob);
+```
+
+## Hierarchy
+
+- `PostBase`
+
+ ↳ **`SSRPost`**
+
+### Constructors
+
+- [constructor](SSRPost.md#constructor)
+
+### Properties
+
+- [enable](SSRPost.md#enable)
+- [postRenderer](SSRPost.md#postrenderer)
+- [historyPosition](SSRPost.md#historyposition)
+- [view](SSRPost.md#view)
+
+### Accessors
+
+- [fadeEdgeRatio](SSRPost.md#fadeedgeratio)
+- [rayMarchRatio](SSRPost.md#raymarchratio)
+- [roughnessThreshold](SSRPost.md#roughnessthreshold)
+- [fadeDistanceMin](SSRPost.md#fadedistancemin)
+- [fadeDistanceMax](SSRPost.md#fadedistancemax)
+- [powDotRN](SSRPost.md#powdotrn)
+
+### Methods
+
+- [destroy](SSRPost.md#destroy)
+- [onResize](SSRPost.md#onresize)
+
+## Constructors
+
+### constructor
+
+• **new SSRPost**(): [`SSRPost`](SSRPost.md)
+
+#### Returns
+
+[`SSRPost`](SSRPost.md)
+
+#### Inherited from
+
+PostBase.constructor
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L25)
+
+## Properties
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+PostBase.enable
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L20)
+
+___
+
+### postRenderer
+
+• **postRenderer**: `PostRenderer`
+
+#### Inherited from
+
+PostBase.postRenderer
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L21)
+
+___
+
+### historyPosition
+
+• **historyPosition**: [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSRPost.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSRPost.ts#L71)
+
+___
+
+### view
+
+• **view**: [`View3D`](View3D.md)
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSRPost.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSRPost.ts#L72)
+
+## Accessors
+
+### fadeEdgeRatio
+
+• `get` **fadeEdgeRatio**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSRPost.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSRPost.ts#L90)
+
+• `set` **fadeEdgeRatio**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSRPost.ts:95](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSRPost.ts#L95)
+
+___
+
+### rayMarchRatio
+
+• `get` **rayMarchRatio**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSRPost.ts:101](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSRPost.ts#L101)
+
+• `set` **rayMarchRatio**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSRPost.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSRPost.ts#L106)
+
+___
+
+### roughnessThreshold
+
+• `get` **roughnessThreshold**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSRPost.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSRPost.ts#L112)
+
+• `set` **roughnessThreshold**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSRPost.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSRPost.ts#L117)
+
+___
+
+### fadeDistanceMin
+
+• `get` **fadeDistanceMin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSRPost.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSRPost.ts#L123)
+
+• `set` **fadeDistanceMin**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSRPost.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSRPost.ts#L128)
+
+___
+
+### fadeDistanceMax
+
+• `get` **fadeDistanceMax**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSRPost.ts:134](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSRPost.ts#L134)
+
+• `set` **fadeDistanceMax**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSRPost.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSRPost.ts#L139)
+
+___
+
+### powDotRN
+
+• `get` **powDotRN**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSRPost.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSRPost.ts#L145)
+
+• `set` **powDotRN**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSRPost.ts:150](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSRPost.ts#L150)
+
+## Methods
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PostBase.destroy
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L87)
+
+___
+
+### onResize
+
+▸ **onResize**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.onResize
+
+#### Defined in
+
+[src/gfx/renderJob/post/SSRPost.ts:289](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/SSRPost.ts#L289)
diff --git a/docs/api/classes/ScaleControlComponents.md b/docs/api/classes/ScaleControlComponents.md
new file mode 100644
index 00000000..71c74faa
--- /dev/null
+++ b/docs/api/classes/ScaleControlComponents.md
@@ -0,0 +1,805 @@
+# Class: ScaleControlComponents
+
+Components are used to attach functionality to object3D, it has an owner object3D.
+The component can receive update events at each frame.
+
+## Hierarchy
+
+- [`TransformControllerBaseComponent`](TransformControllerBaseComponent.md)
+
+ ↳ **`ScaleControlComponents`**
+
+### Constructors
+
+- [constructor](ScaleControlComponents.md#constructor)
+
+### Properties
+
+- [object3D](ScaleControlComponents.md#object3d)
+- [isDestroyed](ScaleControlComponents.md#isdestroyed)
+
+### Accessors
+
+- [eventDispatcher](ScaleControlComponents.md#eventdispatcher)
+- [isStart](ScaleControlComponents.md#isstart)
+- [transform](ScaleControlComponents.md#transform)
+- [enable](ScaleControlComponents.md#enable)
+- [target](ScaleControlComponents.md#target)
+- [mX](ScaleControlComponents.md#mx)
+- [mY](ScaleControlComponents.md#my)
+- [mZ](ScaleControlComponents.md#mz)
+- [transformSpaceMode](ScaleControlComponents.md#transformspacemode)
+
+### Methods
+
+- [stop](ScaleControlComponents.md#stop)
+- [onLateUpdate](ScaleControlComponents.md#onlateupdate)
+- [onBeforeUpdate](ScaleControlComponents.md#onbeforeupdate)
+- [onCompute](ScaleControlComponents.md#oncompute)
+- [onGraphic](ScaleControlComponents.md#ongraphic)
+- [onParentChange](ScaleControlComponents.md#onparentchange)
+- [onAddChild](ScaleControlComponents.md#onaddchild)
+- [onRemoveChild](ScaleControlComponents.md#onremovechild)
+- [cloneTo](ScaleControlComponents.md#cloneto)
+- [copyComponent](ScaleControlComponents.md#copycomponent)
+- [beforeDestroy](ScaleControlComponents.md#beforedestroy)
+- [destroy](ScaleControlComponents.md#destroy)
+- [init](ScaleControlComponents.md#init)
+- [start](ScaleControlComponents.md#start)
+- [onEnable](ScaleControlComponents.md#onenable)
+- [onDisable](ScaleControlComponents.md#ondisable)
+- [reset](ScaleControlComponents.md#reset)
+- [onMouseDown](ScaleControlComponents.md#onmousedown)
+- [onMouseMove](ScaleControlComponents.md#onmousemove)
+- [onMouseUp](ScaleControlComponents.md#onmouseup)
+- [onUpdate](ScaleControlComponents.md#onupdate)
+
+## Constructors
+
+### constructor
+
+• **new ScaleControlComponents**(): [`ScaleControlComponents`](ScaleControlComponents.md)
+
+#### Returns
+
+[`ScaleControlComponents`](ScaleControlComponents.md)
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[constructor](TransformControllerBaseComponent.md#constructor)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L29)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[object3D](TransformControllerBaseComponent.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[isDestroyed](TransformControllerBaseComponent.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TransformControllerBaseComponent.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+TransformControllerBaseComponent.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+TransformControllerBaseComponent.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TransformControllerBaseComponent.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### target
+
+• `get` **target**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.target
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L40)
+
+___
+
+### mX
+
+• `get` **mX**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.mX
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L44)
+
+___
+
+### mY
+
+• `get` **mY**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.mY
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L48)
+
+___
+
+### mZ
+
+• `get` **mZ**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.mZ
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L52)
+
+___
+
+### transformSpaceMode
+
+• `get` **transformSpaceMode**(): `TransformSpaceMode`
+
+#### Returns
+
+`TransformSpaceMode`
+
+#### Inherited from
+
+TransformControllerBaseComponent.transformSpaceMode
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L56)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[stop](TransformControllerBaseComponent.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onLateUpdate](TransformControllerBaseComponent.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onBeforeUpdate](TransformControllerBaseComponent.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onCompute](TransformControllerBaseComponent.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onGraphic](TransformControllerBaseComponent.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onParentChange](TransformControllerBaseComponent.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onAddChild](TransformControllerBaseComponent.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onRemoveChild](TransformControllerBaseComponent.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[cloneTo](TransformControllerBaseComponent.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[copyComponent](TransformControllerBaseComponent.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[beforeDestroy](TransformControllerBaseComponent.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[destroy](TransformControllerBaseComponent.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[init](TransformControllerBaseComponent.md#init)
+
+#### Defined in
+
+[src/util/transformUtil/ScaleControlComponents.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/ScaleControlComponents.ts#L15)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[start](TransformControllerBaseComponent.md#start)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L94)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onEnable](TransformControllerBaseComponent.md#onenable)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L98)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onDisable](TransformControllerBaseComponent.md#ondisable)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L107)
+
+___
+
+### reset
+
+▸ **reset**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[reset](TransformControllerBaseComponent.md#reset)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L115)
+
+___
+
+### onMouseDown
+
+▸ **onMouseDown**(`e`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `e` | [`PointerEvent3D`](PointerEvent3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onMouseDown](TransformControllerBaseComponent.md#onmousedown)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L198)
+
+___
+
+### onMouseMove
+
+▸ **onMouseMove**(`e`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `e` | [`PointerEvent3D`](PointerEvent3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onMouseMove](TransformControllerBaseComponent.md#onmousemove)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:220](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L220)
+
+___
+
+### onMouseUp
+
+▸ **onMouseUp**(`e`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `e` | [`PointerEvent3D`](PointerEvent3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onMouseUp](TransformControllerBaseComponent.md#onmouseup)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:274](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L274)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onUpdate](TransformControllerBaseComponent.md#onupdate)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:282](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L282)
diff --git a/docs/api/classes/Scene3D.md b/docs/api/classes/Scene3D.md
new file mode 100644
index 00000000..41fb0024
--- /dev/null
+++ b/docs/api/classes/Scene3D.md
@@ -0,0 +1,1966 @@
+# Class: Scene3D
+
+It represents an independent 3D scene where 3D objects can be created and manipulated.
+
+## Hierarchy
+
+- [`Object3D`](Object3D.md)
+
+ ↳ **`Scene3D`**
+
+### Constructors
+
+- [constructor](Scene3D.md#constructor)
+
+### Properties
+
+- [envMapChange](Scene3D.md#envmapchange)
+- [view](Scene3D.md#view)
+- [name](Scene3D.md#name)
+- [transform](Scene3D.md#transform)
+- [renderNode](Scene3D.md#rendernode)
+- [entityChildren](Scene3D.md#entitychildren)
+- [components](Scene3D.md#components)
+- [prefabRef](Scene3D.md#prefabref)
+- [serializeTag](Scene3D.md#serializetag)
+
+### Accessors
+
+- [envMap](Scene3D.md#envmap)
+- [exposure](Scene3D.md#exposure)
+- [roughness](Scene3D.md#roughness)
+- [instanceID](Scene3D.md#instanceid)
+- [numChildren](Scene3D.md#numchildren)
+- [bound](Scene3D.md#bound)
+- [isScene3D](Scene3D.md#isscene3d)
+- [localPosition](Scene3D.md#localposition)
+- [localRotation](Scene3D.md#localrotation)
+- [localScale](Scene3D.md#localscale)
+- [localQuaternion](Scene3D.md#localquaternion)
+- [parent](Scene3D.md#parent)
+- [parentObject](Scene3D.md#parentobject)
+- [x](Scene3D.md#x)
+- [y](Scene3D.md#y)
+- [z](Scene3D.md#z)
+- [scaleX](Scene3D.md#scalex)
+- [scaleY](Scene3D.md#scaley)
+- [scaleZ](Scene3D.md#scalez)
+- [rotationX](Scene3D.md#rotationx)
+- [rotationY](Scene3D.md#rotationy)
+- [rotationZ](Scene3D.md#rotationz)
+
+### Methods
+
+- [getObjectByName](Scene3D.md#getobjectbyname)
+- [addChild](Scene3D.md#addchild)
+- [removeChild](Scene3D.md#removechild)
+- [removeAllChild](Scene3D.md#removeallchild)
+- [removeSelf](Scene3D.md#removeself)
+- [removeChildByIndex](Scene3D.md#removechildbyindex)
+- [hasChild](Scene3D.md#haschild)
+- [removeFromParent](Scene3D.md#removefromparent)
+- [getChildByIndex](Scene3D.md#getchildbyindex)
+- [getChildByName](Scene3D.md#getchildbyname)
+- [noticeComponents](Scene3D.md#noticecomponents)
+- [forChild](Scene3D.md#forchild)
+- [addComponent](Scene3D.md#addcomponent)
+- [getOrAddComponent](Scene3D.md#getoraddcomponent)
+- [removeComponent](Scene3D.md#removecomponent)
+- [hasComponent](Scene3D.md#hascomponent)
+- [getComponent](Scene3D.md#getcomponent)
+- [getComponentFromParent](Scene3D.md#getcomponentfromparent)
+- [getComponentsInChild](Scene3D.md#getcomponentsinchild)
+- [getComponents](Scene3D.md#getcomponents)
+- [getComponentsExt](Scene3D.md#getcomponentsext)
+- [getComponentsByProperty](Scene3D.md#getcomponentsbyproperty)
+- [clone](Scene3D.md#clone)
+- [notifyChange](Scene3D.md#notifychange)
+- [traverse](Scene3D.md#traverse)
+- [destroy](Scene3D.md#destroy)
+- [dispatchEvent](Scene3D.md#dispatchevent)
+- [addEventListener](Scene3D.md#addeventlistener)
+- [removeEventListener](Scene3D.md#removeeventlistener)
+- [removeEventListenerAt](Scene3D.md#removeeventlistenerat)
+- [removeAllEventListener](Scene3D.md#removealleventlistener)
+- [containEventListener](Scene3D.md#containeventlistener)
+- [hasEventListener](Scene3D.md#haseventlistener)
+
+## Constructors
+
+### constructor
+
+• **new Scene3D**(): [`Scene3D`](Scene3D.md)
+
+#### Returns
+
+[`Scene3D`](Scene3D.md)
+
+#### Overrides
+
+[Object3D](Object3D.md).[constructor](Object3D.md#constructor)
+
+#### Defined in
+
+[src/core/Scene3D.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/core/Scene3D.ts#L22)
+
+## Properties
+
+### envMapChange
+
+• **envMapChange**: `boolean` = `true`
+
+#### Defined in
+
+[src/core/Scene3D.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/core/Scene3D.ts#L16)
+
+___
+
+### view
+
+• **view**: [`View3D`](View3D.md)
+
+#### Defined in
+
+[src/core/Scene3D.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/core/Scene3D.ts#L17)
+
+___
+
+### name
+
+• **name**: `string` = `''`
+
+The name of the object. The default value is an empty string.
+
+#### Inherited from
+
+[Object3D](Object3D.md).[name](Object3D.md#name)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L24)
+
+___
+
+### transform
+
+• **transform**: [`Transform`](Transform.md)
+
+The Transform attached to this object.
+
+#### Inherited from
+
+[Object3D](Object3D.md).[transform](Object3D.md#transform)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L42)
+
+___
+
+### renderNode
+
+• **renderNode**: `RenderNode`
+
+Renderer components
+
+#### Inherited from
+
+[Object3D](Object3D.md).[renderNode](Object3D.md#rendernode)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L47)
+
+___
+
+### entityChildren
+
+• **entityChildren**: [`Entity`](Entity.md)[]
+
+An array containing sub objects of an object
+
+#### Inherited from
+
+[Object3D](Object3D.md).[entityChildren](Object3D.md#entitychildren)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L52)
+
+___
+
+### components
+
+• **components**: `Map`\<`any`, [`IComponent`](../interfaces/IComponent.md)\>
+
+List of components attached to an object
+
+#### Inherited from
+
+[Object3D](Object3D.md).[components](Object3D.md#components)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L57)
+
+___
+
+### prefabRef
+
+• `Optional` **prefabRef**: `string`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[prefabRef](Object3D.md#prefabref)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L19)
+
+___
+
+### serializeTag
+
+• `Optional` **serializeTag**: [`SerializeTag`](../types/SerializeTag.md)
+
+#### Inherited from
+
+[Object3D](Object3D.md).[serializeTag](Object3D.md#serializetag)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L20)
+
+## Accessors
+
+### envMap
+
+• `get` **envMap**(): [`Texture`](Texture.md)
+
+get environment texture
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/core/Scene3D.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/core/Scene3D.ts#L35)
+
+• `set` **envMap**(`value`): `void`
+
+set environment texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/Scene3D.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/Scene3D.ts#L42)
+
+___
+
+### exposure
+
+• `get` **exposure**(): `number`
+
+Exposure of Sky Box. A larger value produces a sky box with stronger exposure and a brighter appearance.
+ A smaller value produces a sky box with weaker exposure and a darker appearance.
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/Scene3D.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/core/Scene3D.ts#L64)
+
+• `set` **exposure**(`value`): `void`
+
+Set the exposure of the Sky Box.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/Scene3D.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/core/Scene3D.ts#L73)
+
+___
+
+### roughness
+
+• `get` **roughness**(): `number`
+
+Get the roughness of the Sky Box.
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/core/Scene3D.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/core/Scene3D.ts#L83)
+
+• `set` **roughness**(`value`): `void`
+
+Set the roughness of the Sky Box.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/Scene3D.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/Scene3D.ts#L92)
+
+___
+
+### instanceID
+
+• `get` **instanceID**(): `string`
+
+The unique identifier of the object.
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Object3D.instanceID
+
+#### Defined in
+
+[src/core/entities/Entity.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L32)
+
+___
+
+### numChildren
+
+• `get` **numChildren**(): `number`
+
+Returns the number of child objects of an object
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.numChildren
+
+#### Defined in
+
+[src/core/entities/Entity.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L116)
+
+___
+
+### bound
+
+• `get` **bound**(): `IBound`
+
+#### Returns
+
+`IBound`
+
+#### Inherited from
+
+Object3D.bound
+
+#### Defined in
+
+[src/core/entities/Entity.ts:277](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L277)
+
+• `set` **bound**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `IBound` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.bound
+
+#### Defined in
+
+[src/core/entities/Entity.ts:282](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L282)
+
+___
+
+### isScene3D
+
+• `get` **isScene3D**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Object3D.isScene3D
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L30)
+
+___
+
+### localPosition
+
+• `get` **localPosition**(): [`Vector3`](Vector3.md)
+
+Get the position of an object relative to its parent
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Object3D.localPosition
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:272](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L272)
+
+• `set` **localPosition**(`value`): `void`
+
+Set the position of an object relative to its parent
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.localPosition
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:279](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L279)
+
+___
+
+### localRotation
+
+• `get` **localRotation**(): [`Vector3`](Vector3.md)
+
+Get the rotation attribute of an object relative to its parent
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Object3D.localRotation
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:286](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L286)
+
+• `set` **localRotation**(`value`): `void`
+
+Set the rotation attribute of an object relative to its parent
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.localRotation
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:293](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L293)
+
+___
+
+### localScale
+
+• `get` **localScale**(): [`Vector3`](Vector3.md)
+
+Get the scaling attribute of an object relative to its parent
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+Object3D.localScale
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:300](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L300)
+
+• `set` **localScale**(`value`): `void`
+
+Set the scaling attribute of an object relative to its parent
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.localScale
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:307](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L307)
+
+___
+
+### localQuaternion
+
+• `get` **localQuaternion**(): [`Quaternion`](Quaternion.md)
+
+Get the rotation attribute of an object relative to its parent, which is a quaternion
+
+#### Returns
+
+[`Quaternion`](Quaternion.md)
+
+#### Inherited from
+
+Object3D.localQuaternion
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:314](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L314)
+
+• `set` **localQuaternion**(`value`): `void`
+
+Set the rotation attribute of an object relative to its parent, which is a quaternion
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Quaternion`](Quaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.localQuaternion
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:321](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L321)
+
+___
+
+### parent
+
+• `get` **parent**(): [`Transform`](Transform.md)
+
+Transform component of object parent
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+Object3D.parent
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:336](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L336)
+
+___
+
+### parentObject
+
+• `get` **parentObject**(): [`Object3D`](Object3D.md)
+
+parent object3D
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+Object3D.parentObject
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:344](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L344)
+
+___
+
+### x
+
+• `get` **x**(): `number`
+
+Get the x coordinate relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.x
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:360](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L360)
+
+• `set` **x**(`value`): `void`
+
+Set the x coordinate relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.x
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:352](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L352)
+
+___
+
+### y
+
+• `get` **y**(): `number`
+
+Get the y coordinate relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.y
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:375](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L375)
+
+• `set` **y**(`value`): `void`
+
+Set the y coordinate relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.y
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:367](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L367)
+
+___
+
+### z
+
+• `get` **z**(): `number`
+
+Get the z coordinate relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.z
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:389](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L389)
+
+• `set` **z**(`value`): `void`
+
+Set the z coordinate relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.z
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:382](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L382)
+
+___
+
+### scaleX
+
+• `get` **scaleX**(): `number`
+
+Get the x scale relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.scaleX
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:404](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L404)
+
+• `set` **scaleX**(`value`): `void`
+
+Set the x scale relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.scaleX
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:396](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L396)
+
+___
+
+### scaleY
+
+• `get` **scaleY**(): `number`
+
+Get the y scale relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.scaleY
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:420](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L420)
+
+• `set` **scaleY**(`value`): `void`
+
+Set the y scale relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.scaleY
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L412)
+
+___
+
+### scaleZ
+
+• `get` **scaleZ**(): `number`
+
+Get the z scale relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.scaleZ
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:436](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L436)
+
+• `set` **scaleZ**(`value`): `void`
+
+Set the z scale relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.scaleZ
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:428](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L428)
+
+___
+
+### rotationX
+
+• `get` **rotationX**(): `number`
+
+Get the x rotation relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.rotationX
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:452](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L452)
+
+• `set` **rotationX**(`value`): `void`
+
+Set the x rotation relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.rotationX
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:444](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L444)
+
+___
+
+### rotationY
+
+• `get` **rotationY**(): `number`
+
+Get the y rotation relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.rotationY
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:468](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L468)
+
+• `set` **rotationY**(`value`): `void`
+
+Set the y rotation relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.rotationY
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:460](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L460)
+
+___
+
+### rotationZ
+
+• `get` **rotationZ**(): `number`
+
+Set the z rotation relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.rotationZ
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:484](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L484)
+
+• `set` **rotationZ**(`value`): `void`
+
+Set the z rotation relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.rotationZ
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:476](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L476)
+
+## Methods
+
+### getObjectByName
+
+▸ **getObjectByName**(`name`): [`Entity`](Entity.md)
+
+Starting from the object itself, search for the object and its children, and return the first child object with a matching name.
+For most objects, the name is an empty string by default. You must manually set it to use this method.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | input name |
+
+#### Returns
+
+[`Entity`](Entity.md)
+
+result Entity
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getObjectByName](Object3D.md#getobjectbyname)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L81)
+
+___
+
+### addChild
+
+▸ **addChild**(`child`): [`Entity`](Entity.md)
+
+Add an object as a child of this object. You can add any number of objects.
+Any current parent object on the object passed here will be deleted, as an object can only have at most one parent object.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | [`Entity`](Entity.md) | target child entity |
+
+#### Returns
+
+[`Entity`](Entity.md)
+
+#### Inherited from
+
+[Object3D](Object3D.md).[addChild](Object3D.md#addchild)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:127](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L127)
+
+___
+
+### removeChild
+
+▸ **removeChild**(`child`): `void`
+
+Remove the child objects of the object. You can remove any number of objects.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | [`Entity`](Entity.md) | Removed objects |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeChild](Object3D.md#removechild)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L152)
+
+___
+
+### removeAllChild
+
+▸ **removeAllChild**(): `void`
+
+Remove all children of the current object
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeAllChild](Object3D.md#removeallchild)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L168)
+
+___
+
+### removeSelf
+
+▸ **removeSelf**(): `this`
+
+Remove the current node from the parent
+
+#### Returns
+
+`this`
+
+this
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeSelf](Object3D.md#removeself)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L179)
+
+___
+
+### removeChildByIndex
+
+▸ **removeChildByIndex**(`index`): `void`
+
+Search for child nodes of objects and remove child objects with matching indexes.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index` | `number` | assign index |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeChildByIndex](Object3D.md#removechildbyindex)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:189](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L189)
+
+___
+
+### hasChild
+
+▸ **hasChild**(`child`): `boolean`
+
+Does the current object contain a certain object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | [`Entity`](Entity.md) | certain object |
+
+#### Returns
+
+`boolean`
+
+boolean
+
+#### Inherited from
+
+[Object3D](Object3D.md).[hasChild](Object3D.md#haschild)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L203)
+
+___
+
+### removeFromParent
+
+▸ **removeFromParent**(): `this`
+
+Remove the current node from the parent
+
+#### Returns
+
+`this`
+
+this
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeFromParent](Object3D.md#removefromparent)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:213](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L213)
+
+___
+
+### getChildByIndex
+
+▸ **getChildByIndex**(`index`): [`Entity`](Entity.md)
+
+Search for object children and return the first child object with a matching index.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index` | `number` | matching index |
+
+#### Returns
+
+[`Entity`](Entity.md)
+
+child entity
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getChildByIndex](Object3D.md#getchildbyindex)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L227)
+
+___
+
+### getChildByName
+
+▸ **getChildByName**(`name`, `loopChild?`): `any`
+
+Search for object children and return a child object with a matching name.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `name` | `string` | `undefined` | matching name |
+| `loopChild` | `boolean` | `true` | Whether to traverse the children of the child object. The default value is true |
+
+#### Returns
+
+`any`
+
+result
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getChildByName](Object3D.md#getchildbyname)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:242](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L242)
+
+___
+
+### noticeComponents
+
+▸ **noticeComponents**(`key`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | keyof [`IComponent`](../interfaces/IComponent.md) |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[noticeComponents](Object3D.md#noticecomponents)
+
+#### Defined in
+
+[src/core/entities/Entity.ts:328](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L328)
+
+___
+
+### forChild
+
+▸ **forChild**(`call`): `void`
+
+Traverse all sub objects starting from the object itself.
+ If there are still sub objects in the sub object, recursively traverse.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `call` | `Function` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[forChild](Object3D.md#forchild)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L41)
+
+___
+
+### addComponent
+
+▸ **addComponent**\<`T`\>(`c`, `param?`): `T`
+
+Create a new component and add it to the object, and return an instance of the component.
+ If a component of this type already exists, it will not be added and will return null.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+| `param?` | `any` | - |
+
+#### Returns
+
+`T`
+
+result component
+
+#### Inherited from
+
+[Object3D](Object3D.md).[addComponent](Object3D.md#addcomponent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L55)
+
+___
+
+### getOrAddComponent
+
+▸ **getOrAddComponent**\<`T`\>(`c`): `T`
+
+Returns an instance of a component object of the specified type.
+ If there are no components of that type, a new component is created and added to the object.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`T`
+
+result component
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getOrAddComponent](Object3D.md#getoraddcomponent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L76)
+
+___
+
+### removeComponent
+
+▸ **removeComponent**\<`T`\>(`c`): `void`
+
+Remove components of the specified type
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeComponent](Object3D.md#removecomponent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L89)
+
+___
+
+### hasComponent
+
+▸ **hasComponent**\<`T`\>(`c`): `boolean`
+
+Is there a component of the specified type
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | type of component |
+
+#### Returns
+
+`boolean`
+
+boolean
+
+#### Inherited from
+
+[Object3D](Object3D.md).[hasComponent](Object3D.md#hascomponent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L106)
+
+___
+
+### getComponent
+
+▸ **getComponent**\<`T`\>(`c`): `T`
+
+Returns a component of the specified type.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`T`
+
+result component
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponent](Object3D.md#getcomponent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L116)
+
+___
+
+### getComponentFromParent
+
+▸ **getComponentFromParent**\<`T`\>(`c`): `T`
+
+Returns a component object of the specified type from the parent node.
+ If there are no components of that type,
+ calls the parent object lookup of the parent object
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`T`
+
+reulst component
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponentFromParent](Object3D.md#getcomponentfromparent)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L128)
+
+___
+
+### getComponentsInChild
+
+▸ **getComponentsInChild**\<`T`\>(`c`): `T`[]
+
+Returns an array of component objects of the specified type.
+ If there are no components of that type, search in the list of self body class objects
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+
+#### Returns
+
+`T`[]
+
+result components
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponentsInChild](Object3D.md#getcomponentsinchild)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L148)
+
+___
+
+### getComponents
+
+▸ **getComponents**\<`T`\>(`c`, `outList?`, `includeInactive?`): `T`[]
+
+Returns all components of the specified type contained in the current object and its children.
+ If there are children in the child object, recursively search.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+| `outList?` | `T`[] | result component list |
+| `includeInactive?` | `boolean` | Whether to include invisible objects, default to false |
+
+#### Returns
+
+`T`[]
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponents](Object3D.md#getcomponents)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:171](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L171)
+
+___
+
+### getComponentsExt
+
+▸ **getComponentsExt**\<`T`\>(`c`, `ret?`, `includeInactive?`): `T`[]
+
+Quickly obtain components and no longer access child nodes after obtaining them at a certain node
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> | class of component |
+| `ret?` | `T`[] | List of incoming T |
+| `includeInactive?` | `boolean` | Whether to include invisible objects, default to false |
+
+#### Returns
+
+`T`[]
+
+{T}
+
+**`Memberof`**
+
+Object3D
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponentsExt](Object3D.md#getcomponentsext)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:196](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L196)
+
+___
+
+### getComponentsByProperty
+
+▸ **getComponentsByProperty**\<`T`\>(`key`, `value`, `findedAndBreak?`, `ret?`, `includeInactive?`): `T`[]
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`IComponent`](../interfaces/IComponent.md) |
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `key` | `string` | `undefined` |
+| `value` | `any` | `undefined` |
+| `findedAndBreak` | `boolean` | `true` |
+| `ret?` | `T`[] | `undefined` |
+| `includeInactive?` | `boolean` | `undefined` |
+
+#### Returns
+
+`T`[]
+
+#### Inherited from
+
+[Object3D](Object3D.md).[getComponentsByProperty](Object3D.md#getcomponentsbyproperty)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L211)
+
+___
+
+### clone
+
+▸ **clone**(): [`Object3D`](Object3D.md)
+
+clone a Object3D
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+[Object3D](Object3D.md).[clone](Object3D.md#clone)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:238](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L238)
+
+___
+
+### notifyChange
+
+▸ **notifyChange**(): `void`
+
+Notify transformation attribute updates
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[notifyChange](Object3D.md#notifychange)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:328](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L328)
+
+___
+
+### traverse
+
+▸ **traverse**(`callback`): `void`
+
+Recursive child nodes and execute specified function
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `callback` | (`child`: `any`) => `void` | specified function |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[traverse](Object3D.md#traverse)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:505](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L505)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+Release self
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[destroy](Object3D.md#destroy)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:520](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L520)
+
+___
+
+### dispatchEvent
+
+▸ **dispatchEvent**(`event`): `void`
+
+Dispatch an event to all registered objects with a specific type of listener.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `event` | [`CEvent`](CEvent.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[dispatchEvent](Object3D.md#dispatchevent)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L24)
+
+___
+
+### addEventListener
+
+▸ **addEventListener**(`type`, `callback`, `thisObject`, `param?`, `priority?`): `number`
+
+register an event listener to event distancher.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event type. |
+| `callback` | `Function` | `undefined` | {Function} The callback function that handles events. This function must accept an Event3D object as its unique parameter and cannot return any result. for example: function(evt:Event3D):void. |
+| `thisObject` | `any` | `undefined` | {any} Current registration object, it'll call callback function. |
+| `param` | `any` | `null` | {any} the data binded to registered event, the default value is null. |
+| `priority` | `number` | `0` | {number} The priority of callback function execution, with a larger set value having priority to call |
+
+#### Returns
+
+`number`
+
+Returns register event id
+
+#### Inherited from
+
+[Object3D](Object3D.md).[addEventListener](Object3D.md#addeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L79)
+
+___
+
+### removeEventListener
+
+▸ **removeEventListener**(`type`, `callback`, `thisObject`): `void`
+
+Remove Event Listening
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` \| `number` | {string} event type |
+| `callback` | `Function` | {Function} callback function of event register |
+| `thisObject` | `any` | {any} The current registered object. |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeEventListener](Object3D.md#removeeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L113)
+
+___
+
+### removeEventListenerAt
+
+▸ **removeEventListenerAt**(`id`): `boolean`
+
+Remove an event Listening with id
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeEventListenerAt](Object3D.md#removeeventlistenerat)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L133)
+
+___
+
+### removeAllEventListener
+
+▸ **removeAllEventListener**(`eventType?`): `void`
+
+Specify a event type to remove all related event listeners
+eventType event type, set null to remove all event listeners
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `eventType` | `string` \| `number` | `null` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Object3D](Object3D.md).[removeAllEventListener](Object3D.md#removealleventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L153)
+
+___
+
+### containEventListener
+
+▸ **containEventListener**(`type`): `boolean`
+
+whether the target presence of a listener with event type.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` | {string} event type. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+[Object3D](Object3D.md).[containEventListener](Object3D.md#containeventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:185](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L185)
+
+___
+
+### hasEventListener
+
+▸ **hasEventListener**(`type`, `callback?`, `thisObject?`): `boolean`
+
+whether the target presence of a listener with event type. it associate more registration parameters.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event name. |
+| `callback` | `Function` | `null` | {Function} callback function of event register. |
+| `thisObject` | `any` | `null` | {any} The registered object. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+[Object3D](Object3D.md).[hasEventListener](Object3D.md#haseventlistener)
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L198)
diff --git a/docs/api/classes/Shader.md b/docs/api/classes/Shader.md
new file mode 100644
index 00000000..dfa49518
--- /dev/null
+++ b/docs/api/classes/Shader.md
@@ -0,0 +1,767 @@
+# Class: Shader
+
+## Hierarchy
+
+- **`Shader`**
+
+ ↳ [`LitHairShader`](LitHairShader.md)
+
+ ↳ [`LitSSSShader`](LitSSSShader.md)
+
+ ↳ [`LitShader`](LitShader.md)
+
+ ↳ [`QuadShader`](QuadShader.md)
+
+ ↳ [`ReflectionShader`](ReflectionShader.md)
+
+ ↳ [`SkyShader`](SkyShader.md)
+
+ ↳ [`StandShader`](StandShader.md)
+
+ ↳ [`UnLitShader`](UnLitShader.md)
+
+ ↳ [`UnLitTexArrayShader`](UnLitTexArrayShader.md)
+
+### Constructors
+
+- [constructor](Shader.md#constructor)
+
+### Properties
+
+- [computes](Shader.md#computes)
+- [passShader](Shader.md#passshader)
+
+### Methods
+
+- [addRenderPass](Shader.md#addrenderpass)
+- [removeShader](Shader.md#removeshader)
+- [removeShaderByIndex](Shader.md#removeshaderbyindex)
+- [getSubShaders](Shader.md#getsubshaders)
+- [hasSubShaders](Shader.md#hassubshaders)
+- [getDefaultShaders](Shader.md#getdefaultshaders)
+- [getDefaultColorShader](Shader.md#getdefaultcolorshader)
+- [setDefine](Shader.md#setdefine)
+- [hasDefine](Shader.md#hasdefine)
+- [deleteDefine](Shader.md#deletedefine)
+- [setUniform](Shader.md#setuniform)
+- [setUniformFloat](Shader.md#setuniformfloat)
+- [setUniformVector2](Shader.md#setuniformvector2)
+- [setUniformVector3](Shader.md#setuniformvector3)
+- [setUniformVector4](Shader.md#setuniformvector4)
+- [setUniformColor](Shader.md#setuniformcolor)
+- [getUniform](Shader.md#getuniform)
+- [getUniformFloat](Shader.md#getuniformfloat)
+- [getUniformVector2](Shader.md#getuniformvector2)
+- [getUniformVector3](Shader.md#getuniformvector3)
+- [getUniformVector4](Shader.md#getuniformvector4)
+- [getUniformColor](Shader.md#getuniformcolor)
+- [setTexture](Shader.md#settexture)
+- [getTexture](Shader.md#gettexture)
+- [setUniformBuffer](Shader.md#setuniformbuffer)
+- [getUniformBuffer](Shader.md#getuniformbuffer)
+- [setStorageBuffer](Shader.md#setstoragebuffer)
+- [getStorageBuffer](Shader.md#getstoragebuffer)
+- [setStructStorageBuffer](Shader.md#setstructstoragebuffer)
+- [getStructStorageBuffer](Shader.md#getstructstoragebuffer)
+- [noticeValueChange](Shader.md#noticevaluechange)
+- [destroy](Shader.md#destroy)
+- [clone](Shader.md#clone)
+- [applyUniform](Shader.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new Shader**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L23)
+
+## Properties
+
+### computes
+
+• **computes**: [`RenderShaderCompute`](RenderShaderCompute.md)[]
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L19)
+
+___
+
+### passShader
+
+• **passShader**: `Map`\<`PassType`, [`RenderShaderPass`](RenderShaderPass.md)[]\>
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L21)
+
+## Methods
+
+### addRenderPass
+
+▸ **addRenderPass**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L28)
+
+___
+
+### removeShader
+
+▸ **removeShader**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L38)
+
+___
+
+### removeShaderByIndex
+
+▸ **removeShaderByIndex**(`passType`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `passType` | `PassType` | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L52)
+
+___
+
+### getSubShaders
+
+▸ **getSubShaders**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L63)
+
+___
+
+### hasSubShaders
+
+▸ **hasSubShaders**(`passType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L67)
+
+___
+
+### getDefaultShaders
+
+▸ **getDefaultShaders**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L72)
+
+___
+
+### getDefaultColorShader
+
+▸ **getDefaultColorShader**(): [`RenderShaderPass`](RenderShaderPass.md)
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L76)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L80)
+
+___
+
+### hasDefine
+
+▸ **hasDefine**(`arg0`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L88)
+
+___
+
+### deleteDefine
+
+▸ **deleteDefine**(`arg0`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L99)
+
+___
+
+### setUniform
+
+▸ **setUniform**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `any` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L107)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L115)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L123)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L131)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L139)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L147)
+
+___
+
+### getUniform
+
+▸ **getUniform**(`arg0`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L155)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`arg0`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:159](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L159)
+
+___
+
+### getUniformVector2
+
+▸ **getUniformVector2**(`arg0`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:163](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L163)
+
+___
+
+### getUniformVector3
+
+▸ **getUniformVector3**(`arg0`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:167](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L167)
+
+___
+
+### getUniformVector4
+
+▸ **getUniformVector4**(`arg0`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:171](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L171)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`arg0`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:175](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L175)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L179)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`arg0`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:188](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L188)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:192](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L192)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L200)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:204](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L204)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`arg0`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:212](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L212)
+
+___
+
+### setStructStorageBuffer
+
+▸ **setStructStorageBuffer**\<`T`\>(`arg0`, `arg1`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StructStorageGPUBuffer`](StructStorageGPUBuffer.md)\<`T`\> |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L216)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L224)
+
+___
+
+### noticeValueChange
+
+▸ **noticeValueChange**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L228)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:236](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L236)
+
+___
+
+### clone
+
+▸ **clone**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L240)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:249](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L249)
diff --git a/docs/api/classes/ShaderPassBase.md b/docs/api/classes/ShaderPassBase.md
new file mode 100644
index 00000000..60c10280
--- /dev/null
+++ b/docs/api/classes/ShaderPassBase.md
@@ -0,0 +1,706 @@
+# Class: ShaderPassBase
+
+## Hierarchy
+
+- **`ShaderPassBase`**
+
+ ↳ [`RenderShaderPass`](RenderShaderPass.md)
+
+### Constructors
+
+- [constructor](ShaderPassBase.md#constructor)
+
+### Properties
+
+- [instanceID](ShaderPassBase.md#instanceid)
+- [shaderVariant](ShaderPassBase.md#shadervariant)
+- [vsEntryPoint](ShaderPassBase.md#vsentrypoint)
+- [fsEntryPoint](ShaderPassBase.md#fsentrypoint)
+- [bindGroups](ShaderPassBase.md#bindgroups)
+- [shaderReflection](ShaderPassBase.md#shaderreflection)
+- [defineValue](ShaderPassBase.md#definevalue)
+- [constValues](ShaderPassBase.md#constvalues)
+- [uniforms](ShaderPassBase.md#uniforms)
+- [materialDataUniformBuffer](ShaderPassBase.md#materialdatauniformbuffer)
+
+### Methods
+
+- [noticeShaderChange](ShaderPassBase.md#noticeshaderchange)
+- [noticeValueChange](ShaderPassBase.md#noticevaluechange)
+- [setStorageBuffer](ShaderPassBase.md#setstoragebuffer)
+- [setStructStorageBuffer](ShaderPassBase.md#setstructstoragebuffer)
+- [setUniformBuffer](ShaderPassBase.md#setuniformbuffer)
+- [setDefine](ShaderPassBase.md#setdefine)
+- [hasDefine](ShaderPassBase.md#hasdefine)
+- [deleteDefine](ShaderPassBase.md#deletedefine)
+- [setUniformFloat](ShaderPassBase.md#setuniformfloat)
+- [setUniformVector2](ShaderPassBase.md#setuniformvector2)
+- [setUniformVector3](ShaderPassBase.md#setuniformvector3)
+- [setUniformVector4](ShaderPassBase.md#setuniformvector4)
+- [setUniformColor](ShaderPassBase.md#setuniformcolor)
+- [setUniformArray](ShaderPassBase.md#setuniformarray)
+- [setUniform](ShaderPassBase.md#setuniform)
+- [getUniform](ShaderPassBase.md#getuniform)
+- [getUniformFloat](ShaderPassBase.md#getuniformfloat)
+- [getUniformVector2](ShaderPassBase.md#getuniformvector2)
+- [getUniformVector3](ShaderPassBase.md#getuniformvector3)
+- [getUniformVector4](ShaderPassBase.md#getuniformvector4)
+- [getUniformColor](ShaderPassBase.md#getuniformcolor)
+- [getBuffer](ShaderPassBase.md#getbuffer)
+- [applyUniform](ShaderPassBase.md#applyuniform)
+- [destroy](ShaderPassBase.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new ShaderPassBase**(): [`ShaderPassBase`](ShaderPassBase.md)
+
+#### Returns
+
+[`ShaderPassBase`](ShaderPassBase.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L72)
+
+## Properties
+
+### instanceID
+
+• `Readonly` **instanceID**: `string`
+
+Shader Unique instance id
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L21)
+
+___
+
+### shaderVariant
+
+• **shaderVariant**: `string`
+
+Shader variant value
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L26)
+
+___
+
+### vsEntryPoint
+
+• **vsEntryPoint**: `string`
+
+Vertex stage entry point name
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L31)
+
+___
+
+### fsEntryPoint
+
+• **fsEntryPoint**: `string`
+
+Fragment stage entry point name
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L36)
+
+___
+
+### bindGroups
+
+• **bindGroups**: `GPUBindGroup`[]
+
+BindGroup collection
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L41)
+
+___
+
+### shaderReflection
+
+• **shaderReflection**: `ShaderReflection`
+
+Shader reflection info
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L46)
+
+___
+
+### defineValue
+
+• **defineValue**: `Object`
+
+The defined syntax value of the Shader when it is precompiled
+
+#### Index signature
+
+▪ [name: `string`]: `any`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:51](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L51)
+
+___
+
+### constValues
+
+• **constValues**: `Object`
+
+The constant value of the Shader when it is precompiled
+
+#### Index signature
+
+▪ [name: `string`]: `any`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L56)
+
+___
+
+### uniforms
+
+• **uniforms**: `Object`
+
+Uniforms data collection
+
+#### Index signature
+
+▪ [name: `string`]: `UniformNode`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:61](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L61)
+
+___
+
+### materialDataUniformBuffer
+
+• **materialDataUniformBuffer**: [`MaterialDataUniformGPUBuffer`](MaterialDataUniformGPUBuffer.md)
+
+Uniform data for materials
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:66](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L66)
+
+## Methods
+
+### noticeShaderChange
+
+▸ **noticeShaderChange**(): `void`
+
+notice shader change
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L83)
+
+___
+
+### noticeValueChange
+
+▸ **noticeValueChange**(): `void`
+
+notice shader state change
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L90)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`name`, `buffer`): `void`
+
+set storage gpu buffer
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | buffer name |
+| `buffer` | [`StorageGPUBuffer`](StorageGPUBuffer.md) | storage useAge gpu buffer |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L99)
+
+___
+
+### setStructStorageBuffer
+
+▸ **setStructStorageBuffer**\<`T`\>(`name`, `buffer`): `void`
+
+set struct storage gpu buffer
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | buffer name |
+| `buffer` | [`StructStorageGPUBuffer`](StructStorageGPUBuffer.md)\<`T`\> | struct storage useAge gpu buffer |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L113)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`name`, `buffer`): `void`
+
+set uniform gpu buffer min size 256
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `buffer` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:127](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L127)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`defineName`, `value`): `void`
+
+set define value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `defineName` | `string` |
+| `value` | `any` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:141](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L141)
+
+___
+
+### hasDefine
+
+▸ **hasDefine**(`defineName`): `boolean`
+
+Whether there is a define key
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `defineName` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L155)
+
+___
+
+### deleteDefine
+
+▸ **deleteDefine**(`defineName`): `void`
+
+delete define value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `defineName` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:163](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L163)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`name`, `value`): `void`
+
+set uniform float value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L173)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`name`, `value`): `void`
+
+set uniform vector2 value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `value` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:187](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L187)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`name`, `value`): `void`
+
+set uniform vector3 value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:201](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L201)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`name`, `value`): `void`
+
+set uniform vector4 value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:214](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L214)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`name`, `value`): `void`
+
+set uniform color value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L227)
+
+___
+
+### setUniformArray
+
+▸ **setUniformArray**(`name`, `value`): `void`
+
+set uniform array value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `value` | `Float32Array` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L240)
+
+___
+
+### setUniform
+
+▸ **setUniform**(`name`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `value` | `any` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:248](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L248)
+
+___
+
+### getUniform
+
+▸ **getUniform**(`name`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:256](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L256)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:260](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L260)
+
+___
+
+### getUniformVector2
+
+▸ **getUniformVector2**(`name`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:264](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L264)
+
+___
+
+### getUniformVector3
+
+▸ **getUniformVector3**(`name`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:268](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L268)
+
+___
+
+### getUniformVector4
+
+▸ **getUniformVector4**(`name`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:272](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L272)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`name`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:276](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L276)
+
+___
+
+### getBuffer
+
+▸ **getBuffer**(`name`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:280](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L280)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:288](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L288)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+destroy
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/ShaderPassBase.ts:297](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/ShaderPassBase.ts#L297)
diff --git a/docs/api/classes/ShaderUtil.md b/docs/api/classes/ShaderUtil.md
new file mode 100644
index 00000000..28231b34
--- /dev/null
+++ b/docs/api/classes/ShaderUtil.md
@@ -0,0 +1,58 @@
+# Class: ShaderUtil
+
+### Constructors
+
+- [constructor](ShaderUtil.md#constructor)
+
+### Properties
+
+- [renderShaderModulePool](ShaderUtil.md#rendershadermodulepool)
+- [renderShader](ShaderUtil.md#rendershader)
+
+### Methods
+
+- [init](ShaderUtil.md#init)
+
+## Constructors
+
+### constructor
+
+• **new ShaderUtil**(): [`ShaderUtil`](ShaderUtil.md)
+
+#### Returns
+
+[`ShaderUtil`](ShaderUtil.md)
+
+## Properties
+
+### renderShaderModulePool
+
+▪ `Static` **renderShaderModulePool**: `Map`\<`string`, `GPUShaderModule`\>
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/util/ShaderUtil.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/util/ShaderUtil.ts#L23)
+
+___
+
+### renderShader
+
+▪ `Static` **renderShader**: `Map`\<`string`, [`RenderShaderPass`](RenderShaderPass.md)\>
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/util/ShaderUtil.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/util/ShaderUtil.ts#L24)
+
+## Methods
+
+### init
+
+▸ **init**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/util/ShaderUtil.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/util/ShaderUtil.ts#L26)
diff --git a/docs/api/classes/SkeletonAnimationComponent.md b/docs/api/classes/SkeletonAnimationComponent.md
new file mode 100644
index 00000000..c5f65f97
--- /dev/null
+++ b/docs/api/classes/SkeletonAnimationComponent.md
@@ -0,0 +1,992 @@
+# Class: SkeletonAnimationComponent
+
+skeleton animation
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`SkeletonAnimationComponent`**
+
+### Constructors
+
+- [constructor](SkeletonAnimationComponent.md#constructor)
+
+### Properties
+
+- [object3D](SkeletonAnimationComponent.md#object3d)
+- [isDestroyed](SkeletonAnimationComponent.md#isdestroyed)
+- [isPlaying](SkeletonAnimationComponent.md#isplaying)
+- [timeScale](SkeletonAnimationComponent.md#timescale)
+
+### Accessors
+
+- [eventDispatcher](SkeletonAnimationComponent.md#eventdispatcher)
+- [isStart](SkeletonAnimationComponent.md#isstart)
+- [transform](SkeletonAnimationComponent.md#transform)
+- [enable](SkeletonAnimationComponent.md#enable)
+- [currName](SkeletonAnimationComponent.md#currname)
+- [skeleton](SkeletonAnimationComponent.md#skeleton)
+- [finalSkeletonPose](SkeletonAnimationComponent.md#finalskeletonpose)
+- [jointMatrixIndexTableBuffer](SkeletonAnimationComponent.md#jointmatrixindextablebuffer)
+
+### Methods
+
+- [init](SkeletonAnimationComponent.md#init)
+- [stop](SkeletonAnimationComponent.md#stop)
+- [onEnable](SkeletonAnimationComponent.md#onenable)
+- [onDisable](SkeletonAnimationComponent.md#ondisable)
+- [onLateUpdate](SkeletonAnimationComponent.md#onlateupdate)
+- [onBeforeUpdate](SkeletonAnimationComponent.md#onbeforeupdate)
+- [onCompute](SkeletonAnimationComponent.md#oncompute)
+- [onGraphic](SkeletonAnimationComponent.md#ongraphic)
+- [onParentChange](SkeletonAnimationComponent.md#onparentchange)
+- [onAddChild](SkeletonAnimationComponent.md#onaddchild)
+- [onRemoveChild](SkeletonAnimationComponent.md#onremovechild)
+- [copyComponent](SkeletonAnimationComponent.md#copycomponent)
+- [beforeDestroy](SkeletonAnimationComponent.md#beforedestroy)
+- [destroy](SkeletonAnimationComponent.md#destroy)
+- [start](SkeletonAnimationComponent.md#start)
+- [getJointIndexTable](SkeletonAnimationComponent.md#getjointindextable)
+- [addAnimationClip](SkeletonAnimationComponent.md#addanimationclip)
+- [getAnimationClip](SkeletonAnimationComponent.md#getanimationclip)
+- [getAnimationClips](SkeletonAnimationComponent.md#getanimationclips)
+- [getAnimationClipState](SkeletonAnimationComponent.md#getanimationclipstate)
+- [getAnimationClipStates](SkeletonAnimationComponent.md#getanimationclipstates)
+- [pause](SkeletonAnimationComponent.md#pause)
+- [resume](SkeletonAnimationComponent.md#resume)
+- [play](SkeletonAnimationComponent.md#play)
+- [crossFade](SkeletonAnimationComponent.md#crossfade)
+- [setAnimIsLoop](SkeletonAnimationComponent.md#setanimisloop)
+- [addJointBind](SkeletonAnimationComponent.md#addjointbind)
+- [removeJointBind](SkeletonAnimationComponent.md#removejointbind)
+- [cloneTo](SkeletonAnimationComponent.md#cloneto)
+
+## Constructors
+
+### constructor
+
+• **new SkeletonAnimationComponent**(): [`SkeletonAnimationComponent`](SkeletonAnimationComponent.md)
+
+#### Returns
+
+[`SkeletonAnimationComponent`](SkeletonAnimationComponent.md)
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L37)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### isPlaying
+
+• **isPlaying**: `boolean` = `true`
+
+Whether it is playing
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L20)
+
+___
+
+### timeScale
+
+• **timeScale**: `number` = `1.0`
+
+Global animation time scaling
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L25)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### currName
+
+• `get` **currName**(): `string`
+
+The name of the currently playing animation
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L48)
+
+___
+
+### skeleton
+
+• `get` **skeleton**(): `Skeleton`
+
+Skeleton data
+
+#### Returns
+
+`Skeleton`
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L70)
+
+• `set` **skeleton**(`value`): `void`
+
+Skeleton data
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Skeleton` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L58)
+
+___
+
+### finalSkeletonPose
+
+• `get` **finalSkeletonPose**(): [`SkeletonPose`](SkeletonPose.md)
+
+Current final skeleton posture data
+
+#### Returns
+
+[`SkeletonPose`](SkeletonPose.md)
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L77)
+
+___
+
+### jointMatrixIndexTableBuffer
+
+• `get` **jointMatrixIndexTableBuffer**(): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+Bone matrix index table data
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L84)
+
+## Methods
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[init](ComponentBase.md#init)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onEnable](ComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onDisable](ComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[destroy](ComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[start](ComponentBase.md#start)
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L41)
+
+___
+
+### getJointIndexTable
+
+▸ **getJointIndexTable**(`skinJointsName`): `number`[]
+
+Get the bone index information by the bone name
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `skinJointsName` | `string`[] | bone name |
+
+#### Returns
+
+`number`[]
+
+bone index
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L93)
+
+___
+
+### addAnimationClip
+
+▸ **addAnimationClip**(`clip`): `void`
+
+Add a skeleton animation clip
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `clip` | `SkeletonAnimationClip` | Skeletal animation clip |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L107)
+
+___
+
+### getAnimationClip
+
+▸ **getAnimationClip**(`name`): `SkeletonAnimationClip`
+
+Gets the animation clip data object with the specified name
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | Name of animation |
+
+#### Returns
+
+`SkeletonAnimationClip`
+
+Animation clip data object
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L124)
+
+___
+
+### getAnimationClips
+
+▸ **getAnimationClips**(): `SkeletonAnimationClip`[]
+
+Gets all animation clip data objects
+
+#### Returns
+
+`SkeletonAnimationClip`[]
+
+Animation clip data object
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L136)
+
+___
+
+### getAnimationClipState
+
+▸ **getAnimationClipState**(`name`): `SkeletonAnimationClipState`
+
+Gets the animation clip state object with the specified name
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | Name of animation |
+
+#### Returns
+
+`SkeletonAnimationClipState`
+
+Animation clip state object
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L145)
+
+___
+
+### getAnimationClipStates
+
+▸ **getAnimationClipStates**(): `Map`\<`string`, `SkeletonAnimationClipState`\>
+
+Gets all animation clip state objects
+
+#### Returns
+
+`Map`\<`string`, `SkeletonAnimationClipState`\>
+
+Animation clip state object
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L156)
+
+___
+
+### pause
+
+▸ **pause**(): `void`
+
+stop playing
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:163](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L163)
+
+___
+
+### resume
+
+▸ **resume**(): `void`
+
+Resume playback
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:170](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L170)
+
+___
+
+### play
+
+▸ **play**(`animName`, `speed?`, `reset?`): `boolean`
+
+Play the specified animation
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `animName` | `string` | `undefined` | The data set name for the animation |
+| `speed` | `number` | `1` | Animation playback speed, default value is 1.0 |
+| `reset` | `boolean` | `false` | When true, each play starts with the first frame |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:181](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L181)
+
+___
+
+### crossFade
+
+▸ **crossFade**(`animName`, `crossTime`): `void`
+
+Fades the current animation and fades into another animation state for a specified time.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `animName` | `string` | The name of the animation to fade in. |
+| `crossTime` | `number` | The time of transition, in seconds. |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L211)
+
+___
+
+### setAnimIsLoop
+
+▸ **setAnimIsLoop**(`animName`, `isLoop`): `void`
+
+Set the animation loop
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `animName` | `string` | The data set name for the animation |
+| `isLoop` | `boolean` | If true, loop the animation |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L251)
+
+___
+
+### addJointBind
+
+▸ **addJointBind**(`jointName`, `obj`): `void`
+
+Add joint bindings to the object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `jointName` | `string` | Name of joint |
+| `obj` | [`Object3D`](Object3D.md) | Object of binding |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:262](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L262)
+
+___
+
+### removeJointBind
+
+▸ **removeJointBind**(`obj`): `void`
+
+Removes the joint binding of the specified object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | Object of binding |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:274](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L274)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+Clones the current component to the specified object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/SkeletonAnimationComponent.ts:322](https://github.com/Orillusion/orillusion/blob/main/src/components/SkeletonAnimationComponent.ts#L322)
diff --git a/docs/api/classes/SkeletonAnimation_shader.md b/docs/api/classes/SkeletonAnimation_shader.md
new file mode 100644
index 00000000..1153cfa8
--- /dev/null
+++ b/docs/api/classes/SkeletonAnimation_shader.md
@@ -0,0 +1,40 @@
+# Class: SkeletonAnimation\_shader
+
+### Constructors
+
+- [constructor](SkeletonAnimation_shader.md#constructor)
+
+### Methods
+
+- [groupBindingAndFunctions](SkeletonAnimation_shader.md#groupbindingandfunctions)
+
+## Constructors
+
+### constructor
+
+• **new SkeletonAnimation_shader**(): [`SkeletonAnimation_shader`](SkeletonAnimation_shader.md)
+
+#### Returns
+
+[`SkeletonAnimation_shader`](SkeletonAnimation_shader.md)
+
+## Methods
+
+### groupBindingAndFunctions
+
+▸ **groupBindingAndFunctions**(`beginGroup`, `beginBinding`): `string`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `beginGroup` | `number` |
+| `beginBinding` | `number` |
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/assets/shader/anim/SkeletonAnimation_shader.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/anim/SkeletonAnimation_shader.ts#L2)
diff --git a/docs/api/classes/SkeletonPose.md b/docs/api/classes/SkeletonPose.md
new file mode 100644
index 00000000..7d080808
--- /dev/null
+++ b/docs/api/classes/SkeletonPose.md
@@ -0,0 +1,190 @@
+# Class: SkeletonPose
+
+Skeleton animation consists of many skeleton pose,
+and each pose describes the transformation information of all bone
+
+### Constructors
+
+- [constructor](SkeletonPose.md#constructor)
+
+### Properties
+
+- [time](SkeletonPose.md#time)
+
+### Accessors
+
+- [numJoint](SkeletonPose.md#numjoint)
+- [joints](SkeletonPose.md#joints)
+- [jointMatrixIndexTable](SkeletonPose.md#jointmatrixindextable)
+
+### Methods
+
+- [buildSkeletonPose](SkeletonPose.md#buildskeletonpose)
+- [lerp](SkeletonPose.md#lerp)
+- [copyFrom](SkeletonPose.md#copyfrom)
+- [reset](SkeletonPose.md#reset)
+
+## Constructors
+
+### constructor
+
+• **new SkeletonPose**(`skeleton`, `useGlobalMatrix?`): [`SkeletonPose`](SkeletonPose.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `skeleton` | `Skeleton` | `undefined` |
+| `useGlobalMatrix` | `boolean` | `false` |
+
+#### Returns
+
+[`SkeletonPose`](SkeletonPose.md)
+
+#### Defined in
+
+[src/components/anim/skeletonAnim/SkeletonPose.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/skeletonAnim/SkeletonPose.ts#L21)
+
+## Properties
+
+### time
+
+• **time**: `number`
+
+time of this pose in owner animation clip
+
+#### Defined in
+
+[src/components/anim/skeletonAnim/SkeletonPose.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/skeletonAnim/SkeletonPose.ts#L16)
+
+## Accessors
+
+### numJoint
+
+• `get` **numJoint**(): `number`
+
+Returns joints count of owner skeleton
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/anim/skeletonAnim/SkeletonPose.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/skeletonAnim/SkeletonPose.ts#L67)
+
+___
+
+### joints
+
+• `get` **joints**(): [`JointPose`](JointPose.md)[]
+
+Returns all joint pose
+
+#### Returns
+
+[`JointPose`](JointPose.md)[]
+
+#### Defined in
+
+[src/components/anim/skeletonAnim/SkeletonPose.ts:74](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/skeletonAnim/SkeletonPose.ts#L74)
+
+___
+
+### jointMatrixIndexTable
+
+• `get` **jointMatrixIndexTable**(): `number`[]
+
+Returns list of matrix's index
+
+#### Returns
+
+`number`[]
+
+#### Defined in
+
+[src/components/anim/skeletonAnim/SkeletonPose.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/skeletonAnim/SkeletonPose.ts#L81)
+
+## Methods
+
+### buildSkeletonPose
+
+▸ **buildSkeletonPose**(`poseData`): `void`
+
+build this pose from float32 array data
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `poseData` | `Float32Array` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/skeletonAnim/SkeletonPose.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/skeletonAnim/SkeletonPose.ts#L35)
+
+___
+
+### lerp
+
+▸ **lerp**(`a`, `b`, `weight`): `void`
+
+Returns lerped skeletonPose from pose a to pose b
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`SkeletonPose`](SkeletonPose.md) | selected pose No.1 |
+| `b` | [`SkeletonPose`](SkeletonPose.md) | selected pose No.2 |
+| `weight` | `number` | number |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/skeletonAnim/SkeletonPose.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/skeletonAnim/SkeletonPose.ts#L91)
+
+___
+
+### copyFrom
+
+▸ **copyFrom**(`other`): `void`
+
+Copy skeleton pose from other skeleton pose
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `other` | [`SkeletonPose`](SkeletonPose.md) | source skeleton pose |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/skeletonAnim/SkeletonPose.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/skeletonAnim/SkeletonPose.ts#L112)
+
+___
+
+### reset
+
+▸ **reset**(): `void`
+
+Reset this skeleton pose
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/anim/skeletonAnim/SkeletonPose.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/skeletonAnim/SkeletonPose.ts#L121)
diff --git a/docs/api/classes/SkinnedMeshRenderer.md b/docs/api/classes/SkinnedMeshRenderer.md
new file mode 100644
index 00000000..43b161fe
--- /dev/null
+++ b/docs/api/classes/SkinnedMeshRenderer.md
@@ -0,0 +1,1572 @@
+# Class: SkinnedMeshRenderer
+
+Skin Mesh Renderer Component
+Renders a deformable mesh.
+Deformable meshes include skin meshes (meshes with bones and bound poses),
+meshes with mixed shapes, and meshes running cloth simulations.
+
+## Hierarchy
+
+- [`MeshRenderer`](MeshRenderer.md)
+
+ ↳ **`SkinnedMeshRenderer`**
+
+### Constructors
+
+- [constructor](SkinnedMeshRenderer.md#constructor)
+
+### Properties
+
+- [object3D](SkinnedMeshRenderer.md#object3d)
+- [isDestroyed](SkinnedMeshRenderer.md#isdestroyed)
+- [receiveShadow](SkinnedMeshRenderer.md#receiveshadow)
+- [morphData](SkinnedMeshRenderer.md#morphdata)
+- [instanceCount](SkinnedMeshRenderer.md#instancecount)
+- [lodLevel](SkinnedMeshRenderer.md#lodlevel)
+- [alwaysRender](SkinnedMeshRenderer.md#alwaysrender)
+- [instanceID](SkinnedMeshRenderer.md#instanceid)
+- [drawType](SkinnedMeshRenderer.md#drawtype)
+- [isRenderOrderChange](SkinnedMeshRenderer.md#isrenderorderchange)
+- [needSortOnCameraZ](SkinnedMeshRenderer.md#needsortoncameraz)
+- [isRecievePostEffectUI](SkinnedMeshRenderer.md#isrecieveposteffectui)
+- [skinJointsName](SkinnedMeshRenderer.md#skinjointsname)
+
+### Accessors
+
+- [eventDispatcher](SkinnedMeshRenderer.md#eventdispatcher)
+- [isStart](SkinnedMeshRenderer.md#isstart)
+- [transform](SkinnedMeshRenderer.md#transform)
+- [enable](SkinnedMeshRenderer.md#enable)
+- [geometry](SkinnedMeshRenderer.md#geometry)
+- [material](SkinnedMeshRenderer.md#material)
+- [renderLayer](SkinnedMeshRenderer.md#renderlayer)
+- [rendererMask](SkinnedMeshRenderer.md#renderermask)
+- [renderOrder](SkinnedMeshRenderer.md#renderorder)
+- [materials](SkinnedMeshRenderer.md#materials)
+- [castShadow](SkinnedMeshRenderer.md#castshadow)
+- [castGI](SkinnedMeshRenderer.md#castgi)
+- [castReflection](SkinnedMeshRenderer.md#castreflection)
+- [skeletonAnimation](SkinnedMeshRenderer.md#skeletonanimation)
+- [skinInverseBindMatrices](SkinnedMeshRenderer.md#skininversebindmatrices)
+- [inverseBindMatrixBuffer](SkinnedMeshRenderer.md#inversebindmatrixbuffer)
+- [jointIndexTableBuffer](SkinnedMeshRenderer.md#jointindextablebuffer)
+
+### Methods
+
+- [stop](SkinnedMeshRenderer.md#stop)
+- [onUpdate](SkinnedMeshRenderer.md#onupdate)
+- [onLateUpdate](SkinnedMeshRenderer.md#onlateupdate)
+- [onBeforeUpdate](SkinnedMeshRenderer.md#onbeforeupdate)
+- [onGraphic](SkinnedMeshRenderer.md#ongraphic)
+- [onParentChange](SkinnedMeshRenderer.md#onparentchange)
+- [onAddChild](SkinnedMeshRenderer.md#onaddchild)
+- [onRemoveChild](SkinnedMeshRenderer.md#onremovechild)
+- [onDisable](SkinnedMeshRenderer.md#ondisable)
+- [copyComponent](SkinnedMeshRenderer.md#copycomponent)
+- [setMorphInfluence](SkinnedMeshRenderer.md#setmorphinfluence)
+- [setMorphInfluenceIndex](SkinnedMeshRenderer.md#setmorphinfluenceindex)
+- [onCompute](SkinnedMeshRenderer.md#oncompute)
+- [destroy](SkinnedMeshRenderer.md#destroy)
+- [init](SkinnedMeshRenderer.md#init)
+- [attachSceneOctree](SkinnedMeshRenderer.md#attachsceneoctree)
+- [detachSceneOctree](SkinnedMeshRenderer.md#detachsceneoctree)
+- [addMask](SkinnedMeshRenderer.md#addmask)
+- [removeMask](SkinnedMeshRenderer.md#removemask)
+- [hasMask](SkinnedMeshRenderer.md#hasmask)
+- [addRendererMask](SkinnedMeshRenderer.md#addrenderermask)
+- [removeRendererMask](SkinnedMeshRenderer.md#removerenderermask)
+- [selfCloneMaterials](SkinnedMeshRenderer.md#selfclonematerials)
+- [renderPass](SkinnedMeshRenderer.md#renderpass)
+- [renderPass2](SkinnedMeshRenderer.md#renderpass2)
+- [recordRenderPass2](SkinnedMeshRenderer.md#recordrenderpass2)
+- [preInit](SkinnedMeshRenderer.md#preinit)
+- [beforeDestroy](SkinnedMeshRenderer.md#beforedestroy)
+- [start](SkinnedMeshRenderer.md#start)
+- [onEnable](SkinnedMeshRenderer.md#onenable)
+- [cloneTo](SkinnedMeshRenderer.md#cloneto)
+
+## Constructors
+
+### constructor
+
+• **new SkinnedMeshRenderer**(): [`SkinnedMeshRenderer`](SkinnedMeshRenderer.md)
+
+#### Returns
+
+[`SkinnedMeshRenderer`](SkinnedMeshRenderer.md)
+
+#### Overrides
+
+[MeshRenderer](MeshRenderer.md).[constructor](MeshRenderer.md#constructor)
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer.ts#L27)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[object3D](MeshRenderer.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[isDestroyed](MeshRenderer.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### receiveShadow
+
+• **receiveShadow**: `boolean`
+
+Enabling this option allows the grid to display any shadows cast on the grid.
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[receiveShadow](MeshRenderer.md#receiveshadow)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L23)
+
+___
+
+### morphData
+
+• **morphData**: [`MorphTargetData`](MorphTargetData.md)
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[morphData](MeshRenderer.md#morphdata)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L24)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[instanceCount](MeshRenderer.md#instancecount)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[lodLevel](MeshRenderer.md#lodlevel)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[alwaysRender](MeshRenderer.md#alwaysrender)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[instanceID](MeshRenderer.md#instanceid)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[drawType](MeshRenderer.md#drawtype)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[isRenderOrderChange](MeshRenderer.md#isrenderorderchange)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[needSortOnCameraZ](MeshRenderer.md#needsortoncameraz)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[isRecievePostEffectUI](MeshRenderer.md#isrecieveposteffectui)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+___
+
+### skinJointsName
+
+• **skinJointsName**: `string`[]
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer.ts#L21)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+MeshRenderer.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### geometry
+
+• `get` **geometry**(): [`GeometryBase`](GeometryBase.md)
+
+The geometry of the mesh determines its shape
+
+#### Returns
+
+[`GeometryBase`](GeometryBase.md)
+
+#### Inherited from
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L53)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryBase`](GeometryBase.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L57)
+
+___
+
+### material
+
+• `get` **material**(): [`Material`](Material.md)
+
+material
+
+#### Returns
+
+[`Material`](Material.md)
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L99)
+
+• `set` **material**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Material`](Material.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L103)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): [`Material`](Material.md)[]
+
+#### Returns
+
+[`Material`](Material.md)[]
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Material`](Material.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+___
+
+### skeletonAnimation
+
+• `get` **skeletonAnimation**(): [`SkeletonAnimationComponent`](SkeletonAnimationComponent.md)
+
+#### Returns
+
+[`SkeletonAnimationComponent`](SkeletonAnimationComponent.md)
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer.ts#L54)
+
+• `set` **skeletonAnimation**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`SkeletonAnimationComponent`](SkeletonAnimationComponent.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer.ts#L58)
+
+___
+
+### skinInverseBindMatrices
+
+• `get` **skinInverseBindMatrices**(): `Float32Array`[]
+
+#### Returns
+
+`Float32Array`[]
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer.ts#L71)
+
+• `set` **skinInverseBindMatrices**(`inverseBindMatrices`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `inverseBindMatrices` | `Float32Array`[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer.ts#L75)
+
+___
+
+### inverseBindMatrixBuffer
+
+• `get` **inverseBindMatrixBuffer**(): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer.ts#L87)
+
+___
+
+### jointIndexTableBuffer
+
+• `get` **jointIndexTableBuffer**(): `GPUBuffer`
+
+#### Returns
+
+`GPUBuffer`
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer.ts#L91)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[stop](MeshRenderer.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onUpdate](MeshRenderer.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onLateUpdate](MeshRenderer.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onBeforeUpdate](MeshRenderer.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onGraphic](MeshRenderer.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onParentChange](MeshRenderer.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onAddChild](MeshRenderer.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onRemoveChild](MeshRenderer.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onDisable](MeshRenderer.md#ondisable)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L34)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[copyComponent](MeshRenderer.md#copycomponent)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L43)
+
+___
+
+### setMorphInfluence
+
+▸ **setMorphInfluence**(`key`, `value`): `void`
+
+Set deformation animation parameters
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[setMorphInfluence](MeshRenderer.md#setmorphinfluence)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L110)
+
+___
+
+### setMorphInfluenceIndex
+
+▸ **setMorphInfluenceIndex**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[setMorphInfluenceIndex](MeshRenderer.md#setmorphinfluenceindex)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view`, `command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onCompute](MeshRenderer.md#oncompute)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L128)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[destroy](MeshRenderer.md#destroy)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L157)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[init](MeshRenderer.md#init)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L70)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | [`Octree`](Octree.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[attachSceneOctree](MeshRenderer.md#attachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[detachSceneOctree](MeshRenderer.md#detachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[addMask](MeshRenderer.md#addmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[removeMask](MeshRenderer.md#removemask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[hasMask](MeshRenderer.md#hasmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[addRendererMask](MeshRenderer.md#addrenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[removeRendererMask](MeshRenderer.md#removerenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[selfCloneMaterials](MeshRenderer.md#selfclonematerials)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `passType` | `PassType` |
+| `renderContext` | [`RenderContext`](RenderContext.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[renderPass](MeshRenderer.md#renderpass)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L370)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+render pass at passType
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[renderPass2](MeshRenderer.md#renderpass2)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L438)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[recordRenderPass2](MeshRenderer.md#recordrenderpass2)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[preInit](MeshRenderer.md#preinit)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[beforeDestroy](MeshRenderer.md#beforedestroy)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[MeshRenderer](MeshRenderer.md).[start](MeshRenderer.md#start)
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer.ts#L32)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[MeshRenderer](MeshRenderer.md).[onEnable](MeshRenderer.md#onenable)
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer.ts#L50)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[MeshRenderer](MeshRenderer.md).[cloneTo](MeshRenderer.md#cloneto)
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer.ts:95](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer.ts#L95)
diff --git a/docs/api/classes/SkinnedMeshRenderer2.md b/docs/api/classes/SkinnedMeshRenderer2.md
new file mode 100644
index 00000000..3a570261
--- /dev/null
+++ b/docs/api/classes/SkinnedMeshRenderer2.md
@@ -0,0 +1,1587 @@
+# Class: SkinnedMeshRenderer2
+
+Skin Mesh Renderer Component
+Renders a deformable mesh.
+Deformable meshes include skin meshes (meshes with bones and bound poses),
+meshes with mixed shapes, and meshes running cloth simulations.
+
+## Hierarchy
+
+- [`MeshRenderer`](MeshRenderer.md)
+
+ ↳ **`SkinnedMeshRenderer2`**
+
+### Constructors
+
+- [constructor](SkinnedMeshRenderer2.md#constructor)
+
+### Properties
+
+- [object3D](SkinnedMeshRenderer2.md#object3d)
+- [isDestroyed](SkinnedMeshRenderer2.md#isdestroyed)
+- [receiveShadow](SkinnedMeshRenderer2.md#receiveshadow)
+- [morphData](SkinnedMeshRenderer2.md#morphdata)
+- [instanceCount](SkinnedMeshRenderer2.md#instancecount)
+- [lodLevel](SkinnedMeshRenderer2.md#lodlevel)
+- [alwaysRender](SkinnedMeshRenderer2.md#alwaysrender)
+- [instanceID](SkinnedMeshRenderer2.md#instanceid)
+- [drawType](SkinnedMeshRenderer2.md#drawtype)
+- [isRenderOrderChange](SkinnedMeshRenderer2.md#isrenderorderchange)
+- [needSortOnCameraZ](SkinnedMeshRenderer2.md#needsortoncameraz)
+- [isRecievePostEffectUI](SkinnedMeshRenderer2.md#isrecieveposteffectui)
+- [skinJointsName](SkinnedMeshRenderer2.md#skinjointsname)
+
+### Accessors
+
+- [eventDispatcher](SkinnedMeshRenderer2.md#eventdispatcher)
+- [isStart](SkinnedMeshRenderer2.md#isstart)
+- [transform](SkinnedMeshRenderer2.md#transform)
+- [enable](SkinnedMeshRenderer2.md#enable)
+- [material](SkinnedMeshRenderer2.md#material)
+- [renderLayer](SkinnedMeshRenderer2.md#renderlayer)
+- [rendererMask](SkinnedMeshRenderer2.md#renderermask)
+- [renderOrder](SkinnedMeshRenderer2.md#renderorder)
+- [materials](SkinnedMeshRenderer2.md#materials)
+- [castShadow](SkinnedMeshRenderer2.md#castshadow)
+- [castGI](SkinnedMeshRenderer2.md#castgi)
+- [castReflection](SkinnedMeshRenderer2.md#castreflection)
+- [geometry](SkinnedMeshRenderer2.md#geometry)
+- [blendShape](SkinnedMeshRenderer2.md#blendshape)
+- [skeletonAnimation](SkinnedMeshRenderer2.md#skeletonanimation)
+- [skinInverseBindMatrices](SkinnedMeshRenderer2.md#skininversebindmatrices)
+- [inverseBindMatrixBuffer](SkinnedMeshRenderer2.md#inversebindmatrixbuffer)
+- [jointIndexTableBuffer](SkinnedMeshRenderer2.md#jointindextablebuffer)
+
+### Methods
+
+- [stop](SkinnedMeshRenderer2.md#stop)
+- [onUpdate](SkinnedMeshRenderer2.md#onupdate)
+- [onLateUpdate](SkinnedMeshRenderer2.md#onlateupdate)
+- [onBeforeUpdate](SkinnedMeshRenderer2.md#onbeforeupdate)
+- [onGraphic](SkinnedMeshRenderer2.md#ongraphic)
+- [onParentChange](SkinnedMeshRenderer2.md#onparentchange)
+- [onAddChild](SkinnedMeshRenderer2.md#onaddchild)
+- [onRemoveChild](SkinnedMeshRenderer2.md#onremovechild)
+- [onDisable](SkinnedMeshRenderer2.md#ondisable)
+- [copyComponent](SkinnedMeshRenderer2.md#copycomponent)
+- [setMorphInfluence](SkinnedMeshRenderer2.md#setmorphinfluence)
+- [setMorphInfluenceIndex](SkinnedMeshRenderer2.md#setmorphinfluenceindex)
+- [onCompute](SkinnedMeshRenderer2.md#oncompute)
+- [destroy](SkinnedMeshRenderer2.md#destroy)
+- [init](SkinnedMeshRenderer2.md#init)
+- [attachSceneOctree](SkinnedMeshRenderer2.md#attachsceneoctree)
+- [detachSceneOctree](SkinnedMeshRenderer2.md#detachsceneoctree)
+- [addMask](SkinnedMeshRenderer2.md#addmask)
+- [removeMask](SkinnedMeshRenderer2.md#removemask)
+- [hasMask](SkinnedMeshRenderer2.md#hasmask)
+- [addRendererMask](SkinnedMeshRenderer2.md#addrenderermask)
+- [removeRendererMask](SkinnedMeshRenderer2.md#removerenderermask)
+- [selfCloneMaterials](SkinnedMeshRenderer2.md#selfclonematerials)
+- [renderPass](SkinnedMeshRenderer2.md#renderpass)
+- [renderPass2](SkinnedMeshRenderer2.md#renderpass2)
+- [recordRenderPass2](SkinnedMeshRenderer2.md#recordrenderpass2)
+- [preInit](SkinnedMeshRenderer2.md#preinit)
+- [beforeDestroy](SkinnedMeshRenderer2.md#beforedestroy)
+- [start](SkinnedMeshRenderer2.md#start)
+- [onEnable](SkinnedMeshRenderer2.md#onenable)
+- [cloneTo](SkinnedMeshRenderer2.md#cloneto)
+
+## Constructors
+
+### constructor
+
+• **new SkinnedMeshRenderer2**(): [`SkinnedMeshRenderer2`](SkinnedMeshRenderer2.md)
+
+#### Returns
+
+[`SkinnedMeshRenderer2`](SkinnedMeshRenderer2.md)
+
+#### Overrides
+
+[MeshRenderer](MeshRenderer.md).[constructor](MeshRenderer.md#constructor)
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer2.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer2.ts#L26)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[object3D](MeshRenderer.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[isDestroyed](MeshRenderer.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### receiveShadow
+
+• **receiveShadow**: `boolean`
+
+Enabling this option allows the grid to display any shadows cast on the grid.
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[receiveShadow](MeshRenderer.md#receiveshadow)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L23)
+
+___
+
+### morphData
+
+• **morphData**: [`MorphTargetData`](MorphTargetData.md)
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[morphData](MeshRenderer.md#morphdata)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L24)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[instanceCount](MeshRenderer.md#instancecount)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[lodLevel](MeshRenderer.md#lodlevel)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[alwaysRender](MeshRenderer.md#alwaysrender)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[instanceID](MeshRenderer.md#instanceid)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[drawType](MeshRenderer.md#drawtype)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[isRenderOrderChange](MeshRenderer.md#isrenderorderchange)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[needSortOnCameraZ](MeshRenderer.md#needsortoncameraz)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[isRecievePostEffectUI](MeshRenderer.md#isrecieveposteffectui)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+___
+
+### skinJointsName
+
+• **skinJointsName**: `string`[]
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer2.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer2.ts#L20)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+MeshRenderer.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### material
+
+• `get` **material**(): [`Material`](Material.md)
+
+material
+
+#### Returns
+
+[`Material`](Material.md)
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L99)
+
+• `set` **material**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Material`](Material.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L103)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): [`Material`](Material.md)[]
+
+#### Returns
+
+[`Material`](Material.md)[]
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Material`](Material.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+___
+
+### geometry
+
+• `get` **geometry**(): [`GeometryBase`](GeometryBase.md)
+
+The geometry of the mesh determines its shape
+
+#### Returns
+
+[`GeometryBase`](GeometryBase.md)
+
+#### Overrides
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer2.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer2.ts#L31)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryBase`](GeometryBase.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer2.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer2.ts#L35)
+
+___
+
+### blendShape
+
+• `get` **blendShape**(): [`MorphTargetData`](MorphTargetData.md)
+
+#### Returns
+
+[`MorphTargetData`](MorphTargetData.md)
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer2.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer2.ts#L64)
+
+___
+
+### skeletonAnimation
+
+• `get` **skeletonAnimation**(): [`AnimatorComponent`](AnimatorComponent.md)
+
+#### Returns
+
+[`AnimatorComponent`](AnimatorComponent.md)
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer2.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer2.ts#L73)
+
+• `set` **skeletonAnimation**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`AnimatorComponent`](AnimatorComponent.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer2.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer2.ts#L77)
+
+___
+
+### skinInverseBindMatrices
+
+• `get` **skinInverseBindMatrices**(): `Float32Array`[]
+
+#### Returns
+
+`Float32Array`[]
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer2.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer2.ts#L90)
+
+• `set` **skinInverseBindMatrices**(`inverseBindMatrices`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `inverseBindMatrices` | `Float32Array`[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer2.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer2.ts#L94)
+
+___
+
+### inverseBindMatrixBuffer
+
+• `get` **inverseBindMatrixBuffer**(): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer2.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer2.ts#L106)
+
+___
+
+### jointIndexTableBuffer
+
+• `get` **jointIndexTableBuffer**(): `GPUBuffer`
+
+#### Returns
+
+`GPUBuffer`
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer2.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer2.ts#L110)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[stop](MeshRenderer.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onUpdate](MeshRenderer.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onLateUpdate](MeshRenderer.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onBeforeUpdate](MeshRenderer.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onGraphic](MeshRenderer.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onParentChange](MeshRenderer.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onAddChild](MeshRenderer.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onRemoveChild](MeshRenderer.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onDisable](MeshRenderer.md#ondisable)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L34)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[copyComponent](MeshRenderer.md#copycomponent)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L43)
+
+___
+
+### setMorphInfluence
+
+▸ **setMorphInfluence**(`key`, `value`): `void`
+
+Set deformation animation parameters
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[setMorphInfluence](MeshRenderer.md#setmorphinfluence)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L110)
+
+___
+
+### setMorphInfluenceIndex
+
+▸ **setMorphInfluenceIndex**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[setMorphInfluenceIndex](MeshRenderer.md#setmorphinfluenceindex)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view`, `command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onCompute](MeshRenderer.md#oncompute)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L128)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[destroy](MeshRenderer.md#destroy)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L157)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[init](MeshRenderer.md#init)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L70)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | [`Octree`](Octree.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[attachSceneOctree](MeshRenderer.md#attachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[detachSceneOctree](MeshRenderer.md#detachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[addMask](MeshRenderer.md#addmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[removeMask](MeshRenderer.md#removemask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[hasMask](MeshRenderer.md#hasmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[addRendererMask](MeshRenderer.md#addrenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[removeRendererMask](MeshRenderer.md#removerenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[selfCloneMaterials](MeshRenderer.md#selfclonematerials)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `passType` | `PassType` |
+| `renderContext` | [`RenderContext`](RenderContext.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[renderPass](MeshRenderer.md#renderpass)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L370)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+render pass at passType
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[renderPass2](MeshRenderer.md#renderpass2)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L438)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[recordRenderPass2](MeshRenderer.md#recordrenderpass2)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[preInit](MeshRenderer.md#preinit)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[beforeDestroy](MeshRenderer.md#beforedestroy)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[MeshRenderer](MeshRenderer.md).[start](MeshRenderer.md#start)
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer2.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer2.ts#L45)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[MeshRenderer](MeshRenderer.md).[onEnable](MeshRenderer.md#onenable)
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer2.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer2.ts#L69)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[MeshRenderer](MeshRenderer.md).[cloneTo](MeshRenderer.md#cloneto)
+
+#### Defined in
+
+[src/components/renderer/SkinnedMeshRenderer2.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkinnedMeshRenderer2.ts#L114)
diff --git a/docs/api/classes/SkyRenderer.md b/docs/api/classes/SkyRenderer.md
new file mode 100644
index 00000000..6aec0b0b
--- /dev/null
+++ b/docs/api/classes/SkyRenderer.md
@@ -0,0 +1,1615 @@
+# Class: SkyRenderer
+
+Sky Box Renderer Component
+
+## Hierarchy
+
+- [`MeshRenderer`](MeshRenderer.md)
+
+ ↳ **`SkyRenderer`**
+
+ ↳↳ [`AtmosphericComponent`](AtmosphericComponent.md)
+
+### Constructors
+
+- [constructor](SkyRenderer.md#constructor)
+
+### Properties
+
+- [object3D](SkyRenderer.md#object3d)
+- [isDestroyed](SkyRenderer.md#isdestroyed)
+- [receiveShadow](SkyRenderer.md#receiveshadow)
+- [morphData](SkyRenderer.md#morphdata)
+- [instanceCount](SkyRenderer.md#instancecount)
+- [lodLevel](SkyRenderer.md#lodlevel)
+- [alwaysRender](SkyRenderer.md#alwaysrender)
+- [instanceID](SkyRenderer.md#instanceid)
+- [drawType](SkyRenderer.md#drawtype)
+- [isRenderOrderChange](SkyRenderer.md#isrenderorderchange)
+- [needSortOnCameraZ](SkyRenderer.md#needsortoncameraz)
+- [isRecievePostEffectUI](SkyRenderer.md#isrecieveposteffectui)
+- [skyMaterial](SkyRenderer.md#skymaterial)
+
+### Accessors
+
+- [eventDispatcher](SkyRenderer.md#eventdispatcher)
+- [isStart](SkyRenderer.md#isstart)
+- [transform](SkyRenderer.md#transform)
+- [enable](SkyRenderer.md#enable)
+- [geometry](SkyRenderer.md#geometry)
+- [material](SkyRenderer.md#material)
+- [renderLayer](SkyRenderer.md#renderlayer)
+- [rendererMask](SkyRenderer.md#renderermask)
+- [renderOrder](SkyRenderer.md#renderorder)
+- [materials](SkyRenderer.md#materials)
+- [castShadow](SkyRenderer.md#castshadow)
+- [castGI](SkyRenderer.md#castgi)
+- [castReflection](SkyRenderer.md#castreflection)
+- [map](SkyRenderer.md#map)
+- [exposure](SkyRenderer.md#exposure)
+- [roughness](SkyRenderer.md#roughness)
+
+### Methods
+
+- [start](SkyRenderer.md#start)
+- [stop](SkyRenderer.md#stop)
+- [onUpdate](SkyRenderer.md#onupdate)
+- [onLateUpdate](SkyRenderer.md#onlateupdate)
+- [onBeforeUpdate](SkyRenderer.md#onbeforeupdate)
+- [onGraphic](SkyRenderer.md#ongraphic)
+- [onParentChange](SkyRenderer.md#onparentchange)
+- [onAddChild](SkyRenderer.md#onaddchild)
+- [onRemoveChild](SkyRenderer.md#onremovechild)
+- [cloneTo](SkyRenderer.md#cloneto)
+- [copyComponent](SkyRenderer.md#copycomponent)
+- [setMorphInfluence](SkyRenderer.md#setmorphinfluence)
+- [setMorphInfluenceIndex](SkyRenderer.md#setmorphinfluenceindex)
+- [onCompute](SkyRenderer.md#oncompute)
+- [destroy](SkyRenderer.md#destroy)
+- [attachSceneOctree](SkyRenderer.md#attachsceneoctree)
+- [detachSceneOctree](SkyRenderer.md#detachsceneoctree)
+- [addMask](SkyRenderer.md#addmask)
+- [removeMask](SkyRenderer.md#removemask)
+- [hasMask](SkyRenderer.md#hasmask)
+- [addRendererMask](SkyRenderer.md#addrenderermask)
+- [removeRendererMask](SkyRenderer.md#removerenderermask)
+- [selfCloneMaterials](SkyRenderer.md#selfclonematerials)
+- [renderPass](SkyRenderer.md#renderpass)
+- [recordRenderPass2](SkyRenderer.md#recordrenderpass2)
+- [preInit](SkyRenderer.md#preinit)
+- [beforeDestroy](SkyRenderer.md#beforedestroy)
+- [init](SkyRenderer.md#init)
+- [onEnable](SkyRenderer.md#onenable)
+- [onDisable](SkyRenderer.md#ondisable)
+- [nodeUpdate](SkyRenderer.md#nodeupdate)
+- [renderPass2](SkyRenderer.md#renderpass2)
+- [useSkyReflection](SkyRenderer.md#useskyreflection)
+
+## Constructors
+
+### constructor
+
+• **new SkyRenderer**(): [`SkyRenderer`](SkyRenderer.md)
+
+#### Returns
+
+[`SkyRenderer`](SkyRenderer.md)
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[constructor](MeshRenderer.md#constructor)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L26)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[object3D](MeshRenderer.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[isDestroyed](MeshRenderer.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### receiveShadow
+
+• **receiveShadow**: `boolean`
+
+Enabling this option allows the grid to display any shadows cast on the grid.
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[receiveShadow](MeshRenderer.md#receiveshadow)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L23)
+
+___
+
+### morphData
+
+• **morphData**: [`MorphTargetData`](MorphTargetData.md)
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[morphData](MeshRenderer.md#morphdata)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L24)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[instanceCount](MeshRenderer.md#instancecount)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[lodLevel](MeshRenderer.md#lodlevel)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[alwaysRender](MeshRenderer.md#alwaysrender)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[instanceID](MeshRenderer.md#instanceid)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[drawType](MeshRenderer.md#drawtype)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[isRenderOrderChange](MeshRenderer.md#isrenderorderchange)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[needSortOnCameraZ](MeshRenderer.md#needsortoncameraz)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[isRecievePostEffectUI](MeshRenderer.md#isrecieveposteffectui)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+___
+
+### skyMaterial
+
+• **skyMaterial**: `SkyMaterial`
+
+The material used in the Sky Box.
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L27)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+MeshRenderer.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### geometry
+
+• `get` **geometry**(): [`GeometryBase`](GeometryBase.md)
+
+The geometry of the mesh determines its shape
+
+#### Returns
+
+[`GeometryBase`](GeometryBase.md)
+
+#### Inherited from
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L53)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryBase`](GeometryBase.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L57)
+
+___
+
+### material
+
+• `get` **material**(): [`Material`](Material.md)
+
+material
+
+#### Returns
+
+[`Material`](Material.md)
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L99)
+
+• `set` **material**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Material`](Material.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L103)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): [`Material`](Material.md)[]
+
+#### Returns
+
+[`Material`](Material.md)[]
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Material`](Material.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+___
+
+### map
+
+• `get` **map**(): [`Texture`](Texture.md)
+
+get environment texture
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L87)
+
+• `set` **map**(`texture`): `void`
+
+set environment texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L75)
+
+___
+
+### exposure
+
+• `get` **exposure**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L91)
+
+• `set` **exposure**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:95](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L95)
+
+___
+
+### roughness
+
+• `get` **roughness**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:100](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L100)
+
+• `set` **roughness**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L104)
+
+## Methods
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[start](MeshRenderer.md#start)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[stop](MeshRenderer.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onUpdate](MeshRenderer.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onLateUpdate](MeshRenderer.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onBeforeUpdate](MeshRenderer.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onGraphic](MeshRenderer.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onParentChange](MeshRenderer.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onAddChild](MeshRenderer.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onRemoveChild](MeshRenderer.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[cloneTo](MeshRenderer.md#cloneto)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L38)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[copyComponent](MeshRenderer.md#copycomponent)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L43)
+
+___
+
+### setMorphInfluence
+
+▸ **setMorphInfluence**(`key`, `value`): `void`
+
+Set deformation animation parameters
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[setMorphInfluence](MeshRenderer.md#setmorphinfluence)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L110)
+
+___
+
+### setMorphInfluenceIndex
+
+▸ **setMorphInfluenceIndex**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[setMorphInfluenceIndex](MeshRenderer.md#setmorphinfluenceindex)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view`, `command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[onCompute](MeshRenderer.md#oncompute)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L128)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[destroy](MeshRenderer.md#destroy)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L157)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | [`Octree`](Octree.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[attachSceneOctree](MeshRenderer.md#attachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[detachSceneOctree](MeshRenderer.md#detachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[addMask](MeshRenderer.md#addmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[removeMask](MeshRenderer.md#removemask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[hasMask](MeshRenderer.md#hasmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[addRendererMask](MeshRenderer.md#addrenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[removeRendererMask](MeshRenderer.md#removerenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[selfCloneMaterials](MeshRenderer.md#selfclonematerials)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `passType` | `PassType` |
+| `renderContext` | [`RenderContext`](RenderContext.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[renderPass](MeshRenderer.md#renderpass)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L370)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[recordRenderPass2](MeshRenderer.md#recordrenderpass2)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[preInit](MeshRenderer.md#preinit)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[MeshRenderer](MeshRenderer.md).[beforeDestroy](MeshRenderer.md#beforedestroy)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
+
+___
+
+### init
+
+▸ **init**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[MeshRenderer](MeshRenderer.md).[init](MeshRenderer.md#init)
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L29)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[MeshRenderer](MeshRenderer.md).[onEnable](MeshRenderer.md#onenable)
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L41)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[MeshRenderer](MeshRenderer.md).[onDisable](MeshRenderer.md#ondisable)
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L54)
+
+___
+
+### nodeUpdate
+
+▸ **nodeUpdate**(`view`, `passType`, `renderPassState`, `clusterLightingBuffer?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `passType` | `PassType` |
+| `renderPassState` | `RendererPassState` |
+| `clusterLightingBuffer?` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+MeshRenderer.nodeUpdate
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L62)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+render pass at passType
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[MeshRenderer](MeshRenderer.md).[renderPass2](MeshRenderer.md#renderpass2)
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:66](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L66)
+
+___
+
+### useSkyReflection
+
+▸ **useSkyReflection**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/renderer/SkyRenderer.ts:109](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SkyRenderer.ts#L109)
diff --git a/docs/api/classes/SkyShader.md b/docs/api/classes/SkyShader.md
new file mode 100644
index 00000000..553d1a04
--- /dev/null
+++ b/docs/api/classes/SkyShader.md
@@ -0,0 +1,899 @@
+# Class: SkyShader
+
+## Hierarchy
+
+- [`Shader`](Shader.md)
+
+ ↳ **`SkyShader`**
+
+### Constructors
+
+- [constructor](SkyShader.md#constructor)
+
+### Properties
+
+- [computes](SkyShader.md#computes)
+- [passShader](SkyShader.md#passshader)
+
+### Methods
+
+- [addRenderPass](SkyShader.md#addrenderpass)
+- [removeShader](SkyShader.md#removeshader)
+- [removeShaderByIndex](SkyShader.md#removeshaderbyindex)
+- [getSubShaders](SkyShader.md#getsubshaders)
+- [hasSubShaders](SkyShader.md#hassubshaders)
+- [getDefaultShaders](SkyShader.md#getdefaultshaders)
+- [getDefaultColorShader](SkyShader.md#getdefaultcolorshader)
+- [setDefine](SkyShader.md#setdefine)
+- [hasDefine](SkyShader.md#hasdefine)
+- [deleteDefine](SkyShader.md#deletedefine)
+- [setUniform](SkyShader.md#setuniform)
+- [setUniformFloat](SkyShader.md#setuniformfloat)
+- [setUniformVector2](SkyShader.md#setuniformvector2)
+- [setUniformVector3](SkyShader.md#setuniformvector3)
+- [setUniformVector4](SkyShader.md#setuniformvector4)
+- [setUniformColor](SkyShader.md#setuniformcolor)
+- [getUniform](SkyShader.md#getuniform)
+- [getUniformFloat](SkyShader.md#getuniformfloat)
+- [getUniformVector2](SkyShader.md#getuniformvector2)
+- [getUniformVector3](SkyShader.md#getuniformvector3)
+- [getUniformVector4](SkyShader.md#getuniformvector4)
+- [getUniformColor](SkyShader.md#getuniformcolor)
+- [setTexture](SkyShader.md#settexture)
+- [getTexture](SkyShader.md#gettexture)
+- [setUniformBuffer](SkyShader.md#setuniformbuffer)
+- [getUniformBuffer](SkyShader.md#getuniformbuffer)
+- [setStorageBuffer](SkyShader.md#setstoragebuffer)
+- [getStorageBuffer](SkyShader.md#getstoragebuffer)
+- [setStructStorageBuffer](SkyShader.md#setstructstoragebuffer)
+- [getStructStorageBuffer](SkyShader.md#getstructstoragebuffer)
+- [noticeValueChange](SkyShader.md#noticevaluechange)
+- [destroy](SkyShader.md#destroy)
+- [clone](SkyShader.md#clone)
+- [applyUniform](SkyShader.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new SkyShader**(): [`SkyShader`](SkyShader.md)
+
+#### Returns
+
+[`SkyShader`](SkyShader.md)
+
+#### Overrides
+
+[Shader](Shader.md).[constructor](Shader.md#constructor)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/SkyShader.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/SkyShader.ts#L15)
+
+## Properties
+
+### computes
+
+• **computes**: [`RenderShaderCompute`](RenderShaderCompute.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[computes](Shader.md#computes)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L19)
+
+___
+
+### passShader
+
+• **passShader**: `Map`\<`PassType`, [`RenderShaderPass`](RenderShaderPass.md)[]\>
+
+#### Inherited from
+
+[Shader](Shader.md).[passShader](Shader.md#passshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L21)
+
+## Methods
+
+### addRenderPass
+
+▸ **addRenderPass**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[addRenderPass](Shader.md#addrenderpass)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L28)
+
+___
+
+### removeShader
+
+▸ **removeShader**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShader](Shader.md#removeshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L38)
+
+___
+
+### removeShaderByIndex
+
+▸ **removeShaderByIndex**(`passType`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `passType` | `PassType` | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShaderByIndex](Shader.md#removeshaderbyindex)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L52)
+
+___
+
+### getSubShaders
+
+▸ **getSubShaders**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getSubShaders](Shader.md#getsubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L63)
+
+___
+
+### hasSubShaders
+
+▸ **hasSubShaders**(`passType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasSubShaders](Shader.md#hassubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L67)
+
+___
+
+### getDefaultShaders
+
+▸ **getDefaultShaders**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultShaders](Shader.md#getdefaultshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L72)
+
+___
+
+### getDefaultColorShader
+
+▸ **getDefaultColorShader**(): [`RenderShaderPass`](RenderShaderPass.md)
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultColorShader](Shader.md#getdefaultcolorshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L76)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setDefine](Shader.md#setdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L80)
+
+___
+
+### hasDefine
+
+▸ **hasDefine**(`arg0`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasDefine](Shader.md#hasdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L88)
+
+___
+
+### deleteDefine
+
+▸ **deleteDefine**(`arg0`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[deleteDefine](Shader.md#deletedefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L99)
+
+___
+
+### setUniform
+
+▸ **setUniform**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniform](Shader.md#setuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L107)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformFloat](Shader.md#setuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L115)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector2](Shader.md#setuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L123)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector3](Shader.md#setuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L131)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector4](Shader.md#setuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L139)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformColor](Shader.md#setuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L147)
+
+___
+
+### getUniform
+
+▸ **getUniform**(`arg0`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniform](Shader.md#getuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L155)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`arg0`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformFloat](Shader.md#getuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:159](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L159)
+
+___
+
+### getUniformVector2
+
+▸ **getUniformVector2**(`arg0`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector2](Shader.md#getuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:163](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L163)
+
+___
+
+### getUniformVector3
+
+▸ **getUniformVector3**(`arg0`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector3](Shader.md#getuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:167](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L167)
+
+___
+
+### getUniformVector4
+
+▸ **getUniformVector4**(`arg0`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector4](Shader.md#getuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:171](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L171)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`arg0`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformColor](Shader.md#getuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:175](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L175)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setTexture](Shader.md#settexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L179)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`arg0`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getTexture](Shader.md#gettexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:188](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L188)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformBuffer](Shader.md#setuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:192](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L192)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformBuffer](Shader.md#getuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L200)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStorageBuffer](Shader.md#setstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:204](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L204)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`arg0`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getStorageBuffer](Shader.md#getstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:212](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L212)
+
+___
+
+### setStructStorageBuffer
+
+▸ **setStructStorageBuffer**\<`T`\>(`arg0`, `arg1`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StructStorageGPUBuffer`](StructStorageGPUBuffer.md)\<`T`\> |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStructStorageBuffer](Shader.md#setstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L216)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getStructStorageBuffer](Shader.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L224)
+
+___
+
+### noticeValueChange
+
+▸ **noticeValueChange**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[noticeValueChange](Shader.md#noticevaluechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L228)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[destroy](Shader.md#destroy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:236](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L236)
+
+___
+
+### clone
+
+▸ **clone**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[clone](Shader.md#clone)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L240)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[applyUniform](Shader.md#applyuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:249](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L249)
diff --git a/docs/api/classes/SolidColorSky.md b/docs/api/classes/SolidColorSky.md
new file mode 100644
index 00000000..0d61f1a7
--- /dev/null
+++ b/docs/api/classes/SolidColorSky.md
@@ -0,0 +1,1194 @@
+# Class: SolidColorSky
+
+create a cube texture, which filled by solid color.
+
+## Hierarchy
+
+- [`LDRTextureCube`](LDRTextureCube.md)
+
+ ↳ **`SolidColorSky`**
+
+### Constructors
+
+- [constructor](SolidColorSky.md#constructor)
+
+### Properties
+
+- [name](SolidColorSky.md#name)
+- [url](SolidColorSky.md#url)
+- [pid](SolidColorSky.md#pid)
+- [view](SolidColorSky.md#view)
+- [gpuSampler](SolidColorSky.md#gpusampler)
+- [gpuSampler\_comparison](SolidColorSky.md#gpusampler_comparison)
+- [format](SolidColorSky.md#format)
+- [usage](SolidColorSky.md#usage)
+- [numberLayer](SolidColorSky.md#numberlayer)
+- [viewDescriptor](SolidColorSky.md#viewdescriptor)
+- [textureDescriptor](SolidColorSky.md#texturedescriptor)
+- [sampler\_comparisonBindingLayout](SolidColorSky.md#sampler_comparisonbindinglayout)
+- [flipY](SolidColorSky.md#flipy)
+- [isVideoTexture](SolidColorSky.md#isvideotexture)
+- [isHDRTexture](SolidColorSky.md#ishdrtexture)
+- [mipmapCount](SolidColorSky.md#mipmapcount)
+- [width](SolidColorSky.md#width)
+- [height](SolidColorSky.md#height)
+- [depthOrArrayLayers](SolidColorSky.md#depthorarraylayers)
+- [visibility](SolidColorSky.md#visibility)
+- [textureBindingLayout](SolidColorSky.md#texturebindinglayout)
+- [samplerBindingLayout](SolidColorSky.md#samplerbindinglayout)
+
+### Accessors
+
+- [useMipmap](SolidColorSky.md#usemipmap)
+- [sourceImageData](SolidColorSky.md#sourceimagedata)
+- [addressModeU](SolidColorSky.md#addressmodeu)
+- [addressModeV](SolidColorSky.md#addressmodev)
+- [addressModeW](SolidColorSky.md#addressmodew)
+- [magFilter](SolidColorSky.md#magfilter)
+- [minFilter](SolidColorSky.md#minfilter)
+- [mipmapFilter](SolidColorSky.md#mipmapfilter)
+- [lodMinClamp](SolidColorSky.md#lodminclamp)
+- [lodMaxClamp](SolidColorSky.md#lodmaxclamp)
+- [compare](SolidColorSky.md#compare)
+- [maxAnisotropy](SolidColorSky.md#maxanisotropy)
+- [ldrImageUrl](SolidColorSky.md#ldrimageurl)
+- [color](SolidColorSky.md#color)
+
+### Methods
+
+- [init](SolidColorSky.md#init)
+- [getMipmapCount](SolidColorSky.md#getmipmapcount)
+- [getGPUTexture](SolidColorSky.md#getgputexture)
+- [getGPUView](SolidColorSky.md#getgpuview)
+- [bindStateChange](SolidColorSky.md#bindstatechange)
+- [unBindStateChange](SolidColorSky.md#unbindstatechange)
+- [destroy](SolidColorSky.md#destroy)
+- [delayDestroyTexture](SolidColorSky.md#delaydestroytexture)
+- [destroyTexture](SolidColorSky.md#destroytexture)
+- [load](SolidColorSky.md#load)
+- [createFromTexture](SolidColorSky.md#createfromtexture)
+
+## Constructors
+
+### constructor
+
+• **new SolidColorSky**(`color`): [`SolidColorSky`](SolidColorSky.md)
+
+create a cube texture, which filled by solid color.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `color` | [`Color`](Color.md) | solid color |
+
+#### Returns
+
+[`SolidColorSky`](SolidColorSky.md)
+
+#### Overrides
+
+[LDRTextureCube](LDRTextureCube.md).[constructor](LDRTextureCube.md#constructor)
+
+#### Defined in
+
+[src/textures/SolidColorSky.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/textures/SolidColorSky.ts#L22)
+
+## Properties
+
+### name
+
+• **name**: `string`
+
+name of texture
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[name](LDRTextureCube.md#name)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L15)
+
+___
+
+### url
+
+• **url**: `string`
+
+source url
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[url](LDRTextureCube.md#url)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L20)
+
+___
+
+### pid
+
+• **pid**: `number`
+
+Return index in texture array
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[pid](LDRTextureCube.md#pid)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L30)
+
+___
+
+### view
+
+• **view**: `GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[view](LDRTextureCube.md#view)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L35)
+
+___
+
+### gpuSampler
+
+• **gpuSampler**: `GPUSampler`
+
+GPUSampler
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[gpuSampler](LDRTextureCube.md#gpusampler)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L40)
+
+___
+
+### gpuSampler\_comparison
+
+• **gpuSampler\_comparison**: `GPUSampler`
+
+GPUSampler for comparison
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[gpuSampler_comparison](LDRTextureCube.md#gpusampler_comparison)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L45)
+
+___
+
+### format
+
+• **format**: `GPUTextureFormat`
+
+GPUTextureFormat
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[format](LDRTextureCube.md#format)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L50)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+GPUTextureUsage
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[usage](LDRTextureCube.md#usage)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L55)
+
+___
+
+### numberLayer
+
+• **numberLayer**: `number` = `1`
+
+depth or layers, default value is 1
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[numberLayer](LDRTextureCube.md#numberlayer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L75)
+
+___
+
+### viewDescriptor
+
+• **viewDescriptor**: `GPUTextureViewDescriptor`
+
+GPUTextureViewDescriptor
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[viewDescriptor](LDRTextureCube.md#viewdescriptor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L80)
+
+___
+
+### textureDescriptor
+
+• **textureDescriptor**: `GPUTextureDescriptor`
+
+GPUTextureDescriptor
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[textureDescriptor](LDRTextureCube.md#texturedescriptor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L85)
+
+___
+
+### sampler\_comparisonBindingLayout
+
+• **sampler\_comparisonBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[sampler_comparisonBindingLayout](LDRTextureCube.md#sampler_comparisonbindinglayout)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L111)
+
+___
+
+### flipY
+
+• **flipY**: `boolean`
+
+whether to flip the image on the y-axis
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[flipY](LDRTextureCube.md#flipy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L118)
+
+___
+
+### isVideoTexture
+
+• `Optional` **isVideoTexture**: `boolean`
+
+whether is video texture
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[isVideoTexture](LDRTextureCube.md#isvideotexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L123)
+
+___
+
+### isHDRTexture
+
+• `Optional` **isHDRTexture**: `boolean`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[isHDRTexture](LDRTextureCube.md#ishdrtexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L124)
+
+___
+
+### mipmapCount
+
+• **mipmapCount**: `number` = `1`
+
+mipmap Count, default value is 1
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[mipmapCount](LDRTextureCube.md#mipmapcount)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L191)
+
+___
+
+### width
+
+• **width**: `number` = `4`
+
+texture width, default value is 4
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[width](LDRTextureCube.md#width)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L12)
+
+___
+
+### height
+
+• **height**: `number` = `4`
+
+texture height, default value is 4
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[height](LDRTextureCube.md#height)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L16)
+
+___
+
+### depthOrArrayLayers
+
+• **depthOrArrayLayers**: `number` = `6`
+
+depth or array layers, default value is 6
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[depthOrArrayLayers](LDRTextureCube.md#depthorarraylayers)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L20)
+
+___
+
+### visibility
+
+• **visibility**: `number` = `GPUShaderStage.FRAGMENT`
+
+GPUShaderStage
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[visibility](LDRTextureCube.md#visibility)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L25)
+
+___
+
+### textureBindingLayout
+
+• **textureBindingLayout**: `GPUTextureBindingLayout`
+
+GPUTextureBindingLayout
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[textureBindingLayout](LDRTextureCube.md#texturebindinglayout)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L30)
+
+___
+
+### samplerBindingLayout
+
+• **samplerBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[samplerBindingLayout](LDRTextureCube.md#samplerbindinglayout)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/TextureCube.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/TextureCube.ts#L38)
+
+## Accessors
+
+### useMipmap
+
+• `get` **useMipmap**(): `boolean`
+
+enable/disable mipmap
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LDRTextureCube.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L315)
+
+• `set` **useMipmap**(`value`): `void`
+
+get mipmap
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:322](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L322)
+
+___
+
+### sourceImageData
+
+• `get` **sourceImageData**(): `HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Returns
+
+`HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Inherited from
+
+LDRTextureCube.sourceImageData
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:353](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L353)
+
+___
+
+### addressModeU
+
+• `get` **addressModeU**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+LDRTextureCube.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L438)
+
+• `set` **addressModeU**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:442](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L442)
+
+___
+
+### addressModeV
+
+• `get` **addressModeV**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+LDRTextureCube.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:449](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L449)
+
+• `set` **addressModeV**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:453](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L453)
+
+___
+
+### addressModeW
+
+• `get` **addressModeW**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+LDRTextureCube.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:460](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L460)
+
+• `set` **addressModeW**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:464](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L464)
+
+___
+
+### magFilter
+
+• `get` **magFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+LDRTextureCube.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:471](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L471)
+
+• `set` **magFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:475](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L475)
+
+___
+
+### minFilter
+
+• `get` **minFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+LDRTextureCube.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:482](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L482)
+
+• `set` **minFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L486)
+
+___
+
+### mipmapFilter
+
+• `get` **mipmapFilter**(): `GPUMipmapFilterMode`
+
+#### Returns
+
+`GPUMipmapFilterMode`
+
+#### Inherited from
+
+LDRTextureCube.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:493](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L493)
+
+• `set` **mipmapFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUMipmapFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:497](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L497)
+
+___
+
+### lodMinClamp
+
+• `get` **lodMinClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LDRTextureCube.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:504](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L504)
+
+• `set` **lodMinClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:508](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L508)
+
+___
+
+### lodMaxClamp
+
+• `get` **lodMaxClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LDRTextureCube.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:515](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L515)
+
+• `set` **lodMaxClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L519)
+
+___
+
+### compare
+
+• `get` **compare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+LDRTextureCube.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:526](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L526)
+
+• `set` **compare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:530](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L530)
+
+___
+
+### maxAnisotropy
+
+• `get` **maxAnisotropy**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LDRTextureCube.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:537](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L537)
+
+• `set` **maxAnisotropy**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LDRTextureCube.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:541](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L541)
+
+___
+
+### ldrImageUrl
+
+• `get` **ldrImageUrl**(): `string`
+
+constructor: create a cube texture, it's low dynamic range texture
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+LDRTextureCube.ldrImageUrl
+
+#### Defined in
+
+[src/textures/LDRTextureCube.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/textures/LDRTextureCube.ts#L21)
+
+___
+
+### color
+
+• `get` **color**(): [`Color`](Color.md)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/textures/SolidColorSky.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/textures/SolidColorSky.ts#L41)
+
+• `set` **color**(`value`): `void`
+
+change solid color
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | [`Color`](Color.md) | target color |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/textures/SolidColorSky.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/textures/SolidColorSky.ts#L50)
+
+## Methods
+
+### init
+
+▸ **init**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[init](LDRTextureCube.md#init)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L215)
+
+___
+
+### getMipmapCount
+
+▸ **getMipmapCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[getMipmapCount](LDRTextureCube.md#getmipmapcount)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:357](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L357)
+
+___
+
+### getGPUTexture
+
+▸ **getGPUTexture**(): `GPUTexture`
+
+create or get GPUTexture
+
+#### Returns
+
+`GPUTexture`
+
+GPUTexture
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[getGPUTexture](LDRTextureCube.md#getgputexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:384](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L384)
+
+___
+
+### getGPUView
+
+▸ **getGPUView**(`index?`): `GPUTextureView` \| `GPUExternalTexture`
+
+create or get GPUTextureView
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `index` | `number` | `0` |
+
+#### Returns
+
+`GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView | GPUExternalTexture
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[getGPUView](LDRTextureCube.md#getgpuview)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:395](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L395)
+
+___
+
+### bindStateChange
+
+▸ **bindStateChange**(`fun`, `ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `fun` | `Function` |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[bindStateChange](LDRTextureCube.md#bindstatechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L408)
+
+___
+
+### unBindStateChange
+
+▸ **unBindStateChange**(`ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[unBindStateChange](LDRTextureCube.md#unbindstatechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L412)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release the texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[destroy](LDRTextureCube.md#destroy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:426](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L426)
+
+___
+
+### delayDestroyTexture
+
+▸ **delayDestroyTexture**(`tex`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tex` | `GPUTexture` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[delayDestroyTexture](LDRTextureCube.md#delaydestroytexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:549](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L549)
+
+___
+
+### destroyTexture
+
+▸ **destroyTexture**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[destroyTexture](LDRTextureCube.md#destroytexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:555](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L555)
+
+___
+
+### load
+
+▸ **load**(`url`, `loaderFunctions?`): `Promise`\<[`LDRTextureCube`](LDRTextureCube.md)\>
+
+load texture data from web url, which is a 360 panorama image
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | web url |
+| `loaderFunctions?` | [`LoaderFunctions`](../types/LoaderFunctions.md) | callback function when load complete |
+
+#### Returns
+
+`Promise`\<[`LDRTextureCube`](LDRTextureCube.md)\>
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[load](LDRTextureCube.md#load)
+
+#### Defined in
+
+[src/textures/LDRTextureCube.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/textures/LDRTextureCube.ts#L37)
+
+___
+
+### createFromTexture
+
+▸ **createFromTexture**(`size`, `texture`): `this`
+
+create cube texture by environment image
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `size` | `number` | size of cube texture |
+| `texture` | [`Texture`](Texture.md) | source texture |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[LDRTextureCube](LDRTextureCube.md).[createFromTexture](LDRTextureCube.md#createfromtexture)
+
+#### Defined in
+
+[src/textures/LDRTextureCube.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/textures/LDRTextureCube.ts#L64)
diff --git a/docs/api/classes/SphereColliderShape.md b/docs/api/classes/SphereColliderShape.md
new file mode 100644
index 00000000..7affe0ba
--- /dev/null
+++ b/docs/api/classes/SphereColliderShape.md
@@ -0,0 +1,249 @@
+# Class: SphereColliderShape
+
+Spherical collision body
+
+## Hierarchy
+
+- [`ColliderShape`](ColliderShape.md)
+
+ ↳ **`SphereColliderShape`**
+
+### Constructors
+
+- [constructor](SphereColliderShape.md#constructor)
+
+### Properties
+
+- [radius](SphereColliderShape.md#radius)
+
+### Accessors
+
+- [shapeType](SphereColliderShape.md#shapetype)
+- [center](SphereColliderShape.md#center)
+- [size](SphereColliderShape.md#size)
+- [halfSize](SphereColliderShape.md#halfsize)
+
+### Methods
+
+- [setFromCenterAndSize](SphereColliderShape.md#setfromcenterandsize)
+- [rayPick](SphereColliderShape.md#raypick)
+
+## Constructors
+
+### constructor
+
+• **new SphereColliderShape**(`radius`): [`SphereColliderShape`](SphereColliderShape.md)
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `radius` | `number` | radius of this collider |
+
+#### Returns
+
+[`SphereColliderShape`](SphereColliderShape.md)
+
+#### Overrides
+
+[ColliderShape](ColliderShape.md).[constructor](ColliderShape.md#constructor)
+
+#### Defined in
+
+[src/components/shape/SphereColliderShape.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/SphereColliderShape.ts#L26)
+
+## Properties
+
+### radius
+
+• **radius**: `number` = `0.5`
+
+radius of this collider
+
+#### Defined in
+
+[src/components/shape/SphereColliderShape.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/SphereColliderShape.ts#L20)
+
+## Accessors
+
+### shapeType
+
+• `get` **shapeType**(): [`ColliderShapeType`](../enums/ColliderShapeType.md)
+
+#### Returns
+
+[`ColliderShapeType`](../enums/ColliderShapeType.md)
+
+#### Inherited from
+
+ColliderShape.shapeType
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L40)
+
+___
+
+### center
+
+• `get` **center**(): [`Vector3`](Vector3.md)
+
+The position of the collision object in the local space of the object.
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+ColliderShape.center
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L59)
+
+• `set` **center**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ColliderShape.center
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L63)
+
+___
+
+### size
+
+• `get` **size**(): [`Vector3`](Vector3.md)
+
+The size of the collision body in the X, Y, and Z directions.
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3
+
+#### Inherited from
+
+ColliderShape.size
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L72)
+
+• `set` **size**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ColliderShape.size
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L76)
+
+___
+
+### halfSize
+
+• `get` **halfSize**(): [`Vector3`](Vector3.md)
+
+Half the size of the collision body.
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+ColliderShape.halfSize
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L84)
+
+## Methods
+
+### setFromCenterAndSize
+
+▸ **setFromCenterAndSize**(`ct?`, `sz?`): `this`
+
+Set the position and size of collision objects
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `ct?` | [`Vector3`](Vector3.md) | The position of the collision object in the local space of the object. |
+| `sz?` | [`Vector3`](Vector3.md) | The size of the collision body in the X, Y, and Z directions. |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ColliderShape](ColliderShape.md).[setFromCenterAndSize](ColliderShape.md#setfromcenterandsize)
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L50)
+
+___
+
+### rayPick
+
+▸ **rayPick**(`ray`, `fromMatrix`): `Object`
+
+Ray pickup.Emit a ray from a designated location to detect objects colliding with the ray.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `ray` | [`Ray`](Ray.md) | emit ray |
+| `fromMatrix` | [`Matrix4`](Matrix4.md) | matrix |
+
+#### Returns
+
+`Object`
+
+Pick result intersect: whether to collide;
+ IntersectPoint: collision point;
+ Distance: The distance from the origin of the ray to the collision point.
+
+| Name | Type |
+| :------ | :------ |
+| `intersect` | `boolean` |
+| `intersectPoint?` | [`Vector3`](Vector3.md) |
+| `distance` | `number` |
+
+#### Overrides
+
+[ColliderShape](ColliderShape.md).[rayPick](ColliderShape.md#raypick)
+
+#### Defined in
+
+[src/components/shape/SphereColliderShape.ts:33](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/SphereColliderShape.ts#L33)
diff --git a/docs/api/classes/SphereGeometry.md b/docs/api/classes/SphereGeometry.md
new file mode 100644
index 00000000..94564d14
--- /dev/null
+++ b/docs/api/classes/SphereGeometry.md
@@ -0,0 +1,733 @@
+# Class: SphereGeometry
+
+Sphere Geometry
+
+## Hierarchy
+
+- [`GeometryBase`](GeometryBase.md)
+
+ ↳ **`SphereGeometry`**
+
+### Constructors
+
+- [constructor](SphereGeometry.md#constructor)
+
+### Properties
+
+- [instanceID](SphereGeometry.md#instanceid)
+- [name](SphereGeometry.md#name)
+- [subGeometries](SphereGeometry.md#subgeometries)
+- [morphTargetsRelative](SphereGeometry.md#morphtargetsrelative)
+- [morphTargetDictionary](SphereGeometry.md#morphtargetdictionary)
+- [skinNames](SphereGeometry.md#skinnames)
+- [bindPose](SphereGeometry.md#bindpose)
+- [blendShapeData](SphereGeometry.md#blendshapedata)
+- [vertexDim](SphereGeometry.md#vertexdim)
+- [vertexCount](SphereGeometry.md#vertexcount)
+- [shape\_vertices](SphereGeometry.md#shape_vertices)
+- [shape\_indices](SphereGeometry.md#shape_indices)
+- [radius](SphereGeometry.md#radius)
+- [widthSegments](SphereGeometry.md#widthsegments)
+- [heightSegments](SphereGeometry.md#heightsegments)
+- [phiStart](SphereGeometry.md#phistart)
+- [phiLength](SphereGeometry.md#philength)
+- [thetaStart](SphereGeometry.md#thetastart)
+- [thetaLength](SphereGeometry.md#thetalength)
+
+### Accessors
+
+- [indicesBuffer](SphereGeometry.md#indicesbuffer)
+- [vertexBuffer](SphereGeometry.md#vertexbuffer)
+- [vertexAttributes](SphereGeometry.md#vertexattributes)
+- [vertexAttributeMap](SphereGeometry.md#vertexattributemap)
+- [geometryType](SphereGeometry.md#geometrytype)
+- [bounds](SphereGeometry.md#bounds)
+
+### Methods
+
+- [addSubGeometry](SphereGeometry.md#addsubgeometry)
+- [generate](SphereGeometry.md#generate)
+- [setIndices](SphereGeometry.md#setindices)
+- [setAttribute](SphereGeometry.md#setattribute)
+- [getAttribute](SphereGeometry.md#getattribute)
+- [hasAttribute](SphereGeometry.md#hasattribute)
+- [genWireframe](SphereGeometry.md#genwireframe)
+- [compute](SphereGeometry.md#compute)
+- [computeNormals](SphereGeometry.md#computenormals)
+- [isPrimitive](SphereGeometry.md#isprimitive)
+- [destroy](SphereGeometry.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new SphereGeometry**(`radius`, `widthSegments`, `heightSegments`, `phiStart?`, `phiLength?`, `thetaStart?`, `thetaLength?`): [`SphereGeometry`](SphereGeometry.md)
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `radius` | `any` | radius of sphere |
+| `widthSegments` | `any` | Define the number of horizontal segments |
+| `heightSegments` | `any` | Define the number of vertical segments |
+| `phiStart?` | `any` | The starting point radian of the equatorial line of a sphere |
+| `phiLength?` | `any` | The arc length of the equatorial line of a sphere |
+| `thetaStart?` | `any` | The radian of the starting point of the sphere's meridian |
+| `thetaLength?` | `any` | Arc length of sphere meridian |
+
+#### Returns
+
+[`SphereGeometry`](SphereGeometry.md)
+
+#### Overrides
+
+[GeometryBase](GeometryBase.md).[constructor](GeometryBase.md#constructor)
+
+#### Defined in
+
+[src/shape/SphereGeometry.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/shape/SphereGeometry.ts#L53)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[instanceID](GeometryBase.md#instanceid)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L39)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[name](GeometryBase.md#name)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L40)
+
+___
+
+### subGeometries
+
+• **subGeometries**: [`SubGeometry`](SubGeometry.md)[] = `[]`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[subGeometries](GeometryBase.md#subgeometries)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L41)
+
+___
+
+### morphTargetsRelative
+
+• **morphTargetsRelative**: `boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetsRelative](GeometryBase.md#morphtargetsrelative)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L42)
+
+___
+
+### morphTargetDictionary
+
+• **morphTargetDictionary**: `Object`
+
+#### Index signature
+
+▪ [blenderName: `string`]: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetDictionary](GeometryBase.md#morphtargetdictionary)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L43)
+
+___
+
+### skinNames
+
+• **skinNames**: `string`[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[skinNames](GeometryBase.md#skinnames)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L44)
+
+___
+
+### bindPose
+
+• **bindPose**: [`Matrix4`](Matrix4.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[bindPose](GeometryBase.md#bindpose)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L45)
+
+___
+
+### blendShapeData
+
+• **blendShapeData**: [`BlendShapeData`](BlendShapeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[blendShapeData](GeometryBase.md#blendshapedata)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L46)
+
+___
+
+### vertexDim
+
+• **vertexDim**: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexDim](GeometryBase.md#vertexdim)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L47)
+
+___
+
+### vertexCount
+
+• **vertexCount**: `number` = `0`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexCount](GeometryBase.md#vertexcount)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L48)
+
+___
+
+### shape\_vertices
+
+• **shape\_vertices**: `any`[] = `[]`
+
+#### Defined in
+
+[src/shape/SphereGeometry.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/shape/SphereGeometry.ts#L10)
+
+___
+
+### shape\_indices
+
+• **shape\_indices**: `any`[] = `[]`
+
+#### Defined in
+
+[src/shape/SphereGeometry.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/shape/SphereGeometry.ts#L11)
+
+___
+
+### radius
+
+• **radius**: `number`
+
+radius of sphere
+
+#### Defined in
+
+[src/shape/SphereGeometry.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/shape/SphereGeometry.ts#L16)
+
+___
+
+### widthSegments
+
+• **widthSegments**: `number`
+
+Define the number of horizontal segments
+
+#### Defined in
+
+[src/shape/SphereGeometry.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/shape/SphereGeometry.ts#L20)
+
+___
+
+### heightSegments
+
+• **heightSegments**: `number`
+
+Define the number of vertical segments
+
+#### Defined in
+
+[src/shape/SphereGeometry.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/shape/SphereGeometry.ts#L24)
+
+___
+
+### phiStart
+
+• **phiStart**: `number`
+
+The starting point radian of the equatorial line of a sphere
+
+#### Defined in
+
+[src/shape/SphereGeometry.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/shape/SphereGeometry.ts#L28)
+
+___
+
+### phiLength
+
+• **phiLength**: `number`
+
+The arc length of the equatorial line of a sphere
+
+#### Defined in
+
+[src/shape/SphereGeometry.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/shape/SphereGeometry.ts#L32)
+
+___
+
+### thetaStart
+
+• **thetaStart**: `number`
+
+The radian of the starting point of the sphere's meridian
+
+#### Defined in
+
+[src/shape/SphereGeometry.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/shape/SphereGeometry.ts#L36)
+
+___
+
+### thetaLength
+
+• **thetaLength**: `number`
+
+Arc length of sphere meridian
+
+#### Defined in
+
+[src/shape/SphereGeometry.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/shape/SphereGeometry.ts#L40)
+
+## Accessors
+
+### indicesBuffer
+
+• `get` **indicesBuffer**(): [`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Returns
+
+[`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Inherited from
+
+GeometryBase.indicesBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L69)
+
+___
+
+### vertexBuffer
+
+• `get` **vertexBuffer**(): [`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Returns
+
+[`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Inherited from
+
+GeometryBase.vertexBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L73)
+
+___
+
+### vertexAttributes
+
+• `get` **vertexAttributes**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+GeometryBase.vertexAttributes
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L77)
+
+___
+
+### vertexAttributeMap
+
+• `get` **vertexAttributeMap**(): `Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Returns
+
+`Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Inherited from
+
+GeometryBase.vertexAttributeMap
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L81)
+
+___
+
+### geometryType
+
+• `get` **geometryType**(): [`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Returns
+
+[`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L85)
+
+• `set` **geometryType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryVertexType`](../enums/GeometryVertexType.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L88)
+
+___
+
+### bounds
+
+• `get` **bounds**(): `BoundingBox`
+
+#### Returns
+
+`BoundingBox`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L92)
+
+• `set` **bounds**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BoundingBox` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L135)
+
+## Methods
+
+### addSubGeometry
+
+▸ **addSubGeometry**(`...lodLevels`): [`SubGeometry`](SubGeometry.md)
+
+add subGeometry from lod level
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `...lodLevels` | [`LODDescriptor`](../types/LODDescriptor.md)[] |
+
+#### Returns
+
+[`SubGeometry`](SubGeometry.md)
+
+**`See`**
+
+LODDescriptor
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[addSubGeometry](GeometryBase.md#addsubgeometry)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L144)
+
+___
+
+### generate
+
+▸ **generate**(`shaderReflection`): `void`
+
+create geometry by shaderReflection
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `shaderReflection` | `ShaderReflection` | ShaderReflection |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[generate](GeometryBase.md#generate)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L155)
+
+___
+
+### setIndices
+
+▸ **setIndices**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setIndices](GeometryBase.md#setindices)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L165)
+
+___
+
+### setAttribute
+
+▸ **setAttribute**(`attribute`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setAttribute](GeometryBase.md#setattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L177)
+
+___
+
+### getAttribute
+
+▸ **getAttribute**(`attribute`): [`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+[`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[getAttribute](GeometryBase.md#getattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L190)
+
+___
+
+### hasAttribute
+
+▸ **hasAttribute**(`attribute`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[hasAttribute](GeometryBase.md#hasattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L194)
+
+___
+
+### genWireframe
+
+▸ **genWireframe**(): [`Vector3`](Vector3.md)[]
+
+#### Returns
+
+[`Vector3`](Vector3.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[genWireframe](GeometryBase.md#genwireframe)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L198)
+
+___
+
+### compute
+
+▸ **compute**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[compute](GeometryBase.md#compute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L251)
+
+___
+
+### computeNormals
+
+▸ **computeNormals**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[computeNormals](GeometryBase.md#computenormals)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:270](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L270)
+
+___
+
+### isPrimitive
+
+▸ **isPrimitive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[isPrimitive](GeometryBase.md#isprimitive)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L312)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[destroy](GeometryBase.md#destroy)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:316](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L316)
diff --git a/docs/api/classes/SphereReflection.md b/docs/api/classes/SphereReflection.md
new file mode 100644
index 00000000..98e08cfd
--- /dev/null
+++ b/docs/api/classes/SphereReflection.md
@@ -0,0 +1,1437 @@
+# Class: SphereReflection
+
+Sky Box Renderer Component
+
+## Hierarchy
+
+- [`Reflection`](Reflection.md)
+
+ ↳ **`SphereReflection`**
+
+### Constructors
+
+- [constructor](SphereReflection.md#constructor)
+
+### Properties
+
+- [object3D](SphereReflection.md#object3d)
+- [isDestroyed](SphereReflection.md#isdestroyed)
+- [gid](SphereReflection.md#gid)
+- [needUpdate](SphereReflection.md#needupdate)
+- [autoUpdate](SphereReflection.md#autoupdate)
+- [radius](SphereReflection.md#radius)
+- [instanceCount](SphereReflection.md#instancecount)
+- [lodLevel](SphereReflection.md#lodlevel)
+- [alwaysRender](SphereReflection.md#alwaysrender)
+- [instanceID](SphereReflection.md#instanceid)
+- [drawType](SphereReflection.md#drawtype)
+- [isRenderOrderChange](SphereReflection.md#isrenderorderchange)
+- [needSortOnCameraZ](SphereReflection.md#needsortoncameraz)
+- [isRecievePostEffectUI](SphereReflection.md#isrecieveposteffectui)
+
+### Accessors
+
+- [eventDispatcher](SphereReflection.md#eventdispatcher)
+- [isStart](SphereReflection.md#isstart)
+- [transform](SphereReflection.md#transform)
+- [enable](SphereReflection.md#enable)
+- [renderLayer](SphereReflection.md#renderlayer)
+- [geometry](SphereReflection.md#geometry)
+- [rendererMask](SphereReflection.md#renderermask)
+- [renderOrder](SphereReflection.md#renderorder)
+- [materials](SphereReflection.md#materials)
+- [castShadow](SphereReflection.md#castshadow)
+- [castGI](SphereReflection.md#castgi)
+- [castReflection](SphereReflection.md#castreflection)
+
+### Methods
+
+- [start](SphereReflection.md#start)
+- [stop](SphereReflection.md#stop)
+- [onUpdate](SphereReflection.md#onupdate)
+- [onLateUpdate](SphereReflection.md#onlateupdate)
+- [onBeforeUpdate](SphereReflection.md#onbeforeupdate)
+- [onCompute](SphereReflection.md#oncompute)
+- [onGraphic](SphereReflection.md#ongraphic)
+- [onParentChange](SphereReflection.md#onparentchange)
+- [onAddChild](SphereReflection.md#onaddchild)
+- [onRemoveChild](SphereReflection.md#onremovechild)
+- [cloneTo](SphereReflection.md#cloneto)
+- [attachSceneOctree](SphereReflection.md#attachsceneoctree)
+- [detachSceneOctree](SphereReflection.md#detachsceneoctree)
+- [copyComponent](SphereReflection.md#copycomponent)
+- [addMask](SphereReflection.md#addmask)
+- [removeMask](SphereReflection.md#removemask)
+- [hasMask](SphereReflection.md#hasmask)
+- [addRendererMask](SphereReflection.md#addrenderermask)
+- [removeRendererMask](SphereReflection.md#removerenderermask)
+- [selfCloneMaterials](SphereReflection.md#selfclonematerials)
+- [renderPass](SphereReflection.md#renderpass)
+- [recordRenderPass2](SphereReflection.md#recordrenderpass2)
+- [preInit](SphereReflection.md#preinit)
+- [nodeUpdate](SphereReflection.md#nodeupdate)
+- [beforeDestroy](SphereReflection.md#beforedestroy)
+- [destroy](SphereReflection.md#destroy)
+- [init](SphereReflection.md#init)
+- [debug](SphereReflection.md#debug)
+- [onEnable](SphereReflection.md#onenable)
+- [onDisable](SphereReflection.md#ondisable)
+- [renderPass2](SphereReflection.md#renderpass2)
+
+## Constructors
+
+### constructor
+
+• **new SphereReflection**(): [`SphereReflection`](SphereReflection.md)
+
+#### Returns
+
+[`SphereReflection`](SphereReflection.md)
+
+#### Inherited from
+
+[Reflection](Reflection.md).[constructor](Reflection.md#constructor)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[Reflection](Reflection.md).[object3D](Reflection.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[isDestroyed](Reflection.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### gid
+
+• **gid**: `number` = `0`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[gid](Reflection.md#gid)
+
+#### Defined in
+
+[src/components/renderer/Reflection.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/Reflection.ts#L19)
+
+___
+
+### needUpdate
+
+• **needUpdate**: `boolean` = `true`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[needUpdate](Reflection.md#needupdate)
+
+#### Defined in
+
+[src/components/renderer/Reflection.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/Reflection.ts#L20)
+
+___
+
+### autoUpdate
+
+• **autoUpdate**: `boolean` = `false`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[autoUpdate](Reflection.md#autoupdate)
+
+#### Defined in
+
+[src/components/renderer/Reflection.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/Reflection.ts#L21)
+
+___
+
+### radius
+
+• **radius**: `number` = `500`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[radius](Reflection.md#radius)
+
+#### Defined in
+
+[src/components/renderer/Reflection.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/Reflection.ts#L22)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[instanceCount](Reflection.md#instancecount)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[lodLevel](Reflection.md#lodlevel)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[alwaysRender](Reflection.md#alwaysrender)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[instanceID](Reflection.md#instanceid)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[drawType](Reflection.md#drawtype)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[isRenderOrderChange](Reflection.md#isrenderorderchange)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[needSortOnCameraZ](Reflection.md#needsortoncameraz)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[isRecievePostEffectUI](Reflection.md#isrecieveposteffectui)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+Reflection.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Reflection.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Reflection.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+Reflection.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Reflection.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Reflection.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+Reflection.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Reflection.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### geometry
+
+• `get` **geometry**(): [`GeometryBase`](GeometryBase.md)
+
+#### Returns
+
+[`GeometryBase`](GeometryBase.md)
+
+#### Inherited from
+
+Reflection.geometry
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L122)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryBase`](GeometryBase.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Reflection.geometry
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:126](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L126)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Reflection.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Reflection.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Reflection.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Reflection.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): [`Material`](Material.md)[]
+
+#### Returns
+
+[`Material`](Material.md)[]
+
+#### Inherited from
+
+Reflection.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Material`](Material.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Reflection.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Reflection.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Reflection.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Reflection.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Reflection.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Reflection.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Reflection.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+## Methods
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[start](Reflection.md#start)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[stop](Reflection.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[onUpdate](Reflection.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[onLateUpdate](Reflection.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[onBeforeUpdate](Reflection.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[onCompute](Reflection.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[onGraphic](Reflection.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[onParentChange](Reflection.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[onAddChild](Reflection.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[onRemoveChild](Reflection.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[cloneTo](Reflection.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | [`Octree`](Octree.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[attachSceneOctree](Reflection.md#attachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[detachSceneOctree](Reflection.md#detachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[copyComponent](Reflection.md#copycomponent)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:95](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L95)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[addMask](Reflection.md#addmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[removeMask](Reflection.md#removemask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[hasMask](Reflection.md#hasmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[addRendererMask](Reflection.md#addrenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | [`RendererMask`](../enums/RendererMask.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[removeRendererMask](Reflection.md#removerenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[selfCloneMaterials](Reflection.md#selfclonematerials)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `passType` | `PassType` |
+| `renderContext` | [`RenderContext`](RenderContext.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[renderPass](Reflection.md#renderpass)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L370)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[recordRenderPass2](Reflection.md#recordrenderpass2)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[preInit](Reflection.md#preinit)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### nodeUpdate
+
+▸ **nodeUpdate**(`view`, `passType`, `renderPassState`, `clusterLightingBuffer?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+| `passType` | `PassType` |
+| `renderPassState` | `RendererPassState` |
+| `clusterLightingBuffer?` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[nodeUpdate](Reflection.md#nodeupdate)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:523](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L523)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[beforeDestroy](Reflection.md#beforedestroy)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Reflection](Reflection.md).[destroy](Reflection.md#destroy)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:625](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L625)
+
+___
+
+### init
+
+▸ **init**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[Reflection](Reflection.md).[init](Reflection.md#init)
+
+#### Defined in
+
+[src/components/renderer/SphereReflection.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SphereReflection.ts#L25)
+
+___
+
+### debug
+
+▸ **debug**(`index`, `scale?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `index` | `number` | `undefined` |
+| `scale` | `number` | `1` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/renderer/SphereReflection.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SphereReflection.ts#L35)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[Reflection](Reflection.md).[onEnable](Reflection.md#onenable)
+
+#### Defined in
+
+[src/components/renderer/SphereReflection.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SphereReflection.ts#L55)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[Reflection](Reflection.md).[onDisable](Reflection.md#ondisable)
+
+#### Defined in
+
+[src/components/renderer/SphereReflection.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SphereReflection.ts#L59)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | [`View3D`](View3D.md) | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | [`ClusterLightingBuffer`](ClusterLightingBuffer.md) | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[Reflection](Reflection.md).[renderPass2](Reflection.md#renderpass2)
+
+#### Defined in
+
+[src/components/renderer/SphereReflection.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/SphereReflection.ts#L63)
diff --git a/docs/api/classes/SpotLight.md b/docs/api/classes/SpotLight.md
new file mode 100644
index 00000000..b3e3807e
--- /dev/null
+++ b/docs/api/classes/SpotLight.md
@@ -0,0 +1,1373 @@
+# Class: SpotLight
+
+Spotlight source.
+Light shines from a point in one direction, and as the light shines further away, the size of the light cone gradually increases.
+Similar to a desk lamp, chandelier, or flashlight, this light source can produce shadows.
+
+## Hierarchy
+
+- `LightBase`
+
+ ↳ **`SpotLight`**
+
+### Constructors
+
+- [constructor](SpotLight.md#constructor)
+
+### Properties
+
+- [object3D](SpotLight.md#object3d)
+- [isDestroyed](SpotLight.md#isdestroyed)
+- [name](SpotLight.md#name)
+- [size](SpotLight.md#size)
+- [lightData](SpotLight.md#lightdata)
+- [dirFix](SpotLight.md#dirfix)
+- [bindOnChange](SpotLight.md#bindonchange)
+- [needUpdateShadow](SpotLight.md#needupdateshadow)
+- [realTimeShadow](SpotLight.md#realtimeshadow)
+
+### Accessors
+
+- [eventDispatcher](SpotLight.md#eventdispatcher)
+- [isStart](SpotLight.md#isstart)
+- [transform](SpotLight.md#transform)
+- [enable](SpotLight.md#enable)
+- [iesProfiles](SpotLight.md#iesprofiles)
+- [iesProfile](SpotLight.md#iesprofile)
+- [r](SpotLight.md#r)
+- [g](SpotLight.md#g)
+- [b](SpotLight.md#b)
+- [lightColor](SpotLight.md#lightcolor)
+- [color](SpotLight.md#color)
+- [intensity](SpotLight.md#intensity)
+- [castShadow](SpotLight.md#castshadow)
+- [shadowIndex](SpotLight.md#shadowindex)
+- [castGI](SpotLight.md#castgi)
+- [direction](SpotLight.md#direction)
+- [innerAngle](SpotLight.md#innerangle)
+- [outerAngle](SpotLight.md#outerangle)
+- [radius](SpotLight.md#radius)
+- [range](SpotLight.md#range)
+- [at](SpotLight.md#at)
+
+### Methods
+
+- [stop](SpotLight.md#stop)
+- [onLateUpdate](SpotLight.md#onlateupdate)
+- [onBeforeUpdate](SpotLight.md#onbeforeupdate)
+- [onCompute](SpotLight.md#oncompute)
+- [onParentChange](SpotLight.md#onparentchange)
+- [onAddChild](SpotLight.md#onaddchild)
+- [onRemoveChild](SpotLight.md#onremovechild)
+- [cloneTo](SpotLight.md#cloneto)
+- [copyComponent](SpotLight.md#copycomponent)
+- [beforeDestroy](SpotLight.md#beforedestroy)
+- [onEnable](SpotLight.md#onenable)
+- [onDisable](SpotLight.md#ondisable)
+- [destroy](SpotLight.md#destroy)
+- [init](SpotLight.md#init)
+- [start](SpotLight.md#start)
+- [onUpdate](SpotLight.md#onupdate)
+- [onGraphic](SpotLight.md#ongraphic)
+- [debug](SpotLight.md#debug)
+- [debugDraw](SpotLight.md#debugdraw)
+
+## Constructors
+
+### constructor
+
+• **new SpotLight**(): [`SpotLight`](SpotLight.md)
+
+#### Returns
+
+[`SpotLight`](SpotLight.md)
+
+#### Overrides
+
+LightBase.constructor
+
+#### Defined in
+
+[src/components/lights/SpotLight.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/SpotLight.ts#L18)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+LightBase.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+LightBase.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### name
+
+• **name**: `string`
+
+light name
+
+#### Inherited from
+
+LightBase.name
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L22)
+
+___
+
+### size
+
+• **size**: `number` = `1`
+
+light size
+
+#### Inherited from
+
+LightBase.size
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L26)
+
+___
+
+### lightData
+
+• **lightData**: `LightData`
+
+light source data
+
+#### Inherited from
+
+LightBase.lightData
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L31)
+
+___
+
+### dirFix
+
+• **dirFix**: `number` = `1`
+
+fix light direction
+
+#### Inherited from
+
+LightBase.dirFix
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L36)
+
+___
+
+### bindOnChange
+
+• **bindOnChange**: () => `void`
+
+Callback function when binding changes
+
+#### Type declaration
+
+▸ (): `void`
+
+Callback function when binding changes
+
+##### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.bindOnChange
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L41)
+
+___
+
+### needUpdateShadow
+
+• **needUpdateShadow**: `boolean` = `true`
+
+#### Inherited from
+
+LightBase.needUpdateShadow
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L43)
+
+___
+
+### realTimeShadow
+
+• **realTimeShadow**: `boolean` = `true`
+
+Whether to enable real-time rendering of shadows
+
+#### Inherited from
+
+LightBase.realTimeShadow
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L48)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+LightBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LightBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+LightBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LightBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### iesProfiles
+
+• `set` **iesProfiles**(`iesProfiles`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `iesProfiles` | [`IESProfiles`](IESProfiles.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.iesProfiles
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:125](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L125)
+
+___
+
+### iesProfile
+
+• `get` **iesProfile**(): [`IESProfiles`](IESProfiles.md)
+
+#### Returns
+
+[`IESProfiles`](IESProfiles.md)
+
+#### Inherited from
+
+LightBase.iesProfile
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L132)
+
+___
+
+### r
+
+• `get` **r**(): `number`
+
+Get the red component of the lighting color
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LightBase.r
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L139)
+
+• `set` **r**(`value`): `void`
+
+Set the red component of the lighting color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.r
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:146](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L146)
+
+___
+
+### g
+
+• `get` **g**(): `number`
+
+Get the green component of the lighting color
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LightBase.g
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:154](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L154)
+
+• `set` **g**(`value`): `void`
+
+Set the green component of the lighting color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.g
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L161)
+
+___
+
+### b
+
+• `get` **b**(): `number`
+
+Get the blue component of the lighting color
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LightBase.b
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:169](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L169)
+
+• `set` **b**(`value`): `void`
+
+Set the blue component of the lighting color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.b
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:175](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L175)
+
+___
+
+### lightColor
+
+• `get` **lightColor**(): [`Color`](Color.md)
+
+Get light source color
+
+#### Returns
+
+[`Color`](Color.md)
+
+Color
+
+#### Inherited from
+
+LightBase.lightColor
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:183](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L183)
+
+• `set` **lightColor**(`value`): `void`
+
+Set light source color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.lightColor
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L190)
+
+___
+
+### color
+
+• `get` **color**(): [`Color`](Color.md)
+
+Get light source color
+
+#### Returns
+
+[`Color`](Color.md)
+
+Color
+
+#### Inherited from
+
+LightBase.color
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L199)
+
+• `set` **color**(`value`): `void`
+
+Set light source color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.color
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L207)
+
+___
+
+### intensity
+
+• `get` **intensity**(): `number`
+
+Get Illumination intensity of light source
+
+#### Returns
+
+`number`
+
+number
+
+#### Inherited from
+
+LightBase.intensity
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L216)
+
+• `set` **intensity**(`value`): `void`
+
+Set Illumination intensity of light source
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.intensity
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L224)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LightBase.castShadow
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L240)
+
+• `set` **castShadow**(`value`): `void`
+
+Cast Light Shadow
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.castShadow
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L233)
+
+___
+
+### shadowIndex
+
+• `get` **shadowIndex**(): `number`
+
+get shadow index at shadow map list
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LightBase.shadowIndex
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L247)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+get gi is enable
+
+#### Returns
+
+`boolean`
+
+boolean
+
+#### Inherited from
+
+LightBase.castGI
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:256](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L256)
+
+• `set` **castGI**(`value`): `void`
+
+set gi is enable
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.castGI
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:263](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L263)
+
+___
+
+### direction
+
+• `get` **direction**(): [`Vector3`](Vector3.md)
+
+light source direction
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3
+
+#### Inherited from
+
+LightBase.direction
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:277](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L277)
+
+___
+
+### innerAngle
+
+• `get` **innerAngle**(): `number`
+
+Get the inner cone angle of the light source (as a percentage relative to the outer cone angle)
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/lights/SpotLight.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/SpotLight.ts#L35)
+
+• `set` **innerAngle**(`value`): `void`
+
+Set the inner cone angle of the light source (as a percentage relative to the outer cone angle)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/SpotLight.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/SpotLight.ts#L44)
+
+___
+
+### outerAngle
+
+• `get` **outerAngle**(): `number`
+
+Get the outer cone angle of the light source
+
+#### Returns
+
+`number`
+
+number
+
+#### Defined in
+
+[src/components/lights/SpotLight.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/SpotLight.ts#L53)
+
+• `set` **outerAngle**(`value`): `void`
+
+Set the outer cone angle of the light source
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/SpotLight.ts:61](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/SpotLight.ts#L61)
+
+___
+
+### radius
+
+• `get` **radius**(): `number`
+
+Get the radius of the light source
+
+#### Returns
+
+`number`
+
+number
+
+#### Defined in
+
+[src/components/lights/SpotLight.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/SpotLight.ts#L71)
+
+• `set` **radius**(`value`): `void`
+
+Set the radius of the light source
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/SpotLight.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/SpotLight.ts#L80)
+
+___
+
+### range
+
+• `get` **range**(): `number`
+
+Get the range of the light source
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/lights/SpotLight.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/SpotLight.ts#L88)
+
+• `set` **range**(`value`): `void`
+
+Set the range of the light source
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/SpotLight.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/SpotLight.ts#L97)
+
+___
+
+### at
+
+• `get` **at**(): `number`
+
+Get the illumination distance of the light source
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/lights/SpotLight.ts:105](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/SpotLight.ts#L105)
+
+• `set` **at**(`value`): `void`
+
+Set the illumination distance of the light source
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/SpotLight.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/SpotLight.ts#L112)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+LightBase.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+LightBase.copyComponent
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.beforeDestroy
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.onEnable
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L114)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.onDisable
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L119)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LightBase.destroy
+
+#### Defined in
+
+[src/components/lights/LightBase.ts:281](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightBase.ts#L281)
+
+___
+
+### init
+
+▸ **init**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LightBase.init
+
+#### Defined in
+
+[src/components/lights/SpotLight.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/SpotLight.ts#L22)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LightBase.start
+
+#### Defined in
+
+[src/components/lights/SpotLight.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/SpotLight.ts#L117)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LightBase.onUpdate
+
+#### Defined in
+
+[src/components/lights/SpotLight.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/SpotLight.ts#L122)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LightBase.onGraphic
+
+#### Defined in
+
+[src/components/lights/SpotLight.ts:126](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/SpotLight.ts#L126)
+
+___
+
+### debug
+
+▸ **debug**(): `void`
+
+enable GUI debug
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/SpotLight.ts:158](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/SpotLight.ts#L158)
+
+___
+
+### debugDraw
+
+▸ **debugDraw**(`show`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `show` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/lights/SpotLight.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/SpotLight.ts#L161)
diff --git a/docs/api/classes/StandShader.md b/docs/api/classes/StandShader.md
new file mode 100644
index 00000000..edb74a30
--- /dev/null
+++ b/docs/api/classes/StandShader.md
@@ -0,0 +1,1996 @@
+# Class: StandShader
+
+## Hierarchy
+
+- [`Shader`](Shader.md)
+
+ ↳ **`StandShader`**
+
+### Constructors
+
+- [constructor](StandShader.md#constructor)
+
+### Properties
+
+- [computes](StandShader.md#computes)
+- [passShader](StandShader.md#passshader)
+
+### Accessors
+
+- [baseMap](StandShader.md#basemap)
+- [baseColor](StandShader.md#basecolor)
+- [normalMap](StandShader.md#normalmap)
+- [doubleSide](StandShader.md#doubleside)
+- [alphaCutoff](StandShader.md#alphacutoff)
+- [emissiveColor](StandShader.md#emissivecolor)
+- [emissiveIntensity](StandShader.md#emissiveintensity)
+- [transformUV1](StandShader.md#transformuv1)
+- [uvTransform\_2](StandShader.md#uvtransform_2)
+- [depthWriteEnabled](StandShader.md#depthwriteenabled)
+- [materialF0](StandShader.md#materialf0)
+- [specularColor](StandShader.md#specularcolor)
+- [roughness](StandShader.md#roughness)
+- [metallic](StandShader.md#metallic)
+- [ao](StandShader.md#ao)
+- [metallic\_min](StandShader.md#metallic_min)
+- [metallic\_max](StandShader.md#metallic_max)
+- [roughness\_min](StandShader.md#roughness_min)
+- [roughness\_max](StandShader.md#roughness_max)
+- [normalScale](StandShader.md#normalscale)
+- [maskMap](StandShader.md#maskmap)
+- [aoMap](StandShader.md#aomap)
+- [clearCoatRoughnessMap](StandShader.md#clearcoatroughnessmap)
+- [brdfLUT](StandShader.md#brdflut)
+- [emissiveMap](StandShader.md#emissivemap)
+- [envIntensity](StandShader.md#envintensity)
+- [ior](StandShader.md#ior)
+- [clearcoatFactor](StandShader.md#clearcoatfactor)
+- [clearcoatRoughnessFactor](StandShader.md#clearcoatroughnessfactor)
+- [clearcoatWeight](StandShader.md#clearcoatweight)
+- [clearcoatColor](StandShader.md#clearcoatcolor)
+
+### Methods
+
+- [addRenderPass](StandShader.md#addrenderpass)
+- [removeShader](StandShader.md#removeshader)
+- [removeShaderByIndex](StandShader.md#removeshaderbyindex)
+- [getSubShaders](StandShader.md#getsubshaders)
+- [hasSubShaders](StandShader.md#hassubshaders)
+- [getDefaultShaders](StandShader.md#getdefaultshaders)
+- [getDefaultColorShader](StandShader.md#getdefaultcolorshader)
+- [setDefine](StandShader.md#setdefine)
+- [hasDefine](StandShader.md#hasdefine)
+- [deleteDefine](StandShader.md#deletedefine)
+- [setUniform](StandShader.md#setuniform)
+- [setUniformFloat](StandShader.md#setuniformfloat)
+- [setUniformVector2](StandShader.md#setuniformvector2)
+- [setUniformVector3](StandShader.md#setuniformvector3)
+- [setUniformVector4](StandShader.md#setuniformvector4)
+- [setUniformColor](StandShader.md#setuniformcolor)
+- [getUniform](StandShader.md#getuniform)
+- [getUniformFloat](StandShader.md#getuniformfloat)
+- [getUniformVector2](StandShader.md#getuniformvector2)
+- [getUniformVector3](StandShader.md#getuniformvector3)
+- [getUniformVector4](StandShader.md#getuniformvector4)
+- [getUniformColor](StandShader.md#getuniformcolor)
+- [setTexture](StandShader.md#settexture)
+- [getTexture](StandShader.md#gettexture)
+- [setUniformBuffer](StandShader.md#setuniformbuffer)
+- [getUniformBuffer](StandShader.md#getuniformbuffer)
+- [setStorageBuffer](StandShader.md#setstoragebuffer)
+- [getStorageBuffer](StandShader.md#getstoragebuffer)
+- [setStructStorageBuffer](StandShader.md#setstructstoragebuffer)
+- [getStructStorageBuffer](StandShader.md#getstructstoragebuffer)
+- [noticeValueChange](StandShader.md#noticevaluechange)
+- [destroy](StandShader.md#destroy)
+- [clone](StandShader.md#clone)
+- [applyUniform](StandShader.md#applyuniform)
+- [setDefault](StandShader.md#setdefault)
+- [useCleanCoat](StandShader.md#usecleancoat)
+
+## Constructors
+
+### constructor
+
+• **new StandShader**(): [`StandShader`](StandShader.md)
+
+#### Returns
+
+[`StandShader`](StandShader.md)
+
+#### Overrides
+
+[Shader](Shader.md).[constructor](Shader.md#constructor)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L12)
+
+## Properties
+
+### computes
+
+• **computes**: [`RenderShaderCompute`](RenderShaderCompute.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[computes](Shader.md#computes)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L19)
+
+___
+
+### passShader
+
+• **passShader**: `Map`\<`PassType`, [`RenderShaderPass`](RenderShaderPass.md)[]\>
+
+#### Inherited from
+
+[Shader](Shader.md).[passShader](Shader.md#passshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L21)
+
+## Accessors
+
+### baseMap
+
+• `get` **baseMap**(): [`Texture`](Texture.md)
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L72)
+
+• `set` **baseMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L76)
+
+___
+
+### baseColor
+
+• `get` **baseColor**(): [`Color`](Color.md)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L80)
+
+• `set` **baseColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L84)
+
+___
+
+### normalMap
+
+• `get` **normalMap**(): [`Texture`](Texture.md)
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L88)
+
+• `set` **normalMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L92)
+
+___
+
+### doubleSide
+
+• `get` **doubleSide**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L96)
+
+• `set` **doubleSide**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L99)
+
+___
+
+### alphaCutoff
+
+• `get` **alphaCutoff**(): `any`
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L103)
+
+• `set` **alphaCutoff**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `any` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L106)
+
+___
+
+### emissiveColor
+
+• `get` **emissiveColor**(): [`Color`](Color.md)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L112)
+
+• `set` **emissiveColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L116)
+
+___
+
+### emissiveIntensity
+
+• `get` **emissiveIntensity**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L120)
+
+• `set` **emissiveIntensity**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L124)
+
+___
+
+### transformUV1
+
+• `get` **transformUV1**(): `Vector4`
+
+get transformUV1
+
+#### Returns
+
+`Vector4`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L131)
+
+• `set` **transformUV1**(`value`): `void`
+
+set transformUV1
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:138](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L138)
+
+___
+
+### uvTransform\_2
+
+• `get` **uvTransform_2**(): `Vector4`
+
+get transformUV2
+
+#### Returns
+
+`Vector4`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:146](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L146)
+
+• `set` **uvTransform_2**(`value`): `void`
+
+set transformUV2
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L153)
+
+___
+
+### depthWriteEnabled
+
+• `get` **depthWriteEnabled**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:158](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L158)
+
+• `set` **depthWriteEnabled**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L161)
+
+___
+
+### materialF0
+
+• `get` **materialF0**(): `Vector4`
+
+get reflectivity
+
+#### Returns
+
+`Vector4`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L168)
+
+• `set` **materialF0**(`value`): `void`
+
+set reflectivity
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:175](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L175)
+
+___
+
+### specularColor
+
+• `get` **specularColor**(): [`Color`](Color.md)
+
+get specularColor
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L182)
+
+• `set` **specularColor**(`value`): `void`
+
+specularColor
+set reflectivity
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:189](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L189)
+
+___
+
+### roughness
+
+• `get` **roughness**(): `number`
+
+get roughness
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:196](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L196)
+
+• `set` **roughness**(`value`): `void`
+
+set roughness
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L203)
+
+___
+
+### metallic
+
+• `get` **metallic**(): `number`
+
+get metallic
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:210](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L210)
+
+• `set` **metallic**(`value`): `void`
+
+set metallic
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:217](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L217)
+
+___
+
+### ao
+
+• `get` **ao**(): `number`
+
+get Ambient Occlussion, dealing with the effect of ambient light on object occlusion
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L224)
+
+• `set` **ao**(`value`): `void`
+
+set Ambient Occlussion, dealing with the effect of ambient light on object occlusion
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:231](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L231)
+
+___
+
+### metallic\_min
+
+• `get` **metallic_min**(): `number`
+
+get min metallic
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:238](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L238)
+
+• `set` **metallic_min**(`value`): `void`
+
+set min metallic
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:245](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L245)
+
+___
+
+### metallic\_max
+
+• `get` **metallic_max**(): `number`
+
+get max metallic
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L252)
+
+• `set` **metallic_max**(`value`): `void`
+
+set max metallic
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:259](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L259)
+
+___
+
+### roughness\_min
+
+• `get` **roughness_min**(): `number`
+
+get min roughness
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:266](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L266)
+
+• `set` **roughness_min**(`value`): `void`
+
+set min roughness
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:273](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L273)
+
+___
+
+### roughness\_max
+
+• `get` **roughness_max**(): `number`
+
+get max roughness
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:280](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L280)
+
+• `set` **roughness_max**(`value`): `void`
+
+set max roughness
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:287](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L287)
+
+___
+
+### normalScale
+
+• `get` **normalScale**(): `number`
+
+Get the influence of Normal mapping on materials
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:294](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L294)
+
+• `set` **normalScale**(`value`): `void`
+
+Set the influence of Normal mapping on materials
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:301](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L301)
+
+___
+
+### maskMap
+
+• `get` **maskMap**(): [`Texture`](Texture.md)
+
+get Mask Map
+R_chanel -> AoMap
+G_chanel -> Roughness
+B_chanel -> Metallic
+A_chanel -> C
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L312)
+
+• `set` **maskMap**(`value`): `void`
+
+set Mask Map
+R_chanel -> AoMap
+G_chanel -> Roughness
+B_chanel -> Metallic
+A_chanel -> C
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:323](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L323)
+
+___
+
+### aoMap
+
+• `get` **aoMap**(): [`Texture`](Texture.md)
+
+get Ambient Occlussion Map, dealing with the effect of ambient light on object occlusion
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:346](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L346)
+
+• `set` **aoMap**(`value`): `void`
+
+set Ambient Occlussion Map, dealing with the effect of ambient light on object occlusion
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:335](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L335)
+
+___
+
+### clearCoatRoughnessMap
+
+• `get` **clearCoatRoughnessMap**(): [`Texture`](Texture.md)
+
+get clearCoatRoughnessMap
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:364](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L364)
+
+• `set` **clearCoatRoughnessMap**(`value`): `void`
+
+set clearCoatRoughnessMap
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:353](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L353)
+
+___
+
+### brdfLUT
+
+• `get` **brdfLUT**(): [`Texture`](Texture.md)
+
+get brdf query map
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:371](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L371)
+
+• `set` **brdfLUT**(`value`): `void`
+
+set brdf query map
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:378](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L378)
+
+___
+
+### emissiveMap
+
+• `get` **emissiveMap**(): [`Texture`](Texture.md)
+
+get emissive map
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:386](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L386)
+
+• `set` **emissiveMap**(`value`): `void`
+
+set emissive map
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:393](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L393)
+
+___
+
+### envIntensity
+
+• `get` **envIntensity**(): `number`
+
+get intensity of environment light or color of sampled by texture
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:407](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L407)
+
+• `set` **envIntensity**(`value`): `void`
+
+set intensity of environment light or color of sampled by texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:400](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L400)
+
+___
+
+### ior
+
+• `get` **ior**(): `number`
+
+get factor of refractive
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:421](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L421)
+
+• `set` **ior**(`value`): `void`
+
+set factor of refractive
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:414](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L414)
+
+___
+
+### clearcoatFactor
+
+• `get` **clearcoatFactor**(): `number`
+
+get the factor of the clearcoat
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:443](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L443)
+
+• `set` **clearcoatFactor**(`value`): `void`
+
+Set the factor of the clearcoat
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:435](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L435)
+
+___
+
+### clearcoatRoughnessFactor
+
+• `get` **clearcoatRoughnessFactor**(): `number`
+
+get the factor of the clearcoat Roughness
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:458](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L458)
+
+• `set` **clearcoatRoughnessFactor**(`value`): `void`
+
+set the factor of the clearcoat Roughness
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:450](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L450)
+
+___
+
+### clearcoatWeight
+
+• `get` **clearcoatWeight**(): `number`
+
+get the weight of the clearcoat
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:473](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L473)
+
+• `set` **clearcoatWeight**(`value`): `void`
+
+set the weight of the clearcoat
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:465](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L465)
+
+___
+
+### clearcoatColor
+
+• `get` **clearcoatColor**(): [`Color`](Color.md)
+
+set the color of the clearcoat
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:488](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L488)
+
+• `set` **clearcoatColor**(`value`): `void`
+
+get the color of the clearcoat
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:480](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L480)
+
+## Methods
+
+### addRenderPass
+
+▸ **addRenderPass**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[addRenderPass](Shader.md#addrenderpass)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L28)
+
+___
+
+### removeShader
+
+▸ **removeShader**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShader](Shader.md#removeshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L38)
+
+___
+
+### removeShaderByIndex
+
+▸ **removeShaderByIndex**(`passType`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `passType` | `PassType` | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShaderByIndex](Shader.md#removeshaderbyindex)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L52)
+
+___
+
+### getSubShaders
+
+▸ **getSubShaders**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getSubShaders](Shader.md#getsubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L63)
+
+___
+
+### hasSubShaders
+
+▸ **hasSubShaders**(`passType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasSubShaders](Shader.md#hassubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L67)
+
+___
+
+### getDefaultShaders
+
+▸ **getDefaultShaders**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultShaders](Shader.md#getdefaultshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L72)
+
+___
+
+### getDefaultColorShader
+
+▸ **getDefaultColorShader**(): [`RenderShaderPass`](RenderShaderPass.md)
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultColorShader](Shader.md#getdefaultcolorshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L76)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setDefine](Shader.md#setdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L80)
+
+___
+
+### hasDefine
+
+▸ **hasDefine**(`arg0`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasDefine](Shader.md#hasdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L88)
+
+___
+
+### deleteDefine
+
+▸ **deleteDefine**(`arg0`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[deleteDefine](Shader.md#deletedefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L99)
+
+___
+
+### setUniform
+
+▸ **setUniform**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniform](Shader.md#setuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L107)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformFloat](Shader.md#setuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L115)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector2](Shader.md#setuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L123)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector3](Shader.md#setuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L131)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector4](Shader.md#setuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L139)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformColor](Shader.md#setuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L147)
+
+___
+
+### getUniform
+
+▸ **getUniform**(`arg0`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniform](Shader.md#getuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L155)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`arg0`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformFloat](Shader.md#getuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:159](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L159)
+
+___
+
+### getUniformVector2
+
+▸ **getUniformVector2**(`arg0`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector2](Shader.md#getuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:163](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L163)
+
+___
+
+### getUniformVector3
+
+▸ **getUniformVector3**(`arg0`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector3](Shader.md#getuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:167](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L167)
+
+___
+
+### getUniformVector4
+
+▸ **getUniformVector4**(`arg0`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector4](Shader.md#getuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:171](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L171)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`arg0`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformColor](Shader.md#getuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:175](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L175)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setTexture](Shader.md#settexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L179)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`arg0`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getTexture](Shader.md#gettexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:188](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L188)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformBuffer](Shader.md#setuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:192](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L192)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformBuffer](Shader.md#getuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L200)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStorageBuffer](Shader.md#setstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:204](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L204)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`arg0`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getStorageBuffer](Shader.md#getstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:212](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L212)
+
+___
+
+### setStructStorageBuffer
+
+▸ **setStructStorageBuffer**\<`T`\>(`arg0`, `arg1`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StructStorageGPUBuffer`](StructStorageGPUBuffer.md)\<`T`\> |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStructStorageBuffer](Shader.md#setstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L216)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getStructStorageBuffer](Shader.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L224)
+
+___
+
+### noticeValueChange
+
+▸ **noticeValueChange**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[noticeValueChange](Shader.md#noticevaluechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L228)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[destroy](Shader.md#destroy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:236](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L236)
+
+___
+
+### clone
+
+▸ **clone**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[clone](Shader.md#clone)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L240)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[applyUniform](Shader.md#applyuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:249](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L249)
+
+___
+
+### setDefault
+
+▸ **setDefault**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L35)
+
+___
+
+### useCleanCoat
+
+▸ **useCleanCoat**(): `void`
+
+valid USE_CLEARCOAT define in shader
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/StandShader.ts:428](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/StandShader.ts#L428)
diff --git a/docs/api/classes/StorageGPUBuffer.md b/docs/api/classes/StorageGPUBuffer.md
new file mode 100644
index 00000000..64975b42
--- /dev/null
+++ b/docs/api/classes/StorageGPUBuffer.md
@@ -0,0 +1,1289 @@
+# Class: StorageGPUBuffer
+
+The buffer of the storage class
+written in the computer shader or CPU Coder
+usage GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST
+
+## Hierarchy
+
+- `GPUBufferBase`
+
+ ↳ **`StorageGPUBuffer`**
+
+### Constructors
+
+- [constructor](StorageGPUBuffer.md#constructor)
+
+### Properties
+
+- [bufferType](StorageGPUBuffer.md#buffertype)
+- [buffer](StorageGPUBuffer.md#buffer)
+- [memory](StorageGPUBuffer.md#memory)
+- [memoryNodes](StorageGPUBuffer.md#memorynodes)
+- [seek](StorageGPUBuffer.md#seek)
+- [outFloat32Array](StorageGPUBuffer.md#outfloat32array)
+- [byteSize](StorageGPUBuffer.md#bytesize)
+- [usage](StorageGPUBuffer.md#usage)
+- [visibility](StorageGPUBuffer.md#visibility)
+
+### Methods
+
+- [debug](StorageGPUBuffer.md#debug)
+- [reset](StorageGPUBuffer.md#reset)
+- [setBoolean](StorageGPUBuffer.md#setboolean)
+- [readBoole](StorageGPUBuffer.md#readboole)
+- [setFloat](StorageGPUBuffer.md#setfloat)
+- [getFloat](StorageGPUBuffer.md#getfloat)
+- [setInt8](StorageGPUBuffer.md#setint8)
+- [getInt8](StorageGPUBuffer.md#getint8)
+- [setInt16](StorageGPUBuffer.md#setint16)
+- [getInt16](StorageGPUBuffer.md#getint16)
+- [setInt32](StorageGPUBuffer.md#setint32)
+- [getInt32](StorageGPUBuffer.md#getint32)
+- [setUint8](StorageGPUBuffer.md#setuint8)
+- [getUint8](StorageGPUBuffer.md#getuint8)
+- [setUint16](StorageGPUBuffer.md#setuint16)
+- [getUint16](StorageGPUBuffer.md#getuint16)
+- [setUint32](StorageGPUBuffer.md#setuint32)
+- [getUint32](StorageGPUBuffer.md#getuint32)
+- [setVector2](StorageGPUBuffer.md#setvector2)
+- [getVector2](StorageGPUBuffer.md#getvector2)
+- [setVector3](StorageGPUBuffer.md#setvector3)
+- [getVector3](StorageGPUBuffer.md#getvector3)
+- [setVector4](StorageGPUBuffer.md#setvector4)
+- [getVector4](StorageGPUBuffer.md#getvector4)
+- [setVector4Array](StorageGPUBuffer.md#setvector4array)
+- [setColor](StorageGPUBuffer.md#setcolor)
+- [getColor](StorageGPUBuffer.md#getcolor)
+- [setColorArray](StorageGPUBuffer.md#setcolorarray)
+- [setMatrix](StorageGPUBuffer.md#setmatrix)
+- [setMatrixArray](StorageGPUBuffer.md#setmatrixarray)
+- [setArray](StorageGPUBuffer.md#setarray)
+- [setFloat32Array](StorageGPUBuffer.md#setfloat32array)
+- [setInt32Array](StorageGPUBuffer.md#setint32array)
+- [setUint32Array](StorageGPUBuffer.md#setuint32array)
+- [setStruct](StorageGPUBuffer.md#setstruct)
+- [setStructArray](StorageGPUBuffer.md#setstructarray)
+- [clean](StorageGPUBuffer.md#clean)
+- [apply](StorageGPUBuffer.md#apply)
+- [mapAsyncWrite](StorageGPUBuffer.md#mapasyncwrite)
+- [destroy](StorageGPUBuffer.md#destroy)
+- [resizeBuffer](StorageGPUBuffer.md#resizebuffer)
+- [readBuffer](StorageGPUBuffer.md#readbuffer)
+
+## Constructors
+
+### constructor
+
+• **new StorageGPUBuffer**(`size`, `usage?`, `data?`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `size` | `number` | `undefined` |
+| `usage` | `number` | `0` |
+| `data?` | [`ArrayBufferData`](../types/ArrayBufferData.md) | `undefined` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Overrides
+
+GPUBufferBase.constructor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/StorageGPUBuffer.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/StorageGPUBuffer.ts#L11)
+
+## Properties
+
+### bufferType
+
+• **bufferType**: [`GPUBufferType`](../enums/GPUBufferType.md)
+
+#### Inherited from
+
+GPUBufferBase.bufferType
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L20)
+
+___
+
+### buffer
+
+• **buffer**: `GPUBuffer`
+
+#### Inherited from
+
+GPUBufferBase.buffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L21)
+
+___
+
+### memory
+
+• **memory**: `MemoryDO`
+
+#### Inherited from
+
+GPUBufferBase.memory
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L22)
+
+___
+
+### memoryNodes
+
+• **memoryNodes**: `Map`\<`string` \| `number`, `MemoryInfo`\>
+
+#### Inherited from
+
+GPUBufferBase.memoryNodes
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L23)
+
+___
+
+### seek
+
+• **seek**: `number`
+
+#### Inherited from
+
+GPUBufferBase.seek
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L24)
+
+___
+
+### outFloat32Array
+
+• **outFloat32Array**: `Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.outFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L25)
+
+___
+
+### byteSize
+
+• **byteSize**: `number`
+
+#### Inherited from
+
+GPUBufferBase.byteSize
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L26)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+#### Inherited from
+
+GPUBufferBase.usage
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L27)
+
+___
+
+### visibility
+
+• **visibility**: `number`
+
+#### Inherited from
+
+GPUBufferBase.visibility
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L28)
+
+## Methods
+
+### debug
+
+▸ **debug**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.debug
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L41)
+
+___
+
+### reset
+
+▸ **reset**(`clean?`, `size?`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `clean` | `boolean` | `false` |
+| `size` | `number` | `0` |
+| `data?` | `Float32Array` | `undefined` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.reset
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L44)
+
+___
+
+### setBoolean
+
+▸ **setBoolean**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setBoolean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L52)
+
+___
+
+### readBoole
+
+▸ **readBoole**(`name`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+GPUBufferBase.readBoole
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L62)
+
+___
+
+### setFloat
+
+▸ **setFloat**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L70)
+
+___
+
+### getFloat
+
+▸ **getFloat**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L79)
+
+___
+
+### setInt8
+
+▸ **setInt8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L87)
+
+___
+
+### getInt8
+
+▸ **getInt8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L96)
+
+___
+
+### setInt16
+
+▸ **setInt16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L104)
+
+___
+
+### getInt16
+
+▸ **getInt16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L113)
+
+___
+
+### setInt32
+
+▸ **setInt32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L121)
+
+___
+
+### getInt32
+
+▸ **getInt32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:130](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L130)
+
+___
+
+### setUint8
+
+▸ **setUint8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:138](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L138)
+
+___
+
+### getUint8
+
+▸ **getUint8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L147)
+
+___
+
+### setUint16
+
+▸ **setUint16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L156)
+
+___
+
+### getUint16
+
+▸ **getUint16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L165)
+
+___
+
+### setUint32
+
+▸ **setUint32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L173)
+
+___
+
+### getUint32
+
+▸ **getUint32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L182)
+
+___
+
+### setVector2
+
+▸ **setVector2**(`name`, `v2`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v2` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L190)
+
+___
+
+### getVector2
+
+▸ **getVector2**(`name`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+GPUBufferBase.getVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L199)
+
+___
+
+### setVector3
+
+▸ **setVector3**(`name`, `v3`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v3` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L207)
+
+___
+
+### getVector3
+
+▸ **getVector3**(`name`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+GPUBufferBase.getVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L216)
+
+___
+
+### setVector4
+
+▸ **setVector4**(`name`, `v4`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4` | `Vector4` \| [`Quaternion`](Quaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L224)
+
+___
+
+### getVector4
+
+▸ **getVector4**(`name`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+GPUBufferBase.getVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L233)
+
+___
+
+### setVector4Array
+
+▸ **setVector4Array**(`name`, `v4Array`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4Array` | [`Vector3`](Vector3.md)[] \| `Vector4`[] \| [`Quaternion`](Quaternion.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:241](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L241)
+
+___
+
+### setColor
+
+▸ **setColor**(`name`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `color` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:250](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L250)
+
+___
+
+### getColor
+
+▸ **getColor**(`name`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+GPUBufferBase.getColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:259](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L259)
+
+___
+
+### setColorArray
+
+▸ **setColorArray**(`name`, `colorArray`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `colorArray` | [`Color`](Color.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColorArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:267](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L267)
+
+___
+
+### setMatrix
+
+▸ **setMatrix**(`name`, `mat`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mat` | [`Matrix4`](Matrix4.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrix
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:276](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L276)
+
+___
+
+### setMatrixArray
+
+▸ **setMatrixArray**(`name`, `mats`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mats` | [`Matrix4`](Matrix4.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrixArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:285](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L285)
+
+___
+
+### setArray
+
+▸ **setArray**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `number`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:297](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L297)
+
+___
+
+### setFloat32Array
+
+▸ **setFloat32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Float32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:306](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L306)
+
+___
+
+### setInt32Array
+
+▸ **setInt32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Int32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L315)
+
+___
+
+### setUint32Array
+
+▸ **setUint32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Uint32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:325](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L325)
+
+___
+
+### setStruct
+
+▸ **setStruct**\<`T`\>(`c`, `index`, `data`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `index` | `number` |
+| `data` | `any` |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStruct
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:334](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L334)
+
+___
+
+### setStructArray
+
+▸ **setStructArray**\<`T`\>(`c`, `dataList`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `dataList` | `any`[] |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStructArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:390](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L390)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.clean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:403](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L403)
+
+___
+
+### apply
+
+▸ **apply**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.apply
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L408)
+
+___
+
+### mapAsyncWrite
+
+▸ **mapAsyncWrite**(`mapAsyncArray`, `len`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mapAsyncArray` | `Float32Array` |
+| `len` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.mapAsyncWrite
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:413](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L413)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.destroy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:454](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L454)
+
+___
+
+### resizeBuffer
+
+▸ **resizeBuffer**(`size`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `size` | `number` |
+| `data?` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.resizeBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:511](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L511)
+
+___
+
+### readBuffer
+
+▸ **readBuffer**(): `Float32Array`
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:558](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L558)
+
+▸ **readBuffer**(`promise`): `Float32Array`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``false`` |
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:559](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L559)
+
+▸ **readBuffer**(`promise`): `Promise`\<`Float32Array`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``true`` |
+
+#### Returns
+
+`Promise`\<`Float32Array`\>
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:560](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L560)
diff --git a/docs/api/classes/StorageUtil.md b/docs/api/classes/StorageUtil.md
new file mode 100644
index 00000000..1e0b9023
--- /dev/null
+++ b/docs/api/classes/StorageUtil.md
@@ -0,0 +1,87 @@
+# Class: StorageUtil
+
+### Constructors
+
+- [constructor](StorageUtil.md#constructor)
+
+### Properties
+
+- [localData](StorageUtil.md#localdata)
+
+### Methods
+
+- [load](StorageUtil.md#load)
+- [save](StorageUtil.md#save)
+
+## Constructors
+
+### constructor
+
+• **new StorageUtil**(): [`StorageUtil`](StorageUtil.md)
+
+#### Returns
+
+[`StorageUtil`](StorageUtil.md)
+
+## Properties
+
+### localData
+
+▪ `Static` **localData**: `any`
+
+#### Defined in
+
+[src/util/StorageUtil.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/util/StorageUtil.ts#L3)
+
+## Methods
+
+### load
+
+▸ **load**\<`T`\>(`dataTable`): `T`
+
+#### Type parameters
+
+| Name |
+| :------ |
+| `T` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `dataTable` | `string` |
+
+#### Returns
+
+`T`
+
+#### Defined in
+
+[src/util/StorageUtil.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/util/StorageUtil.ts#L4)
+
+___
+
+### save
+
+▸ **save**\<`T`\>(`table`, `data`): `void`
+
+#### Type parameters
+
+| Name |
+| :------ |
+| `T` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `table` | `string` |
+| `data` | `T` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/StorageUtil.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/util/StorageUtil.ts#L15)
diff --git a/docs/api/classes/StringUtil.md b/docs/api/classes/StringUtil.md
new file mode 100644
index 00000000..28eb789f
--- /dev/null
+++ b/docs/api/classes/StringUtil.md
@@ -0,0 +1,507 @@
+# Class: StringUtil
+
+String processing tool class
+
+### Constructors
+
+- [constructor](StringUtil.md#constructor)
+
+### Methods
+
+- [hasString](StringUtil.md#hasstring)
+- [getEllipsis](StringUtil.md#getellipsis)
+- [getURLName](StringUtil.md#geturlname)
+- [getFileFormat](StringUtil.md#getfileformat)
+- [readLineProperty](StringUtil.md#readlineproperty)
+- [getPath](StringUtil.md#getpath)
+- [normalizePath](StringUtil.md#normalizepath)
+- [getStringList](StringUtil.md#getstringlist)
+- [formatTime](StringUtil.md#formattime)
+- [trim](StringUtil.md#trim)
+- [isEmpty](StringUtil.md#isempty)
+- [strCut](StringUtil.md#strcut)
+- [toQueryPair](StringUtil.md#toquerypair)
+- [stringFormat](StringUtil.md#stringformat)
+- [parseJson2String](StringUtil.md#parsejson2string)
+- [compareVersion](StringUtil.md#compareversion)
+- [buildRandomCode](StringUtil.md#buildrandomcode)
+- [UUID](StringUtil.md#uuid)
+- [stringToHash](StringUtil.md#stringtohash)
+- [parseUrl](StringUtil.md#parseurl)
+
+## Constructors
+
+### constructor
+
+• **new StringUtil**(): [`StringUtil`](StringUtil.md)
+
+#### Returns
+
+[`StringUtil`](StringUtil.md)
+
+## Methods
+
+### hasString
+
+▸ **hasString**(`fields`, `str`): `number`
+
+Does the string exist
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `fields` | `string`[] | List of detected string |
+| `str` | `string` | source string |
+
+#### Returns
+
+`number`
+
+Return the index position where it is located. If it does not exist, return -1
+
+#### Defined in
+
+[src/util/StringUtil.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L15)
+
+___
+
+### getEllipsis
+
+▸ **getEllipsis**(`str`, `len?`): `string`
+
+Gets an ellipsis terminated string representation that exceeds the range
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `str` | `any` | `undefined` | source string |
+| `len` | `number` | `4` | range of string |
+
+#### Returns
+
+`string`
+
+result string
+
+#### Defined in
+
+[src/util/StringUtil.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L31)
+
+___
+
+### getURLName
+
+▸ **getURLName**(`url`): `string`
+
+get name based on URL
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | source url |
+
+#### Returns
+
+`string`
+
+name
+
+#### Defined in
+
+[src/util/StringUtil.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L43)
+
+___
+
+### getFileFormat
+
+▸ **getFileFormat**(`url`): `string`
+
+get suffix of file name from url
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `url` | `string` | source url |
+
+#### Returns
+
+`string`
+
+suffix
+
+#### Defined in
+
+[src/util/StringUtil.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L57)
+
+___
+
+### readLineProperty
+
+▸ **readLineProperty**(`line`, `data`): `void`
+
+get information stored in a string
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `line` | `string` | source string |
+| `data` | `any` | result data reference |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/StringUtil.ts:74](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L74)
+
+___
+
+### getPath
+
+▸ **getPath**(`url`): `string`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `url` | `string` |
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/util/StringUtil.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L93)
+
+___
+
+### normalizePath
+
+▸ **normalizePath**(`url`): `string`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `url` | `string` |
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/util/StringUtil.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L99)
+
+___
+
+### getStringList
+
+▸ **getStringList**(`str`, `char?`): `string`[]
+
+Used to cut specified characters
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `str` | `string` | `undefined` | source string |
+| `char` | `string` | `';'` | cut string |
+
+#### Returns
+
+`string`[]
+
+result string array
+
+#### Defined in
+
+[src/util/StringUtil.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L135)
+
+___
+
+### formatTime
+
+▸ **formatTime**(`time`): `string`[]
+
+Format timestamp data
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `time` | `number` | timestamp |
+
+#### Returns
+
+`string`[]
+
+#### Defined in
+
+[src/util/StringUtil.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L144)
+
+___
+
+### trim
+
+▸ **trim**(`str`): `any`
+
+trim
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `str` | `any` | source string |
+
+#### Returns
+
+`any`
+
+result string
+
+#### Defined in
+
+[src/util/StringUtil.ts:158](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L158)
+
+___
+
+### isEmpty
+
+▸ **isEmpty**(`value`): `boolean`
+
+Determine if the string is empty, null, '' or 'null'
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `any` | source string |
+
+#### Returns
+
+`boolean`
+
+boolean
+
+#### Defined in
+
+[src/util/StringUtil.ts:167](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L167)
+
+___
+
+### strCut
+
+▸ **strCut**(`str`, `len`): `string`
+
+Handle strings that exceed the length range, such as adding strings that exceed the range
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `str` | `any` | source string |
+| `len` | `any` | length |
+
+#### Returns
+
+`string`
+
+result string
+
+#### Defined in
+
+[src/util/StringUtil.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L177)
+
+___
+
+### toQueryPair
+
+▸ **toQueryPair**(`key`, `value`, `isEncodeURI?`): `string`
+
+According to the splicing request parameters
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `key` | `any` | `undefined` | key string |
+| `value` | `any` | `undefined` | value string |
+| `isEncodeURI` | `boolean` | `false` | isEncodeURI |
+
+#### Returns
+
+`string`
+
+result string
+
+#### Defined in
+
+[src/util/StringUtil.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L207)
+
+___
+
+### stringFormat
+
+▸ **stringFormat**(`str`, `...params`): `string`
+
+format a string
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `str` | `string` | source string |
+| `...params` | `any`[] | Pass in a regular processing parameter array |
+
+#### Returns
+
+`string`
+
+result string
+
+#### Defined in
+
+[src/util/StringUtil.ts:217](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L217)
+
+___
+
+### parseJson2String
+
+▸ **parseJson2String**(`json`, `options?`): `string`
+
+Convert JSON objects to strings
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `json` | `any` | object of json |
+| `options?` | `any` | |
+
+#### Returns
+
+`string`
+
+result string
+
+#### Defined in
+
+[src/util/StringUtil.ts:244](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L244)
+
+___
+
+### compareVersion
+
+▸ **compareVersion**(`v1`, `v2`): ``1`` \| ``0`` \| ``-1``
+
+Compatibility mode - version comparison
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v1` | `any` | Version 1 |
+| `v2` | `any` | Version 2 |
+
+#### Returns
+
+``1`` \| ``0`` \| ``-1``
+
+Returns 1, -1, or 0, indicating that the version number is greater, less, or equal, respectively
+
+#### Defined in
+
+[src/util/StringUtil.ts:310](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L310)
+
+___
+
+### buildRandomCode
+
+▸ **buildRandomCode**(): `string`
+
+Generate non repeating random string codes
+
+#### Returns
+
+`string`
+
+result
+
+#### Defined in
+
+[src/util/StringUtil.ts:340](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L340)
+
+___
+
+### UUID
+
+▸ **UUID**(): `string`
+
+UUID
+
+#### Returns
+
+`string`
+
+UUID
+
+#### Defined in
+
+[src/util/StringUtil.ts:356](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L356)
+
+___
+
+### stringToHash
+
+▸ **stringToHash**(`str`): `number`
+
+make hash code
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `str` | `any` | source value |
+
+#### Returns
+
+`number`
+
+hash code
+
+#### Defined in
+
+[src/util/StringUtil.ts:369](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L369)
+
+___
+
+### parseUrl
+
+▸ **parseUrl**(`base`, `url`): `string`
+
+Convert GLTF URL Address
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `base` | `string` | baseURL |
+| `url` | `string` | source url |
+
+#### Returns
+
+`string`
+
+result url
+
+#### Defined in
+
+[src/util/StringUtil.ts:386](https://github.com/Orillusion/orillusion/blob/main/src/util/StringUtil.ts#L386)
diff --git a/docs/api/classes/StripeGeometry.md b/docs/api/classes/StripeGeometry.md
new file mode 100644
index 00000000..c13543aa
--- /dev/null
+++ b/docs/api/classes/StripeGeometry.md
@@ -0,0 +1,625 @@
+# Class: StripeGeometry
+
+Plane geometry
+
+## Hierarchy
+
+- [`GeometryBase`](GeometryBase.md)
+
+ ↳ **`StripeGeometry`**
+
+### Constructors
+
+- [constructor](StripeGeometry.md#constructor)
+
+### Properties
+
+- [instanceID](StripeGeometry.md#instanceid)
+- [name](StripeGeometry.md#name)
+- [subGeometries](StripeGeometry.md#subgeometries)
+- [morphTargetsRelative](StripeGeometry.md#morphtargetsrelative)
+- [morphTargetDictionary](StripeGeometry.md#morphtargetdictionary)
+- [skinNames](StripeGeometry.md#skinnames)
+- [bindPose](StripeGeometry.md#bindpose)
+- [blendShapeData](StripeGeometry.md#blendshapedata)
+- [vertexDim](StripeGeometry.md#vertexdim)
+- [vertexCount](StripeGeometry.md#vertexcount)
+- [segments](StripeGeometry.md#segments)
+
+### Accessors
+
+- [indicesBuffer](StripeGeometry.md#indicesbuffer)
+- [vertexBuffer](StripeGeometry.md#vertexbuffer)
+- [vertexAttributes](StripeGeometry.md#vertexattributes)
+- [vertexAttributeMap](StripeGeometry.md#vertexattributemap)
+- [geometryType](StripeGeometry.md#geometrytype)
+- [bounds](StripeGeometry.md#bounds)
+
+### Methods
+
+- [addSubGeometry](StripeGeometry.md#addsubgeometry)
+- [generate](StripeGeometry.md#generate)
+- [setIndices](StripeGeometry.md#setindices)
+- [setAttribute](StripeGeometry.md#setattribute)
+- [getAttribute](StripeGeometry.md#getattribute)
+- [hasAttribute](StripeGeometry.md#hasattribute)
+- [genWireframe](StripeGeometry.md#genwireframe)
+- [compute](StripeGeometry.md#compute)
+- [computeNormals](StripeGeometry.md#computenormals)
+- [isPrimitive](StripeGeometry.md#isprimitive)
+- [destroy](StripeGeometry.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new StripeGeometry**(`segments`): [`StripeGeometry`](StripeGeometry.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `segments` | [[`Vector3`](Vector3.md), [`Vector3`](Vector3.md)][] |
+
+#### Returns
+
+[`StripeGeometry`](StripeGeometry.md)
+
+#### Overrides
+
+[GeometryBase](GeometryBase.md).[constructor](GeometryBase.md#constructor)
+
+#### Defined in
+
+[src/shape/StripeGeometry.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/shape/StripeGeometry.ts#L22)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[instanceID](GeometryBase.md#instanceid)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L39)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[name](GeometryBase.md#name)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L40)
+
+___
+
+### subGeometries
+
+• **subGeometries**: [`SubGeometry`](SubGeometry.md)[] = `[]`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[subGeometries](GeometryBase.md#subgeometries)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L41)
+
+___
+
+### morphTargetsRelative
+
+• **morphTargetsRelative**: `boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetsRelative](GeometryBase.md#morphtargetsrelative)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L42)
+
+___
+
+### morphTargetDictionary
+
+• **morphTargetDictionary**: `Object`
+
+#### Index signature
+
+▪ [blenderName: `string`]: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetDictionary](GeometryBase.md#morphtargetdictionary)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L43)
+
+___
+
+### skinNames
+
+• **skinNames**: `string`[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[skinNames](GeometryBase.md#skinnames)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L44)
+
+___
+
+### bindPose
+
+• **bindPose**: [`Matrix4`](Matrix4.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[bindPose](GeometryBase.md#bindpose)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L45)
+
+___
+
+### blendShapeData
+
+• **blendShapeData**: [`BlendShapeData`](BlendShapeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[blendShapeData](GeometryBase.md#blendshapedata)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L46)
+
+___
+
+### vertexDim
+
+• **vertexDim**: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexDim](GeometryBase.md#vertexdim)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L47)
+
+___
+
+### vertexCount
+
+• **vertexCount**: `number` = `0`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexCount](GeometryBase.md#vertexcount)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L48)
+
+___
+
+### segments
+
+• **segments**: [[`Vector3`](Vector3.md), [`Vector3`](Vector3.md)][]
+
+#### Defined in
+
+[src/shape/StripeGeometry.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/shape/StripeGeometry.ts#L12)
+
+## Accessors
+
+### indicesBuffer
+
+• `get` **indicesBuffer**(): [`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Returns
+
+[`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Inherited from
+
+GeometryBase.indicesBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L69)
+
+___
+
+### vertexBuffer
+
+• `get` **vertexBuffer**(): [`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Returns
+
+[`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Inherited from
+
+GeometryBase.vertexBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L73)
+
+___
+
+### vertexAttributes
+
+• `get` **vertexAttributes**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+GeometryBase.vertexAttributes
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L77)
+
+___
+
+### vertexAttributeMap
+
+• `get` **vertexAttributeMap**(): `Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Returns
+
+`Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Inherited from
+
+GeometryBase.vertexAttributeMap
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L81)
+
+___
+
+### geometryType
+
+• `get` **geometryType**(): [`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Returns
+
+[`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L85)
+
+• `set` **geometryType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryVertexType`](../enums/GeometryVertexType.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L88)
+
+___
+
+### bounds
+
+• `get` **bounds**(): `BoundingBox`
+
+#### Returns
+
+`BoundingBox`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L92)
+
+• `set` **bounds**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BoundingBox` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L135)
+
+## Methods
+
+### addSubGeometry
+
+▸ **addSubGeometry**(`...lodLevels`): [`SubGeometry`](SubGeometry.md)
+
+add subGeometry from lod level
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `...lodLevels` | [`LODDescriptor`](../types/LODDescriptor.md)[] |
+
+#### Returns
+
+[`SubGeometry`](SubGeometry.md)
+
+**`See`**
+
+LODDescriptor
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[addSubGeometry](GeometryBase.md#addsubgeometry)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L144)
+
+___
+
+### generate
+
+▸ **generate**(`shaderReflection`): `void`
+
+create geometry by shaderReflection
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `shaderReflection` | `ShaderReflection` | ShaderReflection |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[generate](GeometryBase.md#generate)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L155)
+
+___
+
+### setIndices
+
+▸ **setIndices**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setIndices](GeometryBase.md#setindices)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L165)
+
+___
+
+### setAttribute
+
+▸ **setAttribute**(`attribute`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setAttribute](GeometryBase.md#setattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L177)
+
+___
+
+### getAttribute
+
+▸ **getAttribute**(`attribute`): [`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+[`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[getAttribute](GeometryBase.md#getattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L190)
+
+___
+
+### hasAttribute
+
+▸ **hasAttribute**(`attribute`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[hasAttribute](GeometryBase.md#hasattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L194)
+
+___
+
+### genWireframe
+
+▸ **genWireframe**(): [`Vector3`](Vector3.md)[]
+
+#### Returns
+
+[`Vector3`](Vector3.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[genWireframe](GeometryBase.md#genwireframe)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L198)
+
+___
+
+### compute
+
+▸ **compute**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[compute](GeometryBase.md#compute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L251)
+
+___
+
+### computeNormals
+
+▸ **computeNormals**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[computeNormals](GeometryBase.md#computenormals)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:270](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L270)
+
+___
+
+### isPrimitive
+
+▸ **isPrimitive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[isPrimitive](GeometryBase.md#isprimitive)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L312)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[destroy](GeometryBase.md#destroy)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:316](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L316)
diff --git a/docs/api/classes/Struct.md b/docs/api/classes/Struct.md
new file mode 100644
index 00000000..67acbb14
--- /dev/null
+++ b/docs/api/classes/Struct.md
@@ -0,0 +1,141 @@
+# Class: Struct
+
+### Constructors
+
+- [constructor](Struct.md#constructor)
+
+### Methods
+
+- [getValueSize](Struct.md#getvaluesize)
+- [Ref](Struct.md#ref)
+- [Get](Struct.md#get)
+- [GetSize](Struct.md#getsize)
+- [getValueType](Struct.md#getvaluetype)
+
+## Constructors
+
+### constructor
+
+• **new Struct**(): [`Struct`](Struct.md)
+
+#### Returns
+
+[`Struct`](Struct.md)
+
+## Methods
+
+### getValueSize
+
+▸ **getValueSize**(`value`): `any`
+
+get any type value memory size
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `any` | any type value |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/util/struct/Struct.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L48)
+
+___
+
+### Ref
+
+▸ **Ref**\<`T`\>(`c`): \{ `name`: `string` ; `type`: `string` }[]
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> |
+
+#### Returns
+
+\{ `name`: `string` ; `type`: `string` }[]
+
+#### Defined in
+
+[src/util/struct/Struct.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L93)
+
+___
+
+### Get
+
+▸ **Get**\<`T`\>(`c`): [`Struct`](Struct.md)
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> |
+
+#### Returns
+
+[`Struct`](Struct.md)
+
+#### Defined in
+
+[src/util/struct/Struct.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L99)
+
+___
+
+### GetSize
+
+▸ **GetSize**\<`T`\>(`c`): `number`
+
+get any struct memory size
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | [`Ctor`](../types/Ctor.md)\<`T`\> |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/util/struct/Struct.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L112)
+
+___
+
+### getValueType
+
+▸ **getValueType**(): \{ `name`: `string` ; `type`: `string` }[]
+
+get reflection name
+
+#### Returns
+
+\{ `name`: `string` ; `type`: `string` }[]
+
+#### Defined in
+
+[src/util/struct/Struct.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L25)
diff --git a/docs/api/classes/StructStorageGPUBuffer.md b/docs/api/classes/StructStorageGPUBuffer.md
new file mode 100644
index 00000000..6c43d70a
--- /dev/null
+++ b/docs/api/classes/StructStorageGPUBuffer.md
@@ -0,0 +1,1301 @@
+# Class: StructStorageGPUBuffer\
+
+Structure storage class buffer, convenient for initializing gpubuffers of structure types
+written in the computer shader or CPU Coder
+usage GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST GPUBufferUsage
+
+## Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+## Hierarchy
+
+- `GPUBufferBase`
+
+ ↳ **`StructStorageGPUBuffer`**
+
+### Constructors
+
+- [constructor](StructStorageGPUBuffer.md#constructor)
+
+### Properties
+
+- [bufferType](StructStorageGPUBuffer.md#buffertype)
+- [buffer](StructStorageGPUBuffer.md#buffer)
+- [memory](StructStorageGPUBuffer.md#memory)
+- [memoryNodes](StructStorageGPUBuffer.md#memorynodes)
+- [seek](StructStorageGPUBuffer.md#seek)
+- [outFloat32Array](StructStorageGPUBuffer.md#outfloat32array)
+- [byteSize](StructStorageGPUBuffer.md#bytesize)
+- [usage](StructStorageGPUBuffer.md#usage)
+- [visibility](StructStorageGPUBuffer.md#visibility)
+
+### Methods
+
+- [debug](StructStorageGPUBuffer.md#debug)
+- [reset](StructStorageGPUBuffer.md#reset)
+- [setBoolean](StructStorageGPUBuffer.md#setboolean)
+- [readBoole](StructStorageGPUBuffer.md#readboole)
+- [setFloat](StructStorageGPUBuffer.md#setfloat)
+- [getFloat](StructStorageGPUBuffer.md#getfloat)
+- [setInt8](StructStorageGPUBuffer.md#setint8)
+- [getInt8](StructStorageGPUBuffer.md#getint8)
+- [setInt16](StructStorageGPUBuffer.md#setint16)
+- [getInt16](StructStorageGPUBuffer.md#getint16)
+- [setInt32](StructStorageGPUBuffer.md#setint32)
+- [getInt32](StructStorageGPUBuffer.md#getint32)
+- [setUint8](StructStorageGPUBuffer.md#setuint8)
+- [getUint8](StructStorageGPUBuffer.md#getuint8)
+- [setUint16](StructStorageGPUBuffer.md#setuint16)
+- [getUint16](StructStorageGPUBuffer.md#getuint16)
+- [setUint32](StructStorageGPUBuffer.md#setuint32)
+- [getUint32](StructStorageGPUBuffer.md#getuint32)
+- [setVector2](StructStorageGPUBuffer.md#setvector2)
+- [getVector2](StructStorageGPUBuffer.md#getvector2)
+- [setVector3](StructStorageGPUBuffer.md#setvector3)
+- [getVector3](StructStorageGPUBuffer.md#getvector3)
+- [setVector4](StructStorageGPUBuffer.md#setvector4)
+- [getVector4](StructStorageGPUBuffer.md#getvector4)
+- [setVector4Array](StructStorageGPUBuffer.md#setvector4array)
+- [setColor](StructStorageGPUBuffer.md#setcolor)
+- [getColor](StructStorageGPUBuffer.md#getcolor)
+- [setColorArray](StructStorageGPUBuffer.md#setcolorarray)
+- [setMatrix](StructStorageGPUBuffer.md#setmatrix)
+- [setMatrixArray](StructStorageGPUBuffer.md#setmatrixarray)
+- [setArray](StructStorageGPUBuffer.md#setarray)
+- [setFloat32Array](StructStorageGPUBuffer.md#setfloat32array)
+- [setInt32Array](StructStorageGPUBuffer.md#setint32array)
+- [setUint32Array](StructStorageGPUBuffer.md#setuint32array)
+- [setStruct](StructStorageGPUBuffer.md#setstruct)
+- [setStructArray](StructStorageGPUBuffer.md#setstructarray)
+- [clean](StructStorageGPUBuffer.md#clean)
+- [apply](StructStorageGPUBuffer.md#apply)
+- [mapAsyncWrite](StructStorageGPUBuffer.md#mapasyncwrite)
+- [destroy](StructStorageGPUBuffer.md#destroy)
+- [resizeBuffer](StructStorageGPUBuffer.md#resizebuffer)
+- [readBuffer](StructStorageGPUBuffer.md#readbuffer)
+
+## Constructors
+
+### constructor
+
+• **new StructStorageGPUBuffer**\<`T`\>(`struct`, `count`, `usage?`): [`StructStorageGPUBuffer`](StructStorageGPUBuffer.md)\<`T`\>
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `struct` | () => `T` | `undefined` |
+| `count` | `number` | `undefined` |
+| `usage` | `number` | `0` |
+
+#### Returns
+
+[`StructStorageGPUBuffer`](StructStorageGPUBuffer.md)\<`T`\>
+
+#### Overrides
+
+GPUBufferBase.constructor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/StructStorageGPUBuffer.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/StructStorageGPUBuffer.ts#L11)
+
+## Properties
+
+### bufferType
+
+• **bufferType**: [`GPUBufferType`](../enums/GPUBufferType.md)
+
+#### Inherited from
+
+GPUBufferBase.bufferType
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L20)
+
+___
+
+### buffer
+
+• **buffer**: `GPUBuffer`
+
+#### Inherited from
+
+GPUBufferBase.buffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L21)
+
+___
+
+### memory
+
+• **memory**: `MemoryDO`
+
+#### Inherited from
+
+GPUBufferBase.memory
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L22)
+
+___
+
+### memoryNodes
+
+• **memoryNodes**: `Map`\<`string` \| `number`, `MemoryInfo`\>
+
+#### Inherited from
+
+GPUBufferBase.memoryNodes
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L23)
+
+___
+
+### seek
+
+• **seek**: `number`
+
+#### Inherited from
+
+GPUBufferBase.seek
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L24)
+
+___
+
+### outFloat32Array
+
+• **outFloat32Array**: `Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.outFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L25)
+
+___
+
+### byteSize
+
+• **byteSize**: `number`
+
+#### Inherited from
+
+GPUBufferBase.byteSize
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L26)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+#### Inherited from
+
+GPUBufferBase.usage
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L27)
+
+___
+
+### visibility
+
+• **visibility**: `number`
+
+#### Inherited from
+
+GPUBufferBase.visibility
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L28)
+
+## Methods
+
+### debug
+
+▸ **debug**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.debug
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L41)
+
+___
+
+### reset
+
+▸ **reset**(`clean?`, `size?`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `clean` | `boolean` | `false` |
+| `size` | `number` | `0` |
+| `data?` | `Float32Array` | `undefined` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.reset
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L44)
+
+___
+
+### setBoolean
+
+▸ **setBoolean**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setBoolean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L52)
+
+___
+
+### readBoole
+
+▸ **readBoole**(`name`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+GPUBufferBase.readBoole
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L62)
+
+___
+
+### setFloat
+
+▸ **setFloat**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L70)
+
+___
+
+### getFloat
+
+▸ **getFloat**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L79)
+
+___
+
+### setInt8
+
+▸ **setInt8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L87)
+
+___
+
+### getInt8
+
+▸ **getInt8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L96)
+
+___
+
+### setInt16
+
+▸ **setInt16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L104)
+
+___
+
+### getInt16
+
+▸ **getInt16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L113)
+
+___
+
+### setInt32
+
+▸ **setInt32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L121)
+
+___
+
+### getInt32
+
+▸ **getInt32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:130](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L130)
+
+___
+
+### setUint8
+
+▸ **setUint8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:138](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L138)
+
+___
+
+### getUint8
+
+▸ **getUint8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L147)
+
+___
+
+### setUint16
+
+▸ **setUint16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L156)
+
+___
+
+### getUint16
+
+▸ **getUint16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L165)
+
+___
+
+### setUint32
+
+▸ **setUint32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L173)
+
+___
+
+### getUint32
+
+▸ **getUint32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L182)
+
+___
+
+### setVector2
+
+▸ **setVector2**(`name`, `v2`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v2` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L190)
+
+___
+
+### getVector2
+
+▸ **getVector2**(`name`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+GPUBufferBase.getVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L199)
+
+___
+
+### setVector3
+
+▸ **setVector3**(`name`, `v3`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v3` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L207)
+
+___
+
+### getVector3
+
+▸ **getVector3**(`name`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+GPUBufferBase.getVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L216)
+
+___
+
+### setVector4
+
+▸ **setVector4**(`name`, `v4`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4` | `Vector4` \| [`Quaternion`](Quaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L224)
+
+___
+
+### getVector4
+
+▸ **getVector4**(`name`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+GPUBufferBase.getVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L233)
+
+___
+
+### setVector4Array
+
+▸ **setVector4Array**(`name`, `v4Array`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4Array` | [`Vector3`](Vector3.md)[] \| `Vector4`[] \| [`Quaternion`](Quaternion.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:241](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L241)
+
+___
+
+### setColor
+
+▸ **setColor**(`name`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `color` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:250](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L250)
+
+___
+
+### getColor
+
+▸ **getColor**(`name`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+GPUBufferBase.getColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:259](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L259)
+
+___
+
+### setColorArray
+
+▸ **setColorArray**(`name`, `colorArray`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `colorArray` | [`Color`](Color.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColorArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:267](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L267)
+
+___
+
+### setMatrix
+
+▸ **setMatrix**(`name`, `mat`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mat` | [`Matrix4`](Matrix4.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrix
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:276](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L276)
+
+___
+
+### setMatrixArray
+
+▸ **setMatrixArray**(`name`, `mats`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mats` | [`Matrix4`](Matrix4.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrixArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:285](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L285)
+
+___
+
+### setArray
+
+▸ **setArray**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `number`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:297](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L297)
+
+___
+
+### setFloat32Array
+
+▸ **setFloat32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Float32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:306](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L306)
+
+___
+
+### setInt32Array
+
+▸ **setInt32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Int32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L315)
+
+___
+
+### setUint32Array
+
+▸ **setUint32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Uint32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:325](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L325)
+
+___
+
+### setStruct
+
+▸ **setStruct**\<`T`\>(`c`, `index`, `data`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `index` | `number` |
+| `data` | `any` |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStruct
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:334](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L334)
+
+___
+
+### setStructArray
+
+▸ **setStructArray**\<`T`\>(`c`, `dataList`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `dataList` | `any`[] |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStructArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:390](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L390)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.clean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:403](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L403)
+
+___
+
+### apply
+
+▸ **apply**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.apply
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L408)
+
+___
+
+### mapAsyncWrite
+
+▸ **mapAsyncWrite**(`mapAsyncArray`, `len`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mapAsyncArray` | `Float32Array` |
+| `len` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.mapAsyncWrite
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:413](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L413)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.destroy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:454](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L454)
+
+___
+
+### resizeBuffer
+
+▸ **resizeBuffer**(`size`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `size` | `number` |
+| `data?` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.resizeBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:511](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L511)
+
+___
+
+### readBuffer
+
+▸ **readBuffer**(): `Float32Array`
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:558](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L558)
+
+▸ **readBuffer**(`promise`): `Float32Array`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``false`` |
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:559](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L559)
+
+▸ **readBuffer**(`promise`): `Promise`\<`Float32Array`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``true`` |
+
+#### Returns
+
+`Promise`\<`Float32Array`\>
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:560](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L560)
diff --git a/docs/api/classes/SubGeometry.md b/docs/api/classes/SubGeometry.md
new file mode 100644
index 00000000..ff3d3ca6
--- /dev/null
+++ b/docs/api/classes/SubGeometry.md
@@ -0,0 +1,31 @@
+# Class: SubGeometry
+
+geometry split more subGeometry descriptor
+
+### Constructors
+
+- [constructor](SubGeometry.md#constructor)
+
+### Properties
+
+- [lodLevels](SubGeometry.md#lodlevels)
+
+## Constructors
+
+### constructor
+
+• **new SubGeometry**(): [`SubGeometry`](SubGeometry.md)
+
+#### Returns
+
+[`SubGeometry`](SubGeometry.md)
+
+## Properties
+
+### lodLevels
+
+• **lodLevels**: [`LODDescriptor`](../types/LODDescriptor.md)[]
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L30)
diff --git a/docs/api/classes/TAAPost.md b/docs/api/classes/TAAPost.md
new file mode 100644
index 00000000..dc7d67a8
--- /dev/null
+++ b/docs/api/classes/TAAPost.md
@@ -0,0 +1,345 @@
+# Class: TAAPost
+
+Temporal AA
+```
+ //setting
+ let cfg = {@link Engine3D.setting.render.postProcessing.taa};
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+
+
+ Engine3D.startRender(renderJob);
+```
+
+## Hierarchy
+
+- `PostBase`
+
+ ↳ **`TAAPost`**
+
+### Constructors
+
+- [constructor](TAAPost.md#constructor)
+
+### Properties
+
+- [enable](TAAPost.md#enable)
+- [postRenderer](TAAPost.md#postrenderer)
+- [outTexture](TAAPost.md#outtexture)
+- [copyTexCompute](TAAPost.md#copytexcompute)
+- [sharpCompute](TAAPost.md#sharpcompute)
+- [preColorTex](TAAPost.md#precolortex)
+- [preViewMatrix](TAAPost.md#previewmatrix)
+- [rtFrame](TAAPost.md#rtframe)
+
+### Accessors
+
+- [jitterSeedCount](TAAPost.md#jitterseedcount)
+- [blendFactor](TAAPost.md#blendfactor)
+- [sharpFactor](TAAPost.md#sharpfactor)
+- [sharpPreBlurFactor](TAAPost.md#sharppreblurfactor)
+- [temporalJitterScale](TAAPost.md#temporaljitterscale)
+
+### Methods
+
+- [destroy](TAAPost.md#destroy)
+- [onResize](TAAPost.md#onresize)
+
+## Constructors
+
+### constructor
+
+• **new TAAPost**(): [`TAAPost`](TAAPost.md)
+
+#### Returns
+
+[`TAAPost`](TAAPost.md)
+
+#### Overrides
+
+PostBase.constructor
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L72)
+
+## Properties
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+PostBase.enable
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L20)
+
+___
+
+### postRenderer
+
+• **postRenderer**: `PostRenderer`
+
+#### Inherited from
+
+PostBase.postRenderer
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L21)
+
+___
+
+### outTexture
+
+• **outTexture**: `VirtualTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L43)
+
+___
+
+### copyTexCompute
+
+• **copyTexCompute**: `ComputeShader`
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L52)
+
+___
+
+### sharpCompute
+
+• **sharpCompute**: `ComputeShader`
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L53)
+
+___
+
+### preColorTex
+
+• **preColorTex**: `VirtualTexture`
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L63)
+
+___
+
+### preViewMatrix
+
+• **preViewMatrix**: [`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L69)
+
+___
+
+### rtFrame
+
+• **rtFrame**: [`RTFrame`](RTFrame.md)
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L70)
+
+## Accessors
+
+### jitterSeedCount
+
+• `get` **jitterSeedCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L92)
+
+• `set` **jitterSeedCount**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L97)
+
+___
+
+### blendFactor
+
+• `get` **blendFactor**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L104)
+
+• `set` **blendFactor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:109](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L109)
+
+___
+
+### sharpFactor
+
+• `get` **sharpFactor**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L115)
+
+• `set` **sharpFactor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L120)
+
+___
+
+### sharpPreBlurFactor
+
+• `get` **sharpPreBlurFactor**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:126](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L126)
+
+• `set` **sharpPreBlurFactor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L131)
+
+___
+
+### temporalJitterScale
+
+• `get` **temporalJitterScale**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:137](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L137)
+
+• `set` **temporalJitterScale**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:142](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L142)
+
+## Methods
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PostBase.destroy
+
+#### Defined in
+
+[src/gfx/renderJob/post/PostBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/PostBase.ts#L87)
+
+___
+
+### onResize
+
+▸ **onResize**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+PostBase.onResize
+
+#### Defined in
+
+[src/gfx/renderJob/post/TAAPost.ts:255](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/post/TAAPost.ts#L255)
diff --git a/docs/api/classes/TextFieldLayout.md b/docs/api/classes/TextFieldLayout.md
new file mode 100644
index 00000000..d46293ba
--- /dev/null
+++ b/docs/api/classes/TextFieldLayout.md
@@ -0,0 +1,39 @@
+# Class: TextFieldLayout
+
+### Constructors
+
+- [constructor](TextFieldLayout.md#constructor)
+
+### Methods
+
+- [layout](TextFieldLayout.md#layout)
+
+## Constructors
+
+### constructor
+
+• **new TextFieldLayout**(): [`TextFieldLayout`](TextFieldLayout.md)
+
+#### Returns
+
+[`TextFieldLayout`](TextFieldLayout.md)
+
+## Methods
+
+### layout
+
+▸ **layout**(`target`): [`TextFieldLine`](TextFieldLine.md)[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `target` | [`UITextField`](UITextField.md) |
+
+#### Returns
+
+[`TextFieldLine`](TextFieldLine.md)[]
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L71)
diff --git a/docs/api/classes/TextFieldLine.md b/docs/api/classes/TextFieldLine.md
new file mode 100644
index 00000000..85e4b1ff
--- /dev/null
+++ b/docs/api/classes/TextFieldLine.md
@@ -0,0 +1,62 @@
+# Class: TextFieldLine
+
+### Constructors
+
+- [constructor](TextFieldLine.md#constructor)
+
+### Properties
+
+- [charList](TextFieldLine.md#charlist)
+- [quadList](TextFieldLine.md#quadlist)
+- [width](TextFieldLine.md#width)
+- [index](TextFieldLine.md#index)
+
+## Constructors
+
+### constructor
+
+• **new TextFieldLine**(): [`TextFieldLine`](TextFieldLine.md)
+
+#### Returns
+
+[`TextFieldLine`](TextFieldLine.md)
+
+## Properties
+
+### charList
+
+• **charList**: `string`[] = `[]`
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L63)
+
+___
+
+### quadList
+
+• **quadList**: [`GUIQuad`](GUIQuad.md)[] = `[]`
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L64)
+
+___
+
+### width
+
+• **width**: `number` = `0`
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L65)
+
+___
+
+### index
+
+• **index**: `number` = `0`
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:66](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L66)
diff --git a/docs/api/classes/Texture.md b/docs/api/classes/Texture.md
new file mode 100644
index 00000000..fb57deee
--- /dev/null
+++ b/docs/api/classes/Texture.md
@@ -0,0 +1,954 @@
+# Class: Texture
+
+Texture
+
+## Hierarchy
+
+- **`Texture`**
+
+ ↳ [`BitmapTexture2D`](BitmapTexture2D.md)
+
+ ↳ [`HDRTexture`](HDRTexture.md)
+
+ ↳ [`Uint8ArrayTexture`](Uint8ArrayTexture.md)
+
+## Implements
+
+- `GPUSamplerDescriptor`
+
+### Constructors
+
+- [constructor](Texture.md#constructor)
+
+### Properties
+
+- [name](Texture.md#name)
+- [url](Texture.md#url)
+- [pid](Texture.md#pid)
+- [view](Texture.md#view)
+- [gpuSampler](Texture.md#gpusampler)
+- [gpuSampler\_comparison](Texture.md#gpusampler_comparison)
+- [format](Texture.md#format)
+- [usage](Texture.md#usage)
+- [width](Texture.md#width)
+- [height](Texture.md#height)
+- [depthOrArrayLayers](Texture.md#depthorarraylayers)
+- [numberLayer](Texture.md#numberlayer)
+- [viewDescriptor](Texture.md#viewdescriptor)
+- [textureDescriptor](Texture.md#texturedescriptor)
+- [visibility](Texture.md#visibility)
+- [textureBindingLayout](Texture.md#texturebindinglayout)
+- [samplerBindingLayout](Texture.md#samplerbindinglayout)
+- [sampler\_comparisonBindingLayout](Texture.md#sampler_comparisonbindinglayout)
+- [flipY](Texture.md#flipy)
+- [isVideoTexture](Texture.md#isvideotexture)
+- [isHDRTexture](Texture.md#ishdrtexture)
+- [mipmapCount](Texture.md#mipmapcount)
+
+### Accessors
+
+- [useMipmap](Texture.md#usemipmap)
+- [sourceImageData](Texture.md#sourceimagedata)
+- [addressModeU](Texture.md#addressmodeu)
+- [addressModeV](Texture.md#addressmodev)
+- [addressModeW](Texture.md#addressmodew)
+- [magFilter](Texture.md#magfilter)
+- [minFilter](Texture.md#minfilter)
+- [mipmapFilter](Texture.md#mipmapfilter)
+- [lodMinClamp](Texture.md#lodminclamp)
+- [lodMaxClamp](Texture.md#lodmaxclamp)
+- [compare](Texture.md#compare)
+- [maxAnisotropy](Texture.md#maxanisotropy)
+
+### Methods
+
+- [init](Texture.md#init)
+- [getMipmapCount](Texture.md#getmipmapcount)
+- [getGPUTexture](Texture.md#getgputexture)
+- [getGPUView](Texture.md#getgpuview)
+- [bindStateChange](Texture.md#bindstatechange)
+- [unBindStateChange](Texture.md#unbindstatechange)
+- [destroy](Texture.md#destroy)
+- [delayDestroyTexture](Texture.md#delaydestroytexture)
+- [destroyTexture](Texture.md#destroytexture)
+
+## Constructors
+
+### constructor
+
+• **new Texture**(`width?`, `height?`, `numberLayer?`): [`Texture`](Texture.md)
+
+Create a texture2D
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `width` | `number` | `32` | size of texture width |
+| `height` | `number` | `32` | height of texture width |
+| `numberLayer` | `number` | `1` | number layer of texture |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:202](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L202)
+
+## Properties
+
+### name
+
+• **name**: `string`
+
+name of texture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L15)
+
+___
+
+### url
+
+• **url**: `string`
+
+source url
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L20)
+
+___
+
+### pid
+
+• **pid**: `number`
+
+Return index in texture array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L30)
+
+___
+
+### view
+
+• **view**: `GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L35)
+
+___
+
+### gpuSampler
+
+• **gpuSampler**: `GPUSampler`
+
+GPUSampler
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L40)
+
+___
+
+### gpuSampler\_comparison
+
+• **gpuSampler\_comparison**: `GPUSampler`
+
+GPUSampler for comparison
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L45)
+
+___
+
+### format
+
+• **format**: `GPUTextureFormat`
+
+GPUTextureFormat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L50)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+GPUTextureUsage
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L55)
+
+___
+
+### width
+
+• **width**: `number` = `4`
+
+texture width
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:60](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L60)
+
+___
+
+### height
+
+• **height**: `number` = `4`
+
+texture height
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L65)
+
+___
+
+### depthOrArrayLayers
+
+• **depthOrArrayLayers**: `number` = `1`
+
+depth or layers, default value is 1
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L70)
+
+___
+
+### numberLayer
+
+• **numberLayer**: `number` = `1`
+
+depth or layers, default value is 1
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L75)
+
+___
+
+### viewDescriptor
+
+• **viewDescriptor**: `GPUTextureViewDescriptor`
+
+GPUTextureViewDescriptor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L80)
+
+___
+
+### textureDescriptor
+
+• **textureDescriptor**: `GPUTextureDescriptor`
+
+GPUTextureDescriptor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L85)
+
+___
+
+### visibility
+
+• **visibility**: `number`
+
+GPUShaderStage
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L90)
+
+___
+
+### textureBindingLayout
+
+• **textureBindingLayout**: `GPUTextureBindingLayout`
+
+GPUTextureBindingLayout, contains viewDimension and multisampled
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L96)
+
+___
+
+### samplerBindingLayout
+
+• **samplerBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L104)
+
+___
+
+### sampler\_comparisonBindingLayout
+
+• **sampler\_comparisonBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L111)
+
+___
+
+### flipY
+
+• **flipY**: `boolean`
+
+whether to flip the image on the y-axis
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L118)
+
+___
+
+### isVideoTexture
+
+• `Optional` **isVideoTexture**: `boolean`
+
+whether is video texture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L123)
+
+___
+
+### isHDRTexture
+
+• `Optional` **isHDRTexture**: `boolean`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L124)
+
+___
+
+### mipmapCount
+
+• **mipmapCount**: `number` = `1`
+
+mipmap Count, default value is 1
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L191)
+
+## Accessors
+
+### useMipmap
+
+• `get` **useMipmap**(): `boolean`
+
+enable/disable mipmap
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L315)
+
+• `set` **useMipmap**(`value`): `void`
+
+get mipmap
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:322](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L322)
+
+___
+
+### sourceImageData
+
+• `get` **sourceImageData**(): `HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Returns
+
+`HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:353](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L353)
+
+___
+
+### addressModeU
+
+• `get` **addressModeU**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Implementation of
+
+GPUSamplerDescriptor.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L438)
+
+• `set` **addressModeU**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+GPUSamplerDescriptor.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:442](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L442)
+
+___
+
+### addressModeV
+
+• `get` **addressModeV**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Implementation of
+
+GPUSamplerDescriptor.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:449](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L449)
+
+• `set` **addressModeV**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+GPUSamplerDescriptor.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:453](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L453)
+
+___
+
+### addressModeW
+
+• `get` **addressModeW**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Implementation of
+
+GPUSamplerDescriptor.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:460](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L460)
+
+• `set` **addressModeW**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+GPUSamplerDescriptor.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:464](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L464)
+
+___
+
+### magFilter
+
+• `get` **magFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Implementation of
+
+GPUSamplerDescriptor.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:471](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L471)
+
+• `set` **magFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+GPUSamplerDescriptor.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:475](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L475)
+
+___
+
+### minFilter
+
+• `get` **minFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Implementation of
+
+GPUSamplerDescriptor.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:482](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L482)
+
+• `set` **minFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+GPUSamplerDescriptor.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L486)
+
+___
+
+### mipmapFilter
+
+• `get` **mipmapFilter**(): `GPUMipmapFilterMode`
+
+#### Returns
+
+`GPUMipmapFilterMode`
+
+#### Implementation of
+
+GPUSamplerDescriptor.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:493](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L493)
+
+• `set` **mipmapFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUMipmapFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+GPUSamplerDescriptor.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:497](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L497)
+
+___
+
+### lodMinClamp
+
+• `get` **lodMinClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Implementation of
+
+GPUSamplerDescriptor.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:504](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L504)
+
+• `set` **lodMinClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+GPUSamplerDescriptor.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:508](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L508)
+
+___
+
+### lodMaxClamp
+
+• `get` **lodMaxClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Implementation of
+
+GPUSamplerDescriptor.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:515](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L515)
+
+• `set` **lodMaxClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+GPUSamplerDescriptor.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L519)
+
+___
+
+### compare
+
+• `get` **compare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Implementation of
+
+GPUSamplerDescriptor.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:526](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L526)
+
+• `set` **compare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+GPUSamplerDescriptor.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:530](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L530)
+
+___
+
+### maxAnisotropy
+
+• `get` **maxAnisotropy**(): `number`
+
+#### Returns
+
+`number`
+
+#### Implementation of
+
+GPUSamplerDescriptor.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:537](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L537)
+
+• `set` **maxAnisotropy**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+GPUSamplerDescriptor.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:541](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L541)
+
+## Methods
+
+### init
+
+▸ **init**(): `this`
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L215)
+
+___
+
+### getMipmapCount
+
+▸ **getMipmapCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:357](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L357)
+
+___
+
+### getGPUTexture
+
+▸ **getGPUTexture**(): `GPUTexture`
+
+create or get GPUTexture
+
+#### Returns
+
+`GPUTexture`
+
+GPUTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:384](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L384)
+
+___
+
+### getGPUView
+
+▸ **getGPUView**(`index?`): `GPUTextureView` \| `GPUExternalTexture`
+
+create or get GPUTextureView
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `index` | `number` | `0` |
+
+#### Returns
+
+`GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView | GPUExternalTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:395](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L395)
+
+___
+
+### bindStateChange
+
+▸ **bindStateChange**(`fun`, `ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `fun` | `Function` |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L408)
+
+___
+
+### unBindStateChange
+
+▸ **unBindStateChange**(`ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L412)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release the texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:426](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L426)
+
+___
+
+### delayDestroyTexture
+
+▸ **delayDestroyTexture**(`tex`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tex` | `GPUTexture` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:549](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L549)
+
+___
+
+### destroyTexture
+
+▸ **destroyTexture**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:555](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L555)
diff --git a/docs/api/classes/TextureCubeFaceData.md b/docs/api/classes/TextureCubeFaceData.md
new file mode 100644
index 00000000..da81606f
--- /dev/null
+++ b/docs/api/classes/TextureCubeFaceData.md
@@ -0,0 +1,101 @@
+# Class: TextureCubeFaceData
+
+### Constructors
+
+- [constructor](TextureCubeFaceData.md#constructor)
+
+### Properties
+
+- [faceTextureRef](TextureCubeFaceData.md#facetextureref)
+
+### Methods
+
+- [uploadTexture](TextureCubeFaceData.md#uploadtexture)
+- [getGpuSource](TextureCubeFaceData.md#getgpusource)
+
+## Constructors
+
+### constructor
+
+• **new TextureCubeFaceData**(`texture`): [`TextureCubeFaceData`](TextureCubeFaceData.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+[`TextureCubeFaceData`](TextureCubeFaceData.md)
+
+#### Defined in
+
+[src/textures/TextureCubeFaceData.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/textures/TextureCubeFaceData.ts#L9)
+
+## Properties
+
+### faceTextureRef
+
+• **faceTextureRef**: `Object`
+
+#### Index signature
+
+▪ [key: `string`]: \{ `t`: `GPUTexture` ; `v`: `GPUTextureView` }
+
+#### Defined in
+
+[src/textures/TextureCubeFaceData.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/textures/TextureCubeFaceData.ts#L6)
+
+## Methods
+
+### uploadTexture
+
+▸ **uploadTexture**(`mip`, `texture`): `this`
+
+fill this texture by a texture2D, which is a 360 panorama image
+assign mipmap level
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `mip` | `number` | mipmap level |
+| `texture` | [`Texture`](Texture.md) | a panorama image |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/textures/TextureCubeFaceData.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/textures/TextureCubeFaceData.ts#L22)
+
+___
+
+### getGpuSource
+
+▸ **getGpuSource**(`mip`): `Object`
+
+get GPU texture raw data
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `mip` | `number` | mipmap level |
+
+#### Returns
+
+`Object`
+
+GPU texture raw data, including t: GPUTexture and v: GPUTextureView
+
+| Name | Type |
+| :------ | :------ |
+| `t` | `GPUTexture` |
+| `v` | `GPUTextureView` |
+
+#### Defined in
+
+[src/textures/TextureCubeFaceData.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/textures/TextureCubeFaceData.ts#L46)
diff --git a/docs/api/classes/TextureScaleCompute.md b/docs/api/classes/TextureScaleCompute.md
new file mode 100644
index 00000000..51db8711
--- /dev/null
+++ b/docs/api/classes/TextureScaleCompute.md
@@ -0,0 +1,55 @@
+# Class: TextureScaleCompute
+
+### Constructors
+
+- [constructor](TextureScaleCompute.md#constructor)
+
+### Properties
+
+- [computeShader](TextureScaleCompute.md#computeshader)
+
+### Methods
+
+- [setInputes](TextureScaleCompute.md#setinputes)
+
+## Constructors
+
+### constructor
+
+• **new TextureScaleCompute**(): [`TextureScaleCompute`](TextureScaleCompute.md)
+
+#### Returns
+
+[`TextureScaleCompute`](TextureScaleCompute.md)
+
+## Properties
+
+### computeShader
+
+• **computeShader**: `ComputeShader`
+
+#### Defined in
+
+[src/gfx/generate/convert/TextureScaleCompute.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/gfx/generate/convert/TextureScaleCompute.ts#L6)
+
+## Methods
+
+### setInputes
+
+▸ **setInputes**(`colorMap`, `inputs`, `outputs`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `colorMap` | [`Texture`](Texture.md) |
+| `inputs` | [`Texture`](Texture.md)[] |
+| `outputs` | [`Texture`](Texture.md)[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/generate/convert/TextureScaleCompute.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/gfx/generate/convert/TextureScaleCompute.ts#L8)
diff --git a/docs/api/classes/TileSet.md b/docs/api/classes/TileSet.md
new file mode 100644
index 00000000..1cbc178a
--- /dev/null
+++ b/docs/api/classes/TileSet.md
@@ -0,0 +1,98 @@
+# Class: TileSet
+
+### Constructors
+
+- [constructor](TileSet.md#constructor)
+
+### Properties
+
+- [asset](TileSet.md#asset)
+- [extras](TileSet.md#extras)
+- [geometricError](TileSet.md#geometricerror)
+- [properties](TileSet.md#properties)
+- [refine](TileSet.md#refine)
+- [root](TileSet.md#root)
+
+## Constructors
+
+### constructor
+
+• **new TileSet**(): [`TileSet`](TileSet.md)
+
+#### Returns
+
+[`TileSet`](TileSet.md)
+
+## Properties
+
+### asset
+
+• **asset**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `generatetool` | `string` |
+| `version` | `string` |
+| `gltfUpAxis?` | `any` |
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L2)
+
+___
+
+### extras
+
+• **extras**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `scenetree` | `string` |
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L3)
+
+___
+
+### geometricError
+
+• **geometricError**: `number`
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L4)
+
+___
+
+### properties
+
+• **properties**: `any`
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L5)
+
+___
+
+### refine
+
+• **refine**: `any`
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L6)
+
+___
+
+### root
+
+• **root**: [`TileSetRoot`](TileSetRoot.md)
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L7)
diff --git a/docs/api/classes/TileSetChild.md b/docs/api/classes/TileSetChild.md
new file mode 100644
index 00000000..4e168ea1
--- /dev/null
+++ b/docs/api/classes/TileSetChild.md
@@ -0,0 +1,85 @@
+# Class: TileSetChild
+
+### Constructors
+
+- [constructor](TileSetChild.md#constructor)
+
+### Properties
+
+- [boundingVolume](TileSetChild.md#boundingvolume)
+- [geometricError](TileSetChild.md#geometricerror)
+- [refine](TileSetChild.md#refine)
+- [content](TileSetChild.md#content)
+- [contents](TileSetChild.md#contents)
+
+## Constructors
+
+### constructor
+
+• **new TileSetChild**(): [`TileSetChild`](TileSetChild.md)
+
+#### Returns
+
+[`TileSetChild`](TileSetChild.md)
+
+## Properties
+
+### boundingVolume
+
+• **boundingVolume**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `box` | `number`[] |
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L18)
+
+___
+
+### geometricError
+
+• **geometricError**: `number`
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L19)
+
+___
+
+### refine
+
+• **refine**: `string`
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L20)
+
+___
+
+### content
+
+• **content**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `uri` | `string` |
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L21)
+
+___
+
+### contents
+
+• **contents**: [`TileSetChildContent`](TileSetChildContent.md)[]
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L22)
diff --git a/docs/api/classes/TileSetChildContent.md b/docs/api/classes/TileSetChildContent.md
new file mode 100644
index 00000000..d00d5981
--- /dev/null
+++ b/docs/api/classes/TileSetChildContent.md
@@ -0,0 +1,51 @@
+# Class: TileSetChildContent
+
+### Constructors
+
+- [constructor](TileSetChildContent.md#constructor)
+
+### Properties
+
+- [uri](TileSetChildContent.md#uri)
+- [group](TileSetChildContent.md#group)
+- [metadata](TileSetChildContent.md#metadata)
+
+## Constructors
+
+### constructor
+
+• **new TileSetChildContent**(): [`TileSetChildContent`](TileSetChildContent.md)
+
+#### Returns
+
+[`TileSetChildContent`](TileSetChildContent.md)
+
+## Properties
+
+### uri
+
+• **uri**: `string`
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L26)
+
+___
+
+### group
+
+• **group**: `number`
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L27)
+
+___
+
+### metadata
+
+• **metadata**: [`TileSetChildContentMetaData`](TileSetChildContentMetaData.md)
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L28)
diff --git a/docs/api/classes/TileSetChildContentMetaData.md b/docs/api/classes/TileSetChildContentMetaData.md
new file mode 100644
index 00000000..17250367
--- /dev/null
+++ b/docs/api/classes/TileSetChildContentMetaData.md
@@ -0,0 +1,47 @@
+# Class: TileSetChildContentMetaData
+
+### Constructors
+
+- [constructor](TileSetChildContentMetaData.md#constructor)
+
+### Properties
+
+- [class](TileSetChildContentMetaData.md#class)
+- [properties](TileSetChildContentMetaData.md#properties)
+
+## Constructors
+
+### constructor
+
+• **new TileSetChildContentMetaData**(): [`TileSetChildContentMetaData`](TileSetChildContentMetaData.md)
+
+#### Returns
+
+[`TileSetChildContentMetaData`](TileSetChildContentMetaData.md)
+
+## Properties
+
+### class
+
+• **class**: `string`
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L32)
+
+___
+
+### properties
+
+• **properties**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `vertices` | `number` |
+| `materials` | `number` |
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:33](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L33)
diff --git a/docs/api/classes/TileSetRoot.md b/docs/api/classes/TileSetRoot.md
new file mode 100644
index 00000000..67c6edc5
--- /dev/null
+++ b/docs/api/classes/TileSetRoot.md
@@ -0,0 +1,68 @@
+# Class: TileSetRoot
+
+### Constructors
+
+- [constructor](TileSetRoot.md#constructor)
+
+### Properties
+
+- [boundingVolume](TileSetRoot.md#boundingvolume)
+- [children](TileSetRoot.md#children)
+- [geometricError](TileSetRoot.md#geometricerror)
+- [transform](TileSetRoot.md#transform)
+
+## Constructors
+
+### constructor
+
+• **new TileSetRoot**(): [`TileSetRoot`](TileSetRoot.md)
+
+#### Returns
+
+[`TileSetRoot`](TileSetRoot.md)
+
+## Properties
+
+### boundingVolume
+
+• **boundingVolume**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `box` | `number`[] |
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L11)
+
+___
+
+### children
+
+• **children**: [`TileSetChild`](TileSetChild.md)[]
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L12)
+
+___
+
+### geometricError
+
+• **geometricError**: `number`
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L13)
+
+___
+
+### transform
+
+• **transform**: `number`[]
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TileSet.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TileSet.ts#L14)
diff --git a/docs/api/classes/TilesRenderer.md b/docs/api/classes/TilesRenderer.md
new file mode 100644
index 00000000..5db2e573
--- /dev/null
+++ b/docs/api/classes/TilesRenderer.md
@@ -0,0 +1,58 @@
+# Class: TilesRenderer
+
+### Constructors
+
+- [constructor](TilesRenderer.md#constructor)
+
+### Properties
+
+- [group](TilesRenderer.md#group)
+
+### Methods
+
+- [loadTileSet](TilesRenderer.md#loadtileset)
+
+## Constructors
+
+### constructor
+
+• **new TilesRenderer**(): [`TilesRenderer`](TilesRenderer.md)
+
+#### Returns
+
+[`TilesRenderer`](TilesRenderer.md)
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TilesRenderer.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TilesRenderer.ts#L15)
+
+## Properties
+
+### group
+
+• `Readonly` **group**: [`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TilesRenderer.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TilesRenderer.ts#L10)
+
+## Methods
+
+### loadTileSet
+
+▸ **loadTileSet**(`rootPath`, `file`): `Promise`\<`void`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rootPath` | `string` |
+| `file` | `string` |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/loader/parser/tileRenderer/TilesRenderer.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/tileRenderer/TilesRenderer.ts#L19)
diff --git a/docs/api/classes/Time.md b/docs/api/classes/Time.md
new file mode 100644
index 00000000..4f3cccb8
--- /dev/null
+++ b/docs/api/classes/Time.md
@@ -0,0 +1,59 @@
+# Class: Time
+
+Tool of time
+
+### Constructors
+
+- [constructor](Time.md#constructor)
+
+### Properties
+
+- [time](Time.md#time)
+- [frame](Time.md#frame)
+- [delta](Time.md#delta)
+
+## Constructors
+
+### constructor
+
+• **new Time**(): [`Time`](Time.md)
+
+#### Returns
+
+[`Time`](Time.md)
+
+## Properties
+
+### time
+
+▪ `Static` **time**: `number` = `0`
+
+The time the engine has been running
+
+#### Defined in
+
+[src/util/Time.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/util/Time.ts#L9)
+
+___
+
+### frame
+
+▪ `Static` **frame**: `number` = `0`
+
+the frame count engine is running
+
+#### Defined in
+
+[src/util/Time.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/util/Time.ts#L13)
+
+___
+
+### delta
+
+▪ `Static` **delta**: `number` = `0`
+
+Time from previous frame to present
+
+#### Defined in
+
+[src/util/Time.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/util/Time.ts#L17)
diff --git a/docs/api/classes/TorusGeometry.md b/docs/api/classes/TorusGeometry.md
new file mode 100644
index 00000000..4ca74676
--- /dev/null
+++ b/docs/api/classes/TorusGeometry.md
@@ -0,0 +1,669 @@
+# Class: TorusGeometry
+
+Torus Geometry
+
+## Hierarchy
+
+- [`GeometryBase`](GeometryBase.md)
+
+ ↳ **`TorusGeometry`**
+
+### Constructors
+
+- [constructor](TorusGeometry.md#constructor)
+
+### Properties
+
+- [instanceID](TorusGeometry.md#instanceid)
+- [name](TorusGeometry.md#name)
+- [subGeometries](TorusGeometry.md#subgeometries)
+- [morphTargetsRelative](TorusGeometry.md#morphtargetsrelative)
+- [morphTargetDictionary](TorusGeometry.md#morphtargetdictionary)
+- [skinNames](TorusGeometry.md#skinnames)
+- [bindPose](TorusGeometry.md#bindpose)
+- [blendShapeData](TorusGeometry.md#blendshapedata)
+- [vertexDim](TorusGeometry.md#vertexdim)
+- [vertexCount](TorusGeometry.md#vertexcount)
+- [radius](TorusGeometry.md#radius)
+- [tube](TorusGeometry.md#tube)
+- [radialSegments](TorusGeometry.md#radialsegments)
+- [tubularSegments](TorusGeometry.md#tubularsegments)
+
+### Accessors
+
+- [indicesBuffer](TorusGeometry.md#indicesbuffer)
+- [vertexBuffer](TorusGeometry.md#vertexbuffer)
+- [vertexAttributes](TorusGeometry.md#vertexattributes)
+- [vertexAttributeMap](TorusGeometry.md#vertexattributemap)
+- [geometryType](TorusGeometry.md#geometrytype)
+- [bounds](TorusGeometry.md#bounds)
+
+### Methods
+
+- [addSubGeometry](TorusGeometry.md#addsubgeometry)
+- [generate](TorusGeometry.md#generate)
+- [setIndices](TorusGeometry.md#setindices)
+- [setAttribute](TorusGeometry.md#setattribute)
+- [getAttribute](TorusGeometry.md#getattribute)
+- [hasAttribute](TorusGeometry.md#hasattribute)
+- [genWireframe](TorusGeometry.md#genwireframe)
+- [compute](TorusGeometry.md#compute)
+- [computeNormals](TorusGeometry.md#computenormals)
+- [isPrimitive](TorusGeometry.md#isprimitive)
+- [destroy](TorusGeometry.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new TorusGeometry**(`radius?`, `tube?`, `radialSegments?`, `tubularSegments?`): [`TorusGeometry`](TorusGeometry.md)
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `radius` | `number` | `0.4` | {number} Radius of torus, default value is 0.4 |
+| `tube` | `number` | `0.1` | {number} Pipe radius, default value is 0.1. |
+| `radialSegments` | `number` | `32` | {number}Number of torus segments, default value is 32. |
+| `tubularSegments` | `number` | `32` | {number} Number of pipeline segments, defualt value is 32. |
+
+#### Returns
+
+[`TorusGeometry`](TorusGeometry.md)
+
+#### Overrides
+
+[GeometryBase](GeometryBase.md).[constructor](GeometryBase.md#constructor)
+
+#### Defined in
+
+[src/shape/TorusGeometry.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/shape/TorusGeometry.ts#L39)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[instanceID](GeometryBase.md#instanceid)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L39)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[name](GeometryBase.md#name)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L40)
+
+___
+
+### subGeometries
+
+• **subGeometries**: [`SubGeometry`](SubGeometry.md)[] = `[]`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[subGeometries](GeometryBase.md#subgeometries)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L41)
+
+___
+
+### morphTargetsRelative
+
+• **morphTargetsRelative**: `boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetsRelative](GeometryBase.md#morphtargetsrelative)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L42)
+
+___
+
+### morphTargetDictionary
+
+• **morphTargetDictionary**: `Object`
+
+#### Index signature
+
+▪ [blenderName: `string`]: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetDictionary](GeometryBase.md#morphtargetdictionary)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L43)
+
+___
+
+### skinNames
+
+• **skinNames**: `string`[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[skinNames](GeometryBase.md#skinnames)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L44)
+
+___
+
+### bindPose
+
+• **bindPose**: [`Matrix4`](Matrix4.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[bindPose](GeometryBase.md#bindpose)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L45)
+
+___
+
+### blendShapeData
+
+• **blendShapeData**: [`BlendShapeData`](BlendShapeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[blendShapeData](GeometryBase.md#blendshapedata)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L46)
+
+___
+
+### vertexDim
+
+• **vertexDim**: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexDim](GeometryBase.md#vertexdim)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L47)
+
+___
+
+### vertexCount
+
+• **vertexCount**: `number` = `0`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexCount](GeometryBase.md#vertexcount)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L48)
+
+___
+
+### radius
+
+• **radius**: `number`
+
+Radius of torus
+
+#### Defined in
+
+[src/shape/TorusGeometry.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/shape/TorusGeometry.ts#L14)
+
+___
+
+### tube
+
+• **tube**: `number`
+
+Pipe radius
+
+#### Defined in
+
+[src/shape/TorusGeometry.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/shape/TorusGeometry.ts#L19)
+
+___
+
+### radialSegments
+
+• **radialSegments**: `number`
+
+Number of torus segments.
+
+#### Defined in
+
+[src/shape/TorusGeometry.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/shape/TorusGeometry.ts#L24)
+
+___
+
+### tubularSegments
+
+• **tubularSegments**: `number`
+
+Number of pipeline segments.
+
+#### Defined in
+
+[src/shape/TorusGeometry.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/shape/TorusGeometry.ts#L29)
+
+## Accessors
+
+### indicesBuffer
+
+• `get` **indicesBuffer**(): [`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Returns
+
+[`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Inherited from
+
+GeometryBase.indicesBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L69)
+
+___
+
+### vertexBuffer
+
+• `get` **vertexBuffer**(): [`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Returns
+
+[`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Inherited from
+
+GeometryBase.vertexBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L73)
+
+___
+
+### vertexAttributes
+
+• `get` **vertexAttributes**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+GeometryBase.vertexAttributes
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L77)
+
+___
+
+### vertexAttributeMap
+
+• `get` **vertexAttributeMap**(): `Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Returns
+
+`Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Inherited from
+
+GeometryBase.vertexAttributeMap
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L81)
+
+___
+
+### geometryType
+
+• `get` **geometryType**(): [`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Returns
+
+[`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L85)
+
+• `set` **geometryType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryVertexType`](../enums/GeometryVertexType.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L88)
+
+___
+
+### bounds
+
+• `get` **bounds**(): `BoundingBox`
+
+#### Returns
+
+`BoundingBox`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L92)
+
+• `set` **bounds**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BoundingBox` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L135)
+
+## Methods
+
+### addSubGeometry
+
+▸ **addSubGeometry**(`...lodLevels`): [`SubGeometry`](SubGeometry.md)
+
+add subGeometry from lod level
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `...lodLevels` | [`LODDescriptor`](../types/LODDescriptor.md)[] |
+
+#### Returns
+
+[`SubGeometry`](SubGeometry.md)
+
+**`See`**
+
+LODDescriptor
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[addSubGeometry](GeometryBase.md#addsubgeometry)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L144)
+
+___
+
+### generate
+
+▸ **generate**(`shaderReflection`): `void`
+
+create geometry by shaderReflection
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `shaderReflection` | `ShaderReflection` | ShaderReflection |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[generate](GeometryBase.md#generate)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L155)
+
+___
+
+### setIndices
+
+▸ **setIndices**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setIndices](GeometryBase.md#setindices)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L165)
+
+___
+
+### setAttribute
+
+▸ **setAttribute**(`attribute`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setAttribute](GeometryBase.md#setattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L177)
+
+___
+
+### getAttribute
+
+▸ **getAttribute**(`attribute`): [`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+[`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[getAttribute](GeometryBase.md#getattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L190)
+
+___
+
+### hasAttribute
+
+▸ **hasAttribute**(`attribute`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[hasAttribute](GeometryBase.md#hasattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L194)
+
+___
+
+### genWireframe
+
+▸ **genWireframe**(): [`Vector3`](Vector3.md)[]
+
+#### Returns
+
+[`Vector3`](Vector3.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[genWireframe](GeometryBase.md#genwireframe)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L198)
+
+___
+
+### compute
+
+▸ **compute**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[compute](GeometryBase.md#compute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L251)
+
+___
+
+### computeNormals
+
+▸ **computeNormals**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[computeNormals](GeometryBase.md#computenormals)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:270](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L270)
+
+___
+
+### isPrimitive
+
+▸ **isPrimitive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[isPrimitive](GeometryBase.md#isprimitive)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L312)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[destroy](GeometryBase.md#destroy)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:316](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L316)
diff --git a/docs/api/classes/TrailGeometry.md b/docs/api/classes/TrailGeometry.md
new file mode 100644
index 00000000..bb6b23bb
--- /dev/null
+++ b/docs/api/classes/TrailGeometry.md
@@ -0,0 +1,627 @@
+# Class: TrailGeometry
+
+Plane geometry
+
+## Hierarchy
+
+- [`GeometryBase`](GeometryBase.md)
+
+ ↳ **`TrailGeometry`**
+
+### Constructors
+
+- [constructor](TrailGeometry.md#constructor)
+
+### Properties
+
+- [instanceID](TrailGeometry.md#instanceid)
+- [name](TrailGeometry.md#name)
+- [subGeometries](TrailGeometry.md#subgeometries)
+- [morphTargetsRelative](TrailGeometry.md#morphtargetsrelative)
+- [morphTargetDictionary](TrailGeometry.md#morphtargetdictionary)
+- [skinNames](TrailGeometry.md#skinnames)
+- [bindPose](TrailGeometry.md#bindpose)
+- [blendShapeData](TrailGeometry.md#blendshapedata)
+- [vertexDim](TrailGeometry.md#vertexdim)
+- [vertexCount](TrailGeometry.md#vertexcount)
+- [segment](TrailGeometry.md#segment)
+
+### Accessors
+
+- [indicesBuffer](TrailGeometry.md#indicesbuffer)
+- [vertexBuffer](TrailGeometry.md#vertexbuffer)
+- [vertexAttributes](TrailGeometry.md#vertexattributes)
+- [vertexAttributeMap](TrailGeometry.md#vertexattributemap)
+- [geometryType](TrailGeometry.md#geometrytype)
+- [bounds](TrailGeometry.md#bounds)
+
+### Methods
+
+- [addSubGeometry](TrailGeometry.md#addsubgeometry)
+- [generate](TrailGeometry.md#generate)
+- [setIndices](TrailGeometry.md#setindices)
+- [setAttribute](TrailGeometry.md#setattribute)
+- [getAttribute](TrailGeometry.md#getattribute)
+- [hasAttribute](TrailGeometry.md#hasattribute)
+- [genWireframe](TrailGeometry.md#genwireframe)
+- [compute](TrailGeometry.md#compute)
+- [computeNormals](TrailGeometry.md#computenormals)
+- [isPrimitive](TrailGeometry.md#isprimitive)
+- [destroy](TrailGeometry.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new TrailGeometry**(`segment`): [`TrailGeometry`](TrailGeometry.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `segment` | `number` |
+
+#### Returns
+
+[`TrailGeometry`](TrailGeometry.md)
+
+#### Overrides
+
+[GeometryBase](GeometryBase.md).[constructor](GeometryBase.md#constructor)
+
+#### Defined in
+
+[src/shape/TrailGeometry.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/shape/TrailGeometry.ts#L21)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[instanceID](GeometryBase.md#instanceid)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L39)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[name](GeometryBase.md#name)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L40)
+
+___
+
+### subGeometries
+
+• **subGeometries**: [`SubGeometry`](SubGeometry.md)[] = `[]`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[subGeometries](GeometryBase.md#subgeometries)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L41)
+
+___
+
+### morphTargetsRelative
+
+• **morphTargetsRelative**: `boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetsRelative](GeometryBase.md#morphtargetsrelative)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L42)
+
+___
+
+### morphTargetDictionary
+
+• **morphTargetDictionary**: `Object`
+
+#### Index signature
+
+▪ [blenderName: `string`]: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetDictionary](GeometryBase.md#morphtargetdictionary)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L43)
+
+___
+
+### skinNames
+
+• **skinNames**: `string`[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[skinNames](GeometryBase.md#skinnames)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L44)
+
+___
+
+### bindPose
+
+• **bindPose**: [`Matrix4`](Matrix4.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[bindPose](GeometryBase.md#bindpose)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L45)
+
+___
+
+### blendShapeData
+
+• **blendShapeData**: [`BlendShapeData`](BlendShapeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[blendShapeData](GeometryBase.md#blendshapedata)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L46)
+
+___
+
+### vertexDim
+
+• **vertexDim**: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexDim](GeometryBase.md#vertexdim)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L47)
+
+___
+
+### vertexCount
+
+• **vertexCount**: `number` = `0`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexCount](GeometryBase.md#vertexcount)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L48)
+
+___
+
+### segment
+
+• **segment**: `number`
+
+Number of trail segments of a plane
+
+#### Defined in
+
+[src/shape/TrailGeometry.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/shape/TrailGeometry.ts#L15)
+
+## Accessors
+
+### indicesBuffer
+
+• `get` **indicesBuffer**(): [`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Returns
+
+[`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Inherited from
+
+GeometryBase.indicesBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L69)
+
+___
+
+### vertexBuffer
+
+• `get` **vertexBuffer**(): [`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Returns
+
+[`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Inherited from
+
+GeometryBase.vertexBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L73)
+
+___
+
+### vertexAttributes
+
+• `get` **vertexAttributes**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+GeometryBase.vertexAttributes
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L77)
+
+___
+
+### vertexAttributeMap
+
+• `get` **vertexAttributeMap**(): `Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Returns
+
+`Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Inherited from
+
+GeometryBase.vertexAttributeMap
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L81)
+
+___
+
+### geometryType
+
+• `get` **geometryType**(): [`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Returns
+
+[`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L85)
+
+• `set` **geometryType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryVertexType`](../enums/GeometryVertexType.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L88)
+
+___
+
+### bounds
+
+• `get` **bounds**(): `BoundingBox`
+
+#### Returns
+
+`BoundingBox`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L92)
+
+• `set` **bounds**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BoundingBox` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L135)
+
+## Methods
+
+### addSubGeometry
+
+▸ **addSubGeometry**(`...lodLevels`): [`SubGeometry`](SubGeometry.md)
+
+add subGeometry from lod level
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `...lodLevels` | [`LODDescriptor`](../types/LODDescriptor.md)[] |
+
+#### Returns
+
+[`SubGeometry`](SubGeometry.md)
+
+**`See`**
+
+LODDescriptor
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[addSubGeometry](GeometryBase.md#addsubgeometry)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L144)
+
+___
+
+### generate
+
+▸ **generate**(`shaderReflection`): `void`
+
+create geometry by shaderReflection
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `shaderReflection` | `ShaderReflection` | ShaderReflection |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[generate](GeometryBase.md#generate)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L155)
+
+___
+
+### setIndices
+
+▸ **setIndices**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setIndices](GeometryBase.md#setindices)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L165)
+
+___
+
+### setAttribute
+
+▸ **setAttribute**(`attribute`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setAttribute](GeometryBase.md#setattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L177)
+
+___
+
+### getAttribute
+
+▸ **getAttribute**(`attribute`): [`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+[`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[getAttribute](GeometryBase.md#getattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L190)
+
+___
+
+### hasAttribute
+
+▸ **hasAttribute**(`attribute`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[hasAttribute](GeometryBase.md#hasattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L194)
+
+___
+
+### genWireframe
+
+▸ **genWireframe**(): [`Vector3`](Vector3.md)[]
+
+#### Returns
+
+[`Vector3`](Vector3.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[genWireframe](GeometryBase.md#genwireframe)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L198)
+
+___
+
+### compute
+
+▸ **compute**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[compute](GeometryBase.md#compute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L251)
+
+___
+
+### computeNormals
+
+▸ **computeNormals**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[computeNormals](GeometryBase.md#computenormals)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:270](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L270)
+
+___
+
+### isPrimitive
+
+▸ **isPrimitive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[isPrimitive](GeometryBase.md#isprimitive)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L312)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[destroy](GeometryBase.md#destroy)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:316](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L316)
diff --git a/docs/api/classes/Transform.md b/docs/api/classes/Transform.md
new file mode 100644
index 00000000..3e098b54
--- /dev/null
+++ b/docs/api/classes/Transform.md
@@ -0,0 +1,1662 @@
+# Class: Transform
+
+The Transform component contains the position, rotation, and scaling of an object in 3D space.
+Each object (Object 3D) has a Transform component
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`Transform`**
+
+### Constructors
+
+- [constructor](Transform.md#constructor)
+
+### Properties
+
+- [object3D](Transform.md#object3d)
+- [isDestroyed](Transform.md#isdestroyed)
+- [\_localRot](Transform.md#_localrot)
+- [index](Transform.md#index)
+- [index2](Transform.md#index2)
+- [\_worldMatrix](Transform.md#_worldmatrix)
+- [static](Transform.md#static)
+- [depthOrder](Transform.md#depthorder)
+
+### Accessors
+
+- [eventDispatcher](Transform.md#eventdispatcher)
+- [isStart](Transform.md#isstart)
+- [transform](Transform.md#transform)
+- [localChange](Transform.md#localchange)
+- [targetPos](Transform.md#targetpos)
+- [parent](Transform.md#parent)
+- [enable](Transform.md#enable)
+- [scene3D](Transform.md#scene3d)
+- [view3D](Transform.md#view3d)
+- [up](Transform.md#up)
+- [down](Transform.md#down)
+- [forward](Transform.md#forward)
+- [back](Transform.md#back)
+- [left](Transform.md#left)
+- [right](Transform.md#right)
+- [localRotQuat](Transform.md#localrotquat)
+- [x](Transform.md#x)
+- [y](Transform.md#y)
+- [z](Transform.md#z)
+- [scaleX](Transform.md#scalex)
+- [scaleY](Transform.md#scaley)
+- [scaleZ](Transform.md#scalez)
+- [rotationX](Transform.md#rotationx)
+- [rotationY](Transform.md#rotationy)
+- [rotationZ](Transform.md#rotationz)
+- [worldPosition](Transform.md#worldposition)
+- [localPosition](Transform.md#localposition)
+- [localRotation](Transform.md#localrotation)
+- [localScale](Transform.md#localscale)
+- [localDetailScale](Transform.md#localdetailscale)
+- [localDetailRot](Transform.md#localdetailrot)
+- [localDetailPos](Transform.md#localdetailpos)
+
+### Methods
+
+- [init](Transform.md#init)
+- [onEnable](Transform.md#onenable)
+- [onDisable](Transform.md#ondisable)
+- [onUpdate](Transform.md#onupdate)
+- [onLateUpdate](Transform.md#onlateupdate)
+- [onBeforeUpdate](Transform.md#onbeforeupdate)
+- [onCompute](Transform.md#oncompute)
+- [onGraphic](Transform.md#ongraphic)
+- [onParentChange](Transform.md#onparentchange)
+- [onAddChild](Transform.md#onaddchild)
+- [onRemoveChild](Transform.md#onremovechild)
+- [copyComponent](Transform.md#copycomponent)
+- [awake](Transform.md#awake)
+- [start](Transform.md#start)
+- [stop](Transform.md#stop)
+- [updateWorldMatrix](Transform.md#updateworldmatrix)
+- [updateChildTransform](Transform.md#updatechildtransform)
+- [lookTarget](Transform.md#looktarget)
+- [lookAt](Transform.md#lookat)
+- [decomposeFromMatrix](Transform.md#decomposefrommatrix)
+- [cloneTo](Transform.md#cloneto)
+- [beforeDestroy](Transform.md#beforedestroy)
+- [destroy](Transform.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new Transform**(): [`Transform`](Transform.md)
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+#### Defined in
+
+[src/components/Transform.ts:208](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L208)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### \_localRot
+
+• **\_localRot**: [`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/Transform.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L99)
+
+___
+
+### index
+
+• **index**: `number`
+
+#### Defined in
+
+[src/components/Transform.ts:109](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L109)
+
+___
+
+### index2
+
+• **index2**: `number`
+
+#### Defined in
+
+[src/components/Transform.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L110)
+
+___
+
+### \_worldMatrix
+
+• `Readonly` **\_worldMatrix**: [`Matrix4`](Matrix4.md)
+
+#### Defined in
+
+[src/components/Transform.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L121)
+
+___
+
+### static
+
+• **static**: `boolean` = `false`
+
+#### Defined in
+
+[src/components/Transform.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L124)
+
+___
+
+### depthOrder
+
+• **depthOrder**: `number` = `0`
+
+#### Defined in
+
+[src/components/Transform.ts:125](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L125)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### localChange
+
+• `get` **localChange**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/components/Transform.ts:127](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L127)
+
+• `set` **localChange**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L131)
+
+___
+
+### targetPos
+
+• `get` **targetPos**(): [`Vector3`](Vector3.md)
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/Transform.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L136)
+
+• `set` **targetPos**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L139)
+
+___
+
+### parent
+
+• `get` **parent**(): [`Transform`](Transform.md)
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Defined in
+
+[src/components/Transform.ts:143](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L143)
+
+• `set` **parent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Transform`](Transform.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L147)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Overrides
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/Transform.ts:189](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L189)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/Transform.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L179)
+
+___
+
+### scene3D
+
+• `get` **scene3D**(): [`Scene3D`](Scene3D.md)
+
+#### Returns
+
+[`Scene3D`](Scene3D.md)
+
+#### Defined in
+
+[src/components/Transform.ts:193](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L193)
+
+• `set` **scene3D**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Scene3D`](Scene3D.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:197](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L197)
+
+___
+
+### view3D
+
+• `get` **view3D**(): [`View3D`](View3D.md)
+
+#### Returns
+
+[`View3D`](View3D.md)
+
+#### Defined in
+
+[src/components/Transform.ts:201](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L201)
+
+___
+
+### up
+
+• `get` **up**(): [`Vector3`](Vector3.md)
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/Transform.ts:246](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L246)
+
+• `set` **up**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L251)
+
+___
+
+### down
+
+• `get` **down**(): [`Vector3`](Vector3.md)
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/Transform.ts:258](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L258)
+
+• `set` **down**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:263](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L263)
+
+___
+
+### forward
+
+• `get` **forward**(): [`Vector3`](Vector3.md)
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/Transform.ts:277](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L277)
+
+• `set` **forward**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:282](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L282)
+
+___
+
+### back
+
+• `get` **back**(): [`Vector3`](Vector3.md)
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/Transform.ts:296](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L296)
+
+• `set` **back**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:301](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L301)
+
+___
+
+### left
+
+• `get` **left**(): [`Vector3`](Vector3.md)
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/Transform.ts:308](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L308)
+
+• `set` **left**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:313](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L313)
+
+___
+
+### right
+
+• `get` **right**(): [`Vector3`](Vector3.md)
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/Transform.ts:320](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L320)
+
+• `set` **right**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:325](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L325)
+
+___
+
+### localRotQuat
+
+• `get` **localRotQuat**(): [`Quaternion`](Quaternion.md)
+
+The transformation property of the object relative to the parent, stored in the from of a quaternion
+
+#### Returns
+
+[`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/components/Transform.ts:343](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L343)
+
+• `set` **localRotQuat**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Quaternion`](Quaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:350](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L350)
+
+___
+
+### x
+
+• `get` **x**(): `number`
+
+The position of the object relative to its parent X-axis
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/Transform.ts:493](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L493)
+
+• `set` **x**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:477](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L477)
+
+___
+
+### y
+
+• `get` **y**(): `number`
+
+The position of the object relative to its parent Y-axis
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/Transform.ts:513](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L513)
+
+• `set` **y**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:497](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L497)
+
+___
+
+### z
+
+• `get` **z**(): `number`
+
+The position of the object relative to its parent Y-axis
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/Transform.ts:533](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L533)
+
+• `set` **z**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:517](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L517)
+
+___
+
+### scaleX
+
+• `get` **scaleX**(): `number`
+
+The scale of the object relative to its parent X-axis
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/Transform.ts:553](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L553)
+
+• `set` **scaleX**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:537](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L537)
+
+___
+
+### scaleY
+
+• `get` **scaleY**(): `number`
+
+The scale of the object relative to its parent Y-axis
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/Transform.ts:573](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L573)
+
+• `set` **scaleY**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:557](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L557)
+
+___
+
+### scaleZ
+
+• `get` **scaleZ**(): `number`
+
+The scale of the object relative to its parent Z-axis
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/Transform.ts:594](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L594)
+
+• `set` **scaleZ**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:577](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L577)
+
+___
+
+### rotationX
+
+• `get` **rotationX**(): `number`
+
+The rotation of the object relative to its parent X-axis
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/Transform.ts:614](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L614)
+
+• `set` **rotationX**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:598](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L598)
+
+___
+
+### rotationY
+
+• `get` **rotationY**(): `number`
+
+The rotation of the object relative to its parent Y-axis
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/Transform.ts:634](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L634)
+
+• `set` **rotationY**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:618](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L618)
+
+___
+
+### rotationZ
+
+• `get` **rotationZ**(): `number`
+
+The rotation of the object relative to its parent Z-axis
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/Transform.ts:654](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L654)
+
+• `set` **rotationZ**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:638](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L638)
+
+___
+
+### worldPosition
+
+• `get` **worldPosition**(): [`Vector3`](Vector3.md)
+
+world position
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/Transform.ts:661](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L661)
+
+___
+
+### localPosition
+
+• `get` **localPosition**(): [`Vector3`](Vector3.md)
+
+The position of an object relative to its parent
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/Transform.ts:689](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L689)
+
+• `set` **localPosition**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:668](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L668)
+
+___
+
+### localRotation
+
+• `get` **localRotation**(): [`Vector3`](Vector3.md)
+
+The rotaion vector of an object relative to its parent
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/Transform.ts:714](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L714)
+
+• `set` **localRotation**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:693](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L693)
+
+___
+
+### localScale
+
+• `get` **localScale**(): [`Vector3`](Vector3.md)
+
+The scale of an object relative to its parent
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/Transform.ts:735](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L735)
+
+• `set` **localScale**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:718](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L718)
+
+___
+
+### localDetailScale
+
+• `get` **localDetailScale**(): [`Vector3`](Vector3.md)
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/Transform.ts:740](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L740)
+
+• `set` **localDetailScale**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:744](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L744)
+
+___
+
+### localDetailRot
+
+• `get` **localDetailRot**(): [`Vector3`](Vector3.md)
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/Transform.ts:749](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L749)
+
+• `set` **localDetailRot**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:753](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L753)
+
+___
+
+### localDetailPos
+
+• `get` **localDetailPos**(): [`Vector3`](Vector3.md)
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/components/Transform.ts:758](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L758)
+
+• `set` **localDetailPos**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:761](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L761)
+
+## Methods
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[init](ComponentBase.md#init)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onEnable](ComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onDisable](ComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onUpdate](ComponentBase.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### awake
+
+▸ **awake**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:223](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L223)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[start](ComponentBase.md#start)
+
+#### Defined in
+
+[src/components/Transform.ts:225](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L225)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/Transform.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L227)
+
+___
+
+### updateWorldMatrix
+
+▸ **updateWorldMatrix**(`force?`): `void`
+
+Update the matrix4 in world space
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `force` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:400](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L400)
+
+___
+
+### updateChildTransform
+
+▸ **updateChildTransform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L412)
+
+___
+
+### lookTarget
+
+▸ **lookTarget**(`target`, `up?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `target` | [`Vector3`](Vector3.md) | `undefined` |
+| `up` | [`Vector3`](Vector3.md) | `Vector3.UP` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:428](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L428)
+
+___
+
+### lookAt
+
+▸ **lookAt**(`pos`, `target`, `up?`): `void`
+
+Current object's gaze position (global) (modified by its own global transformation)
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `pos` | [`Vector3`](Vector3.md) | `undefined` | Own position (global) |
+| `target` | [`Vector3`](Vector3.md) | `undefined` | Location of the target (global) |
+| `up` | [`Vector3`](Vector3.md) | `Vector3.UP` | up direction |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/Transform.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L438)
+
+___
+
+### decomposeFromMatrix
+
+▸ **decomposeFromMatrix**(`matrix`, `orientationStyle?`): `this`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `matrix` | [`Matrix4`](Matrix4.md) | `undefined` |
+| `orientationStyle` | `string` | `'eulerAngles'` |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/components/Transform.ts:454](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L454)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+Create a new component, copy the properties of the current component, and add it to the target object.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | source Object3D |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/Transform.ts:471](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L471)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/Transform.ts:767](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L767)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+release this component
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[destroy](ComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/Transform.ts:774](https://github.com/Orillusion/orillusion/blob/main/src/components/Transform.ts#L774)
diff --git a/docs/api/classes/TransformControllerBaseComponent.md b/docs/api/classes/TransformControllerBaseComponent.md
new file mode 100644
index 00000000..2e28e35a
--- /dev/null
+++ b/docs/api/classes/TransformControllerBaseComponent.md
@@ -0,0 +1,775 @@
+# Class: TransformControllerBaseComponent
+
+Components are used to attach functionality to object3D, it has an owner object3D.
+The component can receive update events at each frame.
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`TransformControllerBaseComponent`**
+
+ ↳↳ [`RotationControlComponents`](RotationControlComponents.md)
+
+ ↳↳ [`ScaleControlComponents`](ScaleControlComponents.md)
+
+ ↳↳ [`TranslationControlComponents`](TranslationControlComponents.md)
+
+### Constructors
+
+- [constructor](TransformControllerBaseComponent.md#constructor)
+
+### Properties
+
+- [object3D](TransformControllerBaseComponent.md#object3d)
+- [isDestroyed](TransformControllerBaseComponent.md#isdestroyed)
+
+### Accessors
+
+- [eventDispatcher](TransformControllerBaseComponent.md#eventdispatcher)
+- [isStart](TransformControllerBaseComponent.md#isstart)
+- [transform](TransformControllerBaseComponent.md#transform)
+- [enable](TransformControllerBaseComponent.md#enable)
+- [target](TransformControllerBaseComponent.md#target)
+- [mX](TransformControllerBaseComponent.md#mx)
+- [mY](TransformControllerBaseComponent.md#my)
+- [mZ](TransformControllerBaseComponent.md#mz)
+- [transformSpaceMode](TransformControllerBaseComponent.md#transformspacemode)
+
+### Methods
+
+- [stop](TransformControllerBaseComponent.md#stop)
+- [onLateUpdate](TransformControllerBaseComponent.md#onlateupdate)
+- [onBeforeUpdate](TransformControllerBaseComponent.md#onbeforeupdate)
+- [onCompute](TransformControllerBaseComponent.md#oncompute)
+- [onGraphic](TransformControllerBaseComponent.md#ongraphic)
+- [onParentChange](TransformControllerBaseComponent.md#onparentchange)
+- [onAddChild](TransformControllerBaseComponent.md#onaddchild)
+- [onRemoveChild](TransformControllerBaseComponent.md#onremovechild)
+- [cloneTo](TransformControllerBaseComponent.md#cloneto)
+- [copyComponent](TransformControllerBaseComponent.md#copycomponent)
+- [beforeDestroy](TransformControllerBaseComponent.md#beforedestroy)
+- [destroy](TransformControllerBaseComponent.md#destroy)
+- [init](TransformControllerBaseComponent.md#init)
+- [start](TransformControllerBaseComponent.md#start)
+- [onEnable](TransformControllerBaseComponent.md#onenable)
+- [onDisable](TransformControllerBaseComponent.md#ondisable)
+- [reset](TransformControllerBaseComponent.md#reset)
+- [onMouseDown](TransformControllerBaseComponent.md#onmousedown)
+- [onMouseMove](TransformControllerBaseComponent.md#onmousemove)
+- [onMouseUp](TransformControllerBaseComponent.md#onmouseup)
+- [onUpdate](TransformControllerBaseComponent.md#onupdate)
+
+## Constructors
+
+### constructor
+
+• **new TransformControllerBaseComponent**(): [`TransformControllerBaseComponent`](TransformControllerBaseComponent.md)
+
+#### Returns
+
+[`TransformControllerBaseComponent`](TransformControllerBaseComponent.md)
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L29)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### target
+
+• `get` **target**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L40)
+
+___
+
+### mX
+
+• `get` **mX**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L44)
+
+___
+
+### mY
+
+• `get` **mY**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L48)
+
+___
+
+### mZ
+
+• `get` **mZ**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L52)
+
+___
+
+### transformSpaceMode
+
+• `get` **transformSpaceMode**(): `TransformSpaceMode`
+
+#### Returns
+
+`TransformSpaceMode`
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L56)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[destroy](ComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[init](ComponentBase.md#init)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:60](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L60)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[start](ComponentBase.md#start)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L94)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[onEnable](ComponentBase.md#onenable)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L98)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[onDisable](ComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L107)
+
+___
+
+### reset
+
+▸ **reset**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L115)
+
+___
+
+### onMouseDown
+
+▸ **onMouseDown**(`e`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `e` | [`PointerEvent3D`](PointerEvent3D.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L198)
+
+___
+
+### onMouseMove
+
+▸ **onMouseMove**(`e`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `e` | [`PointerEvent3D`](PointerEvent3D.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:220](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L220)
+
+___
+
+### onMouseUp
+
+▸ **onMouseUp**(`e`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `e` | [`PointerEvent3D`](PointerEvent3D.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:274](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L274)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[onUpdate](ComponentBase.md#onupdate)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:282](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L282)
diff --git a/docs/api/classes/TranslationControlComponents.md b/docs/api/classes/TranslationControlComponents.md
new file mode 100644
index 00000000..b8eaae6b
--- /dev/null
+++ b/docs/api/classes/TranslationControlComponents.md
@@ -0,0 +1,805 @@
+# Class: TranslationControlComponents
+
+Components are used to attach functionality to object3D, it has an owner object3D.
+The component can receive update events at each frame.
+
+## Hierarchy
+
+- [`TransformControllerBaseComponent`](TransformControllerBaseComponent.md)
+
+ ↳ **`TranslationControlComponents`**
+
+### Constructors
+
+- [constructor](TranslationControlComponents.md#constructor)
+
+### Properties
+
+- [object3D](TranslationControlComponents.md#object3d)
+- [isDestroyed](TranslationControlComponents.md#isdestroyed)
+
+### Accessors
+
+- [eventDispatcher](TranslationControlComponents.md#eventdispatcher)
+- [isStart](TranslationControlComponents.md#isstart)
+- [transform](TranslationControlComponents.md#transform)
+- [enable](TranslationControlComponents.md#enable)
+- [target](TranslationControlComponents.md#target)
+- [mX](TranslationControlComponents.md#mx)
+- [mY](TranslationControlComponents.md#my)
+- [mZ](TranslationControlComponents.md#mz)
+- [transformSpaceMode](TranslationControlComponents.md#transformspacemode)
+
+### Methods
+
+- [stop](TranslationControlComponents.md#stop)
+- [onLateUpdate](TranslationControlComponents.md#onlateupdate)
+- [onBeforeUpdate](TranslationControlComponents.md#onbeforeupdate)
+- [onCompute](TranslationControlComponents.md#oncompute)
+- [onGraphic](TranslationControlComponents.md#ongraphic)
+- [onParentChange](TranslationControlComponents.md#onparentchange)
+- [onAddChild](TranslationControlComponents.md#onaddchild)
+- [onRemoveChild](TranslationControlComponents.md#onremovechild)
+- [cloneTo](TranslationControlComponents.md#cloneto)
+- [copyComponent](TranslationControlComponents.md#copycomponent)
+- [beforeDestroy](TranslationControlComponents.md#beforedestroy)
+- [destroy](TranslationControlComponents.md#destroy)
+- [start](TranslationControlComponents.md#start)
+- [onEnable](TranslationControlComponents.md#onenable)
+- [onDisable](TranslationControlComponents.md#ondisable)
+- [reset](TranslationControlComponents.md#reset)
+- [onMouseDown](TranslationControlComponents.md#onmousedown)
+- [onMouseMove](TranslationControlComponents.md#onmousemove)
+- [onMouseUp](TranslationControlComponents.md#onmouseup)
+- [onUpdate](TranslationControlComponents.md#onupdate)
+- [init](TranslationControlComponents.md#init)
+
+## Constructors
+
+### constructor
+
+• **new TranslationControlComponents**(): [`TranslationControlComponents`](TranslationControlComponents.md)
+
+#### Returns
+
+[`TranslationControlComponents`](TranslationControlComponents.md)
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[constructor](TransformControllerBaseComponent.md#constructor)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L29)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[object3D](TransformControllerBaseComponent.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[isDestroyed](TransformControllerBaseComponent.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TransformControllerBaseComponent.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+TransformControllerBaseComponent.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+TransformControllerBaseComponent.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+TransformControllerBaseComponent.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### target
+
+• `get` **target**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.target
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L40)
+
+___
+
+### mX
+
+• `get` **mX**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.mX
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L44)
+
+___
+
+### mY
+
+• `get` **mY**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.mY
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L48)
+
+___
+
+### mZ
+
+• `get` **mZ**(): [`Object3D`](Object3D.md)
+
+#### Returns
+
+[`Object3D`](Object3D.md)
+
+#### Inherited from
+
+TransformControllerBaseComponent.mZ
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L52)
+
+___
+
+### transformSpaceMode
+
+• `get` **transformSpaceMode**(): `TransformSpaceMode`
+
+#### Returns
+
+`TransformSpaceMode`
+
+#### Inherited from
+
+TransformControllerBaseComponent.transformSpaceMode
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L56)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[stop](TransformControllerBaseComponent.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onLateUpdate](TransformControllerBaseComponent.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onBeforeUpdate](TransformControllerBaseComponent.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onCompute](TransformControllerBaseComponent.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onGraphic](TransformControllerBaseComponent.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onParentChange](TransformControllerBaseComponent.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onAddChild](TransformControllerBaseComponent.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onRemoveChild](TransformControllerBaseComponent.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[cloneTo](TransformControllerBaseComponent.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[copyComponent](TransformControllerBaseComponent.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[beforeDestroy](TransformControllerBaseComponent.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[destroy](TransformControllerBaseComponent.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[start](TransformControllerBaseComponent.md#start)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L94)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onEnable](TransformControllerBaseComponent.md#onenable)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L98)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onDisable](TransformControllerBaseComponent.md#ondisable)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L107)
+
+___
+
+### reset
+
+▸ **reset**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[reset](TransformControllerBaseComponent.md#reset)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L115)
+
+___
+
+### onMouseDown
+
+▸ **onMouseDown**(`e`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `e` | [`PointerEvent3D`](PointerEvent3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onMouseDown](TransformControllerBaseComponent.md#onmousedown)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L198)
+
+___
+
+### onMouseMove
+
+▸ **onMouseMove**(`e`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `e` | [`PointerEvent3D`](PointerEvent3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onMouseMove](TransformControllerBaseComponent.md#onmousemove)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:220](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L220)
+
+___
+
+### onMouseUp
+
+▸ **onMouseUp**(`e`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `e` | [`PointerEvent3D`](PointerEvent3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onMouseUp](TransformControllerBaseComponent.md#onmouseup)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:274](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L274)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[onUpdate](TransformControllerBaseComponent.md#onupdate)
+
+#### Defined in
+
+[src/util/transformUtil/TransformControllerBaseComponent.ts:282](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TransformControllerBaseComponent.ts#L282)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[TransformControllerBaseComponent](TransformControllerBaseComponent.md).[init](TransformControllerBaseComponent.md#init)
+
+#### Defined in
+
+[src/util/transformUtil/TranslationControlComponents.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/util/transformUtil/TranslationControlComponents.ts#L18)
diff --git a/docs/api/classes/TriGeometry.md b/docs/api/classes/TriGeometry.md
new file mode 100644
index 00000000..446a2dc0
--- /dev/null
+++ b/docs/api/classes/TriGeometry.md
@@ -0,0 +1,614 @@
+# Class: TriGeometry
+
+Plane geometry
+
+## Hierarchy
+
+- [`GeometryBase`](GeometryBase.md)
+
+ ↳ **`TriGeometry`**
+
+### Constructors
+
+- [constructor](TriGeometry.md#constructor)
+
+### Properties
+
+- [instanceID](TriGeometry.md#instanceid)
+- [name](TriGeometry.md#name)
+- [subGeometries](TriGeometry.md#subgeometries)
+- [morphTargetsRelative](TriGeometry.md#morphtargetsrelative)
+- [morphTargetDictionary](TriGeometry.md#morphtargetdictionary)
+- [skinNames](TriGeometry.md#skinnames)
+- [bindPose](TriGeometry.md#bindpose)
+- [blendShapeData](TriGeometry.md#blendshapedata)
+- [vertexDim](TriGeometry.md#vertexdim)
+- [vertexCount](TriGeometry.md#vertexcount)
+
+### Accessors
+
+- [indicesBuffer](TriGeometry.md#indicesbuffer)
+- [vertexBuffer](TriGeometry.md#vertexbuffer)
+- [vertexAttributes](TriGeometry.md#vertexattributes)
+- [vertexAttributeMap](TriGeometry.md#vertexattributemap)
+- [geometryType](TriGeometry.md#geometrytype)
+- [bounds](TriGeometry.md#bounds)
+
+### Methods
+
+- [addSubGeometry](TriGeometry.md#addsubgeometry)
+- [generate](TriGeometry.md#generate)
+- [setIndices](TriGeometry.md#setindices)
+- [setAttribute](TriGeometry.md#setattribute)
+- [getAttribute](TriGeometry.md#getattribute)
+- [hasAttribute](TriGeometry.md#hasattribute)
+- [genWireframe](TriGeometry.md#genwireframe)
+- [compute](TriGeometry.md#compute)
+- [computeNormals](TriGeometry.md#computenormals)
+- [isPrimitive](TriGeometry.md#isprimitive)
+- [destroy](TriGeometry.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new TriGeometry**(`count`): [`TriGeometry`](TriGeometry.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `count` | `number` |
+
+#### Returns
+
+[`TriGeometry`](TriGeometry.md)
+
+#### Overrides
+
+[GeometryBase](GeometryBase.md).[constructor](GeometryBase.md#constructor)
+
+#### Defined in
+
+[src/shape/TriGeometry.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/shape/TriGeometry.ts#L16)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[instanceID](GeometryBase.md#instanceid)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L39)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[name](GeometryBase.md#name)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L40)
+
+___
+
+### subGeometries
+
+• **subGeometries**: [`SubGeometry`](SubGeometry.md)[] = `[]`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[subGeometries](GeometryBase.md#subgeometries)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L41)
+
+___
+
+### morphTargetsRelative
+
+• **morphTargetsRelative**: `boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetsRelative](GeometryBase.md#morphtargetsrelative)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L42)
+
+___
+
+### morphTargetDictionary
+
+• **morphTargetDictionary**: `Object`
+
+#### Index signature
+
+▪ [blenderName: `string`]: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[morphTargetDictionary](GeometryBase.md#morphtargetdictionary)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L43)
+
+___
+
+### skinNames
+
+• **skinNames**: `string`[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[skinNames](GeometryBase.md#skinnames)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L44)
+
+___
+
+### bindPose
+
+• **bindPose**: [`Matrix4`](Matrix4.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[bindPose](GeometryBase.md#bindpose)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L45)
+
+___
+
+### blendShapeData
+
+• **blendShapeData**: [`BlendShapeData`](BlendShapeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[blendShapeData](GeometryBase.md#blendshapedata)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L46)
+
+___
+
+### vertexDim
+
+• **vertexDim**: `number`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexDim](GeometryBase.md#vertexdim)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L47)
+
+___
+
+### vertexCount
+
+• **vertexCount**: `number` = `0`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[vertexCount](GeometryBase.md#vertexcount)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L48)
+
+## Accessors
+
+### indicesBuffer
+
+• `get` **indicesBuffer**(): [`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Returns
+
+[`GeometryIndicesBuffer`](GeometryIndicesBuffer.md)
+
+#### Inherited from
+
+GeometryBase.indicesBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L69)
+
+___
+
+### vertexBuffer
+
+• `get` **vertexBuffer**(): [`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Returns
+
+[`GeometryVertexBuffer`](GeometryVertexBuffer.md)
+
+#### Inherited from
+
+GeometryBase.vertexBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L73)
+
+___
+
+### vertexAttributes
+
+• `get` **vertexAttributes**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+GeometryBase.vertexAttributes
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L77)
+
+___
+
+### vertexAttributeMap
+
+• `get` **vertexAttributeMap**(): `Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Returns
+
+`Map`\<`string`, [`VertexAttributeData`](../types/VertexAttributeData.md)\>
+
+#### Inherited from
+
+GeometryBase.vertexAttributeMap
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L81)
+
+___
+
+### geometryType
+
+• `get` **geometryType**(): [`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Returns
+
+[`GeometryVertexType`](../enums/GeometryVertexType.md)
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L85)
+
+• `set` **geometryType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GeometryVertexType`](../enums/GeometryVertexType.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L88)
+
+___
+
+### bounds
+
+• `get` **bounds**(): `BoundingBox`
+
+#### Returns
+
+`BoundingBox`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L92)
+
+• `set` **bounds**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BoundingBox` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L135)
+
+## Methods
+
+### addSubGeometry
+
+▸ **addSubGeometry**(`...lodLevels`): [`SubGeometry`](SubGeometry.md)
+
+add subGeometry from lod level
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `...lodLevels` | [`LODDescriptor`](../types/LODDescriptor.md)[] |
+
+#### Returns
+
+[`SubGeometry`](SubGeometry.md)
+
+**`See`**
+
+LODDescriptor
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[addSubGeometry](GeometryBase.md#addsubgeometry)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L144)
+
+___
+
+### generate
+
+▸ **generate**(`shaderReflection`): `void`
+
+create geometry by shaderReflection
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `shaderReflection` | `ShaderReflection` | ShaderReflection |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[generate](GeometryBase.md#generate)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L155)
+
+___
+
+### setIndices
+
+▸ **setIndices**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setIndices](GeometryBase.md#setindices)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L165)
+
+___
+
+### setAttribute
+
+▸ **setAttribute**(`attribute`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+| `data` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[setAttribute](GeometryBase.md#setattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L177)
+
+___
+
+### getAttribute
+
+▸ **getAttribute**(`attribute`): [`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+[`VertexAttributeData`](../types/VertexAttributeData.md)
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[getAttribute](GeometryBase.md#getattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L190)
+
+___
+
+### hasAttribute
+
+▸ **hasAttribute**(`attribute`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[hasAttribute](GeometryBase.md#hasattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L194)
+
+___
+
+### genWireframe
+
+▸ **genWireframe**(): [`Vector3`](Vector3.md)[]
+
+#### Returns
+
+[`Vector3`](Vector3.md)[]
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[genWireframe](GeometryBase.md#genwireframe)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L198)
+
+___
+
+### compute
+
+▸ **compute**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[compute](GeometryBase.md#compute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L251)
+
+___
+
+### computeNormals
+
+▸ **computeNormals**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[computeNormals](GeometryBase.md#computenormals)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:270](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L270)
+
+___
+
+### isPrimitive
+
+▸ **isPrimitive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[isPrimitive](GeometryBase.md#isprimitive)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L312)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[GeometryBase](GeometryBase.md).[destroy](GeometryBase.md#destroy)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:316](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L316)
diff --git a/docs/api/classes/UIButton.md b/docs/api/classes/UIButton.md
new file mode 100644
index 00000000..dd0b632f
--- /dev/null
+++ b/docs/api/classes/UIButton.md
@@ -0,0 +1,991 @@
+# Class: UIButton
+
+The basic components used in the GUI to respond to user interaction behavior and have an image component
+
+## Hierarchy
+
+- [`UIInteractive`](UIInteractive.md)
+
+ ↳ **`UIButton`**
+
+### Constructors
+
+- [constructor](UIButton.md#constructor)
+
+### Properties
+
+- [object3D](UIButton.md#object3d)
+- [isDestroyed](UIButton.md#isdestroyed)
+
+### Accessors
+
+- [eventDispatcher](UIButton.md#eventdispatcher)
+- [isStart](UIButton.md#isstart)
+- [transform](UIButton.md#transform)
+- [enable](UIButton.md#enable)
+- [transition](UIButton.md#transition)
+- [imageType](UIButton.md#imagetype)
+- [mouseStyle](UIButton.md#mousestyle)
+- [normalSprite](UIButton.md#normalsprite)
+- [overSprite](UIButton.md#oversprite)
+- [downSprite](UIButton.md#downsprite)
+- [disableSprite](UIButton.md#disablesprite)
+- [uiTransform](UIButton.md#uitransform)
+- [visible](UIButton.md#visible)
+- [interactive](UIButton.md#interactive)
+- [interactiveVisible](UIButton.md#interactivevisible)
+
+### Methods
+
+- [start](UIButton.md#start)
+- [stop](UIButton.md#stop)
+- [onUpdate](UIButton.md#onupdate)
+- [onLateUpdate](UIButton.md#onlateupdate)
+- [onBeforeUpdate](UIButton.md#onbeforeupdate)
+- [onCompute](UIButton.md#oncompute)
+- [onGraphic](UIButton.md#ongraphic)
+- [onParentChange](UIButton.md#onparentchange)
+- [onAddChild](UIButton.md#onaddchild)
+- [onRemoveChild](UIButton.md#onremovechild)
+- [beforeDestroy](UIButton.md#beforedestroy)
+- [init](UIButton.md#init)
+- [onEnable](UIButton.md#onenable)
+- [onDisable](UIButton.md#ondisable)
+- [setStyleColor](UIButton.md#setstylecolor)
+- [getStyleColor](UIButton.md#getstylecolor)
+- [cloneTo](UIButton.md#cloneto)
+- [copyComponent](UIButton.md#copycomponent)
+- [destroy](UIButton.md#destroy)
+- [rayPick](UIButton.md#raypick)
+
+## Constructors
+
+### constructor
+
+• **new UIButton**(): [`UIButton`](UIButton.md)
+
+#### Returns
+
+[`UIButton`](UIButton.md)
+
+#### Inherited from
+
+[UIInteractive](UIInteractive.md).[constructor](UIInteractive.md#constructor)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[UIInteractive](UIInteractive.md).[object3D](UIInteractive.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[UIInteractive](UIInteractive.md).[isDestroyed](UIInteractive.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+UIInteractive.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIInteractive.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIInteractive.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+UIInteractive.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIInteractive.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIInteractive.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### transition
+
+• `get` **transition**(): [`UIButtonTransition`](../enums/UIButtonTransition.md)
+
+#### Returns
+
+[`UIButtonTransition`](../enums/UIButtonTransition.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L54)
+
+• `set` **transition**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIButtonTransition`](../enums/UIButtonTransition.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L47)
+
+___
+
+### imageType
+
+• `get` **imageType**(): [`ImageType`](../enums/ImageType.md)
+
+#### Returns
+
+[`ImageType`](../enums/ImageType.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L58)
+
+• `set` **imageType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`ImageType`](../enums/ImageType.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L62)
+
+___
+
+### mouseStyle
+
+• `set` **mouseStyle**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIInteractiveStyle`](../enums/UIInteractiveStyle.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+UIInteractive.mouseStyle
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L78)
+
+___
+
+### normalSprite
+
+• `get` **normalSprite**(): [`GUISprite`](GUISprite.md)
+
+#### Returns
+
+[`GUISprite`](GUISprite.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L83)
+
+• `set` **normalSprite**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GUISprite`](GUISprite.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L87)
+
+___
+
+### overSprite
+
+• `get` **overSprite**(): [`GUISprite`](GUISprite.md)
+
+#### Returns
+
+[`GUISprite`](GUISprite.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L94)
+
+• `set` **overSprite**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GUISprite`](GUISprite.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L98)
+
+___
+
+### downSprite
+
+• `get` **downSprite**(): [`GUISprite`](GUISprite.md)
+
+#### Returns
+
+[`GUISprite`](GUISprite.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L112)
+
+• `set` **downSprite**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GUISprite`](GUISprite.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:105](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L105)
+
+___
+
+### disableSprite
+
+• `get` **disableSprite**(): [`GUISprite`](GUISprite.md)
+
+#### Returns
+
+[`GUISprite`](GUISprite.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L123)
+
+• `set` **disableSprite**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GUISprite`](GUISprite.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L116)
+
+___
+
+### uiTransform
+
+• `get` **uiTransform**(): [`UITransform`](UITransform.md)
+
+#### Returns
+
+[`UITransform`](UITransform.md)
+
+#### Inherited from
+
+UIInteractive.uiTransform
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L16)
+
+___
+
+### visible
+
+• `get` **visible**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIInteractive.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L20)
+
+• `set` **visible**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIInteractive.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L24)
+
+___
+
+### interactive
+
+• `get` **interactive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIInteractive.interactive
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIInteractive.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIInteractive.ts#L23)
+
+• `set` **interactive**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIInteractive.interactive
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIInteractive.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIInteractive.ts#L19)
+
+___
+
+### interactiveVisible
+
+• `get` **interactiveVisible**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIInteractive.interactiveVisible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIInteractive.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIInteractive.ts#L31)
+
+## Methods
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIInteractive](UIInteractive.md).[start](UIInteractive.md#start)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIInteractive](UIInteractive.md).[stop](UIInteractive.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIInteractive](UIInteractive.md).[onUpdate](UIInteractive.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIInteractive](UIInteractive.md).[onLateUpdate](UIInteractive.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIInteractive](UIInteractive.md).[onBeforeUpdate](UIInteractive.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIInteractive](UIInteractive.md).[onCompute](UIInteractive.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIInteractive](UIInteractive.md).[onGraphic](UIInteractive.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIInteractive](UIInteractive.md).[onParentChange](UIInteractive.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIInteractive](UIInteractive.md).[onAddChild](UIInteractive.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIInteractive](UIInteractive.md).[onRemoveChild](UIInteractive.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIInteractive](UIInteractive.md).[beforeDestroy](UIInteractive.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIInteractive](UIInteractive.md).[init](UIInteractive.md#init)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L26)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIInteractive](UIInteractive.md).[onEnable](UIInteractive.md#onenable)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L39)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIInteractive](UIInteractive.md).[onDisable](UIInteractive.md#ondisable)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L43)
+
+___
+
+### setStyleColor
+
+▸ **setStyleColor**(`style`, `color`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `style` | [`UIInteractiveStyle`](../enums/UIInteractiveStyle.md) |
+| `color` | [`Color`](Color.md) |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:66](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L66)
+
+___
+
+### getStyleColor
+
+▸ **getStyleColor**(`style`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `style` | [`UIInteractiveStyle`](../enums/UIInteractiveStyle.md) |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:74](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L74)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIInteractive](UIInteractive.md).[cloneTo](UIInteractive.md#cloneto)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L139)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+[UIInteractive](UIInteractive.md).[copyComponent](UIInteractive.md#copycomponent)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L144)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+release this component
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIInteractive](UIInteractive.md).[destroy](UIInteractive.md#destroy)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:162](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L162)
+
+___
+
+### rayPick
+
+▸ **rayPick**(`ray`, `panel`, `screenPos`, `screenSize`): [`HitInfo`](../types/HitInfo.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ray` | [`Ray`](Ray.md) |
+| `panel` | [`UIPanel`](UIPanel.md) |
+| `screenPos` | [`Vector2`](Vector2.md) |
+| `screenSize` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+[`HitInfo`](../types/HitInfo.md)
+
+#### Inherited from
+
+[UIInteractive](UIInteractive.md).[rayPick](UIInteractive.md#raypick)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIInteractive.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIInteractive.ts#L45)
diff --git a/docs/api/classes/UIComponentBase.md b/docs/api/classes/UIComponentBase.md
new file mode 100644
index 00000000..5d8c8f05
--- /dev/null
+++ b/docs/api/classes/UIComponentBase.md
@@ -0,0 +1,655 @@
+# Class: UIComponentBase
+
+The basic component for all GUI component
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`UIComponentBase`**
+
+ ↳↳ [`UIInteractive`](UIInteractive.md)
+
+ ↳↳ [`UIRenderAble`](UIRenderAble.md)
+
+### Constructors
+
+- [constructor](UIComponentBase.md#constructor)
+
+### Properties
+
+- [object3D](UIComponentBase.md#object3d)
+- [isDestroyed](UIComponentBase.md#isdestroyed)
+
+### Accessors
+
+- [eventDispatcher](UIComponentBase.md#eventdispatcher)
+- [isStart](UIComponentBase.md#isstart)
+- [transform](UIComponentBase.md#transform)
+- [enable](UIComponentBase.md#enable)
+- [uiTransform](UIComponentBase.md#uitransform)
+- [visible](UIComponentBase.md#visible)
+
+### Methods
+
+- [start](UIComponentBase.md#start)
+- [stop](UIComponentBase.md#stop)
+- [onEnable](UIComponentBase.md#onenable)
+- [onDisable](UIComponentBase.md#ondisable)
+- [onUpdate](UIComponentBase.md#onupdate)
+- [onLateUpdate](UIComponentBase.md#onlateupdate)
+- [onBeforeUpdate](UIComponentBase.md#onbeforeupdate)
+- [onCompute](UIComponentBase.md#oncompute)
+- [onGraphic](UIComponentBase.md#ongraphic)
+- [onParentChange](UIComponentBase.md#onparentchange)
+- [onAddChild](UIComponentBase.md#onaddchild)
+- [onRemoveChild](UIComponentBase.md#onremovechild)
+- [cloneTo](UIComponentBase.md#cloneto)
+- [beforeDestroy](UIComponentBase.md#beforedestroy)
+- [destroy](UIComponentBase.md#destroy)
+- [init](UIComponentBase.md#init)
+- [copyComponent](UIComponentBase.md#copycomponent)
+
+## Constructors
+
+### constructor
+
+• **new UIComponentBase**(): [`UIComponentBase`](UIComponentBase.md)
+
+#### Returns
+
+[`UIComponentBase`](UIComponentBase.md)
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### uiTransform
+
+• `get` **uiTransform**(): [`UITransform`](UITransform.md)
+
+#### Returns
+
+[`UITransform`](UITransform.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L16)
+
+___
+
+### visible
+
+• `get` **visible**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L20)
+
+• `set` **visible**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L24)
+
+## Methods
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[start](ComponentBase.md#start)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onEnable](ComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onDisable](ComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onUpdate](ComponentBase.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+release this component
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[destroy](ComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L11)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[init](ComponentBase.md#init)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L31)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L41)
diff --git a/docs/api/classes/UIImage.md b/docs/api/classes/UIImage.md
new file mode 100644
index 00000000..b1171bcc
--- /dev/null
+++ b/docs/api/classes/UIImage.md
@@ -0,0 +1,891 @@
+# Class: UIImage
+
+A GUI component to display image/sprite/video
+
+## Hierarchy
+
+- [`UIRenderAble`](UIRenderAble.md)
+
+ ↳ **`UIImage`**
+
+ ↳↳ [`UIPanel`](UIPanel.md)
+
+### Constructors
+
+- [constructor](UIImage.md#constructor)
+
+### Properties
+
+- [object3D](UIImage.md#object3d)
+- [isDestroyed](UIImage.md#isdestroyed)
+- [isUIShadow](UIImage.md#isuishadow)
+- [isShadowless](UIImage.md#isshadowless)
+- [needUpdateShadow](UIImage.md#needupdateshadow)
+
+### Accessors
+
+- [eventDispatcher](UIImage.md#eventdispatcher)
+- [isStart](UIImage.md#isstart)
+- [transform](UIImage.md#transform)
+- [enable](UIImage.md#enable)
+- [uiTransform](UIImage.md#uitransform)
+- [visible](UIImage.md#visible)
+- [sprite](UIImage.md#sprite)
+- [color](UIImage.md#color)
+- [imageType](UIImage.md#imagetype)
+- [mainQuads](UIImage.md#mainquads)
+
+### Methods
+
+- [stop](UIImage.md#stop)
+- [onEnable](UIImage.md#onenable)
+- [onDisable](UIImage.md#ondisable)
+- [onUpdate](UIImage.md#onupdate)
+- [onLateUpdate](UIImage.md#onlateupdate)
+- [onBeforeUpdate](UIImage.md#onbeforeupdate)
+- [onCompute](UIImage.md#oncompute)
+- [onGraphic](UIImage.md#ongraphic)
+- [onParentChange](UIImage.md#onparentchange)
+- [onAddChild](UIImage.md#onaddchild)
+- [onRemoveChild](UIImage.md#onremovechild)
+- [beforeDestroy](UIImage.md#beforedestroy)
+- [init](UIImage.md#init)
+- [cloneTo](UIImage.md#cloneto)
+- [copyComponent](UIImage.md#copycomponent)
+- [destroy](UIImage.md#destroy)
+- [start](UIImage.md#start)
+- [setShadowRenderer](UIImage.md#setshadowrenderer)
+- [setShadowSource](UIImage.md#setshadowsource)
+- [getShadowRender](UIImage.md#getshadowrender)
+
+## Constructors
+
+### constructor
+
+• **new UIImage**(): [`UIImage`](UIImage.md)
+
+#### Returns
+
+[`UIImage`](UIImage.md)
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[constructor](UIRenderAble.md#constructor)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[object3D](UIRenderAble.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[isDestroyed](UIRenderAble.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### isUIShadow
+
+• `Optional` **isUIShadow**: `boolean`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[isUIShadow](UIRenderAble.md#isuishadow)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L12)
+
+___
+
+### isShadowless
+
+• `Optional` **isShadowless**: `boolean`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[isShadowless](UIRenderAble.md#isshadowless)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L13)
+
+___
+
+### needUpdateShadow
+
+• **needUpdateShadow**: `boolean`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[needUpdateShadow](UIRenderAble.md#needupdateshadow)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L14)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+UIRenderAble.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIRenderAble.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIRenderAble.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+UIRenderAble.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIRenderAble.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIRenderAble.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### uiTransform
+
+• `get` **uiTransform**(): [`UITransform`](UITransform.md)
+
+#### Returns
+
+[`UITransform`](UITransform.md)
+
+#### Inherited from
+
+UIRenderAble.uiTransform
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L16)
+
+___
+
+### visible
+
+• `get` **visible**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIRenderAble.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L20)
+
+• `set` **visible**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIRenderAble.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L24)
+
+___
+
+### sprite
+
+• `get` **sprite**(): [`GUISprite`](GUISprite.md)
+
+#### Returns
+
+[`GUISprite`](GUISprite.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L54)
+
+• `set` **sprite**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GUISprite`](GUISprite.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L34)
+
+___
+
+### color
+
+• `get` **color**(): [`Color`](Color.md)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:74](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L74)
+
+• `set` **color**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L78)
+
+___
+
+### imageType
+
+• `get` **imageType**(): [`ImageType`](../enums/ImageType.md)
+
+#### Returns
+
+[`ImageType`](../enums/ImageType.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L85)
+
+• `set` **imageType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`ImageType`](../enums/ImageType.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L89)
+
+___
+
+### mainQuads
+
+• `get` **mainQuads**(): [`GUIQuad`](GUIQuad.md)[]
+
+#### Returns
+
+[`GUIQuad`](GUIQuad.md)[]
+
+#### Inherited from
+
+UIRenderAble.mainQuads
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L44)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[stop](UIRenderAble.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onEnable](UIRenderAble.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onDisable](UIRenderAble.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onUpdate](UIRenderAble.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onLateUpdate](UIRenderAble.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onBeforeUpdate](UIRenderAble.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onCompute](UIRenderAble.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onGraphic](UIRenderAble.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onParentChange](UIRenderAble.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onAddChild](UIRenderAble.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onRemoveChild](UIRenderAble.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[beforeDestroy](UIRenderAble.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIRenderAble](UIRenderAble.md).[init](UIRenderAble.md#init)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L15)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIRenderAble](UIRenderAble.md).[cloneTo](UIRenderAble.md#cloneto)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L21)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+[UIRenderAble](UIRenderAble.md).[copyComponent](UIRenderAble.md#copycomponent)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L26)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+release this component
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[destroy](UIRenderAble.md#destroy)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L21)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[start](UIRenderAble.md#start)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L30)
+
+___
+
+### setShadowRenderer
+
+▸ **setShadowRenderer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIRenderAble`](UIRenderAble.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[setShadowRenderer](UIRenderAble.md#setshadowrenderer)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L48)
+
+___
+
+### setShadowSource
+
+▸ **setShadowSource**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIRenderAble`](UIRenderAble.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[setShadowSource](UIRenderAble.md#setshadowsource)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L52)
+
+___
+
+### getShadowRender
+
+▸ **getShadowRender**(): [`UIRenderAble`](UIRenderAble.md)
+
+#### Returns
+
+[`UIRenderAble`](UIRenderAble.md)
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[getShadowRender](UIRenderAble.md#getshadowrender)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L56)
diff --git a/docs/api/classes/UIImageGroup.md b/docs/api/classes/UIImageGroup.md
new file mode 100644
index 00000000..266cf189
--- /dev/null
+++ b/docs/api/classes/UIImageGroup.md
@@ -0,0 +1,1018 @@
+# Class: UIImageGroup
+
+A UI component to display a group images/sprites/videos
+
+## Hierarchy
+
+- [`UIRenderAble`](UIRenderAble.md)
+
+ ↳ **`UIImageGroup`**
+
+### Constructors
+
+- [constructor](UIImageGroup.md#constructor)
+
+### Properties
+
+- [object3D](UIImageGroup.md#object3d)
+- [isDestroyed](UIImageGroup.md#isdestroyed)
+- [isUIShadow](UIImageGroup.md#isuishadow)
+- [isShadowless](UIImageGroup.md#isshadowless)
+- [needUpdateShadow](UIImageGroup.md#needupdateshadow)
+
+### Accessors
+
+- [eventDispatcher](UIImageGroup.md#eventdispatcher)
+- [isStart](UIImageGroup.md#isstart)
+- [transform](UIImageGroup.md#transform)
+- [enable](UIImageGroup.md#enable)
+- [uiTransform](UIImageGroup.md#uitransform)
+- [visible](UIImageGroup.md#visible)
+- [mainQuads](UIImageGroup.md#mainquads)
+
+### Methods
+
+- [stop](UIImageGroup.md#stop)
+- [onEnable](UIImageGroup.md#onenable)
+- [onDisable](UIImageGroup.md#ondisable)
+- [onUpdate](UIImageGroup.md#onupdate)
+- [onLateUpdate](UIImageGroup.md#onlateupdate)
+- [onBeforeUpdate](UIImageGroup.md#onbeforeupdate)
+- [onCompute](UIImageGroup.md#oncompute)
+- [onGraphic](UIImageGroup.md#ongraphic)
+- [onParentChange](UIImageGroup.md#onparentchange)
+- [onAddChild](UIImageGroup.md#onaddchild)
+- [onRemoveChild](UIImageGroup.md#onremovechild)
+- [beforeDestroy](UIImageGroup.md#beforedestroy)
+- [init](UIImageGroup.md#init)
+- [getQuad](UIImageGroup.md#getquad)
+- [cloneTo](UIImageGroup.md#cloneto)
+- [copyComponent](UIImageGroup.md#copycomponent)
+- [setSprite](UIImageGroup.md#setsprite)
+- [getSprite](UIImageGroup.md#getsprite)
+- [getColor](UIImageGroup.md#getcolor)
+- [setColor](UIImageGroup.md#setcolor)
+- [getImageType](UIImageGroup.md#getimagetype)
+- [setImageType](UIImageGroup.md#setimagetype)
+- [setSize](UIImageGroup.md#setsize)
+- [setXY](UIImageGroup.md#setxy)
+- [getXY](UIImageGroup.md#getxy)
+- [destroy](UIImageGroup.md#destroy)
+- [start](UIImageGroup.md#start)
+- [setShadowRenderer](UIImageGroup.md#setshadowrenderer)
+- [setShadowSource](UIImageGroup.md#setshadowsource)
+- [getShadowRender](UIImageGroup.md#getshadowrender)
+
+## Constructors
+
+### constructor
+
+• **new UIImageGroup**(): [`UIImageGroup`](UIImageGroup.md)
+
+#### Returns
+
+[`UIImageGroup`](UIImageGroup.md)
+
+#### Overrides
+
+[UIRenderAble](UIRenderAble.md).[constructor](UIRenderAble.md#constructor)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImageGroup.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImageGroup.ts#L16)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[object3D](UIRenderAble.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[isDestroyed](UIRenderAble.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### isUIShadow
+
+• `Optional` **isUIShadow**: `boolean`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[isUIShadow](UIRenderAble.md#isuishadow)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L12)
+
+___
+
+### isShadowless
+
+• `Optional` **isShadowless**: `boolean`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[isShadowless](UIRenderAble.md#isshadowless)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L13)
+
+___
+
+### needUpdateShadow
+
+• **needUpdateShadow**: `boolean`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[needUpdateShadow](UIRenderAble.md#needupdateshadow)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L14)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+UIRenderAble.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIRenderAble.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIRenderAble.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+UIRenderAble.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIRenderAble.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIRenderAble.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### uiTransform
+
+• `get` **uiTransform**(): [`UITransform`](UITransform.md)
+
+#### Returns
+
+[`UITransform`](UITransform.md)
+
+#### Inherited from
+
+UIRenderAble.uiTransform
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L16)
+
+___
+
+### visible
+
+• `get` **visible**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIRenderAble.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L20)
+
+• `set` **visible**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIRenderAble.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L24)
+
+___
+
+### mainQuads
+
+• `get` **mainQuads**(): [`GUIQuad`](GUIQuad.md)[]
+
+#### Returns
+
+[`GUIQuad`](GUIQuad.md)[]
+
+#### Inherited from
+
+UIRenderAble.mainQuads
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L44)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[stop](UIRenderAble.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onEnable](UIRenderAble.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onDisable](UIRenderAble.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onUpdate](UIRenderAble.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onLateUpdate](UIRenderAble.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onBeforeUpdate](UIRenderAble.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onCompute](UIRenderAble.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onGraphic](UIRenderAble.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onParentChange](UIRenderAble.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onAddChild](UIRenderAble.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onRemoveChild](UIRenderAble.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[beforeDestroy](UIRenderAble.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIRenderAble](UIRenderAble.md).[init](UIRenderAble.md#init)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImageGroup.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImageGroup.ts#L20)
+
+___
+
+### getQuad
+
+▸ **getQuad**(`index`): [`GUIQuad`](GUIQuad.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+[`GUIQuad`](GUIQuad.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImageGroup.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImageGroup.ts#L29)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIRenderAble](UIRenderAble.md).[cloneTo](UIRenderAble.md#cloneto)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImageGroup.ts:33](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImageGroup.ts#L33)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+[UIRenderAble](UIRenderAble.md).[copyComponent](UIRenderAble.md#copycomponent)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImageGroup.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImageGroup.ts#L38)
+
+___
+
+### setSprite
+
+▸ **setSprite**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | [`GUISprite`](GUISprite.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImageGroup.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImageGroup.ts#L48)
+
+___
+
+### getSprite
+
+▸ **getSprite**(`index`): [`GUISprite`](GUISprite.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+[`GUISprite`](GUISprite.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImageGroup.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImageGroup.ts#L53)
+
+___
+
+### getColor
+
+▸ **getColor**(`index`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImageGroup.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImageGroup.ts#L73)
+
+___
+
+### setColor
+
+▸ **setColor**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImageGroup.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImageGroup.ts#L77)
+
+___
+
+### getImageType
+
+▸ **getImageType**(`index`): [`ImageType`](../enums/ImageType.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+[`ImageType`](../enums/ImageType.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImageGroup.ts:82](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImageGroup.ts#L82)
+
+___
+
+### setImageType
+
+▸ **setImageType**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | [`ImageType`](../enums/ImageType.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImageGroup.ts:86](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImageGroup.ts#L86)
+
+___
+
+### setSize
+
+▸ **setSize**(`index`, `width`, `height`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `width` | `number` |
+| `height` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImageGroup.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImageGroup.ts#L91)
+
+___
+
+### setXY
+
+▸ **setXY**(`index`, `x`, `y`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `x` | `number` |
+| `y` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImageGroup.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImageGroup.ts#L96)
+
+___
+
+### getXY
+
+▸ **getXY**(`index`, `ret?`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `ret?` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImageGroup.ts:101](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImageGroup.ts#L101)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+release this component
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[destroy](UIRenderAble.md#destroy)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L21)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[start](UIRenderAble.md#start)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L30)
+
+___
+
+### setShadowRenderer
+
+▸ **setShadowRenderer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIRenderAble`](UIRenderAble.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[setShadowRenderer](UIRenderAble.md#setshadowrenderer)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L48)
+
+___
+
+### setShadowSource
+
+▸ **setShadowSource**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIRenderAble`](UIRenderAble.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[setShadowSource](UIRenderAble.md#setshadowsource)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L52)
+
+___
+
+### getShadowRender
+
+▸ **getShadowRender**(): [`UIRenderAble`](UIRenderAble.md)
+
+#### Returns
+
+[`UIRenderAble`](UIRenderAble.md)
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[getShadowRender](UIRenderAble.md#getshadowrender)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L56)
diff --git a/docs/api/classes/UIInteractive.md b/docs/api/classes/UIInteractive.md
new file mode 100644
index 00000000..9fa32f02
--- /dev/null
+++ b/docs/api/classes/UIInteractive.md
@@ -0,0 +1,804 @@
+# Class: UIInteractive
+
+The basic class of interactive GUI component
+
+## Hierarchy
+
+- [`UIComponentBase`](UIComponentBase.md)
+
+ ↳ **`UIInteractive`**
+
+ ↳↳ [`UIButton`](UIButton.md)
+
+## Implements
+
+- [`IUIInteractive`](../interfaces/IUIInteractive.md)
+
+### Constructors
+
+- [constructor](UIInteractive.md#constructor)
+
+### Properties
+
+- [object3D](UIInteractive.md#object3d)
+- [isDestroyed](UIInteractive.md#isdestroyed)
+
+### Accessors
+
+- [eventDispatcher](UIInteractive.md#eventdispatcher)
+- [isStart](UIInteractive.md#isstart)
+- [transform](UIInteractive.md#transform)
+- [enable](UIInteractive.md#enable)
+- [uiTransform](UIInteractive.md#uitransform)
+- [visible](UIInteractive.md#visible)
+- [interactive](UIInteractive.md#interactive)
+- [mouseStyle](UIInteractive.md#mousestyle)
+- [interactiveVisible](UIInteractive.md#interactivevisible)
+
+### Methods
+
+- [start](UIInteractive.md#start)
+- [stop](UIInteractive.md#stop)
+- [onEnable](UIInteractive.md#onenable)
+- [onDisable](UIInteractive.md#ondisable)
+- [onUpdate](UIInteractive.md#onupdate)
+- [onLateUpdate](UIInteractive.md#onlateupdate)
+- [onBeforeUpdate](UIInteractive.md#onbeforeupdate)
+- [onCompute](UIInteractive.md#oncompute)
+- [onGraphic](UIInteractive.md#ongraphic)
+- [onParentChange](UIInteractive.md#onparentchange)
+- [onAddChild](UIInteractive.md#onaddchild)
+- [onRemoveChild](UIInteractive.md#onremovechild)
+- [beforeDestroy](UIInteractive.md#beforedestroy)
+- [init](UIInteractive.md#init)
+- [destroy](UIInteractive.md#destroy)
+- [rayPick](UIInteractive.md#raypick)
+- [cloneTo](UIInteractive.md#cloneto)
+- [copyComponent](UIInteractive.md#copycomponent)
+
+## Constructors
+
+### constructor
+
+• **new UIInteractive**(): [`UIInteractive`](UIInteractive.md)
+
+#### Returns
+
+[`UIInteractive`](UIInteractive.md)
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[constructor](UIComponentBase.md#constructor)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Implementation of
+
+[IUIInteractive](../interfaces/IUIInteractive.md).[object3D](../interfaces/IUIInteractive.md#object3d)
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[object3D](UIComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[isDestroyed](UIComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+UIComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+UIComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Implementation of
+
+[IUIInteractive](../interfaces/IUIInteractive.md).[enable](../interfaces/IUIInteractive.md#enable)
+
+#### Inherited from
+
+UIComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+[IUIInteractive](../interfaces/IUIInteractive.md).[enable](../interfaces/IUIInteractive.md#enable)
+
+#### Inherited from
+
+UIComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### uiTransform
+
+• `get` **uiTransform**(): [`UITransform`](UITransform.md)
+
+#### Returns
+
+[`UITransform`](UITransform.md)
+
+#### Inherited from
+
+UIComponentBase.uiTransform
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L16)
+
+___
+
+### visible
+
+• `get` **visible**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Implementation of
+
+[IUIInteractive](../interfaces/IUIInteractive.md).[visible](../interfaces/IUIInteractive.md#visible)
+
+#### Inherited from
+
+UIComponentBase.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L20)
+
+• `set` **visible**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+[IUIInteractive](../interfaces/IUIInteractive.md).[visible](../interfaces/IUIInteractive.md#visible)
+
+#### Inherited from
+
+UIComponentBase.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L24)
+
+___
+
+### interactive
+
+• `get` **interactive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Implementation of
+
+[IUIInteractive](../interfaces/IUIInteractive.md).[interactive](../interfaces/IUIInteractive.md#interactive)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIInteractive.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIInteractive.ts#L23)
+
+• `set` **interactive**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+[IUIInteractive](../interfaces/IUIInteractive.md).[interactive](../interfaces/IUIInteractive.md#interactive)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIInteractive.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIInteractive.ts#L19)
+
+___
+
+### mouseStyle
+
+• `set` **mouseStyle**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIInteractiveStyle`](../enums/UIInteractiveStyle.md) |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+IUIInteractive.mouseStyle
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIInteractive.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIInteractive.ts#L27)
+
+___
+
+### interactiveVisible
+
+• `get` **interactiveVisible**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Implementation of
+
+IUIInteractive.interactiveVisible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIInteractive.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIInteractive.ts#L31)
+
+## Methods
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[start](UIComponentBase.md#start)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[stop](UIComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onEnable](UIComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onDisable](UIComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onUpdate](UIComponentBase.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onLateUpdate](UIComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onBeforeUpdate](UIComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onCompute](UIComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onGraphic](UIComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onParentChange](UIComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onAddChild](UIComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onRemoveChild](UIComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[beforeDestroy](UIComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIComponentBase](UIComponentBase.md).[init](UIComponentBase.md#init)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIInteractive.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIInteractive.ts#L35)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+release this component
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+[IUIInteractive](../interfaces/IUIInteractive.md).[destroy](../interfaces/IUIInteractive.md#destroy)
+
+#### Overrides
+
+[UIComponentBase](UIComponentBase.md).[destroy](UIComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIInteractive.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIInteractive.ts#L40)
+
+___
+
+### rayPick
+
+▸ **rayPick**(`ray`, `panel`, `screenPos`, `screenSize`): [`HitInfo`](../types/HitInfo.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ray` | [`Ray`](Ray.md) |
+| `panel` | [`UIPanel`](UIPanel.md) |
+| `screenPos` | [`Vector2`](Vector2.md) |
+| `screenSize` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+[`HitInfo`](../types/HitInfo.md)
+
+#### Implementation of
+
+[IUIInteractive](../interfaces/IUIInteractive.md).[rayPick](../interfaces/IUIInteractive.md#raypick)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIInteractive.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIInteractive.ts#L45)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIComponentBase](UIComponentBase.md).[cloneTo](UIComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIInteractive.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIInteractive.ts#L49)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+[UIComponentBase](UIComponentBase.md).[copyComponent](UIComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIInteractive.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIInteractive.ts#L54)
diff --git a/docs/api/classes/UIPanel.md b/docs/api/classes/UIPanel.md
new file mode 100644
index 00000000..c8520b61
--- /dev/null
+++ b/docs/api/classes/UIPanel.md
@@ -0,0 +1,1133 @@
+# Class: UIPanel
+
+Container for UI components
+
+## Hierarchy
+
+- [`UIImage`](UIImage.md)
+
+ ↳ **`UIPanel`**
+
+ ↳↳ [`ViewPanel`](ViewPanel.md)
+
+ ↳↳ [`WorldPanel`](WorldPanel.md)
+
+### Constructors
+
+- [constructor](UIPanel.md#constructor)
+
+### Properties
+
+- [object3D](UIPanel.md#object3d)
+- [isDestroyed](UIPanel.md#isdestroyed)
+- [space](UIPanel.md#space)
+- [needUpdateGeometry](UIPanel.md#needupdategeometry)
+- [panelOrder](UIPanel.md#panelorder)
+- [needSortOnCameraZ](UIPanel.md#needsortoncameraz)
+- [scissorEnable](UIPanel.md#scissorenable)
+- [scissorCornerRadius](UIPanel.md#scissorcornerradius)
+- [scissorFadeOutSize](UIPanel.md#scissorfadeoutsize)
+- [panelRatio](UIPanel.md#panelratio)
+- [isUIPanel](UIPanel.md#isuipanel)
+- [isUIShadow](UIPanel.md#isuishadow)
+- [isShadowless](UIPanel.md#isshadowless)
+- [needUpdateShadow](UIPanel.md#needupdateshadow)
+
+### Accessors
+
+- [eventDispatcher](UIPanel.md#eventdispatcher)
+- [isStart](UIPanel.md#isstart)
+- [transform](UIPanel.md#transform)
+- [enable](UIPanel.md#enable)
+- [uiTransform](UIPanel.md#uitransform)
+- [visible](UIPanel.md#visible)
+- [sprite](UIPanel.md#sprite)
+- [color](UIPanel.md#color)
+- [imageType](UIPanel.md#imagetype)
+- [quadMaxCount](UIPanel.md#quadmaxcount)
+- [renderer](UIPanel.md#renderer)
+- [billboard](UIPanel.md#billboard)
+- [cullMode](UIPanel.md#cullmode)
+- [mainQuads](UIPanel.md#mainquads)
+
+### Methods
+
+- [stop](UIPanel.md#stop)
+- [onEnable](UIPanel.md#onenable)
+- [onDisable](UIPanel.md#ondisable)
+- [onLateUpdate](UIPanel.md#onlateupdate)
+- [onBeforeUpdate](UIPanel.md#onbeforeupdate)
+- [onCompute](UIPanel.md#oncompute)
+- [onGraphic](UIPanel.md#ongraphic)
+- [onParentChange](UIPanel.md#onparentchange)
+- [onAddChild](UIPanel.md#onaddchild)
+- [onRemoveChild](UIPanel.md#onremovechild)
+- [beforeDestroy](UIPanel.md#beforedestroy)
+- [cloneTo](UIPanel.md#cloneto)
+- [copyComponent](UIPanel.md#copycomponent)
+- [init](UIPanel.md#init)
+- [updateDrawCallSegment](UIPanel.md#updatedrawcallsegment)
+- [onUpdate](UIPanel.md#onupdate)
+- [destroy](UIPanel.md#destroy)
+- [start](UIPanel.md#start)
+- [setShadowRenderer](UIPanel.md#setshadowrenderer)
+- [setShadowSource](UIPanel.md#setshadowsource)
+- [getShadowRender](UIPanel.md#getshadowrender)
+
+## Constructors
+
+### constructor
+
+• **new UIPanel**(): [`UIPanel`](UIPanel.md)
+
+#### Returns
+
+[`UIPanel`](UIPanel.md)
+
+#### Inherited from
+
+[UIImage](UIImage.md).[constructor](UIImage.md#constructor)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[UIImage](UIImage.md).[object3D](UIImage.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[isDestroyed](UIImage.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### space
+
+• `Readonly` **space**: `number` = `GUISpace.World`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L20)
+
+___
+
+### needUpdateGeometry
+
+• **needUpdateGeometry**: `boolean` = `true`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L21)
+
+___
+
+### panelOrder
+
+• **panelOrder**: `number` = `0`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L22)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L23)
+
+___
+
+### scissorEnable
+
+• **scissorEnable**: `boolean` = `false`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L27)
+
+___
+
+### scissorCornerRadius
+
+• **scissorCornerRadius**: `number` = `0`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L28)
+
+___
+
+### scissorFadeOutSize
+
+• **scissorFadeOutSize**: `number` = `0`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L29)
+
+___
+
+### panelRatio
+
+• **panelRatio**: `number` = `1`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L35)
+
+___
+
+### isUIPanel
+
+• `Readonly` **isUIPanel**: ``true``
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L36)
+
+___
+
+### isUIShadow
+
+• `Optional` **isUIShadow**: `boolean`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[isUIShadow](UIImage.md#isuishadow)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L12)
+
+___
+
+### isShadowless
+
+• `Optional` **isShadowless**: `boolean`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[isShadowless](UIImage.md#isshadowless)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L13)
+
+___
+
+### needUpdateShadow
+
+• **needUpdateShadow**: `boolean`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[needUpdateShadow](UIImage.md#needupdateshadow)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L14)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+UIImage.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIImage.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIImage.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+UIImage.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIImage.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIImage.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### uiTransform
+
+• `get` **uiTransform**(): [`UITransform`](UITransform.md)
+
+#### Returns
+
+[`UITransform`](UITransform.md)
+
+#### Inherited from
+
+UIImage.uiTransform
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L16)
+
+___
+
+### visible
+
+• `get` **visible**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIImage.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L20)
+
+• `set` **visible**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIImage.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L24)
+
+___
+
+### sprite
+
+• `get` **sprite**(): [`GUISprite`](GUISprite.md)
+
+#### Returns
+
+[`GUISprite`](GUISprite.md)
+
+#### Inherited from
+
+UIImage.sprite
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L54)
+
+• `set` **sprite**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GUISprite`](GUISprite.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIImage.sprite
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L34)
+
+___
+
+### color
+
+• `get` **color**(): [`Color`](Color.md)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+UIImage.color
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:74](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L74)
+
+• `set` **color**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIImage.color
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L78)
+
+___
+
+### imageType
+
+• `get` **imageType**(): [`ImageType`](../enums/ImageType.md)
+
+#### Returns
+
+[`ImageType`](../enums/ImageType.md)
+
+#### Inherited from
+
+UIImage.imageType
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L85)
+
+• `set` **imageType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`ImageType`](../enums/ImageType.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIImage.imageType
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L89)
+
+___
+
+### quadMaxCount
+
+• `get` **quadMaxCount**(): `number`
+
+Return How many Quads can a single GUIGeometry support at most
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L92)
+
+___
+
+### renderer
+
+• `get` **renderer**(): [`GUIRenderer`](GUIRenderer.md)
+
+#### Returns
+
+[`GUIRenderer`](GUIRenderer.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L96)
+
+___
+
+### billboard
+
+• `get` **billboard**(): [`BillboardType`](../enums/BillboardType.md)
+
+#### Returns
+
+[`BillboardType`](../enums/BillboardType.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L114)
+
+• `set` **billboard**(`type`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `type` | [`BillboardType`](../enums/BillboardType.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:100](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L100)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L128)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L118)
+
+___
+
+### mainQuads
+
+• `get` **mainQuads**(): [`GUIQuad`](GUIQuad.md)[]
+
+#### Returns
+
+[`GUIQuad`](GUIQuad.md)[]
+
+#### Inherited from
+
+UIImage.mainQuads
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L44)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[stop](UIImage.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[onEnable](UIImage.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[onDisable](UIImage.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[onLateUpdate](UIImage.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[onBeforeUpdate](UIImage.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[onCompute](UIImage.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[onGraphic](UIImage.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[onParentChange](UIImage.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[onAddChild](UIImage.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[onRemoveChild](UIImage.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[beforeDestroy](UIImage.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIImage](UIImage.md).[cloneTo](UIImage.md#cloneto)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L38)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+[UIImage](UIImage.md).[copyComponent](UIImage.md#copycomponent)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L43)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIImage](UIImage.md).[init](UIImage.md#init)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L57)
+
+___
+
+### updateDrawCallSegment
+
+▸ **updateDrawCallSegment**(`index`, `indexStart`, `indexCount`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `indexStart` | `number` |
+| `indexCount` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L64)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIImage](UIImage.md).[onUpdate](UIImage.md#onupdate)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L132)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+release this component
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[destroy](UIImage.md#destroy)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L21)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[start](UIImage.md#start)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L30)
+
+___
+
+### setShadowRenderer
+
+▸ **setShadowRenderer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIRenderAble`](UIRenderAble.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[setShadowRenderer](UIImage.md#setshadowrenderer)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L48)
+
+___
+
+### setShadowSource
+
+▸ **setShadowSource**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIRenderAble`](UIRenderAble.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIImage](UIImage.md).[setShadowSource](UIImage.md#setshadowsource)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L52)
+
+___
+
+### getShadowRender
+
+▸ **getShadowRender**(): [`UIRenderAble`](UIRenderAble.md)
+
+#### Returns
+
+[`UIRenderAble`](UIRenderAble.md)
+
+#### Inherited from
+
+[UIImage](UIImage.md).[getShadowRender](UIImage.md#getshadowrender)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L56)
diff --git a/docs/api/classes/UIRenderAble.md b/docs/api/classes/UIRenderAble.md
new file mode 100644
index 00000000..ecfc0f4b
--- /dev/null
+++ b/docs/api/classes/UIRenderAble.md
@@ -0,0 +1,776 @@
+# Class: UIRenderAble
+
+The basic class of render able GUI component
+
+## Hierarchy
+
+- [`UIComponentBase`](UIComponentBase.md)
+
+ ↳ **`UIRenderAble`**
+
+ ↳↳ [`UIImage`](UIImage.md)
+
+ ↳↳ [`UIImageGroup`](UIImageGroup.md)
+
+ ↳↳ [`UIShadow`](UIShadow.md)
+
+ ↳↳ [`UITextField`](UITextField.md)
+
+### Constructors
+
+- [constructor](UIRenderAble.md#constructor)
+
+### Properties
+
+- [object3D](UIRenderAble.md#object3d)
+- [isDestroyed](UIRenderAble.md#isdestroyed)
+- [isUIShadow](UIRenderAble.md#isuishadow)
+- [isShadowless](UIRenderAble.md#isshadowless)
+- [needUpdateShadow](UIRenderAble.md#needupdateshadow)
+
+### Accessors
+
+- [eventDispatcher](UIRenderAble.md#eventdispatcher)
+- [isStart](UIRenderAble.md#isstart)
+- [transform](UIRenderAble.md#transform)
+- [enable](UIRenderAble.md#enable)
+- [uiTransform](UIRenderAble.md#uitransform)
+- [visible](UIRenderAble.md#visible)
+- [mainQuads](UIRenderAble.md#mainquads)
+
+### Methods
+
+- [stop](UIRenderAble.md#stop)
+- [onEnable](UIRenderAble.md#onenable)
+- [onDisable](UIRenderAble.md#ondisable)
+- [onUpdate](UIRenderAble.md#onupdate)
+- [onLateUpdate](UIRenderAble.md#onlateupdate)
+- [onBeforeUpdate](UIRenderAble.md#onbeforeupdate)
+- [onCompute](UIRenderAble.md#oncompute)
+- [onGraphic](UIRenderAble.md#ongraphic)
+- [onParentChange](UIRenderAble.md#onparentchange)
+- [onAddChild](UIRenderAble.md#onaddchild)
+- [onRemoveChild](UIRenderAble.md#onremovechild)
+- [cloneTo](UIRenderAble.md#cloneto)
+- [beforeDestroy](UIRenderAble.md#beforedestroy)
+- [init](UIRenderAble.md#init)
+- [destroy](UIRenderAble.md#destroy)
+- [start](UIRenderAble.md#start)
+- [setShadowRenderer](UIRenderAble.md#setshadowrenderer)
+- [setShadowSource](UIRenderAble.md#setshadowsource)
+- [getShadowRender](UIRenderAble.md#getshadowrender)
+- [copyComponent](UIRenderAble.md#copycomponent)
+
+## Constructors
+
+### constructor
+
+• **new UIRenderAble**(): [`UIRenderAble`](UIRenderAble.md)
+
+#### Returns
+
+[`UIRenderAble`](UIRenderAble.md)
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[constructor](UIComponentBase.md#constructor)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[object3D](UIComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[isDestroyed](UIComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### isUIShadow
+
+• `Optional` **isUIShadow**: `boolean`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L12)
+
+___
+
+### isShadowless
+
+• `Optional` **isShadowless**: `boolean`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L13)
+
+___
+
+### needUpdateShadow
+
+• **needUpdateShadow**: `boolean`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L14)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+UIComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+UIComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### uiTransform
+
+• `get` **uiTransform**(): [`UITransform`](UITransform.md)
+
+#### Returns
+
+[`UITransform`](UITransform.md)
+
+#### Inherited from
+
+UIComponentBase.uiTransform
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L16)
+
+___
+
+### visible
+
+• `get` **visible**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIComponentBase.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L20)
+
+• `set` **visible**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIComponentBase.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L24)
+
+___
+
+### mainQuads
+
+• `get` **mainQuads**(): [`GUIQuad`](GUIQuad.md)[]
+
+#### Returns
+
+[`GUIQuad`](GUIQuad.md)[]
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L44)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[stop](UIComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onEnable](UIComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onDisable](UIComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onUpdate](UIComponentBase.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onLateUpdate](UIComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onBeforeUpdate](UIComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onCompute](UIComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onGraphic](UIComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onParentChange](UIComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onAddChild](UIComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[onRemoveChild](UIComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[cloneTo](UIComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIComponentBase](UIComponentBase.md).[beforeDestroy](UIComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIComponentBase](UIComponentBase.md).[init](UIComponentBase.md#init)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L16)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+release this component
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIComponentBase](UIComponentBase.md).[destroy](UIComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L21)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIComponentBase](UIComponentBase.md).[start](UIComponentBase.md#start)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L30)
+
+___
+
+### setShadowRenderer
+
+▸ **setShadowRenderer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIRenderAble`](UIRenderAble.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L48)
+
+___
+
+### setShadowSource
+
+▸ **setShadowSource**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIRenderAble`](UIRenderAble.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L52)
+
+___
+
+### getShadowRender
+
+▸ **getShadowRender**(): [`UIRenderAble`](UIRenderAble.md)
+
+#### Returns
+
+[`UIRenderAble`](UIRenderAble.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L56)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+[UIComponentBase](UIComponentBase.md).[copyComponent](UIComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L120)
diff --git a/docs/api/classes/UIShadow.md b/docs/api/classes/UIShadow.md
new file mode 100644
index 00000000..714dd1f9
--- /dev/null
+++ b/docs/api/classes/UIShadow.md
@@ -0,0 +1,920 @@
+# Class: UIShadow
+
+The shadow component for gui
+
+## Hierarchy
+
+- [`UIRenderAble`](UIRenderAble.md)
+
+ ↳ **`UIShadow`**
+
+### Constructors
+
+- [constructor](UIShadow.md#constructor)
+
+### Properties
+
+- [object3D](UIShadow.md#object3d)
+- [isDestroyed](UIShadow.md#isdestroyed)
+- [isUIShadow](UIShadow.md#isuishadow)
+- [isShadowless](UIShadow.md#isshadowless)
+- [needUpdateShadow](UIShadow.md#needupdateshadow)
+
+### Accessors
+
+- [eventDispatcher](UIShadow.md#eventdispatcher)
+- [isStart](UIShadow.md#isstart)
+- [transform](UIShadow.md#transform)
+- [enable](UIShadow.md#enable)
+- [uiTransform](UIShadow.md#uitransform)
+- [visible](UIShadow.md#visible)
+- [mainQuads](UIShadow.md#mainquads)
+- [shadowColor](UIShadow.md#shadowcolor)
+- [shadowQuality](UIShadow.md#shadowquality)
+- [shadowOffset](UIShadow.md#shadowoffset)
+- [shadowRadius](UIShadow.md#shadowradius)
+
+### Methods
+
+- [stop](UIShadow.md#stop)
+- [onEnable](UIShadow.md#onenable)
+- [onDisable](UIShadow.md#ondisable)
+- [onLateUpdate](UIShadow.md#onlateupdate)
+- [onBeforeUpdate](UIShadow.md#onbeforeupdate)
+- [onCompute](UIShadow.md#oncompute)
+- [onGraphic](UIShadow.md#ongraphic)
+- [onParentChange](UIShadow.md#onparentchange)
+- [onAddChild](UIShadow.md#onaddchild)
+- [onRemoveChild](UIShadow.md#onremovechild)
+- [beforeDestroy](UIShadow.md#beforedestroy)
+- [destroy](UIShadow.md#destroy)
+- [start](UIShadow.md#start)
+- [setShadowRenderer](UIShadow.md#setshadowrenderer)
+- [setShadowSource](UIShadow.md#setshadowsource)
+- [getShadowRender](UIShadow.md#getshadowrender)
+- [init](UIShadow.md#init)
+- [cloneTo](UIShadow.md#cloneto)
+- [copyComponent](UIShadow.md#copycomponent)
+- [onUpdate](UIShadow.md#onupdate)
+
+## Constructors
+
+### constructor
+
+• **new UIShadow**(): [`UIShadow`](UIShadow.md)
+
+#### Returns
+
+[`UIShadow`](UIShadow.md)
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[constructor](UIRenderAble.md#constructor)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[object3D](UIRenderAble.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[isDestroyed](UIRenderAble.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### isUIShadow
+
+• `Optional` **isUIShadow**: `boolean`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[isUIShadow](UIRenderAble.md#isuishadow)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L12)
+
+___
+
+### isShadowless
+
+• `Optional` **isShadowless**: `boolean`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[isShadowless](UIRenderAble.md#isshadowless)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L13)
+
+___
+
+### needUpdateShadow
+
+• **needUpdateShadow**: `boolean` = `false`
+
+#### Overrides
+
+[UIRenderAble](UIRenderAble.md).[needUpdateShadow](UIRenderAble.md#needupdateshadow)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIShadow.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIShadow.ts#L20)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+UIRenderAble.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIRenderAble.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIRenderAble.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+UIRenderAble.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIRenderAble.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIRenderAble.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### uiTransform
+
+• `get` **uiTransform**(): [`UITransform`](UITransform.md)
+
+#### Returns
+
+[`UITransform`](UITransform.md)
+
+#### Inherited from
+
+UIRenderAble.uiTransform
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L16)
+
+___
+
+### visible
+
+• `get` **visible**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIRenderAble.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L20)
+
+• `set` **visible**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIRenderAble.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L24)
+
+___
+
+### mainQuads
+
+• `get` **mainQuads**(): [`GUIQuad`](GUIQuad.md)[]
+
+#### Returns
+
+[`GUIQuad`](GUIQuad.md)[]
+
+#### Inherited from
+
+UIRenderAble.mainQuads
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L44)
+
+___
+
+### shadowColor
+
+• `get` **shadowColor**(): [`Color`](Color.md)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIShadow.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIShadow.ts#L46)
+
+• `set` **shadowColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIShadow.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIShadow.ts#L50)
+
+___
+
+### shadowQuality
+
+• `get` **shadowQuality**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIShadow.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIShadow.ts#L62)
+
+• `set` **shadowQuality**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIShadow.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIShadow.ts#L55)
+
+___
+
+### shadowOffset
+
+• `get` **shadowOffset**(): [`Vector2`](Vector2.md)
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIShadow.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIShadow.ts#L71)
+
+• `set` **shadowOffset**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIShadow.ts:66](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIShadow.ts#L66)
+
+___
+
+### shadowRadius
+
+• `get` **shadowRadius**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIShadow.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIShadow.ts#L83)
+
+• `set` **shadowRadius**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIShadow.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIShadow.ts#L76)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[stop](UIRenderAble.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onEnable](UIRenderAble.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onDisable](UIRenderAble.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onLateUpdate](UIRenderAble.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onBeforeUpdate](UIRenderAble.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onCompute](UIRenderAble.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onGraphic](UIRenderAble.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onParentChange](UIRenderAble.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onAddChild](UIRenderAble.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onRemoveChild](UIRenderAble.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[beforeDestroy](UIRenderAble.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+release this component
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[destroy](UIRenderAble.md#destroy)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L21)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[start](UIRenderAble.md#start)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L30)
+
+___
+
+### setShadowRenderer
+
+▸ **setShadowRenderer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIRenderAble`](UIRenderAble.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[setShadowRenderer](UIRenderAble.md#setshadowrenderer)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L48)
+
+___
+
+### setShadowSource
+
+▸ **setShadowSource**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIRenderAble`](UIRenderAble.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[setShadowSource](UIRenderAble.md#setshadowsource)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L52)
+
+___
+
+### getShadowRender
+
+▸ **getShadowRender**(): [`UIRenderAble`](UIRenderAble.md)
+
+#### Returns
+
+[`UIRenderAble`](UIRenderAble.md)
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[getShadowRender](UIRenderAble.md#getshadowrender)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L56)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIRenderAble](UIRenderAble.md).[init](UIRenderAble.md#init)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIShadow.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIShadow.ts#L22)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIRenderAble](UIRenderAble.md).[cloneTo](UIRenderAble.md#cloneto)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIShadow.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIShadow.ts#L32)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+[UIRenderAble](UIRenderAble.md).[copyComponent](UIRenderAble.md#copycomponent)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIShadow.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIShadow.ts#L37)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIRenderAble](UIRenderAble.md).[onUpdate](UIRenderAble.md#onupdate)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIShadow.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIShadow.ts#L87)
diff --git a/docs/api/classes/UITextField.md b/docs/api/classes/UITextField.md
new file mode 100644
index 00000000..0b4da3a0
--- /dev/null
+++ b/docs/api/classes/UITextField.md
@@ -0,0 +1,1001 @@
+# Class: UITextField
+
+The textField component for gui
+
+## Hierarchy
+
+- [`UIRenderAble`](UIRenderAble.md)
+
+ ↳ **`UITextField`**
+
+### Constructors
+
+- [constructor](UITextField.md#constructor)
+
+### Properties
+
+- [object3D](UITextField.md#object3d)
+- [isDestroyed](UITextField.md#isdestroyed)
+- [isUIShadow](UITextField.md#isuishadow)
+- [isShadowless](UITextField.md#isshadowless)
+- [needUpdateShadow](UITextField.md#needupdateshadow)
+
+### Accessors
+
+- [eventDispatcher](UITextField.md#eventdispatcher)
+- [isStart](UITextField.md#isstart)
+- [transform](UITextField.md#transform)
+- [enable](UITextField.md#enable)
+- [uiTransform](UITextField.md#uitransform)
+- [visible](UITextField.md#visible)
+- [mainQuads](UITextField.md#mainquads)
+- [originSize](UITextField.md#originsize)
+- [font](UITextField.md#font)
+- [fontSize](UITextField.md#fontsize)
+- [text](UITextField.md#text)
+- [color](UITextField.md#color)
+- [alignment](UITextField.md#alignment)
+- [lineSpacing](UITextField.md#linespacing)
+
+### Methods
+
+- [stop](UITextField.md#stop)
+- [onEnable](UITextField.md#onenable)
+- [onDisable](UITextField.md#ondisable)
+- [onUpdate](UITextField.md#onupdate)
+- [onLateUpdate](UITextField.md#onlateupdate)
+- [onBeforeUpdate](UITextField.md#onbeforeupdate)
+- [onCompute](UITextField.md#oncompute)
+- [onGraphic](UITextField.md#ongraphic)
+- [onParentChange](UITextField.md#onparentchange)
+- [onAddChild](UITextField.md#onaddchild)
+- [onRemoveChild](UITextField.md#onremovechild)
+- [beforeDestroy](UITextField.md#beforedestroy)
+- [init](UITextField.md#init)
+- [destroy](UITextField.md#destroy)
+- [start](UITextField.md#start)
+- [setShadowRenderer](UITextField.md#setshadowrenderer)
+- [setShadowSource](UITextField.md#setshadowsource)
+- [getShadowRender](UITextField.md#getshadowrender)
+- [cloneTo](UITextField.md#cloneto)
+- [copyComponent](UITextField.md#copycomponent)
+
+## Constructors
+
+### constructor
+
+• **new UITextField**(): [`UITextField`](UITextField.md)
+
+#### Returns
+
+[`UITextField`](UITextField.md)
+
+#### Overrides
+
+[UIRenderAble](UIRenderAble.md).[constructor](UIRenderAble.md#constructor)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITextField.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITextField.ts#L19)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[object3D](UIRenderAble.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[isDestroyed](UIRenderAble.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### isUIShadow
+
+• `Optional` **isUIShadow**: `boolean`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[isUIShadow](UIRenderAble.md#isuishadow)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L12)
+
+___
+
+### isShadowless
+
+• `Optional` **isShadowless**: `boolean`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[isShadowless](UIRenderAble.md#isshadowless)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L13)
+
+___
+
+### needUpdateShadow
+
+• **needUpdateShadow**: `boolean`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[needUpdateShadow](UIRenderAble.md#needupdateshadow)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L14)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+UIRenderAble.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIRenderAble.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIRenderAble.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+UIRenderAble.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIRenderAble.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIRenderAble.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### uiTransform
+
+• `get` **uiTransform**(): [`UITransform`](UITransform.md)
+
+#### Returns
+
+[`UITransform`](UITransform.md)
+
+#### Inherited from
+
+UIRenderAble.uiTransform
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L16)
+
+___
+
+### visible
+
+• `get` **visible**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIRenderAble.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L20)
+
+• `set` **visible**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIRenderAble.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L24)
+
+___
+
+### mainQuads
+
+• `get` **mainQuads**(): [`GUIQuad`](GUIQuad.md)[]
+
+#### Returns
+
+[`GUIQuad`](GUIQuad.md)[]
+
+#### Inherited from
+
+UIRenderAble.mainQuads
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L44)
+
+___
+
+### originSize
+
+• `get` **originSize**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITextField.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITextField.ts#L40)
+
+___
+
+### font
+
+• `get` **font**(): `string`
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITextField.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITextField.ts#L44)
+
+• `set` **font**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITextField.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITextField.ts#L48)
+
+___
+
+### fontSize
+
+• `get` **fontSize**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITextField.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITextField.ts#L52)
+
+• `set` **fontSize**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITextField.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITextField.ts#L56)
+
+___
+
+### text
+
+• `get` **text**(): `string`
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITextField.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITextField.ts#L63)
+
+• `set` **text**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITextField.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITextField.ts#L67)
+
+___
+
+### color
+
+• `get` **color**(): [`Color`](Color.md)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITextField.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITextField.ts#L117)
+
+• `set` **color**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITextField.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITextField.ts#L121)
+
+___
+
+### alignment
+
+• `get` **alignment**(): [`TextAnchor`](../enums/TextAnchor.md)
+
+#### Returns
+
+[`TextAnchor`](../enums/TextAnchor.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITextField.ts:129](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITextField.ts#L129)
+
+• `set` **alignment**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`TextAnchor`](../enums/TextAnchor.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITextField.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITextField.ts#L133)
+
+___
+
+### lineSpacing
+
+• `get` **lineSpacing**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITextField.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITextField.ts#L140)
+
+• `set` **lineSpacing**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITextField.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITextField.ts#L144)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[stop](UIRenderAble.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onEnable](UIRenderAble.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onDisable](UIRenderAble.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onUpdate](UIRenderAble.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onLateUpdate](UIRenderAble.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onBeforeUpdate](UIRenderAble.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onCompute](UIRenderAble.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onGraphic](UIRenderAble.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onParentChange](UIRenderAble.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onAddChild](UIRenderAble.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[onRemoveChild](UIRenderAble.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[beforeDestroy](UIRenderAble.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[init](UIRenderAble.md#init)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L16)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+release this component
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[destroy](UIRenderAble.md#destroy)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L21)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[start](UIRenderAble.md#start)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L30)
+
+___
+
+### setShadowRenderer
+
+▸ **setShadowRenderer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIRenderAble`](UIRenderAble.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[setShadowRenderer](UIRenderAble.md#setshadowrenderer)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L48)
+
+___
+
+### setShadowSource
+
+▸ **setShadowSource**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIRenderAble`](UIRenderAble.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[setShadowSource](UIRenderAble.md#setshadowsource)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L52)
+
+___
+
+### getShadowRender
+
+▸ **getShadowRender**(): [`UIRenderAble`](UIRenderAble.md)
+
+#### Returns
+
+[`UIRenderAble`](UIRenderAble.md)
+
+#### Inherited from
+
+[UIRenderAble](UIRenderAble.md).[getShadowRender](UIRenderAble.md#getshadowrender)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L56)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIRenderAble](UIRenderAble.md).[cloneTo](UIRenderAble.md#cloneto)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITextField.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITextField.ts#L23)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+[UIRenderAble](UIRenderAble.md).[copyComponent](UIRenderAble.md#copycomponent)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITextField.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITextField.ts#L28)
diff --git a/docs/api/classes/UITransform.md b/docs/api/classes/UITransform.md
new file mode 100644
index 00000000..b19e6a70
--- /dev/null
+++ b/docs/api/classes/UITransform.md
@@ -0,0 +1,1097 @@
+# Class: UITransform
+
+The component for gui, holding information such as size, scaling, position, etc
+
+## Hierarchy
+
+- [`ComponentBase`](ComponentBase.md)
+
+ ↳ **`UITransform`**
+
+### Constructors
+
+- [constructor](UITransform.md#constructor)
+
+### Properties
+
+- [object3D](UITransform.md#object3d)
+- [isDestroyed](UITransform.md#isdestroyed)
+- [useParentPivot](UITransform.md#useparentpivot)
+- [parent](UITransform.md#parent)
+- [pivotX](UITransform.md#pivotx)
+- [pivotY](UITransform.md#pivoty)
+- [needUpdateQuads](UITransform.md#needupdatequads)
+
+### Accessors
+
+- [eventDispatcher](UITransform.md#eventdispatcher)
+- [isStart](UITransform.md#isstart)
+- [transform](UITransform.md#transform)
+- [enable](UITransform.md#enable)
+- [uiInteractiveList](UITransform.md#uiinteractivelist)
+- [globalVisible](UITransform.md#globalvisible)
+- [visible](UITransform.md#visible)
+- [width](UITransform.md#width)
+- [height](UITransform.md#height)
+- [x](UITransform.md#x)
+- [y](UITransform.md#y)
+- [z](UITransform.md#z)
+- [scaleX](UITransform.md#scalex)
+- [scaleY](UITransform.md#scaley)
+- [scaleZ](UITransform.md#scalez)
+- [onChange](UITransform.md#onchange)
+
+### Methods
+
+- [start](UITransform.md#start)
+- [stop](UITransform.md#stop)
+- [onUpdate](UITransform.md#onupdate)
+- [onLateUpdate](UITransform.md#onlateupdate)
+- [onBeforeUpdate](UITransform.md#onbeforeupdate)
+- [onCompute](UITransform.md#oncompute)
+- [onGraphic](UITransform.md#ongraphic)
+- [onAddChild](UITransform.md#onaddchild)
+- [onRemoveChild](UITransform.md#onremovechild)
+- [copyComponent](UITransform.md#copycomponent)
+- [destroy](UITransform.md#destroy)
+- [init](UITransform.md#init)
+- [addUIInteractive](UITransform.md#adduiinteractive)
+- [removeUIInteractive](UITransform.md#removeuiinteractive)
+- [onParentChange](UITransform.md#onparentchange)
+- [resize](UITransform.md#resize)
+- [setXY](UITransform.md#setxy)
+- [onEnable](UITransform.md#onenable)
+- [onDisable](UITransform.md#ondisable)
+- [setNeedUpdateUIPanel](UITransform.md#setneedupdateuipanel)
+- [cloneTo](UITransform.md#cloneto)
+- [matrix](UITransform.md#matrix)
+- [getWorldMatrix](UITransform.md#getworldmatrix)
+- [beforeDestroy](UITransform.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new UITransform**(): [`UITransform`](UITransform.md)
+
+#### Returns
+
+[`UITransform`](UITransform.md)
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[constructor](ComponentBase.md#constructor)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L31)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[object3D](ComponentBase.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[isDestroyed](ComponentBase.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### useParentPivot
+
+• **useParentPivot**: `boolean` = `false`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L16)
+
+___
+
+### parent
+
+• **parent**: [`UITransform`](UITransform.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L17)
+
+___
+
+### pivotX
+
+• **pivotX**: `number` = `0.5`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L18)
+
+___
+
+### pivotY
+
+• **pivotY**: `number` = `0.5`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L19)
+
+___
+
+### needUpdateQuads
+
+• **needUpdateQuads**: `boolean` = `true`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L200)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### uiInteractiveList
+
+• `get` **uiInteractiveList**(): [`IUIInteractive`](../interfaces/IUIInteractive.md)[]
+
+#### Returns
+
+[`IUIInteractive`](../interfaces/IUIInteractive.md)[]
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L27)
+
+___
+
+### globalVisible
+
+• `get` **globalVisible**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L64)
+
+___
+
+### visible
+
+• `get` **visible**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L76)
+
+• `set` **visible**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L68)
+
+___
+
+### width
+
+• `get` **width**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:108](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L108)
+
+___
+
+### height
+
+• `get` **height**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L112)
+
+___
+
+### x
+
+• `get` **x**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:129](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L129)
+
+• `set` **x**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L133)
+
+___
+
+### y
+
+• `get` **y**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L140)
+
+• `set` **y**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L144)
+
+___
+
+### z
+
+• `get` **z**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:158](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L158)
+
+• `set` **z**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:162](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L162)
+
+___
+
+### scaleX
+
+• `get` **scaleX**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:169](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L169)
+
+• `set` **scaleX**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L173)
+
+___
+
+### scaleY
+
+• `get` **scaleY**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L178)
+
+• `set` **scaleY**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L182)
+
+___
+
+### scaleZ
+
+• `get` **scaleZ**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:187](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L187)
+
+• `set` **scaleZ**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L191)
+
+___
+
+### onChange
+
+• `get` **onChange**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:202](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L202)
+
+• `set` **onChange**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:208](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L208)
+
+## Methods
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[start](ComponentBase.md#start)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[stop](ComponentBase.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onUpdate](ComponentBase.md#onupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onLateUpdate](ComponentBase.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onBeforeUpdate](ComponentBase.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onCompute](ComponentBase.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onGraphic](ComponentBase.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onAddChild](ComponentBase.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[onRemoveChild](ComponentBase.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[copyComponent](ComponentBase.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release this component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ComponentBase](ComponentBase.md).[destroy](ComponentBase.md#destroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L207)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[init](ComponentBase.md#init)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L37)
+
+___
+
+### addUIInteractive
+
+▸ **addUIInteractive**(`item`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `item` | [`IUIInteractive`](../interfaces/IUIInteractive.md) |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L47)
+
+___
+
+### removeUIInteractive
+
+▸ **removeUIInteractive**(`item`): [`IUIInteractive`](../interfaces/IUIInteractive.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `item` | [`IUIInteractive`](../interfaces/IUIInteractive.md) |
+
+#### Returns
+
+[`IUIInteractive`](../interfaces/IUIInteractive.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L53)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[onParentChange](ComponentBase.md#onparentchange)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L102)
+
+___
+
+### resize
+
+▸ **resize**(`width`, `height`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `width` | `number` |
+| `height` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L116)
+
+___
+
+### setXY
+
+▸ **setXY**(`x`, `y`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:151](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L151)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[onEnable](ComponentBase.md#onenable)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:223](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L223)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[onDisable](ComponentBase.md#ondisable)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L228)
+
+___
+
+### setNeedUpdateUIPanel
+
+▸ **setNeedUpdateUIPanel**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L233)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[cloneTo](ComponentBase.md#cloneto)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:244](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L244)
+
+___
+
+### matrix
+
+▸ **matrix**(): [`Matrix3`](Matrix3.md)
+
+#### Returns
+
+[`Matrix3`](Matrix3.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:260](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L260)
+
+___
+
+### getWorldMatrix
+
+▸ **getWorldMatrix**(): [`Matrix3`](Matrix3.md)
+
+#### Returns
+
+[`Matrix3`](Matrix3.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:286](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L286)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[ComponentBase](ComponentBase.md).[beforeDestroy](ComponentBase.md#beforedestroy)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UITransform.ts:300](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UITransform.ts#L300)
diff --git a/docs/api/classes/Uint8ArrayTexture.md b/docs/api/classes/Uint8ArrayTexture.md
new file mode 100644
index 00000000..3363ca44
--- /dev/null
+++ b/docs/api/classes/Uint8ArrayTexture.md
@@ -0,0 +1,1137 @@
+# Class: Uint8ArrayTexture
+
+create texture by number array, which format is uint8
+
+## Hierarchy
+
+- [`Texture`](Texture.md)
+
+ ↳ **`Uint8ArrayTexture`**
+
+### Constructors
+
+- [constructor](Uint8ArrayTexture.md#constructor)
+
+### Properties
+
+- [name](Uint8ArrayTexture.md#name)
+- [url](Uint8ArrayTexture.md#url)
+- [pid](Uint8ArrayTexture.md#pid)
+- [view](Uint8ArrayTexture.md#view)
+- [gpuSampler](Uint8ArrayTexture.md#gpusampler)
+- [gpuSampler\_comparison](Uint8ArrayTexture.md#gpusampler_comparison)
+- [format](Uint8ArrayTexture.md#format)
+- [usage](Uint8ArrayTexture.md#usage)
+- [width](Uint8ArrayTexture.md#width)
+- [height](Uint8ArrayTexture.md#height)
+- [depthOrArrayLayers](Uint8ArrayTexture.md#depthorarraylayers)
+- [numberLayer](Uint8ArrayTexture.md#numberlayer)
+- [viewDescriptor](Uint8ArrayTexture.md#viewdescriptor)
+- [textureDescriptor](Uint8ArrayTexture.md#texturedescriptor)
+- [visibility](Uint8ArrayTexture.md#visibility)
+- [textureBindingLayout](Uint8ArrayTexture.md#texturebindinglayout)
+- [samplerBindingLayout](Uint8ArrayTexture.md#samplerbindinglayout)
+- [sampler\_comparisonBindingLayout](Uint8ArrayTexture.md#sampler_comparisonbindinglayout)
+- [flipY](Uint8ArrayTexture.md#flipy)
+- [isVideoTexture](Uint8ArrayTexture.md#isvideotexture)
+- [isHDRTexture](Uint8ArrayTexture.md#ishdrtexture)
+- [mipmapCount](Uint8ArrayTexture.md#mipmapcount)
+
+### Accessors
+
+- [useMipmap](Uint8ArrayTexture.md#usemipmap)
+- [sourceImageData](Uint8ArrayTexture.md#sourceimagedata)
+- [addressModeU](Uint8ArrayTexture.md#addressmodeu)
+- [addressModeV](Uint8ArrayTexture.md#addressmodev)
+- [addressModeW](Uint8ArrayTexture.md#addressmodew)
+- [magFilter](Uint8ArrayTexture.md#magfilter)
+- [minFilter](Uint8ArrayTexture.md#minfilter)
+- [mipmapFilter](Uint8ArrayTexture.md#mipmapfilter)
+- [lodMinClamp](Uint8ArrayTexture.md#lodminclamp)
+- [lodMaxClamp](Uint8ArrayTexture.md#lodmaxclamp)
+- [compare](Uint8ArrayTexture.md#compare)
+- [maxAnisotropy](Uint8ArrayTexture.md#maxanisotropy)
+
+### Methods
+
+- [init](Uint8ArrayTexture.md#init)
+- [getMipmapCount](Uint8ArrayTexture.md#getmipmapcount)
+- [getGPUTexture](Uint8ArrayTexture.md#getgputexture)
+- [getGPUView](Uint8ArrayTexture.md#getgpuview)
+- [bindStateChange](Uint8ArrayTexture.md#bindstatechange)
+- [unBindStateChange](Uint8ArrayTexture.md#unbindstatechange)
+- [destroy](Uint8ArrayTexture.md#destroy)
+- [delayDestroyTexture](Uint8ArrayTexture.md#delaydestroytexture)
+- [destroyTexture](Uint8ArrayTexture.md#destroytexture)
+- [create](Uint8ArrayTexture.md#create)
+- [updateTexture](Uint8ArrayTexture.md#updatetexture)
+
+## Constructors
+
+### constructor
+
+• **new Uint8ArrayTexture**(`width?`, `height?`, `numberLayer?`): [`Uint8ArrayTexture`](Uint8ArrayTexture.md)
+
+Create a texture2D
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `width` | `number` | `32` | size of texture width |
+| `height` | `number` | `32` | height of texture width |
+| `numberLayer` | `number` | `1` | number layer of texture |
+
+#### Returns
+
+[`Uint8ArrayTexture`](Uint8ArrayTexture.md)
+
+#### Inherited from
+
+[Texture](Texture.md).[constructor](Texture.md#constructor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:202](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L202)
+
+## Properties
+
+### name
+
+• **name**: `string`
+
+name of texture
+
+#### Inherited from
+
+[Texture](Texture.md).[name](Texture.md#name)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L15)
+
+___
+
+### url
+
+• **url**: `string`
+
+source url
+
+#### Inherited from
+
+[Texture](Texture.md).[url](Texture.md#url)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L20)
+
+___
+
+### pid
+
+• **pid**: `number`
+
+Return index in texture array
+
+#### Inherited from
+
+[Texture](Texture.md).[pid](Texture.md#pid)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L30)
+
+___
+
+### view
+
+• **view**: `GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView
+
+#### Inherited from
+
+[Texture](Texture.md).[view](Texture.md#view)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L35)
+
+___
+
+### gpuSampler
+
+• **gpuSampler**: `GPUSampler`
+
+GPUSampler
+
+#### Inherited from
+
+[Texture](Texture.md).[gpuSampler](Texture.md#gpusampler)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L40)
+
+___
+
+### gpuSampler\_comparison
+
+• **gpuSampler\_comparison**: `GPUSampler`
+
+GPUSampler for comparison
+
+#### Inherited from
+
+[Texture](Texture.md).[gpuSampler_comparison](Texture.md#gpusampler_comparison)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L45)
+
+___
+
+### format
+
+• **format**: `GPUTextureFormat`
+
+GPUTextureFormat
+
+#### Inherited from
+
+[Texture](Texture.md).[format](Texture.md#format)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L50)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+GPUTextureUsage
+
+#### Inherited from
+
+[Texture](Texture.md).[usage](Texture.md#usage)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L55)
+
+___
+
+### width
+
+• **width**: `number` = `4`
+
+texture width
+
+#### Inherited from
+
+[Texture](Texture.md).[width](Texture.md#width)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:60](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L60)
+
+___
+
+### height
+
+• **height**: `number` = `4`
+
+texture height
+
+#### Inherited from
+
+[Texture](Texture.md).[height](Texture.md#height)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L65)
+
+___
+
+### depthOrArrayLayers
+
+• **depthOrArrayLayers**: `number` = `1`
+
+depth or layers, default value is 1
+
+#### Inherited from
+
+[Texture](Texture.md).[depthOrArrayLayers](Texture.md#depthorarraylayers)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L70)
+
+___
+
+### numberLayer
+
+• **numberLayer**: `number` = `1`
+
+depth or layers, default value is 1
+
+#### Inherited from
+
+[Texture](Texture.md).[numberLayer](Texture.md#numberlayer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L75)
+
+___
+
+### viewDescriptor
+
+• **viewDescriptor**: `GPUTextureViewDescriptor`
+
+GPUTextureViewDescriptor
+
+#### Inherited from
+
+[Texture](Texture.md).[viewDescriptor](Texture.md#viewdescriptor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L80)
+
+___
+
+### textureDescriptor
+
+• **textureDescriptor**: `GPUTextureDescriptor`
+
+GPUTextureDescriptor
+
+#### Inherited from
+
+[Texture](Texture.md).[textureDescriptor](Texture.md#texturedescriptor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L85)
+
+___
+
+### visibility
+
+• **visibility**: `number`
+
+GPUShaderStage
+
+#### Inherited from
+
+[Texture](Texture.md).[visibility](Texture.md#visibility)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L90)
+
+___
+
+### textureBindingLayout
+
+• **textureBindingLayout**: `GPUTextureBindingLayout`
+
+GPUTextureBindingLayout, contains viewDimension and multisampled
+
+#### Inherited from
+
+[Texture](Texture.md).[textureBindingLayout](Texture.md#texturebindinglayout)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L96)
+
+___
+
+### samplerBindingLayout
+
+• **samplerBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+[Texture](Texture.md).[samplerBindingLayout](Texture.md#samplerbindinglayout)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L104)
+
+___
+
+### sampler\_comparisonBindingLayout
+
+• **sampler\_comparisonBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+[Texture](Texture.md).[sampler_comparisonBindingLayout](Texture.md#sampler_comparisonbindinglayout)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L111)
+
+___
+
+### flipY
+
+• **flipY**: `boolean`
+
+whether to flip the image on the y-axis
+
+#### Inherited from
+
+[Texture](Texture.md).[flipY](Texture.md#flipy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L118)
+
+___
+
+### isVideoTexture
+
+• `Optional` **isVideoTexture**: `boolean`
+
+whether is video texture
+
+#### Inherited from
+
+[Texture](Texture.md).[isVideoTexture](Texture.md#isvideotexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L123)
+
+___
+
+### isHDRTexture
+
+• `Optional` **isHDRTexture**: `boolean`
+
+#### Inherited from
+
+[Texture](Texture.md).[isHDRTexture](Texture.md#ishdrtexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L124)
+
+___
+
+### mipmapCount
+
+• **mipmapCount**: `number` = `1`
+
+mipmap Count, default value is 1
+
+#### Inherited from
+
+[Texture](Texture.md).[mipmapCount](Texture.md#mipmapcount)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L191)
+
+## Accessors
+
+### useMipmap
+
+• `get` **useMipmap**(): `boolean`
+
+enable/disable mipmap
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Texture.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L315)
+
+• `set` **useMipmap**(`value`): `void`
+
+get mipmap
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:322](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L322)
+
+___
+
+### sourceImageData
+
+• `get` **sourceImageData**(): `HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Returns
+
+`HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Inherited from
+
+Texture.sourceImageData
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:353](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L353)
+
+___
+
+### addressModeU
+
+• `get` **addressModeU**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+Texture.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L438)
+
+• `set` **addressModeU**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:442](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L442)
+
+___
+
+### addressModeV
+
+• `get` **addressModeV**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+Texture.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:449](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L449)
+
+• `set` **addressModeV**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:453](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L453)
+
+___
+
+### addressModeW
+
+• `get` **addressModeW**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+Texture.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:460](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L460)
+
+• `set` **addressModeW**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:464](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L464)
+
+___
+
+### magFilter
+
+• `get` **magFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+Texture.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:471](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L471)
+
+• `set` **magFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:475](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L475)
+
+___
+
+### minFilter
+
+• `get` **minFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+Texture.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:482](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L482)
+
+• `set` **minFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L486)
+
+___
+
+### mipmapFilter
+
+• `get` **mipmapFilter**(): `GPUMipmapFilterMode`
+
+#### Returns
+
+`GPUMipmapFilterMode`
+
+#### Inherited from
+
+Texture.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:493](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L493)
+
+• `set` **mipmapFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUMipmapFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:497](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L497)
+
+___
+
+### lodMinClamp
+
+• `get` **lodMinClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Texture.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:504](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L504)
+
+• `set` **lodMinClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:508](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L508)
+
+___
+
+### lodMaxClamp
+
+• `get` **lodMaxClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Texture.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:515](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L515)
+
+• `set` **lodMaxClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L519)
+
+___
+
+### compare
+
+• `get` **compare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Texture.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:526](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L526)
+
+• `set` **compare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:530](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L530)
+
+___
+
+### maxAnisotropy
+
+• `get` **maxAnisotropy**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Texture.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:537](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L537)
+
+• `set` **maxAnisotropy**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:541](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L541)
+
+## Methods
+
+### init
+
+▸ **init**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[Texture](Texture.md).[init](Texture.md#init)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L215)
+
+___
+
+### getMipmapCount
+
+▸ **getMipmapCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Texture](Texture.md).[getMipmapCount](Texture.md#getmipmapcount)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:357](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L357)
+
+___
+
+### getGPUTexture
+
+▸ **getGPUTexture**(): `GPUTexture`
+
+create or get GPUTexture
+
+#### Returns
+
+`GPUTexture`
+
+GPUTexture
+
+#### Inherited from
+
+[Texture](Texture.md).[getGPUTexture](Texture.md#getgputexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:384](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L384)
+
+___
+
+### getGPUView
+
+▸ **getGPUView**(`index?`): `GPUTextureView` \| `GPUExternalTexture`
+
+create or get GPUTextureView
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `index` | `number` | `0` |
+
+#### Returns
+
+`GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView | GPUExternalTexture
+
+#### Inherited from
+
+[Texture](Texture.md).[getGPUView](Texture.md#getgpuview)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:395](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L395)
+
+___
+
+### bindStateChange
+
+▸ **bindStateChange**(`fun`, `ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `fun` | `Function` |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Texture](Texture.md).[bindStateChange](Texture.md#bindstatechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L408)
+
+___
+
+### unBindStateChange
+
+▸ **unBindStateChange**(`ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Texture](Texture.md).[unBindStateChange](Texture.md#unbindstatechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L412)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release the texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Texture](Texture.md).[destroy](Texture.md#destroy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:426](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L426)
+
+___
+
+### delayDestroyTexture
+
+▸ **delayDestroyTexture**(`tex`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tex` | `GPUTexture` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Texture](Texture.md).[delayDestroyTexture](Texture.md#delaydestroytexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:549](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L549)
+
+___
+
+### destroyTexture
+
+▸ **destroyTexture**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Texture](Texture.md).[destroyTexture](Texture.md#destroytexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:555](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L555)
+
+___
+
+### create
+
+▸ **create**(`width`, `height`, `data`, `useMipmap?`): `this`
+
+create texture by number array, which format is uint8
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `width` | `number` | `undefined` | width of texture |
+| `height` | `number` | `undefined` | height of texture |
+| `data` | `Uint8Array` | `undefined` | uint8 array |
+| `useMipmap` | `boolean` | `false` | whether or not gen mipmap |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/textures/Uint8ArrayTexture.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/textures/Uint8ArrayTexture.ts#L22)
+
+___
+
+### updateTexture
+
+▸ **updateTexture**(`width`, `height`, `data`): `void`
+
+validate the change of this texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `width` | `number` |
+| `height` | `number` |
+| `data` | `Uint8Array` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/textures/Uint8ArrayTexture.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/textures/Uint8ArrayTexture.ts#L63)
diff --git a/docs/api/classes/UnLitMaterial.md b/docs/api/classes/UnLitMaterial.md
new file mode 100644
index 00000000..9a94c3f4
--- /dev/null
+++ b/docs/api/classes/UnLitMaterial.md
@@ -0,0 +1,1168 @@
+# Class: UnLitMaterial
+
+Unlit Mateiral
+A non glossy surface material without specular highlights.
+
+## Hierarchy
+
+- [`Material`](Material.md)
+
+ ↳ **`UnLitMaterial`**
+
+### Constructors
+
+- [constructor](UnLitMaterial.md#constructor)
+
+### Properties
+
+- [instanceID](UnLitMaterial.md#instanceid)
+- [name](UnLitMaterial.md#name)
+- [enable](UnLitMaterial.md#enable)
+
+### Accessors
+
+- [shader](UnLitMaterial.md#shader)
+- [doubleSide](UnLitMaterial.md#doubleside)
+- [castShadow](UnLitMaterial.md#castshadow)
+- [acceptShadow](UnLitMaterial.md#acceptshadow)
+- [castReflection](UnLitMaterial.md#castreflection)
+- [blendMode](UnLitMaterial.md#blendmode)
+- [depthCompare](UnLitMaterial.md#depthcompare)
+- [transparent](UnLitMaterial.md#transparent)
+- [cullMode](UnLitMaterial.md#cullmode)
+- [depthWriteEnabled](UnLitMaterial.md#depthwriteenabled)
+- [useBillboard](UnLitMaterial.md#usebillboard)
+- [baseMap](UnLitMaterial.md#basemap)
+- [baseColor](UnLitMaterial.md#basecolor)
+- [envMap](UnLitMaterial.md#envmap)
+
+### Methods
+
+- [getPass](UnLitMaterial.md#getpass)
+- [getAllPass](UnLitMaterial.md#getallpass)
+- [clone](UnLitMaterial.md#clone)
+- [destroy](UnLitMaterial.md#destroy)
+- [setDefine](UnLitMaterial.md#setdefine)
+- [setTexture](UnLitMaterial.md#settexture)
+- [setStorageBuffer](UnLitMaterial.md#setstoragebuffer)
+- [setUniformBuffer](UnLitMaterial.md#setuniformbuffer)
+- [setUniformFloat](UnLitMaterial.md#setuniformfloat)
+- [setUniformVector2](UnLitMaterial.md#setuniformvector2)
+- [setUniformVector3](UnLitMaterial.md#setuniformvector3)
+- [setUniformVector4](UnLitMaterial.md#setuniformvector4)
+- [setUniformColor](UnLitMaterial.md#setuniformcolor)
+- [getUniformFloat](UnLitMaterial.md#getuniformfloat)
+- [getUniformV2](UnLitMaterial.md#getuniformv2)
+- [getUniformV3](UnLitMaterial.md#getuniformv3)
+- [getUniformV4](UnLitMaterial.md#getuniformv4)
+- [getUniformColor](UnLitMaterial.md#getuniformcolor)
+- [getTexture](UnLitMaterial.md#gettexture)
+- [getStorageBuffer](UnLitMaterial.md#getstoragebuffer)
+- [getStructStorageBuffer](UnLitMaterial.md#getstructstoragebuffer)
+- [getUniformBuffer](UnLitMaterial.md#getuniformbuffer)
+- [applyUniform](UnLitMaterial.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new UnLitMaterial**(): [`UnLitMaterial`](UnLitMaterial.md)
+
+#### Returns
+
+[`UnLitMaterial`](UnLitMaterial.md)
+
+#### Overrides
+
+[Material](Material.md).[constructor](Material.md#constructor)
+
+#### Defined in
+
+[src/materials/UnLitMaterial.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/UnLitMaterial.ts#L19)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+Material Unique Identifier
+
+#### Inherited from
+
+[Material](Material.md).[instanceID](Material.md#instanceid)
+
+#### Defined in
+
+[src/materials/Material.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L19)
+
+___
+
+### name
+
+• **name**: `string`
+
+name of this material
+
+#### Inherited from
+
+[Material](Material.md).[name](Material.md#name)
+
+#### Defined in
+
+[src/materials/Material.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L25)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+[Material](Material.md).[enable](Material.md#enable)
+
+#### Defined in
+
+[src/materials/Material.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L27)
+
+## Accessors
+
+### shader
+
+• `get` **shader**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L41)
+
+• `set` **shader**(`shader`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shader` | [`Shader`](Shader.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L36)
+
+___
+
+### doubleSide
+
+• `get` **doubleSide**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L45)
+
+• `set` **doubleSide**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L49)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L53)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L57)
+
+___
+
+### acceptShadow
+
+• `get` **acceptShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L64)
+
+• `set` **acceptShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L68)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L77)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L81)
+
+___
+
+### blendMode
+
+• `get` **blendMode**(): [`BlendMode`](../enums/BlendMode.md)
+
+#### Returns
+
+[`BlendMode`](../enums/BlendMode.md)
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L85)
+
+• `set` **blendMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`BlendMode`](../enums/BlendMode.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L89)
+
+___
+
+### depthCompare
+
+• `get` **depthCompare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L93)
+
+• `set` **depthCompare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L97)
+
+___
+
+### transparent
+
+• `get` **transparent**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L102)
+
+• `set` **transparent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L106)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L113)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L117)
+
+___
+
+### depthWriteEnabled
+
+• `get` **depthWriteEnabled**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L128)
+
+• `set` **depthWriteEnabled**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L132)
+
+___
+
+### useBillboard
+
+• `set` **useBillboard**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.useBillboard
+
+#### Defined in
+
+[src/materials/Material.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L136)
+
+___
+
+### baseMap
+
+• `get` **baseMap**(): [`Texture`](Texture.md)
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/materials/UnLitMaterial.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/materials/UnLitMaterial.ts#L30)
+
+• `set` **baseMap**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/UnLitMaterial.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/materials/UnLitMaterial.ts#L26)
+
+___
+
+### baseColor
+
+• `get` **baseColor**(): [`Color`](Color.md)
+
+get base color (tint color)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/materials/UnLitMaterial.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/materials/UnLitMaterial.ts#L44)
+
+• `set` **baseColor**(`color`): `void`
+
+set base color (tint color)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `color` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/UnLitMaterial.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/materials/UnLitMaterial.ts#L37)
+
+___
+
+### envMap
+
+• `set` **envMap**(`texture`): `void`
+
+set environment texture, usually referring to cubemap
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/UnLitMaterial.ts:51](https://github.com/Orillusion/orillusion/blob/main/src/materials/UnLitMaterial.ts#L51)
+
+## Methods
+
+### getPass
+
+▸ **getPass**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get render pass by renderType
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getPass](Material.md#getpass)
+
+#### Defined in
+
+[src/materials/Material.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L145)
+
+___
+
+### getAllPass
+
+▸ **getAllPass**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get all color render pass
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getAllPass](Material.md#getallpass)
+
+#### Defined in
+
+[src/materials/Material.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L153)
+
+___
+
+### clone
+
+▸ **clone**(): [`Material`](Material.md)
+
+clone one material
+
+#### Returns
+
+[`Material`](Material.md)
+
+Material
+
+#### Inherited from
+
+[Material](Material.md).[clone](Material.md#clone)
+
+#### Defined in
+
+[src/materials/Material.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L161)
+
+___
+
+### destroy
+
+▸ **destroy**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[destroy](Material.md#destroy)
+
+#### Defined in
+
+[src/materials/Material.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L168)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`define`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `define` | `string` |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setDefine](Material.md#setdefine)
+
+#### Defined in
+
+[src/materials/Material.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L174)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`propertyName`, `texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setTexture](Material.md#settexture)
+
+#### Defined in
+
+[src/materials/Material.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L178)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setStorageBuffer](Material.md#setstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L182)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformBuffer](Material.md#setuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L186)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformFloat](Material.md#setuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L191)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector2](Material.md#setuniformvector2)
+
+#### Defined in
+
+[src/materials/Material.ts:195](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L195)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector3](Material.md#setuniformvector3)
+
+#### Defined in
+
+[src/materials/Material.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L199)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector4](Material.md#setuniformvector4)
+
+#### Defined in
+
+[src/materials/Material.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L203)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformColor](Material.md#setuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L207)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`str`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformFloat](Material.md#getuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L211)
+
+___
+
+### getUniformV2
+
+▸ **getUniformV2**(`str`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV2](Material.md#getuniformv2)
+
+#### Defined in
+
+[src/materials/Material.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L215)
+
+___
+
+### getUniformV3
+
+▸ **getUniformV3**(`str`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV3](Material.md#getuniformv3)
+
+#### Defined in
+
+[src/materials/Material.ts:219](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L219)
+
+___
+
+### getUniformV4
+
+▸ **getUniformV4**(`str`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV4](Material.md#getuniformv4)
+
+#### Defined in
+
+[src/materials/Material.ts:223](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L223)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`str`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformColor](Material.md#getuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L227)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`str`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Material](Material.md).[getTexture](Material.md#gettexture)
+
+#### Defined in
+
+[src/materials/Material.ts:231](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L231)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`str`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Material](Material.md).[getStorageBuffer](Material.md#getstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:235](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L235)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getStructStorageBuffer](Material.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:239](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L239)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformBuffer](Material.md#getuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:243](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L243)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[applyUniform](Material.md#applyuniform)
+
+#### Defined in
+
+[src/materials/Material.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L247)
diff --git a/docs/api/classes/UnLitShader.md b/docs/api/classes/UnLitShader.md
new file mode 100644
index 00000000..6507b8cd
--- /dev/null
+++ b/docs/api/classes/UnLitShader.md
@@ -0,0 +1,1148 @@
+# Class: UnLitShader
+
+## Hierarchy
+
+- [`Shader`](Shader.md)
+
+ ↳ **`UnLitShader`**
+
+### Constructors
+
+- [constructor](UnLitShader.md#constructor)
+
+### Properties
+
+- [computes](UnLitShader.md#computes)
+- [passShader](UnLitShader.md#passshader)
+
+### Accessors
+
+- [\_MainTex](UnLitShader.md#_maintex)
+- [\_BumpMap](UnLitShader.md#_bumpmap)
+- [\_MaskTex](UnLitShader.md#_masktex)
+- [\_UVTransform](UnLitShader.md#_uvtransform)
+- [\_Metallic](UnLitShader.md#_metallic)
+- [\_Roughness](UnLitShader.md#_roughness)
+- [\_MainColor](UnLitShader.md#_maincolor)
+- [\_AlphaCutoff](UnLitShader.md#_alphacutoff)
+- [\_DoubleSidedEnable](UnLitShader.md#_doublesidedenable)
+- [\_SurfaceType](UnLitShader.md#_surfacetype)
+- [\_AlphaCutoffEnable](UnLitShader.md#_alphacutoffenable)
+
+### Methods
+
+- [addRenderPass](UnLitShader.md#addrenderpass)
+- [removeShader](UnLitShader.md#removeshader)
+- [removeShaderByIndex](UnLitShader.md#removeshaderbyindex)
+- [getSubShaders](UnLitShader.md#getsubshaders)
+- [hasSubShaders](UnLitShader.md#hassubshaders)
+- [getDefaultShaders](UnLitShader.md#getdefaultshaders)
+- [getDefaultColorShader](UnLitShader.md#getdefaultcolorshader)
+- [setDefine](UnLitShader.md#setdefine)
+- [hasDefine](UnLitShader.md#hasdefine)
+- [deleteDefine](UnLitShader.md#deletedefine)
+- [setUniform](UnLitShader.md#setuniform)
+- [setUniformFloat](UnLitShader.md#setuniformfloat)
+- [setUniformVector2](UnLitShader.md#setuniformvector2)
+- [setUniformVector3](UnLitShader.md#setuniformvector3)
+- [setUniformVector4](UnLitShader.md#setuniformvector4)
+- [setUniformColor](UnLitShader.md#setuniformcolor)
+- [getUniform](UnLitShader.md#getuniform)
+- [getUniformFloat](UnLitShader.md#getuniformfloat)
+- [getUniformVector2](UnLitShader.md#getuniformvector2)
+- [getUniformVector3](UnLitShader.md#getuniformvector3)
+- [getUniformVector4](UnLitShader.md#getuniformvector4)
+- [getUniformColor](UnLitShader.md#getuniformcolor)
+- [setTexture](UnLitShader.md#settexture)
+- [getTexture](UnLitShader.md#gettexture)
+- [setUniformBuffer](UnLitShader.md#setuniformbuffer)
+- [getUniformBuffer](UnLitShader.md#getuniformbuffer)
+- [setStorageBuffer](UnLitShader.md#setstoragebuffer)
+- [getStorageBuffer](UnLitShader.md#getstoragebuffer)
+- [setStructStorageBuffer](UnLitShader.md#setstructstoragebuffer)
+- [getStructStorageBuffer](UnLitShader.md#getstructstoragebuffer)
+- [noticeValueChange](UnLitShader.md#noticevaluechange)
+- [destroy](UnLitShader.md#destroy)
+- [clone](UnLitShader.md#clone)
+- [applyUniform](UnLitShader.md#applyuniform)
+- [setDefault](UnLitShader.md#setdefault)
+
+## Constructors
+
+### constructor
+
+• **new UnLitShader**(): [`UnLitShader`](UnLitShader.md)
+
+#### Returns
+
+[`UnLitShader`](UnLitShader.md)
+
+#### Overrides
+
+[Shader](Shader.md).[constructor](Shader.md#constructor)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitShader.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitShader.ts#L15)
+
+## Properties
+
+### computes
+
+• **computes**: [`RenderShaderCompute`](RenderShaderCompute.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[computes](Shader.md#computes)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L19)
+
+___
+
+### passShader
+
+• **passShader**: `Map`\<`PassType`, [`RenderShaderPass`](RenderShaderPass.md)[]\>
+
+#### Inherited from
+
+[Shader](Shader.md).[passShader](Shader.md#passshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L21)
+
+## Accessors
+
+### \_MainTex
+
+• `set` **_MainTex**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitShader.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitShader.ts#L43)
+
+___
+
+### \_BumpMap
+
+• `set` **_BumpMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitShader.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitShader.ts#L47)
+
+___
+
+### \_MaskTex
+
+• `set` **_MaskTex**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitShader.ts:51](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitShader.ts#L51)
+
+___
+
+### \_UVTransform
+
+• `set` **_UVTransform**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitShader.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitShader.ts#L55)
+
+___
+
+### \_Metallic
+
+• `set` **_Metallic**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitShader.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitShader.ts#L59)
+
+___
+
+### \_Roughness
+
+• `set` **_Roughness**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitShader.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitShader.ts#L63)
+
+___
+
+### \_MainColor
+
+• `set` **_MainColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitShader.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitShader.ts#L68)
+
+___
+
+### \_AlphaCutoff
+
+• `set` **_AlphaCutoff**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitShader.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitShader.ts#L72)
+
+___
+
+### \_DoubleSidedEnable
+
+• `set` **_DoubleSidedEnable**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitShader.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitShader.ts#L76)
+
+___
+
+### \_SurfaceType
+
+• `set` **_SurfaceType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitShader.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitShader.ts#L81)
+
+___
+
+### \_AlphaCutoffEnable
+
+• `set` **_AlphaCutoffEnable**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitShader.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitShader.ts#L90)
+
+## Methods
+
+### addRenderPass
+
+▸ **addRenderPass**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[addRenderPass](Shader.md#addrenderpass)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L28)
+
+___
+
+### removeShader
+
+▸ **removeShader**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShader](Shader.md#removeshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L38)
+
+___
+
+### removeShaderByIndex
+
+▸ **removeShaderByIndex**(`passType`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `passType` | `PassType` | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShaderByIndex](Shader.md#removeshaderbyindex)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L52)
+
+___
+
+### getSubShaders
+
+▸ **getSubShaders**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getSubShaders](Shader.md#getsubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L63)
+
+___
+
+### hasSubShaders
+
+▸ **hasSubShaders**(`passType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasSubShaders](Shader.md#hassubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L67)
+
+___
+
+### getDefaultShaders
+
+▸ **getDefaultShaders**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultShaders](Shader.md#getdefaultshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L72)
+
+___
+
+### getDefaultColorShader
+
+▸ **getDefaultColorShader**(): [`RenderShaderPass`](RenderShaderPass.md)
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultColorShader](Shader.md#getdefaultcolorshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L76)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setDefine](Shader.md#setdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L80)
+
+___
+
+### hasDefine
+
+▸ **hasDefine**(`arg0`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasDefine](Shader.md#hasdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L88)
+
+___
+
+### deleteDefine
+
+▸ **deleteDefine**(`arg0`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[deleteDefine](Shader.md#deletedefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L99)
+
+___
+
+### setUniform
+
+▸ **setUniform**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniform](Shader.md#setuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L107)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformFloat](Shader.md#setuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L115)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector2](Shader.md#setuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L123)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector3](Shader.md#setuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L131)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector4](Shader.md#setuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L139)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformColor](Shader.md#setuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L147)
+
+___
+
+### getUniform
+
+▸ **getUniform**(`arg0`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniform](Shader.md#getuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L155)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`arg0`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformFloat](Shader.md#getuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:159](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L159)
+
+___
+
+### getUniformVector2
+
+▸ **getUniformVector2**(`arg0`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector2](Shader.md#getuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:163](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L163)
+
+___
+
+### getUniformVector3
+
+▸ **getUniformVector3**(`arg0`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector3](Shader.md#getuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:167](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L167)
+
+___
+
+### getUniformVector4
+
+▸ **getUniformVector4**(`arg0`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector4](Shader.md#getuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:171](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L171)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`arg0`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformColor](Shader.md#getuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:175](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L175)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setTexture](Shader.md#settexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L179)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`arg0`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getTexture](Shader.md#gettexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:188](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L188)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformBuffer](Shader.md#setuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:192](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L192)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformBuffer](Shader.md#getuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L200)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStorageBuffer](Shader.md#setstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:204](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L204)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`arg0`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getStorageBuffer](Shader.md#getstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:212](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L212)
+
+___
+
+### setStructStorageBuffer
+
+▸ **setStructStorageBuffer**\<`T`\>(`arg0`, `arg1`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StructStorageGPUBuffer`](StructStorageGPUBuffer.md)\<`T`\> |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStructStorageBuffer](Shader.md#setstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L216)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getStructStorageBuffer](Shader.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L224)
+
+___
+
+### noticeValueChange
+
+▸ **noticeValueChange**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[noticeValueChange](Shader.md#noticevaluechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L228)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[destroy](Shader.md#destroy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:236](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L236)
+
+___
+
+### clone
+
+▸ **clone**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[clone](Shader.md#clone)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L240)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[applyUniform](Shader.md#applyuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:249](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L249)
+
+___
+
+### setDefault
+
+▸ **setDefault**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitShader.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitShader.ts#L36)
diff --git a/docs/api/classes/UnLitTexArrayMaterial.md b/docs/api/classes/UnLitTexArrayMaterial.md
new file mode 100644
index 00000000..189def45
--- /dev/null
+++ b/docs/api/classes/UnLitTexArrayMaterial.md
@@ -0,0 +1,1145 @@
+# Class: UnLitTexArrayMaterial
+
+Unlit Mateiral
+A non glossy surface material without specular highlights.
+
+## Hierarchy
+
+- [`Material`](Material.md)
+
+ ↳ **`UnLitTexArrayMaterial`**
+
+### Constructors
+
+- [constructor](UnLitTexArrayMaterial.md#constructor)
+
+### Properties
+
+- [instanceID](UnLitTexArrayMaterial.md#instanceid)
+- [name](UnLitTexArrayMaterial.md#name)
+- [enable](UnLitTexArrayMaterial.md#enable)
+
+### Accessors
+
+- [shader](UnLitTexArrayMaterial.md#shader)
+- [doubleSide](UnLitTexArrayMaterial.md#doubleside)
+- [castShadow](UnLitTexArrayMaterial.md#castshadow)
+- [acceptShadow](UnLitTexArrayMaterial.md#acceptshadow)
+- [castReflection](UnLitTexArrayMaterial.md#castreflection)
+- [blendMode](UnLitTexArrayMaterial.md#blendmode)
+- [depthCompare](UnLitTexArrayMaterial.md#depthcompare)
+- [transparent](UnLitTexArrayMaterial.md#transparent)
+- [cullMode](UnLitTexArrayMaterial.md#cullmode)
+- [depthWriteEnabled](UnLitTexArrayMaterial.md#depthwriteenabled)
+- [useBillboard](UnLitTexArrayMaterial.md#usebillboard)
+- [baseMap](UnLitTexArrayMaterial.md#basemap)
+- [baseColor](UnLitTexArrayMaterial.md#basecolor)
+
+### Methods
+
+- [getPass](UnLitTexArrayMaterial.md#getpass)
+- [getAllPass](UnLitTexArrayMaterial.md#getallpass)
+- [clone](UnLitTexArrayMaterial.md#clone)
+- [destroy](UnLitTexArrayMaterial.md#destroy)
+- [setDefine](UnLitTexArrayMaterial.md#setdefine)
+- [setTexture](UnLitTexArrayMaterial.md#settexture)
+- [setStorageBuffer](UnLitTexArrayMaterial.md#setstoragebuffer)
+- [setUniformBuffer](UnLitTexArrayMaterial.md#setuniformbuffer)
+- [setUniformFloat](UnLitTexArrayMaterial.md#setuniformfloat)
+- [setUniformVector2](UnLitTexArrayMaterial.md#setuniformvector2)
+- [setUniformVector3](UnLitTexArrayMaterial.md#setuniformvector3)
+- [setUniformVector4](UnLitTexArrayMaterial.md#setuniformvector4)
+- [setUniformColor](UnLitTexArrayMaterial.md#setuniformcolor)
+- [getUniformFloat](UnLitTexArrayMaterial.md#getuniformfloat)
+- [getUniformV2](UnLitTexArrayMaterial.md#getuniformv2)
+- [getUniformV3](UnLitTexArrayMaterial.md#getuniformv3)
+- [getUniformV4](UnLitTexArrayMaterial.md#getuniformv4)
+- [getUniformColor](UnLitTexArrayMaterial.md#getuniformcolor)
+- [getTexture](UnLitTexArrayMaterial.md#gettexture)
+- [getStorageBuffer](UnLitTexArrayMaterial.md#getstoragebuffer)
+- [getStructStorageBuffer](UnLitTexArrayMaterial.md#getstructstoragebuffer)
+- [getUniformBuffer](UnLitTexArrayMaterial.md#getuniformbuffer)
+- [applyUniform](UnLitTexArrayMaterial.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new UnLitTexArrayMaterial**(): [`UnLitTexArrayMaterial`](UnLitTexArrayMaterial.md)
+
+#### Returns
+
+[`UnLitTexArrayMaterial`](UnLitTexArrayMaterial.md)
+
+#### Overrides
+
+[Material](Material.md).[constructor](Material.md#constructor)
+
+#### Defined in
+
+[src/materials/UnLitTexArrayMaterial.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/materials/UnLitTexArrayMaterial.ts#L18)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+Material Unique Identifier
+
+#### Inherited from
+
+[Material](Material.md).[instanceID](Material.md#instanceid)
+
+#### Defined in
+
+[src/materials/Material.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L19)
+
+___
+
+### name
+
+• **name**: `string`
+
+name of this material
+
+#### Inherited from
+
+[Material](Material.md).[name](Material.md#name)
+
+#### Defined in
+
+[src/materials/Material.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L25)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+[Material](Material.md).[enable](Material.md#enable)
+
+#### Defined in
+
+[src/materials/Material.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L27)
+
+## Accessors
+
+### shader
+
+• `get` **shader**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L41)
+
+• `set` **shader**(`shader`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shader` | [`Shader`](Shader.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L36)
+
+___
+
+### doubleSide
+
+• `get` **doubleSide**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L45)
+
+• `set` **doubleSide**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L49)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L53)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L57)
+
+___
+
+### acceptShadow
+
+• `get` **acceptShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L64)
+
+• `set` **acceptShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L68)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L77)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L81)
+
+___
+
+### blendMode
+
+• `get` **blendMode**(): [`BlendMode`](../enums/BlendMode.md)
+
+#### Returns
+
+[`BlendMode`](../enums/BlendMode.md)
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L85)
+
+• `set` **blendMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`BlendMode`](../enums/BlendMode.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L89)
+
+___
+
+### depthCompare
+
+• `get` **depthCompare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L93)
+
+• `set` **depthCompare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L97)
+
+___
+
+### transparent
+
+• `get` **transparent**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L102)
+
+• `set` **transparent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L106)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L113)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L117)
+
+___
+
+### depthWriteEnabled
+
+• `get` **depthWriteEnabled**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L128)
+
+• `set` **depthWriteEnabled**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L132)
+
+___
+
+### useBillboard
+
+• `set` **useBillboard**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.useBillboard
+
+#### Defined in
+
+[src/materials/Material.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L136)
+
+___
+
+### baseMap
+
+• `get` **baseMap**(): [`Texture`](Texture.md)
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Defined in
+
+[src/materials/UnLitTexArrayMaterial.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/materials/UnLitTexArrayMaterial.ts#L29)
+
+• `set` **baseMap**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/UnLitTexArrayMaterial.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/materials/UnLitTexArrayMaterial.ts#L25)
+
+___
+
+### baseColor
+
+• `get` **baseColor**(): [`Color`](Color.md)
+
+get base color (tint color)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Defined in
+
+[src/materials/UnLitTexArrayMaterial.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/materials/UnLitTexArrayMaterial.ts#L43)
+
+• `set` **baseColor**(`color`): `void`
+
+set base color (tint color)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `color` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/UnLitTexArrayMaterial.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/materials/UnLitTexArrayMaterial.ts#L36)
+
+## Methods
+
+### getPass
+
+▸ **getPass**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get render pass by renderType
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getPass](Material.md#getpass)
+
+#### Defined in
+
+[src/materials/Material.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L145)
+
+___
+
+### getAllPass
+
+▸ **getAllPass**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+get all color render pass
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Material](Material.md).[getAllPass](Material.md#getallpass)
+
+#### Defined in
+
+[src/materials/Material.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L153)
+
+___
+
+### clone
+
+▸ **clone**(): [`Material`](Material.md)
+
+clone one material
+
+#### Returns
+
+[`Material`](Material.md)
+
+Material
+
+#### Inherited from
+
+[Material](Material.md).[clone](Material.md#clone)
+
+#### Defined in
+
+[src/materials/Material.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L161)
+
+___
+
+### destroy
+
+▸ **destroy**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[destroy](Material.md#destroy)
+
+#### Defined in
+
+[src/materials/Material.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L168)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`define`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `define` | `string` |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setDefine](Material.md#setdefine)
+
+#### Defined in
+
+[src/materials/Material.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L174)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`propertyName`, `texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `texture` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setTexture](Material.md#settexture)
+
+#### Defined in
+
+[src/materials/Material.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L178)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setStorageBuffer](Material.md#setstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L182)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformBuffer](Material.md#setuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L186)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformFloat](Material.md#setuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L191)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector2](Material.md#setuniformvector2)
+
+#### Defined in
+
+[src/materials/Material.ts:195](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L195)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector3](Material.md#setuniformvector3)
+
+#### Defined in
+
+[src/materials/Material.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L199)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformVector4](Material.md#setuniformvector4)
+
+#### Defined in
+
+[src/materials/Material.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L203)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[setUniformColor](Material.md#setuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L207)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`str`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformFloat](Material.md#getuniformfloat)
+
+#### Defined in
+
+[src/materials/Material.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L211)
+
+___
+
+### getUniformV2
+
+▸ **getUniformV2**(`str`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV2](Material.md#getuniformv2)
+
+#### Defined in
+
+[src/materials/Material.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L215)
+
+___
+
+### getUniformV3
+
+▸ **getUniformV3**(`str`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV3](Material.md#getuniformv3)
+
+#### Defined in
+
+[src/materials/Material.ts:219](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L219)
+
+___
+
+### getUniformV4
+
+▸ **getUniformV4**(`str`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformV4](Material.md#getuniformv4)
+
+#### Defined in
+
+[src/materials/Material.ts:223](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L223)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`str`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Material](Material.md).[getUniformColor](Material.md#getuniformcolor)
+
+#### Defined in
+
+[src/materials/Material.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L227)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`str`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Material](Material.md).[getTexture](Material.md#gettexture)
+
+#### Defined in
+
+[src/materials/Material.ts:231](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L231)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`str`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Material](Material.md).[getStorageBuffer](Material.md#getstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:235](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L235)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getStructStorageBuffer](Material.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:239](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L239)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Material](Material.md).[getUniformBuffer](Material.md#getuniformbuffer)
+
+#### Defined in
+
+[src/materials/Material.ts:243](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L243)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Material](Material.md).[applyUniform](Material.md#applyuniform)
+
+#### Defined in
+
+[src/materials/Material.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L247)
diff --git a/docs/api/classes/UnLitTexArrayShader.md b/docs/api/classes/UnLitTexArrayShader.md
new file mode 100644
index 00000000..587fd531
--- /dev/null
+++ b/docs/api/classes/UnLitTexArrayShader.md
@@ -0,0 +1,1148 @@
+# Class: UnLitTexArrayShader
+
+## Hierarchy
+
+- [`Shader`](Shader.md)
+
+ ↳ **`UnLitTexArrayShader`**
+
+### Constructors
+
+- [constructor](UnLitTexArrayShader.md#constructor)
+
+### Properties
+
+- [computes](UnLitTexArrayShader.md#computes)
+- [passShader](UnLitTexArrayShader.md#passshader)
+
+### Accessors
+
+- [\_MainTex](UnLitTexArrayShader.md#_maintex)
+- [\_BumpMap](UnLitTexArrayShader.md#_bumpmap)
+- [\_MaskTex](UnLitTexArrayShader.md#_masktex)
+- [\_UVTransform](UnLitTexArrayShader.md#_uvtransform)
+- [\_Metallic](UnLitTexArrayShader.md#_metallic)
+- [\_Roughness](UnLitTexArrayShader.md#_roughness)
+- [\_MainColor](UnLitTexArrayShader.md#_maincolor)
+- [\_AlphaCutoff](UnLitTexArrayShader.md#_alphacutoff)
+- [\_DoubleSidedEnable](UnLitTexArrayShader.md#_doublesidedenable)
+- [\_SurfaceType](UnLitTexArrayShader.md#_surfacetype)
+- [\_AlphaCutoffEnable](UnLitTexArrayShader.md#_alphacutoffenable)
+
+### Methods
+
+- [addRenderPass](UnLitTexArrayShader.md#addrenderpass)
+- [removeShader](UnLitTexArrayShader.md#removeshader)
+- [removeShaderByIndex](UnLitTexArrayShader.md#removeshaderbyindex)
+- [getSubShaders](UnLitTexArrayShader.md#getsubshaders)
+- [hasSubShaders](UnLitTexArrayShader.md#hassubshaders)
+- [getDefaultShaders](UnLitTexArrayShader.md#getdefaultshaders)
+- [getDefaultColorShader](UnLitTexArrayShader.md#getdefaultcolorshader)
+- [setDefine](UnLitTexArrayShader.md#setdefine)
+- [hasDefine](UnLitTexArrayShader.md#hasdefine)
+- [deleteDefine](UnLitTexArrayShader.md#deletedefine)
+- [setUniform](UnLitTexArrayShader.md#setuniform)
+- [setUniformFloat](UnLitTexArrayShader.md#setuniformfloat)
+- [setUniformVector2](UnLitTexArrayShader.md#setuniformvector2)
+- [setUniformVector3](UnLitTexArrayShader.md#setuniformvector3)
+- [setUniformVector4](UnLitTexArrayShader.md#setuniformvector4)
+- [setUniformColor](UnLitTexArrayShader.md#setuniformcolor)
+- [getUniform](UnLitTexArrayShader.md#getuniform)
+- [getUniformFloat](UnLitTexArrayShader.md#getuniformfloat)
+- [getUniformVector2](UnLitTexArrayShader.md#getuniformvector2)
+- [getUniformVector3](UnLitTexArrayShader.md#getuniformvector3)
+- [getUniformVector4](UnLitTexArrayShader.md#getuniformvector4)
+- [getUniformColor](UnLitTexArrayShader.md#getuniformcolor)
+- [setTexture](UnLitTexArrayShader.md#settexture)
+- [getTexture](UnLitTexArrayShader.md#gettexture)
+- [setUniformBuffer](UnLitTexArrayShader.md#setuniformbuffer)
+- [getUniformBuffer](UnLitTexArrayShader.md#getuniformbuffer)
+- [setStorageBuffer](UnLitTexArrayShader.md#setstoragebuffer)
+- [getStorageBuffer](UnLitTexArrayShader.md#getstoragebuffer)
+- [setStructStorageBuffer](UnLitTexArrayShader.md#setstructstoragebuffer)
+- [getStructStorageBuffer](UnLitTexArrayShader.md#getstructstoragebuffer)
+- [noticeValueChange](UnLitTexArrayShader.md#noticevaluechange)
+- [destroy](UnLitTexArrayShader.md#destroy)
+- [clone](UnLitTexArrayShader.md#clone)
+- [applyUniform](UnLitTexArrayShader.md#applyuniform)
+- [setDefault](UnLitTexArrayShader.md#setdefault)
+
+## Constructors
+
+### constructor
+
+• **new UnLitTexArrayShader**(): [`UnLitTexArrayShader`](UnLitTexArrayShader.md)
+
+#### Returns
+
+[`UnLitTexArrayShader`](UnLitTexArrayShader.md)
+
+#### Overrides
+
+[Shader](Shader.md).[constructor](Shader.md#constructor)
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts#L18)
+
+## Properties
+
+### computes
+
+• **computes**: [`RenderShaderCompute`](RenderShaderCompute.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[computes](Shader.md#computes)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L19)
+
+___
+
+### passShader
+
+• **passShader**: `Map`\<`PassType`, [`RenderShaderPass`](RenderShaderPass.md)[]\>
+
+#### Inherited from
+
+[Shader](Shader.md).[passShader](Shader.md#passshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L21)
+
+## Accessors
+
+### \_MainTex
+
+• `set` **_MainTex**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts#L48)
+
+___
+
+### \_BumpMap
+
+• `set` **_BumpMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts#L52)
+
+___
+
+### \_MaskTex
+
+• `set` **_MaskTex**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts#L56)
+
+___
+
+### \_UVTransform
+
+• `set` **_UVTransform**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts:60](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts#L60)
+
+___
+
+### \_Metallic
+
+• `set` **_Metallic**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts#L64)
+
+___
+
+### \_Roughness
+
+• `set` **_Roughness**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts#L68)
+
+___
+
+### \_MainColor
+
+• `set` **_MainColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts#L73)
+
+___
+
+### \_AlphaCutoff
+
+• `set` **_AlphaCutoff**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts#L77)
+
+___
+
+### \_DoubleSidedEnable
+
+• `set` **_DoubleSidedEnable**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts#L81)
+
+___
+
+### \_SurfaceType
+
+• `set` **_SurfaceType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts:86](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts#L86)
+
+___
+
+### \_AlphaCutoffEnable
+
+• `set` **_AlphaCutoffEnable**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts:95](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts#L95)
+
+## Methods
+
+### addRenderPass
+
+▸ **addRenderPass**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[addRenderPass](Shader.md#addrenderpass)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L28)
+
+___
+
+### removeShader
+
+▸ **removeShader**(`renderShader`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `renderShader` | [`RenderShaderPass`](RenderShaderPass.md) | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShader](Shader.md#removeshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L38)
+
+___
+
+### removeShaderByIndex
+
+▸ **removeShaderByIndex**(`passType`, `index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `passType` | `PassType` | `undefined` |
+| `index` | `number` | `-1` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[removeShaderByIndex](Shader.md#removeshaderbyindex)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L52)
+
+___
+
+### getSubShaders
+
+▸ **getSubShaders**(`passType`): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getSubShaders](Shader.md#getsubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L63)
+
+___
+
+### hasSubShaders
+
+▸ **hasSubShaders**(`passType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasSubShaders](Shader.md#hassubshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L67)
+
+___
+
+### getDefaultShaders
+
+▸ **getDefaultShaders**(): [`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)[]
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultShaders](Shader.md#getdefaultshaders)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L72)
+
+___
+
+### getDefaultColorShader
+
+▸ **getDefaultColorShader**(): [`RenderShaderPass`](RenderShaderPass.md)
+
+#### Returns
+
+[`RenderShaderPass`](RenderShaderPass.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getDefaultColorShader](Shader.md#getdefaultcolorshader)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L76)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setDefine](Shader.md#setdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L80)
+
+___
+
+### hasDefine
+
+▸ **hasDefine**(`arg0`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Shader](Shader.md).[hasDefine](Shader.md#hasdefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L88)
+
+___
+
+### deleteDefine
+
+▸ **deleteDefine**(`arg0`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[deleteDefine](Shader.md#deletedefine)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L99)
+
+___
+
+### setUniform
+
+▸ **setUniform**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniform](Shader.md#setuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L107)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformFloat](Shader.md#setuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L115)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector2](Shader.md#setuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L123)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector3](Shader.md#setuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L131)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformVector4](Shader.md#setuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:139](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L139)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformColor](Shader.md#setuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L147)
+
+___
+
+### getUniform
+
+▸ **getUniform**(`arg0`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniform](Shader.md#getuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L155)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`arg0`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformFloat](Shader.md#getuniformfloat)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:159](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L159)
+
+___
+
+### getUniformVector2
+
+▸ **getUniformVector2**(`arg0`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector2](Shader.md#getuniformvector2)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:163](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L163)
+
+___
+
+### getUniformVector3
+
+▸ **getUniformVector3**(`arg0`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector3](Shader.md#getuniformvector3)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:167](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L167)
+
+___
+
+### getUniformVector4
+
+▸ **getUniformVector4**(`arg0`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformVector4](Shader.md#getuniformvector4)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:171](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L171)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`arg0`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformColor](Shader.md#getuniformcolor)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:175](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L175)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`Texture`](Texture.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setTexture](Shader.md#settexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L179)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`arg0`): [`Texture`](Texture.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`Texture`](Texture.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getTexture](Shader.md#gettexture)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:188](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L188)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`UniformGPUBuffer`](UniformGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setUniformBuffer](Shader.md#setuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:192](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L192)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getUniformBuffer](Shader.md#getuniformbuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L200)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`arg0`, `arg1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StorageGPUBuffer`](StorageGPUBuffer.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStorageBuffer](Shader.md#setstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:204](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L204)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`arg0`): [`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+[`StorageGPUBuffer`](StorageGPUBuffer.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[getStorageBuffer](Shader.md#getstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:212](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L212)
+
+___
+
+### setStructStorageBuffer
+
+▸ **setStructStorageBuffer**\<`T`\>(`arg0`, `arg1`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+| `arg1` | [`StructStorageGPUBuffer`](StructStorageGPUBuffer.md)\<`T`\> |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[setStructStorageBuffer](Shader.md#setstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L216)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`arg0`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+[Shader](Shader.md).[getStructStorageBuffer](Shader.md#getstructstoragebuffer)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L224)
+
+___
+
+### noticeValueChange
+
+▸ **noticeValueChange**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[noticeValueChange](Shader.md#noticevaluechange)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L228)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[destroy](Shader.md#destroy)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:236](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L236)
+
+___
+
+### clone
+
+▸ **clone**(): [`Shader`](Shader.md)
+
+#### Returns
+
+[`Shader`](Shader.md)
+
+#### Inherited from
+
+[Shader](Shader.md).[clone](Shader.md#clone)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:240](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L240)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shader](Shader.md).[applyUniform](Shader.md#applyuniform)
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/Shader.ts:249](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/Shader.ts#L249)
+
+___
+
+### setDefault
+
+▸ **setDefault**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/mats/shader/UnLitTexArrayShader.ts#L41)
diff --git a/docs/api/classes/UniformGPUBuffer.md b/docs/api/classes/UniformGPUBuffer.md
new file mode 100644
index 00000000..c5e9d353
--- /dev/null
+++ b/docs/api/classes/UniformGPUBuffer.md
@@ -0,0 +1,1303 @@
+# Class: UniformGPUBuffer
+
+CPU write, GPU read-only transmission buffer
+Can only be copied and written in the cpu coder
+usage GPUBufferUsage.UNIFORM & GPUBufferUsage.COPY_DST & GPUBufferUsage.COPY_SRC GPUBufferUsage
+
+## Hierarchy
+
+- `GPUBufferBase`
+
+ ↳ **`UniformGPUBuffer`**
+
+### Constructors
+
+- [constructor](UniformGPUBuffer.md#constructor)
+
+### Properties
+
+- [bufferType](UniformGPUBuffer.md#buffertype)
+- [buffer](UniformGPUBuffer.md#buffer)
+- [memory](UniformGPUBuffer.md#memory)
+- [memoryNodes](UniformGPUBuffer.md#memorynodes)
+- [seek](UniformGPUBuffer.md#seek)
+- [outFloat32Array](UniformGPUBuffer.md#outfloat32array)
+- [byteSize](UniformGPUBuffer.md#bytesize)
+- [usage](UniformGPUBuffer.md#usage)
+- [visibility](UniformGPUBuffer.md#visibility)
+
+### Methods
+
+- [debug](UniformGPUBuffer.md#debug)
+- [reset](UniformGPUBuffer.md#reset)
+- [setBoolean](UniformGPUBuffer.md#setboolean)
+- [readBoole](UniformGPUBuffer.md#readboole)
+- [setFloat](UniformGPUBuffer.md#setfloat)
+- [getFloat](UniformGPUBuffer.md#getfloat)
+- [setInt8](UniformGPUBuffer.md#setint8)
+- [getInt8](UniformGPUBuffer.md#getint8)
+- [setInt16](UniformGPUBuffer.md#setint16)
+- [getInt16](UniformGPUBuffer.md#getint16)
+- [setInt32](UniformGPUBuffer.md#setint32)
+- [getInt32](UniformGPUBuffer.md#getint32)
+- [setUint8](UniformGPUBuffer.md#setuint8)
+- [getUint8](UniformGPUBuffer.md#getuint8)
+- [setUint16](UniformGPUBuffer.md#setuint16)
+- [getUint16](UniformGPUBuffer.md#getuint16)
+- [setUint32](UniformGPUBuffer.md#setuint32)
+- [getUint32](UniformGPUBuffer.md#getuint32)
+- [setVector2](UniformGPUBuffer.md#setvector2)
+- [getVector2](UniformGPUBuffer.md#getvector2)
+- [setVector3](UniformGPUBuffer.md#setvector3)
+- [getVector3](UniformGPUBuffer.md#getvector3)
+- [setVector4](UniformGPUBuffer.md#setvector4)
+- [getVector4](UniformGPUBuffer.md#getvector4)
+- [setVector4Array](UniformGPUBuffer.md#setvector4array)
+- [setColor](UniformGPUBuffer.md#setcolor)
+- [getColor](UniformGPUBuffer.md#getcolor)
+- [setColorArray](UniformGPUBuffer.md#setcolorarray)
+- [setMatrix](UniformGPUBuffer.md#setmatrix)
+- [setMatrixArray](UniformGPUBuffer.md#setmatrixarray)
+- [setArray](UniformGPUBuffer.md#setarray)
+- [setFloat32Array](UniformGPUBuffer.md#setfloat32array)
+- [setInt32Array](UniformGPUBuffer.md#setint32array)
+- [setUint32Array](UniformGPUBuffer.md#setuint32array)
+- [setStruct](UniformGPUBuffer.md#setstruct)
+- [setStructArray](UniformGPUBuffer.md#setstructarray)
+- [clean](UniformGPUBuffer.md#clean)
+- [apply](UniformGPUBuffer.md#apply)
+- [mapAsyncWrite](UniformGPUBuffer.md#mapasyncwrite)
+- [destroy](UniformGPUBuffer.md#destroy)
+- [resizeBuffer](UniformGPUBuffer.md#resizebuffer)
+- [readBuffer](UniformGPUBuffer.md#readbuffer)
+- [genUniformNodes](UniformGPUBuffer.md#genuniformnodes)
+
+## Constructors
+
+### constructor
+
+• **new UniformGPUBuffer**(`size`, `data?`): [`UniformGPUBuffer`](UniformGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `size` | `number` |
+| `data?` | `Float32Array` |
+
+#### Returns
+
+[`UniformGPUBuffer`](UniformGPUBuffer.md)
+
+#### Overrides
+
+GPUBufferBase.constructor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/UniformGPUBuffer.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/UniformGPUBuffer.ts#L10)
+
+## Properties
+
+### bufferType
+
+• **bufferType**: [`GPUBufferType`](../enums/GPUBufferType.md)
+
+#### Inherited from
+
+GPUBufferBase.bufferType
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L20)
+
+___
+
+### buffer
+
+• **buffer**: `GPUBuffer`
+
+#### Inherited from
+
+GPUBufferBase.buffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L21)
+
+___
+
+### memory
+
+• **memory**: `MemoryDO`
+
+#### Inherited from
+
+GPUBufferBase.memory
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L22)
+
+___
+
+### memoryNodes
+
+• **memoryNodes**: `Map`\<`string` \| `number`, `MemoryInfo`\>
+
+#### Inherited from
+
+GPUBufferBase.memoryNodes
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L23)
+
+___
+
+### seek
+
+• **seek**: `number`
+
+#### Inherited from
+
+GPUBufferBase.seek
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L24)
+
+___
+
+### outFloat32Array
+
+• **outFloat32Array**: `Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.outFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L25)
+
+___
+
+### byteSize
+
+• **byteSize**: `number`
+
+#### Inherited from
+
+GPUBufferBase.byteSize
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L26)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+#### Inherited from
+
+GPUBufferBase.usage
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L27)
+
+___
+
+### visibility
+
+• **visibility**: `number`
+
+#### Inherited from
+
+GPUBufferBase.visibility
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L28)
+
+## Methods
+
+### debug
+
+▸ **debug**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.debug
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L41)
+
+___
+
+### reset
+
+▸ **reset**(`clean?`, `size?`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `clean` | `boolean` | `false` |
+| `size` | `number` | `0` |
+| `data?` | `Float32Array` | `undefined` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.reset
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L44)
+
+___
+
+### setBoolean
+
+▸ **setBoolean**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setBoolean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L52)
+
+___
+
+### readBoole
+
+▸ **readBoole**(`name`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+GPUBufferBase.readBoole
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L62)
+
+___
+
+### setFloat
+
+▸ **setFloat**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L70)
+
+___
+
+### getFloat
+
+▸ **getFloat**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L79)
+
+___
+
+### setInt8
+
+▸ **setInt8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L87)
+
+___
+
+### getInt8
+
+▸ **getInt8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L96)
+
+___
+
+### setInt16
+
+▸ **setInt16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L104)
+
+___
+
+### getInt16
+
+▸ **getInt16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L113)
+
+___
+
+### setInt32
+
+▸ **setInt32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L121)
+
+___
+
+### getInt32
+
+▸ **getInt32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:130](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L130)
+
+___
+
+### setUint8
+
+▸ **setUint8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:138](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L138)
+
+___
+
+### getUint8
+
+▸ **getUint8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L147)
+
+___
+
+### setUint16
+
+▸ **setUint16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L156)
+
+___
+
+### getUint16
+
+▸ **getUint16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L165)
+
+___
+
+### setUint32
+
+▸ **setUint32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L173)
+
+___
+
+### getUint32
+
+▸ **getUint32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L182)
+
+___
+
+### setVector2
+
+▸ **setVector2**(`name`, `v2`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v2` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L190)
+
+___
+
+### getVector2
+
+▸ **getVector2**(`name`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+GPUBufferBase.getVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L199)
+
+___
+
+### setVector3
+
+▸ **setVector3**(`name`, `v3`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v3` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L207)
+
+___
+
+### getVector3
+
+▸ **getVector3**(`name`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+GPUBufferBase.getVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L216)
+
+___
+
+### setVector4
+
+▸ **setVector4**(`name`, `v4`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4` | `Vector4` \| [`Quaternion`](Quaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L224)
+
+___
+
+### getVector4
+
+▸ **getVector4**(`name`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+GPUBufferBase.getVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L233)
+
+___
+
+### setVector4Array
+
+▸ **setVector4Array**(`name`, `v4Array`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4Array` | [`Vector3`](Vector3.md)[] \| `Vector4`[] \| [`Quaternion`](Quaternion.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:241](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L241)
+
+___
+
+### setColor
+
+▸ **setColor**(`name`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `color` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:250](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L250)
+
+___
+
+### getColor
+
+▸ **getColor**(`name`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+GPUBufferBase.getColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:259](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L259)
+
+___
+
+### setColorArray
+
+▸ **setColorArray**(`name`, `colorArray`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `colorArray` | [`Color`](Color.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColorArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:267](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L267)
+
+___
+
+### setMatrix
+
+▸ **setMatrix**(`name`, `mat`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mat` | [`Matrix4`](Matrix4.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrix
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:276](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L276)
+
+___
+
+### setMatrixArray
+
+▸ **setMatrixArray**(`name`, `mats`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mats` | [`Matrix4`](Matrix4.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrixArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:285](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L285)
+
+___
+
+### setArray
+
+▸ **setArray**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `number`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:297](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L297)
+
+___
+
+### setFloat32Array
+
+▸ **setFloat32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Float32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:306](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L306)
+
+___
+
+### setInt32Array
+
+▸ **setInt32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Int32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L315)
+
+___
+
+### setUint32Array
+
+▸ **setUint32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Uint32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:325](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L325)
+
+___
+
+### setStruct
+
+▸ **setStruct**\<`T`\>(`c`, `index`, `data`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `index` | `number` |
+| `data` | `any` |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStruct
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:334](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L334)
+
+___
+
+### setStructArray
+
+▸ **setStructArray**\<`T`\>(`c`, `dataList`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `dataList` | `any`[] |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStructArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:390](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L390)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.clean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:403](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L403)
+
+___
+
+### apply
+
+▸ **apply**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.apply
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L408)
+
+___
+
+### mapAsyncWrite
+
+▸ **mapAsyncWrite**(`mapAsyncArray`, `len`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mapAsyncArray` | `Float32Array` |
+| `len` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.mapAsyncWrite
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:413](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L413)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.destroy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:454](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L454)
+
+___
+
+### resizeBuffer
+
+▸ **resizeBuffer**(`size`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `size` | `number` |
+| `data?` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.resizeBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:511](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L511)
+
+___
+
+### readBuffer
+
+▸ **readBuffer**(): `Float32Array`
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:558](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L558)
+
+▸ **readBuffer**(`promise`): `Float32Array`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``false`` |
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:559](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L559)
+
+▸ **readBuffer**(`promise`): `Promise`\<`Float32Array`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``true`` |
+
+#### Returns
+
+`Promise`\<`Float32Array`\>
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:560](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L560)
+
+___
+
+### genUniformNodes
+
+▸ **genUniformNodes**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/UniformGPUBuffer.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/UniformGPUBuffer.ts#L16)
diff --git a/docs/api/classes/ValueOp.md b/docs/api/classes/ValueOp.md
new file mode 100644
index 00000000..19e14d11
--- /dev/null
+++ b/docs/api/classes/ValueOp.md
@@ -0,0 +1,58 @@
+# Class: ValueOp\
+
+## Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`CurveValueType`](../types/CurveValueType.md) |
+
+### Constructors
+
+- [constructor](ValueOp.md#constructor)
+
+### Methods
+
+- [sub](ValueOp.md#sub)
+
+## Constructors
+
+### constructor
+
+• **new ValueOp**\<`T`\>(): [`ValueOp`](ValueOp.md)\<`T`\>
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`CurveValueType`](../types/CurveValueType.md) |
+
+#### Returns
+
+[`ValueOp`](ValueOp.md)\<`T`\>
+
+## Methods
+
+### sub
+
+▸ **sub**\<`T`\>(`v1`, `v2`): `number` \| [`Vector2`](Vector2.md) \| `Vector4` \| [`Vector3`](Vector3.md) \| [`Quaternion`](Quaternion.md)
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`CurveValueType`](../types/CurveValueType.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v1` | `T` |
+| `v2` | `T` |
+
+#### Returns
+
+`number` \| [`Vector2`](Vector2.md) \| `Vector4` \| [`Vector3`](Vector3.md) \| [`Quaternion`](Quaternion.md)
+
+#### Defined in
+
+[src/math/enum/T/ValueOp.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/T/ValueOp.ts#L4)
diff --git a/docs/api/classes/ValueParser.md b/docs/api/classes/ValueParser.md
new file mode 100644
index 00000000..68349cf5
--- /dev/null
+++ b/docs/api/classes/ValueParser.md
@@ -0,0 +1,44 @@
+# Class: ValueParser
+
+### Constructors
+
+- [constructor](ValueParser.md#constructor)
+
+### Methods
+
+- [parser](ValueParser.md#parser)
+
+## Constructors
+
+### constructor
+
+• **new ValueParser**(): [`ValueParser`](ValueParser.md)
+
+#### Returns
+
+[`ValueParser`](ValueParser.md)
+
+## Methods
+
+### parser
+
+▸ **parser**(`bytes`): `Object`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bytes` | `BytesArray` |
+
+#### Returns
+
+`Object`
+
+| Name | Type |
+| :------ | :------ |
+| `t` | [`ValueEnumType`](../enums/ValueEnumType.md) |
+| `v` | [`CurveValueType`](../types/CurveValueType.md) |
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueParser.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueParser.ts#L16)
diff --git a/docs/api/classes/Vector2.md b/docs/api/classes/Vector2.md
new file mode 100644
index 00000000..30fbb6e6
--- /dev/null
+++ b/docs/api/classes/Vector2.md
@@ -0,0 +1,672 @@
+# Class: Vector2
+
+Vector 2D
+
+### Constructors
+
+- [constructor](Vector2.md#constructor)
+
+### Properties
+
+- [ZERO](Vector2.md#zero)
+- [SAFE\_MAX](Vector2.md#safe_max)
+- [SAFE\_MIN](Vector2.md#safe_min)
+- [x](Vector2.md#x)
+- [y](Vector2.md#y)
+
+### Methods
+
+- [getAngle](Vector2.md#getangle)
+- [slerp](Vector2.md#slerp)
+- [lerp](Vector2.md#lerp)
+- [set](Vector2.md#set)
+- [distance](Vector2.md#distance)
+- [add](Vector2.md#add)
+- [sub](Vector2.md#sub)
+- [scale](Vector2.md#scale)
+- [multiply](Vector2.md#multiply)
+- [multiplyScaler](Vector2.md#multiplyscaler)
+- [divide](Vector2.md#divide)
+- [neg](Vector2.md#neg)
+- [abs](Vector2.md#abs)
+- [length](Vector2.md#length)
+- [getAngle](Vector2.md#getangle-1)
+- [unt](Vector2.md#unt)
+- [angleTo](Vector2.md#angleto)
+- [equals](Vector2.md#equals)
+- [pal](Vector2.md#pal)
+- [clone](Vector2.md#clone)
+- [copyFrom](Vector2.md#copyfrom)
+- [dot](Vector2.md#dot)
+- [normalize](Vector2.md#normalize)
+- [addInPlace](Vector2.md#addinplace)
+- [addScalar](Vector2.md#addscalar)
+- [clampScalar](Vector2.md#clampscalar)
+
+## Constructors
+
+### constructor
+
+• **new Vector2**(`x?`, `y?`): [`Vector2`](Vector2.md)
+
+Create a new Vector2.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `x` | `number` | `0` | The x component of the vector, which defaults to 0. |
+| `y` | `number` | `0` | The y component of the vector, which defaults to 0. |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/math/Vector2.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L44)
+
+## Properties
+
+### ZERO
+
+▪ `Static` `Readonly` **ZERO**: [`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/math/Vector2.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L23)
+
+___
+
+### SAFE\_MAX
+
+▪ `Static` `Readonly` **SAFE\_MAX**: [`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/math/Vector2.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L25)
+
+___
+
+### SAFE\_MIN
+
+▪ `Static` `Readonly` **SAFE\_MIN**: [`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/math/Vector2.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L27)
+
+___
+
+### x
+
+• **x**: `number` = `0.0`
+
+The x component of the vector, the default value is 0.
+
+#### Defined in
+
+[src/math/Vector2.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L32)
+
+___
+
+### y
+
+• **y**: `number` = `0.0`
+
+The y component of the vector, the default value is 0.
+
+#### Defined in
+
+[src/math/Vector2.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L37)
+
+## Methods
+
+### getAngle
+
+▸ **getAngle**(`a`, `b`): `number`
+
+Returns the Angle, in radians, between two vectors.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector2`](Vector2.md) | Vector a |
+| `b` | [`Vector2`](Vector2.md) | Vector b |
+
+#### Returns
+
+`number`
+
+result
+
+#### Defined in
+
+[src/math/Vector2.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L55)
+
+___
+
+### slerp
+
+▸ **slerp**(`from`, `to`, `t`): [`Vector2`](Vector2.md)
+
+Computes linear interpolation between two vectors.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `from` | [`Vector2`](Vector2.md) | starting vector |
+| `to` | [`Vector2`](Vector2.md) | The vector in which you interpolate |
+| `t` | `number` | |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/math/Vector2.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L65)
+
+___
+
+### lerp
+
+▸ **lerp**(`from`, `to`, `t`): [`Vector2`](Vector2.md)
+
+Linear interpolation between two vectors.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `from` | [`Vector2`](Vector2.md) | starting vector |
+| `to` | [`Vector2`](Vector2.md) | The vector in which you interpolate |
+| `t` | `number` | |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/math/Vector2.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L94)
+
+___
+
+### set
+
+▸ **set**(`x?`, `y?`): `this`
+
+Sets the x and y components of this vector.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `x` | `number` | `0` | The x component of the vector, which defaults to 0. |
+| `y` | `number` | `0` | The y component of the vector, which defaults to 0. |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/Vector2.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L107)
+
+___
+
+### distance
+
+▸ **distance**(`a`): `number`
+
+Calculate the distance between this vector and the incoming vector.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector2`](Vector2.md) | Target vector |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Vector2.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L118)
+
+___
+
+### add
+
+▸ **add**(`a`, `target?`): [`Vector2`](Vector2.md)
+
+Add the vectors.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `a` | [`Vector2`](Vector2.md) |
+| `target?` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/math/Vector2.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L128)
+
+___
+
+### sub
+
+▸ **sub**(`a`, `target?`): [`Vector2`](Vector2.md)
+
+Vector subtraction
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `a` | [`Vector2`](Vector2.md) |
+| `target?` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/math/Vector2.ts:141](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L141)
+
+___
+
+### scale
+
+▸ **scale**(`v`): `this`
+
+Let's multiply the x and y values of this vector times v.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/Vector2.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L152)
+
+___
+
+### multiply
+
+▸ **multiply**(`a`, `target?`): [`Vector2`](Vector2.md)
+
+Let's multiply the x and y values of this vector by a.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `a` | `number` |
+| `target?` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/math/Vector2.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L164)
+
+___
+
+### multiplyScaler
+
+▸ **multiplyScaler**(`a`): `this`
+
+Let's multiply the x and y values of this vector by a.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `a` | `number` |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/Vector2.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L177)
+
+___
+
+### divide
+
+▸ **divide**(`v`, `target?`): [`Vector2`](Vector2.md)
+
+We're going to divide the x and y values of this vector by v.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+| `target?` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/math/Vector2.ts:188](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L188)
+
+___
+
+### neg
+
+▸ **neg**(`target?`): [`Vector2`](Vector2.md)
+
+Vector inversion
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `target?` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/math/Vector2.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L200)
+
+___
+
+### abs
+
+▸ **abs**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Vector2.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L207)
+
+___
+
+### length
+
+▸ **length**(): `number`
+
+Length of vector
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Vector2.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L215)
+
+___
+
+### getAngle
+
+▸ **getAngle**(`target`): `number`
+
+Returns the Angle, in radians, between the current vector and the target vector.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `target` | [`Vector2`](Vector2.md) | Target vector |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Vector2.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L224)
+
+___
+
+### unt
+
+▸ **unt**(`target?`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `target?` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/math/Vector2.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L228)
+
+___
+
+### angleTo
+
+▸ **angleTo**(`v`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Vector2.ts:236](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L236)
+
+___
+
+### equals
+
+▸ **equals**(`a`): `boolean`
+
+Whether two vectors are equal
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector2`](Vector2.md) | Vector of comparison |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/Vector2.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L247)
+
+___
+
+### pal
+
+▸ **pal**(`a`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `a` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Vector2.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L252)
+
+___
+
+### clone
+
+▸ **clone**(): [`Vector2`](Vector2.md)
+
+Returns a new vector that has the same x and y as the current vector.
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/math/Vector2.ts:264](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L264)
+
+___
+
+### copyFrom
+
+▸ **copyFrom**(`v`): [`Vector2`](Vector2.md)
+
+Copy the x and y properties of the source vector to this vector
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | [`Vector2`](Vector2.md) | Source vector |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/math/Vector2.ts:273](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L273)
+
+___
+
+### dot
+
+▸ **dot**(`value`): `number`
+
+Take the dot product of two vectors.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | [`Vector2`](Vector2.md) | Target vector |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Vector2.ts:284](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L284)
+
+___
+
+### normalize
+
+▸ **normalize**(): `this`
+
+Convert this vector to a unit vector.
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/Vector2.ts:291](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L291)
+
+___
+
+### addInPlace
+
+▸ **addInPlace**(`otherVector`): `this`
+
+Add two vectors
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `otherVector` | [`Vector2`](Vector2.md) | Additive vector |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/Vector2.ts:303](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L303)
+
+___
+
+### addScalar
+
+▸ **addScalar**(`s`): `this`
+
+Add the scalar to the x and y of this vector.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `s` | `number` | Additive scalar |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/Vector2.ts:314](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L314)
+
+___
+
+### clampScalar
+
+▸ **clampScalar**(`minVal`, `maxVal`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `minVal` | `number` | Component will be limited to the minimum value of |
+| `maxVal` | `number` | The component will be limited to the maximum value of |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Defined in
+
+[src/math/Vector2.ts:327](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector2.ts#L327)
diff --git a/docs/api/classes/Vector3.md b/docs/api/classes/Vector3.md
new file mode 100644
index 00000000..a0afb6ef
--- /dev/null
+++ b/docs/api/classes/Vector3.md
@@ -0,0 +1,1912 @@
+# Class: Vector3
+
+Vector 3D
+
+## Hierarchy
+
+- **`Vector3`**
+
+ ↳ [`Navi3DPoint`](Navi3DPoint.md)
+
+ ↳ [`Navi3DTriangle`](Navi3DTriangle.md)
+
+### Constructors
+
+- [constructor](Vector3.md#constructor)
+
+### Properties
+
+- [MAX](Vector3.md#max)
+- [MIN](Vector3.md#min)
+- [SAFE\_MAX](Vector3.md#safe_max)
+- [SAFE\_MIN](Vector3.md#safe_min)
+- [X\_AXIS](Vector3.md#x_axis)
+- [neg\_X\_AXIS](Vector3.md#neg_x_axis)
+- [Y\_AXIS](Vector3.md#y_axis)
+- [Z\_AXIS](Vector3.md#z_axis)
+- [x](Vector3.md#x)
+- [y](Vector3.md#y)
+- [z](Vector3.md#z)
+- [w](Vector3.md#w)
+
+### Accessors
+
+- [ZERO](Vector3.md#zero)
+- [ONE](Vector3.md#one)
+- [LEFT](Vector3.md#left)
+- [RIGHT](Vector3.md#right)
+- [UP](Vector3.md#up)
+- [DOWN](Vector3.md#down)
+- [BACK](Vector3.md#back)
+- [FORWARD](Vector3.md#forward)
+- [a](Vector3.md#a)
+- [r](Vector3.md#r)
+- [g](Vector3.md#g)
+- [b](Vector3.md#b)
+- [length](Vector3.md#length)
+- [lengthSquared](Vector3.md#lengthsquared)
+- [position](Vector3.md#position)
+
+### Methods
+
+- [getTowPointbyDir](Vector3.md#gettowpointbydir)
+- [pointToLine](Vector3.md#pointtoline)
+- [dot](Vector3.md#dot)
+- [getPoints](Vector3.md#getpoints)
+- [getPointNumbers](Vector3.md#getpointnumbers)
+- [getAngle](Vector3.md#getangle)
+- [sqrMagnitude](Vector3.md#sqrmagnitude)
+- [getZYAngle](Vector3.md#getzyangle)
+- [sub](Vector3.md#sub)
+- [add](Vector3.md#add)
+- [distance](Vector3.md#distance)
+- [squareDistance](Vector3.md#squaredistance)
+- [distanceXZ](Vector3.md#distancexz)
+- [set](Vector3.md#set)
+- [add](Vector3.md#add-1)
+- [subVectors](Vector3.md#subvectors)
+- [addScalar](Vector3.md#addscalar)
+- [subScalar](Vector3.md#subscalar)
+- [min](Vector3.md#min-1)
+- [max](Vector3.md#max-1)
+- [distanceToSquared](Vector3.md#distancetosquared)
+- [addXYZW](Vector3.md#addxyzw)
+- [clone](Vector3.md#clone)
+- [copyFrom](Vector3.md#copyfrom)
+- [decrementBy](Vector3.md#decrementby)
+- [dotProduct](Vector3.md#dotproduct)
+- [equals](Vector3.md#equals)
+- [incrementBy](Vector3.md#incrementby)
+- [divide](Vector3.md#divide)
+- [negate](Vector3.md#negate)
+- [normalize](Vector3.md#normalize)
+- [applyQuaternion](Vector3.md#applyquaternion)
+- [applyMatrix4](Vector3.md#applymatrix4)
+- [scaleBy](Vector3.md#scaleby)
+- [mul](Vector3.md#mul)
+- [scale](Vector3.md#scale)
+- [scaleToRef](Vector3.md#scaletoref)
+- [setTo](Vector3.md#setto)
+- [copy](Vector3.md#copy)
+- [subtract](Vector3.md#subtract)
+- [multiply](Vector3.md#multiply)
+- [divided](Vector3.md#divided)
+- [div](Vector3.md#div)
+- [lerp](Vector3.md#lerp)
+- [clamp](Vector3.md#clamp)
+- [toString](Vector3.md#tostring)
+- [normalizeToWay2D\_XY](Vector3.md#normalizetoway2d_xy)
+- [toArray](Vector3.md#toarray)
+- [copyToBytes](Vector3.md#copytobytes)
+- [crossProduct](Vector3.md#crossproduct)
+- [crossVectors](Vector3.md#crossvectors)
+- [multiplyScalar](Vector3.md#multiplyscalar)
+- [setFromArray](Vector3.md#setfromarray)
+- [divideScalar](Vector3.md#dividescalar)
+- [clampLength](Vector3.md#clamplength)
+- [setScalar](Vector3.md#setscalar)
+- [addScaledVector](Vector3.md#addscaledvector)
+- [pointInsideTriangle](Vector3.md#pointinsidetriangle)
+- [serialize](Vector3.md#serialize)
+
+## Constructors
+
+### constructor
+
+• **new Vector3**(`x?`, `y?`, `z?`, `w?`): [`Vector3`](Vector3.md)
+
+Creates an instance of a Vector3 object. If you do not specify a.
+parameter for the constructor, a Vector3 object is created with
+the elements (0,0,0,0).
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `x` | `number` | `0` | The first element, such as the x coordinate. |
+| `y` | `number` | `0` | The second element, such as the y coordinate. |
+| `z` | `number` | `0` | The third element, such as the z coordinate. |
+| `w` | `number` | `0` | An optional element for additional data such as the angle of rotation. |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L191)
+
+## Properties
+
+### MAX
+
+▪ `Static` `Readonly` **MAX**: [`Vector3`](Vector3.md)
+
+Vector maximum
+
+#### Defined in
+
+[src/math/Vector3.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L11)
+
+___
+
+### MIN
+
+▪ `Static` `Readonly` **MIN**: [`Vector3`](Vector3.md)
+
+Vector minimum
+
+#### Defined in
+
+[src/math/Vector3.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L16)
+
+___
+
+### SAFE\_MAX
+
+▪ `Static` `Readonly` **SAFE\_MAX**: [`Vector3`](Vector3.md)
+
+Vector maximum integer value
+
+#### Defined in
+
+[src/math/Vector3.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L21)
+
+___
+
+### SAFE\_MIN
+
+▪ `Static` `Readonly` **SAFE\_MIN**: [`Vector3`](Vector3.md)
+
+Vector minimum integer value
+
+#### Defined in
+
+[src/math/Vector3.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L26)
+
+___
+
+### X\_AXIS
+
+▪ `Static` `Readonly` **X\_AXIS**: [`Vector3`](Vector3.md)
+
+X axis positive axis coordinate (1, 0, 0).
+
+#### Defined in
+
+[src/math/Vector3.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L31)
+
+___
+
+### neg\_X\_AXIS
+
+▪ `Static` `Readonly` **neg\_X\_AXIS**: [`Vector3`](Vector3.md)
+
+The X-axis is negative (-1, 0, 0).
+
+#### Defined in
+
+[src/math/Vector3.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L36)
+
+___
+
+### Y\_AXIS
+
+▪ `Static` `Readonly` **Y\_AXIS**: [`Vector3`](Vector3.md)
+
+The y axis defined as a Vector3 object with coordinates (0,1,0).
+
+#### Defined in
+
+[src/math/Vector3.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L41)
+
+___
+
+### Z\_AXIS
+
+▪ `Static` `Readonly` **Z\_AXIS**: [`Vector3`](Vector3.md)
+
+The z axis defined as a Vector3 object with coordinates (0,0,1).
+
+#### Defined in
+
+[src/math/Vector3.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L46)
+
+___
+
+### x
+
+• **x**: `number` = `0`
+
+The first element of a Vector3 object, such as the x coordinate of
+a point in the three-dimensional space. The default value is 0.
+
+#### Defined in
+
+[src/math/Vector3.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L148)
+
+___
+
+### y
+
+• **y**: `number` = `0`
+
+The second element of a Vector3 object, such as the y coordinate of
+a point in the three-dimensional space. The default value is 0.
+
+#### Defined in
+
+[src/math/Vector3.ts:154](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L154)
+
+___
+
+### z
+
+• **z**: `number` = `0`
+
+The third element of a Vector3 object, such as the y coordinate of
+a point in the three-dimensional space. The default value is 0.
+
+#### Defined in
+
+[src/math/Vector3.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L160)
+
+___
+
+### w
+
+• **w**: `number` = `1`
+
+The z component of the vector,
+A three-dimensional position or projection that can be used as a perspective projection
+We can also do w in the quaternion
+
+#### Defined in
+
+[src/math/Vector3.ts:167](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L167)
+
+## Accessors
+
+### ZERO
+
+• `get` **ZERO**(): [`Vector3`](Vector3.md)
+
+Returns a new vector with zero x, y, and z components
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L91)
+
+___
+
+### ONE
+
+• `get` **ONE**(): [`Vector3`](Vector3.md)
+
+Returns a new vector whose x, y, and z components are all 1
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L98)
+
+___
+
+### LEFT
+
+• `get` **LEFT**(): [`Vector3`](Vector3.md)
+
+Returns a new vector pointing to the left, x is -1, y is 0, and z is 0
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:105](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L105)
+
+___
+
+### RIGHT
+
+• `get` **RIGHT**(): [`Vector3`](Vector3.md)
+
+Returns a new vector pointing in the right direction, where x is 1, y is 0, and z is 0
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L112)
+
+___
+
+### UP
+
+• `get` **UP**(): [`Vector3`](Vector3.md)
+
+Returns a new vector pointing upwards, that is, x equals 0, y equals 1, and z equals 0
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L119)
+
+___
+
+### DOWN
+
+• `get` **DOWN**(): [`Vector3`](Vector3.md)
+
+Returns a new vector pointing down, where x is 0, y is -1, and z is 0
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:126](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L126)
+
+___
+
+### BACK
+
+• `get` **BACK**(): [`Vector3`](Vector3.md)
+
+Returns a new backward vector, x equals 0, y equals 0, and z equals negative 1
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L133)
+
+___
+
+### FORWARD
+
+• `get` **FORWARD**(): [`Vector3`](Vector3.md)
+
+Returns a new forward-pointing vector, that is, x is 0, y is 0, and z is 1
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L140)
+
+___
+
+### a
+
+• `get` **a**(): `number`
+
+get the w component
+
+#### Returns
+
+`number`
+
+value of w
+
+#### Defined in
+
+[src/math/Vector3.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L233)
+
+• `set` **a**(`value`): `void`
+
+Set w component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Vector3.ts:201](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L201)
+
+___
+
+### r
+
+• `get` **r**(): `number`
+
+get the x component
+
+#### Returns
+
+`number`
+
+value of x
+
+#### Defined in
+
+[src/math/Vector3.ts:241](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L241)
+
+• `set` **r**(`value`): `void`
+
+Set x component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Vector3.ts:209](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L209)
+
+___
+
+### g
+
+• `get` **g**(): `number`
+
+get the y component
+
+#### Returns
+
+`number`
+
+value of y
+
+#### Defined in
+
+[src/math/Vector3.ts:249](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L249)
+
+• `set` **g**(`value`): `void`
+
+Set the y component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Vector3.ts:217](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L217)
+
+___
+
+### b
+
+• `get` **b**(): `number`
+
+get the z component
+
+#### Returns
+
+`number`
+
+value of z
+
+#### Defined in
+
+[src/math/Vector3.ts:257](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L257)
+
+• `set` **b**(`value`): `void`
+
+Set z component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Vector3.ts:225](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L225)
+
+___
+
+### length
+
+• `get` **length**(): `number`
+
+The length of the vector, the distance from the origin (0, 0, 0) to (x, y, z)
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Vector3.ts:264](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L264)
+
+___
+
+### lengthSquared
+
+• `get` **lengthSquared**(): `number`
+
+You get the square of the length of the vector
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Vector3.ts:272](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L272)
+
+___
+
+### position
+
+• `get` **position**(): `this`
+
+Get the current vector
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/Vector3.ts:279](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L279)
+
+## Methods
+
+### getTowPointbyDir
+
+▸ **getTowPointbyDir**(`dir`, `tp1`, `tp2`, `width`, `aix`): `void`
+
+Obtain a vertical line segment with width through an orientation
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `dir` | [`Vector3`](Vector3.md) |
+| `tp1` | [`Vector3`](Vector3.md) |
+| `tp2` | [`Vector3`](Vector3.md) |
+| `width` | `number` |
+| `aix` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Vector3.ts:290](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L290)
+
+___
+
+### pointToLine
+
+▸ **pointToLine**(`point1`, `point2`, `position`): `number`
+
+Calculate the distance from the point to the line
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `point1` | [`Vector3`](Vector3.md) | Starting point of line segment |
+| `point2` | [`Vector3`](Vector3.md) | End point of line segment |
+| `position` | [`Vector3`](Vector3.md) | Point position |
+
+#### Returns
+
+`number`
+
+Distance from a point to a line segment
+
+#### Defined in
+
+[src/math/Vector3.ts:319](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L319)
+
+___
+
+### dot
+
+▸ **dot**(`a`, `b`): `number`
+
+Take the dot product of two vectors.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | Vector a |
+| `b` | [`Vector3`](Vector3.md) | Vector b |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Vector3.ts:353](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L353)
+
+___
+
+### getPoints
+
+▸ **getPoints**(`total`, `randSeed`): `any`[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `total` | `number` |
+| `randSeed` | `number` |
+
+#### Returns
+
+`any`[]
+
+#### Defined in
+
+[src/math/Vector3.ts:357](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L357)
+
+___
+
+### getPointNumbers
+
+▸ **getPointNumbers**(`total`, `randSeed`): `any`[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `total` | `number` |
+| `randSeed` | `number` |
+
+#### Returns
+
+`any`[]
+
+#### Defined in
+
+[src/math/Vector3.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L366)
+
+___
+
+### getAngle
+
+▸ **getAngle**(`from`, `to`): `number`
+
+Returns the Angle, in degrees, between the source vector and the target vector.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `from` | [`Vector3`](Vector3.md) | source vector. |
+| `to` | [`Vector3`](Vector3.md) | target vector. |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Vector3.ts:380](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L380)
+
+___
+
+### sqrMagnitude
+
+▸ **sqrMagnitude**(`arg0`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `arg0` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Vector3.ts:385](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L385)
+
+___
+
+### getZYAngle
+
+▸ **getZYAngle**(`zd`, `yd`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `zd` | [`Vector3`](Vector3.md) |
+| `yd` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Vector3.ts:389](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L389)
+
+___
+
+### sub
+
+▸ **sub**(`a`, `b`, `target?`): [`Vector3`](Vector3.md)
+
+Subtract two vectors
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | Vector a |
+| `b` | [`Vector3`](Vector3.md) | `undefined` | Vector b |
+| `target` | [`Vector3`](Vector3.md) | `null` | output vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:399](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L399)
+
+___
+
+### add
+
+▸ **add**(`a`, `b`, `target?`): [`Vector3`](Vector3.md)
+
+Add two vectors
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | Vector a |
+| `b` | [`Vector3`](Vector3.md) | `undefined` | Vector b |
+| `target` | [`Vector3`](Vector3.md) | `null` | output vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:415](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L415)
+
+___
+
+### distance
+
+▸ **distance**(`pt1`, `pt2`): `number`
+
+Calculate the distance between two vectors
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pt1` | [`Vector3`](Vector3.md) | Vector 1 |
+| `pt2` | [`Vector3`](Vector3.md) | Vector 2 |
+
+#### Returns
+
+`number`
+
+number The distance between two vectors
+
+#### Defined in
+
+[src/math/Vector3.ts:458](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L458)
+
+___
+
+### squareDistance
+
+▸ **squareDistance**(`pt1`, `pt2`): `number`
+
+Calculate the square distance between two vectors
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pt1` | [`Vector3`](Vector3.md) | Vector 1 |
+| `pt2` | [`Vector3`](Vector3.md) | Vector 2 |
+
+#### Returns
+
+`number`
+
+number The square distance between two vectors
+
+#### Defined in
+
+[src/math/Vector3.ts:471](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L471)
+
+___
+
+### distanceXZ
+
+▸ **distanceXZ**(`pt1`, `pt2`): `number`
+
+Calculate the distance between two vectors XZ axes
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pt1` | [`Vector3`](Vector3.md) | Vector 1 |
+| `pt2` | [`Vector3`](Vector3.md) | Vector 2 |
+
+#### Returns
+
+`number`
+
+number The distance between two vectors
+
+#### Defined in
+
+[src/math/Vector3.ts:483](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L483)
+
+___
+
+### set
+
+▸ **set**(`x`, `y`, `z`, `w?`): [`Vector3`](Vector3.md)
+
+Sets the current vector x, y, z, and w components
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `x` | `number` | `undefined` |
+| `y` | `number` | `undefined` |
+| `z` | `number` | `undefined` |
+| `w` | `number` | `1` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:498](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L498)
+
+___
+
+### add
+
+▸ **add**(`a`, `target?`): [`Vector3`](Vector3.md)
+
+The vector is added to the vector
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | Additive vector |
+| `target` | [`Vector3`](Vector3.md) | `null` | Return vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+result
+
+#### Defined in
+
+[src/math/Vector3.ts:512](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L512)
+
+___
+
+### subVectors
+
+▸ **subVectors**(`a`, `b`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) |
+| `b` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/Vector3.ts:527](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L527)
+
+___
+
+### addScalar
+
+▸ **addScalar**(`scalar`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scalar` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:534](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L534)
+
+___
+
+### subScalar
+
+▸ **subScalar**(`scalar`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scalar` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:541](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L541)
+
+___
+
+### min
+
+▸ **min**(`v`, `target?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+| `target` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:548](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L548)
+
+___
+
+### max
+
+▸ **max**(`v`, `target?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+| `target` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:555](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L555)
+
+___
+
+### distanceToSquared
+
+▸ **distanceToSquared**(`v`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/math/Vector3.ts:562](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L562)
+
+___
+
+### addXYZW
+
+▸ **addXYZW**(`x`, `y`, `z`, `w`, `target?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `x` | `number` | `undefined` |
+| `y` | `number` | `undefined` |
+| `z` | `number` | `undefined` |
+| `w` | `number` | `undefined` |
+| `target` | [`Vector3`](Vector3.md) | `null` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:569](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L569)
+
+___
+
+### clone
+
+▸ **clone**(): [`Vector3`](Vector3.md)
+
+Clone a vector with the same components as the current vector
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:587](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L587)
+
+___
+
+### copyFrom
+
+▸ **copyFrom**(`src`): [`Vector3`](Vector3.md)
+
+The components of the source vector are set to the current vector
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `src` | [`Vector3`](Vector3.md) | Original vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:596](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L596)
+
+___
+
+### decrementBy
+
+▸ **decrementBy**(`a`): `void`
+
+Subtract two vectors and assign the result to yourself
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | Minus vector |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Vector3.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L609)
+
+___
+
+### dotProduct
+
+▸ **dotProduct**(`a`): `number`
+
+Calculate the dot product of two vectors and return the Angle relationship between the two vectors
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | The vector that you need to compute |
+
+#### Returns
+
+`number`
+
+number Returns the Angle relationship between two vectors
+
+#### Defined in
+
+[src/math/Vector3.ts:621](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L621)
+
+___
+
+### equals
+
+▸ **equals**(`toCompare`, `allFour?`): `boolean`
+
+Find whether the values of two vectors are identical
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `toCompare` | [`Vector3`](Vector3.md) | `undefined` | The vector to compare |
+| `allFour` | `boolean` | `false` | The default parameter is 1, whether to compare the w component |
+
+#### Returns
+
+`boolean`
+
+A value of true if the specified Vector3 object is equal to the current Vector3 object; false if it is not equal.
+
+#### Defined in
+
+[src/math/Vector3.ts:643](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L643)
+
+___
+
+### incrementBy
+
+▸ **incrementBy**(`a`): `void`
+
+The current vector plus is equal to the vector, plus just the x, y, and z components
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | vector |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Vector3.ts:663](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L663)
+
+___
+
+### divide
+
+▸ **divide**(`v`): [`Vector3`](Vector3.md)
+
+The current vector divided by the vector or component
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | `any` | The vector or component that you want to divide |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3 Returns the result of the calculation
+
+#### Defined in
+
+[src/math/Vector3.ts:675](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L675)
+
+___
+
+### negate
+
+▸ **negate**(): [`Vector3`](Vector3.md)
+
+Sets the current Vector3 object to its inverse. The inverse object
+is also considered the opposite of the original object. The value of
+the x, y, and z properties of the current Vector3 object is changed
+to -x, -y, and -z.
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:692](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L692)
+
+___
+
+### normalize
+
+▸ **normalize**(`thickness?`): [`Vector3`](Vector3.md)
+
+Scales the line segment between(0,0) and the current point to a set
+length.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `thickness` | `number` | `1` | The scaling value. For example, if the current Vector3 object is (0,3,4), and you normalize it to 1, the point returned is at(0,0.6,0.8). |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:707](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L707)
+
+___
+
+### applyQuaternion
+
+▸ **applyQuaternion**(`q`): [`Vector3`](Vector3.md)
+
+Apply the rotation quaternion
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `q` | `any` | quaternion |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:724](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L724)
+
+___
+
+### applyMatrix4
+
+▸ **applyMatrix4**(`m`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m` | `any` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:749](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L749)
+
+___
+
+### scaleBy
+
+▸ **scaleBy**(`s`): [`Vector3`](Vector3.md)
+
+Scales the current Vector3 object by a scalar, a magnitude. The
+Vector3 object's x, y, and z elements are multiplied by the scalar
+number specified in the parameter. For example, if the vector is
+scaled by ten, the result is a vector that is ten times longer. The
+scalar can also change the direction of the vector. Multiplying the
+vector by a negative number reverses its direction.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `s` | `number` | A multiplier (scalar) used to scale a Vector3 object. |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:763](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L763)
+
+___
+
+### mul
+
+▸ **mul**(`s`): [`Vector3`](Vector3.md)
+
+The current vector times the scalar s
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `s` | `number` | scalar s |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:775](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L775)
+
+___
+
+### scale
+
+▸ **scale**(`s`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `s` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:783](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L783)
+
+___
+
+### scaleToRef
+
+▸ **scaleToRef**(`s`, `ref`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `s` | `number` |
+| `ref` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:790](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L790)
+
+___
+
+### setTo
+
+▸ **setTo**(`xa`, `ya`, `za`, `wa?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `xa` | `number` | `undefined` | The first element, such as the x coordinate. |
+| `ya` | `number` | `undefined` | The second element, such as the y coordinate. |
+| `za` | `number` | `undefined` | The third element, such as the z coordinate. |
+| `wa` | `number` | `1` | - |
+
+#### Returns
+
+`void`
+
+**`Language`**
+
+en_US
+Sets the members of Vector3 to the specified values
+
+#### Defined in
+
+[src/math/Vector3.ts:809](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L809)
+
+___
+
+### copy
+
+▸ **copy**(`src`): `this`
+
+Copy the components of the source vector to this vector
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `src` | [`Vector3`](Vector3.md) | Source vector |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/Vector3.ts:821](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L821)
+
+___
+
+### subtract
+
+▸ **subtract**(`a`, `target?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | The Vector3 object to be subtracted from the current Vector3 object. |
+| `target` | [`Vector3`](Vector3.md) | `null` | - |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+A new Vector3 object that is the difference between the
+ current Vector3 and the specified Vector3 object.
+
+**`Language`**
+
+en_US
+Subtracts the value of the x, y, and z elements of the current
+Vector3 object from the values of the x, y, and z elements of
+another Vector3 object. The subtract()
method does not
+change the current Vector3 object. Instead, this method returns a
+new Vector3 object with the new values.
+
+#### Defined in
+
+[src/math/Vector3.ts:842](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L842)
+
+___
+
+### multiply
+
+▸ **multiply**(`other`, `target?`): [`Vector3`](Vector3.md)
+
+Let's multiply that vector times that vector.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `other` | [`Vector3`](Vector3.md) | `undefined` | Multiplied vectors |
+| `target` | [`Vector3`](Vector3.md) | `null` | Returned vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:856](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L856)
+
+___
+
+### divided
+
+▸ **divided**(`other`, `target?`): [`Vector3`](Vector3.md)
+
+Let's divide this vector by this vector.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `other` | [`Vector3`](Vector3.md) | `undefined` | The vector that divides |
+| `target` | [`Vector3`](Vector3.md) | `null` | Returned vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:879](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L879)
+
+___
+
+### div
+
+▸ **div**(`v`, `target?`): [`Vector3`](Vector3.md)
+
+Divide that vector by the scalar
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v` | `number` | The scalar that divides |
+| `target?` | [`Vector3`](Vector3.md) | Output a Vector3 vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:902](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L902)
+
+___
+
+### lerp
+
+▸ **lerp**(`v0`, `v1`, `t`): `void`
+
+Computes the linear interpolation between two Vector3, and the result is the current object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v0` | [`Vector3`](Vector3.md) | Vector 1 |
+| `v1` | [`Vector3`](Vector3.md) | Vector 2 |
+| `t` | `number` | Interpolation factor |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Vector3.ts:922](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L922)
+
+___
+
+### clamp
+
+▸ **clamp**(`min`, `max`): [`Vector3`](Vector3.md)
+
+The x, y, and z components of this vector are rounded upward to the nearest integers.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `min` | [`Vector3`](Vector3.md) | minimum value |
+| `max` | [`Vector3`](Vector3.md) | maximum value |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:944](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L944)
+
+___
+
+### toString
+
+▸ **toString**(): `string`
+
+Returns the string form of the current vector
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/math/Vector3.ts:1010](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1010)
+
+___
+
+### normalizeToWay2D\_XY
+
+▸ **normalizeToWay2D_XY**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Vector3.ts:1026](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1026)
+
+___
+
+### toArray
+
+▸ **toArray**(): `number`[]
+
+#### Returns
+
+`number`[]
+
+#### Defined in
+
+[src/math/Vector3.ts:1044](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1044)
+
+___
+
+### copyToBytes
+
+▸ **copyToBytes**(`byte`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `byte` | `DataView` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Vector3.ts:1048](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1048)
+
+___
+
+### crossProduct
+
+▸ **crossProduct**(`a`, `target?`): [`Vector3`](Vector3.md)
+
+You take the cross product of two vectors,
+The cross product is going to be the perpendicular vector between these two vectors
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) | `undefined` | Take the cross product of another vector |
+| `target` | [`Vector3`](Vector3.md) | `null` | - |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+Vector3 returns the cross product vector
+
+#### Defined in
+
+[src/math/Vector3.ts:1060](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1060)
+
+___
+
+### crossVectors
+
+▸ **crossVectors**(`a`, `b`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `a` | [`Vector3`](Vector3.md) |
+| `b` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/math/Vector3.ts:1069](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1069)
+
+___
+
+### multiplyScalar
+
+▸ **multiplyScalar**(`scalar`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scalar` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:1074](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1074)
+
+___
+
+### setFromArray
+
+▸ **setFromArray**(`array`, `firstElementPos?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `array` | `number`[] | `undefined` |
+| `firstElementPos` | `number` | `0` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/math/Vector3.ts:1082](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1082)
+
+___
+
+### divideScalar
+
+▸ **divideScalar**(`scalar`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scalar` | `any` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:1088](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1088)
+
+___
+
+### clampLength
+
+▸ **clampLength**(`min`, `max`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `min` | `number` |
+| `max` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:1092](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1092)
+
+___
+
+### setScalar
+
+▸ **setScalar**(`value`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:1097](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1097)
+
+___
+
+### addScaledVector
+
+▸ **addScaledVector**(`v`, `scale`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`Vector3`](Vector3.md) |
+| `scale` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:1104](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1104)
+
+___
+
+### pointInsideTriangle
+
+▸ **pointInsideTriangle**(`pt`, `pt0`, `pt1`, `pt2`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pt` | [`Vector3`](Vector3.md) |
+| `pt0` | [`Vector3`](Vector3.md) |
+| `pt1` | [`Vector3`](Vector3.md) |
+| `pt2` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/math/Vector3.ts:1133](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1133)
+
+___
+
+### serialize
+
+▸ **serialize**(`position`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `position` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/math/Vector3.ts:1162](https://github.com/Orillusion/orillusion/blob/main/src/math/Vector3.ts#L1162)
diff --git a/docs/api/classes/Vector3Ex.md b/docs/api/classes/Vector3Ex.md
new file mode 100644
index 00000000..0f05ce5f
--- /dev/null
+++ b/docs/api/classes/Vector3Ex.md
@@ -0,0 +1,350 @@
+# Class: Vector3Ex
+
+extra function of vector3
+
+### Constructors
+
+- [constructor](Vector3Ex.md#constructor)
+
+### Methods
+
+- [add](Vector3Ex.md#add)
+- [sub](Vector3Ex.md#sub)
+- [mul](Vector3Ex.md#mul)
+- [mulScale](Vector3Ex.md#mulscale)
+- [div](Vector3Ex.md#div)
+- [normalize](Vector3Ex.md#normalize)
+- [dot](Vector3Ex.md#dot)
+- [calculateVectorAngle\_xz](Vector3Ex.md#calculatevectorangle_xz)
+- [distance](Vector3Ex.md#distance)
+- [getRandomXYZ](Vector3Ex.md#getrandomxyz)
+- [getRandomV3](Vector3Ex.md#getrandomv3)
+- [sphere](Vector3Ex.md#sphere)
+- [sphereXYZ](Vector3Ex.md#spherexyz)
+
+## Constructors
+
+### constructor
+
+• **new Vector3Ex**(): [`Vector3Ex`](Vector3Ex.md)
+
+#### Returns
+
+[`Vector3Ex`](Vector3Ex.md)
+
+## Methods
+
+### add
+
+▸ **add**(`v1`, `v2`, `target?`): [`Vector3`](Vector3.md)
+
+vector3 add
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v1` | [`Vector3`](Vector3.md) |
+| `v2` | [`Vector3`](Vector3.md) |
+| `target?` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/util/Vector3Ex.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/util/Vector3Ex.ts#L15)
+
+___
+
+### sub
+
+▸ **sub**(`v1`, `v2`, `target?`): [`Vector3`](Vector3.md)
+
+vector3 sub
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v1` | [`Vector3`](Vector3.md) |
+| `v2` | [`Vector3`](Vector3.md) |
+| `target?` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/util/Vector3Ex.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/util/Vector3Ex.ts#L32)
+
+___
+
+### mul
+
+▸ **mul**(`v1`, `v2`, `target?`): [`Vector3`](Vector3.md)
+
+vector3 mul
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v1` | [`Vector3`](Vector3.md) |
+| `v2` | [`Vector3`](Vector3.md) |
+| `target?` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/util/Vector3Ex.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/util/Vector3Ex.ts#L49)
+
+___
+
+### mulScale
+
+▸ **mulScale**(`v1`, `v`, `target?`): [`Vector3`](Vector3.md)
+
+vector3 mul
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v1` | [`Vector3`](Vector3.md) |
+| `v` | `number` |
+| `target?` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/util/Vector3Ex.ts:66](https://github.com/Orillusion/orillusion/blob/main/src/util/Vector3Ex.ts#L66)
+
+___
+
+### div
+
+▸ **div**(`v1`, `v2`, `target?`): [`Vector3`](Vector3.md)
+
+vector3 div
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v1` | [`Vector3`](Vector3.md) |
+| `v2` | [`Vector3`](Vector3.md) |
+| `target?` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/util/Vector3Ex.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/util/Vector3Ex.ts#L83)
+
+___
+
+### normalize
+
+▸ **normalize**(`v1`): [`Vector3`](Vector3.md)
+
+normalize
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v1` | [`Vector3`](Vector3.md) | source vector |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+result vector
+
+#### Defined in
+
+[src/util/Vector3Ex.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/util/Vector3Ex.ts#L98)
+
+___
+
+### dot
+
+▸ **dot**(`v1`, `v2`): `number`
+
+dot
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v1` | [`Vector3`](Vector3.md) | first vector |
+| `v2` | [`Vector3`](Vector3.md) | second vector |
+
+#### Returns
+
+`number`
+
+result
+
+#### Defined in
+
+[src/util/Vector3Ex.ts:109](https://github.com/Orillusion/orillusion/blob/main/src/util/Vector3Ex.ts#L109)
+
+___
+
+### calculateVectorAngle\_xz
+
+▸ **calculateVectorAngle_xz**(`v1`, `v2`): `number`
+
+Calculate the angle between two vectors
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v1` | [`Vector3`](Vector3.md) | first vector |
+| `v2` | [`Vector3`](Vector3.md) | second vector |
+
+#### Returns
+
+`number`
+
+Angle result in radians
+
+#### Defined in
+
+[src/util/Vector3Ex.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/util/Vector3Ex.ts#L121)
+
+___
+
+### distance
+
+▸ **distance**(`v1`, `v2`): `number`
+
+Calculate the distance between two points
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `v1` | [`Vector3`](Vector3.md) | first vector |
+| `v2` | [`Vector3`](Vector3.md) | second vector |
+
+#### Returns
+
+`number`
+
+distance
+
+**`Static`**
+
+#### Defined in
+
+[src/util/Vector3Ex.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/util/Vector3Ex.ts#L135)
+
+___
+
+### getRandomXYZ
+
+▸ **getRandomXYZ**(`min?`, `max?`): [`Vector3`](Vector3.md)
+
+make a Random 3D Vector
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `min` | `number` | `-100` | The min random value of vector components |
+| `max` | `number` | `100` | The max random value of vector components |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+random vector
+
+#### Defined in
+
+[src/util/Vector3Ex.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/util/Vector3Ex.ts#L145)
+
+___
+
+### getRandomV3
+
+▸ **getRandomV3**(`min?`, `max?`, `yMin`, `yMax`): [`Vector3`](Vector3.md)
+
+make a Random 3D Vector
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `min` | `number` | `-100` | The min random value of vector component-x |
+| `max` | `number` | `100` | The max random value of vector component-x |
+| `yMin` | `number` | `undefined` | The min random value of vector component-y |
+| `yMax` | `number` | `undefined` | The max random value of vector component-y |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+random vector
+
+#### Defined in
+
+[src/util/Vector3Ex.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/util/Vector3Ex.ts#L157)
+
+___
+
+### sphere
+
+▸ **sphere**(`radius`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radius` | `number` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/util/Vector3Ex.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/util/Vector3Ex.ts#L161)
+
+___
+
+### sphereXYZ
+
+▸ **sphereXYZ**(`radiusMin`, `radiusMax`, `x?`, `y?`, `z?`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `radiusMin` | `number` | `undefined` |
+| `radiusMax` | `number` | `undefined` |
+| `x` | `number` | `1` |
+| `y` | `number` | `1` |
+| `z` | `number` | `1` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Defined in
+
+[src/util/Vector3Ex.ts:169](https://github.com/Orillusion/orillusion/blob/main/src/util/Vector3Ex.ts#L169)
diff --git a/docs/api/classes/VertexAttribute.md b/docs/api/classes/VertexAttribute.md
new file mode 100644
index 00000000..36ec3930
--- /dev/null
+++ b/docs/api/classes/VertexAttribute.md
@@ -0,0 +1,89 @@
+# Class: VertexAttribute
+
+## Implements
+
+- `GPUVertexAttribute`
+
+### Constructors
+
+- [constructor](VertexAttribute.md#constructor)
+
+### Properties
+
+- [name](VertexAttribute.md#name)
+- [format](VertexAttribute.md#format)
+- [offset](VertexAttribute.md#offset)
+- [shaderLocation](VertexAttribute.md#shaderlocation)
+- [stride](VertexAttribute.md#stride)
+
+## Constructors
+
+### constructor
+
+• **new VertexAttribute**(): [`VertexAttribute`](VertexAttribute.md)
+
+#### Returns
+
+[`VertexAttribute`](VertexAttribute.md)
+
+## Properties
+
+### name
+
+• **name**: `string`
+
+#### Defined in
+
+[src/core/geometry/VertexAttribute.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/VertexAttribute.ts#L12)
+
+___
+
+### format
+
+• **format**: `GPUVertexFormat`
+
+#### Implementation of
+
+GPUVertexAttribute.format
+
+#### Defined in
+
+[src/core/geometry/VertexAttribute.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/VertexAttribute.ts#L13)
+
+___
+
+### offset
+
+• **offset**: `number`
+
+#### Implementation of
+
+GPUVertexAttribute.offset
+
+#### Defined in
+
+[src/core/geometry/VertexAttribute.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/VertexAttribute.ts#L14)
+
+___
+
+### shaderLocation
+
+• **shaderLocation**: `number`
+
+#### Implementation of
+
+GPUVertexAttribute.shaderLocation
+
+#### Defined in
+
+[src/core/geometry/VertexAttribute.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/VertexAttribute.ts#L15)
+
+___
+
+### stride
+
+• **stride**: `number`
+
+#### Defined in
+
+[src/core/geometry/VertexAttribute.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/VertexAttribute.ts#L16)
diff --git a/docs/api/classes/VertexBufferLayout.md b/docs/api/classes/VertexBufferLayout.md
new file mode 100644
index 00000000..c5e9ba62
--- /dev/null
+++ b/docs/api/classes/VertexBufferLayout.md
@@ -0,0 +1,100 @@
+# Class: VertexBufferLayout
+
+## Implements
+
+- `GPUVertexBufferLayout`
+
+### Constructors
+
+- [constructor](VertexBufferLayout.md#constructor)
+
+### Properties
+
+- [name](VertexBufferLayout.md#name)
+- [offset](VertexBufferLayout.md#offset)
+- [size](VertexBufferLayout.md#size)
+- [arrayStride](VertexBufferLayout.md#arraystride)
+- [stepMode](VertexBufferLayout.md#stepmode)
+- [attributes](VertexBufferLayout.md#attributes)
+
+## Constructors
+
+### constructor
+
+• **new VertexBufferLayout**(): [`VertexBufferLayout`](VertexBufferLayout.md)
+
+#### Returns
+
+[`VertexBufferLayout`](VertexBufferLayout.md)
+
+## Properties
+
+### name
+
+• **name**: `string`
+
+#### Defined in
+
+[src/core/geometry/VertexAttribute.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/VertexAttribute.ts#L3)
+
+___
+
+### offset
+
+• **offset**: `number`
+
+#### Defined in
+
+[src/core/geometry/VertexAttribute.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/VertexAttribute.ts#L4)
+
+___
+
+### size
+
+• **size**: `number`
+
+#### Defined in
+
+[src/core/geometry/VertexAttribute.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/VertexAttribute.ts#L5)
+
+___
+
+### arrayStride
+
+• **arrayStride**: `number`
+
+#### Implementation of
+
+GPUVertexBufferLayout.arrayStride
+
+#### Defined in
+
+[src/core/geometry/VertexAttribute.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/VertexAttribute.ts#L6)
+
+___
+
+### stepMode
+
+• `Optional` **stepMode**: `GPUVertexStepMode`
+
+#### Implementation of
+
+GPUVertexBufferLayout.stepMode
+
+#### Defined in
+
+[src/core/geometry/VertexAttribute.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/VertexAttribute.ts#L7)
+
+___
+
+### attributes
+
+• **attributes**: `Iterable`\<`GPUVertexAttribute`\>
+
+#### Implementation of
+
+GPUVertexBufferLayout.attributes
+
+#### Defined in
+
+[src/core/geometry/VertexAttribute.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/VertexAttribute.ts#L8)
diff --git a/docs/api/classes/VertexGPUBuffer.md b/docs/api/classes/VertexGPUBuffer.md
new file mode 100644
index 00000000..14586242
--- /dev/null
+++ b/docs/api/classes/VertexGPUBuffer.md
@@ -0,0 +1,1298 @@
+# Class: VertexGPUBuffer
+
+The buffer use at geometry indices
+written in the computer shader or CPU Coder
+usage GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX
+
+## Hierarchy
+
+- `GPUBufferBase`
+
+ ↳ **`VertexGPUBuffer`**
+
+### Constructors
+
+- [constructor](VertexGPUBuffer.md#constructor)
+
+### Properties
+
+- [bufferType](VertexGPUBuffer.md#buffertype)
+- [buffer](VertexGPUBuffer.md#buffer)
+- [memory](VertexGPUBuffer.md#memory)
+- [memoryNodes](VertexGPUBuffer.md#memorynodes)
+- [seek](VertexGPUBuffer.md#seek)
+- [outFloat32Array](VertexGPUBuffer.md#outfloat32array)
+- [byteSize](VertexGPUBuffer.md#bytesize)
+- [usage](VertexGPUBuffer.md#usage)
+- [visibility](VertexGPUBuffer.md#visibility)
+- [node](VertexGPUBuffer.md#node)
+
+### Methods
+
+- [debug](VertexGPUBuffer.md#debug)
+- [reset](VertexGPUBuffer.md#reset)
+- [setBoolean](VertexGPUBuffer.md#setboolean)
+- [readBoole](VertexGPUBuffer.md#readboole)
+- [setFloat](VertexGPUBuffer.md#setfloat)
+- [getFloat](VertexGPUBuffer.md#getfloat)
+- [setInt8](VertexGPUBuffer.md#setint8)
+- [getInt8](VertexGPUBuffer.md#getint8)
+- [setInt16](VertexGPUBuffer.md#setint16)
+- [getInt16](VertexGPUBuffer.md#getint16)
+- [setInt32](VertexGPUBuffer.md#setint32)
+- [getInt32](VertexGPUBuffer.md#getint32)
+- [setUint8](VertexGPUBuffer.md#setuint8)
+- [getUint8](VertexGPUBuffer.md#getuint8)
+- [setUint16](VertexGPUBuffer.md#setuint16)
+- [getUint16](VertexGPUBuffer.md#getuint16)
+- [setUint32](VertexGPUBuffer.md#setuint32)
+- [getUint32](VertexGPUBuffer.md#getuint32)
+- [setVector2](VertexGPUBuffer.md#setvector2)
+- [getVector2](VertexGPUBuffer.md#getvector2)
+- [setVector3](VertexGPUBuffer.md#setvector3)
+- [getVector3](VertexGPUBuffer.md#getvector3)
+- [setVector4](VertexGPUBuffer.md#setvector4)
+- [getVector4](VertexGPUBuffer.md#getvector4)
+- [setVector4Array](VertexGPUBuffer.md#setvector4array)
+- [setColor](VertexGPUBuffer.md#setcolor)
+- [getColor](VertexGPUBuffer.md#getcolor)
+- [setColorArray](VertexGPUBuffer.md#setcolorarray)
+- [setMatrix](VertexGPUBuffer.md#setmatrix)
+- [setMatrixArray](VertexGPUBuffer.md#setmatrixarray)
+- [setArray](VertexGPUBuffer.md#setarray)
+- [setFloat32Array](VertexGPUBuffer.md#setfloat32array)
+- [setInt32Array](VertexGPUBuffer.md#setint32array)
+- [setUint32Array](VertexGPUBuffer.md#setuint32array)
+- [setStruct](VertexGPUBuffer.md#setstruct)
+- [setStructArray](VertexGPUBuffer.md#setstructarray)
+- [clean](VertexGPUBuffer.md#clean)
+- [apply](VertexGPUBuffer.md#apply)
+- [mapAsyncWrite](VertexGPUBuffer.md#mapasyncwrite)
+- [destroy](VertexGPUBuffer.md#destroy)
+- [resizeBuffer](VertexGPUBuffer.md#resizebuffer)
+- [readBuffer](VertexGPUBuffer.md#readbuffer)
+
+## Constructors
+
+### constructor
+
+• **new VertexGPUBuffer**(`size`): [`VertexGPUBuffer`](VertexGPUBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `size` | `number` |
+
+#### Returns
+
+[`VertexGPUBuffer`](VertexGPUBuffer.md)
+
+#### Overrides
+
+GPUBufferBase.constructor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/VertexGPUBuffer.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/VertexGPUBuffer.ts#L15)
+
+## Properties
+
+### bufferType
+
+• **bufferType**: [`GPUBufferType`](../enums/GPUBufferType.md)
+
+#### Inherited from
+
+GPUBufferBase.bufferType
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L20)
+
+___
+
+### buffer
+
+• **buffer**: `GPUBuffer`
+
+#### Inherited from
+
+GPUBufferBase.buffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L21)
+
+___
+
+### memory
+
+• **memory**: `MemoryDO`
+
+#### Inherited from
+
+GPUBufferBase.memory
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L22)
+
+___
+
+### memoryNodes
+
+• **memoryNodes**: `Map`\<`string` \| `number`, `MemoryInfo`\>
+
+#### Inherited from
+
+GPUBufferBase.memoryNodes
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L23)
+
+___
+
+### seek
+
+• **seek**: `number`
+
+#### Inherited from
+
+GPUBufferBase.seek
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L24)
+
+___
+
+### outFloat32Array
+
+• **outFloat32Array**: `Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.outFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L25)
+
+___
+
+### byteSize
+
+• **byteSize**: `number`
+
+#### Inherited from
+
+GPUBufferBase.byteSize
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L26)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+#### Inherited from
+
+GPUBufferBase.usage
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L27)
+
+___
+
+### visibility
+
+• **visibility**: `number`
+
+#### Inherited from
+
+GPUBufferBase.visibility
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L28)
+
+___
+
+### node
+
+• **node**: `MemoryInfo`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/VertexGPUBuffer.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/VertexGPUBuffer.ts#L14)
+
+## Methods
+
+### debug
+
+▸ **debug**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.debug
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L41)
+
+___
+
+### reset
+
+▸ **reset**(`clean?`, `size?`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `clean` | `boolean` | `false` |
+| `size` | `number` | `0` |
+| `data?` | `Float32Array` | `undefined` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.reset
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L44)
+
+___
+
+### setBoolean
+
+▸ **setBoolean**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setBoolean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L52)
+
+___
+
+### readBoole
+
+▸ **readBoole**(`name`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+GPUBufferBase.readBoole
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L62)
+
+___
+
+### setFloat
+
+▸ **setFloat**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L70)
+
+___
+
+### getFloat
+
+▸ **getFloat**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L79)
+
+___
+
+### setInt8
+
+▸ **setInt8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L87)
+
+___
+
+### getInt8
+
+▸ **getInt8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L96)
+
+___
+
+### setInt16
+
+▸ **setInt16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L104)
+
+___
+
+### getInt16
+
+▸ **getInt16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L113)
+
+___
+
+### setInt32
+
+▸ **setInt32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L121)
+
+___
+
+### getInt32
+
+▸ **getInt32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:130](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L130)
+
+___
+
+### setUint8
+
+▸ **setUint8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:138](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L138)
+
+___
+
+### getUint8
+
+▸ **getUint8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L147)
+
+___
+
+### setUint16
+
+▸ **setUint16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L156)
+
+___
+
+### getUint16
+
+▸ **getUint16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L165)
+
+___
+
+### setUint32
+
+▸ **setUint32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L173)
+
+___
+
+### getUint32
+
+▸ **getUint32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L182)
+
+___
+
+### setVector2
+
+▸ **setVector2**(`name`, `v2`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v2` | [`Vector2`](Vector2.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L190)
+
+___
+
+### getVector2
+
+▸ **getVector2**(`name`): [`Vector2`](Vector2.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector2`](Vector2.md)
+
+#### Inherited from
+
+GPUBufferBase.getVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L199)
+
+___
+
+### setVector3
+
+▸ **setVector3**(`name`, `v3`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v3` | [`Vector3`](Vector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L207)
+
+___
+
+### getVector3
+
+▸ **getVector3**(`name`): [`Vector3`](Vector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Vector3`](Vector3.md)
+
+#### Inherited from
+
+GPUBufferBase.getVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L216)
+
+___
+
+### setVector4
+
+▸ **setVector4**(`name`, `v4`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4` | `Vector4` \| [`Quaternion`](Quaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L224)
+
+___
+
+### getVector4
+
+▸ **getVector4**(`name`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+GPUBufferBase.getVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L233)
+
+___
+
+### setVector4Array
+
+▸ **setVector4Array**(`name`, `v4Array`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4Array` | [`Vector3`](Vector3.md)[] \| `Vector4`[] \| [`Quaternion`](Quaternion.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:241](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L241)
+
+___
+
+### setColor
+
+▸ **setColor**(`name`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `color` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:250](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L250)
+
+___
+
+### getColor
+
+▸ **getColor**(`name`): [`Color`](Color.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+GPUBufferBase.getColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:259](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L259)
+
+___
+
+### setColorArray
+
+▸ **setColorArray**(`name`, `colorArray`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `colorArray` | [`Color`](Color.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColorArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:267](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L267)
+
+___
+
+### setMatrix
+
+▸ **setMatrix**(`name`, `mat`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mat` | [`Matrix4`](Matrix4.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrix
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:276](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L276)
+
+___
+
+### setMatrixArray
+
+▸ **setMatrixArray**(`name`, `mats`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mats` | [`Matrix4`](Matrix4.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrixArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:285](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L285)
+
+___
+
+### setArray
+
+▸ **setArray**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `number`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:297](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L297)
+
+___
+
+### setFloat32Array
+
+▸ **setFloat32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Float32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:306](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L306)
+
+___
+
+### setInt32Array
+
+▸ **setInt32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Int32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L315)
+
+___
+
+### setUint32Array
+
+▸ **setUint32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Uint32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:325](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L325)
+
+___
+
+### setStruct
+
+▸ **setStruct**\<`T`\>(`c`, `index`, `data`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `index` | `number` |
+| `data` | `any` |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStruct
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:334](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L334)
+
+___
+
+### setStructArray
+
+▸ **setStructArray**\<`T`\>(`c`, `dataList`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Struct`](Struct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `dataList` | `any`[] |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStructArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:390](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L390)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.clean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:403](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L403)
+
+___
+
+### apply
+
+▸ **apply**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.apply
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L408)
+
+___
+
+### mapAsyncWrite
+
+▸ **mapAsyncWrite**(`mapAsyncArray`, `len`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mapAsyncArray` | `Float32Array` |
+| `len` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.mapAsyncWrite
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:413](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L413)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.destroy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:454](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L454)
+
+___
+
+### resizeBuffer
+
+▸ **resizeBuffer**(`size`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `size` | `number` |
+| `data?` | [`ArrayBufferData`](../types/ArrayBufferData.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.resizeBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:511](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L511)
+
+___
+
+### readBuffer
+
+▸ **readBuffer**(): `Float32Array`
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:558](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L558)
+
+▸ **readBuffer**(`promise`): `Float32Array`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``false`` |
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:559](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L559)
+
+▸ **readBuffer**(`promise`): `Promise`\<`Float32Array`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``true`` |
+
+#### Returns
+
+`Promise`\<`Float32Array`\>
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:560](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L560)
diff --git a/docs/api/classes/View3D.md b/docs/api/classes/View3D.md
new file mode 100644
index 00000000..33194b0d
--- /dev/null
+++ b/docs/api/classes/View3D.md
@@ -0,0 +1,449 @@
+# Class: View3D
+
+## Hierarchy
+
+- `CEventListener`
+
+ ↳ **`View3D`**
+
+### Constructors
+
+- [constructor](View3D.md#constructor)
+
+### Properties
+
+- [pickFire](View3D.md#pickfire)
+- [guiPick](View3D.md#guipick)
+- [canvasList](View3D.md#canvaslist)
+- [id](View3D.md#id)
+- [current](View3D.md#current)
+- [type](View3D.md#type)
+- [thisObject](View3D.md#thisobject)
+- [handler](View3D.md#handler)
+- [param](View3D.md#param)
+- [priority](View3D.md#priority)
+
+### Accessors
+
+- [enable](View3D.md#enable)
+- [enablePick](View3D.md#enablepick)
+- [scene](View3D.md#scene)
+- [camera](View3D.md#camera)
+- [viewPort](View3D.md#viewport)
+
+### Methods
+
+- [enableUICanvas](View3D.md#enableuicanvas)
+- [disableUICanvas](View3D.md#disableuicanvas)
+- [equalCurrentListener](View3D.md#equalcurrentlistener)
+- [dispose](View3D.md#dispose)
+
+## Constructors
+
+### constructor
+
+• **new View3D**(`x?`, `y?`, `width?`, `height?`): [`View3D`](View3D.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `x` | `number` | `0` |
+| `y` | `number` | `0` |
+| `width` | `number` | `0` |
+| `height` | `number` | `0` |
+
+#### Returns
+
+[`View3D`](View3D.md)
+
+#### Overrides
+
+CEventListener.constructor
+
+#### Defined in
+
+[src/core/View3D.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/core/View3D.ts#L21)
+
+## Properties
+
+### pickFire
+
+• **pickFire**: [`PickFire`](PickFire.md)
+
+#### Defined in
+
+[src/core/View3D.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/core/View3D.ts#L17)
+
+___
+
+### guiPick
+
+• **guiPick**: [`GUIPick`](GUIPick.md)
+
+#### Defined in
+
+[src/core/View3D.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/core/View3D.ts#L18)
+
+___
+
+### canvasList
+
+• `Readonly` **canvasList**: [`GUICanvas`](GUICanvas.md)[]
+
+#### Defined in
+
+[src/core/View3D.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/core/View3D.ts#L19)
+
+___
+
+### id
+
+• **id**: `number` = `0`
+
+Record a id. When registering a listening event, the value will increase automatically
+
+#### Inherited from
+
+CEventListener.id
+
+#### Defined in
+
+[src/event/CEventListener.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventListener.ts#L16)
+
+___
+
+### current
+
+• **current**: `any`
+
+Returns current event dispatcher
+
+#### Inherited from
+
+CEventListener.current
+
+#### Defined in
+
+[src/event/CEventListener.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventListener.ts#L22)
+
+___
+
+### type
+
+• **type**: `string` \| `number` = `null`
+
+{string} event type
+
+#### Inherited from
+
+CEventListener.type
+
+#### Defined in
+
+[src/event/CEventListener.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventListener.ts#L32)
+
+___
+
+### thisObject
+
+• **thisObject**: `any` = `null`
+
+{any} the object is registerd
+
+#### Inherited from
+
+CEventListener.thisObject
+
+#### Defined in
+
+[src/event/CEventListener.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventListener.ts#L32)
+
+___
+
+### handler
+
+• **handler**: `Function` = `null`
+
+{Function} The callback function that handles events.
+
+#### Inherited from
+
+CEventListener.handler
+
+#### Defined in
+
+[src/event/CEventListener.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventListener.ts#L32)
+
+___
+
+### param
+
+• **param**: `any` = `null`
+
+{any} Parameters bound when registering events
+
+#### Inherited from
+
+CEventListener.param
+
+#### Defined in
+
+[src/event/CEventListener.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventListener.ts#L32)
+
+___
+
+### priority
+
+• **priority**: `number` = `0`
+
+{number} The priority of callback function execution, with a larger set value having priority to call
+
+#### Inherited from
+
+CEventListener.priority
+
+#### Defined in
+
+[src/event/CEventListener.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventListener.ts#L32)
+
+## Accessors
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/View3D.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/core/View3D.ts#L27)
+
+• `set` **enable**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/View3D.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/core/View3D.ts#L31)
+
+___
+
+### enablePick
+
+• `get` **enablePick**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/core/View3D.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/core/View3D.ts#L35)
+
+• `set` **enablePick**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/View3D.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/core/View3D.ts#L39)
+
+___
+
+### scene
+
+• `get` **scene**(): [`Scene3D`](Scene3D.md)
+
+#### Returns
+
+[`Scene3D`](Scene3D.md)
+
+#### Defined in
+
+[src/core/View3D.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/View3D.ts#L47)
+
+• `set` **scene**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Scene3D`](Scene3D.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/View3D.ts:51](https://github.com/Orillusion/orillusion/blob/main/src/core/View3D.ts#L51)
+
+___
+
+### camera
+
+• `get` **camera**(): [`Camera3D`](Camera3D.md)
+
+#### Returns
+
+[`Camera3D`](Camera3D.md)
+
+#### Defined in
+
+[src/core/View3D.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/core/View3D.ts#L64)
+
+• `set` **camera**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Camera3D`](Camera3D.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/View3D.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/core/View3D.ts#L68)
+
+___
+
+### viewPort
+
+• `get` **viewPort**(): `Vector4`
+
+#### Returns
+
+`Vector4`
+
+#### Defined in
+
+[src/core/View3D.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/core/View3D.ts#L72)
+
+• `set` **viewPort**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/View3D.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/core/View3D.ts#L76)
+
+## Methods
+
+### enableUICanvas
+
+▸ **enableUICanvas**(`index?`): [`GUICanvas`](GUICanvas.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `index` | `number` | `0` |
+
+#### Returns
+
+[`GUICanvas`](GUICanvas.md)
+
+#### Defined in
+
+[src/core/View3D.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/core/View3D.ts#L80)
+
+___
+
+### disableUICanvas
+
+▸ **disableUICanvas**(`index?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `index` | `number` | `0` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/View3D.ts:100](https://github.com/Orillusion/orillusion/blob/main/src/core/View3D.ts#L100)
+
+___
+
+### equalCurrentListener
+
+▸ **equalCurrentListener**(`type`, `handler`, `thisObject`, `param`): `boolean`
+
+Compare whether two events are the same
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` \| `number` | {string} event type |
+| `handler` | `Function` | {Function} The callback function that handles events. |
+| `thisObject` | `any` | {any} the object is registerd |
+| `param` | `any` | {any} Parameters bound when registering events |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean
+
+#### Inherited from
+
+CEventListener.equalCurrentListener
+
+#### Defined in
+
+[src/event/CEventListener.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventListener.ts#L43)
+
+___
+
+### dispose
+
+▸ **dispose**(): `void`
+
+release all registered event.
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+CEventListener.dispose
+
+#### Defined in
+
+[src/event/CEventListener.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventListener.ts#L55)
diff --git a/docs/api/classes/ViewPanel.md b/docs/api/classes/ViewPanel.md
new file mode 100644
index 00000000..b90be8c5
--- /dev/null
+++ b/docs/api/classes/ViewPanel.md
@@ -0,0 +1,1208 @@
+# Class: ViewPanel
+
+UI component container for view/screen space
+
+## Hierarchy
+
+- [`UIPanel`](UIPanel.md)
+
+ ↳ **`ViewPanel`**
+
+### Constructors
+
+- [constructor](ViewPanel.md#constructor)
+
+### Properties
+
+- [object3D](ViewPanel.md#object3d)
+- [isDestroyed](ViewPanel.md#isdestroyed)
+- [needUpdateGeometry](ViewPanel.md#needupdategeometry)
+- [panelOrder](ViewPanel.md#panelorder)
+- [needSortOnCameraZ](ViewPanel.md#needsortoncameraz)
+- [scissorEnable](ViewPanel.md#scissorenable)
+- [scissorCornerRadius](ViewPanel.md#scissorcornerradius)
+- [scissorFadeOutSize](ViewPanel.md#scissorfadeoutsize)
+- [panelRatio](ViewPanel.md#panelratio)
+- [isUIPanel](ViewPanel.md#isuipanel)
+- [isUIShadow](ViewPanel.md#isuishadow)
+- [isShadowless](ViewPanel.md#isshadowless)
+- [needUpdateShadow](ViewPanel.md#needupdateshadow)
+- [isViewPanel](ViewPanel.md#isviewpanel)
+- [space](ViewPanel.md#space)
+
+### Accessors
+
+- [eventDispatcher](ViewPanel.md#eventdispatcher)
+- [isStart](ViewPanel.md#isstart)
+- [transform](ViewPanel.md#transform)
+- [enable](ViewPanel.md#enable)
+- [uiTransform](ViewPanel.md#uitransform)
+- [visible](ViewPanel.md#visible)
+- [sprite](ViewPanel.md#sprite)
+- [color](ViewPanel.md#color)
+- [imageType](ViewPanel.md#imagetype)
+- [quadMaxCount](ViewPanel.md#quadmaxcount)
+- [renderer](ViewPanel.md#renderer)
+- [billboard](ViewPanel.md#billboard)
+- [cullMode](ViewPanel.md#cullmode)
+- [mainQuads](ViewPanel.md#mainquads)
+
+### Methods
+
+- [stop](ViewPanel.md#stop)
+- [onEnable](ViewPanel.md#onenable)
+- [onDisable](ViewPanel.md#ondisable)
+- [onLateUpdate](ViewPanel.md#onlateupdate)
+- [onBeforeUpdate](ViewPanel.md#onbeforeupdate)
+- [onCompute](ViewPanel.md#oncompute)
+- [onGraphic](ViewPanel.md#ongraphic)
+- [onParentChange](ViewPanel.md#onparentchange)
+- [onAddChild](ViewPanel.md#onaddchild)
+- [onRemoveChild](ViewPanel.md#onremovechild)
+- [beforeDestroy](ViewPanel.md#beforedestroy)
+- [copyComponent](ViewPanel.md#copycomponent)
+- [init](ViewPanel.md#init)
+- [updateDrawCallSegment](ViewPanel.md#updatedrawcallsegment)
+- [onUpdate](ViewPanel.md#onupdate)
+- [destroy](ViewPanel.md#destroy)
+- [start](ViewPanel.md#start)
+- [setShadowRenderer](ViewPanel.md#setshadowrenderer)
+- [setShadowSource](ViewPanel.md#setshadowsource)
+- [getShadowRender](ViewPanel.md#getshadowrender)
+- [cloneTo](ViewPanel.md#cloneto)
+
+## Constructors
+
+### constructor
+
+• **new ViewPanel**(): [`ViewPanel`](ViewPanel.md)
+
+#### Returns
+
+[`ViewPanel`](ViewPanel.md)
+
+#### Overrides
+
+[UIPanel](UIPanel.md).[constructor](UIPanel.md#constructor)
+
+#### Defined in
+
+[src/components/gui/uiComponents/ViewPanel.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/ViewPanel.ts#L13)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[object3D](UIPanel.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[isDestroyed](UIPanel.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### needUpdateGeometry
+
+• **needUpdateGeometry**: `boolean` = `true`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[needUpdateGeometry](UIPanel.md#needupdategeometry)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L21)
+
+___
+
+### panelOrder
+
+• **panelOrder**: `number` = `0`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[panelOrder](UIPanel.md#panelorder)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L22)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[needSortOnCameraZ](UIPanel.md#needsortoncameraz)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L23)
+
+___
+
+### scissorEnable
+
+• **scissorEnable**: `boolean` = `false`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[scissorEnable](UIPanel.md#scissorenable)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L27)
+
+___
+
+### scissorCornerRadius
+
+• **scissorCornerRadius**: `number` = `0`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[scissorCornerRadius](UIPanel.md#scissorcornerradius)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L28)
+
+___
+
+### scissorFadeOutSize
+
+• **scissorFadeOutSize**: `number` = `0`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[scissorFadeOutSize](UIPanel.md#scissorfadeoutsize)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L29)
+
+___
+
+### panelRatio
+
+• **panelRatio**: `number` = `1`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[panelRatio](UIPanel.md#panelratio)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L35)
+
+___
+
+### isUIPanel
+
+• `Readonly` **isUIPanel**: ``true``
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[isUIPanel](UIPanel.md#isuipanel)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L36)
+
+___
+
+### isUIShadow
+
+• `Optional` **isUIShadow**: `boolean`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[isUIShadow](UIPanel.md#isuishadow)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L12)
+
+___
+
+### isShadowless
+
+• `Optional` **isShadowless**: `boolean`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[isShadowless](UIPanel.md#isshadowless)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L13)
+
+___
+
+### needUpdateShadow
+
+• **needUpdateShadow**: `boolean`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[needUpdateShadow](UIPanel.md#needupdateshadow)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L14)
+
+___
+
+### isViewPanel
+
+• `Readonly` **isViewPanel**: ``true``
+
+#### Defined in
+
+[src/components/gui/uiComponents/ViewPanel.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/ViewPanel.ts#L11)
+
+___
+
+### space
+
+• `Readonly` **space**: [`GUISpace`](../enums/GUISpace.md) = `GUISpace.View`
+
+#### Overrides
+
+[UIPanel](UIPanel.md).[space](UIPanel.md#space)
+
+#### Defined in
+
+[src/components/gui/uiComponents/ViewPanel.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/ViewPanel.ts#L12)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+UIPanel.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIPanel.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIPanel.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+UIPanel.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIPanel.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIPanel.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### uiTransform
+
+• `get` **uiTransform**(): [`UITransform`](UITransform.md)
+
+#### Returns
+
+[`UITransform`](UITransform.md)
+
+#### Inherited from
+
+UIPanel.uiTransform
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L16)
+
+___
+
+### visible
+
+• `get` **visible**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIPanel.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L20)
+
+• `set` **visible**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIPanel.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L24)
+
+___
+
+### sprite
+
+• `get` **sprite**(): [`GUISprite`](GUISprite.md)
+
+#### Returns
+
+[`GUISprite`](GUISprite.md)
+
+#### Inherited from
+
+UIPanel.sprite
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L54)
+
+• `set` **sprite**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GUISprite`](GUISprite.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIPanel.sprite
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L34)
+
+___
+
+### color
+
+• `get` **color**(): [`Color`](Color.md)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+UIPanel.color
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:74](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L74)
+
+• `set` **color**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIPanel.color
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L78)
+
+___
+
+### imageType
+
+• `get` **imageType**(): [`ImageType`](../enums/ImageType.md)
+
+#### Returns
+
+[`ImageType`](../enums/ImageType.md)
+
+#### Inherited from
+
+UIPanel.imageType
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L85)
+
+• `set` **imageType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`ImageType`](../enums/ImageType.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIPanel.imageType
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L89)
+
+___
+
+### quadMaxCount
+
+• `get` **quadMaxCount**(): `number`
+
+Return How many Quads can a single GUIGeometry support at most
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+UIPanel.quadMaxCount
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L92)
+
+___
+
+### renderer
+
+• `get` **renderer**(): [`GUIRenderer`](GUIRenderer.md)
+
+#### Returns
+
+[`GUIRenderer`](GUIRenderer.md)
+
+#### Inherited from
+
+UIPanel.renderer
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L96)
+
+___
+
+### billboard
+
+• `get` **billboard**(): [`BillboardType`](../enums/BillboardType.md)
+
+#### Returns
+
+[`BillboardType`](../enums/BillboardType.md)
+
+#### Inherited from
+
+UIPanel.billboard
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L114)
+
+• `set` **billboard**(`type`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `type` | [`BillboardType`](../enums/BillboardType.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIPanel.billboard
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:100](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L100)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Inherited from
+
+UIPanel.cullMode
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L128)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIPanel.cullMode
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L118)
+
+___
+
+### mainQuads
+
+• `get` **mainQuads**(): [`GUIQuad`](GUIQuad.md)[]
+
+#### Returns
+
+[`GUIQuad`](GUIQuad.md)[]
+
+#### Inherited from
+
+UIPanel.mainQuads
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L44)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[stop](UIPanel.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onEnable](UIPanel.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onDisable](UIPanel.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onLateUpdate](UIPanel.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onBeforeUpdate](UIPanel.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onCompute](UIPanel.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onGraphic](UIPanel.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onParentChange](UIPanel.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onAddChild](UIPanel.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onRemoveChild](UIPanel.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[beforeDestroy](UIPanel.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[copyComponent](UIPanel.md#copycomponent)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L43)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[init](UIPanel.md#init)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L57)
+
+___
+
+### updateDrawCallSegment
+
+▸ **updateDrawCallSegment**(`index`, `indexStart`, `indexCount`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `indexStart` | `number` |
+| `indexCount` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[updateDrawCallSegment](UIPanel.md#updatedrawcallsegment)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L64)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onUpdate](UIPanel.md#onupdate)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L132)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+release this component
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[destroy](UIPanel.md#destroy)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L21)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[start](UIPanel.md#start)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L30)
+
+___
+
+### setShadowRenderer
+
+▸ **setShadowRenderer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIRenderAble`](UIRenderAble.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[setShadowRenderer](UIPanel.md#setshadowrenderer)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L48)
+
+___
+
+### setShadowSource
+
+▸ **setShadowSource**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIRenderAble`](UIRenderAble.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[setShadowSource](UIPanel.md#setshadowsource)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L52)
+
+___
+
+### getShadowRender
+
+▸ **getShadowRender**(): [`UIRenderAble`](UIRenderAble.md)
+
+#### Returns
+
+[`UIRenderAble`](UIRenderAble.md)
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[getShadowRender](UIPanel.md#getshadowrender)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L56)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIPanel](UIPanel.md).[cloneTo](UIPanel.md#cloneto)
+
+#### Defined in
+
+[src/components/gui/uiComponents/ViewPanel.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/ViewPanel.ts#L17)
diff --git a/docs/api/classes/WorldPanel.md b/docs/api/classes/WorldPanel.md
new file mode 100644
index 00000000..a01fb876
--- /dev/null
+++ b/docs/api/classes/WorldPanel.md
@@ -0,0 +1,1239 @@
+# Class: WorldPanel
+
+UI component container for world space
+
+## Hierarchy
+
+- [`UIPanel`](UIPanel.md)
+
+ ↳ **`WorldPanel`**
+
+### Constructors
+
+- [constructor](WorldPanel.md#constructor)
+
+### Properties
+
+- [object3D](WorldPanel.md#object3d)
+- [isDestroyed](WorldPanel.md#isdestroyed)
+- [needUpdateGeometry](WorldPanel.md#needupdategeometry)
+- [panelOrder](WorldPanel.md#panelorder)
+- [needSortOnCameraZ](WorldPanel.md#needsortoncameraz)
+- [scissorEnable](WorldPanel.md#scissorenable)
+- [scissorCornerRadius](WorldPanel.md#scissorcornerradius)
+- [scissorFadeOutSize](WorldPanel.md#scissorfadeoutsize)
+- [panelRatio](WorldPanel.md#panelratio)
+- [isUIPanel](WorldPanel.md#isuipanel)
+- [isUIShadow](WorldPanel.md#isuishadow)
+- [isShadowless](WorldPanel.md#isshadowless)
+- [needUpdateShadow](WorldPanel.md#needupdateshadow)
+- [isWorldPanel](WorldPanel.md#isworldpanel)
+- [space](WorldPanel.md#space)
+
+### Accessors
+
+- [eventDispatcher](WorldPanel.md#eventdispatcher)
+- [isStart](WorldPanel.md#isstart)
+- [transform](WorldPanel.md#transform)
+- [enable](WorldPanel.md#enable)
+- [uiTransform](WorldPanel.md#uitransform)
+- [visible](WorldPanel.md#visible)
+- [sprite](WorldPanel.md#sprite)
+- [color](WorldPanel.md#color)
+- [imageType](WorldPanel.md#imagetype)
+- [quadMaxCount](WorldPanel.md#quadmaxcount)
+- [renderer](WorldPanel.md#renderer)
+- [billboard](WorldPanel.md#billboard)
+- [cullMode](WorldPanel.md#cullmode)
+- [mainQuads](WorldPanel.md#mainquads)
+- [depthTest](WorldPanel.md#depthtest)
+
+### Methods
+
+- [stop](WorldPanel.md#stop)
+- [onEnable](WorldPanel.md#onenable)
+- [onDisable](WorldPanel.md#ondisable)
+- [onLateUpdate](WorldPanel.md#onlateupdate)
+- [onBeforeUpdate](WorldPanel.md#onbeforeupdate)
+- [onCompute](WorldPanel.md#oncompute)
+- [onGraphic](WorldPanel.md#ongraphic)
+- [onParentChange](WorldPanel.md#onparentchange)
+- [onAddChild](WorldPanel.md#onaddchild)
+- [onRemoveChild](WorldPanel.md#onremovechild)
+- [beforeDestroy](WorldPanel.md#beforedestroy)
+- [init](WorldPanel.md#init)
+- [updateDrawCallSegment](WorldPanel.md#updatedrawcallsegment)
+- [onUpdate](WorldPanel.md#onupdate)
+- [destroy](WorldPanel.md#destroy)
+- [start](WorldPanel.md#start)
+- [setShadowRenderer](WorldPanel.md#setshadowrenderer)
+- [setShadowSource](WorldPanel.md#setshadowsource)
+- [getShadowRender](WorldPanel.md#getshadowrender)
+- [cloneTo](WorldPanel.md#cloneto)
+- [copyComponent](WorldPanel.md#copycomponent)
+
+## Constructors
+
+### constructor
+
+• **new WorldPanel**(): [`WorldPanel`](WorldPanel.md)
+
+#### Returns
+
+[`WorldPanel`](WorldPanel.md)
+
+#### Overrides
+
+[UIPanel](UIPanel.md).[constructor](UIPanel.md#constructor)
+
+#### Defined in
+
+[src/components/gui/uiComponents/WorldPanel.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/WorldPanel.ts#L15)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](Object3D.md) = `null`
+
+owner object3D
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[object3D](UIPanel.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[isDestroyed](UIPanel.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### needUpdateGeometry
+
+• **needUpdateGeometry**: `boolean` = `true`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[needUpdateGeometry](UIPanel.md#needupdategeometry)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L21)
+
+___
+
+### panelOrder
+
+• **panelOrder**: `number` = `0`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[panelOrder](UIPanel.md#panelorder)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L22)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[needSortOnCameraZ](UIPanel.md#needsortoncameraz)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L23)
+
+___
+
+### scissorEnable
+
+• **scissorEnable**: `boolean` = `false`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[scissorEnable](UIPanel.md#scissorenable)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L27)
+
+___
+
+### scissorCornerRadius
+
+• **scissorCornerRadius**: `number` = `0`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[scissorCornerRadius](UIPanel.md#scissorcornerradius)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L28)
+
+___
+
+### scissorFadeOutSize
+
+• **scissorFadeOutSize**: `number` = `0`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[scissorFadeOutSize](UIPanel.md#scissorfadeoutsize)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L29)
+
+___
+
+### panelRatio
+
+• **panelRatio**: `number` = `1`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[panelRatio](UIPanel.md#panelratio)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L35)
+
+___
+
+### isUIPanel
+
+• `Readonly` **isUIPanel**: ``true``
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[isUIPanel](UIPanel.md#isuipanel)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L36)
+
+___
+
+### isUIShadow
+
+• `Optional` **isUIShadow**: `boolean`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[isUIShadow](UIPanel.md#isuishadow)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L12)
+
+___
+
+### isShadowless
+
+• `Optional` **isShadowless**: `boolean`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[isShadowless](UIPanel.md#isshadowless)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L13)
+
+___
+
+### needUpdateShadow
+
+• **needUpdateShadow**: `boolean`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[needUpdateShadow](UIPanel.md#needupdateshadow)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L14)
+
+___
+
+### isWorldPanel
+
+• `Readonly` **isWorldPanel**: ``true``
+
+#### Defined in
+
+[src/components/gui/uiComponents/WorldPanel.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/WorldPanel.ts#L11)
+
+___
+
+### space
+
+• `Readonly` **space**: [`GUISpace`](../enums/GUISpace.md) = `GUISpace.World`
+
+#### Overrides
+
+[UIPanel](UIPanel.md).[space](UIPanel.md#space)
+
+#### Defined in
+
+[src/components/gui/uiComponents/WorldPanel.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/WorldPanel.ts#L12)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): [`CEventDispatcher`](CEventDispatcher.md)
+
+#### Returns
+
+[`CEventDispatcher`](CEventDispatcher.md)
+
+#### Inherited from
+
+UIPanel.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CEventDispatcher`](CEventDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIPanel.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIPanel.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): [`Transform`](Transform.md)
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+[`Transform`](Transform.md)
+
+#### Inherited from
+
+UIPanel.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIPanel.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIPanel.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### uiTransform
+
+• `get` **uiTransform**(): [`UITransform`](UITransform.md)
+
+#### Returns
+
+[`UITransform`](UITransform.md)
+
+#### Inherited from
+
+UIPanel.uiTransform
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L16)
+
+___
+
+### visible
+
+• `get` **visible**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+UIPanel.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L20)
+
+• `set` **visible**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIPanel.visible
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIComponentBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIComponentBase.ts#L24)
+
+___
+
+### sprite
+
+• `get` **sprite**(): [`GUISprite`](GUISprite.md)
+
+#### Returns
+
+[`GUISprite`](GUISprite.md)
+
+#### Inherited from
+
+UIPanel.sprite
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L54)
+
+• `set` **sprite**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`GUISprite`](GUISprite.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIPanel.sprite
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L34)
+
+___
+
+### color
+
+• `get` **color**(): [`Color`](Color.md)
+
+#### Returns
+
+[`Color`](Color.md)
+
+#### Inherited from
+
+UIPanel.color
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:74](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L74)
+
+• `set` **color**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Color`](Color.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIPanel.color
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L78)
+
+___
+
+### imageType
+
+• `get` **imageType**(): [`ImageType`](../enums/ImageType.md)
+
+#### Returns
+
+[`ImageType`](../enums/ImageType.md)
+
+#### Inherited from
+
+UIPanel.imageType
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L85)
+
+• `set` **imageType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`ImageType`](../enums/ImageType.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIPanel.imageType
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIImage.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIImage.ts#L89)
+
+___
+
+### quadMaxCount
+
+• `get` **quadMaxCount**(): `number`
+
+Return How many Quads can a single GUIGeometry support at most
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+UIPanel.quadMaxCount
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L92)
+
+___
+
+### renderer
+
+• `get` **renderer**(): [`GUIRenderer`](GUIRenderer.md)
+
+#### Returns
+
+[`GUIRenderer`](GUIRenderer.md)
+
+#### Inherited from
+
+UIPanel.renderer
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L96)
+
+___
+
+### billboard
+
+• `get` **billboard**(): [`BillboardType`](../enums/BillboardType.md)
+
+#### Returns
+
+[`BillboardType`](../enums/BillboardType.md)
+
+#### Inherited from
+
+UIPanel.billboard
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L114)
+
+• `set` **billboard**(`type`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `type` | [`BillboardType`](../enums/BillboardType.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIPanel.billboard
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:100](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L100)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Inherited from
+
+UIPanel.cullMode
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L128)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+UIPanel.cullMode
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L118)
+
+___
+
+### mainQuads
+
+• `get` **mainQuads**(): [`GUIQuad`](GUIQuad.md)[]
+
+#### Returns
+
+[`GUIQuad`](GUIQuad.md)[]
+
+#### Inherited from
+
+UIPanel.mainQuads
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L44)
+
+___
+
+### depthTest
+
+• `get` **depthTest**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/components/gui/uiComponents/WorldPanel.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/WorldPanel.ts#L30)
+
+• `set` **depthTest**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/WorldPanel.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/WorldPanel.ts#L34)
+
+## Methods
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[stop](UIPanel.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onEnable](UIPanel.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onDisable](UIPanel.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onLateUpdate](UIPanel.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onBeforeUpdate](UIPanel.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onCompute](UIPanel.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onGraphic](UIPanel.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](Object3D.md) |
+| `currentParent?` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onParentChange](UIPanel.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onAddChild](UIPanel.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onRemoveChild](UIPanel.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[beforeDestroy](UIPanel.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[init](UIPanel.md#init)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L57)
+
+___
+
+### updateDrawCallSegment
+
+▸ **updateDrawCallSegment**(`index`, `indexStart`, `indexCount`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `indexStart` | `number` |
+| `indexCount` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[updateDrawCallSegment](UIPanel.md#updatedrawcallsegment)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L64)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](View3D.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[onUpdate](UIPanel.md#onupdate)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIPanel.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIPanel.ts#L132)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+release this component
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[destroy](UIPanel.md#destroy)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L21)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[start](UIPanel.md#start)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L30)
+
+___
+
+### setShadowRenderer
+
+▸ **setShadowRenderer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIRenderAble`](UIRenderAble.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[setShadowRenderer](UIPanel.md#setshadowrenderer)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L48)
+
+___
+
+### setShadowSource
+
+▸ **setShadowSource**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIRenderAble`](UIRenderAble.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[setShadowSource](UIPanel.md#setshadowsource)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L52)
+
+___
+
+### getShadowRender
+
+▸ **getShadowRender**(): [`UIRenderAble`](UIRenderAble.md)
+
+#### Returns
+
+[`UIRenderAble`](UIRenderAble.md)
+
+#### Inherited from
+
+[UIPanel](UIPanel.md).[getShadowRender](UIPanel.md#getshadowrender)
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIRenderAble.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIRenderAble.ts#L56)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | [`Object3D`](Object3D.md) | target object3D |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[UIPanel](UIPanel.md).[cloneTo](UIPanel.md#cloneto)
+
+#### Defined in
+
+[src/components/gui/uiComponents/WorldPanel.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/WorldPanel.ts#L19)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+[UIPanel](UIPanel.md).[copyComponent](UIPanel.md#copycomponent)
+
+#### Defined in
+
+[src/components/gui/uiComponents/WorldPanel.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/WorldPanel.ts#L24)
diff --git a/docs/api/classes/ZSorterUtil.md b/docs/api/classes/ZSorterUtil.md
new file mode 100644
index 00000000..83f3b27a
--- /dev/null
+++ b/docs/api/classes/ZSorterUtil.md
@@ -0,0 +1,68 @@
+# Class: ZSorterUtil
+
+Sort a data with world coordinates based on the camera's camera by z
+
+### Constructors
+
+- [constructor](ZSorterUtil.md#constructor)
+
+### Methods
+
+- [sort](ZSorterUtil.md#sort)
+- [worldToCameraDepth](ZSorterUtil.md#worldtocameradepth)
+
+## Constructors
+
+### constructor
+
+• **new ZSorterUtil**(): [`ZSorterUtil`](ZSorterUtil.md)
+
+#### Returns
+
+[`ZSorterUtil`](ZSorterUtil.md)
+
+## Methods
+
+### sort
+
+▸ **sort**(`camera3D`, `userDataList`, `getObject3D`, `result?`): `any`[]
+
+Sort userDataList by z based on the view coordinates of camera3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `camera3D` | [`Camera3D`](Camera3D.md) | camera3D |
+| `userDataList` | `any`[] | List of objects that users need to sort |
+| `getObject3D` | (`userData`: `any`) => [`Object3D`](Object3D.md) | Obtain the function of the Object 3D reference based on userData |
+| `result?` | `any`[] | Returns a list of userData, and if passed in as null, instantiates one |
+
+#### Returns
+
+`any`[]
+
+#### Defined in
+
+[src/util/ZSorterUtil.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/util/ZSorterUtil.ts#L39)
+
+___
+
+### worldToCameraDepth
+
+▸ **worldToCameraDepth**(`obj3d`, `camera?`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj3d` | [`Object3D`](Object3D.md) |
+| `camera?` | [`Camera3D`](Camera3D.md) |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/util/ZSorterUtil.ts:61](https://github.com/Orillusion/orillusion/blob/main/src/util/ZSorterUtil.ts#L61)
diff --git a/docs/api/classes/f32.md b/docs/api/classes/f32.md
new file mode 100644
index 00000000..60980858
--- /dev/null
+++ b/docs/api/classes/f32.md
@@ -0,0 +1,533 @@
+# Class: f32
+
+## Hierarchy
+
+- `Number`
+
+ ↳ **`f32`**
+
+### Constructors
+
+- [constructor](f32.md#constructor)
+
+### Properties
+
+- [EPSILON](f32.md#epsilon)
+- [MAX\_SAFE\_INTEGER](f32.md#max_safe_integer)
+- [MIN\_SAFE\_INTEGER](f32.md#min_safe_integer)
+- [MAX\_VALUE](f32.md#max_value)
+- [MIN\_VALUE](f32.md#min_value)
+- [NaN](f32.md#nan)
+- [NEGATIVE\_INFINITY](f32.md#negative_infinity)
+- [POSITIVE\_INFINITY](f32.md#positive_infinity)
+
+### Methods
+
+- [isFinite](f32.md#isfinite)
+- [isInteger](f32.md#isinteger)
+- [isNaN](f32.md#isnan)
+- [isSafeInteger](f32.md#issafeinteger)
+- [parseFloat](f32.md#parsefloat)
+- [parseInt](f32.md#parseint)
+- [toString](f32.md#tostring)
+- [toFixed](f32.md#tofixed)
+- [toExponential](f32.md#toexponential)
+- [toPrecision](f32.md#toprecision)
+- [valueOf](f32.md#valueof)
+- [toLocaleString](f32.md#tolocalestring)
+
+## Constructors
+
+### constructor
+
+• **new f32**(`value?`): [`f32`](f32.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value?` | `any` |
+
+#### Returns
+
+[`f32`](f32.md)
+
+#### Inherited from
+
+Number.constructor
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:589
+
+## Properties
+
+### EPSILON
+
+▪ `Static` `Readonly` **EPSILON**: `number`
+
+The value of Number.EPSILON is the difference between 1 and the smallest value greater than 1
+that is representable as a Number value, which is approximately:
+2.2204460492503130808472633361816 x 10−16.
+
+#### Inherited from
+
+Number.EPSILON
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:217
+
+___
+
+### MAX\_SAFE\_INTEGER
+
+▪ `Static` `Readonly` **MAX\_SAFE\_INTEGER**: `number`
+
+The value of the largest integer n such that n and n + 1 are both exactly representable as
+a Number value.
+The value of Number.MAX_SAFE_INTEGER is 9007199254740991 2^53 − 1.
+
+#### Inherited from
+
+Number.MAX\_SAFE\_INTEGER
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:252
+
+___
+
+### MIN\_SAFE\_INTEGER
+
+▪ `Static` `Readonly` **MIN\_SAFE\_INTEGER**: `number`
+
+The value of the smallest integer n such that n and n − 1 are both exactly representable as
+a Number value.
+The value of Number.MIN_SAFE_INTEGER is −9007199254740991 (−(2^53 − 1)).
+
+#### Inherited from
+
+Number.MIN\_SAFE\_INTEGER
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:259
+
+___
+
+### MAX\_VALUE
+
+▪ `Static` `Readonly` **MAX\_VALUE**: `number`
+
+The largest number that can be represented in JavaScript. Equal to approximately 1.79E+308.
+
+#### Inherited from
+
+Number.MAX\_VALUE
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:594
+
+___
+
+### MIN\_VALUE
+
+▪ `Static` `Readonly` **MIN\_VALUE**: `number`
+
+The closest number to zero that can be represented in JavaScript. Equal to approximately 5.00E-324.
+
+#### Inherited from
+
+Number.MIN\_VALUE
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:597
+
+___
+
+### NaN
+
+▪ `Static` `Readonly` **NaN**: `number`
+
+A value that is not a number.
+In equality comparisons, NaN does not equal any value, including itself. To test whether a value is equivalent to NaN, use the isNaN function.
+
+#### Inherited from
+
+Number.NaN
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:603
+
+___
+
+### NEGATIVE\_INFINITY
+
+▪ `Static` `Readonly` **NEGATIVE\_INFINITY**: `number`
+
+A value that is less than the largest negative number that can be represented in JavaScript.
+JavaScript displays NEGATIVE_INFINITY values as -infinity.
+
+#### Inherited from
+
+Number.NEGATIVE\_INFINITY
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:609
+
+___
+
+### POSITIVE\_INFINITY
+
+▪ `Static` `Readonly` **POSITIVE\_INFINITY**: `number`
+
+A value greater than the largest number that can be represented in JavaScript.
+JavaScript displays POSITIVE_INFINITY values as infinity.
+
+#### Inherited from
+
+Number.POSITIVE\_INFINITY
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:615
+
+## Methods
+
+### isFinite
+
+▸ **isFinite**(`number`): `boolean`
+
+Returns true if passed value is finite.
+Unlike the global isFinite, Number.isFinite doesn't forcibly convert the parameter to a
+number. Only finite values of the type number, result in true.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `number` | `unknown` | A numeric value. |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Number.isFinite
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:225
+
+___
+
+### isInteger
+
+▸ **isInteger**(`number`): `boolean`
+
+Returns true if the value passed is an integer, false otherwise.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `number` | `unknown` | A numeric value. |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Number.isInteger
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:231
+
+___
+
+### isNaN
+
+▸ **isNaN**(`number`): `boolean`
+
+Returns a Boolean value that indicates whether a value is the reserved value NaN (not a
+number). Unlike the global isNaN(), Number.isNaN() doesn't forcefully convert the parameter
+to a number. Only values of the type number, that are also NaN, result in true.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `number` | `unknown` | A numeric value. |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Number.isNaN
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:239
+
+___
+
+### isSafeInteger
+
+▸ **isSafeInteger**(`number`): `boolean`
+
+Returns true if the value passed is a safe integer.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `number` | `unknown` | A numeric value. |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Number.isSafeInteger
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:245
+
+___
+
+### parseFloat
+
+▸ **parseFloat**(`string`): `number`
+
+Converts a string to a floating-point number.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `string` | `string` | A string that contains a floating-point number. |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Number.parseFloat
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:265
+
+___
+
+### parseInt
+
+▸ **parseInt**(`string`, `radix?`): `number`
+
+Converts A string to an integer.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `string` | `string` | A string to convert into a number. |
+| `radix?` | `number` | A value between 2 and 36 that specifies the base of the number in `string`. If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. All other strings are considered decimal. |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Number.parseInt
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:274
+
+___
+
+### toString
+
+▸ **toString**(`radix?`): `string`
+
+Returns a string representation of an object.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `radix?` | `number` | Specifies a radix for converting numeric values to strings. This value is only used for numbers. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toString
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:564
+
+___
+
+### toFixed
+
+▸ **toFixed**(`fractionDigits?`): `string`
+
+Returns a string representing a number in fixed-point notation.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `fractionDigits?` | `number` | Number of digits after the decimal point. Must be in the range 0 - 20, inclusive. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toFixed
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:570
+
+___
+
+### toExponential
+
+▸ **toExponential**(`fractionDigits?`): `string`
+
+Returns a string containing a number represented in exponential notation.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `fractionDigits?` | `number` | Number of digits after the decimal point. Must be in the range 0 - 20, inclusive. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toExponential
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:576
+
+___
+
+### toPrecision
+
+▸ **toPrecision**(`precision?`): `string`
+
+Returns a string containing a number represented either in exponential or fixed-point notation with a specified number of digits.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `precision?` | `number` | Number of significant digits. Must be in the range 1 - 21, inclusive. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toPrecision
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:582
+
+___
+
+### valueOf
+
+▸ **valueOf**(): `number`
+
+Returns the primitive value of the specified object.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Number.valueOf
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:585
+
+___
+
+### toLocaleString
+
+▸ **toLocaleString**(`locales?`, `options?`): `string`
+
+Converts a number to a string by using the current or specified locale.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `locales?` | `string` \| `string`[] | A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. |
+| `options?` | `NumberFormatOptions` | An object that contains one or more properties that specify comparison options. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toLocaleString
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:4525
+
+▸ **toLocaleString**(`locales?`, `options?`): `string`
+
+Converts a number to a string by using the current or specified locale.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `locales?` | `LocalesArgument` | A locale string, array of locale strings, Intl.Locale object, or array of Intl.Locale objects that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. |
+| `options?` | `NumberFormatOptions` | An object that contains one or more properties that specify comparison options. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toLocaleString
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.number.d.ts:27
diff --git a/docs/api/classes/i32.md b/docs/api/classes/i32.md
new file mode 100644
index 00000000..b053c4f7
--- /dev/null
+++ b/docs/api/classes/i32.md
@@ -0,0 +1,533 @@
+# Class: i32
+
+## Hierarchy
+
+- `Number`
+
+ ↳ **`i32`**
+
+### Constructors
+
+- [constructor](i32.md#constructor)
+
+### Properties
+
+- [EPSILON](i32.md#epsilon)
+- [MAX\_SAFE\_INTEGER](i32.md#max_safe_integer)
+- [MIN\_SAFE\_INTEGER](i32.md#min_safe_integer)
+- [MAX\_VALUE](i32.md#max_value)
+- [MIN\_VALUE](i32.md#min_value)
+- [NaN](i32.md#nan)
+- [NEGATIVE\_INFINITY](i32.md#negative_infinity)
+- [POSITIVE\_INFINITY](i32.md#positive_infinity)
+
+### Methods
+
+- [isFinite](i32.md#isfinite)
+- [isInteger](i32.md#isinteger)
+- [isNaN](i32.md#isnan)
+- [isSafeInteger](i32.md#issafeinteger)
+- [parseFloat](i32.md#parsefloat)
+- [parseInt](i32.md#parseint)
+- [toString](i32.md#tostring)
+- [toFixed](i32.md#tofixed)
+- [toExponential](i32.md#toexponential)
+- [toPrecision](i32.md#toprecision)
+- [valueOf](i32.md#valueof)
+- [toLocaleString](i32.md#tolocalestring)
+
+## Constructors
+
+### constructor
+
+• **new i32**(`value?`): [`i32`](i32.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value?` | `any` |
+
+#### Returns
+
+[`i32`](i32.md)
+
+#### Inherited from
+
+Number.constructor
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:589
+
+## Properties
+
+### EPSILON
+
+▪ `Static` `Readonly` **EPSILON**: `number`
+
+The value of Number.EPSILON is the difference between 1 and the smallest value greater than 1
+that is representable as a Number value, which is approximately:
+2.2204460492503130808472633361816 x 10−16.
+
+#### Inherited from
+
+Number.EPSILON
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:217
+
+___
+
+### MAX\_SAFE\_INTEGER
+
+▪ `Static` `Readonly` **MAX\_SAFE\_INTEGER**: `number`
+
+The value of the largest integer n such that n and n + 1 are both exactly representable as
+a Number value.
+The value of Number.MAX_SAFE_INTEGER is 9007199254740991 2^53 − 1.
+
+#### Inherited from
+
+Number.MAX\_SAFE\_INTEGER
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:252
+
+___
+
+### MIN\_SAFE\_INTEGER
+
+▪ `Static` `Readonly` **MIN\_SAFE\_INTEGER**: `number`
+
+The value of the smallest integer n such that n and n − 1 are both exactly representable as
+a Number value.
+The value of Number.MIN_SAFE_INTEGER is −9007199254740991 (−(2^53 − 1)).
+
+#### Inherited from
+
+Number.MIN\_SAFE\_INTEGER
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:259
+
+___
+
+### MAX\_VALUE
+
+▪ `Static` `Readonly` **MAX\_VALUE**: `number`
+
+The largest number that can be represented in JavaScript. Equal to approximately 1.79E+308.
+
+#### Inherited from
+
+Number.MAX\_VALUE
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:594
+
+___
+
+### MIN\_VALUE
+
+▪ `Static` `Readonly` **MIN\_VALUE**: `number`
+
+The closest number to zero that can be represented in JavaScript. Equal to approximately 5.00E-324.
+
+#### Inherited from
+
+Number.MIN\_VALUE
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:597
+
+___
+
+### NaN
+
+▪ `Static` `Readonly` **NaN**: `number`
+
+A value that is not a number.
+In equality comparisons, NaN does not equal any value, including itself. To test whether a value is equivalent to NaN, use the isNaN function.
+
+#### Inherited from
+
+Number.NaN
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:603
+
+___
+
+### NEGATIVE\_INFINITY
+
+▪ `Static` `Readonly` **NEGATIVE\_INFINITY**: `number`
+
+A value that is less than the largest negative number that can be represented in JavaScript.
+JavaScript displays NEGATIVE_INFINITY values as -infinity.
+
+#### Inherited from
+
+Number.NEGATIVE\_INFINITY
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:609
+
+___
+
+### POSITIVE\_INFINITY
+
+▪ `Static` `Readonly` **POSITIVE\_INFINITY**: `number`
+
+A value greater than the largest number that can be represented in JavaScript.
+JavaScript displays POSITIVE_INFINITY values as infinity.
+
+#### Inherited from
+
+Number.POSITIVE\_INFINITY
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:615
+
+## Methods
+
+### isFinite
+
+▸ **isFinite**(`number`): `boolean`
+
+Returns true if passed value is finite.
+Unlike the global isFinite, Number.isFinite doesn't forcibly convert the parameter to a
+number. Only finite values of the type number, result in true.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `number` | `unknown` | A numeric value. |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Number.isFinite
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:225
+
+___
+
+### isInteger
+
+▸ **isInteger**(`number`): `boolean`
+
+Returns true if the value passed is an integer, false otherwise.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `number` | `unknown` | A numeric value. |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Number.isInteger
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:231
+
+___
+
+### isNaN
+
+▸ **isNaN**(`number`): `boolean`
+
+Returns a Boolean value that indicates whether a value is the reserved value NaN (not a
+number). Unlike the global isNaN(), Number.isNaN() doesn't forcefully convert the parameter
+to a number. Only values of the type number, that are also NaN, result in true.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `number` | `unknown` | A numeric value. |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Number.isNaN
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:239
+
+___
+
+### isSafeInteger
+
+▸ **isSafeInteger**(`number`): `boolean`
+
+Returns true if the value passed is a safe integer.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `number` | `unknown` | A numeric value. |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Number.isSafeInteger
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:245
+
+___
+
+### parseFloat
+
+▸ **parseFloat**(`string`): `number`
+
+Converts a string to a floating-point number.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `string` | `string` | A string that contains a floating-point number. |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Number.parseFloat
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:265
+
+___
+
+### parseInt
+
+▸ **parseInt**(`string`, `radix?`): `number`
+
+Converts A string to an integer.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `string` | `string` | A string to convert into a number. |
+| `radix?` | `number` | A value between 2 and 36 that specifies the base of the number in `string`. If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. All other strings are considered decimal. |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Number.parseInt
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:274
+
+___
+
+### toString
+
+▸ **toString**(`radix?`): `string`
+
+Returns a string representation of an object.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `radix?` | `number` | Specifies a radix for converting numeric values to strings. This value is only used for numbers. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toString
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:564
+
+___
+
+### toFixed
+
+▸ **toFixed**(`fractionDigits?`): `string`
+
+Returns a string representing a number in fixed-point notation.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `fractionDigits?` | `number` | Number of digits after the decimal point. Must be in the range 0 - 20, inclusive. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toFixed
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:570
+
+___
+
+### toExponential
+
+▸ **toExponential**(`fractionDigits?`): `string`
+
+Returns a string containing a number represented in exponential notation.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `fractionDigits?` | `number` | Number of digits after the decimal point. Must be in the range 0 - 20, inclusive. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toExponential
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:576
+
+___
+
+### toPrecision
+
+▸ **toPrecision**(`precision?`): `string`
+
+Returns a string containing a number represented either in exponential or fixed-point notation with a specified number of digits.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `precision?` | `number` | Number of significant digits. Must be in the range 1 - 21, inclusive. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toPrecision
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:582
+
+___
+
+### valueOf
+
+▸ **valueOf**(): `number`
+
+Returns the primitive value of the specified object.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Number.valueOf
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:585
+
+___
+
+### toLocaleString
+
+▸ **toLocaleString**(`locales?`, `options?`): `string`
+
+Converts a number to a string by using the current or specified locale.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `locales?` | `string` \| `string`[] | A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. |
+| `options?` | `NumberFormatOptions` | An object that contains one or more properties that specify comparison options. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toLocaleString
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:4525
+
+▸ **toLocaleString**(`locales?`, `options?`): `string`
+
+Converts a number to a string by using the current or specified locale.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `locales?` | `LocalesArgument` | A locale string, array of locale strings, Intl.Locale object, or array of Intl.Locale objects that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. |
+| `options?` | `NumberFormatOptions` | An object that contains one or more properties that specify comparison options. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toLocaleString
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.number.d.ts:27
diff --git a/docs/api/classes/u32.md b/docs/api/classes/u32.md
new file mode 100644
index 00000000..8fc276ea
--- /dev/null
+++ b/docs/api/classes/u32.md
@@ -0,0 +1,533 @@
+# Class: u32
+
+## Hierarchy
+
+- `Number`
+
+ ↳ **`u32`**
+
+### Constructors
+
+- [constructor](u32.md#constructor)
+
+### Properties
+
+- [EPSILON](u32.md#epsilon)
+- [MAX\_SAFE\_INTEGER](u32.md#max_safe_integer)
+- [MIN\_SAFE\_INTEGER](u32.md#min_safe_integer)
+- [MAX\_VALUE](u32.md#max_value)
+- [MIN\_VALUE](u32.md#min_value)
+- [NaN](u32.md#nan)
+- [NEGATIVE\_INFINITY](u32.md#negative_infinity)
+- [POSITIVE\_INFINITY](u32.md#positive_infinity)
+
+### Methods
+
+- [isFinite](u32.md#isfinite)
+- [isInteger](u32.md#isinteger)
+- [isNaN](u32.md#isnan)
+- [isSafeInteger](u32.md#issafeinteger)
+- [parseFloat](u32.md#parsefloat)
+- [parseInt](u32.md#parseint)
+- [toString](u32.md#tostring)
+- [toFixed](u32.md#tofixed)
+- [toExponential](u32.md#toexponential)
+- [toPrecision](u32.md#toprecision)
+- [valueOf](u32.md#valueof)
+- [toLocaleString](u32.md#tolocalestring)
+
+## Constructors
+
+### constructor
+
+• **new u32**(`value?`): [`u32`](u32.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value?` | `any` |
+
+#### Returns
+
+[`u32`](u32.md)
+
+#### Inherited from
+
+Number.constructor
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:589
+
+## Properties
+
+### EPSILON
+
+▪ `Static` `Readonly` **EPSILON**: `number`
+
+The value of Number.EPSILON is the difference between 1 and the smallest value greater than 1
+that is representable as a Number value, which is approximately:
+2.2204460492503130808472633361816 x 10−16.
+
+#### Inherited from
+
+Number.EPSILON
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:217
+
+___
+
+### MAX\_SAFE\_INTEGER
+
+▪ `Static` `Readonly` **MAX\_SAFE\_INTEGER**: `number`
+
+The value of the largest integer n such that n and n + 1 are both exactly representable as
+a Number value.
+The value of Number.MAX_SAFE_INTEGER is 9007199254740991 2^53 − 1.
+
+#### Inherited from
+
+Number.MAX\_SAFE\_INTEGER
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:252
+
+___
+
+### MIN\_SAFE\_INTEGER
+
+▪ `Static` `Readonly` **MIN\_SAFE\_INTEGER**: `number`
+
+The value of the smallest integer n such that n and n − 1 are both exactly representable as
+a Number value.
+The value of Number.MIN_SAFE_INTEGER is −9007199254740991 (−(2^53 − 1)).
+
+#### Inherited from
+
+Number.MIN\_SAFE\_INTEGER
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:259
+
+___
+
+### MAX\_VALUE
+
+▪ `Static` `Readonly` **MAX\_VALUE**: `number`
+
+The largest number that can be represented in JavaScript. Equal to approximately 1.79E+308.
+
+#### Inherited from
+
+Number.MAX\_VALUE
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:594
+
+___
+
+### MIN\_VALUE
+
+▪ `Static` `Readonly` **MIN\_VALUE**: `number`
+
+The closest number to zero that can be represented in JavaScript. Equal to approximately 5.00E-324.
+
+#### Inherited from
+
+Number.MIN\_VALUE
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:597
+
+___
+
+### NaN
+
+▪ `Static` `Readonly` **NaN**: `number`
+
+A value that is not a number.
+In equality comparisons, NaN does not equal any value, including itself. To test whether a value is equivalent to NaN, use the isNaN function.
+
+#### Inherited from
+
+Number.NaN
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:603
+
+___
+
+### NEGATIVE\_INFINITY
+
+▪ `Static` `Readonly` **NEGATIVE\_INFINITY**: `number`
+
+A value that is less than the largest negative number that can be represented in JavaScript.
+JavaScript displays NEGATIVE_INFINITY values as -infinity.
+
+#### Inherited from
+
+Number.NEGATIVE\_INFINITY
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:609
+
+___
+
+### POSITIVE\_INFINITY
+
+▪ `Static` `Readonly` **POSITIVE\_INFINITY**: `number`
+
+A value greater than the largest number that can be represented in JavaScript.
+JavaScript displays POSITIVE_INFINITY values as infinity.
+
+#### Inherited from
+
+Number.POSITIVE\_INFINITY
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:615
+
+## Methods
+
+### isFinite
+
+▸ **isFinite**(`number`): `boolean`
+
+Returns true if passed value is finite.
+Unlike the global isFinite, Number.isFinite doesn't forcibly convert the parameter to a
+number. Only finite values of the type number, result in true.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `number` | `unknown` | A numeric value. |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Number.isFinite
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:225
+
+___
+
+### isInteger
+
+▸ **isInteger**(`number`): `boolean`
+
+Returns true if the value passed is an integer, false otherwise.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `number` | `unknown` | A numeric value. |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Number.isInteger
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:231
+
+___
+
+### isNaN
+
+▸ **isNaN**(`number`): `boolean`
+
+Returns a Boolean value that indicates whether a value is the reserved value NaN (not a
+number). Unlike the global isNaN(), Number.isNaN() doesn't forcefully convert the parameter
+to a number. Only values of the type number, that are also NaN, result in true.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `number` | `unknown` | A numeric value. |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Number.isNaN
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:239
+
+___
+
+### isSafeInteger
+
+▸ **isSafeInteger**(`number`): `boolean`
+
+Returns true if the value passed is a safe integer.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `number` | `unknown` | A numeric value. |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Number.isSafeInteger
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:245
+
+___
+
+### parseFloat
+
+▸ **parseFloat**(`string`): `number`
+
+Converts a string to a floating-point number.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `string` | `string` | A string that contains a floating-point number. |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Number.parseFloat
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:265
+
+___
+
+### parseInt
+
+▸ **parseInt**(`string`, `radix?`): `number`
+
+Converts A string to an integer.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `string` | `string` | A string to convert into a number. |
+| `radix?` | `number` | A value between 2 and 36 that specifies the base of the number in `string`. If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. All other strings are considered decimal. |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Number.parseInt
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts:274
+
+___
+
+### toString
+
+▸ **toString**(`radix?`): `string`
+
+Returns a string representation of an object.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `radix?` | `number` | Specifies a radix for converting numeric values to strings. This value is only used for numbers. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toString
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:564
+
+___
+
+### toFixed
+
+▸ **toFixed**(`fractionDigits?`): `string`
+
+Returns a string representing a number in fixed-point notation.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `fractionDigits?` | `number` | Number of digits after the decimal point. Must be in the range 0 - 20, inclusive. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toFixed
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:570
+
+___
+
+### toExponential
+
+▸ **toExponential**(`fractionDigits?`): `string`
+
+Returns a string containing a number represented in exponential notation.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `fractionDigits?` | `number` | Number of digits after the decimal point. Must be in the range 0 - 20, inclusive. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toExponential
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:576
+
+___
+
+### toPrecision
+
+▸ **toPrecision**(`precision?`): `string`
+
+Returns a string containing a number represented either in exponential or fixed-point notation with a specified number of digits.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `precision?` | `number` | Number of significant digits. Must be in the range 1 - 21, inclusive. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toPrecision
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:582
+
+___
+
+### valueOf
+
+▸ **valueOf**(): `number`
+
+Returns the primitive value of the specified object.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Number.valueOf
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:585
+
+___
+
+### toLocaleString
+
+▸ **toLocaleString**(`locales?`, `options?`): `string`
+
+Converts a number to a string by using the current or specified locale.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `locales?` | `string` \| `string`[] | A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. |
+| `options?` | `NumberFormatOptions` | An object that contains one or more properties that specify comparison options. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toLocaleString
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts:4525
+
+▸ **toLocaleString**(`locales?`, `options?`): `string`
+
+Converts a number to a string by using the current or specified locale.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `locales?` | `LocalesArgument` | A locale string, array of locale strings, Intl.Locale object, or array of Intl.Locale objects that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. |
+| `options?` | `NumberFormatOptions` | An object that contains one or more properties that specify comparison options. |
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Number.toLocaleString
+
+#### Defined in
+
+node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.number.d.ts:27
diff --git a/docs/api/enums/BillboardType.md b/docs/api/enums/BillboardType.md
new file mode 100644
index 00000000..55e85c47
--- /dev/null
+++ b/docs/api/enums/BillboardType.md
@@ -0,0 +1,37 @@
+# Enumeration: BillboardType
+
+### Enumeration Members
+
+- [None](BillboardType.md#none)
+- [BillboardY](BillboardType.md#billboardy)
+- [BillboardXYZ](BillboardType.md#billboardxyz)
+
+## Enumeration Members
+
+### None
+
+• **None** = ``0``
+
+#### Defined in
+
+[src/components/gui/GUIConfig.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIConfig.ts#L24)
+
+___
+
+### BillboardY
+
+• **BillboardY** = ``9``
+
+#### Defined in
+
+[src/components/gui/GUIConfig.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIConfig.ts#L25)
+
+___
+
+### BillboardXYZ
+
+• **BillboardXYZ** = ``10``
+
+#### Defined in
+
+[src/components/gui/GUIConfig.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIConfig.ts#L26)
diff --git a/docs/api/enums/BlendMode.md b/docs/api/enums/BlendMode.md
new file mode 100644
index 00000000..a1ac5ea1
--- /dev/null
+++ b/docs/api/enums/BlendMode.md
@@ -0,0 +1,149 @@
+# Enumeration: BlendMode
+
+Blend mode
+|name|description|
+
+### Enumeration Members
+
+- [NONE](BlendMode.md#none)
+- [ABOVE](BlendMode.md#above)
+- [ALPHA](BlendMode.md#alpha)
+- [NORMAL](BlendMode.md#normal)
+- [ADD](BlendMode.md#add)
+- [BELOW](BlendMode.md#below)
+- [ERASE](BlendMode.md#erase)
+- [MUL](BlendMode.md#mul)
+- [SCREEN](BlendMode.md#screen)
+- [DIVD](BlendMode.md#divd)
+- [SOFT\_ADD](BlendMode.md#soft_add)
+
+## Enumeration Members
+
+### NONE
+
+• **NONE** = ``0``
+
+Working only in WebGPU may improve the performance of large background images without alpha.
+The source pixel is not mixed with the target pixel, so the GPU will not read colors from the target pixel.
+
+#### Defined in
+
+[src/materials/BlendMode.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/materials/BlendMode.ts#L11)
+
+___
+
+### ABOVE
+
+• **ABOVE** = ``1``
+
+Display objects above the background. When the background is transparent,
+the pixel values of the displayed object are not visible.
+
+#### Defined in
+
+[src/materials/BlendMode.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/materials/BlendMode.ts#L16)
+
+___
+
+### ALPHA
+
+• **ALPHA** = ``2``
+
+Transparent mode
+
+#### Defined in
+
+[src/materials/BlendMode.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/materials/BlendMode.ts#L21)
+
+___
+
+### NORMAL
+
+• **NORMAL** = ``3``
+
+Normal blend mode
+
+#### Defined in
+
+[src/materials/BlendMode.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/materials/BlendMode.ts#L26)
+
+___
+
+### ADD
+
+• **ADD** = ``4``
+
+Add the values of the component colors of the displayed object to its background color
+
+#### Defined in
+
+[src/materials/BlendMode.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/materials/BlendMode.ts#L31)
+
+___
+
+### BELOW
+
+• **BELOW** = ``5``
+
+Add the values of the component colors of the displayed object to its background color
+
+#### Defined in
+
+[src/materials/BlendMode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/materials/BlendMode.ts#L36)
+
+___
+
+### ERASE
+
+• **ERASE** = ``6``
+
+Erase the background based on the alpha value of the displayed object.
+
+#### Defined in
+
+[src/materials/BlendMode.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/materials/BlendMode.ts#L40)
+
+___
+
+### MUL
+
+• **MUL** = ``7``
+
+Multiply the values of the displayed object's constituent colors by the background color,
+and then divide by 0xFF for normalization to obtain a darker color.
+
+#### Defined in
+
+[src/materials/BlendMode.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/materials/BlendMode.ts#L45)
+
+___
+
+### SCREEN
+
+• **SCREEN** = ``8``
+
+Multiply the inverse of the components of the source and target images, and then calculate the inverse result.
+
+#### Defined in
+
+[src/materials/BlendMode.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/materials/BlendMode.ts#L49)
+
+___
+
+### DIVD
+
+• **DIVD** = ``9``
+
+#### Defined in
+
+[src/materials/BlendMode.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/materials/BlendMode.ts#L50)
+
+___
+
+### SOFT\_ADD
+
+• **SOFT\_ADD** = ``10``
+
+#### Defined in
+
+[src/materials/BlendMode.ts:51](https://github.com/Orillusion/orillusion/blob/main/src/materials/BlendMode.ts#L51)
diff --git a/docs/api/enums/CameraType.md b/docs/api/enums/CameraType.md
new file mode 100644
index 00000000..fcdd7ec8
--- /dev/null
+++ b/docs/api/enums/CameraType.md
@@ -0,0 +1,37 @@
+# Enumeration: CameraType
+
+### Enumeration Members
+
+- [ortho](CameraType.md#ortho)
+- [perspective](CameraType.md#perspective)
+- [shadow](CameraType.md#shadow)
+
+## Enumeration Members
+
+### ortho
+
+• **ortho** = ``0``
+
+#### Defined in
+
+[src/core/CameraType.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/core/CameraType.ts#L2)
+
+___
+
+### perspective
+
+• **perspective** = ``1``
+
+#### Defined in
+
+[src/core/CameraType.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/core/CameraType.ts#L3)
+
+___
+
+### shadow
+
+• **shadow** = ``2``
+
+#### Defined in
+
+[src/core/CameraType.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/core/CameraType.ts#L4)
diff --git a/docs/api/enums/ColliderShapeType.md b/docs/api/enums/ColliderShapeType.md
new file mode 100644
index 00000000..6ed2e8ed
--- /dev/null
+++ b/docs/api/enums/ColliderShapeType.md
@@ -0,0 +1,59 @@
+# Enumeration: ColliderShapeType
+
+### Enumeration Members
+
+- [None](ColliderShapeType.md#none)
+- [Box](ColliderShapeType.md#box)
+- [Capsule](ColliderShapeType.md#capsule)
+- [Sphere](ColliderShapeType.md#sphere)
+- [Mesh](ColliderShapeType.md#mesh)
+
+## Enumeration Members
+
+### None
+
+• **None** = ``0``
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L8)
+
+___
+
+### Box
+
+• **Box** = ``1``
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L9)
+
+___
+
+### Capsule
+
+• **Capsule** = ``2``
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L10)
+
+___
+
+### Sphere
+
+• **Sphere** = ``3``
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L11)
+
+___
+
+### Mesh
+
+• **Mesh** = ``4``
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L12)
diff --git a/docs/api/enums/CubicBezierType.md b/docs/api/enums/CubicBezierType.md
new file mode 100644
index 00000000..ae815dfc
--- /dev/null
+++ b/docs/api/enums/CubicBezierType.md
@@ -0,0 +1,28 @@
+# Enumeration: CubicBezierType
+
+cubicBezierType
+
+### Enumeration Members
+
+- [Open](CubicBezierType.md#open)
+- [Closed](CubicBezierType.md#closed)
+
+## Enumeration Members
+
+### Open
+
+• **Open** = ``0``
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L10)
+
+___
+
+### Closed
+
+• **Closed** = ``1``
+
+#### Defined in
+
+[src/math/CubicBezierPath.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/math/CubicBezierPath.ts#L11)
diff --git a/docs/api/enums/GPUBufferType.md b/docs/api/enums/GPUBufferType.md
new file mode 100644
index 00000000..d797cedf
--- /dev/null
+++ b/docs/api/enums/GPUBufferType.md
@@ -0,0 +1,81 @@
+# Enumeration: GPUBufferType
+
+### Enumeration Members
+
+- [IndicesGPUBuffer](GPUBufferType.md#indicesgpubuffer)
+- [VertexGPUBuffer](GPUBufferType.md#vertexgpubuffer)
+- [UniformGPUBuffer](GPUBufferType.md#uniformgpubuffer)
+- [StorageGPUBuffer](GPUBufferType.md#storagegpubuffer)
+- [ComputeGPUBuffer](GPUBufferType.md#computegpubuffer)
+- [MaterialDataUniformGPUBuffer](GPUBufferType.md#materialdatauniformgpubuffer)
+- [StructStorageGPUBuffer](GPUBufferType.md#structstoragegpubuffer)
+
+## Enumeration Members
+
+### IndicesGPUBuffer
+
+• **IndicesGPUBuffer** = ``0``
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferType.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferType.ts#L2)
+
+___
+
+### VertexGPUBuffer
+
+• **VertexGPUBuffer** = ``1``
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferType.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferType.ts#L3)
+
+___
+
+### UniformGPUBuffer
+
+• **UniformGPUBuffer** = ``2``
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferType.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferType.ts#L4)
+
+___
+
+### StorageGPUBuffer
+
+• **StorageGPUBuffer** = ``3``
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferType.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferType.ts#L5)
+
+___
+
+### ComputeGPUBuffer
+
+• **ComputeGPUBuffer** = ``4``
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferType.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferType.ts#L6)
+
+___
+
+### MaterialDataUniformGPUBuffer
+
+• **MaterialDataUniformGPUBuffer** = ``5``
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferType.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferType.ts#L7)
+
+___
+
+### StructStorageGPUBuffer
+
+• **StructStorageGPUBuffer** = ``6``
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferType.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferType.ts#L8)
diff --git a/docs/api/enums/GUISpace.md b/docs/api/enums/GUISpace.md
new file mode 100644
index 00000000..dfa17b27
--- /dev/null
+++ b/docs/api/enums/GUISpace.md
@@ -0,0 +1,26 @@
+# Enumeration: GUISpace
+
+### Enumeration Members
+
+- [View](GUISpace.md#view)
+- [World](GUISpace.md#world)
+
+## Enumeration Members
+
+### View
+
+• **View** = ``0``
+
+#### Defined in
+
+[src/components/gui/GUIConfig.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIConfig.ts#L11)
+
+___
+
+### World
+
+• **World** = ``2``
+
+#### Defined in
+
+[src/components/gui/GUIConfig.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIConfig.ts#L12)
diff --git a/docs/api/enums/GeoType.md b/docs/api/enums/GeoType.md
new file mode 100644
index 00000000..fc4f984a
--- /dev/null
+++ b/docs/api/enums/GeoType.md
@@ -0,0 +1,37 @@
+# Enumeration: GeoType
+
+### Enumeration Members
+
+- [Point](GeoType.md#point)
+- [LineString](GeoType.md#linestring)
+- [MultiPolygon](GeoType.md#multipolygon)
+
+## Enumeration Members
+
+### Point
+
+• **Point** = ``"Point"``
+
+#### Defined in
+
+[src/loader/parser/gis/GeoJsonParser.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gis/GeoJsonParser.ts#L5)
+
+___
+
+### LineString
+
+• **LineString** = ``"LineString"``
+
+#### Defined in
+
+[src/loader/parser/gis/GeoJsonParser.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gis/GeoJsonParser.ts#L6)
+
+___
+
+### MultiPolygon
+
+• **MultiPolygon** = ``"MultiPolygon"``
+
+#### Defined in
+
+[src/loader/parser/gis/GeoJsonParser.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gis/GeoJsonParser.ts#L7)
diff --git a/docs/api/enums/GeometryVertexType.md b/docs/api/enums/GeometryVertexType.md
new file mode 100644
index 00000000..3bc115da
--- /dev/null
+++ b/docs/api/enums/GeometryVertexType.md
@@ -0,0 +1,37 @@
+# Enumeration: GeometryVertexType
+
+### Enumeration Members
+
+- [split](GeometryVertexType.md#split)
+- [compose](GeometryVertexType.md#compose)
+- [compose\_bin](GeometryVertexType.md#compose_bin)
+
+## Enumeration Members
+
+### split
+
+• **split** = ``0``
+
+#### Defined in
+
+[src/core/geometry/GeometryVertexType.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryVertexType.ts#L3)
+
+___
+
+### compose
+
+• **compose** = ``1``
+
+#### Defined in
+
+[src/core/geometry/GeometryVertexType.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryVertexType.ts#L4)
+
+___
+
+### compose\_bin
+
+• **compose\_bin** = ``2``
+
+#### Defined in
+
+[src/core/geometry/GeometryVertexType.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryVertexType.ts#L5)
diff --git a/docs/api/enums/Horizontal.md b/docs/api/enums/Horizontal.md
new file mode 100644
index 00000000..97a0e384
--- /dev/null
+++ b/docs/api/enums/Horizontal.md
@@ -0,0 +1,37 @@
+# Enumeration: Horizontal
+
+### Enumeration Members
+
+- [Left](Horizontal.md#left)
+- [Center](Horizontal.md#center)
+- [Right](Horizontal.md#right)
+
+## Enumeration Members
+
+### Left
+
+• **Left** = ``0``
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L57)
+
+___
+
+### Center
+
+• **Center** = ``1``
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L58)
+
+___
+
+### Right
+
+• **Right** = ``2``
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L59)
diff --git a/docs/api/enums/ImageType.md b/docs/api/enums/ImageType.md
new file mode 100644
index 00000000..a20c1ed6
--- /dev/null
+++ b/docs/api/enums/ImageType.md
@@ -0,0 +1,48 @@
+# Enumeration: ImageType
+
+### Enumeration Members
+
+- [Simple](ImageType.md#simple)
+- [Sliced](ImageType.md#sliced)
+- [Tiled](ImageType.md#tiled)
+- [Filled](ImageType.md#filled)
+
+## Enumeration Members
+
+### Simple
+
+• **Simple** = ``0``
+
+#### Defined in
+
+[src/components/gui/GUIConfig.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIConfig.ts#L17)
+
+___
+
+### Sliced
+
+• **Sliced** = ``1``
+
+#### Defined in
+
+[src/components/gui/GUIConfig.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIConfig.ts#L18)
+
+___
+
+### Tiled
+
+• **Tiled** = ``2``
+
+#### Defined in
+
+[src/components/gui/GUIConfig.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIConfig.ts#L19)
+
+___
+
+### Filled
+
+• **Filled** = ``3``
+
+#### Defined in
+
+[src/components/gui/GUIConfig.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIConfig.ts#L20)
diff --git a/docs/api/enums/InterpolatorEnum.md b/docs/api/enums/InterpolatorEnum.md
new file mode 100644
index 00000000..3eeca1df
--- /dev/null
+++ b/docs/api/enums/InterpolatorEnum.md
@@ -0,0 +1,134 @@
+# Enumeration: InterpolatorEnum
+
+Interpolator enumeration
+|Name|Describe|
+|:---:|:---:|
+|AccelerateInterpolator| Acceleration interpolator, animation acceleration runs to the end.|
+|DecelerateInterpolator| Slow down interpolator, animation slow down run to end.|
+|AccelerateDecelerateInterpolator| Acceleration and deceleration interpolator, animation first speed up and then decelerate.|
+|LinearInterpolator| Linear interpolator, animation uniform motion.|
+|BounceInterpolator| Elastic interpolator, before the end of the animation will have an elastic animation effect.|
+|AnticipateInterpolator| Step back and then speed up to the end.|
+|AnticipateOvershootInterpolator| Take a small step back, then speed up, then go a little beyond the finish line and then come back.|
+|CycleInterpolator| cyclic motion|
+|OvershootInterpolator| Finish the animation quickly, go a little beyond the end point and then go back to the end point.|
+
+### Enumeration Members
+
+- [AccelerateInterpolator](InterpolatorEnum.md#accelerateinterpolator)
+- [DecelerateInterpolator](InterpolatorEnum.md#decelerateinterpolator)
+- [AccelerateDecelerateInterpolator](InterpolatorEnum.md#acceleratedecelerateinterpolator)
+- [LinearInterpolator](InterpolatorEnum.md#linearinterpolator)
+- [BounceInterpolator](InterpolatorEnum.md#bounceinterpolator)
+- [AnticipateInterpolator](InterpolatorEnum.md#anticipateinterpolator)
+- [AnticipateOvershootInterpolator](InterpolatorEnum.md#anticipateovershootinterpolator)
+- [CycleInterpolator](InterpolatorEnum.md#cycleinterpolator)
+- [OvershootInterpolator](InterpolatorEnum.md#overshootinterpolator)
+
+## Enumeration Members
+
+### AccelerateInterpolator
+
+• **AccelerateInterpolator** = ``0``
+
+Acceleration interpolator, animation acceleration runs to the end.
+
+#### Defined in
+
+[src/math/TimeInterpolator.ts:305](https://github.com/Orillusion/orillusion/blob/main/src/math/TimeInterpolator.ts#L305)
+
+___
+
+### DecelerateInterpolator
+
+• **DecelerateInterpolator** = ``1``
+
+Slow down interpolator, animation slow down run to end.
+
+#### Defined in
+
+[src/math/TimeInterpolator.ts:309](https://github.com/Orillusion/orillusion/blob/main/src/math/TimeInterpolator.ts#L309)
+
+___
+
+### AccelerateDecelerateInterpolator
+
+• **AccelerateDecelerateInterpolator** = ``2``
+
+Acceleration and deceleration interpolator, animation first speed up and then decelerate.
+
+#### Defined in
+
+[src/math/TimeInterpolator.ts:313](https://github.com/Orillusion/orillusion/blob/main/src/math/TimeInterpolator.ts#L313)
+
+___
+
+### LinearInterpolator
+
+• **LinearInterpolator** = ``3``
+
+Linear interpolator, animation uniform motion.
+
+#### Defined in
+
+[src/math/TimeInterpolator.ts:317](https://github.com/Orillusion/orillusion/blob/main/src/math/TimeInterpolator.ts#L317)
+
+___
+
+### BounceInterpolator
+
+• **BounceInterpolator** = ``4``
+
+Elastic interpolator, before the end of the animation will have an elastic animation effect.
+
+#### Defined in
+
+[src/math/TimeInterpolator.ts:321](https://github.com/Orillusion/orillusion/blob/main/src/math/TimeInterpolator.ts#L321)
+
+___
+
+### AnticipateInterpolator
+
+• **AnticipateInterpolator** = ``5``
+
+Step back and then speed up to the end.
+
+#### Defined in
+
+[src/math/TimeInterpolator.ts:325](https://github.com/Orillusion/orillusion/blob/main/src/math/TimeInterpolator.ts#L325)
+
+___
+
+### AnticipateOvershootInterpolator
+
+• **AnticipateOvershootInterpolator** = ``6``
+
+Take a small step back, then speed up, then go a little beyond the finish line and then come back.
+
+#### Defined in
+
+[src/math/TimeInterpolator.ts:329](https://github.com/Orillusion/orillusion/blob/main/src/math/TimeInterpolator.ts#L329)
+
+___
+
+### CycleInterpolator
+
+• **CycleInterpolator** = ``7``
+
+Cyclic motion
+
+#### Defined in
+
+[src/math/TimeInterpolator.ts:333](https://github.com/Orillusion/orillusion/blob/main/src/math/TimeInterpolator.ts#L333)
+
+___
+
+### OvershootInterpolator
+
+• **OvershootInterpolator** = ``8``
+
+Finish the animation quickly, go a little beyond the end point and then go back to the end point.
+
+#### Defined in
+
+[src/math/TimeInterpolator.ts:337](https://github.com/Orillusion/orillusion/blob/main/src/math/TimeInterpolator.ts#L337)
diff --git a/docs/api/enums/KeyCode.md b/docs/api/enums/KeyCode.md
new file mode 100644
index 00000000..54536a37
--- /dev/null
+++ b/docs/api/enums/KeyCode.md
@@ -0,0 +1,1150 @@
+# Enumeration: KeyCode
+
+Represents a unique identifier corresponding to a keyboard button. see KeyboardEvent.keyCode
+
+### Enumeration Members
+
+- [Key\_BackSpace](KeyCode.md#key_backspace)
+- [Key\_Tab](KeyCode.md#key_tab)
+- [Key\_Clear](KeyCode.md#key_clear)
+- [Key\_Enter](KeyCode.md#key_enter)
+- [Key\_Shift\_L](KeyCode.md#key_shift_l)
+- [Key\_Control\_L](KeyCode.md#key_control_l)
+- [Key\_Alt\_L](KeyCode.md#key_alt_l)
+- [Key\_Pause](KeyCode.md#key_pause)
+- [Key\_CapsLock](KeyCode.md#key_capslock)
+- [Key\_Escape](KeyCode.md#key_escape)
+- [Key\_Esc](KeyCode.md#key_esc)
+- [Key\_Space](KeyCode.md#key_space)
+- [Key\_Prior](KeyCode.md#key_prior)
+- [Key\_Next](KeyCode.md#key_next)
+- [Key\_End](KeyCode.md#key_end)
+- [Key\_Home](KeyCode.md#key_home)
+- [Key\_Left](KeyCode.md#key_left)
+- [Key\_Up](KeyCode.md#key_up)
+- [Key\_Right](KeyCode.md#key_right)
+- [Key\_Down](KeyCode.md#key_down)
+- [Key\_Select](KeyCode.md#key_select)
+- [Key\_Print](KeyCode.md#key_print)
+- [Key\_Execute](KeyCode.md#key_execute)
+- [Key\_Insert](KeyCode.md#key_insert)
+- [Key\_Delete](KeyCode.md#key_delete)
+- [Key\_Help](KeyCode.md#key_help)
+- [Key\_0](KeyCode.md#key_0)
+- [Key\_1](KeyCode.md#key_1)
+- [Key\_2](KeyCode.md#key_2)
+- [Key\_3](KeyCode.md#key_3)
+- [Key\_4](KeyCode.md#key_4)
+- [Key\_5](KeyCode.md#key_5)
+- [Key\_6](KeyCode.md#key_6)
+- [Key\_7](KeyCode.md#key_7)
+- [Key\_8](KeyCode.md#key_8)
+- [Key\_9](KeyCode.md#key_9)
+- [Key\_A](KeyCode.md#key_a)
+- [Key\_B](KeyCode.md#key_b)
+- [Key\_C](KeyCode.md#key_c)
+- [Key\_D](KeyCode.md#key_d)
+- [Key\_E](KeyCode.md#key_e)
+- [Key\_F](KeyCode.md#key_f)
+- [Key\_G](KeyCode.md#key_g)
+- [Key\_H](KeyCode.md#key_h)
+- [Key\_I](KeyCode.md#key_i)
+- [Key\_J](KeyCode.md#key_j)
+- [Key\_K](KeyCode.md#key_k)
+- [Key\_L](KeyCode.md#key_l)
+- [Key\_M](KeyCode.md#key_m)
+- [Key\_N](KeyCode.md#key_n)
+- [Key\_O](KeyCode.md#key_o)
+- [Key\_P](KeyCode.md#key_p)
+- [Key\_Q](KeyCode.md#key_q)
+- [Key\_R](KeyCode.md#key_r)
+- [Key\_S](KeyCode.md#key_s)
+- [Key\_T](KeyCode.md#key_t)
+- [Key\_U](KeyCode.md#key_u)
+- [Key\_V](KeyCode.md#key_v)
+- [Key\_W](KeyCode.md#key_w)
+- [Key\_X](KeyCode.md#key_x)
+- [Key\_Y](KeyCode.md#key_y)
+- [Key\_Z](KeyCode.md#key_z)
+- [Key\_KP\_0](KeyCode.md#key_kp_0)
+- [Key\_KP\_1](KeyCode.md#key_kp_1)
+- [Key\_KP\_2](KeyCode.md#key_kp_2)
+- [Key\_KP\_3](KeyCode.md#key_kp_3)
+- [Key\_KP\_4](KeyCode.md#key_kp_4)
+- [Key\_KP\_5](KeyCode.md#key_kp_5)
+- [Key\_KP\_6](KeyCode.md#key_kp_6)
+- [Key\_KP\_7](KeyCode.md#key_kp_7)
+- [Key\_KP\_8](KeyCode.md#key_kp_8)
+- [Key\_KP\_9](KeyCode.md#key_kp_9)
+- [Key\_Multiply](KeyCode.md#key_multiply)
+- [Key\_Add](KeyCode.md#key_add)
+- [Key\_Separator](KeyCode.md#key_separator)
+- [Key\_Subtract](KeyCode.md#key_subtract)
+- [Key\_Decimal](KeyCode.md#key_decimal)
+- [Key\_Divide](KeyCode.md#key_divide)
+- [Key\_F1](KeyCode.md#key_f1)
+- [Key\_F2](KeyCode.md#key_f2)
+- [Key\_F3](KeyCode.md#key_f3)
+- [Key\_F4](KeyCode.md#key_f4)
+- [Key\_F5](KeyCode.md#key_f5)
+- [Key\_F6](KeyCode.md#key_f6)
+- [Key\_F7](KeyCode.md#key_f7)
+- [Key\_F8](KeyCode.md#key_f8)
+- [Key\_F9](KeyCode.md#key_f9)
+- [Key\_F10](KeyCode.md#key_f10)
+- [Key\_F11](KeyCode.md#key_f11)
+- [Key\_F12](KeyCode.md#key_f12)
+- [Key\_F13](KeyCode.md#key_f13)
+- [Key\_F14](KeyCode.md#key_f14)
+- [Key\_F15](KeyCode.md#key_f15)
+- [Key\_F16](KeyCode.md#key_f16)
+- [Key\_F17](KeyCode.md#key_f17)
+- [Key\_F18](KeyCode.md#key_f18)
+- [Key\_F19](KeyCode.md#key_f19)
+- [Key\_F20](KeyCode.md#key_f20)
+- [Key\_F21](KeyCode.md#key_f21)
+- [Key\_F22](KeyCode.md#key_f22)
+- [Key\_F23](KeyCode.md#key_f23)
+- [Key\_F24](KeyCode.md#key_f24)
+- [Key\_Num\_Lock](KeyCode.md#key_num_lock)
+- [Key\_Scroll\_Lock](KeyCode.md#key_scroll_lock)
+
+## Enumeration Members
+
+### Key\_BackSpace
+
+• **Key\_BackSpace** = ``8``
+
+#### Defined in
+
+[src/event/KeyCode.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L6)
+
+___
+
+### Key\_Tab
+
+• **Key\_Tab** = ``9``
+
+#### Defined in
+
+[src/event/KeyCode.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L7)
+
+___
+
+### Key\_Clear
+
+• **Key\_Clear** = ``12``
+
+#### Defined in
+
+[src/event/KeyCode.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L8)
+
+___
+
+### Key\_Enter
+
+• **Key\_Enter** = ``13``
+
+#### Defined in
+
+[src/event/KeyCode.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L9)
+
+___
+
+### Key\_Shift\_L
+
+• **Key\_Shift\_L** = ``16``
+
+#### Defined in
+
+[src/event/KeyCode.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L10)
+
+___
+
+### Key\_Control\_L
+
+• **Key\_Control\_L** = ``17``
+
+#### Defined in
+
+[src/event/KeyCode.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L11)
+
+___
+
+### Key\_Alt\_L
+
+• **Key\_Alt\_L** = ``18``
+
+#### Defined in
+
+[src/event/KeyCode.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L12)
+
+___
+
+### Key\_Pause
+
+• **Key\_Pause** = ``19``
+
+#### Defined in
+
+[src/event/KeyCode.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L13)
+
+___
+
+### Key\_CapsLock
+
+• **Key\_CapsLock** = ``20``
+
+#### Defined in
+
+[src/event/KeyCode.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L14)
+
+___
+
+### Key\_Escape
+
+• **Key\_Escape** = ``21``
+
+#### Defined in
+
+[src/event/KeyCode.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L15)
+
+___
+
+### Key\_Esc
+
+• **Key\_Esc** = ``27``
+
+#### Defined in
+
+[src/event/KeyCode.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L16)
+
+___
+
+### Key\_Space
+
+• **Key\_Space** = ``32``
+
+#### Defined in
+
+[src/event/KeyCode.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L17)
+
+___
+
+### Key\_Prior
+
+• **Key\_Prior** = ``33``
+
+#### Defined in
+
+[src/event/KeyCode.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L18)
+
+___
+
+### Key\_Next
+
+• **Key\_Next** = ``34``
+
+#### Defined in
+
+[src/event/KeyCode.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L19)
+
+___
+
+### Key\_End
+
+• **Key\_End** = ``35``
+
+#### Defined in
+
+[src/event/KeyCode.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L20)
+
+___
+
+### Key\_Home
+
+• **Key\_Home** = ``36``
+
+#### Defined in
+
+[src/event/KeyCode.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L21)
+
+___
+
+### Key\_Left
+
+• **Key\_Left** = ``37``
+
+#### Defined in
+
+[src/event/KeyCode.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L22)
+
+___
+
+### Key\_Up
+
+• **Key\_Up** = ``38``
+
+#### Defined in
+
+[src/event/KeyCode.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L23)
+
+___
+
+### Key\_Right
+
+• **Key\_Right** = ``39``
+
+#### Defined in
+
+[src/event/KeyCode.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L24)
+
+___
+
+### Key\_Down
+
+• **Key\_Down** = ``40``
+
+#### Defined in
+
+[src/event/KeyCode.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L25)
+
+___
+
+### Key\_Select
+
+• **Key\_Select** = ``41``
+
+#### Defined in
+
+[src/event/KeyCode.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L26)
+
+___
+
+### Key\_Print
+
+• **Key\_Print** = ``42``
+
+#### Defined in
+
+[src/event/KeyCode.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L27)
+
+___
+
+### Key\_Execute
+
+• **Key\_Execute** = ``43``
+
+#### Defined in
+
+[src/event/KeyCode.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L28)
+
+___
+
+### Key\_Insert
+
+• **Key\_Insert** = ``45``
+
+#### Defined in
+
+[src/event/KeyCode.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L29)
+
+___
+
+### Key\_Delete
+
+• **Key\_Delete** = ``46``
+
+#### Defined in
+
+[src/event/KeyCode.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L30)
+
+___
+
+### Key\_Help
+
+• **Key\_Help** = ``47``
+
+#### Defined in
+
+[src/event/KeyCode.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L31)
+
+___
+
+### Key\_0
+
+• **Key\_0** = ``48``
+
+#### Defined in
+
+[src/event/KeyCode.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L32)
+
+___
+
+### Key\_1
+
+• **Key\_1** = ``49``
+
+#### Defined in
+
+[src/event/KeyCode.ts:33](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L33)
+
+___
+
+### Key\_2
+
+• **Key\_2** = ``50``
+
+#### Defined in
+
+[src/event/KeyCode.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L34)
+
+___
+
+### Key\_3
+
+• **Key\_3** = ``51``
+
+#### Defined in
+
+[src/event/KeyCode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L35)
+
+___
+
+### Key\_4
+
+• **Key\_4** = ``52``
+
+#### Defined in
+
+[src/event/KeyCode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L36)
+
+___
+
+### Key\_5
+
+• **Key\_5** = ``53``
+
+#### Defined in
+
+[src/event/KeyCode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L37)
+
+___
+
+### Key\_6
+
+• **Key\_6** = ``54``
+
+#### Defined in
+
+[src/event/KeyCode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L38)
+
+___
+
+### Key\_7
+
+• **Key\_7** = ``55``
+
+#### Defined in
+
+[src/event/KeyCode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L39)
+
+___
+
+### Key\_8
+
+• **Key\_8** = ``56``
+
+#### Defined in
+
+[src/event/KeyCode.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L40)
+
+___
+
+### Key\_9
+
+• **Key\_9** = ``57``
+
+#### Defined in
+
+[src/event/KeyCode.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L41)
+
+___
+
+### Key\_A
+
+• **Key\_A** = ``65``
+
+#### Defined in
+
+[src/event/KeyCode.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L43)
+
+___
+
+### Key\_B
+
+• **Key\_B** = ``66``
+
+#### Defined in
+
+[src/event/KeyCode.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L44)
+
+___
+
+### Key\_C
+
+• **Key\_C** = ``67``
+
+#### Defined in
+
+[src/event/KeyCode.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L45)
+
+___
+
+### Key\_D
+
+• **Key\_D** = ``68``
+
+#### Defined in
+
+[src/event/KeyCode.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L46)
+
+___
+
+### Key\_E
+
+• **Key\_E** = ``69``
+
+#### Defined in
+
+[src/event/KeyCode.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L47)
+
+___
+
+### Key\_F
+
+• **Key\_F** = ``70``
+
+#### Defined in
+
+[src/event/KeyCode.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L48)
+
+___
+
+### Key\_G
+
+• **Key\_G** = ``71``
+
+#### Defined in
+
+[src/event/KeyCode.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L49)
+
+___
+
+### Key\_H
+
+• **Key\_H** = ``72``
+
+#### Defined in
+
+[src/event/KeyCode.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L50)
+
+___
+
+### Key\_I
+
+• **Key\_I** = ``73``
+
+#### Defined in
+
+[src/event/KeyCode.ts:51](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L51)
+
+___
+
+### Key\_J
+
+• **Key\_J** = ``74``
+
+#### Defined in
+
+[src/event/KeyCode.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L52)
+
+___
+
+### Key\_K
+
+• **Key\_K** = ``75``
+
+#### Defined in
+
+[src/event/KeyCode.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L53)
+
+___
+
+### Key\_L
+
+• **Key\_L** = ``76``
+
+#### Defined in
+
+[src/event/KeyCode.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L54)
+
+___
+
+### Key\_M
+
+• **Key\_M** = ``77``
+
+#### Defined in
+
+[src/event/KeyCode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L55)
+
+___
+
+### Key\_N
+
+• **Key\_N** = ``78``
+
+#### Defined in
+
+[src/event/KeyCode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L56)
+
+___
+
+### Key\_O
+
+• **Key\_O** = ``79``
+
+#### Defined in
+
+[src/event/KeyCode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L57)
+
+___
+
+### Key\_P
+
+• **Key\_P** = ``80``
+
+#### Defined in
+
+[src/event/KeyCode.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L58)
+
+___
+
+### Key\_Q
+
+• **Key\_Q** = ``81``
+
+#### Defined in
+
+[src/event/KeyCode.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L59)
+
+___
+
+### Key\_R
+
+• **Key\_R** = ``82``
+
+#### Defined in
+
+[src/event/KeyCode.ts:60](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L60)
+
+___
+
+### Key\_S
+
+• **Key\_S** = ``83``
+
+#### Defined in
+
+[src/event/KeyCode.ts:61](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L61)
+
+___
+
+### Key\_T
+
+• **Key\_T** = ``84``
+
+#### Defined in
+
+[src/event/KeyCode.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L62)
+
+___
+
+### Key\_U
+
+• **Key\_U** = ``85``
+
+#### Defined in
+
+[src/event/KeyCode.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L63)
+
+___
+
+### Key\_V
+
+• **Key\_V** = ``86``
+
+#### Defined in
+
+[src/event/KeyCode.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L64)
+
+___
+
+### Key\_W
+
+• **Key\_W** = ``87``
+
+#### Defined in
+
+[src/event/KeyCode.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L65)
+
+___
+
+### Key\_X
+
+• **Key\_X** = ``88``
+
+#### Defined in
+
+[src/event/KeyCode.ts:66](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L66)
+
+___
+
+### Key\_Y
+
+• **Key\_Y** = ``89``
+
+#### Defined in
+
+[src/event/KeyCode.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L67)
+
+___
+
+### Key\_Z
+
+• **Key\_Z** = ``90``
+
+#### Defined in
+
+[src/event/KeyCode.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L68)
+
+___
+
+### Key\_KP\_0
+
+• **Key\_KP\_0** = ``96``
+
+#### Defined in
+
+[src/event/KeyCode.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L69)
+
+___
+
+### Key\_KP\_1
+
+• **Key\_KP\_1** = ``97``
+
+#### Defined in
+
+[src/event/KeyCode.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L70)
+
+___
+
+### Key\_KP\_2
+
+• **Key\_KP\_2** = ``98``
+
+#### Defined in
+
+[src/event/KeyCode.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L71)
+
+___
+
+### Key\_KP\_3
+
+• **Key\_KP\_3** = ``99``
+
+#### Defined in
+
+[src/event/KeyCode.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L72)
+
+___
+
+### Key\_KP\_4
+
+• **Key\_KP\_4** = ``100``
+
+#### Defined in
+
+[src/event/KeyCode.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L73)
+
+___
+
+### Key\_KP\_5
+
+• **Key\_KP\_5** = ``101``
+
+#### Defined in
+
+[src/event/KeyCode.ts:74](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L74)
+
+___
+
+### Key\_KP\_6
+
+• **Key\_KP\_6** = ``102``
+
+#### Defined in
+
+[src/event/KeyCode.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L75)
+
+___
+
+### Key\_KP\_7
+
+• **Key\_KP\_7** = ``103``
+
+#### Defined in
+
+[src/event/KeyCode.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L76)
+
+___
+
+### Key\_KP\_8
+
+• **Key\_KP\_8** = ``104``
+
+#### Defined in
+
+[src/event/KeyCode.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L77)
+
+___
+
+### Key\_KP\_9
+
+• **Key\_KP\_9** = ``105``
+
+#### Defined in
+
+[src/event/KeyCode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L78)
+
+___
+
+### Key\_Multiply
+
+• **Key\_Multiply** = ``106``
+
+#### Defined in
+
+[src/event/KeyCode.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L79)
+
+___
+
+### Key\_Add
+
+• **Key\_Add** = ``107``
+
+#### Defined in
+
+[src/event/KeyCode.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L80)
+
+___
+
+### Key\_Separator
+
+• **Key\_Separator** = ``108``
+
+#### Defined in
+
+[src/event/KeyCode.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L81)
+
+___
+
+### Key\_Subtract
+
+• **Key\_Subtract** = ``109``
+
+#### Defined in
+
+[src/event/KeyCode.ts:82](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L82)
+
+___
+
+### Key\_Decimal
+
+• **Key\_Decimal** = ``110``
+
+#### Defined in
+
+[src/event/KeyCode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L83)
+
+___
+
+### Key\_Divide
+
+• **Key\_Divide** = ``111``
+
+#### Defined in
+
+[src/event/KeyCode.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L84)
+
+___
+
+### Key\_F1
+
+• **Key\_F1** = ``112``
+
+#### Defined in
+
+[src/event/KeyCode.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L85)
+
+___
+
+### Key\_F2
+
+• **Key\_F2** = ``113``
+
+#### Defined in
+
+[src/event/KeyCode.ts:86](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L86)
+
+___
+
+### Key\_F3
+
+• **Key\_F3** = ``114``
+
+#### Defined in
+
+[src/event/KeyCode.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L87)
+
+___
+
+### Key\_F4
+
+• **Key\_F4** = ``115``
+
+#### Defined in
+
+[src/event/KeyCode.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L88)
+
+___
+
+### Key\_F5
+
+• **Key\_F5** = ``116``
+
+#### Defined in
+
+[src/event/KeyCode.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L89)
+
+___
+
+### Key\_F6
+
+• **Key\_F6** = ``117``
+
+#### Defined in
+
+[src/event/KeyCode.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L90)
+
+___
+
+### Key\_F7
+
+• **Key\_F7** = ``118``
+
+#### Defined in
+
+[src/event/KeyCode.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L91)
+
+___
+
+### Key\_F8
+
+• **Key\_F8** = ``119``
+
+#### Defined in
+
+[src/event/KeyCode.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L92)
+
+___
+
+### Key\_F9
+
+• **Key\_F9** = ``120``
+
+#### Defined in
+
+[src/event/KeyCode.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L93)
+
+___
+
+### Key\_F10
+
+• **Key\_F10** = ``121``
+
+#### Defined in
+
+[src/event/KeyCode.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L94)
+
+___
+
+### Key\_F11
+
+• **Key\_F11** = ``122``
+
+#### Defined in
+
+[src/event/KeyCode.ts:95](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L95)
+
+___
+
+### Key\_F12
+
+• **Key\_F12** = ``123``
+
+#### Defined in
+
+[src/event/KeyCode.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L96)
+
+___
+
+### Key\_F13
+
+• **Key\_F13** = ``124``
+
+#### Defined in
+
+[src/event/KeyCode.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L97)
+
+___
+
+### Key\_F14
+
+• **Key\_F14** = ``125``
+
+#### Defined in
+
+[src/event/KeyCode.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L98)
+
+___
+
+### Key\_F15
+
+• **Key\_F15** = ``126``
+
+#### Defined in
+
+[src/event/KeyCode.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L99)
+
+___
+
+### Key\_F16
+
+• **Key\_F16** = ``127``
+
+#### Defined in
+
+[src/event/KeyCode.ts:100](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L100)
+
+___
+
+### Key\_F17
+
+• **Key\_F17** = ``128``
+
+#### Defined in
+
+[src/event/KeyCode.ts:101](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L101)
+
+___
+
+### Key\_F18
+
+• **Key\_F18** = ``129``
+
+#### Defined in
+
+[src/event/KeyCode.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L102)
+
+___
+
+### Key\_F19
+
+• **Key\_F19** = ``130``
+
+#### Defined in
+
+[src/event/KeyCode.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L103)
+
+___
+
+### Key\_F20
+
+• **Key\_F20** = ``131``
+
+#### Defined in
+
+[src/event/KeyCode.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L104)
+
+___
+
+### Key\_F21
+
+• **Key\_F21** = ``132``
+
+#### Defined in
+
+[src/event/KeyCode.ts:105](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L105)
+
+___
+
+### Key\_F22
+
+• **Key\_F22** = ``133``
+
+#### Defined in
+
+[src/event/KeyCode.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L106)
+
+___
+
+### Key\_F23
+
+• **Key\_F23** = ``134``
+
+#### Defined in
+
+[src/event/KeyCode.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L107)
+
+___
+
+### Key\_F24
+
+• **Key\_F24** = ``135``
+
+#### Defined in
+
+[src/event/KeyCode.ts:108](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L108)
+
+___
+
+### Key\_Num\_Lock
+
+• **Key\_Num\_Lock** = ``136``
+
+#### Defined in
+
+[src/event/KeyCode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L110)
+
+___
+
+### Key\_Scroll\_Lock
+
+• **Key\_Scroll\_Lock** = ``137``
+
+#### Defined in
+
+[src/event/KeyCode.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/event/KeyCode.ts#L111)
diff --git a/docs/api/enums/LightType.md b/docs/api/enums/LightType.md
new file mode 100644
index 00000000..d20ac2e5
--- /dev/null
+++ b/docs/api/enums/LightType.md
@@ -0,0 +1,69 @@
+# Enumeration: LightType
+
+Type of light source
+
+Type Description|
+|:---:|:---:|
+None|
+PointLight|
+DirectionLight|
+SpotLight|
+SkyLight|
+
+### Enumeration Members
+
+- [None](LightType.md#none)
+- [PointLight](LightType.md#pointlight)
+- [DirectionLight](LightType.md#directionlight)
+- [SpotLight](LightType.md#spotlight)
+- [SkyLight](LightType.md#skylight)
+
+## Enumeration Members
+
+### None
+
+• **None** = ``0``
+
+#### Defined in
+
+[src/components/lights/LightData.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightData.ts#L18)
+
+___
+
+### PointLight
+
+• **PointLight** = ``1``
+
+#### Defined in
+
+[src/components/lights/LightData.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightData.ts#L19)
+
+___
+
+### DirectionLight
+
+• **DirectionLight** = ``2``
+
+#### Defined in
+
+[src/components/lights/LightData.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightData.ts#L20)
+
+___
+
+### SpotLight
+
+• **SpotLight** = ``3``
+
+#### Defined in
+
+[src/components/lights/LightData.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightData.ts#L21)
+
+___
+
+### SkyLight
+
+• **SkyLight** = ``4``
+
+#### Defined in
+
+[src/components/lights/LightData.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/LightData.ts#L22)
diff --git a/docs/api/enums/MorphTargetTransformKey.md b/docs/api/enums/MorphTargetTransformKey.md
new file mode 100644
index 00000000..41b234da
--- /dev/null
+++ b/docs/api/enums/MorphTargetTransformKey.md
@@ -0,0 +1,576 @@
+# Enumeration: MorphTargetTransformKey
+
+### Enumeration Members
+
+- [mouthRollLower](MorphTargetTransformKey.md#mouthrolllower)
+- [browOuterUp\_L](MorphTargetTransformKey.md#browouterup_l)
+- [mouthSmile\_L](MorphTargetTransformKey.md#mouthsmile_l)
+- [jawRight](MorphTargetTransformKey.md#jawright)
+- [eyeLookOut\_L](MorphTargetTransformKey.md#eyelookout_l)
+- [mouthFunnel](MorphTargetTransformKey.md#mouthfunnel)
+- [mouthUpperUp\_R](MorphTargetTransformKey.md#mouthupperup_r)
+- [browDown\_L](MorphTargetTransformKey.md#browdown_l)
+- [jawLeft](MorphTargetTransformKey.md#jawleft)
+- [mouthLowerDown\_L](MorphTargetTransformKey.md#mouthlowerdown_l)
+- [noseSneer\_R](MorphTargetTransformKey.md#nosesneer_r)
+- [jawForward](MorphTargetTransformKey.md#jawforward)
+- [mouthLowerDown\_R](MorphTargetTransformKey.md#mouthlowerdown_r)
+- [browInnerUp](MorphTargetTransformKey.md#browinnerup)
+- [mouthRollUpper](MorphTargetTransformKey.md#mouthrollupper)
+- [mouthStretch\_R](MorphTargetTransformKey.md#mouthstretch_r)
+- [mouthPucker](MorphTargetTransformKey.md#mouthpucker)
+- [eyeBlink\_L](MorphTargetTransformKey.md#eyeblink_l)
+- [mouthUpperUp\_L](MorphTargetTransformKey.md#mouthupperup_l)
+- [mouthShrugUpper](MorphTargetTransformKey.md#mouthshrugupper)
+- [eyeLookIn\_R](MorphTargetTransformKey.md#eyelookin_r)
+- [noseSneer\_L](MorphTargetTransformKey.md#nosesneer_l)
+- [mouthFrown\_L](MorphTargetTransformKey.md#mouthfrown_l)
+- [cheekSquint\_L](MorphTargetTransformKey.md#cheeksquint_l)
+- [eyeLookDown\_L](MorphTargetTransformKey.md#eyelookdown_l)
+- [mouthDimple\_L](MorphTargetTransformKey.md#mouthdimple_l)
+- [mouthFrown\_R](MorphTargetTransformKey.md#mouthfrown_r)
+- [eyeLookIn\_L](MorphTargetTransformKey.md#eyelookin_l)
+- [eyeLookOut\_R](MorphTargetTransformKey.md#eyelookout_r)
+- [mouthLeft](MorphTargetTransformKey.md#mouthleft)
+- [mouthStretch\_L](MorphTargetTransformKey.md#mouthstretch_l)
+- [mouthPress\_L](MorphTargetTransformKey.md#mouthpress_l)
+- [mouthDimple\_R](MorphTargetTransformKey.md#mouthdimple_r)
+- [eyeWide\_R](MorphTargetTransformKey.md#eyewide_r)
+- [browDown\_R](MorphTargetTransformKey.md#browdown_r)
+- [eyeLookUp\_R](MorphTargetTransformKey.md#eyelookup_r)
+- [eyeBlink\_R](MorphTargetTransformKey.md#eyeblink_r)
+- [cheekSquint\_R](MorphTargetTransformKey.md#cheeksquint_r)
+- [mouthRight](MorphTargetTransformKey.md#mouthright)
+- [eyeLookDown\_R](MorphTargetTransformKey.md#eyelookdown_r)
+- [eyeLookUp\_L](MorphTargetTransformKey.md#eyelookup_l)
+- [eyeSquint\_L](MorphTargetTransformKey.md#eyesquint_l)
+- [jawOpen](MorphTargetTransformKey.md#jawopen)
+- [browOuterUp\_R](MorphTargetTransformKey.md#browouterup_r)
+- [mouthClose](MorphTargetTransformKey.md#mouthclose)
+- [mouthShrugLower](MorphTargetTransformKey.md#mouthshruglower)
+- [eyeWide\_L](MorphTargetTransformKey.md#eyewide_l)
+- [tongueOut](MorphTargetTransformKey.md#tongueout)
+- [eyeSquint\_R](MorphTargetTransformKey.md#eyesquint_r)
+- [cheekPuff](MorphTargetTransformKey.md#cheekpuff)
+- [mouthPress\_R](MorphTargetTransformKey.md#mouthpress_r)
+- [mouthSmile\_R](MorphTargetTransformKey.md#mouthsmile_r)
+
+## Enumeration Members
+
+### mouthRollLower
+
+• **mouthRollLower** = ``"mouthRollLower"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L57)
+
+___
+
+### browOuterUp\_L
+
+• **browOuterUp\_L** = ``"browOuterUpLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:58](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L58)
+
+___
+
+### mouthSmile\_L
+
+• **mouthSmile\_L** = ``"mouthSmileLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L59)
+
+___
+
+### jawRight
+
+• **jawRight** = ``"jawRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:60](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L60)
+
+___
+
+### eyeLookOut\_L
+
+• **eyeLookOut\_L** = ``"eyeLookOutLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:61](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L61)
+
+___
+
+### mouthFunnel
+
+• **mouthFunnel** = ``"mouthFunnel"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L62)
+
+___
+
+### mouthUpperUp\_R
+
+• **mouthUpperUp\_R** = ``"mouthUpperUpRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L63)
+
+___
+
+### browDown\_L
+
+• **browDown\_L** = ``"browDownLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L64)
+
+___
+
+### jawLeft
+
+• **jawLeft** = ``"jawLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L65)
+
+___
+
+### mouthLowerDown\_L
+
+• **mouthLowerDown\_L** = ``"mouthLowerDownLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:66](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L66)
+
+___
+
+### noseSneer\_R
+
+• **noseSneer\_R** = ``"noseSneerRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L67)
+
+___
+
+### jawForward
+
+• **jawForward** = ``"jawForward"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L68)
+
+___
+
+### mouthLowerDown\_R
+
+• **mouthLowerDown\_R** = ``"mouthLowerDownRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L69)
+
+___
+
+### browInnerUp
+
+• **browInnerUp** = ``"browInnerUp"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L70)
+
+___
+
+### mouthRollUpper
+
+• **mouthRollUpper** = ``"mouthRollUpper"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L71)
+
+___
+
+### mouthStretch\_R
+
+• **mouthStretch\_R** = ``"mouthStretchRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:72](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L72)
+
+___
+
+### mouthPucker
+
+• **mouthPucker** = ``"mouthPucker"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L73)
+
+___
+
+### eyeBlink\_L
+
+• **eyeBlink\_L** = ``"eyeBlinkLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:74](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L74)
+
+___
+
+### mouthUpperUp\_L
+
+• **mouthUpperUp\_L** = ``"mouthUpperUpLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L75)
+
+___
+
+### mouthShrugUpper
+
+• **mouthShrugUpper** = ``"mouthShrugUpper"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L76)
+
+___
+
+### eyeLookIn\_R
+
+• **eyeLookIn\_R** = ``"eyeLookInRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L77)
+
+___
+
+### noseSneer\_L
+
+• **noseSneer\_L** = ``"noseSneerLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L78)
+
+___
+
+### mouthFrown\_L
+
+• **mouthFrown\_L** = ``"mouthFrownLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L79)
+
+___
+
+### cheekSquint\_L
+
+• **cheekSquint\_L** = ``"cheekSquintLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L80)
+
+___
+
+### eyeLookDown\_L
+
+• **eyeLookDown\_L** = ``"eyeLookDownLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L81)
+
+___
+
+### mouthDimple\_L
+
+• **mouthDimple\_L** = ``"mouthDimpleLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:82](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L82)
+
+___
+
+### mouthFrown\_R
+
+• **mouthFrown\_R** = ``"mouthFrownRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L83)
+
+___
+
+### eyeLookIn\_L
+
+• **eyeLookIn\_L** = ``"eyeLookInLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:84](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L84)
+
+___
+
+### eyeLookOut\_R
+
+• **eyeLookOut\_R** = ``"eyeLookOutRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L85)
+
+___
+
+### mouthLeft
+
+• **mouthLeft** = ``"mouthLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:86](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L86)
+
+___
+
+### mouthStretch\_L
+
+• **mouthStretch\_L** = ``"mouthStretchLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L87)
+
+___
+
+### mouthPress\_L
+
+• **mouthPress\_L** = ``"mouthPressLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L88)
+
+___
+
+### mouthDimple\_R
+
+• **mouthDimple\_R** = ``"mouthDimpleRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L89)
+
+___
+
+### eyeWide\_R
+
+• **eyeWide\_R** = ``"eyeWideRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L90)
+
+___
+
+### browDown\_R
+
+• **browDown\_R** = ``"browDownRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L91)
+
+___
+
+### eyeLookUp\_R
+
+• **eyeLookUp\_R** = ``"eyeLookUpRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L92)
+
+___
+
+### eyeBlink\_R
+
+• **eyeBlink\_R** = ``"eyeBlinkRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L93)
+
+___
+
+### cheekSquint\_R
+
+• **cheekSquint\_R** = ``"cheekSquintRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:94](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L94)
+
+___
+
+### mouthRight
+
+• **mouthRight** = ``"mouthDimpleRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:95](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L95)
+
+___
+
+### eyeLookDown\_R
+
+• **eyeLookDown\_R** = ``"eyeLookDownRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L96)
+
+___
+
+### eyeLookUp\_L
+
+• **eyeLookUp\_L** = ``"eyeLookUpLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L97)
+
+___
+
+### eyeSquint\_L
+
+• **eyeSquint\_L** = ``"eyeSquintLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L98)
+
+___
+
+### jawOpen
+
+• **jawOpen** = ``"jawOpen"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L99)
+
+___
+
+### browOuterUp\_R
+
+• **browOuterUp\_R** = ``"browOuterUpRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:100](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L100)
+
+___
+
+### mouthClose
+
+• **mouthClose** = ``"mouthClose"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:101](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L101)
+
+___
+
+### mouthShrugLower
+
+• **mouthShrugLower** = ``"mouthShrugLower"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L102)
+
+___
+
+### eyeWide\_L
+
+• **eyeWide\_L** = ``"eyeWideLeft"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L103)
+
+___
+
+### tongueOut
+
+• **tongueOut** = ``"tongueOut"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L104)
+
+___
+
+### eyeSquint\_R
+
+• **eyeSquint\_R** = ``"eyeSquintRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:105](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L105)
+
+___
+
+### cheekPuff
+
+• **cheekPuff** = ``"cheekPuff"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L106)
+
+___
+
+### mouthPress\_R
+
+• **mouthPress\_R** = ``"mouthPressRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:107](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L107)
+
+___
+
+### mouthSmile\_R
+
+• **mouthSmile\_R** = ``"mouthSmileRight"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:108](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L108)
diff --git a/docs/api/enums/MouseCode.md b/docs/api/enums/MouseCode.md
new file mode 100644
index 00000000..628ea75c
--- /dev/null
+++ b/docs/api/enums/MouseCode.md
@@ -0,0 +1,45 @@
+# Enumeration: MouseCode
+
+Mouse Key Code
+
+### Enumeration Members
+
+- [MOUSE\_LEFT](MouseCode.md#mouse_left)
+- [MOUSE\_MID](MouseCode.md#mouse_mid)
+- [MOUSE\_RIGHT](MouseCode.md#mouse_right)
+
+## Enumeration Members
+
+### MOUSE\_LEFT
+
+• **MOUSE\_LEFT** = ``0``
+
+key code of mouse left
+
+#### Defined in
+
+[src/event/MouseCode.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/event/MouseCode.ts#L11)
+
+___
+
+### MOUSE\_MID
+
+• **MOUSE\_MID** = ``1``
+
+key code of mouse middle
+
+#### Defined in
+
+[src/event/MouseCode.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/event/MouseCode.ts#L18)
+
+___
+
+### MOUSE\_RIGHT
+
+• **MOUSE\_RIGHT** = ``2``
+
+key code of mouse right
+
+#### Defined in
+
+[src/event/MouseCode.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/event/MouseCode.ts#L25)
diff --git a/docs/api/enums/ParserFormat.md b/docs/api/enums/ParserFormat.md
new file mode 100644
index 00000000..3fce07bc
--- /dev/null
+++ b/docs/api/enums/ParserFormat.md
@@ -0,0 +1,37 @@
+# Enumeration: ParserFormat
+
+### Enumeration Members
+
+- [TEXT](ParserFormat.md#text)
+- [BIN](ParserFormat.md#bin)
+- [JSON](ParserFormat.md#json)
+
+## Enumeration Members
+
+### TEXT
+
+• **TEXT** = ``0``
+
+#### Defined in
+
+[src/loader/parser/ParserFormat.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserFormat.ts#L2)
+
+___
+
+### BIN
+
+• **BIN** = ``1``
+
+#### Defined in
+
+[src/loader/parser/ParserFormat.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserFormat.ts#L3)
+
+___
+
+### JSON
+
+• **JSON** = ``2``
+
+#### Defined in
+
+[src/loader/parser/ParserFormat.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserFormat.ts#L4)
diff --git a/docs/api/enums/RendererMask.md b/docs/api/enums/RendererMask.md
new file mode 100644
index 00000000..1a584919
--- /dev/null
+++ b/docs/api/enums/RendererMask.md
@@ -0,0 +1,127 @@
+# Enumeration: RendererMask
+
+RenderMask
+
+### Enumeration Members
+
+- [Default](RendererMask.md#default)
+- [IgnoreDepthPass](RendererMask.md#ignoredepthpass)
+- [Sky](RendererMask.md#sky)
+- [Particle](RendererMask.md#particle)
+- [SkinnedMesh](RendererMask.md#skinnedmesh)
+- [MorphTarget](RendererMask.md#morphtarget)
+- [Terrain](RendererMask.md#terrain)
+- [UI](RendererMask.md#ui)
+- [Reflection](RendererMask.md#reflection)
+- [ReflectionDebug](RendererMask.md#reflectiondebug)
+- [Graphic3D](RendererMask.md#graphic3d)
+
+## Enumeration Members
+
+### Default
+
+• **Default** = ``1``
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/state/RendererMask.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/state/RendererMask.ts#L6)
+
+___
+
+### IgnoreDepthPass
+
+• **IgnoreDepthPass** = ``2``
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/state/RendererMask.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/state/RendererMask.ts#L7)
+
+___
+
+### Sky
+
+• **Sky** = ``6``
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/state/RendererMask.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/state/RendererMask.ts#L8)
+
+___
+
+### Particle
+
+• **Particle** = ``10``
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/state/RendererMask.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/state/RendererMask.ts#L9)
+
+___
+
+### SkinnedMesh
+
+• **SkinnedMesh** = ``16``
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/state/RendererMask.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/state/RendererMask.ts#L10)
+
+___
+
+### MorphTarget
+
+• **MorphTarget** = ``32``
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/state/RendererMask.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/state/RendererMask.ts#L11)
+
+___
+
+### Terrain
+
+• **Terrain** = ``64``
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/state/RendererMask.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/state/RendererMask.ts#L12)
+
+___
+
+### UI
+
+• **UI** = ``128``
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/state/RendererMask.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/state/RendererMask.ts#L13)
+
+___
+
+### Reflection
+
+• **Reflection** = ``256``
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/state/RendererMask.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/state/RendererMask.ts#L14)
+
+___
+
+### ReflectionDebug
+
+• **ReflectionDebug** = ``512``
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/state/RendererMask.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/state/RendererMask.ts#L15)
+
+___
+
+### Graphic3D
+
+• **Graphic3D** = ``1024``
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/state/RendererMask.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/state/RendererMask.ts#L16)
diff --git a/docs/api/enums/TextAnchor.md b/docs/api/enums/TextAnchor.md
new file mode 100644
index 00000000..5c91bea9
--- /dev/null
+++ b/docs/api/enums/TextAnchor.md
@@ -0,0 +1,103 @@
+# Enumeration: TextAnchor
+
+### Enumeration Members
+
+- [UpperLeft](TextAnchor.md#upperleft)
+- [UpperCenter](TextAnchor.md#uppercenter)
+- [UpperRight](TextAnchor.md#upperright)
+- [MiddleLeft](TextAnchor.md#middleleft)
+- [MiddleCenter](TextAnchor.md#middlecenter)
+- [MiddleRight](TextAnchor.md#middleright)
+- [LowerLeft](TextAnchor.md#lowerleft)
+- [LowerCenter](TextAnchor.md#lowercenter)
+- [LowerRight](TextAnchor.md#lowerright)
+
+## Enumeration Members
+
+### UpperLeft
+
+• **UpperLeft** = ``0``
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L15)
+
+___
+
+### UpperCenter
+
+• **UpperCenter** = ``1``
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L19)
+
+___
+
+### UpperRight
+
+• **UpperRight** = ``2``
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L23)
+
+___
+
+### MiddleLeft
+
+• **MiddleLeft** = ``3``
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L27)
+
+___
+
+### MiddleCenter
+
+• **MiddleCenter** = ``4``
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L31)
+
+___
+
+### MiddleRight
+
+• **MiddleRight** = ``5``
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L35)
+
+___
+
+### LowerLeft
+
+• **LowerLeft** = ``6``
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L39)
+
+___
+
+### LowerCenter
+
+• **LowerCenter** = ``7``
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L43)
+
+___
+
+### LowerRight
+
+• **LowerRight** = ``8``
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L47)
diff --git a/docs/api/enums/UIButtonTransition.md b/docs/api/enums/UIButtonTransition.md
new file mode 100644
index 00000000..43718e2f
--- /dev/null
+++ b/docs/api/enums/UIButtonTransition.md
@@ -0,0 +1,37 @@
+# Enumeration: UIButtonTransition
+
+### Enumeration Members
+
+- [NONE](UIButtonTransition.md#none)
+- [COLOR](UIButtonTransition.md#color)
+- [SPRITE](UIButtonTransition.md#sprite)
+
+## Enumeration Members
+
+### NONE
+
+• **NONE** = ``0``
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L10)
+
+___
+
+### COLOR
+
+• **COLOR** = ``1``
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L11)
+
+___
+
+### SPRITE
+
+• **SPRITE** = ``2``
+
+#### Defined in
+
+[src/components/gui/uiComponents/UIButton.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/UIButton.ts#L12)
diff --git a/docs/api/enums/UIInteractiveStyle.md b/docs/api/enums/UIInteractiveStyle.md
new file mode 100644
index 00000000..d745c5fb
--- /dev/null
+++ b/docs/api/enums/UIInteractiveStyle.md
@@ -0,0 +1,48 @@
+# Enumeration: UIInteractiveStyle
+
+### Enumeration Members
+
+- [NORMAL](UIInteractiveStyle.md#normal)
+- [DOWN](UIInteractiveStyle.md#down)
+- [OVER](UIInteractiveStyle.md#over)
+- [DISABLE](UIInteractiveStyle.md#disable)
+
+## Enumeration Members
+
+### NORMAL
+
+• **NORMAL** = ``0``
+
+#### Defined in
+
+[src/components/gui/uiComponents/IUIInteractive.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/IUIInteractive.ts#L6)
+
+___
+
+### DOWN
+
+• **DOWN** = ``1``
+
+#### Defined in
+
+[src/components/gui/uiComponents/IUIInteractive.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/IUIInteractive.ts#L7)
+
+___
+
+### OVER
+
+• **OVER** = ``2``
+
+#### Defined in
+
+[src/components/gui/uiComponents/IUIInteractive.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/IUIInteractive.ts#L8)
+
+___
+
+### DISABLE
+
+• **DISABLE** = ``3``
+
+#### Defined in
+
+[src/components/gui/uiComponents/IUIInteractive.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/IUIInteractive.ts#L9)
diff --git a/docs/api/enums/UniformType.md b/docs/api/enums/UniformType.md
new file mode 100644
index 00000000..97993764
--- /dev/null
+++ b/docs/api/enums/UniformType.md
@@ -0,0 +1,70 @@
+# Enumeration: UniformType
+
+### Enumeration Members
+
+- [Number](UniformType.md#number)
+- [Vector2](UniformType.md#vector2)
+- [Vector3](UniformType.md#vector3)
+- [Vector4](UniformType.md#vector4)
+- [Color](UniformType.md#color)
+- [Float32Array](UniformType.md#float32array)
+
+## Enumeration Members
+
+### Number
+
+• **Number** = ``0``
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/value/UniformValue.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/value/UniformValue.ts#L11)
+
+___
+
+### Vector2
+
+• **Vector2** = ``1``
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/value/UniformValue.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/value/UniformValue.ts#L12)
+
+___
+
+### Vector3
+
+• **Vector3** = ``2``
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/value/UniformValue.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/value/UniformValue.ts#L13)
+
+___
+
+### Vector4
+
+• **Vector4** = ``3``
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/value/UniformValue.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/value/UniformValue.ts#L14)
+
+___
+
+### Color
+
+• **Color** = ``4``
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/value/UniformValue.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/value/UniformValue.ts#L15)
+
+___
+
+### Float32Array
+
+• **Float32Array** = ``5``
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/value/UniformValue.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/value/UniformValue.ts#L16)
diff --git a/docs/api/enums/ValueEnumType.md b/docs/api/enums/ValueEnumType.md
new file mode 100644
index 00000000..35cfa1cd
--- /dev/null
+++ b/docs/api/enums/ValueEnumType.md
@@ -0,0 +1,367 @@
+# Enumeration: ValueEnumType
+
+### Enumeration Members
+
+- [single](ValueEnumType.md#single)
+- [boolean](ValueEnumType.md#boolean)
+- [int](ValueEnumType.md#int)
+- [int16](ValueEnumType.md#int16)
+- [int32](ValueEnumType.md#int32)
+- [float](ValueEnumType.md#float)
+- [long](ValueEnumType.md#long)
+- [uint](ValueEnumType.md#uint)
+- [uint32](ValueEnumType.md#uint32)
+- [uint64](ValueEnumType.md#uint64)
+- [double](ValueEnumType.md#double)
+- [string](ValueEnumType.md#string)
+- [singleArray](ValueEnumType.md#singlearray)
+- [stringArray](ValueEnumType.md#stringarray)
+- [floatArray](ValueEnumType.md#floatarray)
+- [vector2](ValueEnumType.md#vector2)
+- [vector3](ValueEnumType.md#vector3)
+- [vector4](ValueEnumType.md#vector4)
+- [color](ValueEnumType.md#color)
+- [color32](ValueEnumType.md#color32)
+- [animationCurve](ValueEnumType.md#animationcurve)
+- [quaternion](ValueEnumType.md#quaternion)
+- [matrix4x4](ValueEnumType.md#matrix4x4)
+- [mesh](ValueEnumType.md#mesh)
+- [texture](ValueEnumType.md#texture)
+- [material](ValueEnumType.md#material)
+- [materials](ValueEnumType.md#materials)
+- [skeleton](ValueEnumType.md#skeleton)
+- [animClip](ValueEnumType.md#animclip)
+- [vector2Int](ValueEnumType.md#vector2int)
+- [int32List](ValueEnumType.md#int32list)
+- [colorList](ValueEnumType.md#colorlist)
+- [color32List](ValueEnumType.md#color32list)
+
+## Enumeration Members
+
+### single
+
+• **single** = ``0``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L4)
+
+___
+
+### boolean
+
+• **boolean** = ``1``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L5)
+
+___
+
+### int
+
+• **int** = ``2``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L6)
+
+___
+
+### int16
+
+• **int16** = ``3``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L7)
+
+___
+
+### int32
+
+• **int32** = ``4``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L8)
+
+___
+
+### float
+
+• **float** = ``5``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L9)
+
+___
+
+### long
+
+• **long** = ``6``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L10)
+
+___
+
+### uint
+
+• **uint** = ``7``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L11)
+
+___
+
+### uint32
+
+• **uint32** = ``8``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L12)
+
+___
+
+### uint64
+
+• **uint64** = ``9``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L13)
+
+___
+
+### double
+
+• **double** = ``10``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L14)
+
+___
+
+### string
+
+• **string** = ``11``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L15)
+
+___
+
+### singleArray
+
+• **singleArray** = ``12``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L16)
+
+___
+
+### stringArray
+
+• **stringArray** = ``13``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L17)
+
+___
+
+### floatArray
+
+• **floatArray** = ``14``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L18)
+
+___
+
+### vector2
+
+• **vector2** = ``15``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L19)
+
+___
+
+### vector3
+
+• **vector3** = ``16``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L20)
+
+___
+
+### vector4
+
+• **vector4** = ``17``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L21)
+
+___
+
+### color
+
+• **color** = ``18``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L22)
+
+___
+
+### color32
+
+• **color32** = ``19``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L23)
+
+___
+
+### animationCurve
+
+• **animationCurve** = ``20``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L24)
+
+___
+
+### quaternion
+
+• **quaternion** = ``21``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L25)
+
+___
+
+### matrix4x4
+
+• **matrix4x4** = ``22``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L26)
+
+___
+
+### mesh
+
+• **mesh** = ``23``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L27)
+
+___
+
+### texture
+
+• **texture** = ``24``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L28)
+
+___
+
+### material
+
+• **material** = ``25``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L29)
+
+___
+
+### materials
+
+• **materials** = ``26``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L30)
+
+___
+
+### skeleton
+
+• **skeleton** = ``27``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:31](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L31)
+
+___
+
+### animClip
+
+• **animClip** = ``28``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L32)
+
+___
+
+### vector2Int
+
+• **vector2Int** = ``29``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:33](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L33)
+
+___
+
+### int32List
+
+• **int32List** = ``30``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L34)
+
+___
+
+### colorList
+
+• **colorList** = ``31``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L35)
+
+___
+
+### color32List
+
+• **color32List** = ``32``
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueType.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueType.ts#L36)
diff --git a/docs/api/enums/Vertical.md b/docs/api/enums/Vertical.md
new file mode 100644
index 00000000..5ec211a9
--- /dev/null
+++ b/docs/api/enums/Vertical.md
@@ -0,0 +1,37 @@
+# Enumeration: Vertical
+
+### Enumeration Members
+
+- [Upper](Vertical.md#upper)
+- [Middle](Vertical.md#middle)
+- [Lower](Vertical.md#lower)
+
+## Enumeration Members
+
+### Upper
+
+• **Upper** = ``0``
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:51](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L51)
+
+___
+
+### Middle
+
+• **Middle** = ``1``
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L52)
+
+___
+
+### Lower
+
+• **Lower** = ``2``
+
+#### Defined in
+
+[src/components/gui/uiComponents/TextFieldLayout.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/TextFieldLayout.ts#L53)
diff --git a/docs/api/enums/WrapMode.md b/docs/api/enums/WrapMode.md
new file mode 100644
index 00000000..7d9cc7f8
--- /dev/null
+++ b/docs/api/enums/WrapMode.md
@@ -0,0 +1,82 @@
+# Enumeration: WrapMode
+
+### Enumeration Members
+
+- [Default](WrapMode.md#default)
+- [Clamp](WrapMode.md#clamp)
+- [Once](WrapMode.md#once)
+- [Loop](WrapMode.md#loop)
+- [PingPong](WrapMode.md#pingpong)
+- [ClampForever](WrapMode.md#clampforever)
+
+## Enumeration Members
+
+### Default
+
+• **Default** = ``0``
+
+Read loop mode from animation clips.
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimClip.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimClip.ts#L16)
+
+___
+
+### Clamp
+
+• **Clamp** = ``1``
+
+When the time reaches the end of the animation clip, the clip will automatically stop playing and the time will be reset to the beginning of the clip.
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimClip.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimClip.ts#L20)
+
+___
+
+### Once
+
+• **Once** = ``1``
+
+Stop the animation when the time reaches the end.
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimClip.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimClip.ts#L24)
+
+___
+
+### Loop
+
+• **Loop** = ``2``
+
+When the time reaches the end, replay from the beginning.
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimClip.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimClip.ts#L28)
+
+___
+
+### PingPong
+
+• **PingPong** = ``4``
+
+Play the animation. When it reaches the endpoint, it will continue to play the last frame and never stop playing.
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimClip.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimClip.ts#L32)
+
+___
+
+### ClampForever
+
+• **ClampForever** = ``8``
+
+Play the animation. When playing to the end, the animation is always in the sampling state of the last frame.
+
+#### Defined in
+
+[src/components/anim/curveAnim/PropertyAnimClip.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/curveAnim/PropertyAnimClip.ts#L36)
diff --git a/docs/api/enums/WrapTimeMode.md b/docs/api/enums/WrapTimeMode.md
new file mode 100644
index 00000000..437fd692
--- /dev/null
+++ b/docs/api/enums/WrapTimeMode.md
@@ -0,0 +1,51 @@
+# Enumeration: WrapTimeMode
+
+Time Warp Mode
+
+**`Ping Pong`**
+
+value min -> max -> min
+
+**`Repeat`**
+
+value = value % repeatSpace
+
+**`Clamp`**
+
+value = max(min( value , 1 ) , 0 )
+
+### Enumeration Members
+
+- [PingPong](WrapTimeMode.md#pingpong)
+- [Repeat](WrapTimeMode.md#repeat)
+- [Clamp](WrapTimeMode.md#clamp)
+
+## Enumeration Members
+
+### PingPong
+
+• **PingPong** = ``0``
+
+#### Defined in
+
+[src/math/enum/WrapTimeMode.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/WrapTimeMode.ts#L8)
+
+___
+
+### Repeat
+
+• **Repeat** = ``1``
+
+#### Defined in
+
+[src/math/enum/WrapTimeMode.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/WrapTimeMode.ts#L9)
+
+___
+
+### Clamp
+
+• **Clamp** = ``2``
+
+#### Defined in
+
+[src/math/enum/WrapTimeMode.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/math/enum/WrapTimeMode.ts#L10)
diff --git a/docs/api/functions/ArrayHas.md b/docs/api/functions/ArrayHas.md
new file mode 100644
index 00000000..9a1269a3
--- /dev/null
+++ b/docs/api/functions/ArrayHas.md
@@ -0,0 +1,18 @@
+# Function: ArrayHas
+
+▸ **ArrayHas**(`array`, `item`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `array` | `any`[] |
+| `item` | `any` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/util/Global.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/util/Global.ts#L47)
diff --git a/docs/api/functions/ArrayItemIndex.md b/docs/api/functions/ArrayItemIndex.md
new file mode 100644
index 00000000..dfac7fb4
--- /dev/null
+++ b/docs/api/functions/ArrayItemIndex.md
@@ -0,0 +1,18 @@
+# Function: ArrayItemIndex
+
+▸ **ArrayItemIndex**(`array`, `item`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `array` | `any`[] |
+| `item` | `any` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/util/Global.ts:59](https://github.com/Orillusion/orillusion/blob/main/src/util/Global.ts#L59)
diff --git a/docs/api/functions/EditorInspector.md b/docs/api/functions/EditorInspector.md
new file mode 100644
index 00000000..2a6dbfcb
--- /dev/null
+++ b/docs/api/functions/EditorInspector.md
@@ -0,0 +1,21 @@
+# Function: EditorInspector
+
+▸ **EditorInspector**(`cls`, `key`, `p1?`, `p2?`, `p3?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cls` | `any` |
+| `key` | `any` |
+| `p1?` | `any` |
+| `p2?` | `any` |
+| `p3?` | `any` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/util/SerializeDecoration.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/util/SerializeDecoration.ts#L25)
diff --git a/docs/api/functions/GetComponentClass.md b/docs/api/functions/GetComponentClass.md
new file mode 100644
index 00000000..22a98071
--- /dev/null
+++ b/docs/api/functions/GetComponentClass.md
@@ -0,0 +1,17 @@
+# Function: GetComponentClass
+
+▸ **GetComponentClass**(`name`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/util/SerializeDecoration.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/util/SerializeDecoration.ts#L90)
diff --git a/docs/api/functions/GetCountInstanceID.md b/docs/api/functions/GetCountInstanceID.md
new file mode 100644
index 00000000..7edca823
--- /dev/null
+++ b/docs/api/functions/GetCountInstanceID.md
@@ -0,0 +1,11 @@
+# Function: GetCountInstanceID
+
+▸ **GetCountInstanceID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[src/util/Global.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/util/Global.ts#L42)
diff --git a/docs/api/functions/GetShader.md b/docs/api/functions/GetShader.md
new file mode 100644
index 00000000..04711d71
--- /dev/null
+++ b/docs/api/functions/GetShader.md
@@ -0,0 +1,17 @@
+# Function: GetShader
+
+▸ **GetShader**(`name`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/util/SerializeDecoration.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/util/SerializeDecoration.ts#L106)
diff --git a/docs/api/functions/IsEditorInspector.md b/docs/api/functions/IsEditorInspector.md
new file mode 100644
index 00000000..d332e0da
--- /dev/null
+++ b/docs/api/functions/IsEditorInspector.md
@@ -0,0 +1,23 @@
+# Function: IsEditorInspector
+
+▸ **IsEditorInspector**\<`T`\>(`instance`): `Map`\<`string`, `any`\>
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `object` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `instance` | `T` |
+
+#### Returns
+
+`Map`\<`string`, `any`\>
+
+#### Defined in
+
+[src/util/SerializeDecoration.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/util/SerializeDecoration.ts#L38)
diff --git a/docs/api/functions/IsNonSerialize.md b/docs/api/functions/IsNonSerialize.md
new file mode 100644
index 00000000..272b28be
--- /dev/null
+++ b/docs/api/functions/IsNonSerialize.md
@@ -0,0 +1,24 @@
+# Function: IsNonSerialize
+
+▸ **IsNonSerialize**\<`T`\>(`instance`, `key`): `boolean`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `object` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `instance` | `T` |
+| `key` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/util/SerializeDecoration.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/util/SerializeDecoration.ts#L14)
diff --git a/docs/api/functions/NonSerialize.md b/docs/api/functions/NonSerialize.md
new file mode 100644
index 00000000..49c2e796
--- /dev/null
+++ b/docs/api/functions/NonSerialize.md
@@ -0,0 +1,18 @@
+# Function: NonSerialize
+
+▸ **NonSerialize**(`cls`, `key`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cls` | `any` |
+| `key` | `any` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/util/SerializeDecoration.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/util/SerializeDecoration.ts#L4)
diff --git a/docs/api/functions/RegisterComponent.md b/docs/api/functions/RegisterComponent.md
new file mode 100644
index 00000000..a5673ef6
--- /dev/null
+++ b/docs/api/functions/RegisterComponent.md
@@ -0,0 +1,21 @@
+# Function: RegisterComponent
+
+▸ **RegisterComponent**(`cls`, `key`, `p1?`, `p2?`, `p3?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cls` | `any` |
+| `key` | `any` |
+| `p1?` | `any` |
+| `p2?` | `any` |
+| `p3?` | `any` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/util/SerializeDecoration.ts:82](https://github.com/Orillusion/orillusion/blob/main/src/util/SerializeDecoration.ts#L82)
diff --git a/docs/api/functions/RegisterShader.md b/docs/api/functions/RegisterShader.md
new file mode 100644
index 00000000..bdcbd706
--- /dev/null
+++ b/docs/api/functions/RegisterShader.md
@@ -0,0 +1,21 @@
+# Function: RegisterShader
+
+▸ **RegisterShader**(`cls`, `key`, `p1?`, `p2?`, `p3?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cls` | `any` |
+| `key` | `any` |
+| `p1?` | `any` |
+| `p2?` | `any` |
+| `p3?` | `any` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/util/SerializeDecoration.ts:98](https://github.com/Orillusion/orillusion/blob/main/src/util/SerializeDecoration.ts#L98)
diff --git a/docs/api/functions/UUID.md b/docs/api/functions/UUID.md
new file mode 100644
index 00000000..a9275ab0
--- /dev/null
+++ b/docs/api/functions/UUID.md
@@ -0,0 +1,20 @@
+# Function: UUID
+
+▸ **UUID**(`len?`, `radix?`): `string`
+
+UUID
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `len` | `number` | `16` |
+| `radix` | `number` | `16` |
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/util/Global.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/util/Global.ts#L10)
diff --git a/docs/api/functions/arrayToString.md b/docs/api/functions/arrayToString.md
new file mode 100644
index 00000000..441ffd08
--- /dev/null
+++ b/docs/api/functions/arrayToString.md
@@ -0,0 +1,17 @@
+# Function: arrayToString
+
+▸ **arrayToString**(`array`): `string`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `array` | `any` |
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/loader/parser/b3dm/arrayToString.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/b3dm/arrayToString.ts#L1)
diff --git a/docs/api/functions/makeAloneSprite.md b/docs/api/functions/makeAloneSprite.md
new file mode 100644
index 00000000..19273aad
--- /dev/null
+++ b/docs/api/functions/makeAloneSprite.md
@@ -0,0 +1,18 @@
+# Function: makeAloneSprite
+
+▸ **makeAloneSprite**(`id`, `texture`): [`GUISprite`](../classes/GUISprite.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `string` |
+| `texture` | [`Texture`](../classes/Texture.md) |
+
+#### Returns
+
+[`GUISprite`](../classes/GUISprite.md)
+
+#### Defined in
+
+[src/components/gui/GUIExtension.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIExtension.ts#L6)
diff --git a/docs/api/functions/makeGUISprite.md b/docs/api/functions/makeGUISprite.md
new file mode 100644
index 00000000..fac29c95
--- /dev/null
+++ b/docs/api/functions/makeGUISprite.md
@@ -0,0 +1,19 @@
+# Function: makeGUISprite
+
+▸ **makeGUISprite**(`source`, `id`, `data`): [`GUISprite`](../classes/GUISprite.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `source` | `GUITexture` |
+| `id` | `string` |
+| `data` | `any` |
+
+#### Returns
+
+[`GUISprite`](../classes/GUISprite.md)
+
+#### Defined in
+
+[src/components/gui/GUIExtension.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/GUIExtension.ts#L25)
diff --git a/docs/api/functions/mergeFunctions.md b/docs/api/functions/mergeFunctions.md
new file mode 100644
index 00000000..c90317b0
--- /dev/null
+++ b/docs/api/functions/mergeFunctions.md
@@ -0,0 +1,29 @@
+# Function: mergeFunctions
+
+▸ **mergeFunctions**(`...funcs`): (...`args`: `any`[]) => `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `...funcs` | `any`[] |
+
+#### Returns
+
+`fn`
+
+▸ (`...args`): `void`
+
+##### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `...args` | `any`[] |
+
+##### Returns
+
+`void`
+
+#### Defined in
+
+[src/util/Global.ts:71](https://github.com/Orillusion/orillusion/blob/main/src/util/Global.ts#L71)
diff --git a/docs/api/functions/readMagicBytes.md b/docs/api/functions/readMagicBytes.md
new file mode 100644
index 00000000..f4f212df
--- /dev/null
+++ b/docs/api/functions/readMagicBytes.md
@@ -0,0 +1,17 @@
+# Function: readMagicBytes
+
+▸ **readMagicBytes**(`bufferOrDataView`): `string`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bufferOrDataView` | `any` |
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/loader/parser/b3dm/readMagicBytes.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/b3dm/readMagicBytes.ts#L1)
diff --git a/docs/api/functions/registerMaterial.md b/docs/api/functions/registerMaterial.md
new file mode 100644
index 00000000..e56a3298
--- /dev/null
+++ b/docs/api/functions/registerMaterial.md
@@ -0,0 +1,18 @@
+# Function: registerMaterial
+
+▸ **registerMaterial**(`name`, `cls`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `MaterialClassName` |
+| `cls` | [`Ctor`](../types/Ctor.md)\<[`Material`](../classes/Material.md)\> |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/materials/MaterialRegister.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/materials/MaterialRegister.ts#L37)
diff --git a/docs/api/functions/setFrameDelay.md b/docs/api/functions/setFrameDelay.md
new file mode 100644
index 00000000..4f7445b7
--- /dev/null
+++ b/docs/api/functions/setFrameDelay.md
@@ -0,0 +1,17 @@
+# Function: setFrameDelay
+
+▸ **setFrameDelay**(`frame`): `Promise`\<`unknown`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `frame` | `number` |
+
+#### Returns
+
+`Promise`\<`unknown`\>
+
+#### Defined in
+
+[src/util/DelayUtil.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/util/DelayUtil.ts#L12)
diff --git a/docs/api/functions/setTimeDelay.md b/docs/api/functions/setTimeDelay.md
new file mode 100644
index 00000000..b7e5e257
--- /dev/null
+++ b/docs/api/functions/setTimeDelay.md
@@ -0,0 +1,17 @@
+# Function: setTimeDelay
+
+▸ **setTimeDelay**(`ms`): `Promise`\<`unknown`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ms` | `number` |
+
+#### Returns
+
+`Promise`\<`unknown`\>
+
+#### Defined in
+
+[src/util/DelayUtil.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/util/DelayUtil.ts#L1)
diff --git a/docs/api/functions/textureCompress.md b/docs/api/functions/textureCompress.md
new file mode 100644
index 00000000..17ce0933
--- /dev/null
+++ b/docs/api/functions/textureCompress.md
@@ -0,0 +1,22 @@
+# Function: textureCompress
+
+▸ **textureCompress**(`colorMap`, `sourceTexture`, `destTexture`, `workX`, `workY`, `workZ?`): `string`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `colorMap` | [`Texture`](../classes/Texture.md) | `undefined` |
+| `sourceTexture` | [`Texture`](../classes/Texture.md)[] | `undefined` |
+| `destTexture` | [`Texture`](../classes/Texture.md)[] | `undefined` |
+| `workX` | `number` | `undefined` |
+| `workY` | `number` | `undefined` |
+| `workZ` | `number` | `1` |
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/assets/shader/compute/utils/TextureCompress.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/utils/TextureCompress.ts#L3)
diff --git a/docs/api/index.md b/docs/api/index.md
new file mode 100644
index 00000000..19f5f85b
--- /dev/null
+++ b/docs/api/index.md
@@ -0,0 +1,592 @@
+# @orillusion/core
+
+## Enumerations
+
+- [MorphTargetTransformKey](enums/MorphTargetTransformKey.md)
+- [GUISpace](enums/GUISpace.md)
+- [ImageType](enums/ImageType.md)
+- [BillboardType](enums/BillboardType.md)
+- [UIInteractiveStyle](enums/UIInteractiveStyle.md)
+- [TextAnchor](enums/TextAnchor.md)
+- [Vertical](enums/Vertical.md)
+- [Horizontal](enums/Horizontal.md)
+- [UIButtonTransition](enums/UIButtonTransition.md)
+- [ColliderShapeType](enums/ColliderShapeType.md)
+- [CameraType](enums/CameraType.md)
+- [GeometryVertexType](enums/GeometryVertexType.md)
+- [GPUBufferType](enums/GPUBufferType.md)
+- [UniformType](enums/UniformType.md)
+- [ParserFormat](enums/ParserFormat.md)
+- [GeoType](enums/GeoType.md)
+- [ValueEnumType](enums/ValueEnumType.md)
+- [WrapTimeMode](enums/WrapTimeMode.md)
+
+## Classes
+
+- [SkeletonAnimation\_shader](classes/SkeletonAnimation_shader.md)
+- [CubeSky\_Shader](classes/CubeSky_Shader.md)
+- [PropertyAnimationClipState](classes/PropertyAnimationClipState.md)
+- [PropertyAnimTag](classes/PropertyAnimTag.md)
+- [MorphTargetData](classes/MorphTargetData.md)
+- [MorphTargetFrame](classes/MorphTargetFrame.md)
+- [MorphTarget\_shader](classes/MorphTarget_shader.md)
+- [JointPose](classes/JointPose.md)
+- [GUIConfig](classes/GUIConfig.md)
+- [TextFieldLine](classes/TextFieldLine.md)
+- [TextFieldLayout](classes/TextFieldLayout.md)
+- [IESProfiles](classes/IESProfiles.md)
+- [InstanceDrawComponent](classes/InstanceDrawComponent.md)
+- [View3D](classes/View3D.md)
+- [CSM](classes/CSM.md)
+- [FrustumCSM](classes/FrustumCSM.md)
+- [GeometryIndicesBuffer](classes/GeometryIndicesBuffer.md)
+- [GeometryVertexBuffer](classes/GeometryVertexBuffer.md)
+- [VertexBufferLayout](classes/VertexBufferLayout.md)
+- [VertexAttribute](classes/VertexAttribute.md)
+- [PoolNode](classes/PoolNode.md)
+- [MatrixDO](classes/MatrixDO.md)
+- [Octree](classes/Octree.md)
+- [OctreeEntity](classes/OctreeEntity.md)
+- [QuadAABB](classes/QuadAABB.md)
+- [QuadRoot](classes/QuadRoot.md)
+- [QuadTree](classes/QuadTree.md)
+- [QuadTreeCell](classes/QuadTreeCell.md)
+- [TextureScaleCompute](classes/TextureScaleCompute.md)
+- [PipelinePool](classes/PipelinePool.md)
+- [RenderShaderCompute](classes/RenderShaderCompute.md)
+- [GlobalBindGroupLayout](classes/GlobalBindGroupLayout.md)
+- [RTDescriptor](classes/RTDescriptor.md)
+- [RenderShaderPass](classes/RenderShaderPass.md)
+- [Shader](classes/Shader.md)
+- [ShaderPassBase](classes/ShaderPassBase.md)
+- [MorePassShader](classes/MorePassShader.md)
+- [PassShader](classes/PassShader.md)
+- [MorePassParser](classes/MorePassParser.md)
+- [ShaderUtil](classes/ShaderUtil.md)
+- [GPUContext](classes/GPUContext.md)
+- [ComponentCollect](classes/ComponentCollect.md)
+- [RenderShaderCollect](classes/RenderShaderCollect.md)
+- [RTResourceConfig](classes/RTResourceConfig.md)
+- [GBufferFrame](classes/GBufferFrame.md)
+- [GBufferFrameA](classes/GBufferFrameA.md)
+- [ProbeGBufferFrame](classes/ProbeGBufferFrame.md)
+- [RTFrame](classes/RTFrame.md)
+- [RendererMap](classes/RendererMap.md)
+- [RenderContext](classes/RenderContext.md)
+- [ClusterConfig](classes/ClusterConfig.md)
+- [ClusterLightingBuffer](classes/ClusterLightingBuffer.md)
+- [GodRayPost](classes/GodRayPost.md)
+- [OutlinePostSlot](classes/OutlinePostSlot.md)
+- [OutlinePostData](classes/OutlinePostData.md)
+- [AtlasParser](classes/AtlasParser.md)
+- [B3DMParser](classes/B3DMParser.md)
+- [GLTFBinaryExtension](classes/GLTFBinaryExtension.md)
+- [B3DMParseUtil](classes/B3DMParseUtil.md)
+- [FontInfo](classes/FontInfo.md)
+- [FontPage](classes/FontPage.md)
+- [FontChar](classes/FontChar.md)
+- [FontParser](classes/FontParser.md)
+- [I3DMParser](classes/I3DMParser.md)
+- [B3DMLoader](classes/B3DMLoader.md)
+- [B3DMLoaderBase](classes/B3DMLoaderBase.md)
+- [FeatureTable](classes/FeatureTable.md)
+- [BatchTable](classes/BatchTable.md)
+- [GeoJsonParser](classes/GeoJsonParser.md)
+- [GeoJsonUtil](classes/GeoJsonUtil.md)
+- [GLTFMaterial](classes/GLTFMaterial.md)
+- [GLTFSubParserConverter](classes/GLTFSubParserConverter.md)
+- [GLTFSubParserSkeleton](classes/GLTFSubParserSkeleton.md)
+- [GLTFSubParserSkin](classes/GLTFSubParserSkin.md)
+- [GLTFType](classes/GLTFType.md)
+- [KHR\_materials\_emissive\_strength](classes/KHR_materials_emissive_strength.md)
+- [I3DMLoader](classes/I3DMLoader.md)
+- [I3DMLoaderBase](classes/I3DMLoaderBase.md)
+- [PrefabAvatarParser](classes/PrefabAvatarParser.md)
+- [PrefabMaterialParser](classes/PrefabMaterialParser.md)
+- [PrefabMeshParser](classes/PrefabMeshParser.md)
+- [PrefabParser](classes/PrefabParser.md)
+- [PrefabStringUtil](classes/PrefabStringUtil.md)
+- [PrefabTextureParser](classes/PrefabTextureParser.md)
+- [MaterialUtilities](classes/MaterialUtilities.md)
+- [LitHairShader](classes/LitHairShader.md)
+- [LitSSSShader](classes/LitSSSShader.md)
+- [LitShader](classes/LitShader.md)
+- [QuadShader](classes/QuadShader.md)
+- [ReflectionShader](classes/ReflectionShader.md)
+- [SkyShader](classes/SkyShader.md)
+- [StandShader](classes/StandShader.md)
+- [UnLitShader](classes/UnLitShader.md)
+- [UnLitTexArrayShader](classes/UnLitTexArrayShader.md)
+- [BlendShapeData](classes/BlendShapeData.md)
+- [BlendShapeFrameData](classes/BlendShapeFrameData.md)
+- [BlendShapePropertyData](classes/BlendShapePropertyData.md)
+- [KV](classes/KV.md)
+- [PrefabAvatarData](classes/PrefabAvatarData.md)
+- [PrefabBoneData](classes/PrefabBoneData.md)
+- [PrefabMeshData](classes/PrefabMeshData.md)
+- [ComData](classes/ComData.md)
+- [PrefabNode](classes/PrefabNode.md)
+- [PrefabTextureData](classes/PrefabTextureData.md)
+- [ValueParser](classes/ValueParser.md)
+- [TileSet](classes/TileSet.md)
+- [TileSetRoot](classes/TileSetRoot.md)
+- [TileSetChild](classes/TileSetChild.md)
+- [TileSetChildContent](classes/TileSetChildContent.md)
+- [TileSetChildContentMetaData](classes/TileSetChildContentMetaData.md)
+- [TilesRenderer](classes/TilesRenderer.md)
+- [GIProbeMaterial](classes/GIProbeMaterial.md)
+- [LitMaterial](classes/LitMaterial.md)
+- [Material](classes/Material.md)
+- [BiMap](classes/BiMap.md)
+- [ColorGradient](classes/ColorGradient.md)
+- [HaltonSeq](classes/HaltonSeq.md)
+- [OrderMap](classes/OrderMap.md)
+- [Plane3D](classes/Plane3D.md)
+- [PlaneClassification](classes/PlaneClassification.md)
+- [ValueOp](classes/ValueOp.md)
+- [DoubleArray](classes/DoubleArray.md)
+- [Navi3DAstar](classes/Navi3DAstar.md)
+- [Navi3DConst](classes/Navi3DConst.md)
+- [Navi3DEdge](classes/Navi3DEdge.md)
+- [Navi3DFunnel](classes/Navi3DFunnel.md)
+- [Navi3DMaskType](classes/Navi3DMaskType.md)
+- [Navi3DMergeVertex](classes/Navi3DMergeVertex.md)
+- [Navi3DMesh](classes/Navi3DMesh.md)
+- [Navi3DPoint2D](classes/Navi3DPoint2D.md)
+- [Navi3DRouter](classes/Navi3DRouter.md)
+- [TextureCubeFaceData](classes/TextureCubeFaceData.md)
+- [BoundUtil](classes/BoundUtil.md)
+- [Object3DUtil](classes/Object3DUtil.md)
+- [ProfilerUtil](classes/ProfilerUtil.md)
+- [Reference](classes/Reference.md)
+- [StorageUtil](classes/StorageUtil.md)
+- [Struct](classes/Struct.md)
+- [f32](classes/f32.md)
+- [i32](classes/i32.md)
+- [u32](classes/u32.md)
+
+## Interfaces
+
+- [IComponent](interfaces/IComponent.md)
+- [IUIInteractive](interfaces/IUIInteractive.md)
+- [ILight](interfaces/ILight.md)
+- [IObject3DForPropertyAnim](interfaces/IObject3DForPropertyAnim.md)
+- [IQuadNode](interfaces/IQuadNode.md)
+- [ITexture](interfaces/ITexture.md)
+- [GeoJsonGeometryStruct](interfaces/GeoJsonGeometryStruct.md)
+- [GeoJsonPropertiesStruct](interfaces/GeoJsonPropertiesStruct.md)
+- [GeoJsonNodeStruct](interfaces/GeoJsonNodeStruct.md)
+- [GeoJsonStruct](interfaces/GeoJsonStruct.md)
+
+## Type Aliases
+
+- [MorphTargetMapper](types/MorphTargetMapper.md)
+- [MorphTargetStandardKey](types/MorphTargetStandardKey.md)
+- [HitInfo](types/HitInfo.md)
+- [LODDescriptor](types/LODDescriptor.md)
+- [VertexAttributeData](types/VertexAttributeData.md)
+- [ArrayBufferData](types/ArrayBufferData.md)
+- [VertexPart](types/VertexPart.md)
+- [FragmentPart](types/FragmentPart.md)
+- [RenderShaderList](types/RenderShaderList.md)
+- [GlobalIrradianceStatus](types/GlobalIrradianceStatus.md)
+- [CurveValueType](types/CurveValueType.md)
+- [CurveValueT](types/CurveValueT.md)
+- [EngineSetting](types/EngineSetting.md)
+- [MaterialSetting](types/MaterialSetting.md)
+- [ReflectionSetting](types/ReflectionSetting.md)
+- [RenderSetting](types/RenderSetting.md)
+- [Ctor](types/Ctor.md)
+- [Parser](types/Parser.md)
+- [ProfilerLabel2](types/ProfilerLabel2.md)
+- [ProfilerLabel](types/ProfilerLabel.md)
+- [ProfilerDraw](types/ProfilerDraw.md)
+- [SerializeTag](types/SerializeTag.md)
+
+## Variables
+
+- [fonts](variables/fonts.md)
+- [ClusterBoundsSource\_cs](variables/ClusterBoundsSource_cs.md)
+- [ClusterLighting\_cs](variables/ClusterLighting_cs.md)
+- [BLUR\_CsShader](variables/BLUR_CsShader.md)
+- [BRDFLUT](variables/BRDFLUT.md)
+- [threshold](variables/threshold.md)
+- [downSample](variables/downSample.md)
+- [upSample](variables/upSample.md)
+- [post](variables/post.md)
+- [BlurEffectCreatorSample\_cs](variables/BlurEffectCreatorSample_cs.md)
+- [BlurEffectCreatorBlur\_cs](variables/BlurEffectCreatorBlur_cs.md)
+- [DDGIIrradiance\_shader](variables/DDGIIrradiance_shader.md)
+- [DDGILighting\_shader](variables/DDGILighting_shader.md)
+- [DepthOfView\_cs](variables/DepthOfView_cs.md)
+- [ErpImage2CubeMapCreateCube\_cs](variables/ErpImage2CubeMapCreateCube_cs.md)
+- [ErpImage2CubeMapRgbe2rgba\_cs](variables/ErpImage2CubeMapRgbe2rgba_cs.md)
+- [GTAO\_cs](variables/GTAO_cs.md)
+- [GodRay\_cs](variables/GodRay_cs.md)
+- [IBLEnvMapCreator\_cs](variables/IBLEnvMapCreator_cs.md)
+- [MergeRGBA\_cs](variables/MergeRGBA_cs.md)
+- [MultiBouncePass\_cs](variables/MultiBouncePass_cs.md)
+- [OutLineBlendColor\_cs](variables/OutLineBlendColor_cs.md)
+- [OutlineCalcOutline\_cs](variables/OutlineCalcOutline_cs.md)
+- [Outline\_cs](variables/Outline_cs.md)
+- [Picker\_cs](variables/Picker_cs.md)
+- [PreFilteredEnvironment\_cs2](variables/PreFilteredEnvironment_cs2.md)
+- [PreFilteredEnvironment\_cs](variables/PreFilteredEnvironment_cs.md)
+- [PreIntegratedLut](variables/PreIntegratedLut.md)
+- [SSAO\_cs](variables/SSAO_cs.md)
+- [SSGI2\_cs](variables/SSGI2_cs.md)
+- [SSR\_BlendColor\_cs](variables/SSR_BlendColor_cs.md)
+- [SSR\_IS\_cs](variables/SSR_IS_cs.md)
+- [SSR\_RayTrace\_cs](variables/SSR_RayTrace_cs.md)
+- [TAACopyTex\_cs](variables/TAACopyTex_cs.md)
+- [TAASharpTex\_cs](variables/TAASharpTex_cs.md)
+- [TAA\_cs](variables/TAA_cs.md)
+- [Combine\_cs](variables/Combine_cs.md)
+- [Denoising\_cs](variables/Denoising_cs.md)
+- [TestComputeLoadBuffer](variables/TestComputeLoadBuffer.md)
+- [tw](variables/tw.md)
+- [Common\_frag](variables/Common_frag.md)
+- [Common\_vert](variables/Common_vert.md)
+- [BrdfLut\_frag](variables/BrdfLut_frag.md)
+- [EnvMap\_frag](variables/EnvMap_frag.md)
+- [GBufferStand](variables/GBufferStand.md)
+- [GlobalUniform](variables/GlobalUniform.md)
+- [InstanceUniform](variables/InstanceUniform.md)
+- [SHCommon\_frag](variables/SHCommon_frag.md)
+- [WorldMatrixUniform](variables/WorldMatrixUniform.md)
+- [Inline\_vert](variables/Inline_vert.md)
+- [shadowCastMap\_vert](variables/shadowCastMap_vert.md)
+- [castPointShadowMap\_vert](variables/castPointShadowMap_vert.md)
+- [shadowCastMap\_frag](variables/shadowCastMap_frag.md)
+- [directionShadowCastMap\_frag](variables/directionShadowCastMap_frag.md)
+- [FrustumCulling\_cs](variables/FrustumCulling_cs.md)
+- [GBuffer\_pass](variables/GBuffer_pass.md)
+- [SkyGBuffer\_pass](variables/SkyGBuffer_pass.md)
+- [ZPassShader\_cs](variables/ZPassShader_cs.md)
+- [ZPassShader\_fs](variables/ZPassShader_fs.md)
+- [ZPassShader\_vs](variables/ZPassShader_vs.md)
+- [ClusterLight](variables/ClusterLight.md)
+- [ColorPassFragmentOutput](variables/ColorPassFragmentOutput.md)
+- [FragmentOutput](variables/FragmentOutput.md)
+- [FragmentVarying](variables/FragmentVarying.md)
+- [ShadingInput](variables/ShadingInput.md)
+- [VertexAttributeIndexShader](variables/VertexAttributeIndexShader.md)
+- [VertexAttributes\_vert](variables/VertexAttributes_vert.md)
+- [ReflectionCG](variables/ReflectionCG.md)
+- [QuadGlsl\_vs](variables/QuadGlsl_vs.md)
+- [BRDF\_frag](variables/BRDF_frag.md)
+- [BsDF\_frag](variables/BsDF_frag.md)
+- [BxDF\_frag](variables/BxDF_frag.md)
+- [Hair\_frag](variables/Hair_frag.md)
+- [IESProfiles\_frag](variables/IESProfiles_frag.md)
+- [IrradianceVolumeData\_frag](variables/IrradianceVolumeData_frag.md)
+- [Irradiance\_frag](variables/Irradiance_frag.md)
+- [LightingFunction\_frag](variables/LightingFunction_frag.md)
+- [UnLit\_frag](variables/UnLit_frag.md)
+- [ColorLitShader](variables/ColorLitShader.md)
+- [GIProbeShader](variables/GIProbeShader.md)
+- [GlassShader](variables/GlassShader.md)
+- [Hair\_shader\_op](variables/Hair_shader_op.md)
+- [Hair\_shader\_tr](variables/Hair_shader_tr.md)
+- [Lambert\_shader](variables/Lambert_shader.md)
+- [Lit\_shader](variables/Lit_shader.md)
+- [OutlinePass](variables/OutlinePass.md)
+- [PBRLItShader](variables/PBRLItShader.md)
+- [PBRLitSSSShader](variables/PBRLitSSSShader.md)
+- [PavementShader](variables/PavementShader.md)
+- [PointShadowDebug](variables/PointShadowDebug.md)
+- [ReflectionShader\_shader](variables/ReflectionShader_shader.md)
+- [UnLit](variables/UnLit.md)
+- [UnLitTextureArray](variables/UnLitTextureArray.md)
+- [BxdfDebug\_frag](variables/BxdfDebug_frag.md)
+- [Clearcoat\_frag](variables/Clearcoat_frag.md)
+- [ClusterDebug\_frag](variables/ClusterDebug_frag.md)
+- [NormalMap\_frag](variables/NormalMap_frag.md)
+- [ShadowMapping\_frag](variables/ShadowMapping_frag.md)
+- [MaterialUniform](variables/MaterialUniform.md)
+- [PhysicMaterialUniform\_frag](variables/PhysicMaterialUniform_frag.md)
+- [UnLitMaterialUniform\_frag](variables/UnLitMaterialUniform_frag.md)
+- [VideoUniform\_frag](variables/VideoUniform_frag.md)
+- [FastMathShader](variables/FastMathShader.md)
+- [FXAAShader](variables/FXAAShader.md)
+- [GlobalFog\_shader](variables/GlobalFog_shader.md)
+- [FullQuad\_vert\_wgsl](variables/FullQuad_vert_wgsl.md)
+- [Quad\_vert\_wgsl](variables/Quad_vert_wgsl.md)
+- [Quad\_frag\_wgsl](variables/Quad_frag_wgsl.md)
+- [Quad\_depth2d\_frag\_wgsl](variables/Quad_depth2d_frag_wgsl.md)
+- [Quad\_depthCube\_frag\_wgsl](variables/Quad_depthCube_frag_wgsl.md)
+- [Quad\_depth2dArray\_frag\_wgsl](variables/Quad_depth2dArray_frag_wgsl.md)
+- [BitUtil](variables/BitUtil.md)
+- [ColorUtil](variables/ColorUtil.md)
+- [GenerayRandomDir](variables/GenerayRandomDir.md)
+- [IrradianceDataReaderCompleteEvent](variables/IrradianceDataReaderCompleteEvent.md)
+- [irradianceDataReader](variables/irradianceDataReader.md)
+- [GIRenderStartEvent](variables/GIRenderStartEvent.md)
+- [GIRenderCompleteEvent](variables/GIRenderCompleteEvent.md)
+- [outlinePostData](variables/outlinePostData-1.md)
+- [RADIANS\_TO\_DEGREES](variables/RADIANS_TO_DEGREES.md)
+- [DEGREES\_TO\_RADIANS](variables/DEGREES_TO_RADIANS.md)
+- [zSorterUtil](variables/zSorterUtil-1.md)
+
+## Functions
+
+- [textureCompress](functions/textureCompress.md)
+- [makeAloneSprite](functions/makeAloneSprite.md)
+- [makeGUISprite](functions/makeGUISprite.md)
+- [arrayToString](functions/arrayToString.md)
+- [readMagicBytes](functions/readMagicBytes.md)
+- [registerMaterial](functions/registerMaterial.md)
+- [setTimeDelay](functions/setTimeDelay.md)
+- [setFrameDelay](functions/setFrameDelay.md)
+- [GetCountInstanceID](functions/GetCountInstanceID.md)
+- [ArrayHas](functions/ArrayHas.md)
+- [ArrayItemIndex](functions/ArrayItemIndex.md)
+- [mergeFunctions](functions/mergeFunctions.md)
+- [NonSerialize](functions/NonSerialize.md)
+- [IsNonSerialize](functions/IsNonSerialize.md)
+- [EditorInspector](functions/EditorInspector.md)
+- [IsEditorInspector](functions/IsEditorInspector.md)
+- [RegisterComponent](functions/RegisterComponent.md)
+- [GetComponentClass](functions/GetComponentClass.md)
+- [RegisterShader](functions/RegisterShader.md)
+- [GetShader](functions/GetShader.md)
+
+## Animation
+
+- [SkeletonAnimationComponent](classes/SkeletonAnimationComponent.md)
+- [OAnimationEvent](classes/OAnimationEvent.md)
+- [WrapMode](enums/WrapMode.md)
+- [PropertyAnimation](classes/PropertyAnimation.md)
+- [SkeletonPose](classes/SkeletonPose.md)
+
+## Assets
+
+- [Res](classes/Res.md)
+- [LoaderFunctions](types/LoaderFunctions.md)
+
+## CameraController
+
+- [FlyCameraController](classes/FlyCameraController.md)
+- [HoverCameraController](classes/HoverCameraController.md)
+- [OrbitController](classes/OrbitController.md)
+
+## Collider
+
+- [BoxColliderShape](classes/BoxColliderShape.md)
+- [CapsuleColliderShape](classes/CapsuleColliderShape.md)
+- [ColliderShape](classes/ColliderShape.md)
+- [MeshColliderShape](classes/MeshColliderShape.md)
+- [SphereColliderShape](classes/SphereColliderShape.md)
+
+## Components
+
+- [AtmosphericComponent](classes/AtmosphericComponent.md)
+- [BillboardComponent](classes/BillboardComponent.md)
+- [ColliderComponent](classes/ColliderComponent.md)
+- [ComponentBase](classes/ComponentBase.md)
+- [Transform](classes/Transform.md)
+- [AnimatorComponent](classes/AnimatorComponent.md)
+- [MorphTargetBlender](classes/MorphTargetBlender.md)
+- [PostProcessingComponent](classes/PostProcessingComponent.md)
+- [GlobalIlluminationComponent](classes/GlobalIlluminationComponent.md)
+- [MeshFilter](classes/MeshFilter.md)
+- [MeshRenderer](classes/MeshRenderer.md)
+- [Reflection](classes/Reflection.md)
+- [SkinnedMeshRenderer](classes/SkinnedMeshRenderer.md)
+- [SkinnedMeshRenderer2](classes/SkinnedMeshRenderer2.md)
+- [SkyRenderer](classes/SkyRenderer.md)
+- [SphereReflection](classes/SphereReflection.md)
+- [Camera3D](classes/Camera3D.md)
+- [APatch](classes/APatch.md)
+- [RotationControlComponents](classes/RotationControlComponents.md)
+- [ScaleControlComponents](classes/ScaleControlComponents.md)
+- [TransformControllerBaseComponent](classes/TransformControllerBaseComponent.md)
+- [TranslationControlComponents](classes/TranslationControlComponents.md)
+
+## Controller
+
+- [Object3DTransformTools](classes/Object3DTransformTools.md)
+
+## Entity
+
+- [Scene3D](classes/Scene3D.md)
+- [Entity](classes/Entity.md)
+- [InstancedMesh](classes/InstancedMesh.md)
+- [Object3D](classes/Object3D.md)
+
+## Events
+
+- [CEvent](classes/CEvent.md)
+- [CEventDispatcher](classes/CEventDispatcher.md)
+- [KeyCode](enums/KeyCode.md)
+- [MouseCode](enums/MouseCode.md)
+- [KeyEvent](classes/KeyEvent.md)
+- [PointerEvent3D](classes/PointerEvent3D.md)
+- [DDGIIrradianceGPUBufferReader](classes/DDGIIrradianceGPUBufferReader.md)
+
+## GFX
+
+- [ComputeGPUBuffer](classes/ComputeGPUBuffer.md)
+- [IndicesGPUBuffer](classes/IndicesGPUBuffer.md)
+- [MaterialDataUniformGPUBuffer](classes/MaterialDataUniformGPUBuffer.md)
+- [MatrixGPUBuffer](classes/MatrixGPUBuffer.md)
+- [StorageGPUBuffer](classes/StorageGPUBuffer.md)
+- [StructStorageGPUBuffer](classes/StructStorageGPUBuffer.md)
+- [UniformGPUBuffer](classes/UniformGPUBuffer.md)
+- [VertexGPUBuffer](classes/VertexGPUBuffer.md)
+- [RendererMask](enums/RendererMask.md)
+
+## GPU GUI
+
+- [GUIPick](classes/GUIPick.md)
+- [GUIAtlasTexture](classes/GUIAtlasTexture.md)
+- [GUICanvas](classes/GUICanvas.md)
+- [GUIGeometry](classes/GUIGeometry.md)
+- [GUIGeometryRebuild](classes/GUIGeometryRebuild.md)
+- [GUIMaterial](classes/GUIMaterial.md)
+- [GUIQuad](classes/GUIQuad.md)
+- [GUIRenderer](classes/GUIRenderer.md)
+- [GUIShader](classes/GUIShader.md)
+- [GUISprite](classes/GUISprite.md)
+- [UIButton](classes/UIButton.md)
+- [UIComponentBase](classes/UIComponentBase.md)
+- [UIImage](classes/UIImage.md)
+- [UIImageGroup](classes/UIImageGroup.md)
+- [UIInteractive](classes/UIInteractive.md)
+- [UIPanel](classes/UIPanel.md)
+- [UIRenderAble](classes/UIRenderAble.md)
+- [UIShadow](classes/UIShadow.md)
+- [UITextField](classes/UITextField.md)
+- [UITransform](classes/UITransform.md)
+- [ViewPanel](classes/ViewPanel.md)
+- [WorldPanel](classes/WorldPanel.md)
+
+## Geometry
+
+- [ExtrudeGeometry](classes/ExtrudeGeometry.md)
+- [SubGeometry](classes/SubGeometry.md)
+- [GeometryBase](classes/GeometryBase.md)
+- [BoxGeometry](classes/BoxGeometry.md)
+- [CylinderGeometry](classes/CylinderGeometry.md)
+- [PlaneGeometry](classes/PlaneGeometry.md)
+- [SphereGeometry](classes/SphereGeometry.md)
+- [StripeGeometry](classes/StripeGeometry.md)
+- [TorusGeometry](classes/TorusGeometry.md)
+- [TrailGeometry](classes/TrailGeometry.md)
+- [TriGeometry](classes/TriGeometry.md)
+
+## IO
+
+- [InputSystem](classes/InputSystem.md)
+- [OutlinePostManager](classes/OutlinePostManager.md)
+- [PickFire](classes/PickFire.md)
+
+## Lights
+
+- [DirectLight](classes/DirectLight.md)
+- [Light](classes/Light.md)
+- [LightType](enums/LightType.md)
+- [PointLight](classes/PointLight.md)
+- [SpotLight](classes/SpotLight.md)
+
+## Material
+
+- [BlendMode](enums/BlendMode.md)
+- [ColorLitMaterial](classes/ColorLitMaterial.md)
+- [GlassMaterial](classes/GlassMaterial.md)
+- [LambertMaterial](classes/LambertMaterial.md)
+- [ReflectionMaterial](classes/ReflectionMaterial.md)
+- [UnLitMaterial](classes/UnLitMaterial.md)
+- [UnLitTexArrayMaterial](classes/UnLitTexArrayMaterial.md)
+
+## Math
+
+- [AnimationCurve](classes/AnimationCurve.md)
+- [PropertyAnimationClip](classes/PropertyAnimationClip.md)
+- [AnimationCurveT](classes/AnimationCurveT.md)
+- [Bezier2D](classes/Bezier2D.md)
+- [Bezier3D](classes/Bezier3D.md)
+- [Color](classes/Color.md)
+- [CubicBezierCurve](classes/CubicBezierCurve.md)
+- [CubicBezierType](enums/CubicBezierType.md)
+- [CubicBezierPath](classes/CubicBezierPath.md)
+- [MathUtil](classes/MathUtil.md)
+- [Matrix3](classes/Matrix3.md)
+- [Matrix4](classes/Matrix4.md)
+- [Plane](classes/Plane.md)
+- [Quaternion](classes/Quaternion.md)
+- [Rand](classes/Rand.md)
+- [Ray](classes/Ray.md)
+- [Rect](classes/Rect.md)
+- [Vector2](classes/Vector2.md)
+- [Vector3](classes/Vector3.md)
+- [Keyframe](classes/Keyframe.md)
+- [KeyframeT](classes/KeyframeT.md)
+- [Navi3DPoint](classes/Navi3DPoint.md)
+- [Navi3DPointFat](classes/Navi3DPointFat.md)
+- [Navi3DTriangle](classes/Navi3DTriangle.md)
+
+## Plugin
+
+- [InterpolatorEnum](enums/InterpolatorEnum.md)
+- [Interpolator](classes/Interpolator.md)
+
+## Post Effects
+
+- [BloomPost](classes/BloomPost.md)
+- [DepthOfFieldPost](classes/DepthOfFieldPost.md)
+- [FXAAPost](classes/FXAAPost.md)
+- [GBufferPost](classes/GBufferPost.md)
+- [GTAOPost](classes/GTAOPost.md)
+- [GlobalFog](classes/GlobalFog.md)
+- [OutlinePost](classes/OutlinePost.md)
+- [SSGIPost](classes/SSGIPost.md)
+- [SSRPost](classes/SSRPost.md)
+- [TAAPost](classes/TAAPost.md)
+
+## Setting
+
+- [GlobalIlluminationSetting](types/GlobalIlluminationSetting.md)
+- [LightSetting](types/LightSetting.md)
+- [LoaderSetting](types/LoaderSetting.md)
+- [PickSetting](types/PickSetting.md)
+- [ShadowSetting](types/ShadowSetting.md)
+- [SkySetting](types/SkySetting.md)
+- [BloomSetting](types/BloomSetting.md)
+- [DepthOfViewSetting](types/DepthOfViewSetting.md)
+- [GTAOSetting](types/GTAOSetting.md)
+- [GlobalFogSetting](types/GlobalFogSetting.md)
+- [GodRaySetting](types/GodRaySetting.md)
+- [OutlineSetting](types/OutlineSetting.md)
+- [SSGISetting](types/SSGISetting.md)
+- [SSRSetting](types/SSRSetting.md)
+- [TAASetting](types/TAASetting.md)
+
+## Texture
+
+- [Texture](classes/Texture.md)
+- [AtmosphericScatteringSkySetting](classes/AtmosphericScatteringSkySetting.md)
+- [AtmosphericScatteringSky](classes/AtmosphericScatteringSky.md)
+- [BitmapTexture2D](classes/BitmapTexture2D.md)
+- [BitmapTextureCube](classes/BitmapTextureCube.md)
+- [HDRTexture](classes/HDRTexture.md)
+- [HDRTextureCube](classes/HDRTextureCube.md)
+- [LDRTextureCube](classes/LDRTextureCube.md)
+- [SolidColorSky](classes/SolidColorSky.md)
+- [Uint8ArrayTexture](classes/Uint8ArrayTexture.md)
+
+## Util
+
+- [CameraUtil](classes/CameraUtil.md)
+- [UUID](functions/UUID.md)
+- [KelvinUtil](classes/KelvinUtil.md)
+- [StringUtil](classes/StringUtil.md)
+- [Time](classes/Time.md)
+- [Vector3Ex](classes/Vector3Ex.md)
+- [ZSorterUtil](classes/ZSorterUtil.md)
+
+## engine3D
+
+- [Engine3D](classes/Engine3D.md)
+- [CanvasConfig](types/CanvasConfig.md)
+- [ForwardRenderJob](classes/ForwardRenderJob.md)
diff --git a/docs/api/interfaces/GeoJsonGeometryStruct.md b/docs/api/interfaces/GeoJsonGeometryStruct.md
new file mode 100644
index 00000000..d06d4e84
--- /dev/null
+++ b/docs/api/interfaces/GeoJsonGeometryStruct.md
@@ -0,0 +1,26 @@
+# Interface: GeoJsonGeometryStruct
+
+### Properties
+
+- [type](GeoJsonGeometryStruct.md#type)
+- [coordinates](GeoJsonGeometryStruct.md#coordinates)
+
+## Properties
+
+### type
+
+• **type**: [`GeoType`](../enums/GeoType.md)
+
+#### Defined in
+
+[src/loader/parser/gis/GeoJsonParser.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gis/GeoJsonParser.ts#L11)
+
+___
+
+### coordinates
+
+• **coordinates**: `any`
+
+#### Defined in
+
+[src/loader/parser/gis/GeoJsonParser.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gis/GeoJsonParser.ts#L12)
diff --git a/docs/api/interfaces/GeoJsonNodeStruct.md b/docs/api/interfaces/GeoJsonNodeStruct.md
new file mode 100644
index 00000000..02b7b021
--- /dev/null
+++ b/docs/api/interfaces/GeoJsonNodeStruct.md
@@ -0,0 +1,37 @@
+# Interface: GeoJsonNodeStruct
+
+### Properties
+
+- [type](GeoJsonNodeStruct.md#type)
+- [geometry](GeoJsonNodeStruct.md#geometry)
+- [properties](GeoJsonNodeStruct.md#properties)
+
+## Properties
+
+### type
+
+• **type**: `string`
+
+#### Defined in
+
+[src/loader/parser/gis/GeoJsonParser.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gis/GeoJsonParser.ts#L22)
+
+___
+
+### geometry
+
+• **geometry**: [`GeoJsonGeometryStruct`](GeoJsonGeometryStruct.md)
+
+#### Defined in
+
+[src/loader/parser/gis/GeoJsonParser.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gis/GeoJsonParser.ts#L23)
+
+___
+
+### properties
+
+• **properties**: [`GeoJsonPropertiesStruct`](GeoJsonPropertiesStruct.md)
+
+#### Defined in
+
+[src/loader/parser/gis/GeoJsonParser.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gis/GeoJsonParser.ts#L24)
diff --git a/docs/api/interfaces/GeoJsonPropertiesStruct.md b/docs/api/interfaces/GeoJsonPropertiesStruct.md
new file mode 100644
index 00000000..4f5a4691
--- /dev/null
+++ b/docs/api/interfaces/GeoJsonPropertiesStruct.md
@@ -0,0 +1,26 @@
+# Interface: GeoJsonPropertiesStruct
+
+### Properties
+
+- [prop0](GeoJsonPropertiesStruct.md#prop0)
+- [prop1](GeoJsonPropertiesStruct.md#prop1)
+
+## Properties
+
+### prop0
+
+• **prop0**: `string`
+
+#### Defined in
+
+[src/loader/parser/gis/GeoJsonParser.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gis/GeoJsonParser.ts#L16)
+
+___
+
+### prop1
+
+• **prop1**: `any`
+
+#### Defined in
+
+[src/loader/parser/gis/GeoJsonParser.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gis/GeoJsonParser.ts#L17)
diff --git a/docs/api/interfaces/GeoJsonStruct.md b/docs/api/interfaces/GeoJsonStruct.md
new file mode 100644
index 00000000..e05a7e86
--- /dev/null
+++ b/docs/api/interfaces/GeoJsonStruct.md
@@ -0,0 +1,26 @@
+# Interface: GeoJsonStruct
+
+### Properties
+
+- [type](GeoJsonStruct.md#type)
+- [features](GeoJsonStruct.md#features)
+
+## Properties
+
+### type
+
+• **type**: `string`
+
+#### Defined in
+
+[src/loader/parser/gis/GeoJsonParser.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gis/GeoJsonParser.ts#L28)
+
+___
+
+### features
+
+• **features**: [`GeoJsonNodeStruct`](GeoJsonNodeStruct.md)[]
+
+#### Defined in
+
+[src/loader/parser/gis/GeoJsonParser.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/gis/GeoJsonParser.ts#L29)
diff --git a/docs/api/interfaces/IComponent.md b/docs/api/interfaces/IComponent.md
new file mode 100644
index 00000000..4357fa5e
--- /dev/null
+++ b/docs/api/interfaces/IComponent.md
@@ -0,0 +1,392 @@
+# Interface: IComponent
+
+## Implemented by
+
+- [`ComponentBase`](../classes/ComponentBase.md)
+
+### Properties
+
+- [object3D](IComponent.md#object3d)
+- [eventDispatcher](IComponent.md#eventdispatcher)
+- [transform](IComponent.md#transform)
+- [enable](IComponent.md#enable)
+- [isDestroyed](IComponent.md#isdestroyed)
+
+### Methods
+
+- [init](IComponent.md#init)
+- [start](IComponent.md#start)
+- [stop](IComponent.md#stop)
+- [onEnable](IComponent.md#onenable)
+- [onDisable](IComponent.md#ondisable)
+- [onUpdate](IComponent.md#onupdate)
+- [onLateUpdate](IComponent.md#onlateupdate)
+- [onBeforeUpdate](IComponent.md#onbeforeupdate)
+- [onCompute](IComponent.md#oncompute)
+- [onGraphic](IComponent.md#ongraphic)
+- [cloneTo](IComponent.md#cloneto)
+- [destroy](IComponent.md#destroy)
+- [beforeDestroy](IComponent.md#beforedestroy)
+- [onParentChange](IComponent.md#onparentchange)
+- [onAddChild](IComponent.md#onaddchild)
+- [onRemoveChild](IComponent.md#onremovechild)
+
+## Properties
+
+### object3D
+
+• **object3D**: [`Object3D`](../classes/Object3D.md)
+
+#### Defined in
+
+[src/components/IComponent.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L7)
+
+___
+
+### eventDispatcher
+
+• **eventDispatcher**: [`CEventDispatcher`](../classes/CEventDispatcher.md)
+
+#### Defined in
+
+[src/components/IComponent.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L8)
+
+___
+
+### transform
+
+• **transform**: [`Transform`](../classes/Transform.md)
+
+#### Defined in
+
+[src/components/IComponent.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L9)
+
+___
+
+### enable
+
+• **enable**: `boolean`
+
+#### Defined in
+
+[src/components/IComponent.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L10)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Defined in
+
+[src/components/IComponent.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L11)
+
+## Methods
+
+### init
+
+▸ **init**(`param?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/components/IComponent.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L12)
+
+___
+
+### start
+
+▸ **start**(): `any`
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/components/IComponent.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L13)
+
+___
+
+### stop
+
+▸ **stop**(): `any`
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/components/IComponent.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L14)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](../classes/View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/components/IComponent.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L15)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](../classes/View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/components/IComponent.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L16)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](../classes/View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/components/IComponent.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L17)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](../classes/View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/components/IComponent.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L18)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](../classes/View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/components/IComponent.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L19)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](../classes/View3D.md) |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/components/IComponent.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L20)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | [`View3D`](../classes/View3D.md) |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/components/IComponent.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L21)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | [`Object3D`](../classes/Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/components/IComponent.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L22)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/components/IComponent.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L23)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/components/IComponent.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L24)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | [`Object3D`](../classes/Object3D.md) |
+| `currentParent?` | [`Object3D`](../classes/Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/components/IComponent.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L25)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](../classes/Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/components/IComponent.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L27)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | [`Object3D`](../classes/Object3D.md) |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/components/IComponent.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/IComponent.ts#L28)
diff --git a/docs/api/interfaces/ILight.md b/docs/api/interfaces/ILight.md
new file mode 100644
index 00000000..3cbfeec8
--- /dev/null
+++ b/docs/api/interfaces/ILight.md
@@ -0,0 +1,81 @@
+# Interface: ILight
+
+### Properties
+
+- [name](ILight.md#name)
+- [transform](ILight.md#transform)
+- [lightData](ILight.md#lightdata)
+- [needUpdateShadow](ILight.md#needupdateshadow)
+- [realTimeShadow](ILight.md#realtimeshadow)
+- [shadowIndex](ILight.md#shadowindex)
+- [shadowCamera](ILight.md#shadowcamera)
+
+## Properties
+
+### name
+
+• **name**: `string`
+
+#### Defined in
+
+[src/components/lights/ILight.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/ILight.ts#L6)
+
+___
+
+### transform
+
+• **transform**: [`Transform`](../classes/Transform.md)
+
+#### Defined in
+
+[src/components/lights/ILight.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/ILight.ts#L7)
+
+___
+
+### lightData
+
+• **lightData**: `LightData`
+
+#### Defined in
+
+[src/components/lights/ILight.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/ILight.ts#L8)
+
+___
+
+### needUpdateShadow
+
+• **needUpdateShadow**: `boolean`
+
+#### Defined in
+
+[src/components/lights/ILight.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/ILight.ts#L9)
+
+___
+
+### realTimeShadow
+
+• **realTimeShadow**: `boolean`
+
+#### Defined in
+
+[src/components/lights/ILight.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/ILight.ts#L10)
+
+___
+
+### shadowIndex
+
+• **shadowIndex**: `number`
+
+#### Defined in
+
+[src/components/lights/ILight.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/ILight.ts#L12)
+
+___
+
+### shadowCamera
+
+• `Optional` **shadowCamera**: [`Camera3D`](../classes/Camera3D.md)
+
+#### Defined in
+
+[src/components/lights/ILight.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/components/lights/ILight.ts#L14)
diff --git a/docs/api/interfaces/IObject3DForPropertyAnim.md b/docs/api/interfaces/IObject3DForPropertyAnim.md
new file mode 100644
index 00000000..32acfafc
--- /dev/null
+++ b/docs/api/interfaces/IObject3DForPropertyAnim.md
@@ -0,0 +1,51 @@
+# Interface: IObject3DForPropertyAnim
+
+### Properties
+
+- [materialColor](IObject3DForPropertyAnim.md#materialcolor)
+- [active](IObject3DForPropertyAnim.md#active)
+
+### Methods
+
+- [notifyMaterialColorChange](IObject3DForPropertyAnim.md#notifymaterialcolorchange)
+
+## Properties
+
+### materialColor
+
+• **materialColor**: [`Color`](../classes/Color.md)
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:528](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L528)
+
+___
+
+### active
+
+• **active**: `number`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:530](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L530)
+
+## Methods
+
+### notifyMaterialColorChange
+
+▸ **notifyMaterialColorChange**(`materialIndex`, `key`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `materialIndex` | `number` |
+| `key` | `string` |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:529](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L529)
diff --git a/docs/api/interfaces/IQuadNode.md b/docs/api/interfaces/IQuadNode.md
new file mode 100644
index 00000000..b408b5bb
--- /dev/null
+++ b/docs/api/interfaces/IQuadNode.md
@@ -0,0 +1,74 @@
+# Interface: IQuadNode
+
+## Implemented by
+
+- [`Navi3DTriangle`](../classes/Navi3DTriangle.md)
+
+### Properties
+
+- [isTriangle](IQuadNode.md#istriangle)
+- [aabb](IQuadNode.md#aabb)
+- [plane](IQuadNode.md#plane)
+
+### Methods
+
+- [initAABB](IQuadNode.md#initaabb)
+- [calcGlobalQuadAABB](IQuadNode.md#calcglobalquadaabb)
+
+## Properties
+
+### isTriangle
+
+• **isTriangle**: `boolean`
+
+#### Defined in
+
+[src/core/tree/quad/IQuadNode.ts:8](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/IQuadNode.ts#L8)
+
+___
+
+### aabb
+
+• **aabb**: [`QuadAABB`](../classes/QuadAABB.md)
+
+#### Defined in
+
+[src/core/tree/quad/IQuadNode.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/IQuadNode.ts#L10)
+
+___
+
+### plane
+
+• `Optional` **plane**: [`Plane3D`](../classes/Plane3D.md)
+
+#### Defined in
+
+[src/core/tree/quad/IQuadNode.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/IQuadNode.ts#L14)
+
+## Methods
+
+### initAABB
+
+▸ **initAABB**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/tree/quad/IQuadNode.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/IQuadNode.ts#L6)
+
+___
+
+### calcGlobalQuadAABB
+
+▸ **calcGlobalQuadAABB**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/core/tree/quad/IQuadNode.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/core/tree/quad/IQuadNode.ts#L12)
diff --git a/docs/api/interfaces/ITexture.md b/docs/api/interfaces/ITexture.md
new file mode 100644
index 00000000..f507f313
--- /dev/null
+++ b/docs/api/interfaces/ITexture.md
@@ -0,0 +1,72 @@
+# Interface: ITexture
+
+### Methods
+
+- [internalCreateBindingLayoutDesc](ITexture.md#internalcreatebindinglayoutdesc)
+- [internalCreateTexture](ITexture.md#internalcreatetexture)
+- [internalCreateView](ITexture.md#internalcreateview)
+- [internalCreateSampler](ITexture.md#internalcreatesampler)
+
+## Methods
+
+### internalCreateBindingLayoutDesc
+
+▸ **internalCreateBindingLayoutDesc**(): `any`
+
+create binding layout description
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/ITexture.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/ITexture.ts#L5)
+
+___
+
+### internalCreateTexture
+
+▸ **internalCreateTexture**(): `any`
+
+create texture instance
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/ITexture.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/ITexture.ts#L10)
+
+___
+
+### internalCreateView
+
+▸ **internalCreateView**(): `any`
+
+create GPU View
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/ITexture.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/ITexture.ts#L15)
+
+___
+
+### internalCreateSampler
+
+▸ **internalCreateSampler**(): `any`
+
+create CPU Sample
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/ITexture.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/ITexture.ts#L20)
diff --git a/docs/api/interfaces/IUIInteractive.md b/docs/api/interfaces/IUIInteractive.md
new file mode 100644
index 00000000..6f824087
--- /dev/null
+++ b/docs/api/interfaces/IUIInteractive.md
@@ -0,0 +1,133 @@
+# Interface: IUIInteractive
+
+## Implemented by
+
+- [`UIInteractive`](../classes/UIInteractive.md)
+
+### Properties
+
+- [interactive](IUIInteractive.md#interactive)
+- [enable](IUIInteractive.md#enable)
+- [visible](IUIInteractive.md#visible)
+- [object3D](IUIInteractive.md#object3d)
+
+### Accessors
+
+- [interactiveVisible](IUIInteractive.md#interactivevisible)
+- [mouseStyle](IUIInteractive.md#mousestyle)
+
+### Methods
+
+- [rayPick](IUIInteractive.md#raypick)
+- [destroy](IUIInteractive.md#destroy)
+
+## Properties
+
+### interactive
+
+• **interactive**: `boolean`
+
+#### Defined in
+
+[src/components/gui/uiComponents/IUIInteractive.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/IUIInteractive.ts#L13)
+
+___
+
+### enable
+
+• **enable**: `boolean`
+
+#### Defined in
+
+[src/components/gui/uiComponents/IUIInteractive.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/IUIInteractive.ts#L14)
+
+___
+
+### visible
+
+• **visible**: `boolean`
+
+#### Defined in
+
+[src/components/gui/uiComponents/IUIInteractive.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/IUIInteractive.ts#L15)
+
+___
+
+### object3D
+
+• `Optional` **object3D**: [`Object3D`](../classes/Object3D.md)
+
+#### Defined in
+
+[src/components/gui/uiComponents/IUIInteractive.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/IUIInteractive.ts#L16)
+
+## Accessors
+
+### interactiveVisible
+
+• `get` **interactiveVisible**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/components/gui/uiComponents/IUIInteractive.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/IUIInteractive.ts#L18)
+
+___
+
+### mouseStyle
+
+• `set` **mouseStyle**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`UIInteractiveStyle`](../enums/UIInteractiveStyle.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/IUIInteractive.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/IUIInteractive.ts#L24)
+
+## Methods
+
+### rayPick
+
+▸ **rayPick**(`ray`, `panel`, `screenPos`, `screenSize`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ray` | [`Ray`](../classes/Ray.md) |
+| `panel` | `any` |
+| `screenPos` | [`Vector2`](../classes/Vector2.md) |
+| `screenSize` | [`Vector2`](../classes/Vector2.md) |
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[src/components/gui/uiComponents/IUIInteractive.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/IUIInteractive.ts#L20)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/components/gui/uiComponents/IUIInteractive.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/components/gui/uiComponents/IUIInteractive.ts#L22)
diff --git a/docs/api/types/ArrayBufferData.md b/docs/api/types/ArrayBufferData.md
new file mode 100644
index 00000000..9bc17d1f
--- /dev/null
+++ b/docs/api/types/ArrayBufferData.md
@@ -0,0 +1,7 @@
+# Type alias: ArrayBufferData
+
+Ƭ **ArrayBufferData**: `Uint8Array` \| `Uint16Array` \| `Uint32Array` \| `Int8Array` \| `Int16Array` \| `Int32Array` \| `Float32Array` \| `Float64Array`
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/ArrayBufferData.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/ArrayBufferData.ts#L1)
diff --git a/docs/api/types/BloomSetting.md b/docs/api/types/BloomSetting.md
new file mode 100644
index 00000000..9c212eaa
--- /dev/null
+++ b/docs/api/types/BloomSetting.md
@@ -0,0 +1,23 @@
+# Type alias: BloomSetting
+
+Ƭ **BloomSetting**: `Object`
+
+Bloom
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `enable?` | `boolean` |
+| `downSampleStep` | `number` |
+| `downSampleBlurSize` | `number` |
+| `downSampleBlurSigma` | `number` |
+| `upSampleBlurSize` | `number` |
+| `upSampleBlurSigma` | `number` |
+| `luminanceThreshole` | `number` |
+| `bloomIntensity` | `number` |
+| `hdr` | `number` |
+
+#### Defined in
+
+[src/setting/post/BloomSetting.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/setting/post/BloomSetting.ts#L6)
diff --git a/docs/api/types/CanvasConfig.md b/docs/api/types/CanvasConfig.md
new file mode 100644
index 00000000..a8a55459
--- /dev/null
+++ b/docs/api/types/CanvasConfig.md
@@ -0,0 +1,19 @@
+# Type alias: CanvasConfig
+
+Ƭ **CanvasConfig**: `Object`
+
+config data for canvas
+
+#### Type declaration
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `canvas?` | `HTMLCanvasElement` | reference of canvas |
+| `alpha?` | `boolean` | wheter use transparent background To set a transparent background, the SkyRenderer[SkyRenderer](../classes/SkyRenderer.md) component should be disabled skyRender.enable = false |
+| `zIndex?` | `number` | canvas styler zIndex |
+| `devicePixelRatio?` | `number` | canvas pixel ratio use window.devicePixelRatio is not provided |
+| `backgroundImage?` | `string` | canvas background image a canvas background when skybox is hide/disabled and CanvasConfig.alpha is true |
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/CanvasConfig.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/CanvasConfig.ts#L6)
diff --git a/docs/api/types/Ctor.md b/docs/api/types/Ctor.md
new file mode 100644
index 00000000..8c5470d5
--- /dev/null
+++ b/docs/api/types/Ctor.md
@@ -0,0 +1,38 @@
+# Type alias: Ctor\
+
+Ƭ **Ctor**\<`T`\>: `Object`
+
+Constructor
+
+#### Type parameters
+
+| Name |
+| :------ |
+| `T` |
+
+#### Call signature
+
+• **new Ctor**(`any?`, `any2?`, `any3?`, `any4?`): `T`
+
+##### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `any?` | `any` |
+| `any2?` | `any` |
+| `any3?` | `any` |
+| `any4?` | `any` |
+
+##### Returns
+
+`T`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `prototype` | `any` |
+
+#### Defined in
+
+[src/util/Global.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/util/Global.ts#L81)
diff --git a/docs/api/types/CurveValueT.md b/docs/api/types/CurveValueT.md
new file mode 100644
index 00000000..a3235960
--- /dev/null
+++ b/docs/api/types/CurveValueT.md
@@ -0,0 +1,7 @@
+# Type alias: CurveValueT
+
+Ƭ **CurveValueT**: `number` \| [`Vector2`](../classes/Vector2.md) \| [`Vector3`](../classes/Vector3.md) \| `Vector4` \| [`Quaternion`](../classes/Quaternion.md)
+
+#### Defined in
+
+[src/math/AnimationCurveT.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/math/AnimationCurveT.ts#L7)
diff --git a/docs/api/types/CurveValueType.md b/docs/api/types/CurveValueType.md
new file mode 100644
index 00000000..8cd4fc1f
--- /dev/null
+++ b/docs/api/types/CurveValueType.md
@@ -0,0 +1,7 @@
+# Type alias: CurveValueType
+
+Ƭ **CurveValueType**: `string` \| `number` \| [`Vector2`](../classes/Vector2.md) \| [`Vector3`](../classes/Vector3.md) \| `Vector4` \| [`Quaternion`](../classes/Quaternion.md) \| [`Color`](../classes/Color.md) \| `boolean` \| [`Texture`](../classes/Texture.md) \| [`Material`](../classes/Material.md) \| `string`[] \| `number`[] \| `Float32Array` \| [`GeometryBase`](../classes/GeometryBase.md) \| `Skeleton` \| [`PropertyAnimationClip`](../classes/PropertyAnimationClip.md)[]
+
+#### Defined in
+
+[src/loader/parser/prefab/prefabData/ValueParser.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/prefab/prefabData/ValueParser.ts#L13)
diff --git a/docs/api/types/DepthOfViewSetting.md b/docs/api/types/DepthOfViewSetting.md
new file mode 100644
index 00000000..aeee03d1
--- /dev/null
+++ b/docs/api/types/DepthOfViewSetting.md
@@ -0,0 +1,19 @@
+# Type alias: DepthOfViewSetting
+
+Ƭ **DepthOfViewSetting**: `Object`
+
+dpeth of view effect
+
+#### Type declaration
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `enable` | `boolean` | - |
+| `iterationCount` | `number` | Blur Effect Iterations |
+| `pixelOffset` | `number` | the distance of Blur effect pixel diffusion |
+| `near` | `number` | the pixel below this distance to camera will not be blurred |
+| `far` | `number` | the pixel above this distance will experience maximum blurring, [near,far]: the pixel between near and far will be blurred with linear interpolation coefficients between [0,1] |
+
+#### Defined in
+
+[src/setting/post/DepthOfViewSetting.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/setting/post/DepthOfViewSetting.ts#L7)
diff --git a/docs/api/types/EngineSetting.md b/docs/api/types/EngineSetting.md
new file mode 100644
index 00000000..375519ab
--- /dev/null
+++ b/docs/api/types/EngineSetting.md
@@ -0,0 +1,20 @@
+# Type alias: EngineSetting
+
+Ƭ **EngineSetting**: `Object`
+
+#### Type declaration
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pick` | [`PickSetting`](PickSetting.md) | pick mode setting |
+| `render` | [`RenderSetting`](RenderSetting.md) | render setting |
+| `sky` | [`SkySetting`](SkySetting.md) | sky setting |
+| `shadow` | [`ShadowSetting`](ShadowSetting.md) | shadow setting |
+| `gi` | [`GlobalIlluminationSetting`](GlobalIlluminationSetting.md) | global illumination setting |
+| `light` | [`LightSetting`](LightSetting.md) | light setting |
+| `loader` | [`LoaderSetting`](LoaderSetting.md) | loader setting |
+| `reflectionSetting` | [`ReflectionSetting`](ReflectionSetting.md) | reflectionSetting setting |
+
+#### Defined in
+
+[src/setting/EngineSetting.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/setting/EngineSetting.ts#L12)
diff --git a/docs/api/types/FragmentPart.md b/docs/api/types/FragmentPart.md
new file mode 100644
index 00000000..66c43f93
--- /dev/null
+++ b/docs/api/types/FragmentPart.md
@@ -0,0 +1,19 @@
+# Type alias: FragmentPart
+
+Ƭ **FragmentPart**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `fs_textures` | `string` |
+| `fs_frament` | `string` |
+| `fs_normal` | `string` |
+| `fs_shadow` | `string` |
+| `fs_buffer` | `string` |
+| `fs_frameBuffers` | `string` |
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/util/ShaderUtil.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/util/ShaderUtil.ts#L12)
diff --git a/docs/api/types/GTAOSetting.md b/docs/api/types/GTAOSetting.md
new file mode 100644
index 00000000..4631d57f
--- /dev/null
+++ b/docs/api/types/GTAOSetting.md
@@ -0,0 +1,23 @@
+# Type alias: GTAOSetting
+
+Ƭ **GTAOSetting**: `Object`
+
+Setting of GTAO
+
+#### Type declaration
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `enable` | `boolean` | - |
+| `maxDistance` | `number` | Set the maximum distance to search around 3D space during ao sampling |
+| `maxPixel` | `number` | Set the maximum distance when searching for surrounding pixels during ao sampling |
+| `darkFactor` | `number` | Set the coefficient of ao value to participate in outputting to the screen, 1: output all, 0: not output |
+| `rayMarchSegment` | `number` | Set the number of steps for AO sampling. A larger value will result in better quality AO effects while consuming more performance |
+| `multiBounce` | `boolean` | Simulate color rebound or not |
+| `usePosFloat32` | `boolean` | true: Calculate the position value of GBuffer using f32 to obtain more accurate values (water and other effects may not be supported) false: We will use the position value of GBuffer in f16 for operations, with a wider coverage |
+| `blendColor` | `boolean` | True: will be mixed with the mainColor of GBuffer; False: will only output the colors of ao |
+| `debug` | `boolean` | |
+
+#### Defined in
+
+[src/setting/post/GTAOSetting.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/setting/post/GTAOSetting.ts#L6)
diff --git a/docs/api/types/GlobalFogSetting.md b/docs/api/types/GlobalFogSetting.md
new file mode 100644
index 00000000..46e0de39
--- /dev/null
+++ b/docs/api/types/GlobalFogSetting.md
@@ -0,0 +1,30 @@
+# Type alias: GlobalFogSetting
+
+Ƭ **GlobalFogSetting**: `Object`
+
+Global fog effect setting
+
+#### Type declaration
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `debug` | `any` | - |
+| `enable` | `boolean` | enable |
+| `fogType` | `number` | type of fog: 0: linear exponent 2: squar exponent |
+| `fogHeightScale` | `number` | Setting the Influence of Height on Fog |
+| `start` | `number` | If the distance between the object and the camera is set as distance, the fog concentration will be linear interpolation between start and end |
+| `end` | `number` | If the distance between the object and the camera is set as distance, the fog concentration will be linear interpolation between start and end |
+| `density` | `number` | When the type is exponential square fog, the fog concentration coefficient is added |
+| `ins` | `number` | The effect of setting height on fog (working together with height) |
+| `skyFactor` | `number` | mix fog color with sky color |
+| `skyRoughness` | `number` | use mipmap level |
+| `overrideSkyFactor` | `number` | factor effect the sky |
+| `fogColor` | [`Color`](../classes/Color.md) | fog color |
+| `falloff` | `number` | - |
+| `rayLength` | `number` | - |
+| `scatteringExponent` | `number` | - |
+| `dirHeightLine` | `number` | - |
+
+#### Defined in
+
+[src/setting/post/GlobalFogSetting.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/setting/post/GlobalFogSetting.ts#L7)
diff --git a/docs/api/types/GlobalIlluminationSetting.md b/docs/api/types/GlobalIlluminationSetting.md
new file mode 100644
index 00000000..9685db96
--- /dev/null
+++ b/docs/api/types/GlobalIlluminationSetting.md
@@ -0,0 +1,29 @@
+# Type alias: GlobalIlluminationSetting
+
+Ƭ **GlobalIlluminationSetting**: `Object`
+
+GI setting
+
+#### Type declaration
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `debug` | `boolean` | - |
+| `debugCamera?` | `boolean` | |
+| `enable` | `boolean` | enable |
+| `offsetX` | `number` | offset position X of volume of GI |
+| `offsetY` | `number` | offset position Y of volume of GI |
+| `offsetZ` | `number` | offset position Z of volume of GI |
+| `probeXCount` | `number` | Number of probes on the x-axis |
+| `probeYCount` | `number` | Number of probes on the y-axis |
+| `probeZCount` | `number` | Number of probes on the z-axis |
+| `probeSize` | `number` | The size of the data sampled by a probe on the map |
+| `indirectIntensity` | `number` | Illumination intensity of indirect light |
+| `ddgiGamma` | `number` | |
+| `bounceIntensity` | `number` | The intensity of light rebound |
+| `realTimeGI` | `boolean` | Set whether to use real-time update GI |
+| `autoRenderProbe` | `boolean` | Set whether the probe automatically render scene |
+
+#### Defined in
+
+[src/setting/GlobalIlluminationSetting.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/setting/GlobalIlluminationSetting.ts#L5)
diff --git a/docs/api/types/GlobalIrradianceStatus.md b/docs/api/types/GlobalIrradianceStatus.md
new file mode 100644
index 00000000..85d7fb2b
--- /dev/null
+++ b/docs/api/types/GlobalIrradianceStatus.md
@@ -0,0 +1,7 @@
+# Type alias: GlobalIrradianceStatus
+
+Ƭ **GlobalIrradianceStatus**: ``"none"`` \| ``"rendering"`` \| ``"complete"``
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/ddgi/DDGIProbeRenderer.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/ddgi/DDGIProbeRenderer.ts#L23)
diff --git a/docs/api/types/GodRaySetting.md b/docs/api/types/GodRaySetting.md
new file mode 100644
index 00000000..38f892c1
--- /dev/null
+++ b/docs/api/types/GodRaySetting.md
@@ -0,0 +1,19 @@
+# Type alias: GodRaySetting
+
+Ƭ **GodRaySetting**: `Object`
+
+GodRay
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `enable?` | `boolean` |
+| `blendColor` | `boolean` |
+| `rayMarchCount` | `number` |
+| `scatteringExponent` | `number` |
+| `intensity` | `number` |
+
+#### Defined in
+
+[src/setting/post/GodRaySetting.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/setting/post/GodRaySetting.ts#L6)
diff --git a/docs/api/types/HitInfo.md b/docs/api/types/HitInfo.md
new file mode 100644
index 00000000..6d39aa90
--- /dev/null
+++ b/docs/api/types/HitInfo.md
@@ -0,0 +1,15 @@
+# Type alias: HitInfo
+
+Ƭ **HitInfo**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `intersectPoint?` | [`Vector3`](../classes/Vector3.md) |
+| `distance` | `number` |
+| `collider?` | `any` |
+
+#### Defined in
+
+[src/components/shape/ColliderShape.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/components/shape/ColliderShape.ts#L5)
diff --git a/docs/api/types/LODDescriptor.md b/docs/api/types/LODDescriptor.md
new file mode 100644
index 00000000..be56aa50
--- /dev/null
+++ b/docs/api/types/LODDescriptor.md
@@ -0,0 +1,19 @@
+# Type alias: LODDescriptor
+
+Ƭ **LODDescriptor**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `indexStart` | `number` |
+| `indexCount` | `number` |
+| `vertexStart` | `number` |
+| `vertexCount` | `number` |
+| `firstStart` | `number` |
+| `index` | `number` |
+| `topology` | `number` |
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L14)
diff --git a/docs/api/types/LightSetting.md b/docs/api/types/LightSetting.md
new file mode 100644
index 00000000..00989775
--- /dev/null
+++ b/docs/api/types/LightSetting.md
@@ -0,0 +1,15 @@
+# Type alias: LightSetting
+
+Ƭ **LightSetting**: `Object`
+
+Light Setting
+
+#### Type declaration
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `maxLight` | `number` | Maximum number of lights |
+
+#### Defined in
+
+[src/setting/LightSetting.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/setting/LightSetting.ts#L6)
diff --git a/docs/api/types/LoaderFunctions.md b/docs/api/types/LoaderFunctions.md
new file mode 100644
index 00000000..a0e8f15e
--- /dev/null
+++ b/docs/api/types/LoaderFunctions.md
@@ -0,0 +1,19 @@
+# Type alias: LoaderFunctions
+
+Ƭ **LoaderFunctions**: `Object`
+
+Loader callback functions
+
+#### Type declaration
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `onProgress?` | `Function` | The callback function in the load **`Param`** Number of bytes loaded **`Param`** Total number of bytes of resources **`Param`** resources URL |
+| `onComplete?` | `Function` | Load the completed callback function **`Param`** resources URL |
+| `onError?` | `Function` | The callback function for which a load error occurred **`Param`** Error object |
+| `onUrl?` | `Function` | The URL modification callback allows you to modify the original url and return a custom path **`Param`** Original resource URL |
+| `headers?` | {} | Customize headers, you can modify/add fetch header information |
+
+#### Defined in
+
+[src/loader/LoaderFunctions.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/loader/LoaderFunctions.ts#L5)
diff --git a/docs/api/types/LoaderSetting.md b/docs/api/types/LoaderSetting.md
new file mode 100644
index 00000000..f628927a
--- /dev/null
+++ b/docs/api/types/LoaderSetting.md
@@ -0,0 +1,15 @@
+# Type alias: LoaderSetting
+
+Ƭ **LoaderSetting**: `Object`
+
+Loader Setting
+
+#### Type declaration
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `numConcurrent` | `number` | Number of concurrent loading |
+
+#### Defined in
+
+[src/setting/LoaderSetting.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/setting/LoaderSetting.ts#L6)
diff --git a/docs/api/types/MaterialSetting.md b/docs/api/types/MaterialSetting.md
new file mode 100644
index 00000000..b4550fc5
--- /dev/null
+++ b/docs/api/types/MaterialSetting.md
@@ -0,0 +1,15 @@
+# Type alias: MaterialSetting
+
+Ƭ **MaterialSetting**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `materialChannelDebug?` | `boolean` |
+| `materialDebug?` | `boolean` |
+| `normalYFlip?` | `boolean` |
+
+#### Defined in
+
+[src/setting/MaterialSetting.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/setting/MaterialSetting.ts#L1)
diff --git a/docs/api/types/MorphTargetMapper.md b/docs/api/types/MorphTargetMapper.md
new file mode 100644
index 00000000..3c3605dd
--- /dev/null
+++ b/docs/api/types/MorphTargetMapper.md
@@ -0,0 +1,11 @@
+# Type alias: MorphTargetMapper
+
+Ƭ **MorphTargetMapper**: `Object`
+
+#### Index signature
+
+▪ [key: `string`]: [`MorphTargetStandardKey`](MorphTargetStandardKey.md)
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L1)
diff --git a/docs/api/types/MorphTargetStandardKey.md b/docs/api/types/MorphTargetStandardKey.md
new file mode 100644
index 00000000..b1f5a149
--- /dev/null
+++ b/docs/api/types/MorphTargetStandardKey.md
@@ -0,0 +1,7 @@
+# Type alias: MorphTargetStandardKey
+
+Ƭ **MorphTargetStandardKey**: ``"mouthRollLower"`` \| ``"browOuterUp_L"`` \| ``"mouthSmile_L"`` \| ``"jawRight"`` \| ``"eyeLookOut_L"`` \| ``"mouthFunnel"`` \| ``"mouthUpperUp_R"`` \| ``"browDown_L"`` \| ``"jawLeft"`` \| ``"mouthLowerDown_L"`` \| ``"noseSneer_R"`` \| ``"jawForward"`` \| ``"mouthLowerDown_R"`` \| ``"browInnerUp"`` \| ``"mouthRollUpper"`` \| ``"mouthStretch_R"`` \| ``"mouthPucker"`` \| ``"eyeBlink_L"`` \| ``"mouthUpperUp_L"`` \| ``"mouthShrugUpper"`` \| ``"eyeLookIn_R"`` \| ``"noseSneer_L"`` \| ``"mouthFrown_L"`` \| ``"cheekSquint_L"`` \| ``"eyeLookDown_L"`` \| ``"mouthDimple_L"`` \| ``"mouthFrown_R"`` \| ``"eyeLookIn_L"`` \| ``"eyeLookOut_R"`` \| ``"mouthLeft"`` \| ``"mouthStretch_L"`` \| ``"mouthPress_L"`` \| ``"mouthDimple_R"`` \| ``"eyeWide_R"`` \| ``"browDown_R"`` \| ``"eyeLookUp_R"`` \| ``"eyeBlink_R"`` \| ``"cheekSquint_R"`` \| ``"mouthRight"`` \| ``"eyeLookDown_R"`` \| ``"eyeLookUp_L"`` \| ``"eyeSquint_L"`` \| ``"jawOpen"`` \| ``"browOuterUp_R"`` \| ``"mouthClose"`` \| ``"mouthShrugLower"`` \| ``"eyeWide_L"`` \| ``"tongueOut"`` \| ``"eyeSquint_R"`` \| ``"cheekPuff"`` \| ``"mouthPress_R"`` \| ``"mouthSmile_R"``
+
+#### Defined in
+
+[src/components/anim/morphAnim/MorphTargetKey.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/components/anim/morphAnim/MorphTargetKey.ts#L2)
diff --git a/docs/api/types/OutlineSetting.md b/docs/api/types/OutlineSetting.md
new file mode 100644
index 00000000..6aac0369
--- /dev/null
+++ b/docs/api/types/OutlineSetting.md
@@ -0,0 +1,22 @@
+# Type alias: OutlineSetting
+
+Ƭ **OutlineSetting**: `Object`
+
+Outline Setting
+
+#### Type declaration
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `enable` | `boolean` | - |
+| `groupCount` | `number` | Group settings can be set up to 8 groups: through functions opened by OutlineManager, Pass in different Object 3D lists and color parameters to obtain grouped stroke effects. |
+| `outlinePixel` | `number` | Pixel width of stroke hard edges |
+| `fadeOutlinePixel` | `number` | Stroke Fade Pixel Width |
+| `strength` | `number` | Stroke strength |
+| `useAddMode` | `boolean` | Blend mode: true Use overlay mode, false Use default alpha blend |
+| `textureScale` | `number` | Set the scaling value of the offline map used for calculation relative to the GBuffer map |
+| `debug` | `boolean` | - |
+
+#### Defined in
+
+[src/setting/post/OutlineSetting.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/setting/post/OutlineSetting.ts#L5)
diff --git a/docs/api/types/Parser.md b/docs/api/types/Parser.md
new file mode 100644
index 00000000..b0fc28dc
--- /dev/null
+++ b/docs/api/types/Parser.md
@@ -0,0 +1,34 @@
+# Type alias: Parser\
+
+Ƭ **Parser**\<`T`\>: `Object`
+
+#### Type parameters
+
+| Name |
+| :------ |
+| `T` |
+
+#### Call signature
+
+• **new Parser**(`any?`): `T`
+
+##### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `any?` | `any` |
+
+##### Returns
+
+`T`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `prototype` | `any` |
+| `format` | [`ParserFormat`](../enums/ParserFormat.md) |
+
+#### Defined in
+
+[src/util/Global.ts:82](https://github.com/Orillusion/orillusion/blob/main/src/util/Global.ts#L82)
diff --git a/docs/api/types/PickSetting.md b/docs/api/types/PickSetting.md
new file mode 100644
index 00000000..03cbec7c
--- /dev/null
+++ b/docs/api/types/PickSetting.md
@@ -0,0 +1,16 @@
+# Type alias: PickSetting
+
+Ƭ **PickSetting**: `Object`
+
+Pick setting
+
+#### Type declaration
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `enable` | `boolean` | enable |
+| `mode` | ``"pixel"`` \| ``"bound"`` | pick mode: use pixel mode, or bound mode |
+
+#### Defined in
+
+[src/setting/PickSetting.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/setting/PickSetting.ts#L7)
diff --git a/docs/api/types/ProfilerDraw.md b/docs/api/types/ProfilerDraw.md
new file mode 100644
index 00000000..83b4634a
--- /dev/null
+++ b/docs/api/types/ProfilerDraw.md
@@ -0,0 +1,11 @@
+# Type alias: ProfilerDraw
+
+Ƭ **ProfilerDraw**: `Object`
+
+#### Index signature
+
+▪ [key: `string`]: \{ `vertexCount`: `number` ; `indicesCount`: `number` ; `triCount`: `number` ; `instanceCount`: `number` ; `drawCount`: `number` ; `pipelineCount`: `number` }
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L22)
diff --git a/docs/api/types/ProfilerLabel.md b/docs/api/types/ProfilerLabel.md
new file mode 100644
index 00000000..29d70814
--- /dev/null
+++ b/docs/api/types/ProfilerLabel.md
@@ -0,0 +1,18 @@
+# Type alias: ProfilerLabel
+
+Ƭ **ProfilerLabel**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `lable` | `string` |
+| `start` | `number` |
+| `end` | `number` |
+| `total` | `number` |
+| `count` | `number` |
+| `child` | `Map`\<`string`, [`ProfilerLabel2`](ProfilerLabel2.md)\> |
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L13)
diff --git a/docs/api/types/ProfilerLabel2.md b/docs/api/types/ProfilerLabel2.md
new file mode 100644
index 00000000..08b8a8a6
--- /dev/null
+++ b/docs/api/types/ProfilerLabel2.md
@@ -0,0 +1,17 @@
+# Type alias: ProfilerLabel2
+
+Ƭ **ProfilerLabel2**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `lable` | `string` |
+| `start` | `number` |
+| `end` | `number` |
+| `total` | `number` |
+| `count` | `number` |
+
+#### Defined in
+
+[src/util/ProfilerUtil.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/util/ProfilerUtil.ts#L4)
diff --git a/docs/api/types/ReflectionSetting.md b/docs/api/types/ReflectionSetting.md
new file mode 100644
index 00000000..f341a10f
--- /dev/null
+++ b/docs/api/types/ReflectionSetting.md
@@ -0,0 +1,17 @@
+# Type alias: ReflectionSetting
+
+Ƭ **ReflectionSetting**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `reflectionProbeSize` | `number` |
+| `reflectionProbeMaxCount` | `number` |
+| `width` | `number` |
+| `height` | `number` |
+| `enable` | `boolean` |
+
+#### Defined in
+
+[src/setting/ReflectionSetting.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/setting/ReflectionSetting.ts#L1)
diff --git a/docs/api/types/RenderSetting.md b/docs/api/types/RenderSetting.md
new file mode 100644
index 00000000..cef03d53
--- /dev/null
+++ b/docs/api/types/RenderSetting.md
@@ -0,0 +1,50 @@
+# Type alias: RenderSetting
+
+Ƭ **RenderSetting**: `Object`
+
+#### Type declaration
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `debug` | `boolean` | - |
+| `renderPassState` | `number` | - |
+| `renderState_left` | `number` | - |
+| `renderState_right` | `number` | - |
+| `renderState_split` | `number` | - |
+| `quadScale` | `number` | - |
+| `hdrExposure` | `number` | - |
+| `debugQuad` | `number` | - |
+| `maxPointLight` | `number` | - |
+| `maxDirectLight` | `number` | - |
+| `maxSportLight` | `number` | - |
+| `drawOpMin` | `number` | - |
+| `drawOpMax` | `number` | - |
+| `drawTrMin` | `number` | - |
+| `drawTrMax` | `number` | - |
+| `zPrePass` | `boolean` | - |
+| `useLogDepth` | `boolean` | - |
+| `useCompressGBuffer` | `boolean` | - |
+| `gi` | `boolean` | - |
+| `postProcessing` | \{ `enable?`: `boolean` ; `bloom?`: [`BloomSetting`](BloomSetting.md) ; `ssao?`: \{ `debug`: `any` ; `enable`: `boolean` ; `radius`: `number` ; `bias`: `number` ; `aoPower`: `number` } ; `ssr?`: [`SSRSetting`](SSRSetting.md) ; `taa?`: [`TAASetting`](TAASetting.md) ; `gtao?`: [`GTAOSetting`](GTAOSetting.md) ; `ssgi?`: [`GTAOSetting`](GTAOSetting.md) ; `outline?`: [`OutlineSetting`](OutlineSetting.md) ; `globalFog?`: [`GlobalFogSetting`](GlobalFogSetting.md) ; `godRay?`: [`GodRaySetting`](GodRaySetting.md) ; `fxaa?`: \{ `enable`: `boolean` } ; `depthOfView?`: [`DepthOfViewSetting`](DepthOfViewSetting.md) } | post effect |
+| `postProcessing.enable?` | `boolean` | - |
+| `postProcessing.bloom?` | [`BloomSetting`](BloomSetting.md) | - |
+| `postProcessing.ssao?` | \{ `debug`: `any` ; `enable`: `boolean` ; `radius`: `number` ; `bias`: `number` ; `aoPower`: `number` } | - |
+| `postProcessing.ssao.debug` | `any` | - |
+| `postProcessing.ssao.enable` | `boolean` | - |
+| `postProcessing.ssao.radius` | `number` | - |
+| `postProcessing.ssao.bias` | `number` | - |
+| `postProcessing.ssao.aoPower` | `number` | - |
+| `postProcessing.ssr?` | [`SSRSetting`](SSRSetting.md) | - |
+| `postProcessing.taa?` | [`TAASetting`](TAASetting.md) | - |
+| `postProcessing.gtao?` | [`GTAOSetting`](GTAOSetting.md) | - |
+| `postProcessing.ssgi?` | [`GTAOSetting`](GTAOSetting.md) | - |
+| `postProcessing.outline?` | [`OutlineSetting`](OutlineSetting.md) | - |
+| `postProcessing.globalFog?` | [`GlobalFogSetting`](GlobalFogSetting.md) | - |
+| `postProcessing.godRay?` | [`GodRaySetting`](GodRaySetting.md) | - |
+| `postProcessing.fxaa?` | \{ `enable`: `boolean` } | - |
+| `postProcessing.fxaa.enable` | `boolean` | - |
+| `postProcessing.depthOfView?` | [`DepthOfViewSetting`](DepthOfViewSetting.md) | - |
+
+#### Defined in
+
+[src/setting/RenderSetting.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/setting/RenderSetting.ts#L10)
diff --git a/docs/api/types/RenderShaderList.md b/docs/api/types/RenderShaderList.md
new file mode 100644
index 00000000..9a3bc751
--- /dev/null
+++ b/docs/api/types/RenderShaderList.md
@@ -0,0 +1,7 @@
+# Type alias: RenderShaderList
+
+Ƭ **RenderShaderList**: `Map`\<`string`, `Map`\<`string`, `RenderNode`\>\>
+
+#### Defined in
+
+[src/gfx/renderJob/collect/RenderShaderCollect.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/collect/RenderShaderCollect.ts#L5)
diff --git a/docs/api/types/SSGISetting.md b/docs/api/types/SSGISetting.md
new file mode 100644
index 00000000..6b3959f9
--- /dev/null
+++ b/docs/api/types/SSGISetting.md
@@ -0,0 +1,15 @@
+# Type alias: SSGISetting
+
+Ƭ **SSGISetting**: `Object`
+
+Setting of GTAO
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `enable` | `boolean` |
+
+#### Defined in
+
+[src/setting/post/SSGISetting.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/setting/post/SSGISetting.ts#L6)
diff --git a/docs/api/types/SSRSetting.md b/docs/api/types/SSRSetting.md
new file mode 100644
index 00000000..fa38ca5d
--- /dev/null
+++ b/docs/api/types/SSRSetting.md
@@ -0,0 +1,24 @@
+# Type alias: SSRSetting
+
+Ƭ **SSRSetting**: `Object`
+
+Screen Space Reflection Setting
+
+#### Type declaration
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `debug` | `any` | - |
+| `enable` | `boolean` | enable |
+| `pixelRatio` | `number` | pixel ratio, Smaller pixel ratios can achieve better performance, but the visual effect will decrease |
+| `fadeEdgeRatio` | `number` | fade out when pixel is closed to edge |
+| `rayMarchRatio` | `number` | fade alpha from ray trace step count |
+| `fadeDistanceMin` | `number` | fade alpha by distance from camera to hit point (min) |
+| `fadeDistanceMax` | `number` | fade alpha by distance from camera to hit point (max) |
+| `roughnessThreshold` | `number` | threshold of roughness, determine effect refrection |
+| `powDotRN` | `number` | Pow parameter of normal and reflection dot product |
+| `mixThreshold` | `number` | SSR color mixing parameter: If the position difference between the current frame and the previous frame exceeds the mixThreshold at a certain pixel position, the current frame will be quickly retained to have more. |
+
+#### Defined in
+
+[src/setting/post/SSRSetting.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/setting/post/SSRSetting.ts#L6)
diff --git a/docs/api/types/SerializeTag.md b/docs/api/types/SerializeTag.md
new file mode 100644
index 00000000..3c1190e9
--- /dev/null
+++ b/docs/api/types/SerializeTag.md
@@ -0,0 +1,7 @@
+# Type alias: SerializeTag
+
+Ƭ **SerializeTag**: ``null`` \| ``"self"`` \| ``"non"``
+
+#### Defined in
+
+[src/util/SerializeDecoration.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/util/SerializeDecoration.ts#L2)
diff --git a/docs/api/types/ShadowSetting.md b/docs/api/types/ShadowSetting.md
new file mode 100644
index 00000000..8e6faa94
--- /dev/null
+++ b/docs/api/types/ShadowSetting.md
@@ -0,0 +1,29 @@
+# Type alias: ShadowSetting
+
+Ƭ **ShadowSetting**: `Object`
+
+Shadow setting
+
+#### Type declaration
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `debug` | `any` | - |
+| `enable` | `boolean` | enable |
+| `needUpdate` | `boolean` | |
+| `autoUpdate` | `boolean` | update shadown automatic |
+| `updateFrameRate` | `number` | frequency for shadows update |
+| `type` | ``"PCF"`` \| ``"HARD"`` \| ``"SOFT"`` | Percentage-Closer Filtering(PCF)is a simple, often seen technique for removing shadow edges. Soft shadow, is a soft and blurred shadow that is farther away from the object when the light is shot down. Hard shadow, is a sharper shadow, at the exchange (connection) with the object or the place where the light hits and close to the object, or the occluded place where the sunlight cannot reach. |
+| `pointShadowBias` | `number` | Offset of point light shadow |
+| `shadowBound?` | `number` | shadow boundary |
+| `shadowSize` | `number` | shadow mapping Size |
+| `shadowBias` | `number` | shadow depth offset bias |
+| `shadowSoft` | `number` | Shadow softness |
+| `pointShadowSize` | `number` | Point shadow mapping size |
+| `csmMargin` | `number` | Blend Shadow(0-1) |
+| `csmScatteringExp` | `number` | scattering csm Area Exponent for each level |
+| `csmAreaScale` | `number` | scale csm Area of all level |
+
+#### Defined in
+
+[src/setting/ShadowSetting.ts:6](https://github.com/Orillusion/orillusion/blob/main/src/setting/ShadowSetting.ts#L6)
diff --git a/docs/api/types/SkySetting.md b/docs/api/types/SkySetting.md
new file mode 100644
index 00000000..c91c32d1
--- /dev/null
+++ b/docs/api/types/SkySetting.md
@@ -0,0 +1,19 @@
+# Type alias: SkySetting
+
+Ƭ **SkySetting**: `Object`
+
+Sky setting
+
+#### Type declaration
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | ``"HDRSKY"`` \| ``"ShaderSky"`` | sky texture type |
+| `sky` | [`HDRTextureCube`](../classes/HDRTextureCube.md) | HDRTextureCube |
+| `skyExposure` | `number` | exposure |
+| `defaultFar` | `number` | default far |
+| `defaultNear` | `number` | default near |
+
+#### Defined in
+
+[src/setting/SkySetting.ts:7](https://github.com/Orillusion/orillusion/blob/main/src/setting/SkySetting.ts#L7)
diff --git a/docs/api/types/TAASetting.md b/docs/api/types/TAASetting.md
new file mode 100644
index 00000000..110bcf4e
--- /dev/null
+++ b/docs/api/types/TAASetting.md
@@ -0,0 +1,21 @@
+# Type alias: TAASetting
+
+Ƭ **TAASetting**: `Object`
+
+TAA Setting
+
+#### Type declaration
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `enable` | `boolean` | - |
+| `jitterSeedCount` | `number` | The number of random seed for dithering camera is 8 by default. Reducing the number can solve some problems with noticeable jitter, but the jagginess will become more pronounced |
+| `blendFactor` | `number` | Merge the coefficients of the historical frame and the current frame. The smaller the parameter, the smaller the proportion of the current frame |
+| `temporalJitterScale` | `number` | The scaling coefficient of the random offset value of the jitter camera [0,1]: The smaller the coefficient, the weaker the anti aliasing effect, and the weaker the pixel jitter |
+| `sharpFactor` | `number` | Image sharpening coefficient [0.1-0.9]: The smaller the coefficient, the weaker the sharpening effect, the better the anti aliasing effect. Conversely, the stronger the sharpening, the weaker the anti aliasing effect |
+| `sharpPreBlurFactor` | `number` | Image sharpening sampling coefficient scaling coefficient: Scales the sampling offset during sharpening. |
+| `debug` | `boolean` | |
+
+#### Defined in
+
+[src/setting/post/TAASetting.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/setting/post/TAASetting.ts#L5)
diff --git a/docs/api/types/VertexAttributeData.md b/docs/api/types/VertexAttributeData.md
new file mode 100644
index 00000000..76841405
--- /dev/null
+++ b/docs/api/types/VertexAttributeData.md
@@ -0,0 +1,14 @@
+# Type alias: VertexAttributeData
+
+Ƭ **VertexAttributeData**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+| `data` | [`ArrayBufferData`](ArrayBufferData.md) |
+
+#### Defined in
+
+[src/core/geometry/VertexAttributeData.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/VertexAttributeData.ts#L3)
diff --git a/docs/api/types/VertexPart.md b/docs/api/types/VertexPart.md
new file mode 100644
index 00000000..b2bbec32
--- /dev/null
+++ b/docs/api/types/VertexPart.md
@@ -0,0 +1,18 @@
+# Type alias: VertexPart
+
+Ƭ **VertexPart**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `vertex_in_struct` | `string` |
+| `vertex_out_struct` | `string` |
+| `vertex_buffer` | `string` |
+| `vertex_fun` | `string` |
+| `vertex_out` | `string` |
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/shader/util/ShaderUtil.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/shader/util/ShaderUtil.ts#L3)
diff --git a/docs/api/variables/BLUR_CsShader.md b/docs/api/variables/BLUR_CsShader.md
new file mode 100644
index 00000000..18004038
--- /dev/null
+++ b/docs/api/variables/BLUR_CsShader.md
@@ -0,0 +1,7 @@
+# Variable: BLUR\_CsShader
+
+• **BLUR\_CsShader**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/BLUR_CsShader.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/BLUR_CsShader.ts#L1)
diff --git a/docs/api/variables/BRDFLUT.md b/docs/api/variables/BRDFLUT.md
new file mode 100644
index 00000000..018b7053
--- /dev/null
+++ b/docs/api/variables/BRDFLUT.md
@@ -0,0 +1,7 @@
+# Variable: BRDFLUT
+
+• **BRDFLUT**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/BRDFLUT.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/BRDFLUT.ts#L2)
diff --git a/docs/api/variables/BRDF_frag.md b/docs/api/variables/BRDF_frag.md
new file mode 100644
index 00000000..7fb8e3db
--- /dev/null
+++ b/docs/api/variables/BRDF_frag.md
@@ -0,0 +1,7 @@
+# Variable: BRDF\_frag
+
+• **BRDF\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/lighting/BRDF_frag.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/lighting/BRDF_frag.ts#L1)
diff --git a/docs/api/variables/BitUtil.md b/docs/api/variables/BitUtil.md
new file mode 100644
index 00000000..340adda0
--- /dev/null
+++ b/docs/api/variables/BitUtil.md
@@ -0,0 +1,7 @@
+# Variable: BitUtil
+
+• **BitUtil**: `string`
+
+#### Defined in
+
+[src/assets/shader/utils/BitUtil.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/utils/BitUtil.ts#L1)
diff --git a/docs/api/variables/BlurEffectCreatorBlur_cs.md b/docs/api/variables/BlurEffectCreatorBlur_cs.md
new file mode 100644
index 00000000..caf79a76
--- /dev/null
+++ b/docs/api/variables/BlurEffectCreatorBlur_cs.md
@@ -0,0 +1,7 @@
+# Variable: BlurEffectCreatorBlur\_cs
+
+• **BlurEffectCreatorBlur\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/BlurEffectCreator_cs.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/BlurEffectCreator_cs.ts#L23)
diff --git a/docs/api/variables/BlurEffectCreatorSample_cs.md b/docs/api/variables/BlurEffectCreatorSample_cs.md
new file mode 100644
index 00000000..d029dec1
--- /dev/null
+++ b/docs/api/variables/BlurEffectCreatorSample_cs.md
@@ -0,0 +1,7 @@
+# Variable: BlurEffectCreatorSample\_cs
+
+• **BlurEffectCreatorSample\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/BlurEffectCreator_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/BlurEffectCreator_cs.ts#L1)
diff --git a/docs/api/variables/BrdfLut_frag.md b/docs/api/variables/BrdfLut_frag.md
new file mode 100644
index 00000000..6e1d624e
--- /dev/null
+++ b/docs/api/variables/BrdfLut_frag.md
@@ -0,0 +1,7 @@
+# Variable: BrdfLut\_frag
+
+• **BrdfLut\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/common/BrdfLut_frag.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/common/BrdfLut_frag.ts#L1)
diff --git a/docs/api/variables/BsDF_frag.md b/docs/api/variables/BsDF_frag.md
new file mode 100644
index 00000000..1c1b028b
--- /dev/null
+++ b/docs/api/variables/BsDF_frag.md
@@ -0,0 +1,7 @@
+# Variable: BsDF\_frag
+
+• **BsDF\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/lighting/BsDF_frag.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/lighting/BsDF_frag.ts#L1)
diff --git a/docs/api/variables/BxDF_frag.md b/docs/api/variables/BxDF_frag.md
new file mode 100644
index 00000000..d577e585
--- /dev/null
+++ b/docs/api/variables/BxDF_frag.md
@@ -0,0 +1,7 @@
+# Variable: BxDF\_frag
+
+• **BxDF\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/lighting/BxDF_frag.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/lighting/BxDF_frag.ts#L2)
diff --git a/docs/api/variables/BxdfDebug_frag.md b/docs/api/variables/BxdfDebug_frag.md
new file mode 100644
index 00000000..ea300625
--- /dev/null
+++ b/docs/api/variables/BxdfDebug_frag.md
@@ -0,0 +1,7 @@
+# Variable: BxdfDebug\_frag
+
+• **BxdfDebug\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/program/BxdfDebug_frag.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/program/BxdfDebug_frag.ts#L1)
diff --git a/docs/api/variables/Clearcoat_frag.md b/docs/api/variables/Clearcoat_frag.md
new file mode 100644
index 00000000..91a748a3
--- /dev/null
+++ b/docs/api/variables/Clearcoat_frag.md
@@ -0,0 +1,7 @@
+# Variable: Clearcoat\_frag
+
+• **Clearcoat\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/program/Clearcoat_frag.ts:5](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/program/Clearcoat_frag.ts#L5)
diff --git a/docs/api/variables/ClusterBoundsSource_cs.md b/docs/api/variables/ClusterBoundsSource_cs.md
new file mode 100644
index 00000000..3452634c
--- /dev/null
+++ b/docs/api/variables/ClusterBoundsSource_cs.md
@@ -0,0 +1,7 @@
+# Variable: ClusterBoundsSource\_cs
+
+• **ClusterBoundsSource\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/cluster/ClusterBoundsSource_cs.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/cluster/ClusterBoundsSource_cs.ts#L3)
diff --git a/docs/api/variables/ClusterDebug_frag.md b/docs/api/variables/ClusterDebug_frag.md
new file mode 100644
index 00000000..c602f3e2
--- /dev/null
+++ b/docs/api/variables/ClusterDebug_frag.md
@@ -0,0 +1,7 @@
+# Variable: ClusterDebug\_frag
+
+• **ClusterDebug\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/program/ClusterDebug_frag.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/program/ClusterDebug_frag.ts#L2)
diff --git a/docs/api/variables/ClusterLight.md b/docs/api/variables/ClusterLight.md
new file mode 100644
index 00000000..abde0573
--- /dev/null
+++ b/docs/api/variables/ClusterLight.md
@@ -0,0 +1,7 @@
+# Variable: ClusterLight
+
+• **ClusterLight**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/struct/ClusterLight.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/struct/ClusterLight.ts#L1)
diff --git a/docs/api/variables/ClusterLighting_cs.md b/docs/api/variables/ClusterLighting_cs.md
new file mode 100644
index 00000000..dc7651b4
--- /dev/null
+++ b/docs/api/variables/ClusterLighting_cs.md
@@ -0,0 +1,7 @@
+# Variable: ClusterLighting\_cs
+
+• **ClusterLighting\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/cluster/ClusterLighting_cs.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/cluster/ClusterLighting_cs.ts#L3)
diff --git a/docs/api/variables/ColorLitShader.md b/docs/api/variables/ColorLitShader.md
new file mode 100644
index 00000000..b765ffee
--- /dev/null
+++ b/docs/api/variables/ColorLitShader.md
@@ -0,0 +1,7 @@
+# Variable: ColorLitShader
+
+• **ColorLitShader**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/ColorLitShader.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/ColorLitShader.ts#L1)
diff --git a/docs/api/variables/ColorPassFragmentOutput.md b/docs/api/variables/ColorPassFragmentOutput.md
new file mode 100644
index 00000000..3c8d8f17
--- /dev/null
+++ b/docs/api/variables/ColorPassFragmentOutput.md
@@ -0,0 +1,7 @@
+# Variable: ColorPassFragmentOutput
+
+• **ColorPassFragmentOutput**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/struct/ColorPassFragmentOutput.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/struct/ColorPassFragmentOutput.ts#L3)
diff --git a/docs/api/variables/ColorUtil.md b/docs/api/variables/ColorUtil.md
new file mode 100644
index 00000000..fdfbf833
--- /dev/null
+++ b/docs/api/variables/ColorUtil.md
@@ -0,0 +1,7 @@
+# Variable: ColorUtil
+
+• **ColorUtil**: `string`
+
+#### Defined in
+
+[src/assets/shader/utils/ColorUtil.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/utils/ColorUtil.ts#L1)
diff --git a/docs/api/variables/Combine_cs.md b/docs/api/variables/Combine_cs.md
new file mode 100644
index 00000000..04112c49
--- /dev/null
+++ b/docs/api/variables/Combine_cs.md
@@ -0,0 +1,7 @@
+# Variable: Combine\_cs
+
+• **Combine\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/utils/Combine_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/utils/Combine_cs.ts#L1)
diff --git a/docs/api/variables/Common_frag.md b/docs/api/variables/Common_frag.md
new file mode 100644
index 00000000..f23aff91
--- /dev/null
+++ b/docs/api/variables/Common_frag.md
@@ -0,0 +1,7 @@
+# Variable: Common\_frag
+
+• **Common\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/base/Common_frag.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/base/Common_frag.ts#L1)
diff --git a/docs/api/variables/Common_vert.md b/docs/api/variables/Common_vert.md
new file mode 100644
index 00000000..d2116281
--- /dev/null
+++ b/docs/api/variables/Common_vert.md
@@ -0,0 +1,7 @@
+# Variable: Common\_vert
+
+• **Common\_vert**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/base/Common_vert.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/base/Common_vert.ts#L1)
diff --git a/docs/api/variables/DDGIIrradiance_shader.md b/docs/api/variables/DDGIIrradiance_shader.md
new file mode 100644
index 00000000..ef606031
--- /dev/null
+++ b/docs/api/variables/DDGIIrradiance_shader.md
@@ -0,0 +1,7 @@
+# Variable: DDGIIrradiance\_shader
+
+• **DDGIIrradiance\_shader**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/DDGIIrradiance_Cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/DDGIIrradiance_Cs.ts#L1)
diff --git a/docs/api/variables/DDGILighting_shader.md b/docs/api/variables/DDGILighting_shader.md
new file mode 100644
index 00000000..5a71bdf6
--- /dev/null
+++ b/docs/api/variables/DDGILighting_shader.md
@@ -0,0 +1,7 @@
+# Variable: DDGILighting\_shader
+
+• **DDGILighting\_shader**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/DDGILighting_CSShader.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/DDGILighting_CSShader.ts#L3)
diff --git a/docs/api/variables/DEGREES_TO_RADIANS.md b/docs/api/variables/DEGREES_TO_RADIANS.md
new file mode 100644
index 00000000..1c38779c
--- /dev/null
+++ b/docs/api/variables/DEGREES_TO_RADIANS.md
@@ -0,0 +1,9 @@
+# Variable: DEGREES\_TO\_RADIANS
+
+• **DEGREES\_TO\_RADIANS**: `number`
+
+This is a constant value used to convert angles to radians
+
+#### Defined in
+
+[src/math/MathUtil.ts:16](https://github.com/Orillusion/orillusion/blob/main/src/math/MathUtil.ts#L16)
diff --git a/docs/api/variables/Denoising_cs.md b/docs/api/variables/Denoising_cs.md
new file mode 100644
index 00000000..3272ef16
--- /dev/null
+++ b/docs/api/variables/Denoising_cs.md
@@ -0,0 +1,7 @@
+# Variable: Denoising\_cs
+
+• **Denoising\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/utils/Denoising_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/utils/Denoising_cs.ts#L1)
diff --git a/docs/api/variables/DepthOfView_cs.md b/docs/api/variables/DepthOfView_cs.md
new file mode 100644
index 00000000..b90c53cb
--- /dev/null
+++ b/docs/api/variables/DepthOfView_cs.md
@@ -0,0 +1,7 @@
+# Variable: DepthOfView\_cs
+
+• **DepthOfView\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/DepthOfView_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/DepthOfView_cs.ts#L1)
diff --git a/docs/api/variables/EnvMap_frag.md b/docs/api/variables/EnvMap_frag.md
new file mode 100644
index 00000000..5c7a1b02
--- /dev/null
+++ b/docs/api/variables/EnvMap_frag.md
@@ -0,0 +1,7 @@
+# Variable: EnvMap\_frag
+
+• **EnvMap\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/common/EnvMap_frag.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/common/EnvMap_frag.ts#L1)
diff --git a/docs/api/variables/ErpImage2CubeMapCreateCube_cs.md b/docs/api/variables/ErpImage2CubeMapCreateCube_cs.md
new file mode 100644
index 00000000..063207c9
--- /dev/null
+++ b/docs/api/variables/ErpImage2CubeMapCreateCube_cs.md
@@ -0,0 +1,7 @@
+# Variable: ErpImage2CubeMapCreateCube\_cs
+
+• **ErpImage2CubeMapCreateCube\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/ErpImage2CubeMapCreateCube_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/ErpImage2CubeMapCreateCube_cs.ts#L1)
diff --git a/docs/api/variables/ErpImage2CubeMapRgbe2rgba_cs.md b/docs/api/variables/ErpImage2CubeMapRgbe2rgba_cs.md
new file mode 100644
index 00000000..8bcbe19a
--- /dev/null
+++ b/docs/api/variables/ErpImage2CubeMapRgbe2rgba_cs.md
@@ -0,0 +1,7 @@
+# Variable: ErpImage2CubeMapRgbe2rgba\_cs
+
+• **ErpImage2CubeMapRgbe2rgba\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/ErpImage2CubeMapRgbe2rgba_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/ErpImage2CubeMapRgbe2rgba_cs.ts#L1)
diff --git a/docs/api/variables/FXAAShader.md b/docs/api/variables/FXAAShader.md
new file mode 100644
index 00000000..b3f2153c
--- /dev/null
+++ b/docs/api/variables/FXAAShader.md
@@ -0,0 +1,7 @@
+# Variable: FXAAShader
+
+• **FXAAShader**: `string`
+
+#### Defined in
+
+[src/assets/shader/post/FXAAShader.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/post/FXAAShader.ts#L1)
diff --git a/docs/api/variables/FastMathShader.md b/docs/api/variables/FastMathShader.md
new file mode 100644
index 00000000..acffabca
--- /dev/null
+++ b/docs/api/variables/FastMathShader.md
@@ -0,0 +1,7 @@
+# Variable: FastMathShader
+
+• **FastMathShader**: `string`
+
+#### Defined in
+
+[src/assets/shader/math/FastMathShader.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/math/FastMathShader.ts#L1)
diff --git a/docs/api/variables/FragmentOutput.md b/docs/api/variables/FragmentOutput.md
new file mode 100644
index 00000000..4a1d217e
--- /dev/null
+++ b/docs/api/variables/FragmentOutput.md
@@ -0,0 +1,7 @@
+# Variable: FragmentOutput
+
+• **FragmentOutput**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/struct/FragmentOutput.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/struct/FragmentOutput.ts#L3)
diff --git a/docs/api/variables/FragmentVarying.md b/docs/api/variables/FragmentVarying.md
new file mode 100644
index 00000000..31563bfe
--- /dev/null
+++ b/docs/api/variables/FragmentVarying.md
@@ -0,0 +1,7 @@
+# Variable: FragmentVarying
+
+• **FragmentVarying**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/struct/FragmentVarying.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/struct/FragmentVarying.ts#L2)
diff --git a/docs/api/variables/FrustumCulling_cs.md b/docs/api/variables/FrustumCulling_cs.md
new file mode 100644
index 00000000..81a40cea
--- /dev/null
+++ b/docs/api/variables/FrustumCulling_cs.md
@@ -0,0 +1,7 @@
+# Variable: FrustumCulling\_cs
+
+• **FrustumCulling\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/pass/FrustumCulling_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/pass/FrustumCulling_cs.ts#L1)
diff --git a/docs/api/variables/FullQuad_vert_wgsl.md b/docs/api/variables/FullQuad_vert_wgsl.md
new file mode 100644
index 00000000..f14ab95a
--- /dev/null
+++ b/docs/api/variables/FullQuad_vert_wgsl.md
@@ -0,0 +1,7 @@
+# Variable: FullQuad\_vert\_wgsl
+
+• **FullQuad\_vert\_wgsl**: `string`
+
+#### Defined in
+
+[src/assets/shader/quad/Quad_shader.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/quad/Quad_shader.ts#L1)
diff --git a/docs/api/variables/GBufferStand.md b/docs/api/variables/GBufferStand.md
new file mode 100644
index 00000000..11449c9d
--- /dev/null
+++ b/docs/api/variables/GBufferStand.md
@@ -0,0 +1,7 @@
+# Variable: GBufferStand
+
+• **GBufferStand**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/common/GBufferStand.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/common/GBufferStand.ts#L1)
diff --git a/docs/api/variables/GBuffer_pass.md b/docs/api/variables/GBuffer_pass.md
new file mode 100644
index 00000000..a694faea
--- /dev/null
+++ b/docs/api/variables/GBuffer_pass.md
@@ -0,0 +1,7 @@
+# Variable: GBuffer\_pass
+
+• **GBuffer\_pass**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/pass/GBuffer_pass.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/pass/GBuffer_pass.ts#L1)
diff --git a/docs/api/variables/GIProbeShader.md b/docs/api/variables/GIProbeShader.md
new file mode 100644
index 00000000..a96d7bb2
--- /dev/null
+++ b/docs/api/variables/GIProbeShader.md
@@ -0,0 +1,7 @@
+# Variable: GIProbeShader
+
+• **GIProbeShader**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/GIProbeShader.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/GIProbeShader.ts#L1)
diff --git a/docs/api/variables/GIRenderCompleteEvent.md b/docs/api/variables/GIRenderCompleteEvent.md
new file mode 100644
index 00000000..84152a99
--- /dev/null
+++ b/docs/api/variables/GIRenderCompleteEvent.md
@@ -0,0 +1,7 @@
+# Variable: GIRenderCompleteEvent
+
+• **GIRenderCompleteEvent**: [`CEvent`](../classes/CEvent.md)
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/ddgi/DDGIProbeRenderer.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/ddgi/DDGIProbeRenderer.ts#L25)
diff --git a/docs/api/variables/GIRenderStartEvent.md b/docs/api/variables/GIRenderStartEvent.md
new file mode 100644
index 00000000..30c87b17
--- /dev/null
+++ b/docs/api/variables/GIRenderStartEvent.md
@@ -0,0 +1,7 @@
+# Variable: GIRenderStartEvent
+
+• **GIRenderStartEvent**: [`CEvent`](../classes/CEvent.md)
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/ddgi/DDGIProbeRenderer.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/ddgi/DDGIProbeRenderer.ts#L24)
diff --git a/docs/api/variables/GTAO_cs.md b/docs/api/variables/GTAO_cs.md
new file mode 100644
index 00000000..397527fe
--- /dev/null
+++ b/docs/api/variables/GTAO_cs.md
@@ -0,0 +1,7 @@
+# Variable: GTAO\_cs
+
+• **GTAO\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/GTAO_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/GTAO_cs.ts#L1)
diff --git a/docs/api/variables/GenerayRandomDir.md b/docs/api/variables/GenerayRandomDir.md
new file mode 100644
index 00000000..8e712611
--- /dev/null
+++ b/docs/api/variables/GenerayRandomDir.md
@@ -0,0 +1,7 @@
+# Variable: GenerayRandomDir
+
+• **GenerayRandomDir**: `string`
+
+#### Defined in
+
+[src/assets/shader/utils/GenerayRandomDir.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/utils/GenerayRandomDir.ts#L3)
diff --git a/docs/api/variables/GlassShader.md b/docs/api/variables/GlassShader.md
new file mode 100644
index 00000000..df8812bd
--- /dev/null
+++ b/docs/api/variables/GlassShader.md
@@ -0,0 +1,7 @@
+# Variable: GlassShader
+
+• **GlassShader**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/GlassShader.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/GlassShader.ts#L1)
diff --git a/docs/api/variables/GlobalFog_shader.md b/docs/api/variables/GlobalFog_shader.md
new file mode 100644
index 00000000..598248f0
--- /dev/null
+++ b/docs/api/variables/GlobalFog_shader.md
@@ -0,0 +1,7 @@
+# Variable: GlobalFog\_shader
+
+• **GlobalFog\_shader**: `string`
+
+#### Defined in
+
+[src/assets/shader/post/GlobalFog_shader.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/post/GlobalFog_shader.ts#L1)
diff --git a/docs/api/variables/GlobalUniform.md b/docs/api/variables/GlobalUniform.md
new file mode 100644
index 00000000..596e775b
--- /dev/null
+++ b/docs/api/variables/GlobalUniform.md
@@ -0,0 +1,7 @@
+# Variable: GlobalUniform
+
+• **GlobalUniform**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/common/GlobalUniform.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/common/GlobalUniform.ts#L3)
diff --git a/docs/api/variables/GodRay_cs.md b/docs/api/variables/GodRay_cs.md
new file mode 100644
index 00000000..20c17fa7
--- /dev/null
+++ b/docs/api/variables/GodRay_cs.md
@@ -0,0 +1,7 @@
+# Variable: GodRay\_cs
+
+• **GodRay\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/GodRay_cs.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/GodRay_cs.ts#L3)
diff --git a/docs/api/variables/Hair_frag.md b/docs/api/variables/Hair_frag.md
new file mode 100644
index 00000000..3aa5d4c6
--- /dev/null
+++ b/docs/api/variables/Hair_frag.md
@@ -0,0 +1,7 @@
+# Variable: Hair\_frag
+
+• **Hair\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/lighting/Hair_frag.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/lighting/Hair_frag.ts#L1)
diff --git a/docs/api/variables/Hair_shader_op.md b/docs/api/variables/Hair_shader_op.md
new file mode 100644
index 00000000..79aa5ef7
--- /dev/null
+++ b/docs/api/variables/Hair_shader_op.md
@@ -0,0 +1,7 @@
+# Variable: Hair\_shader\_op
+
+• **Hair\_shader\_op**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/Hair_shader.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/Hair_shader.ts#L1)
diff --git a/docs/api/variables/Hair_shader_tr.md b/docs/api/variables/Hair_shader_tr.md
new file mode 100644
index 00000000..d34b77e7
--- /dev/null
+++ b/docs/api/variables/Hair_shader_tr.md
@@ -0,0 +1,7 @@
+# Variable: Hair\_shader\_tr
+
+• **Hair\_shader\_tr**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/Hair_shader.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/Hair_shader.ts#L124)
diff --git a/docs/api/variables/IBLEnvMapCreator_cs.md b/docs/api/variables/IBLEnvMapCreator_cs.md
new file mode 100644
index 00000000..e3d8bb2f
--- /dev/null
+++ b/docs/api/variables/IBLEnvMapCreator_cs.md
@@ -0,0 +1,7 @@
+# Variable: IBLEnvMapCreator\_cs
+
+• **IBLEnvMapCreator\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/IBLEnvMapCreator_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/IBLEnvMapCreator_cs.ts#L1)
diff --git a/docs/api/variables/IESProfiles_frag.md b/docs/api/variables/IESProfiles_frag.md
new file mode 100644
index 00000000..5e6919ff
--- /dev/null
+++ b/docs/api/variables/IESProfiles_frag.md
@@ -0,0 +1,7 @@
+# Variable: IESProfiles\_frag
+
+• **IESProfiles\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/lighting/IESProfiles_frag.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/lighting/IESProfiles_frag.ts#L1)
diff --git a/docs/api/variables/Inline_vert.md b/docs/api/variables/Inline_vert.md
new file mode 100644
index 00000000..32013b62
--- /dev/null
+++ b/docs/api/variables/Inline_vert.md
@@ -0,0 +1,7 @@
+# Variable: Inline\_vert
+
+• **Inline\_vert**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/inline/Inline_vert.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/inline/Inline_vert.ts#L1)
diff --git a/docs/api/variables/InstanceUniform.md b/docs/api/variables/InstanceUniform.md
new file mode 100644
index 00000000..66d6082e
--- /dev/null
+++ b/docs/api/variables/InstanceUniform.md
@@ -0,0 +1,7 @@
+# Variable: InstanceUniform
+
+• **InstanceUniform**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/common/InstanceUniform.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/common/InstanceUniform.ts#L1)
diff --git a/docs/api/variables/IrradianceDataReaderCompleteEvent.md b/docs/api/variables/IrradianceDataReaderCompleteEvent.md
new file mode 100644
index 00000000..71d982a7
--- /dev/null
+++ b/docs/api/variables/IrradianceDataReaderCompleteEvent.md
@@ -0,0 +1,7 @@
+# Variable: IrradianceDataReaderCompleteEvent
+
+• **IrradianceDataReaderCompleteEvent**: [`CEvent`](../classes/CEvent.md)
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/ddgi/DDGIIrradianceGPUBufferReader.ts:9](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/ddgi/DDGIIrradianceGPUBufferReader.ts#L9)
diff --git a/docs/api/variables/IrradianceVolumeData_frag.md b/docs/api/variables/IrradianceVolumeData_frag.md
new file mode 100644
index 00000000..373d0ae5
--- /dev/null
+++ b/docs/api/variables/IrradianceVolumeData_frag.md
@@ -0,0 +1,7 @@
+# Variable: IrradianceVolumeData\_frag
+
+• **IrradianceVolumeData\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/lighting/IrradianceVolumeData_frag.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/lighting/IrradianceVolumeData_frag.ts#L1)
diff --git a/docs/api/variables/Irradiance_frag.md b/docs/api/variables/Irradiance_frag.md
new file mode 100644
index 00000000..a6a5d2d3
--- /dev/null
+++ b/docs/api/variables/Irradiance_frag.md
@@ -0,0 +1,7 @@
+# Variable: Irradiance\_frag
+
+• **Irradiance\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/lighting/Irradiance_frag.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/lighting/Irradiance_frag.ts#L1)
diff --git a/docs/api/variables/Lambert_shader.md b/docs/api/variables/Lambert_shader.md
new file mode 100644
index 00000000..92042a11
--- /dev/null
+++ b/docs/api/variables/Lambert_shader.md
@@ -0,0 +1,7 @@
+# Variable: Lambert\_shader
+
+• **Lambert\_shader**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/Lambert_shader.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/Lambert_shader.ts#L1)
diff --git a/docs/api/variables/LightingFunction_frag.md b/docs/api/variables/LightingFunction_frag.md
new file mode 100644
index 00000000..56007a4a
--- /dev/null
+++ b/docs/api/variables/LightingFunction_frag.md
@@ -0,0 +1,7 @@
+# Variable: LightingFunction\_frag
+
+• **LightingFunction\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/lighting/LightingFunction_frag.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/lighting/LightingFunction_frag.ts#L1)
diff --git a/docs/api/variables/Lit_shader.md b/docs/api/variables/Lit_shader.md
new file mode 100644
index 00000000..0e05d8fa
--- /dev/null
+++ b/docs/api/variables/Lit_shader.md
@@ -0,0 +1,7 @@
+# Variable: Lit\_shader
+
+• **Lit\_shader**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/Lit_shader.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/Lit_shader.ts#L1)
diff --git a/docs/api/variables/MaterialUniform.md b/docs/api/variables/MaterialUniform.md
new file mode 100644
index 00000000..820fd9a3
--- /dev/null
+++ b/docs/api/variables/MaterialUniform.md
@@ -0,0 +1,7 @@
+# Variable: MaterialUniform
+
+• **MaterialUniform**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/uniforms/MaterialUniform.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/uniforms/MaterialUniform.ts#L1)
diff --git a/docs/api/variables/MergeRGBA_cs.md b/docs/api/variables/MergeRGBA_cs.md
new file mode 100644
index 00000000..a19d6dac
--- /dev/null
+++ b/docs/api/variables/MergeRGBA_cs.md
@@ -0,0 +1,7 @@
+# Variable: MergeRGBA\_cs
+
+• **MergeRGBA\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/MergeRGBA_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/MergeRGBA_cs.ts#L1)
diff --git a/docs/api/variables/MultiBouncePass_cs.md b/docs/api/variables/MultiBouncePass_cs.md
new file mode 100644
index 00000000..a016ebeb
--- /dev/null
+++ b/docs/api/variables/MultiBouncePass_cs.md
@@ -0,0 +1,7 @@
+# Variable: MultiBouncePass\_cs
+
+• **MultiBouncePass\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/MultiBouncePass_cs.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/MultiBouncePass_cs.ts#L2)
diff --git a/docs/api/variables/NormalMap_frag.md b/docs/api/variables/NormalMap_frag.md
new file mode 100644
index 00000000..ba0a811f
--- /dev/null
+++ b/docs/api/variables/NormalMap_frag.md
@@ -0,0 +1,7 @@
+# Variable: NormalMap\_frag
+
+• **NormalMap\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/program/NormalMap_frag.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/program/NormalMap_frag.ts#L1)
diff --git a/docs/api/variables/OutLineBlendColor_cs.md b/docs/api/variables/OutLineBlendColor_cs.md
new file mode 100644
index 00000000..fe1f368e
--- /dev/null
+++ b/docs/api/variables/OutLineBlendColor_cs.md
@@ -0,0 +1,7 @@
+# Variable: OutLineBlendColor\_cs
+
+• **OutLineBlendColor\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/OutLineBlendColor_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/OutLineBlendColor_cs.ts#L1)
diff --git a/docs/api/variables/OutlineCalcOutline_cs.md b/docs/api/variables/OutlineCalcOutline_cs.md
new file mode 100644
index 00000000..eac2e10a
--- /dev/null
+++ b/docs/api/variables/OutlineCalcOutline_cs.md
@@ -0,0 +1,7 @@
+# Variable: OutlineCalcOutline\_cs
+
+• **OutlineCalcOutline\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/OutlineCalcOutline_cs.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/OutlineCalcOutline_cs.ts#L2)
diff --git a/docs/api/variables/OutlinePass.md b/docs/api/variables/OutlinePass.md
new file mode 100644
index 00000000..9df57d7a
--- /dev/null
+++ b/docs/api/variables/OutlinePass.md
@@ -0,0 +1,7 @@
+# Variable: OutlinePass
+
+• **OutlinePass**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/OutlinePass.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/OutlinePass.ts#L1)
diff --git a/docs/api/variables/Outline_cs.md b/docs/api/variables/Outline_cs.md
new file mode 100644
index 00000000..559c271c
--- /dev/null
+++ b/docs/api/variables/Outline_cs.md
@@ -0,0 +1,7 @@
+# Variable: Outline\_cs
+
+• **Outline\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/Outline_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/Outline_cs.ts#L1)
diff --git a/docs/api/variables/PBRLItShader.md b/docs/api/variables/PBRLItShader.md
new file mode 100644
index 00000000..33cb8fbd
--- /dev/null
+++ b/docs/api/variables/PBRLItShader.md
@@ -0,0 +1,7 @@
+# Variable: PBRLItShader
+
+• **PBRLItShader**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/PBRLItShader.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/PBRLItShader.ts#L1)
diff --git a/docs/api/variables/PBRLitSSSShader.md b/docs/api/variables/PBRLitSSSShader.md
new file mode 100644
index 00000000..09a0bc86
--- /dev/null
+++ b/docs/api/variables/PBRLitSSSShader.md
@@ -0,0 +1,7 @@
+# Variable: PBRLitSSSShader
+
+• **PBRLitSSSShader**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/PBRLitSSSShader.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/PBRLitSSSShader.ts#L1)
diff --git a/docs/api/variables/PBRLitShader.md b/docs/api/variables/PBRLitShader.md
new file mode 100644
index 00000000..33cb8fbd
--- /dev/null
+++ b/docs/api/variables/PBRLitShader.md
@@ -0,0 +1,7 @@
+# Variable: PBRLItShader
+
+• **PBRLItShader**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/PBRLItShader.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/PBRLItShader.ts#L1)
diff --git a/docs/api/variables/PavementShader.md b/docs/api/variables/PavementShader.md
new file mode 100644
index 00000000..16c8aa77
--- /dev/null
+++ b/docs/api/variables/PavementShader.md
@@ -0,0 +1,7 @@
+# Variable: PavementShader
+
+• **PavementShader**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/PavementShader.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/PavementShader.ts#L1)
diff --git a/docs/api/variables/PhysicMaterialUniform_frag.md b/docs/api/variables/PhysicMaterialUniform_frag.md
new file mode 100644
index 00000000..60e9ecd3
--- /dev/null
+++ b/docs/api/variables/PhysicMaterialUniform_frag.md
@@ -0,0 +1,7 @@
+# Variable: PhysicMaterialUniform\_frag
+
+• **PhysicMaterialUniform\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/uniforms/PhysicMaterialUniform_frag.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/uniforms/PhysicMaterialUniform_frag.ts#L1)
diff --git a/docs/api/variables/Picker_cs.md b/docs/api/variables/Picker_cs.md
new file mode 100644
index 00000000..65b1373b
--- /dev/null
+++ b/docs/api/variables/Picker_cs.md
@@ -0,0 +1,7 @@
+# Variable: Picker\_cs
+
+• **Picker\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/Picker_cs.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/Picker_cs.ts#L2)
diff --git a/docs/api/variables/PointShadowDebug.md b/docs/api/variables/PointShadowDebug.md
new file mode 100644
index 00000000..7065782b
--- /dev/null
+++ b/docs/api/variables/PointShadowDebug.md
@@ -0,0 +1,7 @@
+# Variable: PointShadowDebug
+
+• **PointShadowDebug**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/PointShadowDebug.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/PointShadowDebug.ts#L2)
diff --git a/docs/api/variables/PreFilteredEnvironment_cs.md b/docs/api/variables/PreFilteredEnvironment_cs.md
new file mode 100644
index 00000000..e45a9a11
--- /dev/null
+++ b/docs/api/variables/PreFilteredEnvironment_cs.md
@@ -0,0 +1,7 @@
+# Variable: PreFilteredEnvironment\_cs
+
+• **PreFilteredEnvironment\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/PreFilteredEnvironment_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/PreFilteredEnvironment_cs.ts#L1)
diff --git a/docs/api/variables/PreFilteredEnvironment_cs2.md b/docs/api/variables/PreFilteredEnvironment_cs2.md
new file mode 100644
index 00000000..8d85494d
--- /dev/null
+++ b/docs/api/variables/PreFilteredEnvironment_cs2.md
@@ -0,0 +1,7 @@
+# Variable: PreFilteredEnvironment\_cs2
+
+• **PreFilteredEnvironment\_cs2**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/PreFilteredEnvironment_cs copy.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/PreFilteredEnvironment_cs copy.ts#L1)
diff --git a/docs/api/variables/PreIntegratedLut.md b/docs/api/variables/PreIntegratedLut.md
new file mode 100644
index 00000000..6b97e79f
--- /dev/null
+++ b/docs/api/variables/PreIntegratedLut.md
@@ -0,0 +1,7 @@
+# Variable: PreIntegratedLut
+
+• **PreIntegratedLut**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/PreIntegratedLut.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/PreIntegratedLut.ts#L2)
diff --git a/docs/api/variables/QuadGlsl_vs.md b/docs/api/variables/QuadGlsl_vs.md
new file mode 100644
index 00000000..7446a7e5
--- /dev/null
+++ b/docs/api/variables/QuadGlsl_vs.md
@@ -0,0 +1,7 @@
+# Variable: QuadGlsl\_vs
+
+• **QuadGlsl\_vs**: `string`
+
+#### Defined in
+
+[src/assets/shader/glsl/Quad_glsl.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/glsl/Quad_glsl.ts#L3)
diff --git a/docs/api/variables/Quad_depth2dArray_frag_wgsl.md b/docs/api/variables/Quad_depth2dArray_frag_wgsl.md
new file mode 100644
index 00000000..45a9e747
--- /dev/null
+++ b/docs/api/variables/Quad_depth2dArray_frag_wgsl.md
@@ -0,0 +1,7 @@
+# Variable: Quad\_depth2dArray\_frag\_wgsl
+
+• **Quad\_depth2dArray\_frag\_wgsl**: `string`
+
+#### Defined in
+
+[src/assets/shader/quad/Quad_shader.ts:175](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/quad/Quad_shader.ts#L175)
diff --git a/docs/api/variables/Quad_depth2d_frag_wgsl.md b/docs/api/variables/Quad_depth2d_frag_wgsl.md
new file mode 100644
index 00000000..fd6b551c
--- /dev/null
+++ b/docs/api/variables/Quad_depth2d_frag_wgsl.md
@@ -0,0 +1,7 @@
+# Variable: Quad\_depth2d\_frag\_wgsl
+
+• **Quad\_depth2d\_frag\_wgsl**: `string`
+
+#### Defined in
+
+[src/assets/shader/quad/Quad_shader.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/quad/Quad_shader.ts#L85)
diff --git a/docs/api/variables/Quad_depthCube_frag_wgsl.md b/docs/api/variables/Quad_depthCube_frag_wgsl.md
new file mode 100644
index 00000000..9e3594b6
--- /dev/null
+++ b/docs/api/variables/Quad_depthCube_frag_wgsl.md
@@ -0,0 +1,7 @@
+# Variable: Quad\_depthCube\_frag\_wgsl
+
+• **Quad\_depthCube\_frag\_wgsl**: `string`
+
+#### Defined in
+
+[src/assets/shader/quad/Quad_shader.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/quad/Quad_shader.ts#L112)
diff --git a/docs/api/variables/Quad_frag_wgsl.md b/docs/api/variables/Quad_frag_wgsl.md
new file mode 100644
index 00000000..362289aa
--- /dev/null
+++ b/docs/api/variables/Quad_frag_wgsl.md
@@ -0,0 +1,7 @@
+# Variable: Quad\_frag\_wgsl
+
+• **Quad\_frag\_wgsl**: `string`
+
+#### Defined in
+
+[src/assets/shader/quad/Quad_shader.ts:63](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/quad/Quad_shader.ts#L63)
diff --git a/docs/api/variables/Quad_vert_wgsl.md b/docs/api/variables/Quad_vert_wgsl.md
new file mode 100644
index 00000000..7d9cbb19
--- /dev/null
+++ b/docs/api/variables/Quad_vert_wgsl.md
@@ -0,0 +1,7 @@
+# Variable: Quad\_vert\_wgsl
+
+• **Quad\_vert\_wgsl**: `string`
+
+#### Defined in
+
+[src/assets/shader/quad/Quad_shader.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/quad/Quad_shader.ts#L35)
diff --git a/docs/api/variables/RADIANS_TO_DEGREES.md b/docs/api/variables/RADIANS_TO_DEGREES.md
new file mode 100644
index 00000000..5e520a22
--- /dev/null
+++ b/docs/api/variables/RADIANS_TO_DEGREES.md
@@ -0,0 +1,9 @@
+# Variable: RADIANS\_TO\_DEGREES
+
+• **RADIANS\_TO\_DEGREES**: `number`
+
+This is a constant value used to convert radians to angles
+
+#### Defined in
+
+[src/math/MathUtil.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/math/MathUtil.ts#L11)
diff --git a/docs/api/variables/ReflectionCG.md b/docs/api/variables/ReflectionCG.md
new file mode 100644
index 00000000..48b3b2cb
--- /dev/null
+++ b/docs/api/variables/ReflectionCG.md
@@ -0,0 +1,7 @@
+# Variable: ReflectionCG
+
+• **ReflectionCG**: `string`
+
+#### Defined in
+
+[src/assets/shader/env/ReflectionCG.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/env/ReflectionCG.ts#L1)
diff --git a/docs/api/variables/ReflectionShader_shader.md b/docs/api/variables/ReflectionShader_shader.md
new file mode 100644
index 00000000..a04141ff
--- /dev/null
+++ b/docs/api/variables/ReflectionShader_shader.md
@@ -0,0 +1,7 @@
+# Variable: ReflectionShader\_shader
+
+• **ReflectionShader\_shader**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/ReflectionShader_shader.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/ReflectionShader_shader.ts#L1)
diff --git a/docs/api/variables/SHCommon_frag.md b/docs/api/variables/SHCommon_frag.md
new file mode 100644
index 00000000..f718c2eb
--- /dev/null
+++ b/docs/api/variables/SHCommon_frag.md
@@ -0,0 +1,7 @@
+# Variable: SHCommon\_frag
+
+• **SHCommon\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/common/SHCommon_frag.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/common/SHCommon_frag.ts#L2)
diff --git a/docs/api/variables/SSAO_cs.md b/docs/api/variables/SSAO_cs.md
new file mode 100644
index 00000000..25fc1fa0
--- /dev/null
+++ b/docs/api/variables/SSAO_cs.md
@@ -0,0 +1,7 @@
+# Variable: SSAO\_cs
+
+• **SSAO\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/SSAO_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/SSAO_cs.ts#L1)
diff --git a/docs/api/variables/SSGI2_cs.md b/docs/api/variables/SSGI2_cs.md
new file mode 100644
index 00000000..ebe39c26
--- /dev/null
+++ b/docs/api/variables/SSGI2_cs.md
@@ -0,0 +1,7 @@
+# Variable: SSGI2\_cs
+
+• **SSGI2\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/SSGI2_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/SSGI2_cs.ts#L1)
diff --git a/docs/api/variables/SSR_BlendColor_cs.md b/docs/api/variables/SSR_BlendColor_cs.md
new file mode 100644
index 00000000..3a8df245
--- /dev/null
+++ b/docs/api/variables/SSR_BlendColor_cs.md
@@ -0,0 +1,7 @@
+# Variable: SSR\_BlendColor\_cs
+
+• **SSR\_BlendColor\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/SSR_BlendColor_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/SSR_BlendColor_cs.ts#L1)
diff --git a/docs/api/variables/SSR_IS_cs.md b/docs/api/variables/SSR_IS_cs.md
new file mode 100644
index 00000000..ca4f38af
--- /dev/null
+++ b/docs/api/variables/SSR_IS_cs.md
@@ -0,0 +1,7 @@
+# Variable: SSR\_IS\_cs
+
+• **SSR\_IS\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/SSR_IS_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/SSR_IS_cs.ts#L1)
diff --git a/docs/api/variables/SSR_RayTrace_cs.md b/docs/api/variables/SSR_RayTrace_cs.md
new file mode 100644
index 00000000..064e3662
--- /dev/null
+++ b/docs/api/variables/SSR_RayTrace_cs.md
@@ -0,0 +1,7 @@
+# Variable: SSR\_RayTrace\_cs
+
+• **SSR\_RayTrace\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/SSR_RayTrace_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/SSR_RayTrace_cs.ts#L1)
diff --git a/docs/api/variables/ShadingInput.md b/docs/api/variables/ShadingInput.md
new file mode 100644
index 00000000..bd74865b
--- /dev/null
+++ b/docs/api/variables/ShadingInput.md
@@ -0,0 +1,7 @@
+# Variable: ShadingInput
+
+• **ShadingInput**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/struct/ShadingInput.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/struct/ShadingInput.ts#L1)
diff --git a/docs/api/variables/ShadowMapping_frag.md b/docs/api/variables/ShadowMapping_frag.md
new file mode 100644
index 00000000..17fb5b71
--- /dev/null
+++ b/docs/api/variables/ShadowMapping_frag.md
@@ -0,0 +1,7 @@
+# Variable: ShadowMapping\_frag
+
+• **ShadowMapping\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/program/ShadowMapping_frag.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/program/ShadowMapping_frag.ts#L3)
diff --git a/docs/api/variables/SkyGBuffer_pass.md b/docs/api/variables/SkyGBuffer_pass.md
new file mode 100644
index 00000000..65afa2d8
--- /dev/null
+++ b/docs/api/variables/SkyGBuffer_pass.md
@@ -0,0 +1,7 @@
+# Variable: SkyGBuffer\_pass
+
+• **SkyGBuffer\_pass**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/pass/SkyGBuffer_pass.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/pass/SkyGBuffer_pass.ts#L1)
diff --git a/docs/api/variables/TAACopyTex_cs.md b/docs/api/variables/TAACopyTex_cs.md
new file mode 100644
index 00000000..c4ca0aef
--- /dev/null
+++ b/docs/api/variables/TAACopyTex_cs.md
@@ -0,0 +1,7 @@
+# Variable: TAACopyTex\_cs
+
+• **TAACopyTex\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/TAACopyTex_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/TAACopyTex_cs.ts#L1)
diff --git a/docs/api/variables/TAASharpTex_cs.md b/docs/api/variables/TAASharpTex_cs.md
new file mode 100644
index 00000000..8a9ef7da
--- /dev/null
+++ b/docs/api/variables/TAASharpTex_cs.md
@@ -0,0 +1,7 @@
+# Variable: TAASharpTex\_cs
+
+• **TAASharpTex\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/TAASharpTex_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/TAASharpTex_cs.ts#L1)
diff --git a/docs/api/variables/TAA_cs.md b/docs/api/variables/TAA_cs.md
new file mode 100644
index 00000000..c6a677c4
--- /dev/null
+++ b/docs/api/variables/TAA_cs.md
@@ -0,0 +1,7 @@
+# Variable: TAA\_cs
+
+• **TAA\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/TAA_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/TAA_cs.ts#L1)
diff --git a/docs/api/variables/TestComputeLoadBuffer.md b/docs/api/variables/TestComputeLoadBuffer.md
new file mode 100644
index 00000000..e1de2daf
--- /dev/null
+++ b/docs/api/variables/TestComputeLoadBuffer.md
@@ -0,0 +1,7 @@
+# Variable: TestComputeLoadBuffer
+
+• **TestComputeLoadBuffer**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/utils/TestComputeLoadBuffer.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/utils/TestComputeLoadBuffer.ts#L1)
diff --git a/docs/api/variables/UnLit.md b/docs/api/variables/UnLit.md
new file mode 100644
index 00000000..9cd7bbf9
--- /dev/null
+++ b/docs/api/variables/UnLit.md
@@ -0,0 +1,7 @@
+# Variable: UnLit
+
+• **UnLit**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/UnLit.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/UnLit.ts#L1)
diff --git a/docs/api/variables/UnLitMaterialUniform_frag.md b/docs/api/variables/UnLitMaterialUniform_frag.md
new file mode 100644
index 00000000..beb2c8d4
--- /dev/null
+++ b/docs/api/variables/UnLitMaterialUniform_frag.md
@@ -0,0 +1,7 @@
+# Variable: UnLitMaterialUniform\_frag
+
+• **UnLitMaterialUniform\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/uniforms/UnLitMaterialUniform_frag.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/uniforms/UnLitMaterialUniform_frag.ts#L1)
diff --git a/docs/api/variables/UnLitTextureArray.md b/docs/api/variables/UnLitTextureArray.md
new file mode 100644
index 00000000..43c28e1d
--- /dev/null
+++ b/docs/api/variables/UnLitTextureArray.md
@@ -0,0 +1,7 @@
+# Variable: UnLitTextureArray
+
+• **UnLitTextureArray**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/UnLitTextureArray.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/UnLitTextureArray.ts#L1)
diff --git a/docs/api/variables/UnLit_frag.md b/docs/api/variables/UnLit_frag.md
new file mode 100644
index 00000000..d41e854e
--- /dev/null
+++ b/docs/api/variables/UnLit_frag.md
@@ -0,0 +1,7 @@
+# Variable: UnLit\_frag
+
+• **UnLit\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/lighting/UnLit_frag.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/lighting/UnLit_frag.ts#L1)
diff --git a/docs/api/variables/VertexAttributeIndexShader.md b/docs/api/variables/VertexAttributeIndexShader.md
new file mode 100644
index 00000000..bb21b98d
--- /dev/null
+++ b/docs/api/variables/VertexAttributeIndexShader.md
@@ -0,0 +1,7 @@
+# Variable: VertexAttributeIndexShader
+
+• **VertexAttributeIndexShader**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/struct/VertexAttributeIndexShader.ts:2](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/struct/VertexAttributeIndexShader.ts#L2)
diff --git a/docs/api/variables/VertexAttributes_vert.md b/docs/api/variables/VertexAttributes_vert.md
new file mode 100644
index 00000000..010c03ab
--- /dev/null
+++ b/docs/api/variables/VertexAttributes_vert.md
@@ -0,0 +1,7 @@
+# Variable: VertexAttributes\_vert
+
+• **VertexAttributes\_vert**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/struct/VertexAttributes.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/struct/VertexAttributes.ts#L4)
diff --git a/docs/api/variables/VideoUniform_frag.md b/docs/api/variables/VideoUniform_frag.md
new file mode 100644
index 00000000..592b0755
--- /dev/null
+++ b/docs/api/variables/VideoUniform_frag.md
@@ -0,0 +1,7 @@
+# Variable: VideoUniform\_frag
+
+• **VideoUniform\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/materials/uniforms/VideoUniform_frag.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/materials/uniforms/VideoUniform_frag.ts#L1)
diff --git a/docs/api/variables/WorldMatrixUniform.md b/docs/api/variables/WorldMatrixUniform.md
new file mode 100644
index 00000000..b3052355
--- /dev/null
+++ b/docs/api/variables/WorldMatrixUniform.md
@@ -0,0 +1,7 @@
+# Variable: WorldMatrixUniform
+
+• **WorldMatrixUniform**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/common/WorldMatrixUniform.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/common/WorldMatrixUniform.ts#L1)
diff --git a/docs/api/variables/ZPassShader_cs.md b/docs/api/variables/ZPassShader_cs.md
new file mode 100644
index 00000000..ffd3af75
--- /dev/null
+++ b/docs/api/variables/ZPassShader_cs.md
@@ -0,0 +1,7 @@
+# Variable: ZPassShader\_cs
+
+• **ZPassShader\_cs**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/pass/ZPassShader_cs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/pass/ZPassShader_cs.ts#L1)
diff --git a/docs/api/variables/ZPassShader_fs.md b/docs/api/variables/ZPassShader_fs.md
new file mode 100644
index 00000000..71bf8349
--- /dev/null
+++ b/docs/api/variables/ZPassShader_fs.md
@@ -0,0 +1,7 @@
+# Variable: ZPassShader\_fs
+
+• **ZPassShader\_fs**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/pass/ZPassShader_fs.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/pass/ZPassShader_fs.ts#L1)
diff --git a/docs/api/variables/ZPassShader_vs.md b/docs/api/variables/ZPassShader_vs.md
new file mode 100644
index 00000000..920cf9a2
--- /dev/null
+++ b/docs/api/variables/ZPassShader_vs.md
@@ -0,0 +1,7 @@
+# Variable: ZPassShader\_vs
+
+• **ZPassShader\_vs**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/pass/ZPassShader_vs.ts:4](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/pass/ZPassShader_vs.ts#L4)
diff --git a/docs/api/variables/castPointShadowMap_vert.md b/docs/api/variables/castPointShadowMap_vert.md
new file mode 100644
index 00000000..f8a07286
--- /dev/null
+++ b/docs/api/variables/castPointShadowMap_vert.md
@@ -0,0 +1,7 @@
+# Variable: castPointShadowMap\_vert
+
+• **castPointShadowMap\_vert**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/pass/CastShadow_pass.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/pass/CastShadow_pass.ts#L112)
diff --git a/docs/api/variables/directionShadowCastMap_frag.md b/docs/api/variables/directionShadowCastMap_frag.md
new file mode 100644
index 00000000..4b01e289
--- /dev/null
+++ b/docs/api/variables/directionShadowCastMap_frag.md
@@ -0,0 +1,7 @@
+# Variable: directionShadowCastMap\_frag
+
+• **directionShadowCastMap\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/pass/CastShadow_pass.ts:262](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/pass/CastShadow_pass.ts#L262)
diff --git a/docs/api/variables/downSample.md b/docs/api/variables/downSample.md
new file mode 100644
index 00000000..e0a4d246
--- /dev/null
+++ b/docs/api/variables/downSample.md
@@ -0,0 +1,7 @@
+# Variable: downSample
+
+• **downSample**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/BloomEffect_cs.ts:109](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/BloomEffect_cs.ts#L109)
diff --git a/docs/api/variables/fonts.md b/docs/api/variables/fonts.md
new file mode 100644
index 00000000..c87746a0
--- /dev/null
+++ b/docs/api/variables/fonts.md
@@ -0,0 +1,7 @@
+# Variable: fonts
+
+• **fonts**: `Fonts`
+
+#### Defined in
+
+[src/assets/Fonts.ts:29](https://github.com/Orillusion/orillusion/blob/main/src/assets/Fonts.ts#L29)
diff --git a/docs/api/variables/irradianceDataReader.md b/docs/api/variables/irradianceDataReader.md
new file mode 100644
index 00000000..660ea29f
--- /dev/null
+++ b/docs/api/variables/irradianceDataReader.md
@@ -0,0 +1,7 @@
+# Variable: irradianceDataReader
+
+• **irradianceDataReader**: [`DDGIIrradianceGPUBufferReader`](../classes/DDGIIrradianceGPUBufferReader.md)
+
+#### Defined in
+
+[src/gfx/renderJob/passRenderer/ddgi/DDGIIrradianceGPUBufferReader.ts:91](https://github.com/Orillusion/orillusion/blob/main/src/gfx/renderJob/passRenderer/ddgi/DDGIIrradianceGPUBufferReader.ts#L91)
diff --git a/docs/api/variables/outlinePostData-1.md b/docs/api/variables/outlinePostData-1.md
new file mode 100644
index 00000000..2523dabf
--- /dev/null
+++ b/docs/api/variables/outlinePostData-1.md
@@ -0,0 +1,7 @@
+# Variable: outlinePostData
+
+• **outlinePostData**: [`OutlinePostData`](../classes/OutlinePostData.md)
+
+#### Defined in
+
+[src/io/OutlinePostData.ts:67](https://github.com/Orillusion/orillusion/blob/main/src/io/OutlinePostData.ts#L67)
diff --git a/docs/api/variables/post.md b/docs/api/variables/post.md
new file mode 100644
index 00000000..fe13d08e
--- /dev/null
+++ b/docs/api/variables/post.md
@@ -0,0 +1,7 @@
+# Variable: post
+
+• **post**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/BloomEffect_cs.ts:183](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/BloomEffect_cs.ts#L183)
diff --git a/docs/api/variables/shadowCastMap_frag.md b/docs/api/variables/shadowCastMap_frag.md
new file mode 100644
index 00000000..657397f7
--- /dev/null
+++ b/docs/api/variables/shadowCastMap_frag.md
@@ -0,0 +1,7 @@
+# Variable: shadowCastMap\_frag
+
+• **shadowCastMap\_frag**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/pass/CastShadow_pass.ts:222](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/pass/CastShadow_pass.ts#L222)
diff --git a/docs/api/variables/shadowCastMap_vert.md b/docs/api/variables/shadowCastMap_vert.md
new file mode 100644
index 00000000..ddeb070b
--- /dev/null
+++ b/docs/api/variables/shadowCastMap_vert.md
@@ -0,0 +1,7 @@
+# Variable: shadowCastMap\_vert
+
+• **shadowCastMap\_vert**: `string`
+
+#### Defined in
+
+[src/assets/shader/core/pass/CastShadow_pass.ts:3](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/core/pass/CastShadow_pass.ts#L3)
diff --git a/docs/api/variables/threshold.md b/docs/api/variables/threshold.md
new file mode 100644
index 00000000..37421a01
--- /dev/null
+++ b/docs/api/variables/threshold.md
@@ -0,0 +1,7 @@
+# Variable: threshold
+
+• **threshold**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/BloomEffect_cs.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/BloomEffect_cs.ts#L73)
diff --git a/docs/api/variables/tw.md b/docs/api/variables/tw.md
new file mode 100644
index 00000000..61c89114
--- /dev/null
+++ b/docs/api/variables/tw.md
@@ -0,0 +1,7 @@
+# Variable: tw
+
+• **tw**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/utils/tw.ts:1](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/utils/tw.ts#L1)
diff --git a/docs/api/variables/upSample.md b/docs/api/variables/upSample.md
new file mode 100644
index 00000000..2ff89ee1
--- /dev/null
+++ b/docs/api/variables/upSample.md
@@ -0,0 +1,7 @@
+# Variable: upSample
+
+• **upSample**: `string`
+
+#### Defined in
+
+[src/assets/shader/compute/BloomEffect_cs.ts:142](https://github.com/Orillusion/orillusion/blob/main/src/assets/shader/compute/BloomEffect_cs.ts#L142)
diff --git a/docs/api/variables/zSorterUtil-1.md b/docs/api/variables/zSorterUtil-1.md
new file mode 100644
index 00000000..8eccea4e
--- /dev/null
+++ b/docs/api/variables/zSorterUtil-1.md
@@ -0,0 +1,7 @@
+# Variable: zSorterUtil
+
+• **zSorterUtil**: [`ZSorterUtil`](../classes/ZSorterUtil.md)
+
+#### Defined in
+
+[src/util/ZSorterUtil.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/util/ZSorterUtil.ts#L75)
diff --git a/docs/cdn/index.md b/docs/cdn/index.md
new file mode 100644
index 00000000..23a5b497
--- /dev/null
+++ b/docs/cdn/index.md
@@ -0,0 +1,169 @@
+---
+editLink: false
+---
+# Orillusion 3DHub CDN APIs
+3DHub CDN 是一个 REST 服务,除了通过网页客户端进行管理,您还可以使用 REST API 向 3DHub 发起请求。
+
+## 鉴权
+系统会给所有用户分配一套 `AccessKey` 鉴权秘钥,包含 `accessId` 和 `accessSecret`。为了保证数据安全,所有 API 接口调用需要验证发送者秘钥。鉴权成功后,才可以操作相应的 CDN 资源。
+
+### 鉴权方式
+您可以直接发起 REST API 请求,通过以下两种认证方式进行鉴权:
+- 直接使用 AccessKey 发起请求
+在 header 中直接提供用户 `accessId` + `accessSecret` 进行鉴权。建议在安全的服务器环境中使用,不要泄露给客户端。请注意保护 `accessSecret`,可能造成数据泄露,如果泄露请及时注销 AccessKey
+
+- 使用 `token` 临时凭证发起请求。
+用户可以先通过 `accessId` + `accessSecret` 向 CDN 服务器请求一个临时的 token 凭证。然后使用该临时 token 在规定时间内访问 CDN 资源。 临时凭证无需泄露用户长期密钥,更加安全可靠。适用于在客户端/前端程序中请求 CDN 资源。使用流程大致如下:
+1. 应用服务器先使用 `accessSecret` 在服务器端向 CDN 服务器请求一个临时 `token` 并返回给客户端。
+2. 客户端可以缓存该 `token`, 并在规定的时间内,在 header 使用 `accessId` + `token` 的形式进行鉴权访问 CDN 资源。
+3. 当临时凭证失效后,客户端再次向 App 服务器申请临时访问凭证,应用服务器可以再次通过 `accessSecret` 向 CDN 服务器请求新的临时 `token` 并返回给客户端使用。
+
+### 公共请求头
+未做特殊说明每个api默认必须包含以下 header 数据,`accessSecret` 优先级高于 `token`。
+
+| 参数名 | 类型 | 描述 | 必填 |
+| :----: | :----: | :----: | :----: |
+| Content-Type | string | application/json | 必填 |
+| x-orillusion-id | string | accessId | 必填 |
+| x-orillusion-key | string | accessSecret | 若 `token` 为空则必填 |
+| x-orillusion-token | string | 临时 token 凭证 | 若 `accessSecret` 为空则必填 |
+
+## 获得令牌
+获得或更新 临时令牌。
+
+**请求地址:**
+
+/api/refreshToken
+
+**请求方法:**
+
+GET
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。注意:该请求必须使用 `accessSecret` 进行鉴权,无法使用 `token` 请求。
+
+
+**请求参数:**
+| 参数名 | 类型 | 描述 | 必填 |
+| :----: | :----: |:----: | :----: |
+| expire | number | 超时时长,单位毫秒,最长24小时,默认值:15分钟 | 选填 |
+
+**响应参数:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| expire | number | 返回超时时长,单位毫秒 |
+| token | string | 令牌 |
+
+**失败返回:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| 无 | string | 错误描述 |
+
+**示例:**
+```
+# 只能以accessId + accessSecret 方式认证
+curl -H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-key:accessSecret' 'https://3dhub.orillusion.com/refreshToken?expire=900000'
+```
+
+**使用说明:**
+* 获得token后请自行保存,后续访问其它 API 中可使用 `accessId` + `token` 方式认证。
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* no accessSecret:没有使用 accessSecret 进行认证
+
+
+## 获取秘钥
+获得当前登陆用户的accessSecret。
+
+**请求地址:**
+
+/api/accesskey
+
+**请求方法:**
+
+GET
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。注意:该请求必须使用 `accessSecret` 进行鉴权,无法使用 `token` 请求。
+
+**请求参数:**
+
+无
+
+**响应参数:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: | :----: |
+| secret | string | AccessSecret |
+
+**失败返回:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| 无 | string | 错误描述 |
+
+**示例:**
+```
+# 只能以accessId + accessSecret 方式认证
+curl -H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-key:accessSecret' 'https://3dhub.orillusion.com/api/accesskey'
+```
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* no auth:未登陆
+* require verified:邮箱未验证
+* no accessSecret:没有使用 accessSecret 进行认证
+
+## 更换秘钥
+删除并生成新的accessSecret
+
+**请求地址:**
+
+/api/accesskey
+
+**请求方法:**
+
+DELETE
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+
+无
+
+**响应参数:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| result | string | 操作成功返回:ok |
+
+**失败返回:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: | :----: |
+| 无 | string | 错误描述 |
+
+**示例:**
+```
+# 只能以accessId + accessSecret 方式认证
+curl -H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-key:accessSecret' -X DELETE 'https://3dhub.orillusion.com/api/accesskey'
+```
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* no auth:未登陆
+* require verified:邮箱未验证
+* no accessSecret:没有使用 accessSecret 进行认证
diff --git a/docs/cdn/links.md b/docs/cdn/links.md
new file mode 100644
index 00000000..66a9ec8f
--- /dev/null
+++ b/docs/cdn/links.md
@@ -0,0 +1,374 @@
+---
+editLink: false
+---
+
+# 分享 API
+
+## 获取分享列表
+获取当前用户下分享列表
+
+**请求地址:**
+
+/api/links/
+
+**请求方法:**
+
+GET
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+| 参数名 | 类型 | 描述 | 必填 |
+| :----: | :----: | ---- |:----: |
+| sort | string | 排序规则,viewer:浏览数,_createTime:创建时间, 默认值:_createTime | 选填 |
+| limit | number | 指定返回link最大数,取值范围:100至100,默认值:100 | 选填 |
+| skip | number | 指定从skip之后返回link,可以和limit配合实现分页效果,默认值:0 | 选填 |
+| search | string | 限定返回名称中包含search的link | 选填 |
+
+**响应参数:**
+
+| 参数名 | 类型 | 描述 |
+| :----: | :----: | ---- |
+| links | array<`link`> | 包含连接对象的数组,link对象结构请参照以下[link结构](/cdn/links.html#link结构:) 的link结构部分 |
+| models | array<`model`> | 包含模型对象的数组,model对象结构请参照 [model结构](/cdn/models.html#model结构:) 的model结构部分 |
+| limit | number | 上传limit参数的回传 |
+| skip | number | 上传skip参数的回传 |
+| total | number | 查询到符合条件的所有models的数目,配合limit,skip可实现页面跳转效果 |
+
+### **link结构**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| _id | string | 链接id |
+| user | string | 对应用户的id |
+| model | string | 对应模型的id |
+| auth | string | 访问密码,无密码则公开访问 |
+| expire | number | 过期时间,单位秒,0:永久 |
+| onetime | boolean | 阅后即焚,查看一次后链接即失效 |
+| download | boolean | 允许下载 |
+| viewer | number | 访问次数 |
+| des | string | 备注说明 |
+
+
+**失败返回:**
+
+无
+
+**示例:**
+```
+curl -H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' -X GET 'https://3dhub.orillusion.com/api/links'
+```
+
+**错误提示:**
+
+状态码
+* 无
+
+错误内容
+* 无
+
+## 获取模型分享列表
+获取指定模型下的分享列表
+
+**请求地址:**
+
+/api/links/:model_id
+
+**params:**
+| 参数名 | 描述 |
+| :----: | :----: |
+| model_id | 模型的_id |
+
+**请求方法:**
+
+GET
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+
+无
+
+**响应参数:**
+
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| - | array` ` | 分享列表,元素参考 [link结构](/cdn/links.html#link结构:) |
+
+
+**失败返回:**
+
+无
+
+**示例:**
+```
+curl-H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' -X GET 'https://3dhub.orillusion.com/api/links/model_id'
+```
+
+**错误提示:**
+
+状态码
+* 无
+
+错误内容
+* 无
+
+## 创建分享
+创建一个共享链接
+
+**请求地址:**
+
+/api/link
+
+**请求方法:**
+
+POST
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+| 参数名 | 类型 | 描述 | 必填 |
+| :----: | :----: |:----: |:----: |
+| model | string | 模型Id | 必填 |
+
+**响应参数:**
+
+参考 [link结构](/cdn/links.html#link结构:)
+
+**失败返回:**
+
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| 无 | string | 错误描述 |
+
+**示例:**
+```
+curl -H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' -X POST --data-binary '{"model":"model_id"}' 'https://3dhub.orillusion.com/api/link'
+```
+
+**使用说明**
+* 最多可创建20个分享连接
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* no model:没有该模型信息
+* no auth:没有权限
+* link count limited:分享数超过限制
+
+## 获取分享信息
+获取一个共享链接的信息
+
+**请求地址:**
+
+/api/link/:link_id
+
+**params:**
+| 参数名 | 描述 |
+| :----: | :----: |
+| link_id | 分享链接的_id |
+
+**请求方法:**
+
+GET
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+
+无
+
+**响应参数:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| link | object | 详情请查看 [link结构](/cdn/links.html#link结构:) |
+| model | object | 详情请查看 [model结构](/cdn/models.html#model结构:) |
+| sign | object | 详情请查看 [signature API](/cdn/models.html#api-signature-model-id) 返回参数 |
+| setting | object | 模型对应的配置信息 |
+
+
+**失败返回:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| 无 | string | 错误描述 |
+
+**示例:**
+```
+curl-H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' -X GET 'https://3dhub.orillusion.com/api/link/link_id'
+```
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* no link:没有找到连接
+* link expires:超时时间太短
+* require auth:没有权限
+* link count limited:分享数超过限制
+* no model:无效的模型
+
+
+## 修改共享
+修改一个共享链接
+
+**请求地址:**
+
+/api/link/:link_id
+
+**params:**
+| 参数名 | 描述 |
+| :----: | :----: |
+| link_id | 分享链接的_id |
+
+**请求方法:**
+
+PUT
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+| 参数名 | 类型 | 描述 | 必填 |
+| :----: | :----: |:----: | :----: |
+| auth | string | 访问密码,无密码则公开访问 | 选填 |
+| expire | number | 过期时间,单位秒,0:永久 | 选填 |
+| onetime | boolean | 阅后即焚,访问1次后失效,默认值:false | 选填 |
+| download | boolean | 是否允许下载,默认值:false | 选填 |
+| des | string | 备注说明 | 选填 |
+
+**响应参数:**
+
+无
+
+
+**失败返回:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| 无 | string | 错误描述 |
+
+**示例:**
+```
+curl-H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' -X PUT --data-binary '{"des":"备注"}' 'https://3dhub.orillusion.com/api/link/link_id'
+```
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* no link:没有找到连接
+* no auth:没有权限
+
+## 删除共享
+删除一个共享链接
+
+**请求地址:**
+
+/api/link/:link_id
+
+**params:**
+| 参数名 | 描述 |
+| :----: | :----: |
+| link_id | 分享链接的_id |
+
+**请求方法:**
+
+DELETE
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+
+无
+
+**响应参数:**
+
+无
+
+**失败返回:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| 无 | string | 错误描述 |
+
+**示例:**
+```
+curl-H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' -X DELETE 'https://3dhub.orillusion.com/api/link/link_id'
+```
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* no link:没有找到连接
+* no auth:没有权限
+
+
+## 获取共享模型
+获取共享连接所对应的模型源文件
+
+**请求地址:**
+
+/api/link/download/:link_id
+
+**params:**
+| 参数名 | 描述 |
+| :----: | :----: |
+| link_id | 分享链接的_id |
+
+**请求方法:**
+
+GET
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+| 参数名 | 类型 | 描述 | 必填 |
+| :----: | :----: |:----: | :----: |
+| auth | string | 密码 | 选填 |
+
+**响应参数:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: | :----: |
+| url | string | 下载连接 |
+
+
+**失败返回:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| 无 | string | 错误描述 |
+
+**示例:**
+```
+curl -H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' -X GET 'https://3dhub.orillusion.com/api/link/download/link_id'
+```
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* no link:没有找到连接
+* link expires:已超时
+* no auth:没有权限
+* require auth:密码验证失败
\ No newline at end of file
diff --git a/docs/cdn/models.md b/docs/cdn/models.md
new file mode 100644
index 00000000..8ef04bbc
--- /dev/null
+++ b/docs/cdn/models.md
@@ -0,0 +1,565 @@
+---
+editLink: false
+---
+
+# 模型 API
+
+## 获取模型列表
+获取当前用户的模型列表
+
+**请求地址:**
+
+/api/models
+
+**请求方法:**
+
+GET
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+| 参数名 | 类型 | 描述 | 必填 |
+| :----: | :----: | ---- |:----: |
+| sort | string | 排序规则,viewer:浏览数,_createTime:创建时间, 默认值:_createTime | 选填 |
+| limit | number | 指定返回model最大数,取值范围:100至1000,默认值:100 | 选填 |
+| skip | number | 指定从skip之后返回model,可以和limit配合实现分页效果,默认值:0 | 选填 |
+| search | string | 限定返回名称中包含search的model | 选填 |
+
+**响应参数:**
+
+| 参数名 | 类型 | 描述 |
+| :----: | :----: | ---- |
+| models | array<`model`> | 包含模型对象的数组,model对象结构请参照以下`model结构`部分 |
+| limit | number | 上传limit参数的回传 |
+| skip | number | 上传skip参数的回传 |
+| total | number | 查询到符合条件的所有models的数目,配合limit,skip可实现页面跳转效果 |
+
+#### **model结构:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| _id | string | 模型唯一编号 |
+| name | string | 模型名称 |
+| des | string | 模型描述 |
+| tags | array<`string`> | 模型标签 |
+| zip | string | 原始压缩包文件名 |
+| screenshot | string | 封面url |
+| size | object | 模型尺寸信息,请查看下文size结构 |
+| stats | string | 状态,wait:上传中,public:可访问,error:有错误,draft:未公开 |
+| viewer | number | 访问次数 |
+| _createTime | Date | 创建时间 |
+
+**size结构:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| size | number | 模型处理完毕后所有文件的总大小 |
+| length | number | 模型包含的文件数 |
+
+**失败返回:**
+
+无
+
+**示例:**
+```
+curl -H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' 'https://3dhub.orillusion.com/api/models'
+```
+
+**错误提示:**
+
+状态码
+* 无
+
+错误内容
+* 无
+
+---
+
+## 创建模型
+创建一个模型文件,获得上传接口地址
+
+**请求地址:**
+
+/api/model
+
+**请求方法:**
+
+POST
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+| 参数名 | 类型 | 描述 | 必填 |
+| :----: | :----: |:----: |:----: |
+| entry | string | 入口文件名 | 必填 |
+| zip | string | 原始压缩包文件名 | 必填 |
+
+
+**响应参数:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| uploadUrl | string | 用于上传文件的url |
+| model | object | 模型信息,请参考 [model结构](/cdn/models.html#model结构:) 说明 |
+
+**失败返回:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| 无 | string | 错误描述 |
+
+**示例:**
+```
+curl -H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' -X POST --data-binary '{"zip":"sample.zip","entry":"sample.gltf"}' 'https://3dhub.orillusion.com/api/model'
+```
+
+**使用说明**
+* 仅支持.zip文件上传,请将 gltf/glb/fbx 格式文件按相对路径压缩成zip文件;
+* 调用该接口后返回的uploadUrl用于上传文件,请参照以下完整示例:
+```ts
+// 1. 申请创建 model 对象
+let req = await fetch('https://3dhub.orillusion.com/api/model', {
+ method: 'POST',
+ body: JSON.stringify({
+ entry: 'xxx.gltf', // 模型入口文件名
+ zip: 'xxx.zip' // 压缩包文件名
+ }),
+ headers: {
+ 'x-orillusion-id': accessId,
+ 'x-orillusion-token': token,
+ 'Content-Type': 'application/json'
+ },
+ credentials: 'include',
+ mode: 'cors'
+})
+// 返回模型对象和上传地址
+let {model, uploadUrl} = await req.json()
+
+// 2. 客户端使用 uploadUrl 地址上传 zip 原生 File 对象
+let req = await fetch(uploadUrl, {
+ method: 'PUT',
+ body: zip,
+ headers: {
+ 'Content-Type': 'application/octet-stream' // 必填项
+ }
+})
+await req.json() // 等待上传完成
+```
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* 无
+
+## 获取模型地址
+获取模型的访问地址
+
+**请求地址:**
+
+/api/signature/:model_id
+
+**params:**
+| 参数名 | 描述 |
+| :----: | :----: |
+| model_id | 模型的_id |
+
+**请求方法:**
+
+GET
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+| 参数名 | 类型 | 描述 | 必填 |
+| :----: | :----: |:----: |:----: |
+| expire | number | 有效时长,单位秒 | 选填 |
+
+**响应参数:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| entry | string | 模型访问地址 |
+| size | object | 模型大小信息 |
+| signature | string | 模型访问签名,具体用法请参考下文使用说明 |
+| time | Date | 发起时间戳 |
+| expire | number | 有效时长 | |
+
+
+**失败返回:**
+
+无
+
+**示例:**
+```
+curl -H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' -X GET 'https://3dhub.orillusion.com/api/signature/model_id?expire=100'
+```
+
+**使用说明**
+* 响应参数 `entry` 是模型的入口文件链接,例如:`https://object.orillusion.com/model/{model_id}/scene.gltf`
+
+* CDN 上模型文件及其资源是无法直接访问的,需要添加 `signature` 信息进行鉴权后才有权限加载模型。目前有三种添加 `signature` 的方法,适用于不同的需求:
+1. 可以对链接 url 添加 `cdn_sign` 的 `query` 参数,例如:`https://object.orillusion.com/model/{model_id}/scene.gltf?cdn_sign={signature}`。但请注意,因为签名是临时生成的,每次请求的链接地址都会不相同,所以无法在浏览器中进行长期缓存,相当于每次访问都需要重新通过网络加载所有模型资源;
+```ts
+ let res = await fetch('https://object.orillusion.com/model/{model_id}/scene.gltf?cdn_sign={signature}')
+ let gltf = await res.json()
+```
+2. 可以修改链接 url 的 `path` 部分进行修改,例如:`https://object.orillusion.com/model/{model_id}/{signature}/scene.gltf`。这种形式可以保持目录的统一,方便加载模型同目录下的其他依赖文件;同样,因为签名是临时生成的,每次请求的链接地址都会不相同,所以无法长期在浏览器中进行缓存;
+```ts
+ let res = await fetch('https://object.orillusion.com/model/{model_id}/{signature}/scene.gltf')
+ let gltf = await res.json()
+```
+3. 可以对访问请求添加自定义 header: `x-cdn-sign` 进行鉴权访问模型。由于 url 链接不会改变,所以浏览器可以长期保持本地缓存,大幅降低二次加载的时间和流量,例如:
+```ts
+ let res = await fetch('https://object.orillusion.com/model/{model_id}/scene.gltf', {
+ headers:{
+ cdn_sign: "{signature}"
+ }
+ })
+ let gltf = await res.json()
+```
+
+* `gltf` 文件只是模型的入口文件,通常还需要加载相关的贴图等文件资源,需要对每一个请求都添加 `signature` 鉴权信息后才可以加载完整的模型。我们以 `Engine3D.res.loadGltf` 为例,用户可以设置 `onUrl` 回调或 `headers` 参数来动态加载 `gltf` 同目录的后续资源
+```ts
+// 以 url query 形式进行鉴权
+let model = await Engine3D.res.loadGltf('https://object.orillusion.com/model/{model_id}/scene.gltf', {
+ onUrl: url => url + '?cdn_sign={signature}'
+})
+// 以 header 形式进行鉴权
+let model = await Engine3D.res.loadGltf('https://object.orillusion.com/model/{model_id}/scene.gltf', {
+ headers: {
+ cdn_sign: "{signature}"
+ }
+})
+// 直接以 url path 形式进行鉴权
+let model = await Engine3D.res.loadGltf('https://object.orillusion.com/model/{model_id}/{signature}/scene.gltf')
+```
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* no model:模型不存在
+* model is not upload yet:模型文件未上传
+* no auth:没有权限
+
+## 获取模型信息
+获取一个模型对象的详细信息
+
+**请求地址:**
+
+/api/model/:model_id
+
+**params:**
+| 参数名 | 描述 |
+| :----: | :----: |
+| model_id | 模型的_id |
+
+**请求方法:**
+
+GET
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+
+无
+
+**响应参数:**
+请参考 [model结构](/cdn/models.html#model结构:) 说明
+
+
+**失败返回:**
+
+无
+
+**示例:**
+```
+curl -H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' -X GET 'https://3dhub.orillusion.com/api/model/model_id'
+```
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* no model:模型不存在
+* no auth:没有权限
+
+## 更新模型
+更新一个模型的信息
+
+**请求地址:**
+
+/api/model/:model_id
+
+**params:**
+| 参数名 | 描述 |
+| :----: | :----: |
+| model_id | 模型的_id |
+
+**请求方法:**
+
+PUT
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+| 参数名 | 类型 | 描述 | 必填 |
+| :----: | :----: |:----: |:----: |
+| name | string | 模型名称 | 选填 |
+| des | string | 模型描述 | 选填 |
+| tags | array | 标签列表 | 选填 |
+| screenshot | string | 封面地址 | 选填 |
+
+**响应参数:**
+
+请参考[model结构](/cdn/models.html#model结构:)说明
+
+**失败返回:**
+
+无
+
+**示例:**
+```
+curl -H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' --data-binary '{“name”:"新的名称","des":"新的简介"}' -X PUT 'https://3dhub.orillusion.com/api/model/model_id'
+```
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* no model:模型不存在
+* no auth:没有权限
+
+## 获取模型下载地址
+获取一个模型下载地址
+
+**请求地址:**
+
+/api/download/:model_id
+
+**params:**
+| 参数名 | 描述 |
+| :----: | :----: |
+| model_id | 模型的_id |
+
+**请求方法:**
+
+GET
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+| 参数名 | 类型 | 描述 | 必填 |
+| :----: | :----: |:----: |:----: |
+| expires | number | 下载网址过期时间,单位:秒,范围200秒至1小时,默认200秒 | 选填 |
+
+**响应参数:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| url | string | 用于下载的网址 |
+
+**失败返回:**
+
+无
+
+**示例:**
+```
+curl -H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' -X GET 'https://3dhub.orillusion.com/api/model/download/model_id'
+```
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* no model:模型不存在
+* no auth:没有权限
+
+### 删除模型
+删除一个模型
+
+**请求地址:**
+
+/api/model/:model_id
+
+**params:**
+| 参数名 | 描述 |
+| :----: | :----: |
+| model_id | 模型的_id |
+
+**请求方法:**
+
+DELETE
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+
+无
+
+**响应参数:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| msg | string | 成功返回:done |
+
+
+**失败返回:**
+
+无
+
+**示例:**
+```
+curl -H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' -X DELETE 'https://3dhub.orillusion.com/api/model/model_id'
+```
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* no model:模型不存在
+* no auth:没有权限
+
+## 查询模型状态
+查询模型文件在云存储中的处理情况
+
+**请求地址:**
+
+/api/check/:model_id
+
+**params:**
+| 参数名 | 描述 |
+| :----: | :----: |
+| model_id | 模型的_id |
+
+**请求方法:**
+
+GET
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+
+无
+
+
+**响应参数:**
+
+请参考 [model结构](/cdn/models.html#model结构:) 说明
+
+**失败返回:**
+
+无
+
+**示例:**
+```
+curl -H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' -X GET 'https://3dhub.orillusion.com/api/check/model_id'
+```
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* no model:模型不存在
+* no auth:没有权限
+* on progressing:处理中
+
+## 生成模型封面地址
+生成用于上传模型封面的地址
+
+**请求地址:**
+
+/api/screenshot/:model_id
+
+**params:**
+| 参数名 | 描述 |
+| :----: | :----: |
+| model_id | 模型的_id |
+
+**请求方法:**
+
+POST
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+
+无
+
+**响应参数:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| uploadUrl | string | 用于上传文件的url |
+| url | string | 可访问地址 |
+
+**使用说明:**
+* 每个模型只可以设置一个封面图片,新的上传会覆盖之前的封面图片;
+* 调用该接口获得的 uploadUrl 用于上传文件地址,上传方法:
+```ts
+// 1. 申请创建新的截图
+let req = await fetch('https://3dhub.orillusion.com/api/screenshot/xxxx', {
+ method: 'POST',
+ headers: {
+ 'x-orillusion-id': accessId,
+ 'x-orillusion-token': token,
+ 'Content-Type': 'application/json'
+ },
+ credentials: 'include',
+ mode: 'cors'
+})
+// 返回截图地址和上传地址
+let {uploadUrl, url} = await req.json()
+
+// 2. 客户端使用 uploadUrl 地址上传截图文件
+let req = await fetch(uploadUrl, {
+ method: 'PUT',
+ body: screenshot, // Blob 或 File
+ headers: {
+ 'Cache-Control': 'public, max-age=31536000' // 必填
+ }
+})
+await req.json() // 等待上传完成
+```
+**失败返回:**
+
+无
+
+**示例:**
+```
+curl -H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' -X POST 'https://3dhub.orillusion.com/api/screenshot/model_id'
+```
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* no model:模型不存在
+* no auth:没有权限
\ No newline at end of file
diff --git a/docs/cdn/scenes.md b/docs/cdn/scenes.md
new file mode 100644
index 00000000..a5d65e66
--- /dev/null
+++ b/docs/cdn/scenes.md
@@ -0,0 +1,215 @@
+---
+editLink: false
+---
+
+# 场景 API
+本节主要包含配置信息的读取与更新
+
+## 获取配置
+获取一个模型文件的配置信息
+
+**请求地址:**
+
+/api/scene/:model_id
+
+**params:**
+| 参数名 | 描述 |
+| :----: | :----: |
+| model_id | 模型的_id |
+
+**请求方法:**
+
+GET
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+
+无
+
+**响应参数:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| scene | object | 配置信息 |
+
+#### **scene结构:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| scene | object | 场景信息 |
+| camera | object | 相机信息 |
+| model | object | 变换信息 |
+| lights | object[] | 光源信息 |
+| shadow | object | 阴影信息 |
+| globalFog | object | 雾信息 |
+| bloomPost | object | 辉光特效信息 |
+| gi | object | 全局光照信息 |
+
+#### **scene**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| exposure | number | 曝光 |
+| roughness | number | 背景模糊 |
+| floor | boolean | 是否显示地板 |
+| bgColor | string | 场景背景纯色 |
+| bgSkyUrl | string | 天空盒背景合景图 |
+
+#### **camera**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| fov | number | FoV |
+| x | number | 相机x坐标 |
+| y | number | 相机y坐标 |
+| z | number | 相机z坐标 |
+| targetX | number | 相机控制器目标对象x坐标 |
+| targetY | number | 相机控制器目标对象y坐标 |
+| targetZ | number | 相机控制器目标对象z坐标 |
+
+#### **model**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| x | number | 模型x坐标 |
+| y | number | 模型y坐标 |
+| z | number | 模型z坐标 |
+| rotationX | number | 模型在x方向上的旋转 |
+| rotationY | number | 模型在y方向上的旋转 |
+| rotationZ | number | 模型在z方向上的旋转 |
+| scaleX | number | 模型在x方向上的缩放 |
+| scaleY | number | 模型在y方向上的缩放 |
+| scaleZ | number | 模型在z方向上的缩放 |
+
+#### **light**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| enable | boolean | 是否启用该光照组件 |
+| type | number | 光源类型,0:未知,1:点光源,2:平行光,3:聚光灯 |
+| x | number | 光源的x坐标 |
+| y | number | 光源的x坐标 |
+| z | number | 光源的x坐标 |
+| rotationX | number | 光源在x方向上的旋转 |
+| rotationY | number | 光源在y方向上的旋转 |
+| rotationZ | number | 光源在z方向上的旋转 |
+| castShadow | boolean | 是否产生阴影,目前仅平行光有效 |
+| intensity | number | 光源强度 |
+| color | string | 光源颜色,rgb格式 |
+| at | number | 光照指数衰减系数 |
+| radius | number | 光照半径 |
+| range | number | 光照最远距离 |
+| innerAngle | number | 光锥内切角,聚光在小于这个角度的范围内有光线 |
+| outerAngle | number | 光锥外切角,光线会在内切角到外切角的范围内逐步衰减到0 |
+
+#### **shadow**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| enable | boolean | 是否启用阴影 |
+| shadowBias | number | 阴影偏移值,一般设置一个小数值的偏移量可以避免阴影失真,减少条纹或波纹图案 |
+| shadowBound | number | 阴影区域范围 |
+| shadowNear | number | 阴影近截面 |
+| shadowFar | number | 阴影远截面 |
+
+#### **globalFog**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| enable | boolean | 是否启用 |
+| fogType | number | 雾的类型:线性:Liner 0 ,指数:Exp 1,指数平方: Exp2: 2 |
+| start | number | 设定物体距离相机为distance,则在start和end区间内,雾的浓度被线性插值 |
+| end | number | 设定物体距离相机为distance,则在start和end区间内,雾的浓度被线性插值 |
+| height | number | 设置高度对雾的影响 |
+| density | number | 指数/指数平方雾类型下,雾浓度系数加成 |
+| ins | number | 设置高度对于雾的影响(与height共同作用) |
+| fogColorHex | number | 雾的颜色 |
+
+#### **bloomPost**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| enable | boolean | 是否启用 |
+| `downSampleStep` | `number` | 下采样次数 |
+| `downSampleBlurSize` | `number` | 下采样模糊范围 |
+| `downSampleBlurSigma` | `number` | 下采样模糊计算指数 |
+| `upSampleBlurSize` | `number` | 上采样次数 |
+| `upSampleBlurSigma` | `number` | 上采样模糊范围 |
+| `luminanceThreshole` | `number` | Bloom高亮区域阈值 |
+| `bloomIntensity` | `boolean` | Bloom最终亮度加成系数 |
+
+#### **gi**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| enable | boolean | 是否启用 |
+| indirectIntensity | number | 间接光的光照强度 |
+| bounceIntensity | number | 反射光的光照强度 |
+
+
+**失败返回:**
+| 参数名 | 类型 | 描述 |
+| :----: | :----: |:----: |
+| 无 | string | 错误描述 |
+
+**示例:**
+```
+curl-H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' -X GET 'https://3dhub.orillusion.com/api/scene/model_id'
+```
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* no model:没有模型
+* no auth:没有权限
+
+## 更新配置
+更新一个模型文件对应的配置信息
+
+**请求地址:**
+
+/api/scene/:model_id
+
+**params:**
+| 参数名 | 描述 |
+| :----: | :----: |
+| model_id | 模型的_id |
+
+**请求方法:**
+
+PUT
+
+**请求头:**
+
+请参照[公共请求头](/cdn/index.html#公共请求头)。
+
+**请求参数:**
+| 参数名 | 类型 | 描述 | 必填 |
+| :----: | :----: |:----: |:----: |
+| scene | object | 场景信息,请参考 [scene结构](#scene) | 选填 |
+| camera | object | 相机信息,请参考 [camera结构](#camera) | 选填 |
+| model | object | 模型信息,请参考 [model结构](#model) | 选填 |
+| lights | object[] | 光源信息,请参考 [lights结构](#lights) | 选填 |
+| shadow | object | 阴影信息,请参考 [shadow结构](#shadow) | 选填 |
+| render | object | 渲染信息,请参考 [render结构](#render) | 选填 |
+| globalFog | object | 雾信息,请参考 [globalFog结构](#globalfog) | 选填 |
+| bloomPost | object | 辉光特效信息,请参考 [bloomPost结构](#bloompost) | 选填 |
+| gi | object | 全局光照信息,请参考 [gi结构](#gi) | 选填 |
+
+**响应参数:**
+
+请参照配置信息结构
+
+
+**失败返回:**
+无
+
+**示例:**
+```
+curl-H 'Content-Type: application/json' -H 'x-orillusion-id:accessId' -H 'x-orillusion-token:token' --data-binary '{"model":"{x:10,y:10,z:10}"}' -X PUT 'https://3dhub.orillusion.com/api/scene/model_id'
+```
+
+**错误提示:**
+
+状态码
+* 403
+
+错误内容
+* no model:模型不存在
+* no auth:没有权限
\ No newline at end of file
diff --git a/docs/example/animation/CurveAnimation.md b/docs/example/animation/CurveAnimation.md
new file mode 100644
index 00000000..07ac8190
--- /dev/null
+++ b/docs/example/animation/CurveAnimation.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# CurveAnimation
+---
+
+
+<<< @/public/examples/animation/CurveAnimation.ts
\ No newline at end of file
diff --git a/docs/example/animation/MorphTarget.md b/docs/example/animation/MorphTarget.md
new file mode 100644
index 00000000..4e45612e
--- /dev/null
+++ b/docs/example/animation/MorphTarget.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# MorphTarget
+---
+
+
+<<< @/public/examples/animation/MorphTarget.ts
\ No newline at end of file
diff --git a/docs/example/animation/PropertyAnimation.md b/docs/example/animation/PropertyAnimation.md
new file mode 100644
index 00000000..25d52114
--- /dev/null
+++ b/docs/example/animation/PropertyAnimation.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# PropertyAnimation
+---
+
+
+<<< @/public/examples/animation/PropertyAnimation.ts
\ No newline at end of file
diff --git a/docs/example/animation/Skeleton.md b/docs/example/animation/Skeleton.md
new file mode 100644
index 00000000..89bacb9b
--- /dev/null
+++ b/docs/example/animation/Skeleton.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# Skeleton
+---
+
+
+<<< @/public/examples/animation/Skeleton.ts
\ No newline at end of file
diff --git a/docs/example/animation/Skeleton2.md b/docs/example/animation/Skeleton2.md
new file mode 100644
index 00000000..c0bf6524
--- /dev/null
+++ b/docs/example/animation/Skeleton2.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# Skeleton2
+---
+
+
+<<< @/public/examples/animation/Skeleton2.ts
\ No newline at end of file
diff --git a/docs/example/animation/Skeleton3.md b/docs/example/animation/Skeleton3.md
new file mode 100644
index 00000000..ee0e54f0
--- /dev/null
+++ b/docs/example/animation/Skeleton3.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# Skeleton3
+---
+
+
+<<< @/public/examples/animation/Skeleton3.ts
\ No newline at end of file
diff --git a/docs/example/base/AddRemove.md b/docs/example/base/AddRemove.md
new file mode 100644
index 00000000..b120a83e
--- /dev/null
+++ b/docs/example/base/AddRemove.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# AddRemove
+---
+
+
+<<< @/public/examples/base/AddRemove.ts
\ No newline at end of file
diff --git a/docs/example/base/BoundingBox.md b/docs/example/base/BoundingBox.md
new file mode 100644
index 00000000..f560e8ed
--- /dev/null
+++ b/docs/example/base/BoundingBox.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# BoundingBox
+---
+
+
+<<< @/public/examples/base/BoundingBox.ts
\ No newline at end of file
diff --git a/docs/example/base/ComponentLifeCycle.md b/docs/example/base/ComponentLifeCycle.md
new file mode 100644
index 00000000..c1d31e94
--- /dev/null
+++ b/docs/example/base/ComponentLifeCycle.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# ComponentLifeCycle
+---
+
+
+<<< @/public/examples/base/ComponentLifeCycle.ts
\ No newline at end of file
diff --git a/docs/example/base/Transform.md b/docs/example/base/Transform.md
new file mode 100644
index 00000000..46fcf607
--- /dev/null
+++ b/docs/example/base/Transform.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# Transform
+---
+
+
+<<< @/public/examples/base/Transform.ts
\ No newline at end of file
diff --git a/docs/example/benchmark/DrawCall.md b/docs/example/benchmark/DrawCall.md
new file mode 100644
index 00000000..3e6cba1e
--- /dev/null
+++ b/docs/example/benchmark/DrawCall.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# DrawCall
+---
+
+
+<<< @/public/examples/benchmark/DrawCall.ts
\ No newline at end of file
diff --git a/docs/example/benchmark/InstanceDraw.md b/docs/example/benchmark/InstanceDraw.md
new file mode 100644
index 00000000..af24c573
--- /dev/null
+++ b/docs/example/benchmark/InstanceDraw.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# InstanceDraw
+---
+
+
+<<< @/public/examples/benchmark/InstanceDraw.ts
\ No newline at end of file
diff --git a/docs/example/benchmark/InstanceDraw2.md b/docs/example/benchmark/InstanceDraw2.md
new file mode 100644
index 00000000..07af68fc
--- /dev/null
+++ b/docs/example/benchmark/InstanceDraw2.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# InstanceDraw
+---
+
+
+<<< @/public/examples/benchmark/InstanceDraw2.ts
\ No newline at end of file
diff --git a/docs/example/compute/Cloth.md b/docs/example/compute/Cloth.md
new file mode 100644
index 00000000..4a941eb2
--- /dev/null
+++ b/docs/example/compute/Cloth.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# Cloth
+---
+
+
+<<< @/public/examples/compute/cloth.ts
\ No newline at end of file
diff --git a/docs/example/compute/Flame.md b/docs/example/compute/Flame.md
new file mode 100644
index 00000000..49daaaf4
--- /dev/null
+++ b/docs/example/compute/Flame.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# Flame
+---
+
+
+<<< @/public/examples/compute/flame.ts
\ No newline at end of file
diff --git a/docs/example/compute/Flow.md b/docs/example/compute/Flow.md
new file mode 100644
index 00000000..ba492cd3
--- /dev/null
+++ b/docs/example/compute/Flow.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# Flow
+---
+
+
+<<< @/public/examples/compute/flow.ts
\ No newline at end of file
diff --git a/docs/example/compute/FlowImage.md b/docs/example/compute/FlowImage.md
new file mode 100644
index 00000000..0bb4d694
--- /dev/null
+++ b/docs/example/compute/FlowImage.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# FlowImage
+---
+
+
+<<< @/public/examples/compute/flowimg.ts
\ No newline at end of file
diff --git a/docs/example/compute/Fluid.md b/docs/example/compute/Fluid.md
new file mode 100644
index 00000000..c54adb31
--- /dev/null
+++ b/docs/example/compute/Fluid.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# Fluid
+---
+
+
+<<< @/public/examples/compute/fluid.ts
\ No newline at end of file
diff --git a/docs/example/compute/SoftBody.md b/docs/example/compute/SoftBody.md
new file mode 100644
index 00000000..4986e983
--- /dev/null
+++ b/docs/example/compute/SoftBody.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# SoftBody
+---
+
+
+<<< @/public/examples/compute/softbody.ts
\ No newline at end of file
diff --git a/docs/example/geometry/ConduitGeometry.md b/docs/example/geometry/ConduitGeometry.md
new file mode 100644
index 00000000..40a07f97
--- /dev/null
+++ b/docs/example/geometry/ConduitGeometry.md
@@ -0,0 +1,8 @@
+---
+aside: false
+---
+# ConduitGeometry
+---
+
+
+<<< @/public/examples/geometry/ConduitGeometry.ts
\ No newline at end of file
diff --git a/docs/example/geometry/ConduitGeometry2.md b/docs/example/geometry/ConduitGeometry2.md
new file mode 100644
index 00000000..fc80dabb
--- /dev/null
+++ b/docs/example/geometry/ConduitGeometry2.md
@@ -0,0 +1,8 @@
+---
+aside: false
+---
+# ConduitGeometry2
+---
+
+
+<<< @/public/examples/geometry/ConduitGeometry2.ts
\ No newline at end of file
diff --git a/docs/example/geometry/ConduitGeometry3.md b/docs/example/geometry/ConduitGeometry3.md
new file mode 100644
index 00000000..624b12ae
--- /dev/null
+++ b/docs/example/geometry/ConduitGeometry3.md
@@ -0,0 +1,8 @@
+---
+aside: false
+---
+# ConduitGeometry3
+---
+
+
+<<< @/public/examples/geometry/ConduitGeometry3.ts
\ No newline at end of file
diff --git a/docs/example/geometry/CustomGeometry.md b/docs/example/geometry/CustomGeometry.md
new file mode 100644
index 00000000..95eed82f
--- /dev/null
+++ b/docs/example/geometry/CustomGeometry.md
@@ -0,0 +1,8 @@
+---
+aside: false
+---
+# CustomGeometry
+---
+
+
+<<< @/public/examples/geometry/CustomGeometry.ts
\ No newline at end of file
diff --git a/docs/example/geometry/ExtrudeGeometry.md b/docs/example/geometry/ExtrudeGeometry.md
new file mode 100644
index 00000000..9da63602
--- /dev/null
+++ b/docs/example/geometry/ExtrudeGeometry.md
@@ -0,0 +1,8 @@
+---
+aside: false
+---
+# Terrain
+---
+
+
+<<< @/public/examples/geometry/ExtrudeGeometry.ts
\ No newline at end of file
diff --git a/docs/example/geometry/GrassGeometry.md b/docs/example/geometry/GrassGeometry.md
new file mode 100644
index 00000000..d1df38c1
--- /dev/null
+++ b/docs/example/geometry/GrassGeometry.md
@@ -0,0 +1,8 @@
+---
+aside: false
+---
+# Grass
+---
+
+
+<<< @/public/examples/geometry/GrassGeometry.ts
\ No newline at end of file
diff --git a/docs/example/geometry/InternalGeometry.md b/docs/example/geometry/InternalGeometry.md
new file mode 100644
index 00000000..79acdeb8
--- /dev/null
+++ b/docs/example/geometry/InternalGeometry.md
@@ -0,0 +1,8 @@
+---
+aside: false
+---
+# InternalGeometry
+---
+
+
+<<< @/public/examples/geometry/InternalGeometry.ts
\ No newline at end of file
diff --git a/docs/example/geometry/TerrainGeometry.md b/docs/example/geometry/TerrainGeometry.md
new file mode 100644
index 00000000..cbb8bf6a
--- /dev/null
+++ b/docs/example/geometry/TerrainGeometry.md
@@ -0,0 +1,8 @@
+---
+aside: false
+---
+# Terrain
+---
+
+
+<<< @/public/examples/geometry/TerrainGeometry.ts
\ No newline at end of file
diff --git a/docs/example/geometry/TextGeometry.md b/docs/example/geometry/TextGeometry.md
new file mode 100644
index 00000000..840ae06f
--- /dev/null
+++ b/docs/example/geometry/TextGeometry.md
@@ -0,0 +1,8 @@
+---
+aside: false
+---
+# Terrain
+---
+
+
+<<< @/public/examples/geometry/TextGeometry.ts
\ No newline at end of file
diff --git a/docs/example/geometry/VertexAnimation.md b/docs/example/geometry/VertexAnimation.md
new file mode 100644
index 00000000..1bd553ba
--- /dev/null
+++ b/docs/example/geometry/VertexAnimation.md
@@ -0,0 +1,8 @@
+---
+aside: false
+---
+# VertexAnimation
+---
+
+
+<<< @/public/examples/geometry/VertexAnimation.ts
\ No newline at end of file
diff --git a/docs/example/gi/GICornellBox.md b/docs/example/gi/GICornellBox.md
new file mode 100644
index 00000000..2b3f1517
--- /dev/null
+++ b/docs/example/gi/GICornellBox.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# GICornellBox
+---
+
+
+<<< @/public/examples/gi/GICornellBox.ts
\ No newline at end of file
diff --git a/docs/example/graphic/DrawMeshLine.md b/docs/example/graphic/DrawMeshLine.md
new file mode 100644
index 00000000..2c6a7d8f
--- /dev/null
+++ b/docs/example/graphic/DrawMeshLine.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# Draw Mesh Line
+---
+
+
+<<< @/public/examples/graphic/DrawMeshLine.ts
\ No newline at end of file
diff --git a/docs/example/graphic/GraphicLine.md b/docs/example/graphic/GraphicLine.md
new file mode 100644
index 00000000..06662f3d
--- /dev/null
+++ b/docs/example/graphic/GraphicLine.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# GraphicLine
+---
+
+
+<<< @/public/examples/graphic/GraphicLine.ts
\ No newline at end of file
diff --git a/docs/example/graphic/GraphicMesh.md b/docs/example/graphic/GraphicMesh.md
new file mode 100644
index 00000000..e076311d
--- /dev/null
+++ b/docs/example/graphic/GraphicMesh.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# GraphicMesh
+---
+
+
+<<< @/public/examples/graphic/GraphicMesh.ts
\ No newline at end of file
diff --git a/docs/example/graphic/GraphicMesh2.md b/docs/example/graphic/GraphicMesh2.md
new file mode 100644
index 00000000..87df32ff
--- /dev/null
+++ b/docs/example/graphic/GraphicMesh2.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# GraphicMesh2
+---
+
+
+<<< @/public/examples/graphic/GraphicMesh2.ts
\ No newline at end of file
diff --git a/docs/example/graphic/Shape3D.md b/docs/example/graphic/Shape3D.md
new file mode 100644
index 00000000..b1128a4d
--- /dev/null
+++ b/docs/example/graphic/Shape3D.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# Shape3D
+---
+
+
+<<< @/public/examples/graphic/Shape3D.ts
\ No newline at end of file
diff --git a/docs/example/graphic/Shape3DPath.md b/docs/example/graphic/Shape3DPath.md
new file mode 100644
index 00000000..8622b76e
--- /dev/null
+++ b/docs/example/graphic/Shape3DPath.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# Shape3DPath
+---
+
+
+<<< @/public/examples/graphic/Path.ts
\ No newline at end of file
diff --git a/docs/example/gui/POI.md b/docs/example/gui/POI.md
new file mode 100644
index 00000000..e383d9bc
--- /dev/null
+++ b/docs/example/gui/POI.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# POI
+---
+
+
+<<< @/public/examples/gui/POI.ts
\ No newline at end of file
diff --git a/docs/example/gui/UIButton.md b/docs/example/gui/UIButton.md
new file mode 100644
index 00000000..0974ba1d
--- /dev/null
+++ b/docs/example/gui/UIButton.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UIButton
+---
+
+
+<<< @/public/examples/gui/UIButton.ts
\ No newline at end of file
diff --git a/docs/example/gui/UIChangeParent.md b/docs/example/gui/UIChangeParent.md
new file mode 100644
index 00000000..9ca98310
--- /dev/null
+++ b/docs/example/gui/UIChangeParent.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UIChangeParent
+---
+
+
+<<< @/public/examples/gui/UIChangeParent.ts
\ No newline at end of file
diff --git a/docs/example/gui/UIImageColor.md b/docs/example/gui/UIImageColor.md
new file mode 100644
index 00000000..9b4dc0f1
--- /dev/null
+++ b/docs/example/gui/UIImageColor.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UIImageColor
+---
+
+
+<<< @/public/examples/gui/UIImageColor.ts
\ No newline at end of file
diff --git a/docs/example/gui/UIImageGroup.md b/docs/example/gui/UIImageGroup.md
new file mode 100644
index 00000000..bd5818c4
--- /dev/null
+++ b/docs/example/gui/UIImageGroup.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UIImageGroup
+---
+
+
+<<< @/public/examples/gui/UIImageGroup.ts
\ No newline at end of file
diff --git a/docs/example/gui/UIImageShadow.md b/docs/example/gui/UIImageShadow.md
new file mode 100644
index 00000000..ff7435a6
--- /dev/null
+++ b/docs/example/gui/UIImageShadow.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UIImageShadow
+---
+
+
+<<< @/public/examples/gui/UIImageShadow.ts
\ No newline at end of file
diff --git a/docs/example/gui/UIMultiCanvas.md b/docs/example/gui/UIMultiCanvas.md
new file mode 100644
index 00000000..c4855352
--- /dev/null
+++ b/docs/example/gui/UIMultiCanvas.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UIMultiCanvas
+---
+
+
+<<< @/public/examples/gui/UIMultiCanvas.ts
\ No newline at end of file
diff --git a/docs/example/gui/UIMultiPanel.md b/docs/example/gui/UIMultiPanel.md
new file mode 100644
index 00000000..cfed82fc
--- /dev/null
+++ b/docs/example/gui/UIMultiPanel.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UIMultiPanel
+---
+
+
+<<< @/public/demos/gui/demo.ts
\ No newline at end of file
diff --git a/docs/example/gui/UIPanelOrder.md b/docs/example/gui/UIPanelOrder.md
new file mode 100644
index 00000000..73a72633
--- /dev/null
+++ b/docs/example/gui/UIPanelOrder.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UIPanelOrder
+---
+
+
+<<< @/public/examples/gui/UIPanelOrder.ts
\ No newline at end of file
diff --git a/docs/example/gui/UIPanelScissor.md b/docs/example/gui/UIPanelScissor.md
new file mode 100644
index 00000000..330c9bc2
--- /dev/null
+++ b/docs/example/gui/UIPanelScissor.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UIPanelScissor
+---
+
+
+<<< @/public/examples/gui/UIPanelScissor.ts
\ No newline at end of file
diff --git a/docs/example/gui/UIPerformance.md b/docs/example/gui/UIPerformance.md
new file mode 100644
index 00000000..11ea6e78
--- /dev/null
+++ b/docs/example/gui/UIPerformance.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UIPerformance
+---
+
+
+<<< @/public/examples/gui/UIPerformance.ts
\ No newline at end of file
diff --git a/docs/example/gui/UIPerformance2.md b/docs/example/gui/UIPerformance2.md
new file mode 100644
index 00000000..54625cf2
--- /dev/null
+++ b/docs/example/gui/UIPerformance2.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UIPerformance2
+---
+
+
+<<< @/public/examples/gui/UIPerformance2.ts
\ No newline at end of file
diff --git a/docs/example/gui/UISingleImage.md b/docs/example/gui/UISingleImage.md
new file mode 100644
index 00000000..594289d3
--- /dev/null
+++ b/docs/example/gui/UISingleImage.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UISingleImage
+---
+
+
+<<< @/public/examples/gui/UISingleImage.ts
\ No newline at end of file
diff --git a/docs/example/gui/UISpriteSheet.md b/docs/example/gui/UISpriteSheet.md
new file mode 100644
index 00000000..57f16af4
--- /dev/null
+++ b/docs/example/gui/UISpriteSheet.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UISpriteSheet
+---
+
+
+<<< @/public/examples/gui/UISpriteSheet.ts
\ No newline at end of file
diff --git a/docs/example/gui/UITextBarrage.md b/docs/example/gui/UITextBarrage.md
new file mode 100644
index 00000000..e11c983d
--- /dev/null
+++ b/docs/example/gui/UITextBarrage.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UITextBarrage
+---
+
+
+<<< @/public/examples/gui/UITextBarrage.ts
\ No newline at end of file
diff --git a/docs/example/gui/UITextField.md b/docs/example/gui/UITextField.md
new file mode 100644
index 00000000..1d6ce3c8
--- /dev/null
+++ b/docs/example/gui/UITextField.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UITextField
+---
+
+
+<<< @/public/examples/gui/UITextField.ts
\ No newline at end of file
diff --git a/docs/example/gui/UIVideo.md b/docs/example/gui/UIVideo.md
new file mode 100644
index 00000000..9b518635
--- /dev/null
+++ b/docs/example/gui/UIVideo.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UIVideo
+---
+
+
+<<< @/public/examples/gui/UIVideo.ts
\ No newline at end of file
diff --git a/docs/example/gui/UIVisible.md b/docs/example/gui/UIVisible.md
new file mode 100644
index 00000000..a9f8b678
--- /dev/null
+++ b/docs/example/gui/UIVisible.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UIVisible
+---
+
+
+<<< @/public/examples/gui/UIVisible.ts
\ No newline at end of file
diff --git a/docs/example/lights/AddRemovePointLight.md b/docs/example/lights/AddRemovePointLight.md
new file mode 100644
index 00000000..e4072748
--- /dev/null
+++ b/docs/example/lights/AddRemovePointLight.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# AddRemovePointLight
+---
+
+
+<<< @/public/examples/lights/AddRemovePointLight.ts
\ No newline at end of file
diff --git a/docs/example/lights/CSM.md b/docs/example/lights/CSM.md
new file mode 100644
index 00000000..48d175f3
--- /dev/null
+++ b/docs/example/lights/CSM.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# CSM
+---
+
+
+<<< @/public/examples/lights/CSM.ts
\ No newline at end of file
diff --git a/docs/example/lights/LightEnable.md b/docs/example/lights/LightEnable.md
new file mode 100644
index 00000000..79836704
--- /dev/null
+++ b/docs/example/lights/LightEnable.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# LightEnable
+---
+
+
+<<< @/public/examples/lights/LightEnable.ts
\ No newline at end of file
diff --git a/docs/example/lights/MovebleLight.md b/docs/example/lights/MovebleLight.md
new file mode 100644
index 00000000..72892092
--- /dev/null
+++ b/docs/example/lights/MovebleLight.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# MovebleLight
+---
+
+
+<<< @/public/examples/lights/MovebleLight.ts
\ No newline at end of file
diff --git a/docs/example/lights/PointLight.md b/docs/example/lights/PointLight.md
new file mode 100644
index 00000000..42a92df6
--- /dev/null
+++ b/docs/example/lights/PointLight.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# PointLight
+---
+
+
+<<< @/public/examples/lights/PointLight.ts
\ No newline at end of file
diff --git a/docs/example/loader/FlightHelmet.md b/docs/example/loader/FlightHelmet.md
new file mode 100644
index 00000000..4d57f6d9
--- /dev/null
+++ b/docs/example/loader/FlightHelmet.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# FlightHelmet
+---
+
+
+<<< @/public/examples/loader/FlightHelmet.ts
\ No newline at end of file
diff --git a/docs/example/loader/LoadGLB.md b/docs/example/loader/LoadGLB.md
new file mode 100644
index 00000000..3d1f6242
--- /dev/null
+++ b/docs/example/loader/LoadGLB.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# LoadGLB
+---
+
+
+<<< @/public/examples/loader/LoadGLB.ts
\ No newline at end of file
diff --git a/docs/example/material/ChangeMaterial.md b/docs/example/material/ChangeMaterial.md
new file mode 100644
index 00000000..dd6ecd4d
--- /dev/null
+++ b/docs/example/material/ChangeMaterial.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# ChangeMaterial
+---
+
+
+<<< @/public/examples/material/ChangeMaterial.ts
\ No newline at end of file
diff --git a/docs/example/material/ClearCoat.md b/docs/example/material/ClearCoat.md
new file mode 100644
index 00000000..a7604b72
--- /dev/null
+++ b/docs/example/material/ClearCoat.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# ClearCoat
+---
+
+
+<<< @/public/examples/material/ClearCoat.ts
\ No newline at end of file
diff --git a/docs/example/material/PBR.md b/docs/example/material/PBR.md
new file mode 100644
index 00000000..09ae4d12
--- /dev/null
+++ b/docs/example/material/PBR.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# PBR
+---
+
+
+<<< @/public/examples/material/PBR.ts
\ No newline at end of file
diff --git a/docs/example/material/PBRMaterial.md b/docs/example/material/PBRMaterial.md
new file mode 100644
index 00000000..ad2c17bf
--- /dev/null
+++ b/docs/example/material/PBRMaterial.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# PBRMaterial
+---
+
+
+<<< @/public/examples/material/PBRMaterial.ts
\ No newline at end of file
diff --git a/docs/example/material/UVMove.md b/docs/example/material/UVMove.md
new file mode 100644
index 00000000..f1fbc9db
--- /dev/null
+++ b/docs/example/material/UVMove.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UVMove
+---
+
+
+<<< @/public/examples/material/UVMove.ts
\ No newline at end of file
diff --git a/docs/example/material/UnlitMaterial.md b/docs/example/material/UnlitMaterial.md
new file mode 100644
index 00000000..cb413702
--- /dev/null
+++ b/docs/example/material/UnlitMaterial.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# UnlitMaterial
+---
+
+
+<<< @/public/examples/material/UnlitMaterial.ts
\ No newline at end of file
diff --git a/docs/example/material/VideoMaterial.md b/docs/example/material/VideoMaterial.md
new file mode 100644
index 00000000..bc38a00e
--- /dev/null
+++ b/docs/example/material/VideoMaterial.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# VideoMaterial
+---
+
+
+<<< @/public/examples/material/VideoMaterial.ts
\ No newline at end of file
diff --git a/docs/example/particle/CandleFlame.md b/docs/example/particle/CandleFlame.md
new file mode 100644
index 00000000..24805719
--- /dev/null
+++ b/docs/example/particle/CandleFlame.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# CandleFlame
+---
+
+
+<<< @/public/examples/particle/CandleFlame.ts
\ No newline at end of file
diff --git a/docs/example/physics/Cloth.md b/docs/example/physics/Cloth.md
new file mode 100644
index 00000000..54ab3562
--- /dev/null
+++ b/docs/example/physics/Cloth.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# Cloth
+---
+
+
+<<< @/public/examples/physics/Cloth.ts
\ No newline at end of file
diff --git a/docs/example/physics/Dominoes.md b/docs/example/physics/Dominoes.md
new file mode 100644
index 00000000..482a42eb
--- /dev/null
+++ b/docs/example/physics/Dominoes.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# Dominoes
+---
+
+
+<<< @/public/examples/physics/Dominoes.ts
\ No newline at end of file
diff --git a/docs/example/physics/EatBox.md b/docs/example/physics/EatBox.md
new file mode 100644
index 00000000..44c0905f
--- /dev/null
+++ b/docs/example/physics/EatBox.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# EatBox
+---
+
+
+<<< @/public/examples/physics/EatBox.ts
\ No newline at end of file
diff --git a/docs/example/physics/MultipleConstraints.md b/docs/example/physics/MultipleConstraints.md
new file mode 100644
index 00000000..1770afd8
--- /dev/null
+++ b/docs/example/physics/MultipleConstraints.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# MultipleConstraints
+---
+
+
+<<< @/public/examples/physics/MultipleConstraints.ts
\ No newline at end of file
diff --git a/docs/example/physics/MultipleShapes.md b/docs/example/physics/MultipleShapes.md
new file mode 100644
index 00000000..5296b576
--- /dev/null
+++ b/docs/example/physics/MultipleShapes.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# MultipleShapes
+---
+
+
+<<< @/public/examples/physics/MultipleShapes.ts
\ No newline at end of file
diff --git a/docs/example/physics/Physics01.md b/docs/example/physics/Physics01.md
new file mode 100644
index 00000000..30c74c74
--- /dev/null
+++ b/docs/example/physics/Physics01.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# Physics01
+---
+
+
+<<< @/public/examples/physics/Physics01.ts
\ No newline at end of file
diff --git a/docs/example/physics/PhysicsBox.md b/docs/example/physics/PhysicsBox.md
new file mode 100644
index 00000000..cf6764de
--- /dev/null
+++ b/docs/example/physics/PhysicsBox.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# PhysicsBox
+---
+
+
+<<< @/public/examples/physics/PhysicsBox.ts
\ No newline at end of file
diff --git a/docs/example/physics/PhysicsCar.md b/docs/example/physics/PhysicsCar.md
new file mode 100644
index 00000000..e5e66cfb
--- /dev/null
+++ b/docs/example/physics/PhysicsCar.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# PhysicsCar
+---
+
+
+<<< @/public/examples/physics/PhysicsCar.ts
\ No newline at end of file
diff --git a/docs/example/physics/Rope.md b/docs/example/physics/Rope.md
new file mode 100644
index 00000000..34cb431a
--- /dev/null
+++ b/docs/example/physics/Rope.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# Rope
+---
+
+
+<<< @/public/examples/physics/Rope.ts
\ No newline at end of file
diff --git a/docs/example/physics/ShootBox.md b/docs/example/physics/ShootBox.md
new file mode 100644
index 00000000..6e021abc
--- /dev/null
+++ b/docs/example/physics/ShootBox.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# ShootBox
+---
+
+
+<<< @/public/examples/physics/ShootBox.ts
\ No newline at end of file
diff --git a/docs/example/physics/dofSpringConstraint.md b/docs/example/physics/dofSpringConstraint.md
new file mode 100644
index 00000000..5d028a8b
--- /dev/null
+++ b/docs/example/physics/dofSpringConstraint.md
@@ -0,0 +1,9 @@
+---
+aside: false
+---
+
+# dofSpringConstraint
+---
+
+
+<<< @/public/examples/physics/dofSpringConstraint.ts
\ No newline at end of file
diff --git a/docs/geometry/classes/CubicBezierCurve2D.md b/docs/geometry/classes/CubicBezierCurve2D.md
new file mode 100644
index 00000000..5e20f7e3
--- /dev/null
+++ b/docs/geometry/classes/CubicBezierCurve2D.md
@@ -0,0 +1,197 @@
+# Class: CubicBezierCurve2D
+
+## Hierarchy
+
+- [`Curve2D`](Curve2D.md)
+
+ ↳ **`CubicBezierCurve2D`**
+
+### Constructors
+
+- [constructor](CubicBezierCurve2D.md#constructor)
+
+### Properties
+
+- [v0](CubicBezierCurve2D.md#v0)
+- [v1](CubicBezierCurve2D.md#v1)
+- [v2](CubicBezierCurve2D.md#v2)
+- [v3](CubicBezierCurve2D.md#v3)
+- [curveType](CubicBezierCurve2D.md#curvetype)
+
+### Accessors
+
+- [points](CubicBezierCurve2D.md#points)
+
+### Methods
+
+- [getPoint](CubicBezierCurve2D.md#getpoint)
+- [copyFrom](CubicBezierCurve2D.md#copyfrom)
+- [getPoints](CubicBezierCurve2D.md#getpoints)
+
+## Constructors
+
+### constructor
+
+• **new CubicBezierCurve2D**(`v0`, `v1`, `v2`, `v3`): [`CubicBezierCurve2D`](CubicBezierCurve2D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v0` | `Vector2` |
+| `v1` | `Vector2` |
+| `v2` | `Vector2` |
+| `v3` | `Vector2` |
+
+#### Returns
+
+[`CubicBezierCurve2D`](CubicBezierCurve2D.md)
+
+#### Overrides
+
+[Curve2D](Curve2D.md).[constructor](Curve2D.md#constructor)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/CubicBezierCurve2D.ts:10](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/CubicBezierCurve2D.ts#L10)
+
+## Properties
+
+### v0
+
+• **v0**: `Vector2`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/CubicBezierCurve2D.ts:5](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/CubicBezierCurve2D.ts#L5)
+
+___
+
+### v1
+
+• **v1**: `Vector2`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/CubicBezierCurve2D.ts:6](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/CubicBezierCurve2D.ts#L6)
+
+___
+
+### v2
+
+• **v2**: `Vector2`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/CubicBezierCurve2D.ts:7](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/CubicBezierCurve2D.ts#L7)
+
+___
+
+### v3
+
+• **v3**: `Vector2`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/CubicBezierCurve2D.ts:8](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/CubicBezierCurve2D.ts#L8)
+
+___
+
+### curveType
+
+• **curveType**: [`CurveType`](../enums/CurveType.md)
+
+#### Inherited from
+
+[Curve2D](Curve2D.md).[curveType](Curve2D.md#curvetype)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts:11](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts#L11)
+
+## Accessors
+
+### points
+
+• `get` **points**(): `Vector2`[]
+
+#### Returns
+
+`Vector2`[]
+
+#### Overrides
+
+Curve2D.points
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/CubicBezierCurve2D.ts:18](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/CubicBezierCurve2D.ts#L18)
+
+## Methods
+
+### getPoint
+
+▸ **getPoint**(`t`, `result?`): `Vector2`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `t` | `number` |
+| `result` | `Vector2` |
+
+#### Returns
+
+`Vector2`
+
+#### Overrides
+
+[Curve2D](Curve2D.md).[getPoint](Curve2D.md#getpoint)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/CubicBezierCurve2D.ts:22](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/CubicBezierCurve2D.ts#L22)
+
+___
+
+### copyFrom
+
+▸ **copyFrom**(`other`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `other` | [`CubicBezierCurve2D`](CubicBezierCurve2D.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/CubicBezierCurve2D.ts:30](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/CubicBezierCurve2D.ts#L30)
+
+___
+
+### getPoints
+
+▸ **getPoints**(`divisions?`): `Vector2`[]
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `divisions` | `number` | `5` |
+
+#### Returns
+
+`Vector2`[]
+
+#### Inherited from
+
+[Curve2D](Curve2D.md).[getPoints](Curve2D.md#getpoints)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts:23](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts#L23)
diff --git a/docs/geometry/classes/Curve2D.md b/docs/geometry/classes/Curve2D.md
new file mode 100644
index 00000000..a0b8b027
--- /dev/null
+++ b/docs/geometry/classes/Curve2D.md
@@ -0,0 +1,103 @@
+# Class: Curve2D
+
+## Hierarchy
+
+- **`Curve2D`**
+
+ ↳ [`LineCurve2D`](LineCurve2D.md)
+
+ ↳ [`CubicBezierCurve2D`](CubicBezierCurve2D.md)
+
+ ↳ [`QuadraticBezierCurve2D`](QuadraticBezierCurve2D.md)
+
+### Constructors
+
+- [constructor](Curve2D.md#constructor)
+
+### Properties
+
+- [curveType](Curve2D.md#curvetype)
+
+### Accessors
+
+- [points](Curve2D.md#points)
+
+### Methods
+
+- [getPoint](Curve2D.md#getpoint)
+- [getPoints](Curve2D.md#getpoints)
+
+## Constructors
+
+### constructor
+
+• **new Curve2D**(): [`Curve2D`](Curve2D.md)
+
+#### Returns
+
+[`Curve2D`](Curve2D.md)
+
+## Properties
+
+### curveType
+
+• **curveType**: [`CurveType`](../enums/CurveType.md)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts:11](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts#L11)
+
+## Accessors
+
+### points
+
+• `get` **points**(): `Vector2`[]
+
+#### Returns
+
+`Vector2`[]
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts:13](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts#L13)
+
+## Methods
+
+### getPoint
+
+▸ **getPoint**(`t`, `result?`): `Vector2`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `t` | `number` |
+| `result` | `Vector2` |
+
+#### Returns
+
+`Vector2`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts:18](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts#L18)
+
+___
+
+### getPoints
+
+▸ **getPoints**(`divisions?`): `Vector2`[]
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `divisions` | `number` | `5` |
+
+#### Returns
+
+`Vector2`[]
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts:23](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts#L23)
diff --git a/docs/geometry/classes/ExtrudeGeometry.md b/docs/geometry/classes/ExtrudeGeometry.md
new file mode 100644
index 00000000..cfdf8c1a
--- /dev/null
+++ b/docs/geometry/classes/ExtrudeGeometry.md
@@ -0,0 +1,637 @@
+# Class: ExtrudeGeometry
+
+## Hierarchy
+
+- `GeometryBase`
+
+ ↳ **`ExtrudeGeometry`**
+
+ ↳↳ [`TextGeometry`](TextGeometry.md)
+
+### Constructors
+
+- [constructor](ExtrudeGeometry.md#constructor)
+
+### Properties
+
+- [shapes](ExtrudeGeometry.md#shapes)
+- [options](ExtrudeGeometry.md#options)
+- [instanceID](ExtrudeGeometry.md#instanceid)
+- [name](ExtrudeGeometry.md#name)
+- [subGeometries](ExtrudeGeometry.md#subgeometries)
+- [morphTargetsRelative](ExtrudeGeometry.md#morphtargetsrelative)
+- [morphTargetDictionary](ExtrudeGeometry.md#morphtargetdictionary)
+- [skinNames](ExtrudeGeometry.md#skinnames)
+- [bindPose](ExtrudeGeometry.md#bindpose)
+- [blendShapeData](ExtrudeGeometry.md#blendshapedata)
+- [vertexDim](ExtrudeGeometry.md#vertexdim)
+- [vertexCount](ExtrudeGeometry.md#vertexcount)
+
+### Accessors
+
+- [indicesBuffer](ExtrudeGeometry.md#indicesbuffer)
+- [vertexBuffer](ExtrudeGeometry.md#vertexbuffer)
+- [vertexAttributes](ExtrudeGeometry.md#vertexattributes)
+- [vertexAttributeMap](ExtrudeGeometry.md#vertexattributemap)
+- [geometryType](ExtrudeGeometry.md#geometrytype)
+- [bounds](ExtrudeGeometry.md#bounds)
+
+### Methods
+
+- [addSubGeometry](ExtrudeGeometry.md#addsubgeometry)
+- [generate](ExtrudeGeometry.md#generate)
+- [setIndices](ExtrudeGeometry.md#setindices)
+- [setAttribute](ExtrudeGeometry.md#setattribute)
+- [getAttribute](ExtrudeGeometry.md#getattribute)
+- [hasAttribute](ExtrudeGeometry.md#hasattribute)
+- [genWireframe](ExtrudeGeometry.md#genwireframe)
+- [compute](ExtrudeGeometry.md#compute)
+- [computeNormals](ExtrudeGeometry.md#computenormals)
+- [isPrimitive](ExtrudeGeometry.md#isprimitive)
+- [destroy](ExtrudeGeometry.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new ExtrudeGeometry**(`shapes?`, `options?`): [`ExtrudeGeometry`](ExtrudeGeometry.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shapes?` | [`Shape2D`](Shape2D.md)[] |
+| `options?` | `any` |
+
+#### Returns
+
+[`ExtrudeGeometry`](ExtrudeGeometry.md)
+
+#### Overrides
+
+GeometryBase.constructor
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/ExtrudeGeometry.ts:22](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/ExtrudeGeometry.ts#L22)
+
+## Properties
+
+### shapes
+
+• **shapes**: [`Shape2D`](Shape2D.md)[]
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/ExtrudeGeometry.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/ExtrudeGeometry.ts#L17)
+
+___
+
+### options
+
+• **options**: [`ExtrudeGeometryArgs`](../types/ExtrudeGeometryArgs.md)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/ExtrudeGeometry.ts:18](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/ExtrudeGeometry.ts#L18)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+GeometryBase.instanceID
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L39)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Inherited from
+
+GeometryBase.name
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L40)
+
+___
+
+### subGeometries
+
+• **subGeometries**: `SubGeometry`[] = `[]`
+
+#### Inherited from
+
+GeometryBase.subGeometries
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L41)
+
+___
+
+### morphTargetsRelative
+
+• **morphTargetsRelative**: `boolean`
+
+#### Inherited from
+
+GeometryBase.morphTargetsRelative
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L42)
+
+___
+
+### morphTargetDictionary
+
+• **morphTargetDictionary**: `Object`
+
+#### Index signature
+
+▪ [blenderName: `string`]: `number`
+
+#### Inherited from
+
+GeometryBase.morphTargetDictionary
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L43)
+
+___
+
+### skinNames
+
+• **skinNames**: `string`[]
+
+#### Inherited from
+
+GeometryBase.skinNames
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L44)
+
+___
+
+### bindPose
+
+• **bindPose**: `Matrix4`[]
+
+#### Inherited from
+
+GeometryBase.bindPose
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L45)
+
+___
+
+### blendShapeData
+
+• **blendShapeData**: `BlendShapeData`
+
+#### Inherited from
+
+GeometryBase.blendShapeData
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L46)
+
+___
+
+### vertexDim
+
+• **vertexDim**: `number`
+
+#### Inherited from
+
+GeometryBase.vertexDim
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L47)
+
+___
+
+### vertexCount
+
+• **vertexCount**: `number` = `0`
+
+#### Inherited from
+
+GeometryBase.vertexCount
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L48)
+
+## Accessors
+
+### indicesBuffer
+
+• `get` **indicesBuffer**(): `GeometryIndicesBuffer`
+
+#### Returns
+
+`GeometryIndicesBuffer`
+
+#### Inherited from
+
+GeometryBase.indicesBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L69)
+
+___
+
+### vertexBuffer
+
+• `get` **vertexBuffer**(): `GeometryVertexBuffer`
+
+#### Returns
+
+`GeometryVertexBuffer`
+
+#### Inherited from
+
+GeometryBase.vertexBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L73)
+
+___
+
+### vertexAttributes
+
+• `get` **vertexAttributes**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+GeometryBase.vertexAttributes
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L77)
+
+___
+
+### vertexAttributeMap
+
+• `get` **vertexAttributeMap**(): `Map`\<`string`, `VertexAttributeData`\>
+
+#### Returns
+
+`Map`\<`string`, `VertexAttributeData`\>
+
+#### Inherited from
+
+GeometryBase.vertexAttributeMap
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L81)
+
+___
+
+### geometryType
+
+• `get` **geometryType**(): `GeometryVertexType`
+
+#### Returns
+
+`GeometryVertexType`
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L85)
+
+• `set` **geometryType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GeometryVertexType` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L88)
+
+___
+
+### bounds
+
+• `get` **bounds**(): `BoundingBox`
+
+#### Returns
+
+`BoundingBox`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L92)
+
+• `set` **bounds**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BoundingBox` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L135)
+
+## Methods
+
+### addSubGeometry
+
+▸ **addSubGeometry**(`...lodLevels`): `SubGeometry`
+
+add subGeometry from lod level
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `...lodLevels` | `LODDescriptor`[] |
+
+#### Returns
+
+`SubGeometry`
+
+**`See`**
+
+LODDescriptor
+
+#### Inherited from
+
+GeometryBase.addSubGeometry
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L144)
+
+___
+
+### generate
+
+▸ **generate**(`shaderReflection`): `void`
+
+create geometry by shaderReflection
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `shaderReflection` | `ShaderReflection` | ShaderReflection |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.generate
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L155)
+
+___
+
+### setIndices
+
+▸ **setIndices**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `ArrayBufferData` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.setIndices
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L165)
+
+___
+
+### setAttribute
+
+▸ **setAttribute**(`attribute`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+| `data` | `ArrayBufferData` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.setAttribute
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L177)
+
+___
+
+### getAttribute
+
+▸ **getAttribute**(`attribute`): `VertexAttributeData`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`VertexAttributeData`
+
+#### Inherited from
+
+GeometryBase.getAttribute
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L190)
+
+___
+
+### hasAttribute
+
+▸ **hasAttribute**(`attribute`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+GeometryBase.hasAttribute
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L194)
+
+___
+
+### genWireframe
+
+▸ **genWireframe**(): `Vector3`[]
+
+#### Returns
+
+`Vector3`[]
+
+#### Inherited from
+
+GeometryBase.genWireframe
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L198)
+
+___
+
+### compute
+
+▸ **compute**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.compute
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L251)
+
+___
+
+### computeNormals
+
+▸ **computeNormals**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+GeometryBase.computeNormals
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:270](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L270)
+
+___
+
+### isPrimitive
+
+▸ **isPrimitive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+GeometryBase.isPrimitive
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L312)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.destroy
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:316](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L316)
diff --git a/docs/geometry/classes/FontParser.md b/docs/geometry/classes/FontParser.md
new file mode 100644
index 00000000..f3b392b3
--- /dev/null
+++ b/docs/geometry/classes/FontParser.md
@@ -0,0 +1,265 @@
+# Class: FontParser
+
+## Hierarchy
+
+- `ParserBase`
+
+ ↳ **`FontParser`**
+
+### Constructors
+
+- [constructor](FontParser.md#constructor)
+
+### Properties
+
+- [format](FontParser.md#format)
+- [data](FontParser.md#data)
+- [baseUrl](FontParser.md#baseurl)
+- [initUrl](FontParser.md#initurl)
+- [loaderFunctions](FontParser.md#loaderfunctions)
+- [userData](FontParser.md#userdata)
+
+### Methods
+
+- [parseBuffer](FontParser.md#parsebuffer)
+- [verification](FontParser.md#verification)
+- [parseString](FontParser.md#parsestring)
+- [parseJson](FontParser.md#parsejson)
+- [parseTexture](FontParser.md#parsetexture)
+- [parse](FontParser.md#parse)
+
+## Constructors
+
+### constructor
+
+• **new FontParser**(): [`FontParser`](FontParser.md)
+
+#### Returns
+
+[`FontParser`](FontParser.md)
+
+#### Inherited from
+
+ParserBase.constructor
+
+## Properties
+
+### format
+
+▪ `Static` **format**: `ParserFormat` = `ParserFormat.BIN`
+
+#### Inherited from
+
+ParserBase.format
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:10](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L10)
+
+___
+
+### data
+
+• **data**: `Font`
+
+#### Overrides
+
+ParserBase.data
+
+#### Defined in
+
+[packages/geometry/parser/FontParser.ts:5](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/parser/FontParser.ts#L5)
+
+___
+
+### baseUrl
+
+• **baseUrl**: `string`
+
+#### Inherited from
+
+ParserBase.baseUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:11](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L11)
+
+___
+
+### initUrl
+
+• **initUrl**: `string`
+
+#### Inherited from
+
+ParserBase.initUrl
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:12](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L12)
+
+___
+
+### loaderFunctions
+
+• `Optional` **loaderFunctions**: `LoaderFunctions`
+
+#### Inherited from
+
+ParserBase.loaderFunctions
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:13](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L13)
+
+___
+
+### userData
+
+• `Optional` **userData**: `any`
+
+#### Inherited from
+
+ParserBase.userData
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L14)
+
+## Methods
+
+### parseBuffer
+
+▸ **parseBuffer**(`buffer`): `Promise`\<`void`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Overrides
+
+ParserBase.parseBuffer
+
+#### Defined in
+
+[packages/geometry/parser/FontParser.ts:6](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/parser/FontParser.ts#L6)
+
+___
+
+### verification
+
+▸ **verification**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Overrides
+
+ParserBase.verification
+
+#### Defined in
+
+[packages/geometry/parser/FontParser.ts:11](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/parser/FontParser.ts#L11)
+
+___
+
+### parseString
+
+▸ **parseString**(`str`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseString
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L17)
+
+___
+
+### parseJson
+
+▸ **parseJson**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `object` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parseJson
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L19)
+
+___
+
+### parseTexture
+
+▸ **parseTexture**(`buffer`): `Texture`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+
+#### Returns
+
+`Texture`
+
+#### Inherited from
+
+ParserBase.parseTexture
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L23)
+
+___
+
+### parse
+
+▸ **parse**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParserBase.parse
+
+#### Defined in
+
+[src/loader/parser/ParserBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/loader/parser/ParserBase.ts#L27)
diff --git a/docs/geometry/classes/GrassComponent.md b/docs/geometry/classes/GrassComponent.md
new file mode 100644
index 00000000..7fbbe9c5
--- /dev/null
+++ b/docs/geometry/classes/GrassComponent.md
@@ -0,0 +1,1590 @@
+# Class: GrassComponent
+
+## Hierarchy
+
+- `MeshRenderer`
+
+ ↳ **`GrassComponent`**
+
+### Constructors
+
+- [constructor](GrassComponent.md#constructor)
+
+### Properties
+
+- [grassMaterial](GrassComponent.md#grassmaterial)
+- [grassGeometry](GrassComponent.md#grassgeometry)
+- [object3D](GrassComponent.md#object3d)
+- [isDestroyed](GrassComponent.md#isdestroyed)
+- [receiveShadow](GrassComponent.md#receiveshadow)
+- [morphData](GrassComponent.md#morphdata)
+- [instanceCount](GrassComponent.md#instancecount)
+- [lodLevel](GrassComponent.md#lodlevel)
+- [alwaysRender](GrassComponent.md#alwaysrender)
+- [instanceID](GrassComponent.md#instanceid)
+- [drawType](GrassComponent.md#drawtype)
+- [isRenderOrderChange](GrassComponent.md#isrenderorderchange)
+- [needSortOnCameraZ](GrassComponent.md#needsortoncameraz)
+- [isRecievePostEffectUI](GrassComponent.md#isrecieveposteffectui)
+
+### Accessors
+
+- [nodes](GrassComponent.md#nodes)
+- [eventDispatcher](GrassComponent.md#eventdispatcher)
+- [isStart](GrassComponent.md#isstart)
+- [transform](GrassComponent.md#transform)
+- [enable](GrassComponent.md#enable)
+- [geometry](GrassComponent.md#geometry)
+- [material](GrassComponent.md#material)
+- [renderLayer](GrassComponent.md#renderlayer)
+- [rendererMask](GrassComponent.md#renderermask)
+- [renderOrder](GrassComponent.md#renderorder)
+- [materials](GrassComponent.md#materials)
+- [castShadow](GrassComponent.md#castshadow)
+- [castGI](GrassComponent.md#castgi)
+- [castReflection](GrassComponent.md#castreflection)
+
+### Methods
+
+- [init](GrassComponent.md#init)
+- [setGrass](GrassComponent.md#setgrass)
+- [setWindNoiseTexture](GrassComponent.md#setwindnoisetexture)
+- [setMinMax](GrassComponent.md#setminmax)
+- [setGrassTexture](GrassComponent.md#setgrasstexture)
+- [start](GrassComponent.md#start)
+- [stop](GrassComponent.md#stop)
+- [onUpdate](GrassComponent.md#onupdate)
+- [onLateUpdate](GrassComponent.md#onlateupdate)
+- [onBeforeUpdate](GrassComponent.md#onbeforeupdate)
+- [onGraphic](GrassComponent.md#ongraphic)
+- [onParentChange](GrassComponent.md#onparentchange)
+- [onAddChild](GrassComponent.md#onaddchild)
+- [onRemoveChild](GrassComponent.md#onremovechild)
+- [onEnable](GrassComponent.md#onenable)
+- [onDisable](GrassComponent.md#ondisable)
+- [cloneTo](GrassComponent.md#cloneto)
+- [copyComponent](GrassComponent.md#copycomponent)
+- [setMorphInfluence](GrassComponent.md#setmorphinfluence)
+- [setMorphInfluenceIndex](GrassComponent.md#setmorphinfluenceindex)
+- [onCompute](GrassComponent.md#oncompute)
+- [destroy](GrassComponent.md#destroy)
+- [attachSceneOctree](GrassComponent.md#attachsceneoctree)
+- [detachSceneOctree](GrassComponent.md#detachsceneoctree)
+- [addMask](GrassComponent.md#addmask)
+- [removeMask](GrassComponent.md#removemask)
+- [hasMask](GrassComponent.md#hasmask)
+- [addRendererMask](GrassComponent.md#addrenderermask)
+- [removeRendererMask](GrassComponent.md#removerenderermask)
+- [selfCloneMaterials](GrassComponent.md#selfclonematerials)
+- [renderPass](GrassComponent.md#renderpass)
+- [renderPass2](GrassComponent.md#renderpass2)
+- [recordRenderPass2](GrassComponent.md#recordrenderpass2)
+- [preInit](GrassComponent.md#preinit)
+- [beforeDestroy](GrassComponent.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new GrassComponent**(): [`GrassComponent`](GrassComponent.md)
+
+#### Returns
+
+[`GrassComponent`](GrassComponent.md)
+
+#### Overrides
+
+MeshRenderer.constructor
+
+#### Defined in
+
+[packages/geometry/grass/component/GrassComponent.ts:11](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/component/GrassComponent.ts#L11)
+
+## Properties
+
+### grassMaterial
+
+• **grassMaterial**: [`GrassMaterial`](GrassMaterial.md)
+
+#### Defined in
+
+[packages/geometry/grass/component/GrassComponent.ts:8](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/component/GrassComponent.ts#L8)
+
+___
+
+### grassGeometry
+
+• **grassGeometry**: [`GrassGeometry`](GrassGeometry.md)
+
+#### Defined in
+
+[packages/geometry/grass/component/GrassComponent.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/component/GrassComponent.ts#L9)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+MeshRenderer.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### receiveShadow
+
+• **receiveShadow**: `boolean`
+
+Enabling this option allows the grid to display any shadows cast on the grid.
+
+#### Inherited from
+
+MeshRenderer.receiveShadow
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L23)
+
+___
+
+### morphData
+
+• **morphData**: `MorphTargetData`
+
+#### Inherited from
+
+MeshRenderer.morphData
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L24)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+MeshRenderer.instanceCount
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+MeshRenderer.lodLevel
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+MeshRenderer.alwaysRender
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+MeshRenderer.instanceID
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+MeshRenderer.drawType
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.isRenderOrderChange
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.needSortOnCameraZ
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.isRecievePostEffectUI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+## Accessors
+
+### nodes
+
+• `get` **nodes**(): `Transform`[]
+
+#### Returns
+
+`Transform`[]
+
+#### Defined in
+
+[packages/geometry/grass/component/GrassComponent.ts:42](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/component/GrassComponent.ts#L42)
+
+___
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+MeshRenderer.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### geometry
+
+• `get` **geometry**(): `GeometryBase`
+
+The geometry of the mesh determines its shape
+
+#### Returns
+
+`GeometryBase`
+
+#### Inherited from
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L53)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GeometryBase` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L57)
+
+___
+
+### material
+
+• `get` **material**(): `Material`
+
+material
+
+#### Returns
+
+`Material`
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L99)
+
+• `set` **material**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Material` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L103)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): `Material`[]
+
+#### Returns
+
+`Material`[]
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Material`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+## Methods
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+MeshRenderer.init
+
+#### Defined in
+
+[packages/geometry/grass/component/GrassComponent.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/component/GrassComponent.ts#L17)
+
+___
+
+### setGrass
+
+▸ **setGrass**(`grassWidth`, `grassHeight`, `segment`, `density`, `count?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `grassWidth` | `number` | `undefined` |
+| `grassHeight` | `number` | `undefined` |
+| `segment` | `number` | `undefined` |
+| `density` | `number` | `undefined` |
+| `count` | `number` | `1000` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/component/GrassComponent.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/component/GrassComponent.ts#L21)
+
+___
+
+### setWindNoiseTexture
+
+▸ **setWindNoiseTexture**(`gustNoiseTexture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `gustNoiseTexture` | `Texture` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/component/GrassComponent.ts:28](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/component/GrassComponent.ts#L28)
+
+___
+
+### setMinMax
+
+▸ **setMinMax**(`min`, `max`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `min` | `Vector3` |
+| `max` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/component/GrassComponent.ts:33](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/component/GrassComponent.ts#L33)
+
+___
+
+### setGrassTexture
+
+▸ **setGrassTexture**(`grassTexture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `grassTexture` | `Texture` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/component/GrassComponent.ts:38](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/component/GrassComponent.ts#L38)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.start
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.onEnable
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L30)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.onDisable
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L34)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `Object3D` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.cloneTo
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L38)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+MeshRenderer.copyComponent
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L43)
+
+___
+
+### setMorphInfluence
+
+▸ **setMorphInfluence**(`key`, `value`): `void`
+
+Set deformation animation parameters
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.setMorphInfluence
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L110)
+
+___
+
+### setMorphInfluenceIndex
+
+▸ **setMorphInfluenceIndex**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.setMorphInfluenceIndex
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view`, `command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | `View3D` |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.onCompute
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L128)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.destroy
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L157)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | `Octree` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.attachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.detachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.addMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.removeMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.hasMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.addRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.removeRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+MeshRenderer.selfCloneMaterials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | `View3D` |
+| `passType` | `PassType` |
+| `renderContext` | `RenderContext` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderPass
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L370)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+render pass at passType
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | `View3D` | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | `ClusterLightingBuffer` | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderPass2
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L438)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | `View3D` | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | `ClusterLightingBuffer` | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.recordRenderPass2
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.preInit
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.beforeDestroy
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
diff --git a/docs/geometry/classes/GrassGeometry.md b/docs/geometry/classes/GrassGeometry.md
new file mode 100644
index 00000000..9b1795ff
--- /dev/null
+++ b/docs/geometry/classes/GrassGeometry.md
@@ -0,0 +1,671 @@
+# Class: GrassGeometry
+
+## Hierarchy
+
+- `GeometryBase`
+
+ ↳ **`GrassGeometry`**
+
+### Constructors
+
+- [constructor](GrassGeometry.md#constructor)
+
+### Properties
+
+- [width](GrassGeometry.md#width)
+- [height](GrassGeometry.md#height)
+- [segmentW](GrassGeometry.md#segmentw)
+- [segmentH](GrassGeometry.md#segmenth)
+- [nodes](GrassGeometry.md#nodes)
+- [instanceID](GrassGeometry.md#instanceid)
+- [name](GrassGeometry.md#name)
+- [subGeometries](GrassGeometry.md#subgeometries)
+- [morphTargetsRelative](GrassGeometry.md#morphtargetsrelative)
+- [morphTargetDictionary](GrassGeometry.md#morphtargetdictionary)
+- [skinNames](GrassGeometry.md#skinnames)
+- [bindPose](GrassGeometry.md#bindpose)
+- [blendShapeData](GrassGeometry.md#blendshapedata)
+- [vertexDim](GrassGeometry.md#vertexdim)
+- [vertexCount](GrassGeometry.md#vertexcount)
+
+### Accessors
+
+- [indicesBuffer](GrassGeometry.md#indicesbuffer)
+- [vertexBuffer](GrassGeometry.md#vertexbuffer)
+- [vertexAttributes](GrassGeometry.md#vertexattributes)
+- [vertexAttributeMap](GrassGeometry.md#vertexattributemap)
+- [geometryType](GrassGeometry.md#geometrytype)
+- [bounds](GrassGeometry.md#bounds)
+
+### Methods
+
+- [addSubGeometry](GrassGeometry.md#addsubgeometry)
+- [generate](GrassGeometry.md#generate)
+- [setIndices](GrassGeometry.md#setindices)
+- [setAttribute](GrassGeometry.md#setattribute)
+- [getAttribute](GrassGeometry.md#getattribute)
+- [hasAttribute](GrassGeometry.md#hasattribute)
+- [genWireframe](GrassGeometry.md#genwireframe)
+- [compute](GrassGeometry.md#compute)
+- [computeNormals](GrassGeometry.md#computenormals)
+- [isPrimitive](GrassGeometry.md#isprimitive)
+- [destroy](GrassGeometry.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new GrassGeometry**(`width`, `height`, `segmentW?`, `segmentH?`, `count`): [`GrassGeometry`](GrassGeometry.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `width` | `number` | `undefined` |
+| `height` | `number` | `undefined` |
+| `segmentW` | `number` | `1` |
+| `segmentH` | `number` | `1` |
+| `count` | `number` | `undefined` |
+
+#### Returns
+
+[`GrassGeometry`](GrassGeometry.md)
+
+#### Overrides
+
+GeometryBase.constructor
+
+#### Defined in
+
+[packages/geometry/grass/GrassGeometry.ts:10](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/GrassGeometry.ts#L10)
+
+## Properties
+
+### width
+
+• **width**: `number`
+
+#### Defined in
+
+[packages/geometry/grass/GrassGeometry.ts:4](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/GrassGeometry.ts#L4)
+
+___
+
+### height
+
+• **height**: `number`
+
+#### Defined in
+
+[packages/geometry/grass/GrassGeometry.ts:5](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/GrassGeometry.ts#L5)
+
+___
+
+### segmentW
+
+• **segmentW**: `number`
+
+#### Defined in
+
+[packages/geometry/grass/GrassGeometry.ts:6](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/GrassGeometry.ts#L6)
+
+___
+
+### segmentH
+
+• **segmentH**: `number`
+
+#### Defined in
+
+[packages/geometry/grass/GrassGeometry.ts:7](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/GrassGeometry.ts#L7)
+
+___
+
+### nodes
+
+• **nodes**: `Transform`[]
+
+#### Defined in
+
+[packages/geometry/grass/GrassGeometry.ts:8](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/GrassGeometry.ts#L8)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+GeometryBase.instanceID
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L39)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Inherited from
+
+GeometryBase.name
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L40)
+
+___
+
+### subGeometries
+
+• **subGeometries**: `SubGeometry`[] = `[]`
+
+#### Inherited from
+
+GeometryBase.subGeometries
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L41)
+
+___
+
+### morphTargetsRelative
+
+• **morphTargetsRelative**: `boolean`
+
+#### Inherited from
+
+GeometryBase.morphTargetsRelative
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L42)
+
+___
+
+### morphTargetDictionary
+
+• **morphTargetDictionary**: `Object`
+
+#### Index signature
+
+▪ [blenderName: `string`]: `number`
+
+#### Inherited from
+
+GeometryBase.morphTargetDictionary
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L43)
+
+___
+
+### skinNames
+
+• **skinNames**: `string`[]
+
+#### Inherited from
+
+GeometryBase.skinNames
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L44)
+
+___
+
+### bindPose
+
+• **bindPose**: `Matrix4`[]
+
+#### Inherited from
+
+GeometryBase.bindPose
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L45)
+
+___
+
+### blendShapeData
+
+• **blendShapeData**: `BlendShapeData`
+
+#### Inherited from
+
+GeometryBase.blendShapeData
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L46)
+
+___
+
+### vertexDim
+
+• **vertexDim**: `number`
+
+#### Inherited from
+
+GeometryBase.vertexDim
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L47)
+
+___
+
+### vertexCount
+
+• **vertexCount**: `number` = `0`
+
+#### Inherited from
+
+GeometryBase.vertexCount
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L48)
+
+## Accessors
+
+### indicesBuffer
+
+• `get` **indicesBuffer**(): `GeometryIndicesBuffer`
+
+#### Returns
+
+`GeometryIndicesBuffer`
+
+#### Inherited from
+
+GeometryBase.indicesBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L69)
+
+___
+
+### vertexBuffer
+
+• `get` **vertexBuffer**(): `GeometryVertexBuffer`
+
+#### Returns
+
+`GeometryVertexBuffer`
+
+#### Inherited from
+
+GeometryBase.vertexBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L73)
+
+___
+
+### vertexAttributes
+
+• `get` **vertexAttributes**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+GeometryBase.vertexAttributes
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L77)
+
+___
+
+### vertexAttributeMap
+
+• `get` **vertexAttributeMap**(): `Map`\<`string`, `VertexAttributeData`\>
+
+#### Returns
+
+`Map`\<`string`, `VertexAttributeData`\>
+
+#### Inherited from
+
+GeometryBase.vertexAttributeMap
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L81)
+
+___
+
+### geometryType
+
+• `get` **geometryType**(): `GeometryVertexType`
+
+#### Returns
+
+`GeometryVertexType`
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L85)
+
+• `set` **geometryType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GeometryVertexType` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L88)
+
+___
+
+### bounds
+
+• `get` **bounds**(): `BoundingBox`
+
+#### Returns
+
+`BoundingBox`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L92)
+
+• `set` **bounds**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BoundingBox` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L135)
+
+## Methods
+
+### addSubGeometry
+
+▸ **addSubGeometry**(`...lodLevels`): `SubGeometry`
+
+add subGeometry from lod level
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `...lodLevels` | `LODDescriptor`[] |
+
+#### Returns
+
+`SubGeometry`
+
+**`See`**
+
+LODDescriptor
+
+#### Inherited from
+
+GeometryBase.addSubGeometry
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L144)
+
+___
+
+### generate
+
+▸ **generate**(`shaderReflection`): `void`
+
+create geometry by shaderReflection
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `shaderReflection` | `ShaderReflection` | ShaderReflection |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.generate
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L155)
+
+___
+
+### setIndices
+
+▸ **setIndices**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `ArrayBufferData` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.setIndices
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L165)
+
+___
+
+### setAttribute
+
+▸ **setAttribute**(`attribute`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+| `data` | `ArrayBufferData` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.setAttribute
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L177)
+
+___
+
+### getAttribute
+
+▸ **getAttribute**(`attribute`): `VertexAttributeData`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`VertexAttributeData`
+
+#### Inherited from
+
+GeometryBase.getAttribute
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L190)
+
+___
+
+### hasAttribute
+
+▸ **hasAttribute**(`attribute`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+GeometryBase.hasAttribute
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L194)
+
+___
+
+### genWireframe
+
+▸ **genWireframe**(): `Vector3`[]
+
+#### Returns
+
+`Vector3`[]
+
+#### Inherited from
+
+GeometryBase.genWireframe
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L198)
+
+___
+
+### compute
+
+▸ **compute**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.compute
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L251)
+
+___
+
+### computeNormals
+
+▸ **computeNormals**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+GeometryBase.computeNormals
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:270](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L270)
+
+___
+
+### isPrimitive
+
+▸ **isPrimitive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+GeometryBase.isPrimitive
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L312)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GeometryBase.destroy
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:316](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L316)
diff --git a/docs/geometry/classes/GrassMaterial.md b/docs/geometry/classes/GrassMaterial.md
new file mode 100644
index 00000000..65bf46eb
--- /dev/null
+++ b/docs/geometry/classes/GrassMaterial.md
@@ -0,0 +1,1539 @@
+# Class: GrassMaterial
+
+## Hierarchy
+
+- `Material`
+
+ ↳ **`GrassMaterial`**
+
+### Constructors
+
+- [constructor](GrassMaterial.md#constructor)
+
+### Properties
+
+- [instanceID](GrassMaterial.md#instanceid)
+- [name](GrassMaterial.md#name)
+- [enable](GrassMaterial.md#enable)
+
+### Accessors
+
+- [baseMap](GrassMaterial.md#basemap)
+- [windMap](GrassMaterial.md#windmap)
+- [windBound](GrassMaterial.md#windbound)
+- [grassBaseColor](GrassMaterial.md#grassbasecolor)
+- [grassTopColor](GrassMaterial.md#grasstopcolor)
+- [windDirection](GrassMaterial.md#winddirection)
+- [windPower](GrassMaterial.md#windpower)
+- [windSpeed](GrassMaterial.md#windspeed)
+- [grassHeight](GrassMaterial.md#grassheight)
+- [curvature](GrassMaterial.md#curvature)
+- [roughness](GrassMaterial.md#roughness)
+- [translucent](GrassMaterial.md#translucent)
+- [soft](GrassMaterial.md#soft)
+- [specular](GrassMaterial.md#specular)
+- [shader](GrassMaterial.md#shader)
+- [doubleSide](GrassMaterial.md#doubleside)
+- [castShadow](GrassMaterial.md#castshadow)
+- [acceptShadow](GrassMaterial.md#acceptshadow)
+- [castReflection](GrassMaterial.md#castreflection)
+- [blendMode](GrassMaterial.md#blendmode)
+- [depthCompare](GrassMaterial.md#depthcompare)
+- [transparent](GrassMaterial.md#transparent)
+- [cullMode](GrassMaterial.md#cullmode)
+- [depthWriteEnabled](GrassMaterial.md#depthwriteenabled)
+- [useBillboard](GrassMaterial.md#usebillboard)
+- [topology](GrassMaterial.md#topology)
+
+### Methods
+
+- [getPass](GrassMaterial.md#getpass)
+- [getAllPass](GrassMaterial.md#getallpass)
+- [clone](GrassMaterial.md#clone)
+- [destroy](GrassMaterial.md#destroy)
+- [setDefine](GrassMaterial.md#setdefine)
+- [setTexture](GrassMaterial.md#settexture)
+- [setStorageBuffer](GrassMaterial.md#setstoragebuffer)
+- [setUniformBuffer](GrassMaterial.md#setuniformbuffer)
+- [setUniformFloat](GrassMaterial.md#setuniformfloat)
+- [setUniformVector2](GrassMaterial.md#setuniformvector2)
+- [setUniformVector3](GrassMaterial.md#setuniformvector3)
+- [setUniformVector4](GrassMaterial.md#setuniformvector4)
+- [setUniformColor](GrassMaterial.md#setuniformcolor)
+- [getUniformFloat](GrassMaterial.md#getuniformfloat)
+- [getUniformV2](GrassMaterial.md#getuniformv2)
+- [getUniformV3](GrassMaterial.md#getuniformv3)
+- [getUniformV4](GrassMaterial.md#getuniformv4)
+- [getUniformColor](GrassMaterial.md#getuniformcolor)
+- [getTexture](GrassMaterial.md#gettexture)
+- [getStorageBuffer](GrassMaterial.md#getstoragebuffer)
+- [getStructStorageBuffer](GrassMaterial.md#getstructstoragebuffer)
+- [getUniformBuffer](GrassMaterial.md#getuniformbuffer)
+- [applyUniform](GrassMaterial.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new GrassMaterial**(): [`GrassMaterial`](GrassMaterial.md)
+
+#### Returns
+
+[`GrassMaterial`](GrassMaterial.md)
+
+#### Overrides
+
+Material.constructor
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:7](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L7)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+Material Unique Identifier
+
+#### Inherited from
+
+Material.instanceID
+
+#### Defined in
+
+[src/materials/Material.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L19)
+
+___
+
+### name
+
+• **name**: `string`
+
+name of this material
+
+#### Inherited from
+
+Material.name
+
+#### Defined in
+
+[src/materials/Material.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L25)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+Material.enable
+
+#### Defined in
+
+[src/materials/Material.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L27)
+
+## Accessors
+
+### baseMap
+
+• `get` **baseMap**(): `Texture`
+
+#### Returns
+
+`Texture`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:80](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L80)
+
+• `set` **baseMap**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | `Texture` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:76](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L76)
+
+___
+
+### windMap
+
+• `set` **windMap**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | `Texture` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:84](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L84)
+
+___
+
+### windBound
+
+• `get` **windBound**(): `Vector4`
+
+#### Returns
+
+`Vector4`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:95](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L95)
+
+• `set` **windBound**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:91](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L91)
+
+___
+
+### grassBaseColor
+
+• `get` **grassBaseColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:103](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L103)
+
+• `set` **grassBaseColor**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:99](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L99)
+
+___
+
+### grassTopColor
+
+• `get` **grassTopColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:111](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L111)
+
+• `set` **grassTopColor**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:107](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L107)
+
+___
+
+### windDirection
+
+• `get` **windDirection**(): `Vector2`
+
+#### Returns
+
+`Vector2`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:119](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L119)
+
+• `set` **windDirection**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `Vector2` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:115](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L115)
+
+___
+
+### windPower
+
+• `get` **windPower**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:127](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L127)
+
+• `set` **windPower**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:123](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L123)
+
+___
+
+### windSpeed
+
+• `get` **windSpeed**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:135](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L135)
+
+• `set` **windSpeed**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:131](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L131)
+
+___
+
+### grassHeight
+
+• `get` **grassHeight**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:143](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L143)
+
+• `set` **grassHeight**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:139](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L139)
+
+___
+
+### curvature
+
+• `get` **curvature**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:151](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L151)
+
+• `set` **curvature**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:147](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L147)
+
+___
+
+### roughness
+
+• `get` **roughness**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:159](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L159)
+
+• `set` **roughness**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:155](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L155)
+
+___
+
+### translucent
+
+• `get` **translucent**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:167](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L167)
+
+• `set` **translucent**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:163](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L163)
+
+___
+
+### soft
+
+• `get` **soft**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:175](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L175)
+
+• `set` **soft**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:171](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L171)
+
+___
+
+### specular
+
+• `get` **specular**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:183](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L183)
+
+• `set` **specular**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/grass/material/GrassMaterial.ts:179](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/grass/material/GrassMaterial.ts#L179)
+
+___
+
+### shader
+
+• `get` **shader**(): `Shader`
+
+#### Returns
+
+`Shader`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L41)
+
+• `set` **shader**(`shader`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shader` | `Shader` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L36)
+
+___
+
+### doubleSide
+
+• `get` **doubleSide**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L45)
+
+• `set` **doubleSide**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L49)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L53)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L57)
+
+___
+
+### acceptShadow
+
+• `get` **acceptShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L64)
+
+• `set` **acceptShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L68)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L77)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L81)
+
+___
+
+### blendMode
+
+• `get` **blendMode**(): `BlendMode`
+
+#### Returns
+
+`BlendMode`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L85)
+
+• `set` **blendMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BlendMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L89)
+
+___
+
+### depthCompare
+
+• `get` **depthCompare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L93)
+
+• `set` **depthCompare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L97)
+
+___
+
+### transparent
+
+• `get` **transparent**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L102)
+
+• `set` **transparent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L106)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L113)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L117)
+
+___
+
+### depthWriteEnabled
+
+• `get` **depthWriteEnabled**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L128)
+
+• `set` **depthWriteEnabled**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L132)
+
+___
+
+### useBillboard
+
+• `set` **useBillboard**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.useBillboard
+
+#### Defined in
+
+[src/materials/Material.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L136)
+
+___
+
+### topology
+
+• `get` **topology**(): `GPUPrimitiveTopology`
+
+#### Returns
+
+`GPUPrimitiveTopology`
+
+#### Inherited from
+
+Material.topology
+
+#### Defined in
+
+[src/materials/Material.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L140)
+
+• `set` **topology**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUPrimitiveTopology` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.topology
+
+#### Defined in
+
+[src/materials/Material.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L144)
+
+## Methods
+
+### getPass
+
+▸ **getPass**(`passType`): `RenderShaderPass`[]
+
+get render pass by renderType
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+`RenderShaderPass`[]
+
+#### Inherited from
+
+Material.getPass
+
+#### Defined in
+
+[src/materials/Material.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L153)
+
+___
+
+### getAllPass
+
+▸ **getAllPass**(): `RenderShaderPass`[]
+
+get all color render pass
+
+#### Returns
+
+`RenderShaderPass`[]
+
+#### Inherited from
+
+Material.getAllPass
+
+#### Defined in
+
+[src/materials/Material.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L161)
+
+___
+
+### clone
+
+▸ **clone**(): `Material`
+
+clone one material
+
+#### Returns
+
+`Material`
+
+Material
+
+#### Inherited from
+
+Material.clone
+
+#### Defined in
+
+[src/materials/Material.ts:169](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L169)
+
+___
+
+### destroy
+
+▸ **destroy**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.destroy
+
+#### Defined in
+
+[src/materials/Material.ts:176](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L176)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`define`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `define` | `string` |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setDefine
+
+#### Defined in
+
+[src/materials/Material.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L182)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`propertyName`, `texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `texture` | `Texture` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setTexture
+
+#### Defined in
+
+[src/materials/Material.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L186)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | `StorageGPUBuffer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setStorageBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L190)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | `UniformGPUBuffer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L194)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformFloat
+
+#### Defined in
+
+[src/materials/Material.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L199)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector2` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformVector2
+
+#### Defined in
+
+[src/materials/Material.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L203)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformVector3
+
+#### Defined in
+
+[src/materials/Material.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L207)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformVector4
+
+#### Defined in
+
+[src/materials/Material.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L211)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformColor
+
+#### Defined in
+
+[src/materials/Material.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L215)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`str`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+Material.getUniformFloat
+
+#### Defined in
+
+[src/materials/Material.ts:219](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L219)
+
+___
+
+### getUniformV2
+
+▸ **getUniformV2**(`str`): `Vector2`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector2`
+
+#### Inherited from
+
+Material.getUniformV2
+
+#### Defined in
+
+[src/materials/Material.ts:223](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L223)
+
+___
+
+### getUniformV3
+
+▸ **getUniformV3**(`str`): `Vector3`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector3`
+
+#### Inherited from
+
+Material.getUniformV3
+
+#### Defined in
+
+[src/materials/Material.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L227)
+
+___
+
+### getUniformV4
+
+▸ **getUniformV4**(`str`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+Material.getUniformV4
+
+#### Defined in
+
+[src/materials/Material.ts:231](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L231)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`str`): `Color`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+Material.getUniformColor
+
+#### Defined in
+
+[src/materials/Material.ts:235](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L235)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`str`): `Texture`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Texture`
+
+#### Inherited from
+
+Material.getTexture
+
+#### Defined in
+
+[src/materials/Material.ts:239](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L239)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`str`): `StorageGPUBuffer`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`StorageGPUBuffer`
+
+#### Inherited from
+
+Material.getStorageBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:243](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L243)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+Material.getStructStorageBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L247)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+Material.getUniformBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L251)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.applyUniform
+
+#### Defined in
+
+[src/materials/Material.ts:255](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L255)
diff --git a/docs/geometry/classes/LineCurve2D.md b/docs/geometry/classes/LineCurve2D.md
new file mode 100644
index 00000000..64f50675
--- /dev/null
+++ b/docs/geometry/classes/LineCurve2D.md
@@ -0,0 +1,239 @@
+# Class: LineCurve2D
+
+## Hierarchy
+
+- [`Curve2D`](Curve2D.md)
+
+ ↳ **`LineCurve2D`**
+
+### Constructors
+
+- [constructor](LineCurve2D.md#constructor)
+
+### Properties
+
+- [curveType](LineCurve2D.md#curvetype)
+- [v0](LineCurve2D.md#v0)
+- [v1](LineCurve2D.md#v1)
+
+### Accessors
+
+- [points](LineCurve2D.md#points)
+
+### Methods
+
+- [getPoints](LineCurve2D.md#getpoints)
+- [getPoint](LineCurve2D.md#getpoint)
+- [getPointAt](LineCurve2D.md#getpointat)
+- [getTangent](LineCurve2D.md#gettangent)
+- [getTangentAt](LineCurve2D.md#gettangentat)
+- [copyFrom](LineCurve2D.md#copyfrom)
+
+## Constructors
+
+### constructor
+
+• **new LineCurve2D**(`v0`, `v1`): [`LineCurve2D`](LineCurve2D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v0` | `Vector2` |
+| `v1` | `Vector2` |
+
+#### Returns
+
+[`LineCurve2D`](LineCurve2D.md)
+
+#### Overrides
+
+[Curve2D](Curve2D.md).[constructor](Curve2D.md#constructor)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts:8](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts#L8)
+
+## Properties
+
+### curveType
+
+• **curveType**: [`CurveType`](../enums/CurveType.md)
+
+#### Inherited from
+
+[Curve2D](Curve2D.md).[curveType](Curve2D.md#curvetype)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts:11](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts#L11)
+
+___
+
+### v0
+
+• **v0**: `Vector2`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts:5](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts#L5)
+
+___
+
+### v1
+
+• **v1**: `Vector2`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts:6](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts#L6)
+
+## Accessors
+
+### points
+
+• `get` **points**(): `Vector2`[]
+
+#### Returns
+
+`Vector2`[]
+
+#### Overrides
+
+Curve2D.points
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts:15](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts#L15)
+
+## Methods
+
+### getPoints
+
+▸ **getPoints**(`divisions?`): `Vector2`[]
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `divisions` | `number` | `5` |
+
+#### Returns
+
+`Vector2`[]
+
+#### Inherited from
+
+[Curve2D](Curve2D.md).[getPoints](Curve2D.md#getpoints)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts:23](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts#L23)
+
+___
+
+### getPoint
+
+▸ **getPoint**(`t`, `result?`): `Vector2`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `t` | `number` |
+| `result` | `Vector2` |
+
+#### Returns
+
+`Vector2`
+
+#### Overrides
+
+[Curve2D](Curve2D.md).[getPoint](Curve2D.md#getpoint)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts#L19)
+
+___
+
+### getPointAt
+
+▸ **getPointAt**(`u`, `result?`): `Vector2`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `u` | `number` |
+| `result` | `Vector2` |
+
+#### Returns
+
+`Vector2`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts#L29)
+
+___
+
+### getTangent
+
+▸ **getTangent**(`t`, `result?`): `Vector2`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `t` | `number` |
+| `result` | `Vector2` |
+
+#### Returns
+
+`Vector2`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts:33](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts#L33)
+
+___
+
+### getTangentAt
+
+▸ **getTangentAt**(`u`, `result?`): `Vector2`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `u` | `number` |
+| `result` | `Vector2` |
+
+#### Returns
+
+`Vector2`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts:39](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts#L39)
+
+___
+
+### copyFrom
+
+▸ **copyFrom**(`other`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `other` | [`LineCurve2D`](LineCurve2D.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts:43](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/LineCurve2D.ts#L43)
diff --git a/docs/geometry/classes/Path2D.md b/docs/geometry/classes/Path2D.md
new file mode 100644
index 00000000..b84976c9
--- /dev/null
+++ b/docs/geometry/classes/Path2D.md
@@ -0,0 +1,227 @@
+# Class: Path2D
+
+## Hierarchy
+
+- **`Path2D`**
+
+ ↳ [`Shape2D`](Shape2D.md)
+
+### Constructors
+
+- [constructor](Path2D.md#constructor)
+
+### Properties
+
+- [autoClose](Path2D.md#autoclose)
+
+### Methods
+
+- [getPoints](Path2D.md#getpoints)
+- [setFromPoints](Path2D.md#setfrompoints)
+- [moveTo](Path2D.md#moveto)
+- [lineTo](Path2D.md#lineto)
+- [quadraticCurveTo](Path2D.md#quadraticcurveto)
+- [bezierCurveTo](Path2D.md#beziercurveto)
+- [isIntersect](Path2D.md#isintersect)
+- [pointInPolygon](Path2D.md#pointinpolygon)
+
+## Constructors
+
+### constructor
+
+• **new Path2D**(`points?`): [`Path2D`](Path2D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `points?` | `Vector2`[] |
+
+#### Returns
+
+[`Path2D`](Path2D.md)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:14](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L14)
+
+## Properties
+
+### autoClose
+
+• **autoClose**: `boolean` = `false`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L9)
+
+## Methods
+
+### getPoints
+
+▸ **getPoints**(`divisions`): `Vector2`[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `divisions` | `number` |
+
+#### Returns
+
+`Vector2`[]
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L20)
+
+___
+
+### setFromPoints
+
+▸ **setFromPoints**(`points`): [`Path2D`](Path2D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `points` | `Vector2`[] |
+
+#### Returns
+
+[`Path2D`](Path2D.md)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:52](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L52)
+
+___
+
+### moveTo
+
+▸ **moveTo**(`x`, `y`): [`Path2D`](Path2D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+
+#### Returns
+
+[`Path2D`](Path2D.md)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:60](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L60)
+
+___
+
+### lineTo
+
+▸ **lineTo**(`x`, `y`): [`Path2D`](Path2D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+
+#### Returns
+
+[`Path2D`](Path2D.md)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:65](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L65)
+
+___
+
+### quadraticCurveTo
+
+▸ **quadraticCurveTo**(`cpX`, `cpY`, `x`, `y`): [`Path2D`](Path2D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cpX` | `number` |
+| `cpY` | `number` |
+| `x` | `number` |
+| `y` | `number` |
+
+#### Returns
+
+[`Path2D`](Path2D.md)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:71](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L71)
+
+___
+
+### bezierCurveTo
+
+▸ **bezierCurveTo**(`cp1X`, `cp1Y`, `cp2X`, `cp2Y`, `x`, `y`): [`Path2D`](Path2D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cp1X` | `number` |
+| `cp1Y` | `number` |
+| `cp2X` | `number` |
+| `cp2Y` | `number` |
+| `x` | `number` |
+| `y` | `number` |
+
+#### Returns
+
+[`Path2D`](Path2D.md)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:77](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L77)
+
+___
+
+### isIntersect
+
+▸ **isIntersect**(`path`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `path` | [`Path2D`](Path2D.md) |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:83](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L83)
+
+___
+
+### pointInPolygon
+
+▸ **pointInPolygon**(`point`, `polygon`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `point` | `Vector2` |
+| `polygon` | `Vector2`[] |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:89](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L89)
diff --git a/docs/geometry/classes/QuadraticBezierCurve2D.md b/docs/geometry/classes/QuadraticBezierCurve2D.md
new file mode 100644
index 00000000..8f8fffb1
--- /dev/null
+++ b/docs/geometry/classes/QuadraticBezierCurve2D.md
@@ -0,0 +1,185 @@
+# Class: QuadraticBezierCurve2D
+
+## Hierarchy
+
+- [`Curve2D`](Curve2D.md)
+
+ ↳ **`QuadraticBezierCurve2D`**
+
+### Constructors
+
+- [constructor](QuadraticBezierCurve2D.md#constructor)
+
+### Properties
+
+- [curveType](QuadraticBezierCurve2D.md#curvetype)
+- [v0](QuadraticBezierCurve2D.md#v0)
+- [v1](QuadraticBezierCurve2D.md#v1)
+- [v2](QuadraticBezierCurve2D.md#v2)
+
+### Accessors
+
+- [points](QuadraticBezierCurve2D.md#points)
+
+### Methods
+
+- [getPoints](QuadraticBezierCurve2D.md#getpoints)
+- [getPoint](QuadraticBezierCurve2D.md#getpoint)
+- [copyFrom](QuadraticBezierCurve2D.md#copyfrom)
+
+## Constructors
+
+### constructor
+
+• **new QuadraticBezierCurve2D**(`v0`, `v1`, `v2`): [`QuadraticBezierCurve2D`](QuadraticBezierCurve2D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v0` | `Vector2` |
+| `v1` | `Vector2` |
+| `v2` | `Vector2` |
+
+#### Returns
+
+[`QuadraticBezierCurve2D`](QuadraticBezierCurve2D.md)
+
+#### Overrides
+
+[Curve2D](Curve2D.md).[constructor](Curve2D.md#constructor)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/QuadraticBezierCurve2D.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/QuadraticBezierCurve2D.ts#L9)
+
+## Properties
+
+### curveType
+
+• **curveType**: [`CurveType`](../enums/CurveType.md)
+
+#### Inherited from
+
+[Curve2D](Curve2D.md).[curveType](Curve2D.md#curvetype)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts:11](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts#L11)
+
+___
+
+### v0
+
+• **v0**: `Vector2`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/QuadraticBezierCurve2D.ts:5](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/QuadraticBezierCurve2D.ts#L5)
+
+___
+
+### v1
+
+• **v1**: `Vector2`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/QuadraticBezierCurve2D.ts:6](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/QuadraticBezierCurve2D.ts#L6)
+
+___
+
+### v2
+
+• **v2**: `Vector2`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/QuadraticBezierCurve2D.ts:7](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/QuadraticBezierCurve2D.ts#L7)
+
+## Accessors
+
+### points
+
+• `get` **points**(): `Vector2`[]
+
+#### Returns
+
+`Vector2`[]
+
+#### Overrides
+
+Curve2D.points
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/QuadraticBezierCurve2D.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/QuadraticBezierCurve2D.ts#L17)
+
+## Methods
+
+### getPoints
+
+▸ **getPoints**(`divisions?`): `Vector2`[]
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `divisions` | `number` | `5` |
+
+#### Returns
+
+`Vector2`[]
+
+#### Inherited from
+
+[Curve2D](Curve2D.md).[getPoints](Curve2D.md#getpoints)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts:23](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts#L23)
+
+___
+
+### getPoint
+
+▸ **getPoint**(`t`, `result?`): `Vector2`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `t` | `number` |
+| `result` | `Vector2` |
+
+#### Returns
+
+`Vector2`
+
+#### Overrides
+
+[Curve2D](Curve2D.md).[getPoint](Curve2D.md#getpoint)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/QuadraticBezierCurve2D.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/QuadraticBezierCurve2D.ts#L21)
+
+___
+
+### copyFrom
+
+▸ **copyFrom**(`other`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `other` | [`QuadraticBezierCurve2D`](QuadraticBezierCurve2D.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/QuadraticBezierCurve2D.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/QuadraticBezierCurve2D.ts#L29)
diff --git a/docs/geometry/classes/Shape2D.md b/docs/geometry/classes/Shape2D.md
new file mode 100644
index 00000000..bedfdf84
--- /dev/null
+++ b/docs/geometry/classes/Shape2D.md
@@ -0,0 +1,325 @@
+# Class: Shape2D
+
+## Hierarchy
+
+- [`Path2D`](Path2D.md)
+
+ ↳ **`Shape2D`**
+
+### Constructors
+
+- [constructor](Shape2D.md#constructor)
+
+### Properties
+
+- [autoClose](Shape2D.md#autoclose)
+- [holes](Shape2D.md#holes)
+
+### Methods
+
+- [getPoints](Shape2D.md#getpoints)
+- [setFromPoints](Shape2D.md#setfrompoints)
+- [moveTo](Shape2D.md#moveto)
+- [lineTo](Shape2D.md#lineto)
+- [quadraticCurveTo](Shape2D.md#quadraticcurveto)
+- [bezierCurveTo](Shape2D.md#beziercurveto)
+- [isIntersect](Shape2D.md#isintersect)
+- [pointInPolygon](Shape2D.md#pointinpolygon)
+- [extractPoints](Shape2D.md#extractpoints)
+- [getPointsHoles](Shape2D.md#getpointsholes)
+
+## Constructors
+
+### constructor
+
+• **new Shape2D**(`points?`): [`Shape2D`](Shape2D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `points?` | `Vector2`[] |
+
+#### Returns
+
+[`Shape2D`](Shape2D.md)
+
+#### Overrides
+
+[Path2D](Path2D.md).[constructor](Path2D.md#constructor)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Shape2D.ts:8](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Shape2D.ts#L8)
+
+## Properties
+
+### autoClose
+
+• **autoClose**: `boolean` = `false`
+
+#### Inherited from
+
+[Path2D](Path2D.md).[autoClose](Path2D.md#autoclose)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L9)
+
+___
+
+### holes
+
+• **holes**: [`Path2D`](Path2D.md)[] = `[]`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Shape2D.ts:6](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Shape2D.ts#L6)
+
+## Methods
+
+### getPoints
+
+▸ **getPoints**(`divisions`): `Vector2`[]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `divisions` | `number` |
+
+#### Returns
+
+`Vector2`[]
+
+#### Inherited from
+
+[Path2D](Path2D.md).[getPoints](Path2D.md#getpoints)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L20)
+
+___
+
+### setFromPoints
+
+▸ **setFromPoints**(`points`): [`Shape2D`](Shape2D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `points` | `Vector2`[] |
+
+#### Returns
+
+[`Shape2D`](Shape2D.md)
+
+#### Inherited from
+
+[Path2D](Path2D.md).[setFromPoints](Path2D.md#setfrompoints)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:52](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L52)
+
+___
+
+### moveTo
+
+▸ **moveTo**(`x`, `y`): [`Shape2D`](Shape2D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+
+#### Returns
+
+[`Shape2D`](Shape2D.md)
+
+#### Inherited from
+
+[Path2D](Path2D.md).[moveTo](Path2D.md#moveto)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:60](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L60)
+
+___
+
+### lineTo
+
+▸ **lineTo**(`x`, `y`): [`Shape2D`](Shape2D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+
+#### Returns
+
+[`Shape2D`](Shape2D.md)
+
+#### Inherited from
+
+[Path2D](Path2D.md).[lineTo](Path2D.md#lineto)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:65](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L65)
+
+___
+
+### quadraticCurveTo
+
+▸ **quadraticCurveTo**(`cpX`, `cpY`, `x`, `y`): [`Shape2D`](Shape2D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cpX` | `number` |
+| `cpY` | `number` |
+| `x` | `number` |
+| `y` | `number` |
+
+#### Returns
+
+[`Shape2D`](Shape2D.md)
+
+#### Inherited from
+
+[Path2D](Path2D.md).[quadraticCurveTo](Path2D.md#quadraticcurveto)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:71](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L71)
+
+___
+
+### bezierCurveTo
+
+▸ **bezierCurveTo**(`cp1X`, `cp1Y`, `cp2X`, `cp2Y`, `x`, `y`): [`Shape2D`](Shape2D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cp1X` | `number` |
+| `cp1Y` | `number` |
+| `cp2X` | `number` |
+| `cp2Y` | `number` |
+| `x` | `number` |
+| `y` | `number` |
+
+#### Returns
+
+[`Shape2D`](Shape2D.md)
+
+#### Inherited from
+
+[Path2D](Path2D.md).[bezierCurveTo](Path2D.md#beziercurveto)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:77](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L77)
+
+___
+
+### isIntersect
+
+▸ **isIntersect**(`path`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `path` | [`Path2D`](Path2D.md) |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Path2D](Path2D.md).[isIntersect](Path2D.md#isintersect)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:83](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L83)
+
+___
+
+### pointInPolygon
+
+▸ **pointInPolygon**(`point`, `polygon`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `point` | `Vector2` |
+| `polygon` | `Vector2`[] |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[Path2D](Path2D.md).[pointInPolygon](Path2D.md#pointinpolygon)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Path2D.ts:89](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Path2D.ts#L89)
+
+___
+
+### extractPoints
+
+▸ **extractPoints**(`divisions`): `Object`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `divisions` | `number` |
+
+#### Returns
+
+`Object`
+
+| Name | Type |
+| :------ | :------ |
+| `shape` | `Vector2`[] |
+| `holes` | `Vector2`[][] |
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Shape2D.ts:12](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Shape2D.ts#L12)
+
+___
+
+### getPointsHoles
+
+▸ **getPointsHoles**(`divisions`): `Vector2`[][]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `divisions` | `number` |
+
+#### Returns
+
+`Vector2`[][]
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Shape2D.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Shape2D.ts#L19)
diff --git a/docs/geometry/classes/ShapeUtils.md b/docs/geometry/classes/ShapeUtils.md
new file mode 100644
index 00000000..582ae4ab
--- /dev/null
+++ b/docs/geometry/classes/ShapeUtils.md
@@ -0,0 +1,82 @@
+# Class: ShapeUtils
+
+### Constructors
+
+- [constructor](ShapeUtils.md#constructor)
+
+### Methods
+
+- [isClockWise](ShapeUtils.md#isclockwise)
+- [area](ShapeUtils.md#area)
+- [triangulateShape](ShapeUtils.md#triangulateshape)
+
+## Constructors
+
+### constructor
+
+• **new ShapeUtils**(): [`ShapeUtils`](ShapeUtils.md)
+
+#### Returns
+
+[`ShapeUtils`](ShapeUtils.md)
+
+## Methods
+
+### isClockWise
+
+▸ **isClockWise**(`points`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `points` | `Vector2`[] |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/ShapeUtils.ts:5](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/ShapeUtils.ts#L5)
+
+___
+
+### area
+
+▸ **area**(`contour`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `contour` | `Vector2`[] |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/ShapeUtils.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/ShapeUtils.ts#L9)
+
+___
+
+### triangulateShape
+
+▸ **triangulateShape**(`contour`, `holes`): `number`[][]
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `contour` | `Vector2`[] |
+| `holes` | `Vector2`[][] |
+
+#### Returns
+
+`number`[][]
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/ShapeUtils.ts:18](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/ShapeUtils.ts#L18)
diff --git a/docs/geometry/classes/TerrainGeometry.md b/docs/geometry/classes/TerrainGeometry.md
new file mode 100644
index 00000000..97f67166
--- /dev/null
+++ b/docs/geometry/classes/TerrainGeometry.md
@@ -0,0 +1,752 @@
+# Class: TerrainGeometry
+
+## Hierarchy
+
+- `PlaneGeometry`
+
+ ↳ **`TerrainGeometry`**
+
+### Constructors
+
+- [constructor](TerrainGeometry.md#constructor)
+
+### Properties
+
+- [instanceID](TerrainGeometry.md#instanceid)
+- [name](TerrainGeometry.md#name)
+- [subGeometries](TerrainGeometry.md#subgeometries)
+- [morphTargetsRelative](TerrainGeometry.md#morphtargetsrelative)
+- [morphTargetDictionary](TerrainGeometry.md#morphtargetdictionary)
+- [skinNames](TerrainGeometry.md#skinnames)
+- [bindPose](TerrainGeometry.md#bindpose)
+- [blendShapeData](TerrainGeometry.md#blendshapedata)
+- [vertexDim](TerrainGeometry.md#vertexdim)
+- [vertexCount](TerrainGeometry.md#vertexcount)
+- [width](TerrainGeometry.md#width)
+- [height](TerrainGeometry.md#height)
+- [segmentW](TerrainGeometry.md#segmentw)
+- [segmentH](TerrainGeometry.md#segmenth)
+- [up](TerrainGeometry.md#up)
+
+### Accessors
+
+- [heightData](TerrainGeometry.md#heightdata)
+- [greenData](TerrainGeometry.md#greendata)
+- [indicesBuffer](TerrainGeometry.md#indicesbuffer)
+- [vertexBuffer](TerrainGeometry.md#vertexbuffer)
+- [vertexAttributes](TerrainGeometry.md#vertexattributes)
+- [vertexAttributeMap](TerrainGeometry.md#vertexattributemap)
+- [geometryType](TerrainGeometry.md#geometrytype)
+- [bounds](TerrainGeometry.md#bounds)
+
+### Methods
+
+- [setHeight](TerrainGeometry.md#setheight)
+- [addSubGeometry](TerrainGeometry.md#addsubgeometry)
+- [generate](TerrainGeometry.md#generate)
+- [setIndices](TerrainGeometry.md#setindices)
+- [setAttribute](TerrainGeometry.md#setattribute)
+- [getAttribute](TerrainGeometry.md#getattribute)
+- [hasAttribute](TerrainGeometry.md#hasattribute)
+- [genWireframe](TerrainGeometry.md#genwireframe)
+- [compute](TerrainGeometry.md#compute)
+- [computeNormals](TerrainGeometry.md#computenormals)
+- [isPrimitive](TerrainGeometry.md#isprimitive)
+- [destroy](TerrainGeometry.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new TerrainGeometry**(`width`, `height`, `segmentW?`, `segmentH?`): [`TerrainGeometry`](TerrainGeometry.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `width` | `number` | `undefined` |
+| `height` | `number` | `undefined` |
+| `segmentW` | `number` | `199` |
+| `segmentH` | `number` | `199` |
+
+#### Returns
+
+[`TerrainGeometry`](TerrainGeometry.md)
+
+#### Overrides
+
+PlaneGeometry.constructor
+
+#### Defined in
+
+[packages/geometry/terrain/TerrainGeometry.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/terrain/TerrainGeometry.ts#L9)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+PlaneGeometry.instanceID
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L39)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Inherited from
+
+PlaneGeometry.name
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L40)
+
+___
+
+### subGeometries
+
+• **subGeometries**: `SubGeometry`[] = `[]`
+
+#### Inherited from
+
+PlaneGeometry.subGeometries
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L41)
+
+___
+
+### morphTargetsRelative
+
+• **morphTargetsRelative**: `boolean`
+
+#### Inherited from
+
+PlaneGeometry.morphTargetsRelative
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L42)
+
+___
+
+### morphTargetDictionary
+
+• **morphTargetDictionary**: `Object`
+
+#### Index signature
+
+▪ [blenderName: `string`]: `number`
+
+#### Inherited from
+
+PlaneGeometry.morphTargetDictionary
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L43)
+
+___
+
+### skinNames
+
+• **skinNames**: `string`[]
+
+#### Inherited from
+
+PlaneGeometry.skinNames
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L44)
+
+___
+
+### bindPose
+
+• **bindPose**: `Matrix4`[]
+
+#### Inherited from
+
+PlaneGeometry.bindPose
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L45)
+
+___
+
+### blendShapeData
+
+• **blendShapeData**: `BlendShapeData`
+
+#### Inherited from
+
+PlaneGeometry.blendShapeData
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L46)
+
+___
+
+### vertexDim
+
+• **vertexDim**: `number`
+
+#### Inherited from
+
+PlaneGeometry.vertexDim
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L47)
+
+___
+
+### vertexCount
+
+• **vertexCount**: `number` = `0`
+
+#### Inherited from
+
+PlaneGeometry.vertexCount
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L48)
+
+___
+
+### width
+
+• **width**: `number`
+
+Width of the plane
+
+#### Inherited from
+
+PlaneGeometry.width
+
+#### Defined in
+
+[src/shape/PlaneGeometry.ts:14](https://github.com/Orillusion/orillusion/blob/main/src/shape/PlaneGeometry.ts#L14)
+
+___
+
+### height
+
+• **height**: `number`
+
+Height of the plane
+
+#### Inherited from
+
+PlaneGeometry.height
+
+#### Defined in
+
+[src/shape/PlaneGeometry.ts:18](https://github.com/Orillusion/orillusion/blob/main/src/shape/PlaneGeometry.ts#L18)
+
+___
+
+### segmentW
+
+• **segmentW**: `number`
+
+Number of width segments of a plane
+
+#### Inherited from
+
+PlaneGeometry.segmentW
+
+#### Defined in
+
+[src/shape/PlaneGeometry.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/shape/PlaneGeometry.ts#L22)
+
+___
+
+### segmentH
+
+• **segmentH**: `number`
+
+Number of height segments of a plane
+
+#### Inherited from
+
+PlaneGeometry.segmentH
+
+#### Defined in
+
+[src/shape/PlaneGeometry.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/shape/PlaneGeometry.ts#L26)
+
+___
+
+### up
+
+• **up**: `Vector3`
+
+Define the normal vector of a plane
+
+#### Inherited from
+
+PlaneGeometry.up
+
+#### Defined in
+
+[src/shape/PlaneGeometry.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/shape/PlaneGeometry.ts#L30)
+
+## Accessors
+
+### heightData
+
+• `get` **heightData**(): `number`[][]
+
+#### Returns
+
+`number`[][]
+
+#### Defined in
+
+[packages/geometry/terrain/TerrainGeometry.ts:81](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/terrain/TerrainGeometry.ts#L81)
+
+___
+
+### greenData
+
+• `get` **greenData**(): `Vector3`[]
+
+#### Returns
+
+`Vector3`[]
+
+#### Defined in
+
+[packages/geometry/terrain/TerrainGeometry.ts:85](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/terrain/TerrainGeometry.ts#L85)
+
+___
+
+### indicesBuffer
+
+• `get` **indicesBuffer**(): `GeometryIndicesBuffer`
+
+#### Returns
+
+`GeometryIndicesBuffer`
+
+#### Inherited from
+
+PlaneGeometry.indicesBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L69)
+
+___
+
+### vertexBuffer
+
+• `get` **vertexBuffer**(): `GeometryVertexBuffer`
+
+#### Returns
+
+`GeometryVertexBuffer`
+
+#### Inherited from
+
+PlaneGeometry.vertexBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L73)
+
+___
+
+### vertexAttributes
+
+• `get` **vertexAttributes**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+PlaneGeometry.vertexAttributes
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L77)
+
+___
+
+### vertexAttributeMap
+
+• `get` **vertexAttributeMap**(): `Map`\<`string`, `VertexAttributeData`\>
+
+#### Returns
+
+`Map`\<`string`, `VertexAttributeData`\>
+
+#### Inherited from
+
+PlaneGeometry.vertexAttributeMap
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L81)
+
+___
+
+### geometryType
+
+• `get` **geometryType**(): `GeometryVertexType`
+
+#### Returns
+
+`GeometryVertexType`
+
+#### Inherited from
+
+PlaneGeometry.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L85)
+
+• `set` **geometryType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GeometryVertexType` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PlaneGeometry.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L88)
+
+___
+
+### bounds
+
+• `get` **bounds**(): `BoundingBox`
+
+#### Returns
+
+`BoundingBox`
+
+#### Inherited from
+
+PlaneGeometry.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L92)
+
+• `set` **bounds**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BoundingBox` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PlaneGeometry.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L135)
+
+## Methods
+
+### setHeight
+
+▸ **setHeight**(`texture`, `height`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | `BitmapTexture2D` |
+| `height` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/terrain/TerrainGeometry.ts:13](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/terrain/TerrainGeometry.ts#L13)
+
+___
+
+### addSubGeometry
+
+▸ **addSubGeometry**(`...lodLevels`): `SubGeometry`
+
+add subGeometry from lod level
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `...lodLevels` | `LODDescriptor`[] |
+
+#### Returns
+
+`SubGeometry`
+
+**`See`**
+
+LODDescriptor
+
+#### Inherited from
+
+PlaneGeometry.addSubGeometry
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L144)
+
+___
+
+### generate
+
+▸ **generate**(`shaderReflection`): `void`
+
+create geometry by shaderReflection
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `shaderReflection` | `ShaderReflection` | ShaderReflection |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PlaneGeometry.generate
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L155)
+
+___
+
+### setIndices
+
+▸ **setIndices**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `ArrayBufferData` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PlaneGeometry.setIndices
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L165)
+
+___
+
+### setAttribute
+
+▸ **setAttribute**(`attribute`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+| `data` | `ArrayBufferData` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PlaneGeometry.setAttribute
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L177)
+
+___
+
+### getAttribute
+
+▸ **getAttribute**(`attribute`): `VertexAttributeData`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`VertexAttributeData`
+
+#### Inherited from
+
+PlaneGeometry.getAttribute
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L190)
+
+___
+
+### hasAttribute
+
+▸ **hasAttribute**(`attribute`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+PlaneGeometry.hasAttribute
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L194)
+
+___
+
+### genWireframe
+
+▸ **genWireframe**(): `Vector3`[]
+
+#### Returns
+
+`Vector3`[]
+
+#### Inherited from
+
+PlaneGeometry.genWireframe
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L198)
+
+___
+
+### compute
+
+▸ **compute**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PlaneGeometry.compute
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L251)
+
+___
+
+### computeNormals
+
+▸ **computeNormals**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+PlaneGeometry.computeNormals
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:270](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L270)
+
+___
+
+### isPrimitive
+
+▸ **isPrimitive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+PlaneGeometry.isPrimitive
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L312)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+PlaneGeometry.destroy
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:316](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L316)
diff --git a/docs/geometry/classes/TextGeometry.md b/docs/geometry/classes/TextGeometry.md
new file mode 100644
index 00000000..7aa59e21
--- /dev/null
+++ b/docs/geometry/classes/TextGeometry.md
@@ -0,0 +1,720 @@
+# Class: TextGeometry
+
+## Hierarchy
+
+- [`ExtrudeGeometry`](ExtrudeGeometry.md)
+
+ ↳ **`TextGeometry`**
+
+### Constructors
+
+- [constructor](TextGeometry.md#constructor)
+
+### Properties
+
+- [shapes](TextGeometry.md#shapes)
+- [options](TextGeometry.md#options)
+- [instanceID](TextGeometry.md#instanceid)
+- [name](TextGeometry.md#name)
+- [subGeometries](TextGeometry.md#subgeometries)
+- [morphTargetsRelative](TextGeometry.md#morphtargetsrelative)
+- [morphTargetDictionary](TextGeometry.md#morphtargetdictionary)
+- [skinNames](TextGeometry.md#skinnames)
+- [bindPose](TextGeometry.md#bindpose)
+- [blendShapeData](TextGeometry.md#blendshapedata)
+- [vertexDim](TextGeometry.md#vertexdim)
+- [vertexCount](TextGeometry.md#vertexcount)
+
+### Accessors
+
+- [font](TextGeometry.md#font)
+- [text](TextGeometry.md#text)
+- [fontSize](TextGeometry.md#fontsize)
+- [indicesBuffer](TextGeometry.md#indicesbuffer)
+- [vertexBuffer](TextGeometry.md#vertexbuffer)
+- [vertexAttributes](TextGeometry.md#vertexattributes)
+- [vertexAttributeMap](TextGeometry.md#vertexattributemap)
+- [geometryType](TextGeometry.md#geometrytype)
+- [bounds](TextGeometry.md#bounds)
+
+### Methods
+
+- [addSubGeometry](TextGeometry.md#addsubgeometry)
+- [generate](TextGeometry.md#generate)
+- [setIndices](TextGeometry.md#setindices)
+- [setAttribute](TextGeometry.md#setattribute)
+- [getAttribute](TextGeometry.md#getattribute)
+- [hasAttribute](TextGeometry.md#hasattribute)
+- [genWireframe](TextGeometry.md#genwireframe)
+- [compute](TextGeometry.md#compute)
+- [computeNormals](TextGeometry.md#computenormals)
+- [isPrimitive](TextGeometry.md#isprimitive)
+- [destroy](TextGeometry.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new TextGeometry**(`text`, `options`): [`TextGeometry`](TextGeometry.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `text` | `string` |
+| `options` | [`TextGeometryArgs`](../types/TextGeometryArgs.md) |
+
+#### Returns
+
+[`TextGeometry`](TextGeometry.md)
+
+#### Overrides
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[constructor](ExtrudeGeometry.md#constructor)
+
+#### Defined in
+
+[packages/geometry/text/TextGeometry.ts:14](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/text/TextGeometry.ts#L14)
+
+## Properties
+
+### shapes
+
+• **shapes**: [`Shape2D`](Shape2D.md)[]
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[shapes](ExtrudeGeometry.md#shapes)
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/ExtrudeGeometry.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/ExtrudeGeometry.ts#L17)
+
+___
+
+### options
+
+• **options**: [`TextGeometryArgs`](../types/TextGeometryArgs.md)
+
+#### Overrides
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[options](ExtrudeGeometry.md#options)
+
+#### Defined in
+
+[packages/geometry/text/TextGeometry.ts:13](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/text/TextGeometry.ts#L13)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[instanceID](ExtrudeGeometry.md#instanceid)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L39)
+
+___
+
+### name
+
+• **name**: `string`
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[name](ExtrudeGeometry.md#name)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L40)
+
+___
+
+### subGeometries
+
+• **subGeometries**: `SubGeometry`[] = `[]`
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[subGeometries](ExtrudeGeometry.md#subgeometries)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L41)
+
+___
+
+### morphTargetsRelative
+
+• **morphTargetsRelative**: `boolean`
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[morphTargetsRelative](ExtrudeGeometry.md#morphtargetsrelative)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L42)
+
+___
+
+### morphTargetDictionary
+
+• **morphTargetDictionary**: `Object`
+
+#### Index signature
+
+▪ [blenderName: `string`]: `number`
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[morphTargetDictionary](ExtrudeGeometry.md#morphtargetdictionary)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L43)
+
+___
+
+### skinNames
+
+• **skinNames**: `string`[]
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[skinNames](ExtrudeGeometry.md#skinnames)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L44)
+
+___
+
+### bindPose
+
+• **bindPose**: `Matrix4`[]
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[bindPose](ExtrudeGeometry.md#bindpose)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L45)
+
+___
+
+### blendShapeData
+
+• **blendShapeData**: `BlendShapeData`
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[blendShapeData](ExtrudeGeometry.md#blendshapedata)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:46](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L46)
+
+___
+
+### vertexDim
+
+• **vertexDim**: `number`
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[vertexDim](ExtrudeGeometry.md#vertexdim)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L47)
+
+___
+
+### vertexCount
+
+• **vertexCount**: `number` = `0`
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[vertexCount](ExtrudeGeometry.md#vertexcount)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L48)
+
+## Accessors
+
+### font
+
+• `get` **font**(): `Font`
+
+#### Returns
+
+`Font`
+
+#### Defined in
+
+[packages/geometry/text/TextGeometry.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/text/TextGeometry.ts#L20)
+
+___
+
+### text
+
+• `get` **text**(): `string`
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[packages/geometry/text/TextGeometry.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/text/TextGeometry.ts#L24)
+
+• `set` **text**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/text/TextGeometry.ts:36](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/text/TextGeometry.ts#L36)
+
+___
+
+### fontSize
+
+• `get` **fontSize**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/geometry/text/TextGeometry.ts:28](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/text/TextGeometry.ts#L28)
+
+• `set` **fontSize**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/geometry/text/TextGeometry.ts:32](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/text/TextGeometry.ts#L32)
+
+___
+
+### indicesBuffer
+
+• `get` **indicesBuffer**(): `GeometryIndicesBuffer`
+
+#### Returns
+
+`GeometryIndicesBuffer`
+
+#### Inherited from
+
+ExtrudeGeometry.indicesBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:69](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L69)
+
+___
+
+### vertexBuffer
+
+• `get` **vertexBuffer**(): `GeometryVertexBuffer`
+
+#### Returns
+
+`GeometryVertexBuffer`
+
+#### Inherited from
+
+ExtrudeGeometry.vertexBuffer
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:73](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L73)
+
+___
+
+### vertexAttributes
+
+• `get` **vertexAttributes**(): `string`[]
+
+#### Returns
+
+`string`[]
+
+#### Inherited from
+
+ExtrudeGeometry.vertexAttributes
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L77)
+
+___
+
+### vertexAttributeMap
+
+• `get` **vertexAttributeMap**(): `Map`\<`string`, `VertexAttributeData`\>
+
+#### Returns
+
+`Map`\<`string`, `VertexAttributeData`\>
+
+#### Inherited from
+
+ExtrudeGeometry.vertexAttributeMap
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L81)
+
+___
+
+### geometryType
+
+• `get` **geometryType**(): `GeometryVertexType`
+
+#### Returns
+
+`GeometryVertexType`
+
+#### Inherited from
+
+ExtrudeGeometry.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L85)
+
+• `set` **geometryType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GeometryVertexType` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ExtrudeGeometry.geometryType
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:88](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L88)
+
+___
+
+### bounds
+
+• `get` **bounds**(): `BoundingBox`
+
+#### Returns
+
+`BoundingBox`
+
+#### Inherited from
+
+ExtrudeGeometry.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:92](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L92)
+
+• `set` **bounds**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BoundingBox` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ExtrudeGeometry.bounds
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:135](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L135)
+
+## Methods
+
+### addSubGeometry
+
+▸ **addSubGeometry**(`...lodLevels`): `SubGeometry`
+
+add subGeometry from lod level
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `...lodLevels` | `LODDescriptor`[] |
+
+#### Returns
+
+`SubGeometry`
+
+**`See`**
+
+LODDescriptor
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[addSubGeometry](ExtrudeGeometry.md#addsubgeometry)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L144)
+
+___
+
+### generate
+
+▸ **generate**(`shaderReflection`): `void`
+
+create geometry by shaderReflection
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `shaderReflection` | `ShaderReflection` | ShaderReflection |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[generate](ExtrudeGeometry.md#generate)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:155](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L155)
+
+___
+
+### setIndices
+
+▸ **setIndices**(`data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `ArrayBufferData` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[setIndices](ExtrudeGeometry.md#setindices)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L165)
+
+___
+
+### setAttribute
+
+▸ **setAttribute**(`attribute`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+| `data` | `ArrayBufferData` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[setAttribute](ExtrudeGeometry.md#setattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L177)
+
+___
+
+### getAttribute
+
+▸ **getAttribute**(`attribute`): `VertexAttributeData`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`VertexAttributeData`
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[getAttribute](ExtrudeGeometry.md#getattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L190)
+
+___
+
+### hasAttribute
+
+▸ **hasAttribute**(`attribute`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `attribute` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[hasAttribute](ExtrudeGeometry.md#hasattribute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:194](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L194)
+
+___
+
+### genWireframe
+
+▸ **genWireframe**(): `Vector3`[]
+
+#### Returns
+
+`Vector3`[]
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[genWireframe](ExtrudeGeometry.md#genwireframe)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L198)
+
+___
+
+### compute
+
+▸ **compute**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[compute](ExtrudeGeometry.md#compute)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:251](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L251)
+
+___
+
+### computeNormals
+
+▸ **computeNormals**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[computeNormals](ExtrudeGeometry.md#computenormals)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:270](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L270)
+
+___
+
+### isPrimitive
+
+▸ **isPrimitive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[isPrimitive](ExtrudeGeometry.md#isprimitive)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:312](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L312)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ExtrudeGeometry](ExtrudeGeometry.md).[destroy](ExtrudeGeometry.md#destroy)
+
+#### Defined in
+
+[src/core/geometry/GeometryBase.ts:316](https://github.com/Orillusion/orillusion/blob/main/src/core/geometry/GeometryBase.ts#L316)
diff --git a/docs/geometry/enums/CurveType.md b/docs/geometry/enums/CurveType.md
new file mode 100644
index 00000000..757f85fe
--- /dev/null
+++ b/docs/geometry/enums/CurveType.md
@@ -0,0 +1,48 @@
+# Enumeration: CurveType
+
+### Enumeration Members
+
+- [LineCurve](CurveType.md#linecurve)
+- [SplineCurve](CurveType.md#splinecurve)
+- [EllipseCurve](CurveType.md#ellipsecurve)
+- [QuadraticBezierCurve](CurveType.md#quadraticbeziercurve)
+
+## Enumeration Members
+
+### LineCurve
+
+• **LineCurve** = ``0``
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts:4](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts#L4)
+
+___
+
+### SplineCurve
+
+• **SplineCurve** = ``1``
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts:5](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts#L5)
+
+___
+
+### EllipseCurve
+
+• **EllipseCurve** = ``2``
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts:6](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts#L6)
+
+___
+
+### QuadraticBezierCurve
+
+• **QuadraticBezierCurve** = ``3``
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts:7](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/Curve/Curve2D.ts#L7)
diff --git a/docs/geometry/index.md b/docs/geometry/index.md
new file mode 100644
index 00000000..b5001d91
--- /dev/null
+++ b/docs/geometry/index.md
@@ -0,0 +1,27 @@
+# @orillusion/geometry
+
+## Enumerations
+
+- [CurveType](enums/CurveType.md)
+
+## Classes
+
+- [CubicBezierCurve2D](classes/CubicBezierCurve2D.md)
+- [Curve2D](classes/Curve2D.md)
+- [LineCurve2D](classes/LineCurve2D.md)
+- [QuadraticBezierCurve2D](classes/QuadraticBezierCurve2D.md)
+- [ExtrudeGeometry](classes/ExtrudeGeometry.md)
+- [Path2D](classes/Path2D.md)
+- [Shape2D](classes/Shape2D.md)
+- [ShapeUtils](classes/ShapeUtils.md)
+- [GrassGeometry](classes/GrassGeometry.md)
+- [GrassComponent](classes/GrassComponent.md)
+- [GrassMaterial](classes/GrassMaterial.md)
+- [FontParser](classes/FontParser.md)
+- [TerrainGeometry](classes/TerrainGeometry.md)
+- [TextGeometry](classes/TextGeometry.md)
+
+## Type Aliases
+
+- [ExtrudeGeometryArgs](types/ExtrudeGeometryArgs.md)
+- [TextGeometryArgs](types/TextGeometryArgs.md)
diff --git a/docs/geometry/types/ExtrudeGeometryArgs.md b/docs/geometry/types/ExtrudeGeometryArgs.md
new file mode 100644
index 00000000..4f92a65f
--- /dev/null
+++ b/docs/geometry/types/ExtrudeGeometryArgs.md
@@ -0,0 +1,20 @@
+# Type alias: ExtrudeGeometryArgs
+
+Ƭ **ExtrudeGeometryArgs**: `Object`
+
+#### Type declaration
+
+| Name | Type |
+| :------ | :------ |
+| `curveSegments?` | `number` |
+| `steps?` | `number` |
+| `depth?` | `number` |
+| `bevelEnabled?` | `boolean` |
+| `bevelThickness?` | `number` |
+| `bevelSize?` | `number` |
+| `bevelOffset?` | `number` |
+| `bevelSegments?` | `number` |
+
+#### Defined in
+
+[packages/geometry/ExtrudeGeometry/ExtrudeGeometry.ts:5](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/ExtrudeGeometry/ExtrudeGeometry.ts#L5)
diff --git a/docs/geometry/types/TextGeometryArgs.md b/docs/geometry/types/TextGeometryArgs.md
new file mode 100644
index 00000000..8241b593
--- /dev/null
+++ b/docs/geometry/types/TextGeometryArgs.md
@@ -0,0 +1,7 @@
+# Type alias: TextGeometryArgs
+
+Ƭ **TextGeometryArgs**: [`ExtrudeGeometryArgs`](ExtrudeGeometryArgs.md) & \{ `font`: `Font` ; `fontSize`: `number` }
+
+#### Defined in
+
+[packages/geometry/text/TextGeometry.ts:6](https://github.com/Orillusion/orillusion/blob/main/packages/geometry/text/TextGeometry.ts#L6)
diff --git a/docs/graphic/classes/CircleShape3D.md b/docs/graphic/classes/CircleShape3D.md
new file mode 100644
index 00000000..8d80a443
--- /dev/null
+++ b/docs/graphic/classes/CircleShape3D.md
@@ -0,0 +1,1100 @@
+# Class: CircleShape3D
+
+Define class for drawing Circle on the xz plane
+You can use the API implemented in CanvasPath in Path2DShape3D to draw the xz plane path
+
+**`Export`**
+
+## Hierarchy
+
+- [`Shape3D`](Shape3D.md)
+
+ ↳ **`CircleShape3D`**
+
+### Constructors
+
+- [constructor](CircleShape3D.md#constructor)
+
+### Properties
+
+- [shapeType](CircleShape3D.md#shapetype)
+- [shapeIndex](CircleShape3D.md#shapeindex)
+- [computeEveryFrame](CircleShape3D.md#computeeveryframe)
+
+### Accessors
+
+- [segment](CircleShape3D.md#segment)
+- [radius](CircleShape3D.md#radius)
+- [startAngle](CircleShape3D.md#startangle)
+- [endAngle](CircleShape3D.md#endangle)
+- [arcType](CircleShape3D.md#arctype)
+- [isChange](CircleShape3D.md#ischange)
+- [lineColor](CircleShape3D.md#linecolor)
+- [fillColor](CircleShape3D.md#fillcolor)
+- [lineTextureID](CircleShape3D.md#linetextureid)
+- [fillTextureID](CircleShape3D.md#filltextureid)
+- [fillRotation](CircleShape3D.md#fillrotation)
+- [shapeOrder](CircleShape3D.md#shapeorder)
+- [srcPointStart](CircleShape3D.md#srcpointstart)
+- [srcPointCount](CircleShape3D.md#srcpointcount)
+- [srcIndexStart](CircleShape3D.md#srcindexstart)
+- [srcIndexCount](CircleShape3D.md#srcindexcount)
+- [destPointStart](CircleShape3D.md#destpointstart)
+- [destPointCount](CircleShape3D.md#destpointcount)
+- [points3D](CircleShape3D.md#points3d)
+- [isClosed](CircleShape3D.md#isclosed)
+- [fill](CircleShape3D.md#fill)
+- [line](CircleShape3D.md#line)
+- [lineWidth](CircleShape3D.md#linewidth)
+- [lineUVRect](CircleShape3D.md#lineuvrect)
+- [fillUVRect](CircleShape3D.md#filluvrect)
+- [uvSpeed](CircleShape3D.md#uvspeed)
+
+### Methods
+
+- [set](CircleShape3D.md#set)
+- [calcRequireSource](CircleShape3D.md#calcrequiresource)
+- [writeData](CircleShape3D.md#writedata)
+- [clean](CircleShape3D.md#clean)
+
+## Constructors
+
+### constructor
+
+• **new CircleShape3D**(`structs`, `sharedPoints`, `sharedIndecies`, `matrixIndex`): [`CircleShape3D`](CircleShape3D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `structs` | [`Shape3DStruct`](Shape3DStruct.md) |
+| `sharedPoints` | `Float32Array` |
+| `sharedIndecies` | `Uint32Array` |
+| `matrixIndex` | `number` |
+
+#### Returns
+
+[`CircleShape3D`](CircleShape3D.md)
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[constructor](Shape3D.md#constructor)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:113](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L113)
+
+## Properties
+
+### shapeType
+
+• `Readonly` **shapeType**: `number`
+
+#### Overrides
+
+[Shape3D](Shape3D.md).[shapeType](Shape3D.md#shapetype)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CircleShape3D.ts:16](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CircleShape3D.ts#L16)
+
+___
+
+### shapeIndex
+
+• `Readonly` **shapeIndex**: `number` = `0`
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[shapeIndex](Shape3D.md#shapeindex)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:109](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L109)
+
+___
+
+### computeEveryFrame
+
+• `Optional` `Readonly` **computeEveryFrame**: `boolean`
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[computeEveryFrame](Shape3D.md#computeeveryframe)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:111](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L111)
+
+## Accessors
+
+### segment
+
+• `get` **segment**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CircleShape3D.ts:26](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CircleShape3D.ts#L26)
+
+• `set` **segment**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CircleShape3D.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CircleShape3D.ts#L29)
+
+___
+
+### radius
+
+• `get` **radius**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CircleShape3D.ts:35](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CircleShape3D.ts#L35)
+
+• `set` **radius**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CircleShape3D.ts:38](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CircleShape3D.ts#L38)
+
+___
+
+### startAngle
+
+• `get` **startAngle**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CircleShape3D.ts:45](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CircleShape3D.ts#L45)
+
+• `set` **startAngle**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CircleShape3D.ts:48](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CircleShape3D.ts#L48)
+
+___
+
+### endAngle
+
+• `get` **endAngle**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CircleShape3D.ts:60](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CircleShape3D.ts#L60)
+
+• `set` **endAngle**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CircleShape3D.ts:63](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CircleShape3D.ts#L63)
+
+___
+
+### arcType
+
+• `get` **arcType**(): [`CircleArcType`](../enums/CircleArcType.md)
+
+#### Returns
+
+[`CircleArcType`](../enums/CircleArcType.md)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CircleShape3D.ts:76](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CircleShape3D.ts#L76)
+
+• `set` **arcType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CircleArcType`](../enums/CircleArcType.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CircleShape3D.ts:79](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CircleShape3D.ts#L79)
+
+___
+
+### isChange
+
+• `get` **isChange**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Shape3D.isChange
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:120](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L120)
+
+___
+
+### lineColor
+
+• `get` **lineColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+Shape3D.lineColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:135](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L135)
+
+• `set` **lineColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.lineColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:130](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L130)
+
+___
+
+### fillColor
+
+• `get` **fillColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+Shape3D.fillColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:144](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L144)
+
+• `set` **fillColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fillColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:139](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L139)
+
+___
+
+### lineTextureID
+
+• `get` **lineTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.lineTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:148](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L148)
+
+• `set` **lineTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.lineTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:151](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L151)
+
+___
+
+### fillTextureID
+
+• `get` **fillTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.fillTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:157](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L157)
+
+• `set` **fillTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fillTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:160](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L160)
+
+___
+
+### fillRotation
+
+• `get` **fillRotation**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.fillRotation
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:167](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L167)
+
+• `set` **fillRotation**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fillRotation
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:170](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L170)
+
+___
+
+### shapeOrder
+
+• `get` **shapeOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.shapeOrder
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:177](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L177)
+
+• `set` **shapeOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.shapeOrder
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:180](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L180)
+
+___
+
+### srcPointStart
+
+• `get` **srcPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.srcPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:188](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L188)
+
+• `set` **srcPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.srcPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:191](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L191)
+
+___
+
+### srcPointCount
+
+• `get` **srcPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.srcPointCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:198](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L198)
+
+___
+
+### srcIndexStart
+
+• `get` **srcIndexStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.srcIndexStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:202](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L202)
+
+• `set` **srcIndexStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.srcIndexStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:205](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L205)
+
+___
+
+### srcIndexCount
+
+• `get` **srcIndexCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.srcIndexCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:212](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L212)
+
+___
+
+### destPointStart
+
+• `get` **destPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.destPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:216](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L216)
+
+• `set` **destPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.destPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:219](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L219)
+
+___
+
+### destPointCount
+
+• `get` **destPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.destPointCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:225](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L225)
+
+___
+
+### points3D
+
+• `get` **points3D**(): [`Point3D`](Point3D.md)[]
+
+#### Returns
+
+[`Point3D`](Point3D.md)[]
+
+#### Inherited from
+
+Shape3D.points3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:229](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L229)
+
+• `set` **points3D**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Point3D`](Point3D.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.points3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:232](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L232)
+
+___
+
+### isClosed
+
+• `get` **isClosed**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Shape3D.isClosed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:238](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L238)
+
+• `set` **isClosed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.isClosed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:241](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L241)
+
+___
+
+### fill
+
+• `get` **fill**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Shape3D.fill
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:248](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L248)
+
+• `set` **fill**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fill
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:251](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L251)
+
+___
+
+### line
+
+• `get` **line**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Shape3D.line
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:257](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L257)
+
+• `set` **line**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.line
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:260](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L260)
+
+___
+
+### lineWidth
+
+• `get` **lineWidth**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.lineWidth
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:267](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L267)
+
+• `set` **lineWidth**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.lineWidth
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:271](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L271)
+
+___
+
+### lineUVRect
+
+• `get` **lineUVRect**(): `Vector4`
+
+x: u offset of line.
+y: v offset of line.
+z: u scale of line.
+w: v scale of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+Shape3D.lineUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:288](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L288)
+
+• `set` **lineUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.lineUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:291](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L291)
+
+___
+
+### fillUVRect
+
+• `get` **fillUVRect**(): `Vector4`
+
+x: u offset of filled area.
+y: v offset of filled area.
+z: u scale of filled area.
+w: v scale of filled area.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+Shape3D.fillUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:305](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L305)
+
+• `set` **fillUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fillUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:308](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L308)
+
+___
+
+### uvSpeed
+
+• `get` **uvSpeed**(): `Vector4`
+
+x: u speed of filled area.
+y: v speed of filled area.
+z: u speed of line.
+w: v speed of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+Shape3D.uvSpeed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:322](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L322)
+
+• `set` **uvSpeed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.uvSpeed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:325](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L325)
+
+## Methods
+
+### set
+
+▸ **set**(`radius`, `lineWidth`, `fill`, `line`, `segment?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `radius` | `number` | `undefined` |
+| `lineWidth` | `number` | `undefined` |
+| `fill` | `boolean` | `undefined` |
+| `line` | `boolean` | `undefined` |
+| `segment` | `number` | `10` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CircleShape3D.ts:18](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CircleShape3D.ts#L18)
+
+___
+
+### calcRequireSource
+
+▸ **calcRequireSource**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[Shape3D](Shape3D.md).[calcRequireSource](Shape3D.md#calcrequiresource)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CircleShape3D.ts:86](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CircleShape3D.ts#L86)
+
+___
+
+### writeData
+
+▸ **writeData**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[writeData](Shape3D.md#writedata)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:124](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L124)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[clean](Shape3D.md#clean)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:330](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L330)
diff --git a/docs/graphic/classes/CurveShape3D.md b/docs/graphic/classes/CurveShape3D.md
new file mode 100644
index 00000000..dba09f66
--- /dev/null
+++ b/docs/graphic/classes/CurveShape3D.md
@@ -0,0 +1,1212 @@
+# Class: CurveShape3D
+
+Define class for drawing Curve on the xz plane
+You can use the API implemented in CanvasPath in Path2DShape3D to draw the xz plane path
+
+**`Export`**
+
+## Hierarchy
+
+- [`LineShape3D`](LineShape3D.md)
+
+ ↳ **`CurveShape3D`**
+
+### Constructors
+
+- [constructor](CurveShape3D.md#constructor)
+
+### Properties
+
+- [shapeType](CurveShape3D.md#shapetype)
+- [shapeIndex](CurveShape3D.md#shapeindex)
+- [computeEveryFrame](CurveShape3D.md#computeeveryframe)
+
+### Accessors
+
+- [start](CurveShape3D.md#start)
+- [end](CurveShape3D.md#end)
+- [cp1](CurveShape3D.md#cp1)
+- [cp2](CurveShape3D.md#cp2)
+- [segment](CurveShape3D.md#segment)
+- [corner](CurveShape3D.md#corner)
+- [lineJoin](CurveShape3D.md#linejoin)
+- [isChange](CurveShape3D.md#ischange)
+- [lineColor](CurveShape3D.md#linecolor)
+- [fillColor](CurveShape3D.md#fillcolor)
+- [lineTextureID](CurveShape3D.md#linetextureid)
+- [fillTextureID](CurveShape3D.md#filltextureid)
+- [fillRotation](CurveShape3D.md#fillrotation)
+- [shapeOrder](CurveShape3D.md#shapeorder)
+- [srcPointStart](CurveShape3D.md#srcpointstart)
+- [srcPointCount](CurveShape3D.md#srcpointcount)
+- [srcIndexStart](CurveShape3D.md#srcindexstart)
+- [srcIndexCount](CurveShape3D.md#srcindexcount)
+- [destPointStart](CurveShape3D.md#destpointstart)
+- [destPointCount](CurveShape3D.md#destpointcount)
+- [points3D](CurveShape3D.md#points3d)
+- [isClosed](CurveShape3D.md#isclosed)
+- [fill](CurveShape3D.md#fill)
+- [line](CurveShape3D.md#line)
+- [lineWidth](CurveShape3D.md#linewidth)
+- [lineUVRect](CurveShape3D.md#lineuvrect)
+- [fillUVRect](CurveShape3D.md#filluvrect)
+- [uvSpeed](CurveShape3D.md#uvspeed)
+
+### Methods
+
+- [calcRequireSource](CurveShape3D.md#calcrequiresource)
+- [sampleQuadraticCurve](CurveShape3D.md#samplequadraticcurve)
+- [sampleCurve](CurveShape3D.md#samplecurve)
+- [writeData](CurveShape3D.md#writedata)
+- [clean](CurveShape3D.md#clean)
+
+## Constructors
+
+### constructor
+
+• **new CurveShape3D**(`structs`, `sharedPoints`, `sharedIndecies`, `matrixIndex`): [`CurveShape3D`](CurveShape3D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `structs` | [`Shape3DStruct`](Shape3DStruct.md) |
+| `sharedPoints` | `Float32Array` |
+| `sharedIndecies` | `Uint32Array` |
+| `matrixIndex` | `number` |
+
+#### Returns
+
+[`CurveShape3D`](CurveShape3D.md)
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[constructor](LineShape3D.md#constructor)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:113](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L113)
+
+## Properties
+
+### shapeType
+
+• `Readonly` **shapeType**: `number`
+
+#### Overrides
+
+[LineShape3D](LineShape3D.md).[shapeType](LineShape3D.md#shapetype)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CurveShape3D.ts:14](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CurveShape3D.ts#L14)
+
+___
+
+### shapeIndex
+
+• `Readonly` **shapeIndex**: `number` = `0`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[shapeIndex](LineShape3D.md#shapeindex)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:109](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L109)
+
+___
+
+### computeEveryFrame
+
+• `Optional` `Readonly` **computeEveryFrame**: `boolean`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[computeEveryFrame](LineShape3D.md#computeeveryframe)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:111](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L111)
+
+## Accessors
+
+### start
+
+• `get` **start**(): `Vector2`
+
+#### Returns
+
+`Vector2`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CurveShape3D.ts:23](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CurveShape3D.ts#L23)
+
+• `set` **start**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector2` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CurveShape3D.ts:26](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CurveShape3D.ts#L26)
+
+___
+
+### end
+
+• `get` **end**(): `Vector2`
+
+#### Returns
+
+`Vector2`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CurveShape3D.ts:31](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CurveShape3D.ts#L31)
+
+• `set` **end**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector2` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CurveShape3D.ts:34](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CurveShape3D.ts#L34)
+
+___
+
+### cp1
+
+• `get` **cp1**(): `Vector2`
+
+#### Returns
+
+`Vector2`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CurveShape3D.ts:39](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CurveShape3D.ts#L39)
+
+• `set` **cp1**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector2` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CurveShape3D.ts:42](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CurveShape3D.ts#L42)
+
+___
+
+### cp2
+
+• `get` **cp2**(): `Vector2`
+
+#### Returns
+
+`Vector2`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CurveShape3D.ts:46](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CurveShape3D.ts#L46)
+
+• `set` **cp2**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector2` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CurveShape3D.ts:49](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CurveShape3D.ts#L49)
+
+___
+
+### segment
+
+• `get` **segment**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CurveShape3D.ts:54](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CurveShape3D.ts#L54)
+
+• `set` **segment**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CurveShape3D.ts:57](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CurveShape3D.ts#L57)
+
+___
+
+### corner
+
+• `get` **corner**(): `number`
+
+#### Returns
+
+`number`
+
+#### Overrides
+
+LineShape3D.corner
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CurveShape3D.ts:70](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CurveShape3D.ts#L70)
+
+• `set` **corner**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LineShape3D.corner
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CurveShape3D.ts:65](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CurveShape3D.ts#L65)
+
+___
+
+### lineJoin
+
+• `get` **lineJoin**(): [`LineJoin`](../enums/LineJoin.md)
+
+#### Returns
+
+[`LineJoin`](../enums/LineJoin.md)
+
+#### Inherited from
+
+LineShape3D.lineJoin
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:30](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L30)
+
+• `set` **lineJoin**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`LineJoin`](../enums/LineJoin.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineJoin
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:33](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L33)
+
+___
+
+### isChange
+
+• `get` **isChange**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LineShape3D.isChange
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:120](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L120)
+
+___
+
+### lineColor
+
+• `get` **lineColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+LineShape3D.lineColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:135](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L135)
+
+• `set` **lineColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:130](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L130)
+
+___
+
+### fillColor
+
+• `get` **fillColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+LineShape3D.fillColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:144](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L144)
+
+• `set` **fillColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fillColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:139](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L139)
+
+___
+
+### lineTextureID
+
+• `get` **lineTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.lineTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:148](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L148)
+
+• `set` **lineTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:151](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L151)
+
+___
+
+### fillTextureID
+
+• `get` **fillTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.fillTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:157](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L157)
+
+• `set` **fillTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fillTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:160](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L160)
+
+___
+
+### fillRotation
+
+• `get` **fillRotation**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.fillRotation
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:167](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L167)
+
+• `set` **fillRotation**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fillRotation
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:170](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L170)
+
+___
+
+### shapeOrder
+
+• `get` **shapeOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.shapeOrder
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:177](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L177)
+
+• `set` **shapeOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.shapeOrder
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:180](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L180)
+
+___
+
+### srcPointStart
+
+• `get` **srcPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.srcPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:188](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L188)
+
+• `set` **srcPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.srcPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:191](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L191)
+
+___
+
+### srcPointCount
+
+• `get` **srcPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.srcPointCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:198](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L198)
+
+___
+
+### srcIndexStart
+
+• `get` **srcIndexStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.srcIndexStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:202](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L202)
+
+• `set` **srcIndexStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.srcIndexStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:205](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L205)
+
+___
+
+### srcIndexCount
+
+• `get` **srcIndexCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.srcIndexCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:212](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L212)
+
+___
+
+### destPointStart
+
+• `get` **destPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.destPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:216](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L216)
+
+• `set` **destPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.destPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:219](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L219)
+
+___
+
+### destPointCount
+
+• `get` **destPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.destPointCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:225](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L225)
+
+___
+
+### points3D
+
+• `get` **points3D**(): [`Point3D`](Point3D.md)[]
+
+#### Returns
+
+[`Point3D`](Point3D.md)[]
+
+#### Inherited from
+
+LineShape3D.points3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:229](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L229)
+
+• `set` **points3D**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Point3D`](Point3D.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.points3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:232](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L232)
+
+___
+
+### isClosed
+
+• `get` **isClosed**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LineShape3D.isClosed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:238](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L238)
+
+• `set` **isClosed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.isClosed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:241](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L241)
+
+___
+
+### fill
+
+• `get` **fill**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LineShape3D.fill
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:248](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L248)
+
+• `set` **fill**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fill
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:251](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L251)
+
+___
+
+### line
+
+• `get` **line**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LineShape3D.line
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:257](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L257)
+
+• `set` **line**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.line
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:260](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L260)
+
+___
+
+### lineWidth
+
+• `get` **lineWidth**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.lineWidth
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:267](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L267)
+
+• `set` **lineWidth**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineWidth
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:271](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L271)
+
+___
+
+### lineUVRect
+
+• `get` **lineUVRect**(): `Vector4`
+
+x: u offset of line.
+y: v offset of line.
+z: u scale of line.
+w: v scale of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+LineShape3D.lineUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:288](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L288)
+
+• `set` **lineUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:291](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L291)
+
+___
+
+### fillUVRect
+
+• `get` **fillUVRect**(): `Vector4`
+
+x: u offset of filled area.
+y: v offset of filled area.
+z: u scale of filled area.
+w: v scale of filled area.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+LineShape3D.fillUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:305](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L305)
+
+• `set` **fillUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fillUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:308](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L308)
+
+___
+
+### uvSpeed
+
+• `get` **uvSpeed**(): `Vector4`
+
+x: u speed of filled area.
+y: v speed of filled area.
+z: u speed of line.
+w: v speed of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+LineShape3D.uvSpeed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:322](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L322)
+
+• `set` **uvSpeed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.uvSpeed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:325](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L325)
+
+## Methods
+
+### calcRequireSource
+
+▸ **calcRequireSource**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[LineShape3D](LineShape3D.md).[calcRequireSource](LineShape3D.md#calcrequiresource)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/CurveShape3D.ts:79](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/CurveShape3D.ts#L79)
+
+___
+
+### sampleQuadraticCurve
+
+▸ **sampleQuadraticCurve**(`start`, `cp`, `end`, `t`, `ret?`): `vec3`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `start` | `vec3` |
+| `cp` | `vec3` |
+| `end` | `vec3` |
+| `t` | `number` |
+| `ret?` | `vec3` |
+
+#### Returns
+
+`vec3`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[sampleQuadraticCurve](LineShape3D.md#samplequadraticcurve)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:56](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L56)
+
+___
+
+### sampleCurve
+
+▸ **sampleCurve**(`start`, `cp1`, `cp2`, `end`, `t`, `ret?`): `vec3`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `start` | `vec3` |
+| `cp1` | `vec3` |
+| `cp2` | `vec3` |
+| `end` | `vec3` |
+| `t` | `number` |
+| `ret?` | `vec3` |
+
+#### Returns
+
+`vec3`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[sampleCurve](LineShape3D.md#samplecurve)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:66](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L66)
+
+___
+
+### writeData
+
+▸ **writeData**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[writeData](LineShape3D.md#writedata)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:124](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L124)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[clean](LineShape3D.md#clean)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:330](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L330)
diff --git a/docs/graphic/classes/DrawInfo.md b/docs/graphic/classes/DrawInfo.md
new file mode 100644
index 00000000..67f186af
--- /dev/null
+++ b/docs/graphic/classes/DrawInfo.md
@@ -0,0 +1,218 @@
+# Class: DrawInfo
+
+## Hierarchy
+
+- `Struct`
+
+ ↳ **`DrawInfo`**
+
+### Constructors
+
+- [constructor](DrawInfo.md#constructor)
+
+### Properties
+
+- [skipFace](DrawInfo.md#skipface)
+- [skipFace2](DrawInfo.md#skipface2)
+- [skipFace3](DrawInfo.md#skipface3)
+- [skipFace4](DrawInfo.md#skipface4)
+
+### Methods
+
+- [getValueSize](DrawInfo.md#getvaluesize)
+- [Ref](DrawInfo.md#ref)
+- [Get](DrawInfo.md#get)
+- [GetSize](DrawInfo.md#getsize)
+- [getValueType](DrawInfo.md#getvaluetype)
+
+## Constructors
+
+### constructor
+
+• **new DrawInfo**(): [`DrawInfo`](DrawInfo.md)
+
+#### Returns
+
+[`DrawInfo`](DrawInfo.md)
+
+#### Inherited from
+
+Struct.constructor
+
+## Properties
+
+### skipFace
+
+• **skipFace**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L19)
+
+___
+
+### skipFace2
+
+• **skipFace2**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L20)
+
+___
+
+### skipFace3
+
+• **skipFace3**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L21)
+
+___
+
+### skipFace4
+
+• **skipFace4**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:22](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L22)
+
+## Methods
+
+### getValueSize
+
+▸ **getValueSize**(`value`): `any`
+
+get any type value memory size
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `any` | any type value |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+Struct.getValueSize
+
+#### Defined in
+
+[src/util/struct/Struct.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L48)
+
+___
+
+### Ref
+
+▸ **Ref**\<`T`\>(`c`): \{ `name`: `string` ; `type`: `string` }[]
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+\{ `name`: `string` ; `type`: `string` }[]
+
+#### Inherited from
+
+Struct.Ref
+
+#### Defined in
+
+[src/util/struct/Struct.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L93)
+
+___
+
+### Get
+
+▸ **Get**\<`T`\>(`c`): `Struct`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+`Struct`
+
+#### Inherited from
+
+Struct.Get
+
+#### Defined in
+
+[src/util/struct/Struct.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L99)
+
+___
+
+### GetSize
+
+▸ **GetSize**\<`T`\>(`c`): `number`
+
+get any struct memory size
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Struct.GetSize
+
+#### Defined in
+
+[src/util/struct/Struct.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L112)
+
+___
+
+### getValueType
+
+▸ **getValueType**(): \{ `name`: `string` ; `type`: `string` }[]
+
+get reflection name
+
+#### Returns
+
+\{ `name`: `string` ; `type`: `string` }[]
+
+#### Inherited from
+
+Struct.getValueType
+
+#### Defined in
+
+[src/util/struct/Struct.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L25)
diff --git a/docs/graphic/classes/DynamicDrawStruct.md b/docs/graphic/classes/DynamicDrawStruct.md
new file mode 100644
index 00000000..d1de8c4e
--- /dev/null
+++ b/docs/graphic/classes/DynamicDrawStruct.md
@@ -0,0 +1,175 @@
+# Class: DynamicDrawStruct
+
+## Hierarchy
+
+- `Struct`
+
+ ↳ **`DynamicDrawStruct`**
+
+ ↳↳ [`GrassNodeStruct`](GrassNodeStruct.md)
+
+ ↳↳ [`Shape3DStruct`](Shape3DStruct.md)
+
+### Constructors
+
+- [constructor](DynamicDrawStruct.md#constructor)
+
+### Methods
+
+- [getValueSize](DynamicDrawStruct.md#getvaluesize)
+- [Ref](DynamicDrawStruct.md#ref)
+- [Get](DynamicDrawStruct.md#get)
+- [GetSize](DynamicDrawStruct.md#getsize)
+- [getValueType](DynamicDrawStruct.md#getvaluetype)
+
+## Constructors
+
+### constructor
+
+• **new DynamicDrawStruct**(): [`DynamicDrawStruct`](DynamicDrawStruct.md)
+
+#### Returns
+
+[`DynamicDrawStruct`](DynamicDrawStruct.md)
+
+#### Inherited from
+
+Struct.constructor
+
+## Methods
+
+### getValueSize
+
+▸ **getValueSize**(`value`): `any`
+
+get any type value memory size
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `any` | any type value |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+Struct.getValueSize
+
+#### Defined in
+
+[src/util/struct/Struct.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L48)
+
+___
+
+### Ref
+
+▸ **Ref**\<`T`\>(`c`): \{ `name`: `string` ; `type`: `string` }[]
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+\{ `name`: `string` ; `type`: `string` }[]
+
+#### Inherited from
+
+Struct.Ref
+
+#### Defined in
+
+[src/util/struct/Struct.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L93)
+
+___
+
+### Get
+
+▸ **Get**\<`T`\>(`c`): `Struct`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+`Struct`
+
+#### Inherited from
+
+Struct.Get
+
+#### Defined in
+
+[src/util/struct/Struct.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L99)
+
+___
+
+### GetSize
+
+▸ **GetSize**\<`T`\>(`c`): `number`
+
+get any struct memory size
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Struct.GetSize
+
+#### Defined in
+
+[src/util/struct/Struct.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L112)
+
+___
+
+### getValueType
+
+▸ **getValueType**(): \{ `name`: `string` ; `type`: `string` }[]
+
+get reflection name
+
+#### Returns
+
+\{ `name`: `string` ; `type`: `string` }[]
+
+#### Inherited from
+
+Struct.getValueType
+
+#### Defined in
+
+[src/util/struct/Struct.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L25)
diff --git a/docs/graphic/classes/DynamicFaceRenderer.md b/docs/graphic/classes/DynamicFaceRenderer.md
new file mode 100644
index 00000000..291584c5
--- /dev/null
+++ b/docs/graphic/classes/DynamicFaceRenderer.md
@@ -0,0 +1,1791 @@
+# Class: DynamicFaceRenderer
+
+## Hierarchy
+
+- `MeshRenderer`
+
+ ↳ **`DynamicFaceRenderer`**
+
+ ↳↳ [`GrassRenderer`](GrassRenderer.md)
+
+ ↳↳ [`Shape3DRenderer`](Shape3DRenderer.md)
+
+### Constructors
+
+- [constructor](DynamicFaceRenderer.md#constructor)
+
+### Properties
+
+- [texture](DynamicFaceRenderer.md#texture)
+- [transformBuffer](DynamicFaceRenderer.md#transformbuffer)
+- [nodeStructBuffer](DynamicFaceRenderer.md#nodestructbuffer)
+- [drawAtomicBuffer](DynamicFaceRenderer.md#drawatomicbuffer)
+- [nodes](DynamicFaceRenderer.md#nodes)
+- [object3D](DynamicFaceRenderer.md#object3d)
+- [isDestroyed](DynamicFaceRenderer.md#isdestroyed)
+- [receiveShadow](DynamicFaceRenderer.md#receiveshadow)
+- [morphData](DynamicFaceRenderer.md#morphdata)
+- [instanceCount](DynamicFaceRenderer.md#instancecount)
+- [lodLevel](DynamicFaceRenderer.md#lodlevel)
+- [alwaysRender](DynamicFaceRenderer.md#alwaysrender)
+- [instanceID](DynamicFaceRenderer.md#instanceid)
+- [drawType](DynamicFaceRenderer.md#drawtype)
+- [isRenderOrderChange](DynamicFaceRenderer.md#isrenderorderchange)
+- [needSortOnCameraZ](DynamicFaceRenderer.md#needsortoncameraz)
+- [isRecievePostEffectUI](DynamicFaceRenderer.md#isrecieveposteffectui)
+
+### Accessors
+
+- [eventDispatcher](DynamicFaceRenderer.md#eventdispatcher)
+- [isStart](DynamicFaceRenderer.md#isstart)
+- [transform](DynamicFaceRenderer.md#transform)
+- [enable](DynamicFaceRenderer.md#enable)
+- [geometry](DynamicFaceRenderer.md#geometry)
+- [material](DynamicFaceRenderer.md#material)
+- [renderLayer](DynamicFaceRenderer.md#renderlayer)
+- [rendererMask](DynamicFaceRenderer.md#renderermask)
+- [renderOrder](DynamicFaceRenderer.md#renderorder)
+- [materials](DynamicFaceRenderer.md#materials)
+- [castShadow](DynamicFaceRenderer.md#castshadow)
+- [castGI](DynamicFaceRenderer.md#castgi)
+- [castReflection](DynamicFaceRenderer.md#castreflection)
+
+### Methods
+
+- [init](DynamicFaceRenderer.md#init)
+- [set](DynamicFaceRenderer.md#set)
+- [setNodeStruct](DynamicFaceRenderer.md#setnodestruct)
+- [updateShape](DynamicFaceRenderer.md#updateshape)
+- [setTextureID](DynamicFaceRenderer.md#settextureid)
+- [setLineTextureID](DynamicFaceRenderer.md#setlinetextureid)
+- [setBaseColor](DynamicFaceRenderer.md#setbasecolor)
+- [setLineColor](DynamicFaceRenderer.md#setlinecolor)
+- [setEmissiveColor](DynamicFaceRenderer.md#setemissivecolor)
+- [setFillRotation](DynamicFaceRenderer.md#setfillrotation)
+- [setUVRect](DynamicFaceRenderer.md#setuvrect)
+- [setUVRect2](DynamicFaceRenderer.md#setuvrect2)
+- [setUVSpeed](DynamicFaceRenderer.md#setuvspeed)
+- [onUpdate](DynamicFaceRenderer.md#onupdate)
+- [onCompute](DynamicFaceRenderer.md#oncompute)
+- [start](DynamicFaceRenderer.md#start)
+- [stop](DynamicFaceRenderer.md#stop)
+- [onLateUpdate](DynamicFaceRenderer.md#onlateupdate)
+- [onBeforeUpdate](DynamicFaceRenderer.md#onbeforeupdate)
+- [onGraphic](DynamicFaceRenderer.md#ongraphic)
+- [onParentChange](DynamicFaceRenderer.md#onparentchange)
+- [onAddChild](DynamicFaceRenderer.md#onaddchild)
+- [onRemoveChild](DynamicFaceRenderer.md#onremovechild)
+- [onEnable](DynamicFaceRenderer.md#onenable)
+- [onDisable](DynamicFaceRenderer.md#ondisable)
+- [cloneTo](DynamicFaceRenderer.md#cloneto)
+- [copyComponent](DynamicFaceRenderer.md#copycomponent)
+- [setMorphInfluence](DynamicFaceRenderer.md#setmorphinfluence)
+- [setMorphInfluenceIndex](DynamicFaceRenderer.md#setmorphinfluenceindex)
+- [destroy](DynamicFaceRenderer.md#destroy)
+- [attachSceneOctree](DynamicFaceRenderer.md#attachsceneoctree)
+- [detachSceneOctree](DynamicFaceRenderer.md#detachsceneoctree)
+- [addMask](DynamicFaceRenderer.md#addmask)
+- [removeMask](DynamicFaceRenderer.md#removemask)
+- [hasMask](DynamicFaceRenderer.md#hasmask)
+- [addRendererMask](DynamicFaceRenderer.md#addrenderermask)
+- [removeRendererMask](DynamicFaceRenderer.md#removerenderermask)
+- [selfCloneMaterials](DynamicFaceRenderer.md#selfclonematerials)
+- [renderPass](DynamicFaceRenderer.md#renderpass)
+- [renderPass2](DynamicFaceRenderer.md#renderpass2)
+- [recordRenderPass2](DynamicFaceRenderer.md#recordrenderpass2)
+- [preInit](DynamicFaceRenderer.md#preinit)
+- [beforeDestroy](DynamicFaceRenderer.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new DynamicFaceRenderer**(): [`DynamicFaceRenderer`](DynamicFaceRenderer.md)
+
+#### Returns
+
+[`DynamicFaceRenderer`](DynamicFaceRenderer.md)
+
+#### Inherited from
+
+MeshRenderer.constructor
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L26)
+
+## Properties
+
+### texture
+
+• **texture**: `BitmapTexture2DArray`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:6](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L6)
+
+___
+
+### transformBuffer
+
+• **transformBuffer**: `StorageGPUBuffer`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:7](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L7)
+
+___
+
+### nodeStructBuffer
+
+• **nodeStructBuffer**: `StructStorageGPUBuffer`\<[`DynamicDrawStruct`](DynamicDrawStruct.md)\>
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:8](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L8)
+
+___
+
+### drawAtomicBuffer
+
+• **drawAtomicBuffer**: `StorageGPUBuffer`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L9)
+
+___
+
+### nodes
+
+• **nodes**: [`DynamicDrawStruct`](DynamicDrawStruct.md)[]
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:12](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L12)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+MeshRenderer.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### receiveShadow
+
+• **receiveShadow**: `boolean`
+
+Enabling this option allows the grid to display any shadows cast on the grid.
+
+#### Inherited from
+
+MeshRenderer.receiveShadow
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L23)
+
+___
+
+### morphData
+
+• **morphData**: `MorphTargetData`
+
+#### Inherited from
+
+MeshRenderer.morphData
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L24)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+MeshRenderer.instanceCount
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+MeshRenderer.lodLevel
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+MeshRenderer.alwaysRender
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+MeshRenderer.instanceID
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+MeshRenderer.drawType
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.isRenderOrderChange
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.needSortOnCameraZ
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.isRecievePostEffectUI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+MeshRenderer.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### geometry
+
+• `get` **geometry**(): `GeometryBase`
+
+The geometry of the mesh determines its shape
+
+#### Returns
+
+`GeometryBase`
+
+#### Inherited from
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L53)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GeometryBase` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L57)
+
+___
+
+### material
+
+• `get` **material**(): `Material`
+
+material
+
+#### Returns
+
+`Material`
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L99)
+
+• `set` **material**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Material` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L103)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): `Material`[]
+
+#### Returns
+
+`Material`[]
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Material`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+## Methods
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+MeshRenderer.init
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:26](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L26)
+
+___
+
+### set
+
+▸ **set**\<`T`\>(`nodeStruct`, `tex`, `standAloneMatrix?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`DynamicDrawStruct`](DynamicDrawStruct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `nodeStruct` | `Ctor`\<`T`\> |
+| `tex` | `BitmapTexture2DArray` |
+| `standAloneMatrix?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:66](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L66)
+
+___
+
+### setNodeStruct
+
+▸ **setNodeStruct**(`index`, `shape`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `shape` | [`DynamicDrawStruct`](DynamicDrawStruct.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:134](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L134)
+
+___
+
+### updateShape
+
+▸ **updateShape**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:141](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L141)
+
+___
+
+### setTextureID
+
+▸ **setTextureID**(`i`, `id`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `id` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:150](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L150)
+
+___
+
+### setLineTextureID
+
+▸ **setLineTextureID**(`i`, `id`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `id` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:155](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L155)
+
+___
+
+### setBaseColor
+
+▸ **setBaseColor**(`i`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:160](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L160)
+
+___
+
+### setLineColor
+
+▸ **setLineColor**(`index`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:165](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L165)
+
+___
+
+### setEmissiveColor
+
+▸ **setEmissiveColor**(`i`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:170](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L170)
+
+___
+
+### setFillRotation
+
+▸ **setFillRotation**(`i`, `radians`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `radians` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:175](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L175)
+
+___
+
+### setUVRect
+
+▸ **setUVRect**(`i`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `v` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:180](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L180)
+
+___
+
+### setUVRect2
+
+▸ **setUVRect2**(`i`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `v` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:185](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L185)
+
+___
+
+### setUVSpeed
+
+▸ **setUVSpeed**(`i`, `v`): `void`
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `i` | `number` | index |
+| `v` | `Vector4` | {x:fill speed u, y: fill speed v, z:line speed u, w: line speed v} |
+
+#### Returns
+
+`void`
+
+**`Memberof`**
+
+DynamicFaceRenderer
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:196](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L196)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+MeshRenderer.onUpdate
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:201](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L201)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view`, `command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | `View3D` |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+MeshRenderer.onCompute
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:208](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L208)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.start
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.onEnable
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L30)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.onDisable
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L34)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `Object3D` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.cloneTo
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L38)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+MeshRenderer.copyComponent
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L43)
+
+___
+
+### setMorphInfluence
+
+▸ **setMorphInfluence**(`key`, `value`): `void`
+
+Set deformation animation parameters
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.setMorphInfluence
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L110)
+
+___
+
+### setMorphInfluenceIndex
+
+▸ **setMorphInfluenceIndex**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.setMorphInfluenceIndex
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L119)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.destroy
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L157)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | `Octree` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.attachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.detachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.addMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.removeMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.hasMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.addRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.removeRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+MeshRenderer.selfCloneMaterials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | `View3D` |
+| `passType` | `PassType` |
+| `renderContext` | `RenderContext` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderPass
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L370)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+render pass at passType
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | `View3D` | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | `ClusterLightingBuffer` | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderPass2
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L438)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | `View3D` | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | `ClusterLightingBuffer` | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.recordRenderPass2
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.preInit
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.beforeDestroy
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
diff --git a/docs/graphic/classes/EllipseShape3D.md b/docs/graphic/classes/EllipseShape3D.md
new file mode 100644
index 00000000..b2e3ae91
--- /dev/null
+++ b/docs/graphic/classes/EllipseShape3D.md
@@ -0,0 +1,1163 @@
+# Class: EllipseShape3D
+
+Define class for drawing Ellipse on the xz plane
+You can use the API implemented in CanvasPath in Path2DShape3D to draw the xz plane path
+
+**`Export`**
+
+## Hierarchy
+
+- [`Shape3D`](Shape3D.md)
+
+ ↳ **`EllipseShape3D`**
+
+### Constructors
+
+- [constructor](EllipseShape3D.md#constructor)
+
+### Properties
+
+- [shapeType](EllipseShape3D.md#shapetype)
+- [shapeIndex](EllipseShape3D.md#shapeindex)
+- [computeEveryFrame](EllipseShape3D.md#computeeveryframe)
+
+### Accessors
+
+- [rx](EllipseShape3D.md#rx)
+- [ry](EllipseShape3D.md#ry)
+- [rotation](EllipseShape3D.md#rotation)
+- [segment](EllipseShape3D.md#segment)
+- [startAngle](EllipseShape3D.md#startangle)
+- [endAngle](EllipseShape3D.md#endangle)
+- [arcType](EllipseShape3D.md#arctype)
+- [isChange](EllipseShape3D.md#ischange)
+- [lineColor](EllipseShape3D.md#linecolor)
+- [fillColor](EllipseShape3D.md#fillcolor)
+- [lineTextureID](EllipseShape3D.md#linetextureid)
+- [fillTextureID](EllipseShape3D.md#filltextureid)
+- [fillRotation](EllipseShape3D.md#fillrotation)
+- [shapeOrder](EllipseShape3D.md#shapeorder)
+- [srcPointStart](EllipseShape3D.md#srcpointstart)
+- [srcPointCount](EllipseShape3D.md#srcpointcount)
+- [srcIndexStart](EllipseShape3D.md#srcindexstart)
+- [srcIndexCount](EllipseShape3D.md#srcindexcount)
+- [destPointStart](EllipseShape3D.md#destpointstart)
+- [destPointCount](EllipseShape3D.md#destpointcount)
+- [points3D](EllipseShape3D.md#points3d)
+- [isClosed](EllipseShape3D.md#isclosed)
+- [fill](EllipseShape3D.md#fill)
+- [line](EllipseShape3D.md#line)
+- [lineWidth](EllipseShape3D.md#linewidth)
+- [lineUVRect](EllipseShape3D.md#lineuvrect)
+- [fillUVRect](EllipseShape3D.md#filluvrect)
+- [uvSpeed](EllipseShape3D.md#uvspeed)
+
+### Methods
+
+- [set](EllipseShape3D.md#set)
+- [calcRequireSource](EllipseShape3D.md#calcrequiresource)
+- [writeData](EllipseShape3D.md#writedata)
+- [clean](EllipseShape3D.md#clean)
+
+## Constructors
+
+### constructor
+
+• **new EllipseShape3D**(`structs`, `sharedPoints`, `sharedIndecies`, `matrixIndex`): [`EllipseShape3D`](EllipseShape3D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `structs` | [`Shape3DStruct`](Shape3DStruct.md) |
+| `sharedPoints` | `Float32Array` |
+| `sharedIndecies` | `Uint32Array` |
+| `matrixIndex` | `number` |
+
+#### Returns
+
+[`EllipseShape3D`](EllipseShape3D.md)
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[constructor](Shape3D.md#constructor)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:113](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L113)
+
+## Properties
+
+### shapeType
+
+• `Readonly` **shapeType**: `number`
+
+#### Overrides
+
+[Shape3D](Shape3D.md).[shapeType](Shape3D.md#shapetype)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/EllipseShape3D.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/EllipseShape3D.ts#L20)
+
+___
+
+### shapeIndex
+
+• `Readonly` **shapeIndex**: `number` = `0`
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[shapeIndex](Shape3D.md#shapeindex)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:109](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L109)
+
+___
+
+### computeEveryFrame
+
+• `Optional` `Readonly` **computeEveryFrame**: `boolean`
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[computeEveryFrame](Shape3D.md#computeeveryframe)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:111](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L111)
+
+## Accessors
+
+### rx
+
+• `get` **rx**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/EllipseShape3D.ts:31](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/EllipseShape3D.ts#L31)
+
+• `set` **rx**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/EllipseShape3D.ts:34](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/EllipseShape3D.ts#L34)
+
+___
+
+### ry
+
+• `get` **ry**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/EllipseShape3D.ts:41](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/EllipseShape3D.ts#L41)
+
+• `set` **ry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/EllipseShape3D.ts:44](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/EllipseShape3D.ts#L44)
+
+___
+
+### rotation
+
+• `get` **rotation**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/EllipseShape3D.ts:51](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/EllipseShape3D.ts#L51)
+
+• `set` **rotation**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/EllipseShape3D.ts:54](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/EllipseShape3D.ts#L54)
+
+___
+
+### segment
+
+• `get` **segment**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/EllipseShape3D.ts:61](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/EllipseShape3D.ts#L61)
+
+• `set` **segment**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/EllipseShape3D.ts:64](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/EllipseShape3D.ts#L64)
+
+___
+
+### startAngle
+
+• `get` **startAngle**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/EllipseShape3D.ts:71](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/EllipseShape3D.ts#L71)
+
+• `set` **startAngle**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/EllipseShape3D.ts:74](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/EllipseShape3D.ts#L74)
+
+___
+
+### endAngle
+
+• `get` **endAngle**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/EllipseShape3D.ts:86](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/EllipseShape3D.ts#L86)
+
+• `set` **endAngle**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/EllipseShape3D.ts:89](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/EllipseShape3D.ts#L89)
+
+___
+
+### arcType
+
+• `get` **arcType**(): [`CircleArcType`](../enums/CircleArcType.md)
+
+#### Returns
+
+[`CircleArcType`](../enums/CircleArcType.md)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/EllipseShape3D.ts:102](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/EllipseShape3D.ts#L102)
+
+• `set` **arcType**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CircleArcType`](../enums/CircleArcType.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/EllipseShape3D.ts:105](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/EllipseShape3D.ts#L105)
+
+___
+
+### isChange
+
+• `get` **isChange**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Shape3D.isChange
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:120](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L120)
+
+___
+
+### lineColor
+
+• `get` **lineColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+Shape3D.lineColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:135](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L135)
+
+• `set` **lineColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.lineColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:130](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L130)
+
+___
+
+### fillColor
+
+• `get` **fillColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+Shape3D.fillColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:144](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L144)
+
+• `set` **fillColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fillColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:139](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L139)
+
+___
+
+### lineTextureID
+
+• `get` **lineTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.lineTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:148](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L148)
+
+• `set` **lineTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.lineTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:151](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L151)
+
+___
+
+### fillTextureID
+
+• `get` **fillTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.fillTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:157](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L157)
+
+• `set` **fillTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fillTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:160](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L160)
+
+___
+
+### fillRotation
+
+• `get` **fillRotation**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.fillRotation
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:167](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L167)
+
+• `set` **fillRotation**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fillRotation
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:170](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L170)
+
+___
+
+### shapeOrder
+
+• `get` **shapeOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.shapeOrder
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:177](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L177)
+
+• `set` **shapeOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.shapeOrder
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:180](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L180)
+
+___
+
+### srcPointStart
+
+• `get` **srcPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.srcPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:188](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L188)
+
+• `set` **srcPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.srcPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:191](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L191)
+
+___
+
+### srcPointCount
+
+• `get` **srcPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.srcPointCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:198](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L198)
+
+___
+
+### srcIndexStart
+
+• `get` **srcIndexStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.srcIndexStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:202](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L202)
+
+• `set` **srcIndexStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.srcIndexStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:205](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L205)
+
+___
+
+### srcIndexCount
+
+• `get` **srcIndexCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.srcIndexCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:212](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L212)
+
+___
+
+### destPointStart
+
+• `get` **destPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.destPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:216](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L216)
+
+• `set` **destPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.destPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:219](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L219)
+
+___
+
+### destPointCount
+
+• `get` **destPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.destPointCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:225](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L225)
+
+___
+
+### points3D
+
+• `get` **points3D**(): [`Point3D`](Point3D.md)[]
+
+#### Returns
+
+[`Point3D`](Point3D.md)[]
+
+#### Inherited from
+
+Shape3D.points3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:229](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L229)
+
+• `set` **points3D**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Point3D`](Point3D.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.points3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:232](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L232)
+
+___
+
+### isClosed
+
+• `get` **isClosed**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Shape3D.isClosed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:238](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L238)
+
+• `set` **isClosed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.isClosed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:241](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L241)
+
+___
+
+### fill
+
+• `get` **fill**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Shape3D.fill
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:248](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L248)
+
+• `set` **fill**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fill
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:251](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L251)
+
+___
+
+### line
+
+• `get` **line**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Shape3D.line
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:257](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L257)
+
+• `set` **line**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.line
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:260](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L260)
+
+___
+
+### lineWidth
+
+• `get` **lineWidth**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.lineWidth
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:267](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L267)
+
+• `set` **lineWidth**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.lineWidth
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:271](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L271)
+
+___
+
+### lineUVRect
+
+• `get` **lineUVRect**(): `Vector4`
+
+x: u offset of line.
+y: v offset of line.
+z: u scale of line.
+w: v scale of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+Shape3D.lineUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:288](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L288)
+
+• `set` **lineUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.lineUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:291](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L291)
+
+___
+
+### fillUVRect
+
+• `get` **fillUVRect**(): `Vector4`
+
+x: u offset of filled area.
+y: v offset of filled area.
+z: u scale of filled area.
+w: v scale of filled area.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+Shape3D.fillUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:305](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L305)
+
+• `set` **fillUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fillUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:308](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L308)
+
+___
+
+### uvSpeed
+
+• `get` **uvSpeed**(): `Vector4`
+
+x: u speed of filled area.
+y: v speed of filled area.
+z: u speed of line.
+w: v speed of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+Shape3D.uvSpeed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:322](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L322)
+
+• `set` **uvSpeed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.uvSpeed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:325](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L325)
+
+## Methods
+
+### set
+
+▸ **set**(`rx`, `ry`, `lineWidth`, `fill`, `line`, `segment?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `rx` | `number` | `undefined` |
+| `ry` | `number` | `undefined` |
+| `lineWidth` | `number` | `undefined` |
+| `fill` | `boolean` | `undefined` |
+| `line` | `boolean` | `undefined` |
+| `segment` | `number` | `10` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/EllipseShape3D.ts:22](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/EllipseShape3D.ts#L22)
+
+___
+
+### calcRequireSource
+
+▸ **calcRequireSource**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[Shape3D](Shape3D.md).[calcRequireSource](Shape3D.md#calcrequiresource)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/EllipseShape3D.ts:112](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/EllipseShape3D.ts#L112)
+
+___
+
+### writeData
+
+▸ **writeData**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[writeData](Shape3D.md#writedata)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:124](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L124)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[clean](Shape3D.md#clean)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:330](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L330)
diff --git a/docs/graphic/classes/Float32ArrayUtil.md b/docs/graphic/classes/Float32ArrayUtil.md
new file mode 100644
index 00000000..cb2212e9
--- /dev/null
+++ b/docs/graphic/classes/Float32ArrayUtil.md
@@ -0,0 +1,41 @@
+# Class: Float32ArrayUtil
+
+### Constructors
+
+- [constructor](Float32ArrayUtil.md#constructor)
+
+### Methods
+
+- [wirteVec4](Float32ArrayUtil.md#wirtevec4)
+
+## Constructors
+
+### constructor
+
+• **new Float32ArrayUtil**(): [`Float32ArrayUtil`](Float32ArrayUtil.md)
+
+#### Returns
+
+[`Float32ArrayUtil`](Float32ArrayUtil.md)
+
+## Methods
+
+### wirteVec4
+
+▸ **wirteVec4**(`array`, `index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `array` | `Float32Array` |
+| `index` | `number` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Float32ArrayUtil.ts:5](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Float32ArrayUtil.ts#L5)
diff --git a/docs/graphic/classes/GeometryInfo.md b/docs/graphic/classes/GeometryInfo.md
new file mode 100644
index 00000000..92fbb3c1
--- /dev/null
+++ b/docs/graphic/classes/GeometryInfo.md
@@ -0,0 +1,218 @@
+# Class: GeometryInfo
+
+## Hierarchy
+
+- `Struct`
+
+ ↳ **`GeometryInfo`**
+
+### Constructors
+
+- [constructor](GeometryInfo.md#constructor)
+
+### Properties
+
+- [index](GeometryInfo.md#index)
+- [faceStart](GeometryInfo.md#facestart)
+- [faceEnd](GeometryInfo.md#faceend)
+- [faceCount](GeometryInfo.md#facecount)
+
+### Methods
+
+- [getValueSize](GeometryInfo.md#getvaluesize)
+- [Ref](GeometryInfo.md#ref)
+- [Get](GeometryInfo.md#get)
+- [GetSize](GeometryInfo.md#getsize)
+- [getValueType](GeometryInfo.md#getvaluetype)
+
+## Constructors
+
+### constructor
+
+• **new GeometryInfo**(): [`GeometryInfo`](GeometryInfo.md)
+
+#### Returns
+
+[`GeometryInfo`](GeometryInfo.md)
+
+#### Inherited from
+
+Struct.constructor
+
+## Properties
+
+### index
+
+• **index**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:26](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L26)
+
+___
+
+### faceStart
+
+• **faceStart**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:27](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L27)
+
+___
+
+### faceEnd
+
+• **faceEnd**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:28](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L28)
+
+___
+
+### faceCount
+
+• **faceCount**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L29)
+
+## Methods
+
+### getValueSize
+
+▸ **getValueSize**(`value`): `any`
+
+get any type value memory size
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `any` | any type value |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+Struct.getValueSize
+
+#### Defined in
+
+[src/util/struct/Struct.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L48)
+
+___
+
+### Ref
+
+▸ **Ref**\<`T`\>(`c`): \{ `name`: `string` ; `type`: `string` }[]
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+\{ `name`: `string` ; `type`: `string` }[]
+
+#### Inherited from
+
+Struct.Ref
+
+#### Defined in
+
+[src/util/struct/Struct.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L93)
+
+___
+
+### Get
+
+▸ **Get**\<`T`\>(`c`): `Struct`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+`Struct`
+
+#### Inherited from
+
+Struct.Get
+
+#### Defined in
+
+[src/util/struct/Struct.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L99)
+
+___
+
+### GetSize
+
+▸ **GetSize**\<`T`\>(`c`): `number`
+
+get any struct memory size
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Struct.GetSize
+
+#### Defined in
+
+[src/util/struct/Struct.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L112)
+
+___
+
+### getValueType
+
+▸ **getValueType**(): \{ `name`: `string` ; `type`: `string` }[]
+
+get reflection name
+
+#### Returns
+
+\{ `name`: `string` ; `type`: `string` }[]
+
+#### Inherited from
+
+Struct.getValueType
+
+#### Defined in
+
+[src/util/struct/Struct.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L25)
diff --git a/docs/graphic/classes/Graphic3D.md b/docs/graphic/classes/Graphic3D.md
new file mode 100644
index 00000000..cd24122b
--- /dev/null
+++ b/docs/graphic/classes/Graphic3D.md
@@ -0,0 +1,2329 @@
+# Class: Graphic3D
+
+## Hierarchy
+
+- `Object3D`
+
+ ↳ **`Graphic3D`**
+
+### Constructors
+
+- [constructor](Graphic3D.md#constructor)
+
+### Properties
+
+- [name](Graphic3D.md#name)
+- [transform](Graphic3D.md#transform)
+- [renderNode](Graphic3D.md#rendernode)
+- [entityChildren](Graphic3D.md#entitychildren)
+- [components](Graphic3D.md#components)
+- [prefabRef](Graphic3D.md#prefabref)
+- [serializeTag](Graphic3D.md#serializetag)
+
+### Accessors
+
+- [instanceID](Graphic3D.md#instanceid)
+- [numChildren](Graphic3D.md#numchildren)
+- [bound](Graphic3D.md#bound)
+- [isScene3D](Graphic3D.md#isscene3d)
+- [localPosition](Graphic3D.md#localposition)
+- [localRotation](Graphic3D.md#localrotation)
+- [localScale](Graphic3D.md#localscale)
+- [localQuaternion](Graphic3D.md#localquaternion)
+- [parent](Graphic3D.md#parent)
+- [parentObject](Graphic3D.md#parentobject)
+- [x](Graphic3D.md#x)
+- [y](Graphic3D.md#y)
+- [z](Graphic3D.md#z)
+- [scaleX](Graphic3D.md#scalex)
+- [scaleY](Graphic3D.md#scaley)
+- [scaleZ](Graphic3D.md#scalez)
+- [rotationX](Graphic3D.md#rotationx)
+- [rotationY](Graphic3D.md#rotationy)
+- [rotationZ](Graphic3D.md#rotationz)
+
+### Methods
+
+- [drawAxis](Graphic3D.md#drawaxis)
+- [drawLines](Graphic3D.md#drawlines)
+- [drawCurve](Graphic3D.md#drawcurve)
+- [drawRect](Graphic3D.md#drawrect)
+- [drawCircle](Graphic3D.md#drawcircle)
+- [drawSector](Graphic3D.md#drawsector)
+- [drawArcLine](Graphic3D.md#drawarcline)
+- [createCustomShape](Graphic3D.md#createcustomshape)
+- [drawBox](Graphic3D.md#drawbox)
+- [drawFillRect](Graphic3D.md#drawfillrect)
+- [drawFillCircle](Graphic3D.md#drawfillcircle)
+- [drawMeshWireframe](Graphic3D.md#drawmeshwireframe)
+- [drawFillSector](Graphic3D.md#drawfillsector)
+- [drawBoundingBox](Graphic3D.md#drawboundingbox)
+- [drawCameraFrustum](Graphic3D.md#drawcamerafrustum)
+- [drawObjectBoundingBox](Graphic3D.md#drawobjectboundingbox)
+- [Clear](Graphic3D.md#clear)
+- [ClearAll](Graphic3D.md#clearall)
+- [ChangeColor](Graphic3D.md#changecolor)
+- [getObjectByName](Graphic3D.md#getobjectbyname)
+- [addChild](Graphic3D.md#addchild)
+- [removeChild](Graphic3D.md#removechild)
+- [removeAllChild](Graphic3D.md#removeallchild)
+- [removeSelf](Graphic3D.md#removeself)
+- [removeChildByIndex](Graphic3D.md#removechildbyindex)
+- [hasChild](Graphic3D.md#haschild)
+- [removeFromParent](Graphic3D.md#removefromparent)
+- [getChildByIndex](Graphic3D.md#getchildbyindex)
+- [getChildByName](Graphic3D.md#getchildbyname)
+- [noticeComponents](Graphic3D.md#noticecomponents)
+- [forChild](Graphic3D.md#forchild)
+- [addComponent](Graphic3D.md#addcomponent)
+- [getOrAddComponent](Graphic3D.md#getoraddcomponent)
+- [removeComponent](Graphic3D.md#removecomponent)
+- [hasComponent](Graphic3D.md#hascomponent)
+- [getComponent](Graphic3D.md#getcomponent)
+- [getComponentFromParent](Graphic3D.md#getcomponentfromparent)
+- [getComponentsInChild](Graphic3D.md#getcomponentsinchild)
+- [getComponents](Graphic3D.md#getcomponents)
+- [getComponentsExt](Graphic3D.md#getcomponentsext)
+- [getComponentsByProperty](Graphic3D.md#getcomponentsbyproperty)
+- [clone](Graphic3D.md#clone)
+- [notifyChange](Graphic3D.md#notifychange)
+- [traverse](Graphic3D.md#traverse)
+- [destroy](Graphic3D.md#destroy)
+- [dispatchEvent](Graphic3D.md#dispatchevent)
+- [addEventListener](Graphic3D.md#addeventlistener)
+- [removeEventListener](Graphic3D.md#removeeventlistener)
+- [removeEventListenerAt](Graphic3D.md#removeeventlistenerat)
+- [removeAllEventListener](Graphic3D.md#removealleventlistener)
+- [containEventListener](Graphic3D.md#containeventlistener)
+- [hasEventListener](Graphic3D.md#haseventlistener)
+
+## Constructors
+
+### constructor
+
+• **new Graphic3D**(): [`Graphic3D`](Graphic3D.md)
+
+#### Returns
+
+[`Graphic3D`](Graphic3D.md)
+
+#### Overrides
+
+Object3D.constructor
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:10](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L10)
+
+## Properties
+
+### name
+
+• **name**: `string` = `''`
+
+The name of the object. The default value is an empty string.
+
+#### Inherited from
+
+Object3D.name
+
+#### Defined in
+
+[src/core/entities/Entity.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L24)
+
+___
+
+### transform
+
+• **transform**: `Transform`
+
+The Transform attached to this object.
+
+#### Inherited from
+
+Object3D.transform
+
+#### Defined in
+
+[src/core/entities/Entity.ts:42](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L42)
+
+___
+
+### renderNode
+
+• **renderNode**: `RenderNode`
+
+Renderer components
+
+#### Inherited from
+
+Object3D.renderNode
+
+#### Defined in
+
+[src/core/entities/Entity.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L47)
+
+___
+
+### entityChildren
+
+• **entityChildren**: `Entity`[]
+
+An array containing sub objects of an object
+
+#### Inherited from
+
+Object3D.entityChildren
+
+#### Defined in
+
+[src/core/entities/Entity.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L52)
+
+___
+
+### components
+
+• **components**: `Map`\<`any`, `IComponent`\>
+
+List of components attached to an object
+
+#### Inherited from
+
+Object3D.components
+
+#### Defined in
+
+[src/core/entities/Entity.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L57)
+
+___
+
+### prefabRef
+
+• `Optional` **prefabRef**: `string`
+
+#### Inherited from
+
+Object3D.prefabRef
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L19)
+
+___
+
+### serializeTag
+
+• `Optional` **serializeTag**: `SerializeTag`
+
+#### Inherited from
+
+Object3D.serializeTag
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L20)
+
+## Accessors
+
+### instanceID
+
+• `get` **instanceID**(): `string`
+
+The unique identifier of the object.
+
+#### Returns
+
+`string`
+
+#### Inherited from
+
+Object3D.instanceID
+
+#### Defined in
+
+[src/core/entities/Entity.ts:32](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L32)
+
+___
+
+### numChildren
+
+• `get` **numChildren**(): `number`
+
+Returns the number of child objects of an object
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.numChildren
+
+#### Defined in
+
+[src/core/entities/Entity.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L116)
+
+___
+
+### bound
+
+• `get` **bound**(): `IBound`
+
+#### Returns
+
+`IBound`
+
+#### Inherited from
+
+Object3D.bound
+
+#### Defined in
+
+[src/core/entities/Entity.ts:277](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L277)
+
+• `set` **bound**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `IBound` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.bound
+
+#### Defined in
+
+[src/core/entities/Entity.ts:282](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L282)
+
+___
+
+### isScene3D
+
+• `get` **isScene3D**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Object3D.isScene3D
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L30)
+
+___
+
+### localPosition
+
+• `get` **localPosition**(): `Vector3`
+
+Get the position of an object relative to its parent
+
+#### Returns
+
+`Vector3`
+
+#### Inherited from
+
+Object3D.localPosition
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:272](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L272)
+
+• `set` **localPosition**(`value`): `void`
+
+Set the position of an object relative to its parent
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.localPosition
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:279](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L279)
+
+___
+
+### localRotation
+
+• `get` **localRotation**(): `Vector3`
+
+Get the rotation attribute of an object relative to its parent
+
+#### Returns
+
+`Vector3`
+
+#### Inherited from
+
+Object3D.localRotation
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:286](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L286)
+
+• `set` **localRotation**(`value`): `void`
+
+Set the rotation attribute of an object relative to its parent
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.localRotation
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:293](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L293)
+
+___
+
+### localScale
+
+• `get` **localScale**(): `Vector3`
+
+Get the scaling attribute of an object relative to its parent
+
+#### Returns
+
+`Vector3`
+
+#### Inherited from
+
+Object3D.localScale
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:300](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L300)
+
+• `set` **localScale**(`value`): `void`
+
+Set the scaling attribute of an object relative to its parent
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.localScale
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:307](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L307)
+
+___
+
+### localQuaternion
+
+• `get` **localQuaternion**(): `Quaternion`
+
+Get the rotation attribute of an object relative to its parent, which is a quaternion
+
+#### Returns
+
+`Quaternion`
+
+#### Inherited from
+
+Object3D.localQuaternion
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:314](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L314)
+
+• `set` **localQuaternion**(`value`): `void`
+
+Set the rotation attribute of an object relative to its parent, which is a quaternion
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Quaternion` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.localQuaternion
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:321](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L321)
+
+___
+
+### parent
+
+• `get` **parent**(): `Transform`
+
+Transform component of object parent
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+Object3D.parent
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:336](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L336)
+
+___
+
+### parentObject
+
+• `get` **parentObject**(): `Object3D`
+
+parent object3D
+
+#### Returns
+
+`Object3D`
+
+#### Inherited from
+
+Object3D.parentObject
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:344](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L344)
+
+___
+
+### x
+
+• `get` **x**(): `number`
+
+Get the x coordinate relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.x
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:360](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L360)
+
+• `set` **x**(`value`): `void`
+
+Set the x coordinate relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.x
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:352](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L352)
+
+___
+
+### y
+
+• `get` **y**(): `number`
+
+Get the y coordinate relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.y
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:375](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L375)
+
+• `set` **y**(`value`): `void`
+
+Set the y coordinate relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.y
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:367](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L367)
+
+___
+
+### z
+
+• `get` **z**(): `number`
+
+Get the z coordinate relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.z
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:389](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L389)
+
+• `set` **z**(`value`): `void`
+
+Set the z coordinate relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.z
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:382](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L382)
+
+___
+
+### scaleX
+
+• `get` **scaleX**(): `number`
+
+Get the x scale relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.scaleX
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:404](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L404)
+
+• `set` **scaleX**(`value`): `void`
+
+Set the x scale relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.scaleX
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:396](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L396)
+
+___
+
+### scaleY
+
+• `get` **scaleY**(): `number`
+
+Get the y scale relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.scaleY
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:420](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L420)
+
+• `set` **scaleY**(`value`): `void`
+
+Set the y scale relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.scaleY
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L412)
+
+___
+
+### scaleZ
+
+• `get` **scaleZ**(): `number`
+
+Get the z scale relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.scaleZ
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:436](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L436)
+
+• `set` **scaleZ**(`value`): `void`
+
+Set the z scale relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.scaleZ
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:428](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L428)
+
+___
+
+### rotationX
+
+• `get` **rotationX**(): `number`
+
+Get the x rotation relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.rotationX
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:452](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L452)
+
+• `set` **rotationX**(`value`): `void`
+
+Set the x rotation relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.rotationX
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:444](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L444)
+
+___
+
+### rotationY
+
+• `get` **rotationY**(): `number`
+
+Get the y rotation relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.rotationY
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:468](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L468)
+
+• `set` **rotationY**(`value`): `void`
+
+Set the y rotation relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.rotationY
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:460](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L460)
+
+___
+
+### rotationZ
+
+• `get` **rotationZ**(): `number`
+
+Set the z rotation relative to the local coordinates of the parent container.
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Object3D.rotationZ
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:484](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L484)
+
+• `set` **rotationZ**(`value`): `void`
+
+Set the z rotation relative to the local coordinates of the parent container.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.rotationZ
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:476](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L476)
+
+## Methods
+
+### drawAxis
+
+▸ **drawAxis**(`uuid`, `origin?`, `size?`): `void`
+
+Draw the 3 - dimensional axes
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `uuid` | `string` | `undefined` | Graphic identification ID |
+| `origin` | `Vector3` | `undefined` | original point |
+| `size` | `number` | `10` | Length of axis |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:23](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L23)
+
+___
+
+### drawLines
+
+▸ **drawLines**(`uuid`, `points`, `colors?`): `void`
+
+Draw a line
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `uuid` | `string` | `undefined` | Graphic identification ID |
+| `points` | `Vector3`[] | `undefined` | Line path point |
+| `colors` | `Color` \| `Color`[] | `Color.COLOR_WHITE` | - |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:35](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L35)
+
+___
+
+### drawCurve
+
+▸ **drawCurve**(`uuid`, `points`, `samples?`, `tension?`, `color?`): `void`
+
+drawing curve
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `uuid` | `string` | `undefined` | Graphic identification ID |
+| `points` | `Vector3`[] | `undefined` | Curve position point |
+| `samples` | `number` | `10` | Number of Samples |
+| `tension` | `number` | `0.5` | Strength of curve |
+| `color` | `Color` | `Color.COLOR_WHITE` | Color of curve |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:49](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L49)
+
+___
+
+### drawRect
+
+▸ **drawRect**(`uuid`, `origin`, `width`, `height`, `color?`): `void`
+
+Draw a rectangle
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `uuid` | `string` | `undefined` | Graphic identification ID |
+| `origin` | `Vector3` | `undefined` | original point |
+| `width` | `number` | `undefined` | Width of rectangle |
+| `height` | `number` | `undefined` | Height of rectangle |
+| `color` | `Color` | `Color.COLOR_WHITE` | The color of the rectangle |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:93](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L93)
+
+___
+
+### drawCircle
+
+▸ **drawCircle**(`uuid`, `center`, `radius`, `segments?`, `up?`, `color?`): `void`
+
+Draw a circle
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `uuid` | `string` | `undefined` | Graphic identification ID |
+| `center` | `Vector3` | `undefined` | centre point |
+| `radius` | `number` | `undefined` | radius |
+| `segments` | `number` | `32` | Number of line segments |
+| `up` | `Vector3` | `Vector3.Y_AXIS` | Direction of plane |
+| `color` | `Color` | `Color.COLOR_WHITE` | The color of the circle |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:112](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L112)
+
+___
+
+### drawSector
+
+▸ **drawSector**(`uuid`, `center`, `radius`, `startAngle`, `endAngle`, `segments?`, `up?`, `color?`): `void`
+
+Draw a Sector
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `uuid` | `string` | `undefined` | Graphic identification ID |
+| `center` | `Vector3` | `undefined` | centre point |
+| `radius` | `number` | `undefined` | radius |
+| `startAngle` | `number` | `undefined` | Angle of onset |
+| `endAngle` | `number` | `undefined` | Angle of end |
+| `segments` | `number` | `16` | number of segments |
+| `up` | `Vector3` | `Vector3.Y_AXIS` | Direction of plane |
+| `color` | `Color` | `Color.COLOR_WHITE` | The color of the sector |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:129](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L129)
+
+___
+
+### drawArcLine
+
+▸ **drawArcLine**(`uuid`, `center`, `radius`, `startAngle`, `endAngle`, `segments?`, `up?`, `color?`): `void`
+
+Draw a ArcLine
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `uuid` | `string` | `undefined` | Graphic identification ID |
+| `center` | `Vector3` | `undefined` | centre point |
+| `radius` | `number` | `undefined` | radius |
+| `startAngle` | `number` | `undefined` | Angle of onset |
+| `endAngle` | `number` | `undefined` | Angle of end |
+| `segments` | `number` | `16` | number of segments |
+| `up` | `Vector3` | `Vector3.Y_AXIS` | Direction of plane |
+| `color` | `Color` | `Color.COLOR_WHITE` | The color of the sector |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:172](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L172)
+
+___
+
+### createCustomShape
+
+▸ **createCustomShape**(`uuid`, `parentTransform?`): `Graphics3DShape`
+
+Creates a custom line segment graph and returns a Shape with the same uuid from the pool if it already exists.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `uuid` | `string` | Graphic identification ID |
+| `parentTransform` | `Transform` | Parent node Transform |
+
+#### Returns
+
+`Graphics3DShape`
+
+Graphics3DShape
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:184](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L184)
+
+___
+
+### drawBox
+
+▸ **drawBox**(`uuid`, `minPoint`, `maxPoint`, `color?`): `void`
+
+Draw the box
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `uuid` | `string` | `undefined` | Graphic identification ID |
+| `minPoint` | `Vector3` | `undefined` | Point of minimum |
+| `maxPoint` | `Vector3` | `undefined` | Point of maximum |
+| `color` | `Color` | `Color.COLOR_WHITE` | The color of the box |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:195](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L195)
+
+___
+
+### drawFillRect
+
+▸ **drawFillRect**(`uuid`, `origin`, `width`, `height`, `color?`): `void`
+
+Draw the fill rectangle
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `uuid` | `string` | `undefined` | Graphic identification ID |
+| `origin` | `Vector3` | `undefined` | - |
+| `width` | `number` | `undefined` | - |
+| `height` | `number` | `undefined` | - |
+| `color` | `Color` | `Color.COLOR_WHITE` | The color of the fill rectangle |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:237](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L237)
+
+___
+
+### drawFillCircle
+
+▸ **drawFillCircle**(`uuid`, `center`, `radius`, `segments?`, `up?`, `color?`): `void`
+
+Draw the fill circle
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `uuid` | `string` | `undefined` | Graphic identification ID |
+| `center` | `Vector3` | `undefined` | centre point |
+| `radius` | `number` | `undefined` | radius |
+| `segments` | `number` | `32` | number of segments |
+| `up` | `Vector3` | `Vector3.Y_AXIS` | Direction of plane |
+| `color` | `Color` | `Color.COLOR_WHITE` | The color of the fill circle |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:257](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L257)
+
+___
+
+### drawMeshWireframe
+
+▸ **drawMeshWireframe**(`uuid`, `geometry`, `transform`, `color?`, `forceUpdate?`): `void`
+
+Draw wire frame for geometry
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `uuid` | `string` | `undefined` | Graphic identification ID |
+| `geometry` | `GeometryBase` | `undefined` | Geometric object |
+| `transform` | `Transform` | `undefined` | The Transform that needs to be bound |
+| `color` | `Color` | `Color.COLOR_WHITE` | The color of the wire frame |
+| `forceUpdate` | `boolean` | `false` | - |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:293](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L293)
+
+___
+
+### drawFillSector
+
+▸ **drawFillSector**(`uuid`, `center`, `radius`, `startAngle`, `endAngle`, `segments?`, `up?`, `color?`): `void`
+
+Draw the fill sector
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `uuid` | `string` | `undefined` | Graphic identification ID |
+| `center` | `Vector3` | `undefined` | centre point |
+| `radius` | `number` | `undefined` | radius |
+| `startAngle` | `number` | `undefined` | Angle of onset |
+| `endAngle` | `number` | `undefined` | Angle of end |
+| `segments` | `number` | `16` | number of segments |
+| `up` | `Vector3` | `Vector3.Y_AXIS` | Direction of plane |
+| `color` | `Color` | `Color.COLOR_WHITE` | The color of the fill sector |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:312](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L312)
+
+___
+
+### drawBoundingBox
+
+▸ **drawBoundingBox**(`uuid`, `boundingBox`, `color?`): `void`
+
+Draw bounding box
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `uuid` | `string` | `undefined` | Graphic identification ID |
+| `boundingBox` | `BoundingBox` | `undefined` | Bounding box object, please use world boundingbox |
+| `color` | `Color` | `Color.COLOR_WHITE` | The color of the bounding box |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:349](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L349)
+
+___
+
+### drawCameraFrustum
+
+▸ **drawCameraFrustum**(`camera`, `color?`): `void`
+
+Draw the camera cone
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `camera` | `Camera3D` | `undefined` | The camera to display the cone |
+| `color` | `Color` | `Color.COLOR_WHITE` | The color of the camera cone |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:358](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L358)
+
+___
+
+### drawObjectBoundingBox
+
+▸ **drawObjectBoundingBox**(`obj`, `color?`): `void`
+
+Draws the bounding box of the object
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `obj` | `Object3D` | `undefined` | The object to display the bounding box |
+| `color` | `Color` | `Color.COLOR_WHITE` | The color of the bounding box |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:419](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L419)
+
+___
+
+### Clear
+
+▸ **Clear**(`uuid`): `void`
+
+Erases the specified graph
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `uuid` | `string` | Graphic identification ID |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:428](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L428)
+
+___
+
+### ClearAll
+
+▸ **ClearAll**(): `void`
+
+Erase all drawn graphics
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:439](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L439)
+
+___
+
+### ChangeColor
+
+▸ **ChangeColor**(`uuid`, `color`): `void`
+
+Changes the specified graphics color
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `uuid` | `string` | Graphic identification ID |
+| `color` | `Color` | New color value |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/Graphic3DRender.ts:449](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Graphic3DRender.ts#L449)
+
+___
+
+### getObjectByName
+
+▸ **getObjectByName**(`name`): `Entity`
+
+Starting from the object itself, search for the object and its children, and return the first child object with a matching name.
+For most objects, the name is an empty string by default. You must manually set it to use this method.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | input name |
+
+#### Returns
+
+`Entity`
+
+result Entity
+
+#### Inherited from
+
+Object3D.getObjectByName
+
+#### Defined in
+
+[src/core/entities/Entity.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L81)
+
+___
+
+### addChild
+
+▸ **addChild**(`child`): `Entity`
+
+Add an object as a child of this object. You can add any number of objects.
+Any current parent object on the object passed here will be deleted, as an object can only have at most one parent object.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | `Entity` | target child entity |
+
+#### Returns
+
+`Entity`
+
+#### Inherited from
+
+Object3D.addChild
+
+#### Defined in
+
+[src/core/entities/Entity.ts:127](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L127)
+
+___
+
+### removeChild
+
+▸ **removeChild**(`child`): `void`
+
+Remove the child objects of the object. You can remove any number of objects.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | `Entity` | Removed objects |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.removeChild
+
+#### Defined in
+
+[src/core/entities/Entity.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L152)
+
+___
+
+### removeAllChild
+
+▸ **removeAllChild**(): `void`
+
+Remove all children of the current object
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.removeAllChild
+
+#### Defined in
+
+[src/core/entities/Entity.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L168)
+
+___
+
+### removeSelf
+
+▸ **removeSelf**(): `this`
+
+Remove the current node from the parent
+
+#### Returns
+
+`this`
+
+this
+
+#### Inherited from
+
+Object3D.removeSelf
+
+#### Defined in
+
+[src/core/entities/Entity.ts:179](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L179)
+
+___
+
+### removeChildByIndex
+
+▸ **removeChildByIndex**(`index`): `void`
+
+Search for child nodes of objects and remove child objects with matching indexes.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index` | `number` | assign index |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.removeChildByIndex
+
+#### Defined in
+
+[src/core/entities/Entity.ts:189](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L189)
+
+___
+
+### hasChild
+
+▸ **hasChild**(`child`): `boolean`
+
+Does the current object contain a certain object
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `child` | `Entity` | certain object |
+
+#### Returns
+
+`boolean`
+
+boolean
+
+#### Inherited from
+
+Object3D.hasChild
+
+#### Defined in
+
+[src/core/entities/Entity.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L203)
+
+___
+
+### removeFromParent
+
+▸ **removeFromParent**(): `this`
+
+Remove the current node from the parent
+
+#### Returns
+
+`this`
+
+this
+
+#### Inherited from
+
+Object3D.removeFromParent
+
+#### Defined in
+
+[src/core/entities/Entity.ts:213](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L213)
+
+___
+
+### getChildByIndex
+
+▸ **getChildByIndex**(`index`): `Entity`
+
+Search for object children and return the first child object with a matching index.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index` | `number` | matching index |
+
+#### Returns
+
+`Entity`
+
+child entity
+
+#### Inherited from
+
+Object3D.getChildByIndex
+
+#### Defined in
+
+[src/core/entities/Entity.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L227)
+
+___
+
+### getChildByName
+
+▸ **getChildByName**(`name`, `loopChild?`): `any`
+
+Search for object children and return a child object with a matching name.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `name` | `string` | `undefined` | matching name |
+| `loopChild` | `boolean` | `true` | Whether to traverse the children of the child object. The default value is true |
+
+#### Returns
+
+`any`
+
+result
+
+#### Inherited from
+
+Object3D.getChildByName
+
+#### Defined in
+
+[src/core/entities/Entity.ts:242](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L242)
+
+___
+
+### noticeComponents
+
+▸ **noticeComponents**(`key`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | keyof `IComponent` |
+| `data` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.noticeComponents
+
+#### Defined in
+
+[src/core/entities/Entity.ts:328](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Entity.ts#L328)
+
+___
+
+### forChild
+
+▸ **forChild**(`call`): `void`
+
+Traverse all sub objects starting from the object itself.
+ If there are still sub objects in the sub object, recursively traverse.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `call` | `Function` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.forChild
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L41)
+
+___
+
+### addComponent
+
+▸ **addComponent**\<`T`\>(`c`, `param?`): `T`
+
+Create a new component and add it to the object, and return an instance of the component.
+ If a component of this type already exists, it will not be added and will return null.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `IComponent` |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | `Ctor`\<`T`\> | class of component |
+| `param?` | `any` | - |
+
+#### Returns
+
+`T`
+
+result component
+
+#### Inherited from
+
+Object3D.addComponent
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L55)
+
+___
+
+### getOrAddComponent
+
+▸ **getOrAddComponent**\<`T`\>(`c`): `T`
+
+Returns an instance of a component object of the specified type.
+ If there are no components of that type, a new component is created and added to the object.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `IComponent` |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | `Ctor`\<`T`\> | class of component |
+
+#### Returns
+
+`T`
+
+result component
+
+#### Inherited from
+
+Object3D.getOrAddComponent
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:76](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L76)
+
+___
+
+### removeComponent
+
+▸ **removeComponent**\<`T`\>(`c`): `void`
+
+Remove components of the specified type
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `IComponent` |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | `Ctor`\<`T`\> | class of component |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.removeComponent
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L89)
+
+___
+
+### hasComponent
+
+▸ **hasComponent**\<`T`\>(`c`): `boolean`
+
+Is there a component of the specified type
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `IComponent` |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | `Ctor`\<`T`\> | type of component |
+
+#### Returns
+
+`boolean`
+
+boolean
+
+#### Inherited from
+
+Object3D.hasComponent
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L106)
+
+___
+
+### getComponent
+
+▸ **getComponent**\<`T`\>(`c`): `T`
+
+Returns a component of the specified type.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `IComponent` |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | `Ctor`\<`T`\> | class of component |
+
+#### Returns
+
+`T`
+
+result component
+
+#### Inherited from
+
+Object3D.getComponent
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L116)
+
+___
+
+### getComponentFromParent
+
+▸ **getComponentFromParent**\<`T`\>(`c`): `T`
+
+Returns a component object of the specified type from the parent node.
+ If there are no components of that type,
+ calls the parent object lookup of the parent object
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `IComponent` |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | `Ctor`\<`T`\> | class of component |
+
+#### Returns
+
+`T`
+
+reulst component
+
+#### Inherited from
+
+Object3D.getComponentFromParent
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L128)
+
+___
+
+### getComponentsInChild
+
+▸ **getComponentsInChild**\<`T`\>(`c`): `T`[]
+
+Returns an array of component objects of the specified type.
+ If there are no components of that type, search in the list of self body class objects
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `IComponent` |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | `Ctor`\<`T`\> | class of component |
+
+#### Returns
+
+`T`[]
+
+result components
+
+#### Inherited from
+
+Object3D.getComponentsInChild
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L148)
+
+___
+
+### getComponents
+
+▸ **getComponents**\<`T`\>(`c`, `outList?`, `includeInactive?`): `T`[]
+
+Returns all components of the specified type contained in the current object and its children.
+ If there are children in the child object, recursively search.
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `IComponent` |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | `Ctor`\<`T`\> | class of component |
+| `outList?` | `T`[] | result component list |
+| `includeInactive?` | `boolean` | Whether to include invisible objects, default to false |
+
+#### Returns
+
+`T`[]
+
+#### Inherited from
+
+Object3D.getComponents
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:171](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L171)
+
+___
+
+### getComponentsExt
+
+▸ **getComponentsExt**\<`T`\>(`c`, `ret?`, `includeInactive?`): `T`[]
+
+Quickly obtain components and no longer access child nodes after obtaining them at a certain node
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `IComponent` |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | `Ctor`\<`T`\> | class of component |
+| `ret?` | `T`[] | List of incoming T |
+| `includeInactive?` | `boolean` | Whether to include invisible objects, default to false |
+
+#### Returns
+
+`T`[]
+
+{T}
+
+**`Memberof`**
+
+Object3D
+
+#### Inherited from
+
+Object3D.getComponentsExt
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:196](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L196)
+
+___
+
+### getComponentsByProperty
+
+▸ **getComponentsByProperty**\<`T`\>(`key`, `value`, `findedAndBreak?`, `ret?`, `includeInactive?`): `T`[]
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `IComponent` |
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `key` | `string` | `undefined` |
+| `value` | `any` | `undefined` |
+| `findedAndBreak` | `boolean` | `true` |
+| `ret?` | `T`[] | `undefined` |
+| `includeInactive?` | `boolean` | `undefined` |
+
+#### Returns
+
+`T`[]
+
+#### Inherited from
+
+Object3D.getComponentsByProperty
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L211)
+
+___
+
+### clone
+
+▸ **clone**(): `Object3D`
+
+clone a Object3D
+
+#### Returns
+
+`Object3D`
+
+#### Inherited from
+
+Object3D.clone
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:238](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L238)
+
+___
+
+### notifyChange
+
+▸ **notifyChange**(): `void`
+
+Notify transformation attribute updates
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.notifyChange
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:328](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L328)
+
+___
+
+### traverse
+
+▸ **traverse**(`callback`): `void`
+
+Recursive child nodes and execute specified function
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `callback` | (`child`: `any`) => `void` | specified function |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.traverse
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:505](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L505)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+Release self
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.destroy
+
+#### Defined in
+
+[src/core/entities/Object3D.ts:520](https://github.com/Orillusion/orillusion/blob/main/src/core/entities/Object3D.ts#L520)
+
+___
+
+### dispatchEvent
+
+▸ **dispatchEvent**(`event`): `void`
+
+Dispatch an event to all registered objects with a specific type of listener.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `event` | `CEvent` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.dispatchEvent
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L24)
+
+___
+
+### addEventListener
+
+▸ **addEventListener**(`type`, `callback`, `thisObject`, `param?`, `priority?`): `number`
+
+register an event listener to event distancher.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event type. |
+| `callback` | `Function` | `undefined` | {Function} The callback function that handles events. This function must accept an Event3D object as its unique parameter and cannot return any result. for example: function(evt:Event3D):void. |
+| `thisObject` | `any` | `undefined` | {any} Current registration object, it'll call callback function. |
+| `param` | `any` | `null` | {any} the data binded to registered event, the default value is null. |
+| `priority` | `number` | `0` | {number} The priority of callback function execution, with a larger set value having priority to call |
+
+#### Returns
+
+`number`
+
+Returns register event id
+
+#### Inherited from
+
+Object3D.addEventListener
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L79)
+
+___
+
+### removeEventListener
+
+▸ **removeEventListener**(`type`, `callback`, `thisObject`): `void`
+
+Remove Event Listening
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` \| `number` | {string} event type |
+| `callback` | `Function` | {Function} callback function of event register |
+| `thisObject` | `any` | {any} The current registered object. |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.removeEventListener
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L113)
+
+___
+
+### removeEventListenerAt
+
+▸ **removeEventListenerAt**(`id`): `boolean`
+
+Remove an event Listening with id
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Object3D.removeEventListenerAt
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L133)
+
+___
+
+### removeAllEventListener
+
+▸ **removeAllEventListener**(`eventType?`): `void`
+
+Specify a event type to remove all related event listeners
+eventType event type, set null to remove all event listeners
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `eventType` | `string` \| `number` | `null` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Object3D.removeAllEventListener
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L153)
+
+___
+
+### containEventListener
+
+▸ **containEventListener**(`type`): `boolean`
+
+whether the target presence of a listener with event type.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `type` | `string` | {string} event type. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+Object3D.containEventListener
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:185](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L185)
+
+___
+
+### hasEventListener
+
+▸ **hasEventListener**(`type`, `callback?`, `thisObject?`): `boolean`
+
+whether the target presence of a listener with event type. it associate more registration parameters.
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `type` | `string` \| `number` | `undefined` | {string} event name. |
+| `callback` | `Function` | `null` | {Function} callback function of event register. |
+| `thisObject` | `any` | `null` | {any} The registered object. |
+
+#### Returns
+
+`boolean`
+
+Returns a boolean.
+
+#### Inherited from
+
+Object3D.hasEventListener
+
+#### Defined in
+
+[src/event/CEventDispatcher.ts:198](https://github.com/Orillusion/orillusion/blob/main/src/event/CEventDispatcher.ts#L198)
diff --git a/docs/graphic/classes/Graphic3DFaceRenderer.md b/docs/graphic/classes/Graphic3DFaceRenderer.md
new file mode 100644
index 00000000..aba74a3a
--- /dev/null
+++ b/docs/graphic/classes/Graphic3DFaceRenderer.md
@@ -0,0 +1,1780 @@
+# Class: Graphic3DFaceRenderer
+
+## Hierarchy
+
+- `MeshRenderer`
+
+ ↳ **`Graphic3DFaceRenderer`**
+
+### Constructors
+
+- [constructor](Graphic3DFaceRenderer.md#constructor)
+
+### Properties
+
+- [maxFaceCount](Graphic3DFaceRenderer.md#maxfacecount)
+- [maxGeometryCount](Graphic3DFaceRenderer.md#maxgeometrycount)
+- [maxPathPointCount](Graphic3DFaceRenderer.md#maxpathpointcount)
+- [maxShapeCount](Graphic3DFaceRenderer.md#maxshapecount)
+- [texture](Graphic3DFaceRenderer.md#texture)
+- [transformBuffer](Graphic3DFaceRenderer.md#transformbuffer)
+- [geometryInfoBuffer](Graphic3DFaceRenderer.md#geometryinfobuffer)
+- [shapeBuffer](Graphic3DFaceRenderer.md#shapebuffer)
+- [pathBuffer](Graphic3DFaceRenderer.md#pathbuffer)
+- [drawBuffer](Graphic3DFaceRenderer.md#drawbuffer)
+- [object3Ds](Graphic3DFaceRenderer.md#object3ds)
+- [shapes](Graphic3DFaceRenderer.md#shapes)
+- [realDrawShape](Graphic3DFaceRenderer.md#realdrawshape)
+- [needUpdate](Graphic3DFaceRenderer.md#needupdate)
+- [object3D](Graphic3DFaceRenderer.md#object3d)
+- [isDestroyed](Graphic3DFaceRenderer.md#isdestroyed)
+- [receiveShadow](Graphic3DFaceRenderer.md#receiveshadow)
+- [morphData](Graphic3DFaceRenderer.md#morphdata)
+- [instanceCount](Graphic3DFaceRenderer.md#instancecount)
+- [lodLevel](Graphic3DFaceRenderer.md#lodlevel)
+- [alwaysRender](Graphic3DFaceRenderer.md#alwaysrender)
+- [instanceID](Graphic3DFaceRenderer.md#instanceid)
+- [drawType](Graphic3DFaceRenderer.md#drawtype)
+- [isRenderOrderChange](Graphic3DFaceRenderer.md#isrenderorderchange)
+- [needSortOnCameraZ](Graphic3DFaceRenderer.md#needsortoncameraz)
+- [isRecievePostEffectUI](Graphic3DFaceRenderer.md#isrecieveposteffectui)
+
+### Accessors
+
+- [eventDispatcher](Graphic3DFaceRenderer.md#eventdispatcher)
+- [isStart](Graphic3DFaceRenderer.md#isstart)
+- [transform](Graphic3DFaceRenderer.md#transform)
+- [enable](Graphic3DFaceRenderer.md#enable)
+- [geometry](Graphic3DFaceRenderer.md#geometry)
+- [material](Graphic3DFaceRenderer.md#material)
+- [renderLayer](Graphic3DFaceRenderer.md#renderlayer)
+- [rendererMask](Graphic3DFaceRenderer.md#renderermask)
+- [renderOrder](Graphic3DFaceRenderer.md#renderorder)
+- [materials](Graphic3DFaceRenderer.md#materials)
+- [castShadow](Graphic3DFaceRenderer.md#castshadow)
+- [castGI](Graphic3DFaceRenderer.md#castgi)
+- [castReflection](Graphic3DFaceRenderer.md#castreflection)
+
+### Methods
+
+- [init](Graphic3DFaceRenderer.md#init)
+- [create](Graphic3DFaceRenderer.md#create)
+- [startShape](Graphic3DFaceRenderer.md#startshape)
+- [setShape](Graphic3DFaceRenderer.md#setshape)
+- [updateShape](Graphic3DFaceRenderer.md#updateshape)
+- [setTextureID](Graphic3DFaceRenderer.md#settextureid)
+- [setBaseColor](Graphic3DFaceRenderer.md#setbasecolor)
+- [setEmissiveColor](Graphic3DFaceRenderer.md#setemissivecolor)
+- [setUVRect](Graphic3DFaceRenderer.md#setuvrect)
+- [onUpdate](Graphic3DFaceRenderer.md#onupdate)
+- [onCompute](Graphic3DFaceRenderer.md#oncompute)
+- [start](Graphic3DFaceRenderer.md#start)
+- [stop](Graphic3DFaceRenderer.md#stop)
+- [onLateUpdate](Graphic3DFaceRenderer.md#onlateupdate)
+- [onBeforeUpdate](Graphic3DFaceRenderer.md#onbeforeupdate)
+- [onGraphic](Graphic3DFaceRenderer.md#ongraphic)
+- [onParentChange](Graphic3DFaceRenderer.md#onparentchange)
+- [onAddChild](Graphic3DFaceRenderer.md#onaddchild)
+- [onRemoveChild](Graphic3DFaceRenderer.md#onremovechild)
+- [onEnable](Graphic3DFaceRenderer.md#onenable)
+- [onDisable](Graphic3DFaceRenderer.md#ondisable)
+- [cloneTo](Graphic3DFaceRenderer.md#cloneto)
+- [copyComponent](Graphic3DFaceRenderer.md#copycomponent)
+- [setMorphInfluence](Graphic3DFaceRenderer.md#setmorphinfluence)
+- [setMorphInfluenceIndex](Graphic3DFaceRenderer.md#setmorphinfluenceindex)
+- [destroy](Graphic3DFaceRenderer.md#destroy)
+- [attachSceneOctree](Graphic3DFaceRenderer.md#attachsceneoctree)
+- [detachSceneOctree](Graphic3DFaceRenderer.md#detachsceneoctree)
+- [addMask](Graphic3DFaceRenderer.md#addmask)
+- [removeMask](Graphic3DFaceRenderer.md#removemask)
+- [hasMask](Graphic3DFaceRenderer.md#hasmask)
+- [addRendererMask](Graphic3DFaceRenderer.md#addrenderermask)
+- [removeRendererMask](Graphic3DFaceRenderer.md#removerenderermask)
+- [selfCloneMaterials](Graphic3DFaceRenderer.md#selfclonematerials)
+- [renderPass](Graphic3DFaceRenderer.md#renderpass)
+- [renderPass2](Graphic3DFaceRenderer.md#renderpass2)
+- [recordRenderPass2](Graphic3DFaceRenderer.md#recordrenderpass2)
+- [preInit](Graphic3DFaceRenderer.md#preinit)
+- [beforeDestroy](Graphic3DFaceRenderer.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new Graphic3DFaceRenderer**(): [`Graphic3DFaceRenderer`](Graphic3DFaceRenderer.md)
+
+#### Returns
+
+[`Graphic3DFaceRenderer`](Graphic3DFaceRenderer.md)
+
+#### Inherited from
+
+MeshRenderer.constructor
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L26)
+
+## Properties
+
+### maxFaceCount
+
+▪ `Static` **maxFaceCount**: `number` = `1000000`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:35](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L35)
+
+___
+
+### maxGeometryCount
+
+▪ `Static` **maxGeometryCount**: `number` = `1`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:36](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L36)
+
+___
+
+### maxPathPointCount
+
+▪ `Static` **maxPathPointCount**: `number` = `100000`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:37](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L37)
+
+___
+
+### maxShapeCount
+
+▪ `Static` **maxShapeCount**: `number` = `1024`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:38](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L38)
+
+___
+
+### texture
+
+• **texture**: `BitmapTexture2DArray`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:40](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L40)
+
+___
+
+### transformBuffer
+
+• **transformBuffer**: `StorageGPUBuffer`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:41](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L41)
+
+___
+
+### geometryInfoBuffer
+
+• **geometryInfoBuffer**: `StructStorageGPUBuffer`\<[`GeometryInfo`](GeometryInfo.md)\>
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:46](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L46)
+
+___
+
+### shapeBuffer
+
+• **shapeBuffer**: `StructStorageGPUBuffer`\<[`ShapeInfo`](ShapeInfo.md)\>
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:47](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L47)
+
+___
+
+### pathBuffer
+
+• **pathBuffer**: `StorageGPUBuffer`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:48](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L48)
+
+___
+
+### drawBuffer
+
+• **drawBuffer**: `StorageGPUBuffer`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:49](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L49)
+
+___
+
+### object3Ds
+
+• **object3Ds**: `any`[]
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:51](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L51)
+
+___
+
+### shapes
+
+• **shapes**: [`ShapeInfo`](ShapeInfo.md)[]
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:52](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L52)
+
+___
+
+### realDrawShape
+
+• **realDrawShape**: `number`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:53](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L53)
+
+___
+
+### needUpdate
+
+• **needUpdate**: `boolean` = `false`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:54](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L54)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+MeshRenderer.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### receiveShadow
+
+• **receiveShadow**: `boolean`
+
+Enabling this option allows the grid to display any shadows cast on the grid.
+
+#### Inherited from
+
+MeshRenderer.receiveShadow
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L23)
+
+___
+
+### morphData
+
+• **morphData**: `MorphTargetData`
+
+#### Inherited from
+
+MeshRenderer.morphData
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L24)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+MeshRenderer.instanceCount
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+MeshRenderer.lodLevel
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+MeshRenderer.alwaysRender
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+MeshRenderer.instanceID
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+MeshRenderer.drawType
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.isRenderOrderChange
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.needSortOnCameraZ
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.isRecievePostEffectUI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+MeshRenderer.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### geometry
+
+• `get` **geometry**(): `GeometryBase`
+
+The geometry of the mesh determines its shape
+
+#### Returns
+
+`GeometryBase`
+
+#### Inherited from
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L53)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GeometryBase` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L57)
+
+___
+
+### material
+
+• `get` **material**(): `Material`
+
+material
+
+#### Returns
+
+`Material`
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L99)
+
+• `set` **material**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Material` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L103)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): `Material`[]
+
+#### Returns
+
+`Material`[]
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Material`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+## Methods
+
+### init
+
+▸ **init**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+MeshRenderer.init
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:55](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L55)
+
+___
+
+### create
+
+▸ **create**(`tex`, `num`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tex` | `BitmapTexture2DArray` |
+| `num` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:59](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L59)
+
+___
+
+### startShape
+
+▸ **startShape**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | `BitmapTexture2DArray` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:96](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L96)
+
+___
+
+### setShape
+
+▸ **setShape**(`index`, `shape`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `shape` | [`ShapeInfo`](ShapeInfo.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:126](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L126)
+
+___
+
+### updateShape
+
+▸ **updateShape**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:133](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L133)
+
+___
+
+### setTextureID
+
+▸ **setTextureID**(`i`, `id`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `id` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:155](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L155)
+
+___
+
+### setBaseColor
+
+▸ **setBaseColor**(`i`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:170](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L170)
+
+___
+
+### setEmissiveColor
+
+▸ **setEmissiveColor**(`i`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:175](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L175)
+
+___
+
+### setUVRect
+
+▸ **setUVRect**(`i`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `v` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:180](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L180)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+MeshRenderer.onUpdate
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:185](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L185)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view`, `command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | `View3D` |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+MeshRenderer.onCompute
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:192](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L192)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.start
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.onEnable
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L30)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.onDisable
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L34)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `Object3D` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.cloneTo
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L38)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+MeshRenderer.copyComponent
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L43)
+
+___
+
+### setMorphInfluence
+
+▸ **setMorphInfluence**(`key`, `value`): `void`
+
+Set deformation animation parameters
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.setMorphInfluence
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L110)
+
+___
+
+### setMorphInfluenceIndex
+
+▸ **setMorphInfluenceIndex**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.setMorphInfluenceIndex
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L119)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.destroy
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L157)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | `Octree` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.attachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.detachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.addMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.removeMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.hasMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.addRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.removeRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+MeshRenderer.selfCloneMaterials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | `View3D` |
+| `passType` | `PassType` |
+| `renderContext` | `RenderContext` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderPass
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L370)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+render pass at passType
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | `View3D` | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | `ClusterLightingBuffer` | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderPass2
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L438)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | `View3D` | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | `ClusterLightingBuffer` | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.recordRenderPass2
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.preInit
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.beforeDestroy
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
diff --git a/docs/graphic/classes/Graphic3DMesh.md b/docs/graphic/classes/Graphic3DMesh.md
new file mode 100644
index 00000000..870af75c
--- /dev/null
+++ b/docs/graphic/classes/Graphic3DMesh.md
@@ -0,0 +1,182 @@
+# Class: Graphic3DMesh
+
+### Constructors
+
+- [constructor](Graphic3DMesh.md#constructor)
+
+### Properties
+
+- [meshMap](Graphic3DMesh.md#meshmap)
+- [meshDrawGroup](Graphic3DMesh.md#meshdrawgroup)
+- [ribbonMap](Graphic3DMesh.md#ribbonmap)
+- [nodeMap](Graphic3DMesh.md#nodemap)
+- [faceMap](Graphic3DMesh.md#facemap)
+
+### Methods
+
+- [draw](Graphic3DMesh.md#draw)
+- [drawRibbon](Graphic3DMesh.md#drawribbon)
+- [drawShape](Graphic3DMesh.md#drawshape)
+- [drawNode](Graphic3DMesh.md#drawnode)
+
+## Constructors
+
+### constructor
+
+• **new Graphic3DMesh**(): [`Graphic3DMesh`](Graphic3DMesh.md)
+
+#### Returns
+
+[`Graphic3DMesh`](Graphic3DMesh.md)
+
+## Properties
+
+### meshMap
+
+▪ `Static` **meshMap**: `Map`\<`GeometryBase`, [`Graphic3DMeshRenderer`](Graphic3DMeshRenderer.md)\>
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMesh.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMesh.ts#L9)
+
+___
+
+### meshDrawGroup
+
+▪ `Static` **meshDrawGroup**: `Map`\<`string`, [`Graphic3DMeshRenderer`](Graphic3DMeshRenderer.md)\>
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMesh.ts:10](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMesh.ts#L10)
+
+___
+
+### ribbonMap
+
+▪ `Static` **ribbonMap**: `Map`\<`string`, [`Graphic3DRibbonRenderer`](Graphic3DRibbonRenderer.md)\>
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMesh.ts:11](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMesh.ts#L11)
+
+___
+
+### nodeMap
+
+▪ `Static` **nodeMap**: `Map`\<`string`, [`DynamicFaceRenderer`](DynamicFaceRenderer.md)\>
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMesh.ts:12](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMesh.ts#L12)
+
+___
+
+### faceMap
+
+▪ `Static` **faceMap**: `Map`\<`string`, [`Graphic3DFaceRenderer`](Graphic3DFaceRenderer.md)\>
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMesh.ts:13](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMesh.ts#L13)
+
+## Methods
+
+### draw
+
+▸ **draw**(`scene`, `geo`, `texture`, `count`): [`Graphic3DMeshRenderer`](Graphic3DMeshRenderer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scene` | `Scene3D` |
+| `geo` | `GeometryBase` |
+| `texture` | `BitmapTexture2DArray` |
+| `count` | `number` |
+
+#### Returns
+
+[`Graphic3DMeshRenderer`](Graphic3DMeshRenderer.md)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMesh.ts:15](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMesh.ts#L15)
+
+___
+
+### drawRibbon
+
+▸ **drawRibbon**(`id`, `scene`, `texture`, `trailSegment`, `count`): [`Graphic3DRibbonRenderer`](Graphic3DRibbonRenderer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `string` |
+| `scene` | `Scene3D` |
+| `texture` | `BitmapTexture2DArray` |
+| `trailSegment` | `number` |
+| `count` | `number` |
+
+#### Returns
+
+[`Graphic3DRibbonRenderer`](Graphic3DRibbonRenderer.md)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMesh.ts:26](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMesh.ts#L26)
+
+___
+
+### drawShape
+
+▸ **drawShape**(`id`, `scene`, `texture`): [`Graphic3DFaceRenderer`](Graphic3DFaceRenderer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `string` |
+| `scene` | `Scene3D` |
+| `texture` | `BitmapTexture2DArray` |
+
+#### Returns
+
+[`Graphic3DFaceRenderer`](Graphic3DFaceRenderer.md)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMesh.ts:37](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMesh.ts#L37)
+
+___
+
+### drawNode
+
+▸ **drawNode**\<`T`\>(`id`, `c`, `nodeStruct`, `scene`, `texture`, `maxNodeCount`, `maxFaceCount?`, `standAloneMatrix?`): `T`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`DynamicFaceRenderer`](DynamicFaceRenderer.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `id` | `string` |
+| `c` | `Ctor`\<`T`\> |
+| `nodeStruct` | `Ctor`\<[`DynamicDrawStruct`](DynamicDrawStruct.md)\> |
+| `scene` | `Scene3D` |
+| `texture` | `BitmapTexture2DArray` |
+| `maxNodeCount` | `number` |
+| `maxFaceCount?` | `number` |
+| `standAloneMatrix?` | `boolean` |
+
+#### Returns
+
+`T`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMesh.ts:48](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMesh.ts#L48)
diff --git a/docs/graphic/classes/Graphic3DMeshRenderer.md b/docs/graphic/classes/Graphic3DMeshRenderer.md
new file mode 100644
index 00000000..d34f92c7
--- /dev/null
+++ b/docs/graphic/classes/Graphic3DMeshRenderer.md
@@ -0,0 +1,1628 @@
+# Class: Graphic3DMeshRenderer
+
+## Hierarchy
+
+- `MeshRenderer`
+
+ ↳ **`Graphic3DMeshRenderer`**
+
+### Constructors
+
+- [constructor](Graphic3DMeshRenderer.md#constructor)
+
+### Properties
+
+- [transformBuffer](Graphic3DMeshRenderer.md#transformbuffer)
+- [sourceGeometry](Graphic3DMeshRenderer.md#sourcegeometry)
+- [texture](Graphic3DMeshRenderer.md#texture)
+- [object3Ds](Graphic3DMeshRenderer.md#object3ds)
+- [object3D](Graphic3DMeshRenderer.md#object3d)
+- [isDestroyed](Graphic3DMeshRenderer.md#isdestroyed)
+- [receiveShadow](Graphic3DMeshRenderer.md#receiveshadow)
+- [morphData](Graphic3DMeshRenderer.md#morphdata)
+- [instanceCount](Graphic3DMeshRenderer.md#instancecount)
+- [lodLevel](Graphic3DMeshRenderer.md#lodlevel)
+- [alwaysRender](Graphic3DMeshRenderer.md#alwaysrender)
+- [instanceID](Graphic3DMeshRenderer.md#instanceid)
+- [drawType](Graphic3DMeshRenderer.md#drawtype)
+- [isRenderOrderChange](Graphic3DMeshRenderer.md#isrenderorderchange)
+- [needSortOnCameraZ](Graphic3DMeshRenderer.md#needsortoncameraz)
+- [isRecievePostEffectUI](Graphic3DMeshRenderer.md#isrecieveposteffectui)
+
+### Accessors
+
+- [eventDispatcher](Graphic3DMeshRenderer.md#eventdispatcher)
+- [isStart](Graphic3DMeshRenderer.md#isstart)
+- [transform](Graphic3DMeshRenderer.md#transform)
+- [enable](Graphic3DMeshRenderer.md#enable)
+- [geometry](Graphic3DMeshRenderer.md#geometry)
+- [material](Graphic3DMeshRenderer.md#material)
+- [renderLayer](Graphic3DMeshRenderer.md#renderlayer)
+- [rendererMask](Graphic3DMeshRenderer.md#renderermask)
+- [renderOrder](Graphic3DMeshRenderer.md#renderorder)
+- [materials](Graphic3DMeshRenderer.md#materials)
+- [castShadow](Graphic3DMeshRenderer.md#castshadow)
+- [castGI](Graphic3DMeshRenderer.md#castgi)
+- [castReflection](Graphic3DMeshRenderer.md#castreflection)
+
+### Methods
+
+- [init](Graphic3DMeshRenderer.md#init)
+- [create](Graphic3DMeshRenderer.md#create)
+- [startSpark](Graphic3DMeshRenderer.md#startspark)
+- [setTextureID](Graphic3DMeshRenderer.md#settextureid)
+- [setBaseColor](Graphic3DMeshRenderer.md#setbasecolor)
+- [setEmissiveColor](Graphic3DMeshRenderer.md#setemissivecolor)
+- [setUVRect](Graphic3DMeshRenderer.md#setuvrect)
+- [onUpdate](Graphic3DMeshRenderer.md#onupdate)
+- [start](Graphic3DMeshRenderer.md#start)
+- [stop](Graphic3DMeshRenderer.md#stop)
+- [onLateUpdate](Graphic3DMeshRenderer.md#onlateupdate)
+- [onBeforeUpdate](Graphic3DMeshRenderer.md#onbeforeupdate)
+- [onGraphic](Graphic3DMeshRenderer.md#ongraphic)
+- [onParentChange](Graphic3DMeshRenderer.md#onparentchange)
+- [onAddChild](Graphic3DMeshRenderer.md#onaddchild)
+- [onRemoveChild](Graphic3DMeshRenderer.md#onremovechild)
+- [onEnable](Graphic3DMeshRenderer.md#onenable)
+- [onDisable](Graphic3DMeshRenderer.md#ondisable)
+- [cloneTo](Graphic3DMeshRenderer.md#cloneto)
+- [copyComponent](Graphic3DMeshRenderer.md#copycomponent)
+- [setMorphInfluence](Graphic3DMeshRenderer.md#setmorphinfluence)
+- [setMorphInfluenceIndex](Graphic3DMeshRenderer.md#setmorphinfluenceindex)
+- [onCompute](Graphic3DMeshRenderer.md#oncompute)
+- [destroy](Graphic3DMeshRenderer.md#destroy)
+- [attachSceneOctree](Graphic3DMeshRenderer.md#attachsceneoctree)
+- [detachSceneOctree](Graphic3DMeshRenderer.md#detachsceneoctree)
+- [addMask](Graphic3DMeshRenderer.md#addmask)
+- [removeMask](Graphic3DMeshRenderer.md#removemask)
+- [hasMask](Graphic3DMeshRenderer.md#hasmask)
+- [addRendererMask](Graphic3DMeshRenderer.md#addrenderermask)
+- [removeRendererMask](Graphic3DMeshRenderer.md#removerenderermask)
+- [selfCloneMaterials](Graphic3DMeshRenderer.md#selfclonematerials)
+- [renderPass](Graphic3DMeshRenderer.md#renderpass)
+- [renderPass2](Graphic3DMeshRenderer.md#renderpass2)
+- [recordRenderPass2](Graphic3DMeshRenderer.md#recordrenderpass2)
+- [preInit](Graphic3DMeshRenderer.md#preinit)
+- [beforeDestroy](Graphic3DMeshRenderer.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new Graphic3DMeshRenderer**(): [`Graphic3DMeshRenderer`](Graphic3DMeshRenderer.md)
+
+#### Returns
+
+[`Graphic3DMeshRenderer`](Graphic3DMeshRenderer.md)
+
+#### Inherited from
+
+MeshRenderer.constructor
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L26)
+
+## Properties
+
+### transformBuffer
+
+• **transformBuffer**: `StorageGPUBuffer`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts:4](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts#L4)
+
+___
+
+### sourceGeometry
+
+• **sourceGeometry**: `GeometryBase`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts:5](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts#L5)
+
+___
+
+### texture
+
+• **texture**: `BitmapTexture2DArray`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts:6](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts#L6)
+
+___
+
+### object3Ds
+
+• **object3Ds**: `Object3D`[]
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts:7](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts#L7)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+MeshRenderer.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### receiveShadow
+
+• **receiveShadow**: `boolean`
+
+Enabling this option allows the grid to display any shadows cast on the grid.
+
+#### Inherited from
+
+MeshRenderer.receiveShadow
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L23)
+
+___
+
+### morphData
+
+• **morphData**: `MorphTargetData`
+
+#### Inherited from
+
+MeshRenderer.morphData
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L24)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+MeshRenderer.instanceCount
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+MeshRenderer.lodLevel
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+MeshRenderer.alwaysRender
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+MeshRenderer.instanceID
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+MeshRenderer.drawType
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.isRenderOrderChange
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.needSortOnCameraZ
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.isRecievePostEffectUI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+MeshRenderer.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### geometry
+
+• `get` **geometry**(): `GeometryBase`
+
+The geometry of the mesh determines its shape
+
+#### Returns
+
+`GeometryBase`
+
+#### Inherited from
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L53)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GeometryBase` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L57)
+
+___
+
+### material
+
+• `get` **material**(): `Material`
+
+material
+
+#### Returns
+
+`Material`
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L99)
+
+• `set` **material**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Material` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L103)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): `Material`[]
+
+#### Returns
+
+`Material`[]
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Material`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+## Methods
+
+### init
+
+▸ **init**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+MeshRenderer.init
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts:12](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts#L12)
+
+___
+
+### create
+
+▸ **create**(`source`, `tex`, `num`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `source` | `GeometryBase` |
+| `tex` | `BitmapTexture2DArray` |
+| `num` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts:16](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts#L16)
+
+___
+
+### startSpark
+
+▸ **startSpark**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts:51](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts#L51)
+
+___
+
+### setTextureID
+
+▸ **setTextureID**(`i`, `id`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `id` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts:55](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts#L55)
+
+___
+
+### setBaseColor
+
+▸ **setBaseColor**(`i`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts:60](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts#L60)
+
+___
+
+### setEmissiveColor
+
+▸ **setEmissiveColor**(`i`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts:65](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts#L65)
+
+___
+
+### setUVRect
+
+▸ **setUVRect**(`i`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `v` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts:70](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts#L70)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+MeshRenderer.onUpdate
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts:75](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DMeshRenderer.ts#L75)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.start
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.onEnable
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L30)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.onDisable
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L34)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `Object3D` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.cloneTo
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L38)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+MeshRenderer.copyComponent
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L43)
+
+___
+
+### setMorphInfluence
+
+▸ **setMorphInfluence**(`key`, `value`): `void`
+
+Set deformation animation parameters
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.setMorphInfluence
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L110)
+
+___
+
+### setMorphInfluenceIndex
+
+▸ **setMorphInfluenceIndex**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.setMorphInfluenceIndex
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view`, `command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | `View3D` |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.onCompute
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L128)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.destroy
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L157)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | `Octree` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.attachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.detachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.addMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.removeMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.hasMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.addRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.removeRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+MeshRenderer.selfCloneMaterials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | `View3D` |
+| `passType` | `PassType` |
+| `renderContext` | `RenderContext` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderPass
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L370)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+render pass at passType
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | `View3D` | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | `ClusterLightingBuffer` | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderPass2
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L438)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | `View3D` | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | `ClusterLightingBuffer` | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.recordRenderPass2
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.preInit
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.beforeDestroy
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
diff --git a/docs/graphic/classes/Graphic3DRibbonRenderer.md b/docs/graphic/classes/Graphic3DRibbonRenderer.md
new file mode 100644
index 00000000..93d650ec
--- /dev/null
+++ b/docs/graphic/classes/Graphic3DRibbonRenderer.md
@@ -0,0 +1,1702 @@
+# Class: Graphic3DRibbonRenderer
+
+## Hierarchy
+
+- `MeshRenderer`
+
+ ↳ **`Graphic3DRibbonRenderer`**
+
+### Constructors
+
+- [constructor](Graphic3DRibbonRenderer.md#constructor)
+
+### Properties
+
+- [maxRibbonSegment](Graphic3DRibbonRenderer.md#maxribbonsegment)
+- [transformBuffer](Graphic3DRibbonRenderer.md#transformbuffer)
+- [sourceGeometry](Graphic3DRibbonRenderer.md#sourcegeometry)
+- [texture](Graphic3DRibbonRenderer.md#texture)
+- [object3Ds](Graphic3DRibbonRenderer.md#object3ds)
+- [ribbons](Graphic3DRibbonRenderer.md#ribbons)
+- [ribbonCount](Graphic3DRibbonRenderer.md#ribboncount)
+- [ribbonSegment](Graphic3DRibbonRenderer.md#ribbonsegment)
+- [object3D](Graphic3DRibbonRenderer.md#object3d)
+- [isDestroyed](Graphic3DRibbonRenderer.md#isdestroyed)
+- [receiveShadow](Graphic3DRibbonRenderer.md#receiveshadow)
+- [morphData](Graphic3DRibbonRenderer.md#morphdata)
+- [instanceCount](Graphic3DRibbonRenderer.md#instancecount)
+- [lodLevel](Graphic3DRibbonRenderer.md#lodlevel)
+- [alwaysRender](Graphic3DRibbonRenderer.md#alwaysrender)
+- [instanceID](Graphic3DRibbonRenderer.md#instanceid)
+- [drawType](Graphic3DRibbonRenderer.md#drawtype)
+- [isRenderOrderChange](Graphic3DRibbonRenderer.md#isrenderorderchange)
+- [needSortOnCameraZ](Graphic3DRibbonRenderer.md#needsortoncameraz)
+- [isRecievePostEffectUI](Graphic3DRibbonRenderer.md#isrecieveposteffectui)
+
+### Accessors
+
+- [eventDispatcher](Graphic3DRibbonRenderer.md#eventdispatcher)
+- [isStart](Graphic3DRibbonRenderer.md#isstart)
+- [transform](Graphic3DRibbonRenderer.md#transform)
+- [enable](Graphic3DRibbonRenderer.md#enable)
+- [geometry](Graphic3DRibbonRenderer.md#geometry)
+- [material](Graphic3DRibbonRenderer.md#material)
+- [renderLayer](Graphic3DRibbonRenderer.md#renderlayer)
+- [rendererMask](Graphic3DRibbonRenderer.md#renderermask)
+- [renderOrder](Graphic3DRibbonRenderer.md#renderorder)
+- [materials](Graphic3DRibbonRenderer.md#materials)
+- [castShadow](Graphic3DRibbonRenderer.md#castshadow)
+- [castGI](Graphic3DRibbonRenderer.md#castgi)
+- [castReflection](Graphic3DRibbonRenderer.md#castreflection)
+
+### Methods
+
+- [init](Graphic3DRibbonRenderer.md#init)
+- [create](Graphic3DRibbonRenderer.md#create)
+- [startRibbon](Graphic3DRibbonRenderer.md#startribbon)
+- [setTextureID](Graphic3DRibbonRenderer.md#settextureid)
+- [setBaseColor](Graphic3DRibbonRenderer.md#setbasecolor)
+- [setEmissiveColor](Graphic3DRibbonRenderer.md#setemissivecolor)
+- [setUVRect](Graphic3DRibbonRenderer.md#setuvrect)
+- [setLineUVRect](Graphic3DRibbonRenderer.md#setlineuvrect)
+- [onUpdate](Graphic3DRibbonRenderer.md#onupdate)
+- [start](Graphic3DRibbonRenderer.md#start)
+- [stop](Graphic3DRibbonRenderer.md#stop)
+- [onLateUpdate](Graphic3DRibbonRenderer.md#onlateupdate)
+- [onBeforeUpdate](Graphic3DRibbonRenderer.md#onbeforeupdate)
+- [onGraphic](Graphic3DRibbonRenderer.md#ongraphic)
+- [onParentChange](Graphic3DRibbonRenderer.md#onparentchange)
+- [onAddChild](Graphic3DRibbonRenderer.md#onaddchild)
+- [onRemoveChild](Graphic3DRibbonRenderer.md#onremovechild)
+- [onEnable](Graphic3DRibbonRenderer.md#onenable)
+- [onDisable](Graphic3DRibbonRenderer.md#ondisable)
+- [cloneTo](Graphic3DRibbonRenderer.md#cloneto)
+- [copyComponent](Graphic3DRibbonRenderer.md#copycomponent)
+- [setMorphInfluence](Graphic3DRibbonRenderer.md#setmorphinfluence)
+- [setMorphInfluenceIndex](Graphic3DRibbonRenderer.md#setmorphinfluenceindex)
+- [onCompute](Graphic3DRibbonRenderer.md#oncompute)
+- [destroy](Graphic3DRibbonRenderer.md#destroy)
+- [attachSceneOctree](Graphic3DRibbonRenderer.md#attachsceneoctree)
+- [detachSceneOctree](Graphic3DRibbonRenderer.md#detachsceneoctree)
+- [addMask](Graphic3DRibbonRenderer.md#addmask)
+- [removeMask](Graphic3DRibbonRenderer.md#removemask)
+- [hasMask](Graphic3DRibbonRenderer.md#hasmask)
+- [addRendererMask](Graphic3DRibbonRenderer.md#addrenderermask)
+- [removeRendererMask](Graphic3DRibbonRenderer.md#removerenderermask)
+- [selfCloneMaterials](Graphic3DRibbonRenderer.md#selfclonematerials)
+- [renderPass](Graphic3DRibbonRenderer.md#renderpass)
+- [renderPass2](Graphic3DRibbonRenderer.md#renderpass2)
+- [recordRenderPass2](Graphic3DRibbonRenderer.md#recordrenderpass2)
+- [preInit](Graphic3DRibbonRenderer.md#preinit)
+- [beforeDestroy](Graphic3DRibbonRenderer.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new Graphic3DRibbonRenderer**(): [`Graphic3DRibbonRenderer`](Graphic3DRibbonRenderer.md)
+
+#### Returns
+
+[`Graphic3DRibbonRenderer`](Graphic3DRibbonRenderer.md)
+
+#### Inherited from
+
+MeshRenderer.constructor
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L26)
+
+## Properties
+
+### maxRibbonSegment
+
+▪ `Static` **maxRibbonSegment**: `number` = `256`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:25](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L25)
+
+___
+
+### transformBuffer
+
+• **transformBuffer**: `StorageGPUBuffer`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:26](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L26)
+
+___
+
+### sourceGeometry
+
+• **sourceGeometry**: `GeometryBase`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:27](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L27)
+
+___
+
+### texture
+
+• **texture**: `BitmapTexture2DArray`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:28](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L28)
+
+___
+
+### object3Ds
+
+• **object3Ds**: `Object3D`[]
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L29)
+
+___
+
+### ribbons
+
+• **ribbons**: [`RibbonStruct`](RibbonStruct.md)[]
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:31](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L31)
+
+___
+
+### ribbonCount
+
+• **ribbonCount**: `number` = `10`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:32](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L32)
+
+___
+
+### ribbonSegment
+
+• **ribbonSegment**: `number`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:37](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L37)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+MeshRenderer.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### receiveShadow
+
+• **receiveShadow**: `boolean`
+
+Enabling this option allows the grid to display any shadows cast on the grid.
+
+#### Inherited from
+
+MeshRenderer.receiveShadow
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L23)
+
+___
+
+### morphData
+
+• **morphData**: `MorphTargetData`
+
+#### Inherited from
+
+MeshRenderer.morphData
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L24)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+MeshRenderer.instanceCount
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+MeshRenderer.lodLevel
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+MeshRenderer.alwaysRender
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+MeshRenderer.instanceID
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+MeshRenderer.drawType
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.isRenderOrderChange
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.needSortOnCameraZ
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+MeshRenderer.isRecievePostEffectUI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+MeshRenderer.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### geometry
+
+• `get` **geometry**(): `GeometryBase`
+
+The geometry of the mesh determines its shape
+
+#### Returns
+
+`GeometryBase`
+
+#### Inherited from
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L53)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GeometryBase` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L57)
+
+___
+
+### material
+
+• `get` **material**(): `Material`
+
+material
+
+#### Returns
+
+`Material`
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L99)
+
+• `set` **material**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Material` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L103)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): `Material`[]
+
+#### Returns
+
+`Material`[]
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Material`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+## Methods
+
+### init
+
+▸ **init**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+MeshRenderer.init
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:38](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L38)
+
+___
+
+### create
+
+▸ **create**(`ribbonSegment`, `tex`, `num`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ribbonSegment` | `number` |
+| `tex` | `BitmapTexture2DArray` |
+| `num` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:42](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L42)
+
+___
+
+### startRibbon
+
+▸ **startRibbon**(`texture`, `ribonSegment`, `count`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | `BitmapTexture2DArray` |
+| `ribonSegment` | `number` |
+| `count` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:83](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L83)
+
+___
+
+### setTextureID
+
+▸ **setTextureID**(`i`, `id`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `id` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:114](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L114)
+
+___
+
+### setBaseColor
+
+▸ **setBaseColor**(`i`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:129](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L129)
+
+___
+
+### setEmissiveColor
+
+▸ **setEmissiveColor**(`i`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:134](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L134)
+
+___
+
+### setUVRect
+
+▸ **setUVRect**(`i`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `v` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:139](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L139)
+
+___
+
+### setLineUVRect
+
+▸ **setLineUVRect**(`i`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `v` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:144](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L144)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+MeshRenderer.onUpdate
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:149](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L149)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.start
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+MeshRenderer.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.onEnable
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L30)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.onDisable
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L34)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `Object3D` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.cloneTo
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L38)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+MeshRenderer.copyComponent
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L43)
+
+___
+
+### setMorphInfluence
+
+▸ **setMorphInfluence**(`key`, `value`): `void`
+
+Set deformation animation parameters
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.setMorphInfluence
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L110)
+
+___
+
+### setMorphInfluenceIndex
+
+▸ **setMorphInfluenceIndex**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.setMorphInfluenceIndex
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view`, `command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | `View3D` |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.onCompute
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L128)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.destroy
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L157)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | `Octree` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.attachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.detachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.addMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.removeMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.hasMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.addRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.removeRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+MeshRenderer.selfCloneMaterials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | `View3D` |
+| `passType` | `PassType` |
+| `renderContext` | `RenderContext` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderPass
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L370)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+render pass at passType
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | `View3D` | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | `ClusterLightingBuffer` | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.renderPass2
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L438)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | `View3D` | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | `ClusterLightingBuffer` | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.recordRenderPass2
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+MeshRenderer.preInit
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+MeshRenderer.beforeDestroy
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
diff --git a/docs/graphic/classes/GrassNodeStruct.md b/docs/graphic/classes/GrassNodeStruct.md
new file mode 100644
index 00000000..9e69374c
--- /dev/null
+++ b/docs/graphic/classes/GrassNodeStruct.md
@@ -0,0 +1,262 @@
+# Class: GrassNodeStruct
+
+## Hierarchy
+
+- [`DynamicDrawStruct`](DynamicDrawStruct.md)
+
+ ↳ **`GrassNodeStruct`**
+
+### Constructors
+
+- [constructor](GrassNodeStruct.md#constructor)
+
+### Properties
+
+- [grassCount](GrassNodeStruct.md#grasscount)
+- [grassHSegment](GrassNodeStruct.md#grasshsegment)
+- [grassWight](GrassNodeStruct.md#grasswight)
+- [grassHeigh](GrassNodeStruct.md#grassheigh)
+- [grassX](GrassNodeStruct.md#grassx)
+- [grassY](GrassNodeStruct.md#grassy)
+- [grassZ](GrassNodeStruct.md#grassz)
+- [grassRotation](GrassNodeStruct.md#grassrotation)
+
+### Methods
+
+- [getValueSize](GrassNodeStruct.md#getvaluesize)
+- [Ref](GrassNodeStruct.md#ref)
+- [Get](GrassNodeStruct.md#get)
+- [GetSize](GrassNodeStruct.md#getsize)
+- [getValueType](GrassNodeStruct.md#getvaluetype)
+
+## Constructors
+
+### constructor
+
+• **new GrassNodeStruct**(): [`GrassNodeStruct`](GrassNodeStruct.md)
+
+#### Returns
+
+[`GrassNodeStruct`](GrassNodeStruct.md)
+
+#### Inherited from
+
+[DynamicDrawStruct](DynamicDrawStruct.md).[constructor](DynamicDrawStruct.md#constructor)
+
+## Properties
+
+### grassCount
+
+• **grassCount**: `number` = `1`
+
+#### Defined in
+
+[packages/graphic/renderer/GrassRenderer.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/GrassRenderer.ts#L9)
+
+___
+
+### grassHSegment
+
+• **grassHSegment**: `number` = `1`
+
+#### Defined in
+
+[packages/graphic/renderer/GrassRenderer.ts:10](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/GrassRenderer.ts#L10)
+
+___
+
+### grassWight
+
+• **grassWight**: `number` = `2`
+
+#### Defined in
+
+[packages/graphic/renderer/GrassRenderer.ts:11](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/GrassRenderer.ts#L11)
+
+___
+
+### grassHeigh
+
+• **grassHeigh**: `number` = `4`
+
+#### Defined in
+
+[packages/graphic/renderer/GrassRenderer.ts:12](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/GrassRenderer.ts#L12)
+
+___
+
+### grassX
+
+• **grassX**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/GrassRenderer.ts:13](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/GrassRenderer.ts#L13)
+
+___
+
+### grassY
+
+• **grassY**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/GrassRenderer.ts:14](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/GrassRenderer.ts#L14)
+
+___
+
+### grassZ
+
+• **grassZ**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/GrassRenderer.ts:15](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/GrassRenderer.ts#L15)
+
+___
+
+### grassRotation
+
+• **grassRotation**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/GrassRenderer.ts:16](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/GrassRenderer.ts#L16)
+
+## Methods
+
+### getValueSize
+
+▸ **getValueSize**(`value`): `any`
+
+get any type value memory size
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `any` | any type value |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[DynamicDrawStruct](DynamicDrawStruct.md).[getValueSize](DynamicDrawStruct.md#getvaluesize)
+
+#### Defined in
+
+[src/util/struct/Struct.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L48)
+
+___
+
+### Ref
+
+▸ **Ref**\<`T`\>(`c`): \{ `name`: `string` ; `type`: `string` }[]
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+\{ `name`: `string` ; `type`: `string` }[]
+
+#### Inherited from
+
+[DynamicDrawStruct](DynamicDrawStruct.md).[Ref](DynamicDrawStruct.md#ref)
+
+#### Defined in
+
+[src/util/struct/Struct.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L93)
+
+___
+
+### Get
+
+▸ **Get**\<`T`\>(`c`): `Struct`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+`Struct`
+
+#### Inherited from
+
+[DynamicDrawStruct](DynamicDrawStruct.md).[Get](DynamicDrawStruct.md#get)
+
+#### Defined in
+
+[src/util/struct/Struct.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L99)
+
+___
+
+### GetSize
+
+▸ **GetSize**\<`T`\>(`c`): `number`
+
+get any struct memory size
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[DynamicDrawStruct](DynamicDrawStruct.md).[GetSize](DynamicDrawStruct.md#getsize)
+
+#### Defined in
+
+[src/util/struct/Struct.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L112)
+
+___
+
+### getValueType
+
+▸ **getValueType**(): \{ `name`: `string` ; `type`: `string` }[]
+
+get reflection name
+
+#### Returns
+
+\{ `name`: `string` ; `type`: `string` }[]
+
+#### Inherited from
+
+[DynamicDrawStruct](DynamicDrawStruct.md).[getValueType](DynamicDrawStruct.md#getvaluetype)
+
+#### Defined in
+
+[src/util/struct/Struct.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L25)
diff --git a/docs/graphic/classes/GrassRenderer.md b/docs/graphic/classes/GrassRenderer.md
new file mode 100644
index 00000000..57858855
--- /dev/null
+++ b/docs/graphic/classes/GrassRenderer.md
@@ -0,0 +1,1866 @@
+# Class: GrassRenderer
+
+## Hierarchy
+
+- [`DynamicFaceRenderer`](DynamicFaceRenderer.md)
+
+ ↳ **`GrassRenderer`**
+
+### Constructors
+
+- [constructor](GrassRenderer.md#constructor)
+
+### Properties
+
+- [grassGeometryCompute](GrassRenderer.md#grassgeometrycompute)
+- [texture](GrassRenderer.md#texture)
+- [transformBuffer](GrassRenderer.md#transformbuffer)
+- [nodeStructBuffer](GrassRenderer.md#nodestructbuffer)
+- [drawAtomicBuffer](GrassRenderer.md#drawatomicbuffer)
+- [nodes](GrassRenderer.md#nodes)
+- [object3D](GrassRenderer.md#object3d)
+- [isDestroyed](GrassRenderer.md#isdestroyed)
+- [receiveShadow](GrassRenderer.md#receiveshadow)
+- [morphData](GrassRenderer.md#morphdata)
+- [instanceCount](GrassRenderer.md#instancecount)
+- [lodLevel](GrassRenderer.md#lodlevel)
+- [alwaysRender](GrassRenderer.md#alwaysrender)
+- [instanceID](GrassRenderer.md#instanceid)
+- [drawType](GrassRenderer.md#drawtype)
+- [isRenderOrderChange](GrassRenderer.md#isrenderorderchange)
+- [needSortOnCameraZ](GrassRenderer.md#needsortoncameraz)
+- [isRecievePostEffectUI](GrassRenderer.md#isrecieveposteffectui)
+
+### Accessors
+
+- [eventDispatcher](GrassRenderer.md#eventdispatcher)
+- [isStart](GrassRenderer.md#isstart)
+- [transform](GrassRenderer.md#transform)
+- [enable](GrassRenderer.md#enable)
+- [geometry](GrassRenderer.md#geometry)
+- [material](GrassRenderer.md#material)
+- [renderLayer](GrassRenderer.md#renderlayer)
+- [rendererMask](GrassRenderer.md#renderermask)
+- [renderOrder](GrassRenderer.md#renderorder)
+- [materials](GrassRenderer.md#materials)
+- [castShadow](GrassRenderer.md#castshadow)
+- [castGI](GrassRenderer.md#castgi)
+- [castReflection](GrassRenderer.md#castreflection)
+
+### Methods
+
+- [init](GrassRenderer.md#init)
+- [set](GrassRenderer.md#set)
+- [setNodeStruct](GrassRenderer.md#setnodestruct)
+- [updateShape](GrassRenderer.md#updateshape)
+- [setTextureID](GrassRenderer.md#settextureid)
+- [setLineTextureID](GrassRenderer.md#setlinetextureid)
+- [setBaseColor](GrassRenderer.md#setbasecolor)
+- [setLineColor](GrassRenderer.md#setlinecolor)
+- [setEmissiveColor](GrassRenderer.md#setemissivecolor)
+- [setFillRotation](GrassRenderer.md#setfillrotation)
+- [setUVRect](GrassRenderer.md#setuvrect)
+- [setUVRect2](GrassRenderer.md#setuvrect2)
+- [setUVSpeed](GrassRenderer.md#setuvspeed)
+- [onUpdate](GrassRenderer.md#onupdate)
+- [onCompute](GrassRenderer.md#oncompute)
+- [start](GrassRenderer.md#start)
+- [stop](GrassRenderer.md#stop)
+- [onLateUpdate](GrassRenderer.md#onlateupdate)
+- [onBeforeUpdate](GrassRenderer.md#onbeforeupdate)
+- [onGraphic](GrassRenderer.md#ongraphic)
+- [onParentChange](GrassRenderer.md#onparentchange)
+- [onAddChild](GrassRenderer.md#onaddchild)
+- [onRemoveChild](GrassRenderer.md#onremovechild)
+- [onEnable](GrassRenderer.md#onenable)
+- [onDisable](GrassRenderer.md#ondisable)
+- [cloneTo](GrassRenderer.md#cloneto)
+- [copyComponent](GrassRenderer.md#copycomponent)
+- [setMorphInfluence](GrassRenderer.md#setmorphinfluence)
+- [setMorphInfluenceIndex](GrassRenderer.md#setmorphinfluenceindex)
+- [destroy](GrassRenderer.md#destroy)
+- [attachSceneOctree](GrassRenderer.md#attachsceneoctree)
+- [detachSceneOctree](GrassRenderer.md#detachsceneoctree)
+- [addMask](GrassRenderer.md#addmask)
+- [removeMask](GrassRenderer.md#removemask)
+- [hasMask](GrassRenderer.md#hasmask)
+- [addRendererMask](GrassRenderer.md#addrenderermask)
+- [removeRendererMask](GrassRenderer.md#removerenderermask)
+- [selfCloneMaterials](GrassRenderer.md#selfclonematerials)
+- [renderPass](GrassRenderer.md#renderpass)
+- [renderPass2](GrassRenderer.md#renderpass2)
+- [recordRenderPass2](GrassRenderer.md#recordrenderpass2)
+- [preInit](GrassRenderer.md#preinit)
+- [beforeDestroy](GrassRenderer.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new GrassRenderer**(): [`GrassRenderer`](GrassRenderer.md)
+
+#### Returns
+
+[`GrassRenderer`](GrassRenderer.md)
+
+#### Overrides
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[constructor](DynamicFaceRenderer.md#constructor)
+
+#### Defined in
+
+[packages/graphic/renderer/GrassRenderer.ts:22](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/GrassRenderer.ts#L22)
+
+## Properties
+
+### grassGeometryCompute
+
+• **grassGeometryCompute**: `ComputeShader`
+
+#### Defined in
+
+[packages/graphic/renderer/GrassRenderer.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/GrassRenderer.ts#L20)
+
+___
+
+### texture
+
+• **texture**: `BitmapTexture2DArray`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[texture](DynamicFaceRenderer.md#texture)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:6](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L6)
+
+___
+
+### transformBuffer
+
+• **transformBuffer**: `StorageGPUBuffer`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[transformBuffer](DynamicFaceRenderer.md#transformbuffer)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:7](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L7)
+
+___
+
+### nodeStructBuffer
+
+• **nodeStructBuffer**: `StructStorageGPUBuffer`\<[`DynamicDrawStruct`](DynamicDrawStruct.md)\>
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[nodeStructBuffer](DynamicFaceRenderer.md#nodestructbuffer)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:8](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L8)
+
+___
+
+### drawAtomicBuffer
+
+• **drawAtomicBuffer**: `StorageGPUBuffer`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[drawAtomicBuffer](DynamicFaceRenderer.md#drawatomicbuffer)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L9)
+
+___
+
+### nodes
+
+• **nodes**: [`DynamicDrawStruct`](DynamicDrawStruct.md)[]
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[nodes](DynamicFaceRenderer.md#nodes)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:12](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L12)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[object3D](DynamicFaceRenderer.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[isDestroyed](DynamicFaceRenderer.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### receiveShadow
+
+• **receiveShadow**: `boolean`
+
+Enabling this option allows the grid to display any shadows cast on the grid.
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[receiveShadow](DynamicFaceRenderer.md#receiveshadow)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L23)
+
+___
+
+### morphData
+
+• **morphData**: `MorphTargetData`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[morphData](DynamicFaceRenderer.md#morphdata)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L24)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[instanceCount](DynamicFaceRenderer.md#instancecount)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[lodLevel](DynamicFaceRenderer.md#lodlevel)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[alwaysRender](DynamicFaceRenderer.md#alwaysrender)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[instanceID](DynamicFaceRenderer.md#instanceid)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[drawType](DynamicFaceRenderer.md#drawtype)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[isRenderOrderChange](DynamicFaceRenderer.md#isrenderorderchange)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[needSortOnCameraZ](DynamicFaceRenderer.md#needsortoncameraz)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[isRecievePostEffectUI](DynamicFaceRenderer.md#isrecieveposteffectui)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+DynamicFaceRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+DynamicFaceRenderer.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+DynamicFaceRenderer.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+DynamicFaceRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### geometry
+
+• `get` **geometry**(): `GeometryBase`
+
+The geometry of the mesh determines its shape
+
+#### Returns
+
+`GeometryBase`
+
+#### Inherited from
+
+DynamicFaceRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L53)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GeometryBase` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L57)
+
+___
+
+### material
+
+• `get` **material**(): `Material`
+
+material
+
+#### Returns
+
+`Material`
+
+#### Inherited from
+
+DynamicFaceRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L99)
+
+• `set` **material**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Material` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L103)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+DynamicFaceRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+DynamicFaceRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+DynamicFaceRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): `Material`[]
+
+#### Returns
+
+`Material`[]
+
+#### Inherited from
+
+DynamicFaceRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Material`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+DynamicFaceRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+DynamicFaceRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+DynamicFaceRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+## Methods
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[init](DynamicFaceRenderer.md#init)
+
+#### Defined in
+
+[packages/graphic/renderer/GrassRenderer.ts:26](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/GrassRenderer.ts#L26)
+
+___
+
+### set
+
+▸ **set**\<`T`\>(`nodeStruct`, `tex`, `standAloneMatrix?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`DynamicDrawStruct`](DynamicDrawStruct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `nodeStruct` | `Ctor`\<`T`\> |
+| `tex` | `BitmapTexture2DArray` |
+| `standAloneMatrix?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[set](DynamicFaceRenderer.md#set)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:66](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L66)
+
+___
+
+### setNodeStruct
+
+▸ **setNodeStruct**(`index`, `shape`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `shape` | [`DynamicDrawStruct`](DynamicDrawStruct.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setNodeStruct](DynamicFaceRenderer.md#setnodestruct)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:134](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L134)
+
+___
+
+### updateShape
+
+▸ **updateShape**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[updateShape](DynamicFaceRenderer.md#updateshape)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:141](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L141)
+
+___
+
+### setTextureID
+
+▸ **setTextureID**(`i`, `id`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `id` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setTextureID](DynamicFaceRenderer.md#settextureid)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:150](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L150)
+
+___
+
+### setLineTextureID
+
+▸ **setLineTextureID**(`i`, `id`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `id` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setLineTextureID](DynamicFaceRenderer.md#setlinetextureid)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:155](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L155)
+
+___
+
+### setBaseColor
+
+▸ **setBaseColor**(`i`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setBaseColor](DynamicFaceRenderer.md#setbasecolor)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:160](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L160)
+
+___
+
+### setLineColor
+
+▸ **setLineColor**(`index`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setLineColor](DynamicFaceRenderer.md#setlinecolor)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:165](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L165)
+
+___
+
+### setEmissiveColor
+
+▸ **setEmissiveColor**(`i`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setEmissiveColor](DynamicFaceRenderer.md#setemissivecolor)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:170](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L170)
+
+___
+
+### setFillRotation
+
+▸ **setFillRotation**(`i`, `radians`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `radians` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setFillRotation](DynamicFaceRenderer.md#setfillrotation)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:175](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L175)
+
+___
+
+### setUVRect
+
+▸ **setUVRect**(`i`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `v` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setUVRect](DynamicFaceRenderer.md#setuvrect)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:180](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L180)
+
+___
+
+### setUVRect2
+
+▸ **setUVRect2**(`i`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `v` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setUVRect2](DynamicFaceRenderer.md#setuvrect2)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:185](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L185)
+
+___
+
+### setUVSpeed
+
+▸ **setUVSpeed**(`i`, `v`): `void`
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `i` | `number` | index |
+| `v` | `Vector4` | {x:fill speed u, y: fill speed v, z:line speed u, w: line speed v} |
+
+#### Returns
+
+`void`
+
+**`Memberof`**
+
+DynamicFaceRenderer
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setUVSpeed](DynamicFaceRenderer.md#setuvspeed)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:196](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L196)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onUpdate](DynamicFaceRenderer.md#onupdate)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:201](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L201)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view`, `command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | `View3D` |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onCompute](DynamicFaceRenderer.md#oncompute)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:208](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L208)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[start](DynamicFaceRenderer.md#start)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[stop](DynamicFaceRenderer.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onLateUpdate](DynamicFaceRenderer.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onBeforeUpdate](DynamicFaceRenderer.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onGraphic](DynamicFaceRenderer.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onParentChange](DynamicFaceRenderer.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onAddChild](DynamicFaceRenderer.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onRemoveChild](DynamicFaceRenderer.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onEnable](DynamicFaceRenderer.md#onenable)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L30)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onDisable](DynamicFaceRenderer.md#ondisable)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L34)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `Object3D` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[cloneTo](DynamicFaceRenderer.md#cloneto)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L38)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[copyComponent](DynamicFaceRenderer.md#copycomponent)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L43)
+
+___
+
+### setMorphInfluence
+
+▸ **setMorphInfluence**(`key`, `value`): `void`
+
+Set deformation animation parameters
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setMorphInfluence](DynamicFaceRenderer.md#setmorphinfluence)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L110)
+
+___
+
+### setMorphInfluenceIndex
+
+▸ **setMorphInfluenceIndex**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setMorphInfluenceIndex](DynamicFaceRenderer.md#setmorphinfluenceindex)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L119)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[destroy](DynamicFaceRenderer.md#destroy)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L157)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | `Octree` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[attachSceneOctree](DynamicFaceRenderer.md#attachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[detachSceneOctree](DynamicFaceRenderer.md#detachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[addMask](DynamicFaceRenderer.md#addmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[removeMask](DynamicFaceRenderer.md#removemask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[hasMask](DynamicFaceRenderer.md#hasmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[addRendererMask](DynamicFaceRenderer.md#addrenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[removeRendererMask](DynamicFaceRenderer.md#removerenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[selfCloneMaterials](DynamicFaceRenderer.md#selfclonematerials)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | `View3D` |
+| `passType` | `PassType` |
+| `renderContext` | `RenderContext` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[renderPass](DynamicFaceRenderer.md#renderpass)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L370)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+render pass at passType
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | `View3D` | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | `ClusterLightingBuffer` | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[renderPass2](DynamicFaceRenderer.md#renderpass2)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L438)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | `View3D` | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | `ClusterLightingBuffer` | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[recordRenderPass2](DynamicFaceRenderer.md#recordrenderpass2)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[preInit](DynamicFaceRenderer.md#preinit)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[beforeDestroy](DynamicFaceRenderer.md#beforedestroy)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
diff --git a/docs/graphic/classes/LineShape3D.md b/docs/graphic/classes/LineShape3D.md
new file mode 100644
index 00000000..1224f3a3
--- /dev/null
+++ b/docs/graphic/classes/LineShape3D.md
@@ -0,0 +1,1041 @@
+# Class: LineShape3D
+
+Define class for drawing line path on the xz plane, by inputs xz coords.
+You can use the API implemented in CanvasPath in Path2DShape3D to draw the xz plane path
+
+**`Export`**
+
+## Hierarchy
+
+- [`Shape3D`](Shape3D.md)
+
+ ↳ **`LineShape3D`**
+
+ ↳↳ [`QuadraticCurveShape3D`](QuadraticCurveShape3D.md)
+
+ ↳↳ [`CurveShape3D`](CurveShape3D.md)
+
+ ↳↳ [`Path3DShape3D`](Path3DShape3D.md)
+
+ ↳↳ [`Path2DShape3D`](Path2DShape3D.md)
+
+### Constructors
+
+- [constructor](LineShape3D.md#constructor)
+
+### Properties
+
+- [shapeType](LineShape3D.md#shapetype)
+- [shapeIndex](LineShape3D.md#shapeindex)
+- [computeEveryFrame](LineShape3D.md#computeeveryframe)
+
+### Accessors
+
+- [corner](LineShape3D.md#corner)
+- [lineJoin](LineShape3D.md#linejoin)
+- [isChange](LineShape3D.md#ischange)
+- [lineColor](LineShape3D.md#linecolor)
+- [fillColor](LineShape3D.md#fillcolor)
+- [lineTextureID](LineShape3D.md#linetextureid)
+- [fillTextureID](LineShape3D.md#filltextureid)
+- [fillRotation](LineShape3D.md#fillrotation)
+- [shapeOrder](LineShape3D.md#shapeorder)
+- [srcPointStart](LineShape3D.md#srcpointstart)
+- [srcPointCount](LineShape3D.md#srcpointcount)
+- [srcIndexStart](LineShape3D.md#srcindexstart)
+- [srcIndexCount](LineShape3D.md#srcindexcount)
+- [destPointStart](LineShape3D.md#destpointstart)
+- [destPointCount](LineShape3D.md#destpointcount)
+- [points3D](LineShape3D.md#points3d)
+- [isClosed](LineShape3D.md#isclosed)
+- [fill](LineShape3D.md#fill)
+- [line](LineShape3D.md#line)
+- [lineWidth](LineShape3D.md#linewidth)
+- [lineUVRect](LineShape3D.md#lineuvrect)
+- [fillUVRect](LineShape3D.md#filluvrect)
+- [uvSpeed](LineShape3D.md#uvspeed)
+
+### Methods
+
+- [calcRequireSource](LineShape3D.md#calcrequiresource)
+- [sampleQuadraticCurve](LineShape3D.md#samplequadraticcurve)
+- [sampleCurve](LineShape3D.md#samplecurve)
+- [writeData](LineShape3D.md#writedata)
+- [clean](LineShape3D.md#clean)
+
+## Constructors
+
+### constructor
+
+• **new LineShape3D**(`structs`, `sharedPoints`, `sharedIndecies`, `matrixIndex`): [`LineShape3D`](LineShape3D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `structs` | [`Shape3DStruct`](Shape3DStruct.md) |
+| `sharedPoints` | `Float32Array` |
+| `sharedIndecies` | `Uint32Array` |
+| `matrixIndex` | `number` |
+
+#### Returns
+
+[`LineShape3D`](LineShape3D.md)
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[constructor](Shape3D.md#constructor)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:113](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L113)
+
+## Properties
+
+### shapeType
+
+• `Readonly` **shapeType**: `number`
+
+#### Overrides
+
+[Shape3D](Shape3D.md).[shapeType](Shape3D.md#shapetype)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:18](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L18)
+
+___
+
+### shapeIndex
+
+• `Readonly` **shapeIndex**: `number` = `0`
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[shapeIndex](Shape3D.md#shapeindex)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:109](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L109)
+
+___
+
+### computeEveryFrame
+
+• `Optional` `Readonly` **computeEveryFrame**: `boolean`
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[computeEveryFrame](Shape3D.md#computeeveryframe)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:111](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L111)
+
+## Accessors
+
+### corner
+
+• `get` **corner**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L20)
+
+• `set` **corner**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:23](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L23)
+
+___
+
+### lineJoin
+
+• `get` **lineJoin**(): [`LineJoin`](../enums/LineJoin.md)
+
+#### Returns
+
+[`LineJoin`](../enums/LineJoin.md)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:30](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L30)
+
+• `set` **lineJoin**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`LineJoin`](../enums/LineJoin.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:33](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L33)
+
+___
+
+### isChange
+
+• `get` **isChange**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Shape3D.isChange
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:120](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L120)
+
+___
+
+### lineColor
+
+• `get` **lineColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+Shape3D.lineColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:135](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L135)
+
+• `set` **lineColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.lineColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:130](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L130)
+
+___
+
+### fillColor
+
+• `get` **fillColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+Shape3D.fillColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:144](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L144)
+
+• `set` **fillColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fillColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:139](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L139)
+
+___
+
+### lineTextureID
+
+• `get` **lineTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.lineTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:148](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L148)
+
+• `set` **lineTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.lineTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:151](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L151)
+
+___
+
+### fillTextureID
+
+• `get` **fillTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.fillTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:157](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L157)
+
+• `set` **fillTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fillTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:160](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L160)
+
+___
+
+### fillRotation
+
+• `get` **fillRotation**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.fillRotation
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:167](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L167)
+
+• `set` **fillRotation**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fillRotation
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:170](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L170)
+
+___
+
+### shapeOrder
+
+• `get` **shapeOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.shapeOrder
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:177](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L177)
+
+• `set` **shapeOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.shapeOrder
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:180](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L180)
+
+___
+
+### srcPointStart
+
+• `get` **srcPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.srcPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:188](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L188)
+
+• `set` **srcPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.srcPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:191](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L191)
+
+___
+
+### srcPointCount
+
+• `get` **srcPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.srcPointCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:198](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L198)
+
+___
+
+### srcIndexStart
+
+• `get` **srcIndexStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.srcIndexStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:202](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L202)
+
+• `set` **srcIndexStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.srcIndexStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:205](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L205)
+
+___
+
+### srcIndexCount
+
+• `get` **srcIndexCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.srcIndexCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:212](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L212)
+
+___
+
+### destPointStart
+
+• `get` **destPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.destPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:216](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L216)
+
+• `set` **destPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.destPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:219](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L219)
+
+___
+
+### destPointCount
+
+• `get` **destPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.destPointCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:225](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L225)
+
+___
+
+### points3D
+
+• `get` **points3D**(): [`Point3D`](Point3D.md)[]
+
+#### Returns
+
+[`Point3D`](Point3D.md)[]
+
+#### Inherited from
+
+Shape3D.points3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:229](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L229)
+
+• `set` **points3D**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Point3D`](Point3D.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.points3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:232](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L232)
+
+___
+
+### isClosed
+
+• `get` **isClosed**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Shape3D.isClosed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:238](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L238)
+
+• `set` **isClosed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.isClosed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:241](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L241)
+
+___
+
+### fill
+
+• `get` **fill**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Shape3D.fill
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:248](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L248)
+
+• `set` **fill**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fill
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:251](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L251)
+
+___
+
+### line
+
+• `get` **line**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Shape3D.line
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:257](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L257)
+
+• `set` **line**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.line
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:260](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L260)
+
+___
+
+### lineWidth
+
+• `get` **lineWidth**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.lineWidth
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:267](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L267)
+
+• `set` **lineWidth**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.lineWidth
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:271](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L271)
+
+___
+
+### lineUVRect
+
+• `get` **lineUVRect**(): `Vector4`
+
+x: u offset of line.
+y: v offset of line.
+z: u scale of line.
+w: v scale of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+Shape3D.lineUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:288](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L288)
+
+• `set` **lineUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.lineUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:291](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L291)
+
+___
+
+### fillUVRect
+
+• `get` **fillUVRect**(): `Vector4`
+
+x: u offset of filled area.
+y: v offset of filled area.
+z: u scale of filled area.
+w: v scale of filled area.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+Shape3D.fillUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:305](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L305)
+
+• `set` **fillUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fillUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:308](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L308)
+
+___
+
+### uvSpeed
+
+• `get` **uvSpeed**(): `Vector4`
+
+x: u speed of filled area.
+y: v speed of filled area.
+z: u speed of line.
+w: v speed of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+Shape3D.uvSpeed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:322](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L322)
+
+• `set` **uvSpeed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.uvSpeed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:325](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L325)
+
+## Methods
+
+### calcRequireSource
+
+▸ **calcRequireSource**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[Shape3D](Shape3D.md).[calcRequireSource](Shape3D.md#calcrequiresource)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:40](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L40)
+
+___
+
+### sampleQuadraticCurve
+
+▸ **sampleQuadraticCurve**(`start`, `cp`, `end`, `t`, `ret?`): `vec3`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `start` | `vec3` |
+| `cp` | `vec3` |
+| `end` | `vec3` |
+| `t` | `number` |
+| `ret?` | `vec3` |
+
+#### Returns
+
+`vec3`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:56](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L56)
+
+___
+
+### sampleCurve
+
+▸ **sampleCurve**(`start`, `cp1`, `cp2`, `end`, `t`, `ret?`): `vec3`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `start` | `vec3` |
+| `cp1` | `vec3` |
+| `cp2` | `vec3` |
+| `end` | `vec3` |
+| `t` | `number` |
+| `ret?` | `vec3` |
+
+#### Returns
+
+`vec3`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:66](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L66)
+
+___
+
+### writeData
+
+▸ **writeData**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[writeData](Shape3D.md#writedata)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:124](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L124)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[clean](Shape3D.md#clean)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:330](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L330)
diff --git a/docs/graphic/classes/Path2DShape3D.md b/docs/graphic/classes/Path2DShape3D.md
new file mode 100644
index 00000000..c7447c49
--- /dev/null
+++ b/docs/graphic/classes/Path2DShape3D.md
@@ -0,0 +1,1362 @@
+# Class: Path2DShape3D
+
+Define class for drawing path on the xz plane
+He implemented the interface CanvasPath
+
+**`Export`**
+
+**`Implements`**
+
+## Hierarchy
+
+- [`LineShape3D`](LineShape3D.md)
+
+ ↳ **`Path2DShape3D`**
+
+## Implements
+
+- `CanvasPath`
+
+### Constructors
+
+- [constructor](Path2DShape3D.md#constructor)
+
+### Properties
+
+- [shapeType](Path2DShape3D.md#shapetype)
+- [shapeIndex](Path2DShape3D.md#shapeindex)
+- [computeEveryFrame](Path2DShape3D.md#computeeveryframe)
+
+### Accessors
+
+- [corner](Path2DShape3D.md#corner)
+- [lineJoin](Path2DShape3D.md#linejoin)
+- [isClosed](Path2DShape3D.md#isclosed)
+- [isChange](Path2DShape3D.md#ischange)
+- [lineColor](Path2DShape3D.md#linecolor)
+- [fillColor](Path2DShape3D.md#fillcolor)
+- [lineTextureID](Path2DShape3D.md#linetextureid)
+- [fillTextureID](Path2DShape3D.md#filltextureid)
+- [fillRotation](Path2DShape3D.md#fillrotation)
+- [shapeOrder](Path2DShape3D.md#shapeorder)
+- [srcPointStart](Path2DShape3D.md#srcpointstart)
+- [srcPointCount](Path2DShape3D.md#srcpointcount)
+- [srcIndexStart](Path2DShape3D.md#srcindexstart)
+- [srcIndexCount](Path2DShape3D.md#srcindexcount)
+- [destPointStart](Path2DShape3D.md#destpointstart)
+- [destPointCount](Path2DShape3D.md#destpointcount)
+- [points3D](Path2DShape3D.md#points3d)
+- [fill](Path2DShape3D.md#fill)
+- [line](Path2DShape3D.md#line)
+- [lineWidth](Path2DShape3D.md#linewidth)
+- [lineUVRect](Path2DShape3D.md#lineuvrect)
+- [fillUVRect](Path2DShape3D.md#filluvrect)
+- [uvSpeed](Path2DShape3D.md#uvspeed)
+
+### Methods
+
+- [sampleQuadraticCurve](Path2DShape3D.md#samplequadraticcurve)
+- [sampleCurve](Path2DShape3D.md#samplecurve)
+- [reset](Path2DShape3D.md#reset)
+- [calcRequireSource](Path2DShape3D.md#calcrequiresource)
+- [arc](Path2DShape3D.md#arc)
+- [arcTo](Path2DShape3D.md#arcto)
+- [bezierCurveTo](Path2DShape3D.md#beziercurveto)
+- [closePath](Path2DShape3D.md#closepath)
+- [ellipse](Path2DShape3D.md#ellipse)
+- [moveTo](Path2DShape3D.md#moveto)
+- [quadraticCurveTo](Path2DShape3D.md#quadraticcurveto)
+- [rect](Path2DShape3D.md#rect)
+- [roundRect](Path2DShape3D.md#roundrect)
+- [lineTo](Path2DShape3D.md#lineto)
+- [writeData](Path2DShape3D.md#writedata)
+- [clean](Path2DShape3D.md#clean)
+
+## Constructors
+
+### constructor
+
+• **new Path2DShape3D**(`structs`, `sharedPoints`, `sharedIndecies`, `matrixIndex`): [`Path2DShape3D`](Path2DShape3D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `structs` | [`Shape3DStruct`](Shape3DStruct.md) |
+| `sharedPoints` | `Float32Array` |
+| `sharedIndecies` | `Uint32Array` |
+| `matrixIndex` | `number` |
+
+#### Returns
+
+[`Path2DShape3D`](Path2DShape3D.md)
+
+#### Overrides
+
+[LineShape3D](LineShape3D.md).[constructor](LineShape3D.md#constructor)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path2DShape3D.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path2DShape3D.ts#L17)
+
+## Properties
+
+### shapeType
+
+• `Readonly` **shapeType**: `number`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[shapeType](LineShape3D.md#shapetype)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:18](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L18)
+
+___
+
+### shapeIndex
+
+• `Readonly` **shapeIndex**: `number` = `0`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[shapeIndex](LineShape3D.md#shapeindex)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:109](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L109)
+
+___
+
+### computeEveryFrame
+
+• `Optional` `Readonly` **computeEveryFrame**: `boolean`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[computeEveryFrame](LineShape3D.md#computeeveryframe)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:111](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L111)
+
+## Accessors
+
+### corner
+
+• `get` **corner**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.corner
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L20)
+
+• `set` **corner**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.corner
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:23](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L23)
+
+___
+
+### lineJoin
+
+• `get` **lineJoin**(): [`LineJoin`](../enums/LineJoin.md)
+
+#### Returns
+
+[`LineJoin`](../enums/LineJoin.md)
+
+#### Inherited from
+
+LineShape3D.lineJoin
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:30](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L30)
+
+• `set` **lineJoin**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`LineJoin`](../enums/LineJoin.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineJoin
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:33](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L33)
+
+___
+
+### isClosed
+
+• `get` **isClosed**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Overrides
+
+LineShape3D.isClosed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path2DShape3D.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path2DShape3D.ts#L24)
+
+• `set` **isClosed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LineShape3D.isClosed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path2DShape3D.ts:27](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path2DShape3D.ts#L27)
+
+___
+
+### isChange
+
+• `get` **isChange**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LineShape3D.isChange
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:120](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L120)
+
+___
+
+### lineColor
+
+• `get` **lineColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+LineShape3D.lineColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:135](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L135)
+
+• `set` **lineColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:130](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L130)
+
+___
+
+### fillColor
+
+• `get` **fillColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+LineShape3D.fillColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:144](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L144)
+
+• `set` **fillColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fillColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:139](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L139)
+
+___
+
+### lineTextureID
+
+• `get` **lineTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.lineTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:148](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L148)
+
+• `set` **lineTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:151](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L151)
+
+___
+
+### fillTextureID
+
+• `get` **fillTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.fillTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:157](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L157)
+
+• `set` **fillTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fillTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:160](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L160)
+
+___
+
+### fillRotation
+
+• `get` **fillRotation**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.fillRotation
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:167](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L167)
+
+• `set` **fillRotation**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fillRotation
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:170](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L170)
+
+___
+
+### shapeOrder
+
+• `get` **shapeOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.shapeOrder
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:177](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L177)
+
+• `set` **shapeOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.shapeOrder
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:180](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L180)
+
+___
+
+### srcPointStart
+
+• `get` **srcPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.srcPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:188](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L188)
+
+• `set` **srcPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.srcPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:191](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L191)
+
+___
+
+### srcPointCount
+
+• `get` **srcPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.srcPointCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:198](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L198)
+
+___
+
+### srcIndexStart
+
+• `get` **srcIndexStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.srcIndexStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:202](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L202)
+
+• `set` **srcIndexStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.srcIndexStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:205](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L205)
+
+___
+
+### srcIndexCount
+
+• `get` **srcIndexCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.srcIndexCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:212](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L212)
+
+___
+
+### destPointStart
+
+• `get` **destPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.destPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:216](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L216)
+
+• `set` **destPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.destPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:219](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L219)
+
+___
+
+### destPointCount
+
+• `get` **destPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.destPointCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:225](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L225)
+
+___
+
+### points3D
+
+• `get` **points3D**(): [`Point3D`](Point3D.md)[]
+
+#### Returns
+
+[`Point3D`](Point3D.md)[]
+
+#### Inherited from
+
+LineShape3D.points3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:229](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L229)
+
+• `set` **points3D**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Point3D`](Point3D.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.points3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:232](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L232)
+
+___
+
+### fill
+
+• `get` **fill**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LineShape3D.fill
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:248](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L248)
+
+• `set` **fill**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fill
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:251](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L251)
+
+___
+
+### line
+
+• `get` **line**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LineShape3D.line
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:257](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L257)
+
+• `set` **line**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.line
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:260](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L260)
+
+___
+
+### lineWidth
+
+• `get` **lineWidth**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.lineWidth
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:267](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L267)
+
+• `set` **lineWidth**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineWidth
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:271](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L271)
+
+___
+
+### lineUVRect
+
+• `get` **lineUVRect**(): `Vector4`
+
+x: u offset of line.
+y: v offset of line.
+z: u scale of line.
+w: v scale of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+LineShape3D.lineUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:288](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L288)
+
+• `set` **lineUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:291](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L291)
+
+___
+
+### fillUVRect
+
+• `get` **fillUVRect**(): `Vector4`
+
+x: u offset of filled area.
+y: v offset of filled area.
+z: u scale of filled area.
+w: v scale of filled area.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+LineShape3D.fillUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:305](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L305)
+
+• `set` **fillUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fillUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:308](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L308)
+
+___
+
+### uvSpeed
+
+• `get` **uvSpeed**(): `Vector4`
+
+x: u speed of filled area.
+y: v speed of filled area.
+z: u speed of line.
+w: v speed of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+LineShape3D.uvSpeed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:322](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L322)
+
+• `set` **uvSpeed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.uvSpeed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:325](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L325)
+
+## Methods
+
+### sampleQuadraticCurve
+
+▸ **sampleQuadraticCurve**(`start`, `cp`, `end`, `t`, `ret?`): `vec3`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `start` | `vec3` |
+| `cp` | `vec3` |
+| `end` | `vec3` |
+| `t` | `number` |
+| `ret?` | `vec3` |
+
+#### Returns
+
+`vec3`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[sampleQuadraticCurve](LineShape3D.md#samplequadraticcurve)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:56](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L56)
+
+___
+
+### sampleCurve
+
+▸ **sampleCurve**(`start`, `cp1`, `cp2`, `end`, `t`, `ret?`): `vec3`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `start` | `vec3` |
+| `cp1` | `vec3` |
+| `cp2` | `vec3` |
+| `end` | `vec3` |
+| `t` | `number` |
+| `ret?` | `vec3` |
+
+#### Returns
+
+`vec3`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[sampleCurve](LineShape3D.md#samplecurve)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:66](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L66)
+
+___
+
+### reset
+
+▸ **reset**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path2DShape3D.ts:32](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path2DShape3D.ts#L32)
+
+___
+
+### calcRequireSource
+
+▸ **calcRequireSource**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[LineShape3D](LineShape3D.md).[calcRequireSource](LineShape3D.md#calcrequiresource)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path2DShape3D.ts:38](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path2DShape3D.ts#L38)
+
+___
+
+### arc
+
+▸ **arc**(`x`, `y`, `radius`, `startAngle`, `endAngle`, `counterclockwise?`, `segment?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `radius` | `number` |
+| `startAngle` | `number` |
+| `endAngle` | `number` |
+| `counterclockwise?` | `boolean` |
+| `segment?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+CanvasPath.arc
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path2DShape3D.ts:43](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path2DShape3D.ts#L43)
+
+___
+
+### arcTo
+
+▸ **arcTo**(`ctrlX`, `ctrlY`, `toX`, `toY`, `radius`, `segment?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ctrlX` | `number` |
+| `ctrlY` | `number` |
+| `toX` | `number` |
+| `toY` | `number` |
+| `radius` | `number` |
+| `segment?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+CanvasPath.arcTo
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path2DShape3D.ts:67](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path2DShape3D.ts#L67)
+
+___
+
+### bezierCurveTo
+
+▸ **bezierCurveTo**(`cp1x`, `cp1y`, `cp2x`, `cp2y`, `x`, `y`, `segment?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cp1x` | `number` |
+| `cp1y` | `number` |
+| `cp2x` | `number` |
+| `cp2y` | `number` |
+| `x` | `number` |
+| `y` | `number` |
+| `segment?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+CanvasPath.bezierCurveTo
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path2DShape3D.ts:101](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path2DShape3D.ts#L101)
+
+___
+
+### closePath
+
+▸ **closePath**(): `void`
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+CanvasPath.closePath
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path2DShape3D.ts:123](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path2DShape3D.ts#L123)
+
+___
+
+### ellipse
+
+▸ **ellipse**(`x`, `y`, `radiusX`, `radiusY`, `rotation`, `startAngle`, `endAngle`, `counterclockwise?`, `segment?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `radiusX` | `number` |
+| `radiusY` | `number` |
+| `rotation` | `number` |
+| `startAngle` | `number` |
+| `endAngle` | `number` |
+| `counterclockwise?` | `boolean` |
+| `segment?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+CanvasPath.ellipse
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path2DShape3D.ts:132](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path2DShape3D.ts#L132)
+
+___
+
+### moveTo
+
+▸ **moveTo**(`x`, `y`, `h?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `h?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+CanvasPath.moveTo
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path2DShape3D.ts:168](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path2DShape3D.ts#L168)
+
+___
+
+### quadraticCurveTo
+
+▸ **quadraticCurveTo**(`cpx`, `cpy`, `x`, `y`, `segment?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cpx` | `number` |
+| `cpy` | `number` |
+| `x` | `number` |
+| `y` | `number` |
+| `segment?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+CanvasPath.quadraticCurveTo
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path2DShape3D.ts:174](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path2DShape3D.ts#L174)
+
+___
+
+### rect
+
+▸ **rect**(`x`, `y`, `w`, `h`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `w` | `number` |
+| `h` | `number` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+CanvasPath.rect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path2DShape3D.ts:196](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path2DShape3D.ts#L196)
+
+___
+
+### roundRect
+
+▸ **roundRect**(`x`, `y`, `w`, `h`, `radii?`, `segment?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `w` | `number` |
+| `h` | `number` |
+| `radii?` | `number` |
+| `segment?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+CanvasPath.roundRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path2DShape3D.ts:205](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path2DShape3D.ts#L205)
+
+___
+
+### lineTo
+
+▸ **lineTo**(`x`, `y`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+
+#### Returns
+
+`void`
+
+#### Implementation of
+
+CanvasPath.lineTo
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path2DShape3D.ts:249](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path2DShape3D.ts#L249)
+
+___
+
+### writeData
+
+▸ **writeData**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[writeData](LineShape3D.md#writedata)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:124](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L124)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[clean](LineShape3D.md#clean)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:330](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L330)
diff --git a/docs/graphic/classes/Path3DShape3D.md b/docs/graphic/classes/Path3DShape3D.md
new file mode 100644
index 00000000..a1da345e
--- /dev/null
+++ b/docs/graphic/classes/Path3DShape3D.md
@@ -0,0 +1,1328 @@
+# Class: Path3DShape3D
+
+Define class for drawing path in 3D space.
+It implemented an API similar to CanvasPath.
+Please ensure that the current Shape3D model matrix is identitied.
+
+**`Export`**
+
+## Hierarchy
+
+- [`LineShape3D`](LineShape3D.md)
+
+ ↳ **`Path3DShape3D`**
+
+### Constructors
+
+- [constructor](Path3DShape3D.md#constructor)
+
+### Properties
+
+- [shapeType](Path3DShape3D.md#shapetype)
+- [computeEveryFrame](Path3DShape3D.md#computeeveryframe)
+- [shapeIndex](Path3DShape3D.md#shapeindex)
+
+### Accessors
+
+- [corner](Path3DShape3D.md#corner)
+- [lineJoin](Path3DShape3D.md#linejoin)
+- [isClosed](Path3DShape3D.md#isclosed)
+- [isChange](Path3DShape3D.md#ischange)
+- [lineColor](Path3DShape3D.md#linecolor)
+- [fillColor](Path3DShape3D.md#fillcolor)
+- [lineTextureID](Path3DShape3D.md#linetextureid)
+- [fillTextureID](Path3DShape3D.md#filltextureid)
+- [fillRotation](Path3DShape3D.md#fillrotation)
+- [shapeOrder](Path3DShape3D.md#shapeorder)
+- [srcPointStart](Path3DShape3D.md#srcpointstart)
+- [srcPointCount](Path3DShape3D.md#srcpointcount)
+- [srcIndexStart](Path3DShape3D.md#srcindexstart)
+- [srcIndexCount](Path3DShape3D.md#srcindexcount)
+- [destPointStart](Path3DShape3D.md#destpointstart)
+- [destPointCount](Path3DShape3D.md#destpointcount)
+- [points3D](Path3DShape3D.md#points3d)
+- [fill](Path3DShape3D.md#fill)
+- [line](Path3DShape3D.md#line)
+- [lineWidth](Path3DShape3D.md#linewidth)
+- [lineUVRect](Path3DShape3D.md#lineuvrect)
+- [fillUVRect](Path3DShape3D.md#filluvrect)
+- [uvSpeed](Path3DShape3D.md#uvspeed)
+
+### Methods
+
+- [sampleQuadraticCurve](Path3DShape3D.md#samplequadraticcurve)
+- [sampleCurve](Path3DShape3D.md#samplecurve)
+- [reset](Path3DShape3D.md#reset)
+- [calcRequireSource](Path3DShape3D.md#calcrequiresource)
+- [arc](Path3DShape3D.md#arc)
+- [arcTo](Path3DShape3D.md#arcto)
+- [bezierCurveTo](Path3DShape3D.md#beziercurveto)
+- [closePath](Path3DShape3D.md#closepath)
+- [ellipse](Path3DShape3D.md#ellipse)
+- [moveTo](Path3DShape3D.md#moveto)
+- [quadraticCurveTo](Path3DShape3D.md#quadraticcurveto)
+- [rect](Path3DShape3D.md#rect)
+- [roundRect](Path3DShape3D.md#roundrect)
+- [lineTo](Path3DShape3D.md#lineto)
+- [writeData](Path3DShape3D.md#writedata)
+- [clean](Path3DShape3D.md#clean)
+
+## Constructors
+
+### constructor
+
+• **new Path3DShape3D**(`structs`, `sharedPoints`, `sharedIndecies`, `matrixIndex`): [`Path3DShape3D`](Path3DShape3D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `structs` | [`Shape3DStruct`](Shape3DStruct.md) |
+| `sharedPoints` | `Float32Array` |
+| `sharedIndecies` | `Uint32Array` |
+| `matrixIndex` | `number` |
+
+#### Returns
+
+[`Path3DShape3D`](Path3DShape3D.md)
+
+#### Overrides
+
+[LineShape3D](LineShape3D.md).[constructor](LineShape3D.md#constructor)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L21)
+
+## Properties
+
+### shapeType
+
+• `Readonly` **shapeType**: `number`
+
+#### Overrides
+
+[LineShape3D](LineShape3D.md).[shapeType](LineShape3D.md#shapetype)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:18](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L18)
+
+___
+
+### computeEveryFrame
+
+• `Readonly` **computeEveryFrame**: `boolean` = `true`
+
+#### Overrides
+
+[LineShape3D](LineShape3D.md).[computeEveryFrame](LineShape3D.md#computeeveryframe)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L19)
+
+___
+
+### shapeIndex
+
+• `Readonly` **shapeIndex**: `number` = `0`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[shapeIndex](LineShape3D.md#shapeindex)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:109](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L109)
+
+## Accessors
+
+### corner
+
+• `get` **corner**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.corner
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L20)
+
+• `set` **corner**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.corner
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:23](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L23)
+
+___
+
+### lineJoin
+
+• `get` **lineJoin**(): [`LineJoin`](../enums/LineJoin.md)
+
+#### Returns
+
+[`LineJoin`](../enums/LineJoin.md)
+
+#### Overrides
+
+LineShape3D.lineJoin
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:28](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L28)
+
+• `set` **lineJoin**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`LineJoin`](../enums/LineJoin.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LineShape3D.lineJoin
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:31](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L31)
+
+___
+
+### isClosed
+
+• `get` **isClosed**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Overrides
+
+LineShape3D.isClosed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:35](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L35)
+
+• `set` **isClosed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LineShape3D.isClosed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:38](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L38)
+
+___
+
+### isChange
+
+• `get` **isChange**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LineShape3D.isChange
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:120](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L120)
+
+___
+
+### lineColor
+
+• `get` **lineColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+LineShape3D.lineColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:135](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L135)
+
+• `set` **lineColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:130](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L130)
+
+___
+
+### fillColor
+
+• `get` **fillColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+LineShape3D.fillColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:144](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L144)
+
+• `set` **fillColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fillColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:139](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L139)
+
+___
+
+### lineTextureID
+
+• `get` **lineTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.lineTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:148](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L148)
+
+• `set` **lineTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:151](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L151)
+
+___
+
+### fillTextureID
+
+• `get` **fillTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.fillTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:157](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L157)
+
+• `set` **fillTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fillTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:160](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L160)
+
+___
+
+### fillRotation
+
+• `get` **fillRotation**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.fillRotation
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:167](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L167)
+
+• `set` **fillRotation**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fillRotation
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:170](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L170)
+
+___
+
+### shapeOrder
+
+• `get` **shapeOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.shapeOrder
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:177](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L177)
+
+• `set` **shapeOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.shapeOrder
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:180](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L180)
+
+___
+
+### srcPointStart
+
+• `get` **srcPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.srcPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:188](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L188)
+
+• `set` **srcPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.srcPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:191](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L191)
+
+___
+
+### srcPointCount
+
+• `get` **srcPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.srcPointCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:198](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L198)
+
+___
+
+### srcIndexStart
+
+• `get` **srcIndexStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.srcIndexStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:202](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L202)
+
+• `set` **srcIndexStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.srcIndexStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:205](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L205)
+
+___
+
+### srcIndexCount
+
+• `get` **srcIndexCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.srcIndexCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:212](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L212)
+
+___
+
+### destPointStart
+
+• `get` **destPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.destPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:216](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L216)
+
+• `set` **destPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.destPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:219](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L219)
+
+___
+
+### destPointCount
+
+• `get` **destPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.destPointCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:225](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L225)
+
+___
+
+### points3D
+
+• `get` **points3D**(): [`Point3D`](Point3D.md)[]
+
+#### Returns
+
+[`Point3D`](Point3D.md)[]
+
+#### Inherited from
+
+LineShape3D.points3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:229](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L229)
+
+• `set` **points3D**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Point3D`](Point3D.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.points3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:232](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L232)
+
+___
+
+### fill
+
+• `get` **fill**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LineShape3D.fill
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:248](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L248)
+
+• `set` **fill**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fill
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:251](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L251)
+
+___
+
+### line
+
+• `get` **line**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LineShape3D.line
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:257](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L257)
+
+• `set` **line**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.line
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:260](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L260)
+
+___
+
+### lineWidth
+
+• `get` **lineWidth**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.lineWidth
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:267](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L267)
+
+• `set` **lineWidth**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineWidth
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:271](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L271)
+
+___
+
+### lineUVRect
+
+• `get` **lineUVRect**(): `Vector4`
+
+x: u offset of line.
+y: v offset of line.
+z: u scale of line.
+w: v scale of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+LineShape3D.lineUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:288](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L288)
+
+• `set` **lineUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:291](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L291)
+
+___
+
+### fillUVRect
+
+• `get` **fillUVRect**(): `Vector4`
+
+x: u offset of filled area.
+y: v offset of filled area.
+z: u scale of filled area.
+w: v scale of filled area.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+LineShape3D.fillUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:305](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L305)
+
+• `set` **fillUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fillUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:308](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L308)
+
+___
+
+### uvSpeed
+
+• `get` **uvSpeed**(): `Vector4`
+
+x: u speed of filled area.
+y: v speed of filled area.
+z: u speed of line.
+w: v speed of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+LineShape3D.uvSpeed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:322](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L322)
+
+• `set` **uvSpeed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.uvSpeed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:325](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L325)
+
+## Methods
+
+### sampleQuadraticCurve
+
+▸ **sampleQuadraticCurve**(`start`, `cp`, `end`, `t`, `ret?`): `vec3`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `start` | `vec3` |
+| `cp` | `vec3` |
+| `end` | `vec3` |
+| `t` | `number` |
+| `ret?` | `vec3` |
+
+#### Returns
+
+`vec3`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[sampleQuadraticCurve](LineShape3D.md#samplequadraticcurve)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:56](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L56)
+
+___
+
+### sampleCurve
+
+▸ **sampleCurve**(`start`, `cp1`, `cp2`, `end`, `t`, `ret?`): `vec3`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `start` | `vec3` |
+| `cp1` | `vec3` |
+| `cp2` | `vec3` |
+| `end` | `vec3` |
+| `t` | `number` |
+| `ret?` | `vec3` |
+
+#### Returns
+
+`vec3`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[sampleCurve](LineShape3D.md#samplecurve)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:66](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L66)
+
+___
+
+### reset
+
+▸ **reset**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:43](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L43)
+
+___
+
+### calcRequireSource
+
+▸ **calcRequireSource**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[LineShape3D](LineShape3D.md).[calcRequireSource](LineShape3D.md#calcrequiresource)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:49](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L49)
+
+___
+
+### arc
+
+▸ **arc**(`x`, `y`, `radius`, `startAngle`, `endAngle`, `counterclockwise?`, `segment?`, `height?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `radius` | `number` |
+| `startAngle` | `number` |
+| `endAngle` | `number` |
+| `counterclockwise?` | `boolean` |
+| `segment?` | `number` |
+| `height?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:54](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L54)
+
+___
+
+### arcTo
+
+▸ **arcTo**(`ctrlX`, `ctrlY`, `toX`, `toY`, `radius`, `segment?`, `height?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ctrlX` | `number` |
+| `ctrlY` | `number` |
+| `toX` | `number` |
+| `toY` | `number` |
+| `radius` | `number` |
+| `segment?` | `number` |
+| `height?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:78](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L78)
+
+___
+
+### bezierCurveTo
+
+▸ **bezierCurveTo**(`cp1x`, `cp1y`, `cp1h`, `cp2x`, `cp2y`, `cp2h`, `x`, `y`, `h`, `segment?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cp1x` | `number` |
+| `cp1y` | `number` |
+| `cp1h` | `number` |
+| `cp2x` | `number` |
+| `cp2y` | `number` |
+| `cp2h` | `number` |
+| `x` | `number` |
+| `y` | `number` |
+| `h` | `number` |
+| `segment?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:112](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L112)
+
+___
+
+### closePath
+
+▸ **closePath**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:137](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L137)
+
+___
+
+### ellipse
+
+▸ **ellipse**(`x`, `y`, `radiusX`, `radiusY`, `rotation`, `startAngle`, `endAngle`, `counterclockwise?`, `segment?`, `height?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `radiusX` | `number` |
+| `radiusY` | `number` |
+| `rotation` | `number` |
+| `startAngle` | `number` |
+| `endAngle` | `number` |
+| `counterclockwise?` | `boolean` |
+| `segment?` | `number` |
+| `height?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:146](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L146)
+
+___
+
+### moveTo
+
+▸ **moveTo**(`x`, `y`, `h?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `h?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:182](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L182)
+
+___
+
+### quadraticCurveTo
+
+▸ **quadraticCurveTo**(`cpx`, `cpy`, `cph`, `x`, `y`, `h`, `segment?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cpx` | `number` |
+| `cpy` | `number` |
+| `cph` | `number` |
+| `x` | `number` |
+| `y` | `number` |
+| `h` | `number` |
+| `segment?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:188](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L188)
+
+___
+
+### rect
+
+▸ **rect**(`x`, `y`, `w`, `h`, `height?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `w` | `number` |
+| `h` | `number` |
+| `height?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:210](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L210)
+
+___
+
+### roundRect
+
+▸ **roundRect**(`x`, `y`, `w`, `h`, `radii?`, `segment?`, `height?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `w` | `number` |
+| `h` | `number` |
+| `radii?` | `number` |
+| `segment?` | `number` |
+| `height?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:219](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L219)
+
+___
+
+### lineTo
+
+▸ **lineTo**(`x`, `y`, `h?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `h?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Path3DShape3D.ts:263](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Path3DShape3D.ts#L263)
+
+___
+
+### writeData
+
+▸ **writeData**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[writeData](LineShape3D.md#writedata)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:124](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L124)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[clean](LineShape3D.md#clean)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:330](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L330)
diff --git a/docs/graphic/classes/Point3D.md b/docs/graphic/classes/Point3D.md
new file mode 100644
index 00000000..1063f05f
--- /dev/null
+++ b/docs/graphic/classes/Point3D.md
@@ -0,0 +1,161 @@
+# Class: Point3D
+
+Used to describe the key points for drawing a path, where xy refers to the data in the xz direction. H is the data in the y direction
+If you want to give this Shape transform attribute, you can control the transformation of the binded Object3D to achieve the goal
+
+**`Export`**
+
+### Constructors
+
+- [constructor](Point3D.md#constructor)
+
+### Properties
+
+- [HELP\_0](Point3D.md#help_0)
+- [HELP\_1](Point3D.md#help_1)
+- [HELP\_2](Point3D.md#help_2)
+- [x](Point3D.md#x)
+- [y](Point3D.md#y)
+- [h](Point3D.md#h)
+- [invalid](Point3D.md#invalid)
+
+### Methods
+
+- [set](Point3D.md#set)
+- [copyFrom](Point3D.md#copyfrom)
+
+## Constructors
+
+### constructor
+
+• **new Point3D**(`x?`, `y?`, `h?`, `invalid?`): [`Point3D`](Point3D.md)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `x` | `number` | `0` |
+| `y` | `number` | `0` |
+| `h` | `number` | `0` |
+| `invalid?` | `boolean` | `undefined` |
+
+#### Returns
+
+[`Point3D`](Point3D.md)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:58](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L58)
+
+## Properties
+
+### HELP\_0
+
+▪ `Static` **HELP\_0**: [`Point3D`](Point3D.md)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:54](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L54)
+
+___
+
+### HELP\_1
+
+▪ `Static` **HELP\_1**: [`Point3D`](Point3D.md)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:55](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L55)
+
+___
+
+### HELP\_2
+
+▪ `Static` **HELP\_2**: [`Point3D`](Point3D.md)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:56](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L56)
+
+___
+
+### x
+
+• **x**: `number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:77](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L77)
+
+___
+
+### y
+
+• **y**: `number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:78](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L78)
+
+___
+
+### h
+
+• **h**: `number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:79](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L79)
+
+___
+
+### invalid
+
+• **invalid**: `boolean`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:80](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L80)
+
+## Methods
+
+### set
+
+▸ **set**(`x`, `y`, `h?`, `invalid?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `x` | `number` | `undefined` |
+| `y` | `number` | `undefined` |
+| `h` | `number` | `0` |
+| `invalid?` | `boolean` | `undefined` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:62](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L62)
+
+___
+
+### copyFrom
+
+▸ **copyFrom**(`src`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `src` | [`Point3D`](Point3D.md) |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:69](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L69)
diff --git a/docs/graphic/classes/QuadraticCurveShape3D.md b/docs/graphic/classes/QuadraticCurveShape3D.md
new file mode 100644
index 00000000..b77f81ee
--- /dev/null
+++ b/docs/graphic/classes/QuadraticCurveShape3D.md
@@ -0,0 +1,1180 @@
+# Class: QuadraticCurveShape3D
+
+Define class for drawing quadratic curv on the xz plane
+
+**`Export`**
+
+## Hierarchy
+
+- [`LineShape3D`](LineShape3D.md)
+
+ ↳ **`QuadraticCurveShape3D`**
+
+### Constructors
+
+- [constructor](QuadraticCurveShape3D.md#constructor)
+
+### Properties
+
+- [shapeType](QuadraticCurveShape3D.md#shapetype)
+- [shapeIndex](QuadraticCurveShape3D.md#shapeindex)
+- [computeEveryFrame](QuadraticCurveShape3D.md#computeeveryframe)
+
+### Accessors
+
+- [lineJoin](QuadraticCurveShape3D.md#linejoin)
+- [start](QuadraticCurveShape3D.md#start)
+- [end](QuadraticCurveShape3D.md#end)
+- [cp](QuadraticCurveShape3D.md#cp)
+- [segment](QuadraticCurveShape3D.md#segment)
+- [corner](QuadraticCurveShape3D.md#corner)
+- [isChange](QuadraticCurveShape3D.md#ischange)
+- [lineColor](QuadraticCurveShape3D.md#linecolor)
+- [fillColor](QuadraticCurveShape3D.md#fillcolor)
+- [lineTextureID](QuadraticCurveShape3D.md#linetextureid)
+- [fillTextureID](QuadraticCurveShape3D.md#filltextureid)
+- [fillRotation](QuadraticCurveShape3D.md#fillrotation)
+- [shapeOrder](QuadraticCurveShape3D.md#shapeorder)
+- [srcPointStart](QuadraticCurveShape3D.md#srcpointstart)
+- [srcPointCount](QuadraticCurveShape3D.md#srcpointcount)
+- [srcIndexStart](QuadraticCurveShape3D.md#srcindexstart)
+- [srcIndexCount](QuadraticCurveShape3D.md#srcindexcount)
+- [destPointStart](QuadraticCurveShape3D.md#destpointstart)
+- [destPointCount](QuadraticCurveShape3D.md#destpointcount)
+- [points3D](QuadraticCurveShape3D.md#points3d)
+- [isClosed](QuadraticCurveShape3D.md#isclosed)
+- [fill](QuadraticCurveShape3D.md#fill)
+- [line](QuadraticCurveShape3D.md#line)
+- [lineWidth](QuadraticCurveShape3D.md#linewidth)
+- [lineUVRect](QuadraticCurveShape3D.md#lineuvrect)
+- [fillUVRect](QuadraticCurveShape3D.md#filluvrect)
+- [uvSpeed](QuadraticCurveShape3D.md#uvspeed)
+
+### Methods
+
+- [sampleQuadraticCurve](QuadraticCurveShape3D.md#samplequadraticcurve)
+- [sampleCurve](QuadraticCurveShape3D.md#samplecurve)
+- [calcRequireSource](QuadraticCurveShape3D.md#calcrequiresource)
+- [writeData](QuadraticCurveShape3D.md#writedata)
+- [clean](QuadraticCurveShape3D.md#clean)
+
+## Constructors
+
+### constructor
+
+• **new QuadraticCurveShape3D**(`structs`, `sharedPoints`, `sharedIndecies`, `matrixIndex`): [`QuadraticCurveShape3D`](QuadraticCurveShape3D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `structs` | [`Shape3DStruct`](Shape3DStruct.md) |
+| `sharedPoints` | `Float32Array` |
+| `sharedIndecies` | `Uint32Array` |
+| `matrixIndex` | `number` |
+
+#### Returns
+
+[`QuadraticCurveShape3D`](QuadraticCurveShape3D.md)
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[constructor](LineShape3D.md#constructor)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:113](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L113)
+
+## Properties
+
+### shapeType
+
+• `Readonly` **shapeType**: `number`
+
+#### Overrides
+
+[LineShape3D](LineShape3D.md).[shapeType](LineShape3D.md#shapetype)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts:13](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts#L13)
+
+___
+
+### shapeIndex
+
+• `Readonly` **shapeIndex**: `number` = `0`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[shapeIndex](LineShape3D.md#shapeindex)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:109](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L109)
+
+___
+
+### computeEveryFrame
+
+• `Optional` `Readonly` **computeEveryFrame**: `boolean`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[computeEveryFrame](LineShape3D.md#computeeveryframe)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:111](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L111)
+
+## Accessors
+
+### lineJoin
+
+• `get` **lineJoin**(): [`LineJoin`](../enums/LineJoin.md)
+
+#### Returns
+
+[`LineJoin`](../enums/LineJoin.md)
+
+#### Inherited from
+
+LineShape3D.lineJoin
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:30](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L30)
+
+• `set` **lineJoin**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`LineJoin`](../enums/LineJoin.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineJoin
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:33](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L33)
+
+___
+
+### start
+
+• `get` **start**(): `Vector2`
+
+#### Returns
+
+`Vector2`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts#L20)
+
+• `set` **start**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector2` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts:23](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts#L23)
+
+___
+
+### end
+
+• `get` **end**(): `Vector2`
+
+#### Returns
+
+`Vector2`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts:28](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts#L28)
+
+• `set` **end**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector2` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts:31](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts#L31)
+
+___
+
+### cp
+
+• `get` **cp**(): `Vector2`
+
+#### Returns
+
+`Vector2`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts:36](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts#L36)
+
+• `set` **cp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector2` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts:39](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts#L39)
+
+___
+
+### segment
+
+• `get` **segment**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts:44](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts#L44)
+
+• `set` **segment**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts:47](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts#L47)
+
+___
+
+### corner
+
+• `get` **corner**(): `number`
+
+#### Returns
+
+`number`
+
+#### Overrides
+
+LineShape3D.corner
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts:60](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts#L60)
+
+• `set` **corner**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+LineShape3D.corner
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts:55](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts#L55)
+
+___
+
+### isChange
+
+• `get` **isChange**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LineShape3D.isChange
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:120](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L120)
+
+___
+
+### lineColor
+
+• `get` **lineColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+LineShape3D.lineColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:135](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L135)
+
+• `set` **lineColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:130](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L130)
+
+___
+
+### fillColor
+
+• `get` **fillColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+LineShape3D.fillColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:144](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L144)
+
+• `set` **fillColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fillColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:139](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L139)
+
+___
+
+### lineTextureID
+
+• `get` **lineTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.lineTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:148](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L148)
+
+• `set` **lineTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:151](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L151)
+
+___
+
+### fillTextureID
+
+• `get` **fillTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.fillTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:157](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L157)
+
+• `set` **fillTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fillTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:160](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L160)
+
+___
+
+### fillRotation
+
+• `get` **fillRotation**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.fillRotation
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:167](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L167)
+
+• `set` **fillRotation**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fillRotation
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:170](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L170)
+
+___
+
+### shapeOrder
+
+• `get` **shapeOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.shapeOrder
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:177](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L177)
+
+• `set` **shapeOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.shapeOrder
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:180](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L180)
+
+___
+
+### srcPointStart
+
+• `get` **srcPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.srcPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:188](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L188)
+
+• `set` **srcPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.srcPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:191](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L191)
+
+___
+
+### srcPointCount
+
+• `get` **srcPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.srcPointCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:198](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L198)
+
+___
+
+### srcIndexStart
+
+• `get` **srcIndexStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.srcIndexStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:202](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L202)
+
+• `set` **srcIndexStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.srcIndexStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:205](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L205)
+
+___
+
+### srcIndexCount
+
+• `get` **srcIndexCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.srcIndexCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:212](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L212)
+
+___
+
+### destPointStart
+
+• `get` **destPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.destPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:216](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L216)
+
+• `set` **destPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.destPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:219](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L219)
+
+___
+
+### destPointCount
+
+• `get` **destPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.destPointCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:225](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L225)
+
+___
+
+### points3D
+
+• `get` **points3D**(): [`Point3D`](Point3D.md)[]
+
+#### Returns
+
+[`Point3D`](Point3D.md)[]
+
+#### Inherited from
+
+LineShape3D.points3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:229](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L229)
+
+• `set` **points3D**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Point3D`](Point3D.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.points3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:232](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L232)
+
+___
+
+### isClosed
+
+• `get` **isClosed**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LineShape3D.isClosed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:238](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L238)
+
+• `set` **isClosed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.isClosed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:241](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L241)
+
+___
+
+### fill
+
+• `get` **fill**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LineShape3D.fill
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:248](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L248)
+
+• `set` **fill**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fill
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:251](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L251)
+
+___
+
+### line
+
+• `get` **line**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+LineShape3D.line
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:257](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L257)
+
+• `set` **line**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.line
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:260](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L260)
+
+___
+
+### lineWidth
+
+• `get` **lineWidth**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+LineShape3D.lineWidth
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:267](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L267)
+
+• `set` **lineWidth**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineWidth
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:271](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L271)
+
+___
+
+### lineUVRect
+
+• `get` **lineUVRect**(): `Vector4`
+
+x: u offset of line.
+y: v offset of line.
+z: u scale of line.
+w: v scale of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+LineShape3D.lineUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:288](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L288)
+
+• `set` **lineUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.lineUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:291](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L291)
+
+___
+
+### fillUVRect
+
+• `get` **fillUVRect**(): `Vector4`
+
+x: u offset of filled area.
+y: v offset of filled area.
+z: u scale of filled area.
+w: v scale of filled area.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+LineShape3D.fillUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:305](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L305)
+
+• `set` **fillUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.fillUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:308](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L308)
+
+___
+
+### uvSpeed
+
+• `get` **uvSpeed**(): `Vector4`
+
+x: u speed of filled area.
+y: v speed of filled area.
+z: u speed of line.
+w: v speed of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+LineShape3D.uvSpeed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:322](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L322)
+
+• `set` **uvSpeed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+LineShape3D.uvSpeed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:325](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L325)
+
+## Methods
+
+### sampleQuadraticCurve
+
+▸ **sampleQuadraticCurve**(`start`, `cp`, `end`, `t`, `ret?`): `vec3`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `start` | `vec3` |
+| `cp` | `vec3` |
+| `end` | `vec3` |
+| `t` | `number` |
+| `ret?` | `vec3` |
+
+#### Returns
+
+`vec3`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[sampleQuadraticCurve](LineShape3D.md#samplequadraticcurve)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:56](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L56)
+
+___
+
+### sampleCurve
+
+▸ **sampleCurve**(`start`, `cp1`, `cp2`, `end`, `t`, `ret?`): `vec3`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `start` | `vec3` |
+| `cp1` | `vec3` |
+| `cp2` | `vec3` |
+| `end` | `vec3` |
+| `t` | `number` |
+| `ret?` | `vec3` |
+
+#### Returns
+
+`vec3`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[sampleCurve](LineShape3D.md#samplecurve)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/LineShape3D.ts:66](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/LineShape3D.ts#L66)
+
+___
+
+### calcRequireSource
+
+▸ **calcRequireSource**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[LineShape3D](LineShape3D.md).[calcRequireSource](LineShape3D.md#calcrequiresource)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts:69](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/QuadraticCurveShape3D.ts#L69)
+
+___
+
+### writeData
+
+▸ **writeData**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[writeData](LineShape3D.md#writedata)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:124](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L124)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[LineShape3D](LineShape3D.md).[clean](LineShape3D.md#clean)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:330](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L330)
diff --git a/docs/graphic/classes/RibbonStruct.md b/docs/graphic/classes/RibbonStruct.md
new file mode 100644
index 00000000..93c41a20
--- /dev/null
+++ b/docs/graphic/classes/RibbonStruct.md
@@ -0,0 +1,295 @@
+# Class: RibbonStruct
+
+## Hierarchy
+
+- `Struct`
+
+ ↳ **`RibbonStruct`**
+
+### Constructors
+
+- [constructor](RibbonStruct.md#constructor)
+
+### Properties
+
+- [index](RibbonStruct.md#index)
+- [segment](RibbonStruct.md#segment)
+- [visible](RibbonStruct.md#visible)
+- [width](RibbonStruct.md#width)
+- [uv](RibbonStruct.md#uv)
+- [uvSpeed](RibbonStruct.md#uvspeed)
+- [smooth](RibbonStruct.md#smooth)
+- [faceMode](RibbonStruct.md#facemode)
+- [up](RibbonStruct.md#up)
+- [ids](RibbonStruct.md#ids)
+- [ribbonPoint](RibbonStruct.md#ribbonpoint)
+
+### Methods
+
+- [getValueSize](RibbonStruct.md#getvaluesize)
+- [Ref](RibbonStruct.md#ref)
+- [Get](RibbonStruct.md#get)
+- [GetSize](RibbonStruct.md#getsize)
+- [getValueType](RibbonStruct.md#getvaluetype)
+
+## Constructors
+
+### constructor
+
+• **new RibbonStruct**(): [`RibbonStruct`](RibbonStruct.md)
+
+#### Returns
+
+[`RibbonStruct`](RibbonStruct.md)
+
+#### Inherited from
+
+Struct.constructor
+
+## Properties
+
+### index
+
+• **index**: `number` = `1`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:11](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L11)
+
+___
+
+### segment
+
+• **segment**: `number` = `5`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:12](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L12)
+
+___
+
+### visible
+
+• **visible**: `number` = `1`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:13](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L13)
+
+___
+
+### width
+
+• **width**: `number` = `0.25`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:14](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L14)
+
+___
+
+### uv
+
+• **uv**: `Vector4`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:15](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L15)
+
+___
+
+### uvSpeed
+
+• **uvSpeed**: `Vector2`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:16](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L16)
+
+___
+
+### smooth
+
+• **smooth**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L17)
+
+___
+
+### faceMode
+
+• **faceMode**: `number` = `FaceMode.FaceToCamera`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:18](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L18)
+
+___
+
+### up
+
+• **up**: `Vector4`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L19)
+
+___
+
+### ids
+
+• **ids**: `Float32Array`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L20)
+
+___
+
+### ribbonPoint
+
+• **ribbonPoint**: `Object3D`[] = `[]`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L21)
+
+## Methods
+
+### getValueSize
+
+▸ **getValueSize**(`value`): `any`
+
+get any type value memory size
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `any` | any type value |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+Struct.getValueSize
+
+#### Defined in
+
+[src/util/struct/Struct.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L48)
+
+___
+
+### Ref
+
+▸ **Ref**\<`T`\>(`c`): \{ `name`: `string` ; `type`: `string` }[]
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+\{ `name`: `string` ; `type`: `string` }[]
+
+#### Inherited from
+
+Struct.Ref
+
+#### Defined in
+
+[src/util/struct/Struct.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L93)
+
+___
+
+### Get
+
+▸ **Get**\<`T`\>(`c`): `Struct`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+`Struct`
+
+#### Inherited from
+
+Struct.Get
+
+#### Defined in
+
+[src/util/struct/Struct.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L99)
+
+___
+
+### GetSize
+
+▸ **GetSize**\<`T`\>(`c`): `number`
+
+get any struct memory size
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Struct.GetSize
+
+#### Defined in
+
+[src/util/struct/Struct.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L112)
+
+___
+
+### getValueType
+
+▸ **getValueType**(): \{ `name`: `string` ; `type`: `string` }[]
+
+get reflection name
+
+#### Returns
+
+\{ `name`: `string` ; `type`: `string` }[]
+
+#### Inherited from
+
+Struct.getValueType
+
+#### Defined in
+
+[src/util/struct/Struct.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L25)
diff --git a/docs/graphic/classes/RoundRectShape3D.md b/docs/graphic/classes/RoundRectShape3D.md
new file mode 100644
index 00000000..7c82c15b
--- /dev/null
+++ b/docs/graphic/classes/RoundRectShape3D.md
@@ -0,0 +1,1085 @@
+# Class: RoundRectShape3D
+
+Define class for drawing rounded rectangles on the xz plane
+
+**`Export`**
+
+## Hierarchy
+
+- [`Shape3D`](Shape3D.md)
+
+ ↳ **`RoundRectShape3D`**
+
+### Constructors
+
+- [constructor](RoundRectShape3D.md#constructor)
+
+### Properties
+
+- [shapeType](RoundRectShape3D.md#shapetype)
+- [shapeIndex](RoundRectShape3D.md#shapeindex)
+- [computeEveryFrame](RoundRectShape3D.md#computeeveryframe)
+
+### Accessors
+
+- [width](RoundRectShape3D.md#width)
+- [height](RoundRectShape3D.md#height)
+- [radius](RoundRectShape3D.md#radius)
+- [cornerSegment](RoundRectShape3D.md#cornersegment)
+- [isRect](RoundRectShape3D.md#isrect)
+- [isChange](RoundRectShape3D.md#ischange)
+- [lineColor](RoundRectShape3D.md#linecolor)
+- [fillColor](RoundRectShape3D.md#fillcolor)
+- [lineTextureID](RoundRectShape3D.md#linetextureid)
+- [fillTextureID](RoundRectShape3D.md#filltextureid)
+- [fillRotation](RoundRectShape3D.md#fillrotation)
+- [shapeOrder](RoundRectShape3D.md#shapeorder)
+- [srcPointStart](RoundRectShape3D.md#srcpointstart)
+- [srcPointCount](RoundRectShape3D.md#srcpointcount)
+- [srcIndexStart](RoundRectShape3D.md#srcindexstart)
+- [srcIndexCount](RoundRectShape3D.md#srcindexcount)
+- [destPointStart](RoundRectShape3D.md#destpointstart)
+- [destPointCount](RoundRectShape3D.md#destpointcount)
+- [points3D](RoundRectShape3D.md#points3d)
+- [isClosed](RoundRectShape3D.md#isclosed)
+- [fill](RoundRectShape3D.md#fill)
+- [line](RoundRectShape3D.md#line)
+- [lineWidth](RoundRectShape3D.md#linewidth)
+- [lineUVRect](RoundRectShape3D.md#lineuvrect)
+- [fillUVRect](RoundRectShape3D.md#filluvrect)
+- [uvSpeed](RoundRectShape3D.md#uvspeed)
+
+### Methods
+
+- [set](RoundRectShape3D.md#set)
+- [calcRequireSource](RoundRectShape3D.md#calcrequiresource)
+- [writeData](RoundRectShape3D.md#writedata)
+- [clean](RoundRectShape3D.md#clean)
+
+## Constructors
+
+### constructor
+
+• **new RoundRectShape3D**(`structs`, `sharedPoints`, `sharedIndecies`, `matrixIndex`): [`RoundRectShape3D`](RoundRectShape3D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `structs` | [`Shape3DStruct`](Shape3DStruct.md) |
+| `sharedPoints` | `Float32Array` |
+| `sharedIndecies` | `Uint32Array` |
+| `matrixIndex` | `number` |
+
+#### Returns
+
+[`RoundRectShape3D`](RoundRectShape3D.md)
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[constructor](Shape3D.md#constructor)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:113](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L113)
+
+## Properties
+
+### shapeType
+
+• `Readonly` **shapeType**: `number`
+
+#### Overrides
+
+[Shape3D](Shape3D.md).[shapeType](Shape3D.md#shapetype)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/RoundRectShape3D.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/RoundRectShape3D.ts#L17)
+
+___
+
+### shapeIndex
+
+• `Readonly` **shapeIndex**: `number` = `0`
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[shapeIndex](Shape3D.md#shapeindex)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:109](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L109)
+
+___
+
+### computeEveryFrame
+
+• `Optional` `Readonly` **computeEveryFrame**: `boolean`
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[computeEveryFrame](Shape3D.md#computeeveryframe)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:111](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L111)
+
+## Accessors
+
+### width
+
+• `get` **width**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/RoundRectShape3D.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/RoundRectShape3D.ts#L29)
+
+• `set` **width**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/RoundRectShape3D.ts:32](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/RoundRectShape3D.ts#L32)
+
+___
+
+### height
+
+• `get` **height**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/RoundRectShape3D.ts:38](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/RoundRectShape3D.ts#L38)
+
+• `set` **height**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/RoundRectShape3D.ts:41](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/RoundRectShape3D.ts#L41)
+
+___
+
+### radius
+
+• `get` **radius**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/RoundRectShape3D.ts:48](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/RoundRectShape3D.ts#L48)
+
+• `set` **radius**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/RoundRectShape3D.ts:51](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/RoundRectShape3D.ts#L51)
+
+___
+
+### cornerSegment
+
+• `get` **cornerSegment**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/RoundRectShape3D.ts:58](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/RoundRectShape3D.ts#L58)
+
+• `set` **cornerSegment**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/RoundRectShape3D.ts:61](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/RoundRectShape3D.ts#L61)
+
+___
+
+### isRect
+
+• `get` **isRect**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/RoundRectShape3D.ts:72](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/RoundRectShape3D.ts#L72)
+
+___
+
+### isChange
+
+• `get` **isChange**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Shape3D.isChange
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:120](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L120)
+
+___
+
+### lineColor
+
+• `get` **lineColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+Shape3D.lineColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:135](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L135)
+
+• `set` **lineColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.lineColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:130](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L130)
+
+___
+
+### fillColor
+
+• `get` **fillColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+Shape3D.fillColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:144](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L144)
+
+• `set` **fillColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fillColor
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:139](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L139)
+
+___
+
+### lineTextureID
+
+• `get` **lineTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.lineTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:148](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L148)
+
+• `set` **lineTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.lineTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:151](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L151)
+
+___
+
+### fillTextureID
+
+• `get` **fillTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.fillTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:157](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L157)
+
+• `set` **fillTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fillTextureID
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:160](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L160)
+
+___
+
+### fillRotation
+
+• `get` **fillRotation**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.fillRotation
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:167](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L167)
+
+• `set` **fillRotation**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fillRotation
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:170](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L170)
+
+___
+
+### shapeOrder
+
+• `get` **shapeOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.shapeOrder
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:177](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L177)
+
+• `set` **shapeOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.shapeOrder
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:180](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L180)
+
+___
+
+### srcPointStart
+
+• `get` **srcPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.srcPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:188](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L188)
+
+• `set` **srcPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.srcPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:191](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L191)
+
+___
+
+### srcPointCount
+
+• `get` **srcPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.srcPointCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:198](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L198)
+
+___
+
+### srcIndexStart
+
+• `get` **srcIndexStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.srcIndexStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:202](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L202)
+
+• `set` **srcIndexStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.srcIndexStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:205](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L205)
+
+___
+
+### srcIndexCount
+
+• `get` **srcIndexCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.srcIndexCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:212](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L212)
+
+___
+
+### destPointStart
+
+• `get` **destPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.destPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:216](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L216)
+
+• `set` **destPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.destPointStart
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:219](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L219)
+
+___
+
+### destPointCount
+
+• `get` **destPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.destPointCount
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:225](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L225)
+
+___
+
+### points3D
+
+• `get` **points3D**(): [`Point3D`](Point3D.md)[]
+
+#### Returns
+
+[`Point3D`](Point3D.md)[]
+
+#### Inherited from
+
+Shape3D.points3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:229](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L229)
+
+• `set` **points3D**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Point3D`](Point3D.md)[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.points3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:232](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L232)
+
+___
+
+### isClosed
+
+• `get` **isClosed**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Shape3D.isClosed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:238](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L238)
+
+• `set` **isClosed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.isClosed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:241](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L241)
+
+___
+
+### fill
+
+• `get` **fill**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Shape3D.fill
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:248](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L248)
+
+• `set` **fill**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fill
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:251](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L251)
+
+___
+
+### line
+
+• `get` **line**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Shape3D.line
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:257](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L257)
+
+• `set` **line**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.line
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:260](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L260)
+
+___
+
+### lineWidth
+
+• `get` **lineWidth**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Shape3D.lineWidth
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:267](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L267)
+
+• `set` **lineWidth**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.lineWidth
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:271](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L271)
+
+___
+
+### lineUVRect
+
+• `get` **lineUVRect**(): `Vector4`
+
+x: u offset of line.
+y: v offset of line.
+z: u scale of line.
+w: v scale of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+Shape3D.lineUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:288](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L288)
+
+• `set` **lineUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.lineUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:291](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L291)
+
+___
+
+### fillUVRect
+
+• `get` **fillUVRect**(): `Vector4`
+
+x: u offset of filled area.
+y: v offset of filled area.
+z: u scale of filled area.
+w: v scale of filled area.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+Shape3D.fillUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:305](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L305)
+
+• `set` **fillUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.fillUVRect
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:308](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L308)
+
+___
+
+### uvSpeed
+
+• `get` **uvSpeed**(): `Vector4`
+
+x: u speed of filled area.
+y: v speed of filled area.
+z: u speed of line.
+w: v speed of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Inherited from
+
+Shape3D.uvSpeed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:322](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L322)
+
+• `set` **uvSpeed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Shape3D.uvSpeed
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:325](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L325)
+
+## Methods
+
+### set
+
+▸ **set**(`width`, `height`, `radius`, `lineWidth`, `fill`, `line`, `cornerSegment?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `width` | `number` | `undefined` |
+| `height` | `number` | `undefined` |
+| `radius` | `number` | `undefined` |
+| `lineWidth` | `number` | `undefined` |
+| `fill` | `boolean` | `undefined` |
+| `line` | `boolean` | `undefined` |
+| `cornerSegment` | `number` | `10` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/RoundRectShape3D.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/RoundRectShape3D.ts#L19)
+
+___
+
+### calcRequireSource
+
+▸ **calcRequireSource**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[Shape3D](Shape3D.md).[calcRequireSource](Shape3D.md#calcrequiresource)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/RoundRectShape3D.ts:68](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/RoundRectShape3D.ts#L68)
+
+___
+
+### writeData
+
+▸ **writeData**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[writeData](Shape3D.md#writedata)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:124](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L124)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[Shape3D](Shape3D.md).[clean](Shape3D.md#clean)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:330](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L330)
diff --git a/docs/graphic/classes/Shape3D.md b/docs/graphic/classes/Shape3D.md
new file mode 100644
index 00000000..77294987
--- /dev/null
+++ b/docs/graphic/classes/Shape3D.md
@@ -0,0 +1,741 @@
+# Class: Shape3D
+
+## Hierarchy
+
+- **`Shape3D`**
+
+ ↳ [`RoundRectShape3D`](RoundRectShape3D.md)
+
+ ↳ [`EllipseShape3D`](EllipseShape3D.md)
+
+ ↳ [`CircleShape3D`](CircleShape3D.md)
+
+ ↳ [`LineShape3D`](LineShape3D.md)
+
+### Constructors
+
+- [constructor](Shape3D.md#constructor)
+
+### Properties
+
+- [shapeIndex](Shape3D.md#shapeindex)
+- [shapeType](Shape3D.md#shapetype)
+- [computeEveryFrame](Shape3D.md#computeeveryframe)
+
+### Accessors
+
+- [isChange](Shape3D.md#ischange)
+- [lineColor](Shape3D.md#linecolor)
+- [fillColor](Shape3D.md#fillcolor)
+- [lineTextureID](Shape3D.md#linetextureid)
+- [fillTextureID](Shape3D.md#filltextureid)
+- [fillRotation](Shape3D.md#fillrotation)
+- [shapeOrder](Shape3D.md#shapeorder)
+- [srcPointStart](Shape3D.md#srcpointstart)
+- [srcPointCount](Shape3D.md#srcpointcount)
+- [srcIndexStart](Shape3D.md#srcindexstart)
+- [srcIndexCount](Shape3D.md#srcindexcount)
+- [destPointStart](Shape3D.md#destpointstart)
+- [destPointCount](Shape3D.md#destpointcount)
+- [points3D](Shape3D.md#points3d)
+- [isClosed](Shape3D.md#isclosed)
+- [fill](Shape3D.md#fill)
+- [line](Shape3D.md#line)
+- [lineWidth](Shape3D.md#linewidth)
+- [lineUVRect](Shape3D.md#lineuvrect)
+- [fillUVRect](Shape3D.md#filluvrect)
+- [uvSpeed](Shape3D.md#uvspeed)
+
+### Methods
+
+- [writeData](Shape3D.md#writedata)
+- [clean](Shape3D.md#clean)
+- [calcRequireSource](Shape3D.md#calcrequiresource)
+
+## Constructors
+
+### constructor
+
+• **new Shape3D**(`structs`, `sharedPoints`, `sharedIndecies`, `matrixIndex`): [`Shape3D`](Shape3D.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `structs` | [`Shape3DStruct`](Shape3DStruct.md) |
+| `sharedPoints` | `Float32Array` |
+| `sharedIndecies` | `Uint32Array` |
+| `matrixIndex` | `number` |
+
+#### Returns
+
+[`Shape3D`](Shape3D.md)
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:113](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L113)
+
+## Properties
+
+### shapeIndex
+
+• `Readonly` **shapeIndex**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:109](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L109)
+
+___
+
+### shapeType
+
+• `Readonly` **shapeType**: `number` = `ShapeTypeEnum.None`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:110](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L110)
+
+___
+
+### computeEveryFrame
+
+• `Optional` `Readonly` **computeEveryFrame**: `boolean`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:111](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L111)
+
+## Accessors
+
+### isChange
+
+• `get` **isChange**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:120](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L120)
+
+___
+
+### lineColor
+
+• `get` **lineColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:135](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L135)
+
+• `set` **lineColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:130](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L130)
+
+___
+
+### fillColor
+
+• `get` **fillColor**(): `Color`
+
+#### Returns
+
+`Color`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:144](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L144)
+
+• `set` **fillColor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:139](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L139)
+
+___
+
+### lineTextureID
+
+• `get` **lineTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:148](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L148)
+
+• `set` **lineTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:151](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L151)
+
+___
+
+### fillTextureID
+
+• `get` **fillTextureID**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:157](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L157)
+
+• `set` **fillTextureID**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:160](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L160)
+
+___
+
+### fillRotation
+
+• `get` **fillRotation**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:167](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L167)
+
+• `set` **fillRotation**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:170](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L170)
+
+___
+
+### shapeOrder
+
+• `get` **shapeOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:177](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L177)
+
+• `set` **shapeOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:180](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L180)
+
+___
+
+### srcPointStart
+
+• `get` **srcPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:188](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L188)
+
+• `set` **srcPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:191](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L191)
+
+___
+
+### srcPointCount
+
+• `get` **srcPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:198](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L198)
+
+___
+
+### srcIndexStart
+
+• `get` **srcIndexStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:202](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L202)
+
+• `set` **srcIndexStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:205](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L205)
+
+___
+
+### srcIndexCount
+
+• `get` **srcIndexCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:212](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L212)
+
+___
+
+### destPointStart
+
+• `get` **destPointStart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:216](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L216)
+
+• `set` **destPointStart**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:219](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L219)
+
+___
+
+### destPointCount
+
+• `get` **destPointCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:225](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L225)
+
+___
+
+### points3D
+
+• `get` **points3D**(): [`Point3D`](Point3D.md)[]
+
+#### Returns
+
+[`Point3D`](Point3D.md)[]
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:229](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L229)
+
+• `set` **points3D**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Point3D`](Point3D.md)[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:232](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L232)
+
+___
+
+### isClosed
+
+• `get` **isClosed**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:238](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L238)
+
+• `set` **isClosed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:241](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L241)
+
+___
+
+### fill
+
+• `get` **fill**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:248](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L248)
+
+• `set` **fill**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:251](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L251)
+
+___
+
+### line
+
+• `get` **line**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:257](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L257)
+
+• `set` **line**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:260](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L260)
+
+___
+
+### lineWidth
+
+• `get` **lineWidth**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:267](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L267)
+
+• `set` **lineWidth**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:271](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L271)
+
+___
+
+### lineUVRect
+
+• `get` **lineUVRect**(): `Vector4`
+
+x: u offset of line.
+y: v offset of line.
+z: u scale of line.
+w: v scale of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:288](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L288)
+
+• `set` **lineUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:291](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L291)
+
+___
+
+### fillUVRect
+
+• `get` **fillUVRect**(): `Vector4`
+
+x: u offset of filled area.
+y: v offset of filled area.
+z: u scale of filled area.
+w: v scale of filled area.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:305](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L305)
+
+• `set` **fillUVRect**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:308](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L308)
+
+___
+
+### uvSpeed
+
+• `get` **uvSpeed**(): `Vector4`
+
+x: u speed of filled area.
+y: v speed of filled area.
+z: u speed of line.
+w: v speed of line.
+
+#### Returns
+
+`Vector4`
+
+**`Memberof`**
+
+Shape3D
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:322](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L322)
+
+• `set` **uvSpeed**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:325](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L325)
+
+## Methods
+
+### writeData
+
+▸ **writeData**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:124](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L124)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:330](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L330)
+
+___
+
+### calcRequireSource
+
+▸ **calcRequireSource**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:396](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L396)
diff --git a/docs/graphic/classes/Shape3DMaker.md b/docs/graphic/classes/Shape3DMaker.md
new file mode 100644
index 00000000..fcfc7711
--- /dev/null
+++ b/docs/graphic/classes/Shape3DMaker.md
@@ -0,0 +1,351 @@
+# Class: Shape3DMaker
+
+A help class for quickly creating Shape3D related objects
+
+**`Export`**
+
+### Constructors
+
+- [constructor](Shape3DMaker.md#constructor)
+
+### Accessors
+
+- [renderer](Shape3DMaker.md#renderer)
+
+### Methods
+
+- [makeRenderer](Shape3DMaker.md#makerenderer)
+- [ellipse](Shape3DMaker.md#ellipse)
+- [arc](Shape3DMaker.md#arc)
+- [line](Shape3DMaker.md#line)
+- [quadraticCurve](Shape3DMaker.md#quadraticcurve)
+- [curve](Shape3DMaker.md#curve)
+- [path2D](Shape3DMaker.md#path2d)
+- [path3D](Shape3DMaker.md#path3d)
+- [rect](Shape3DMaker.md#rect)
+- [roundRect](Shape3DMaker.md#roundrect)
+
+## Constructors
+
+### constructor
+
+• **new Shape3DMaker**(`renderer`): [`Shape3DMaker`](Shape3DMaker.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `renderer` | [`Shape3DRenderer`](Shape3DRenderer.md) |
+
+#### Returns
+
+[`Shape3DMaker`](Shape3DMaker.md)
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DMaker.ts:25](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DMaker.ts#L25)
+
+## Accessors
+
+### renderer
+
+• `get` **renderer**(): [`Shape3DRenderer`](Shape3DRenderer.md)
+
+#### Returns
+
+[`Shape3DRenderer`](Shape3DRenderer.md)
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DMaker.ts:49](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DMaker.ts#L49)
+
+## Methods
+
+### makeRenderer
+
+▸ **makeRenderer**(`name`, `textureList`, `scene`, `maxNodeCount?`, `triangleEachNode?`): [`Shape3DMaker`](Shape3DMaker.md)
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `name` | `string` | `undefined` | key of Shape3DRenderer. |
+| `textureList` | `BitmapTexture2DArray` | `undefined` | textures used by node. |
+| `scene` | `Scene3D` | `undefined` | Scene3D |
+| `maxNodeCount?` | `number` | `1000` | Can accommodate the maximum number of nodes |
+| `triangleEachNode?` | `number` | `24` | The maximum number of triangles included is triangleEachNode * maxNodeCount |
+
+#### Returns
+
+[`Shape3DMaker`](Shape3DMaker.md)
+
+{Shape3DMaker}
+
+**`Static`**
+
+**`Memberof`**
+
+Shape3DMaker
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DMaker.ts:40](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DMaker.ts#L40)
+
+___
+
+### ellipse
+
+▸ **ellipse**(`radiusX`, `radiusY`, `rotation`, `startAngle`, `endAngle`, `counterclockwise?`): [`EllipseShape3D`](EllipseShape3D.md)
+
+Create an ellipse in Shape3DRenderer
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radiusX` | `number` |
+| `radiusY` | `number` |
+| `rotation` | `number` |
+| `startAngle` | `number` |
+| `endAngle` | `number` |
+| `counterclockwise?` | `boolean` |
+
+#### Returns
+
+[`EllipseShape3D`](EllipseShape3D.md)
+
+{EllipseShape3D}
+
+**`Memberof`**
+
+Shape3DMaker
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DMaker.ts:66](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DMaker.ts#L66)
+
+___
+
+### arc
+
+▸ **arc**(`radius`, `startAngle`, `endAngle`, `counterclockwise?`): [`CircleShape3D`](CircleShape3D.md)
+
+Create an arc in Shape3DRenderer
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radius` | `number` |
+| `startAngle` | `number` |
+| `endAngle` | `number` |
+| `counterclockwise?` | `boolean` |
+
+#### Returns
+
+[`CircleShape3D`](CircleShape3D.md)
+
+{CircleShape3D}
+
+**`Memberof`**
+
+Shape3DMaker
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DMaker.ts:87](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DMaker.ts#L87)
+
+___
+
+### line
+
+▸ **line**(`points`): [`LineShape3D`](LineShape3D.md)
+
+Create line segments in Shape3DRenderer
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `points` | `Vector2`[] |
+
+#### Returns
+
+[`LineShape3D`](LineShape3D.md)
+
+**`Memberof`**
+
+Shape3DMaker
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DMaker.ts:103](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DMaker.ts#L103)
+
+___
+
+### quadraticCurve
+
+▸ **quadraticCurve**(`fx`, `fy`, `cpx`, `cpy`, `tx`, `ty`): [`QuadraticCurveShape3D`](QuadraticCurveShape3D.md)
+
+Create a quadratic curve in Shape3DRenderer
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `fx` | `number` |
+| `fy` | `number` |
+| `cpx` | `number` |
+| `cpy` | `number` |
+| `tx` | `number` |
+| `ty` | `number` |
+
+#### Returns
+
+[`QuadraticCurveShape3D`](QuadraticCurveShape3D.md)
+
+{QuadraticCurveShape3D}
+
+**`Memberof`**
+
+Shape3DMaker
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DMaker.ts:127](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DMaker.ts#L127)
+
+___
+
+### curve
+
+▸ **curve**(`fx`, `fy`, `cp1x`, `cp1y`, `cp2x`, `cp2y`, `tx`, `ty`): [`CurveShape3D`](CurveShape3D.md)
+
+Create a curve in Shape3DRenderer
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `fx` | `number` |
+| `fy` | `number` |
+| `cp1x` | `number` |
+| `cp1y` | `number` |
+| `cp2x` | `number` |
+| `cp2y` | `number` |
+| `tx` | `number` |
+| `ty` | `number` |
+
+#### Returns
+
+[`CurveShape3D`](CurveShape3D.md)
+
+{CurveShape3D}
+
+**`Memberof`**
+
+Shape3DMaker
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DMaker.ts:149](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DMaker.ts#L149)
+
+___
+
+### path2D
+
+▸ **path2D**(): [`Path2DShape3D`](Path2DShape3D.md)
+
+Create a path2D in Shape3DRenderer. Through the Path2DShape3D, you can use the CanvasPath API for path drawing on xz plane.
+
+#### Returns
+
+[`Path2DShape3D`](Path2DShape3D.md)
+
+{Path2DShape3D}
+
+**`Memberof`**
+
+Shape3DMaker
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DMaker.ts:165](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DMaker.ts#L165)
+
+___
+
+### path3D
+
+▸ **path3D**(): [`Path3DShape3D`](Path3DShape3D.md)
+
+Create a path3D in Shape3DRenderer. Through the Path3DShape3D, you can use the similar CanvasPath API for path drawing in 3D space.
+
+#### Returns
+
+[`Path3DShape3D`](Path3DShape3D.md)
+
+{Path3DShape3D}
+
+**`Memberof`**
+
+Shape3DMaker
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DMaker.ts:175](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DMaker.ts#L175)
+
+___
+
+### rect
+
+▸ **rect**(`w`, `h`): [`RoundRectShape3D`](RoundRectShape3D.md)
+
+Create a rect in Shape3DRenderer
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `w` | `number` |
+| `h` | `number` |
+
+#### Returns
+
+[`RoundRectShape3D`](RoundRectShape3D.md)
+
+{RoundRectShape3D}
+
+**`Memberof`**
+
+Shape3DMaker
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DMaker.ts:187](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DMaker.ts#L187)
+
+___
+
+### roundRect
+
+▸ **roundRect**(`w`, `h`, `radii?`): [`RoundRectShape3D`](RoundRectShape3D.md)
+
+Create a RoundRect in Shape3DRenderer
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `w` | `number` |
+| `h` | `number` |
+| `radii?` | `number` |
+
+#### Returns
+
+[`RoundRectShape3D`](RoundRectShape3D.md)
+
+**`Memberof`**
+
+Shape3DMaker
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DMaker.ts:206](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DMaker.ts#L206)
diff --git a/docs/graphic/classes/Shape3DRenderer.md b/docs/graphic/classes/Shape3DRenderer.md
new file mode 100644
index 00000000..54b53f9b
--- /dev/null
+++ b/docs/graphic/classes/Shape3DRenderer.md
@@ -0,0 +1,1948 @@
+# Class: Shape3DRenderer
+
+## Hierarchy
+
+- [`DynamicFaceRenderer`](DynamicFaceRenderer.md)
+
+ ↳ **`Shape3DRenderer`**
+
+### Constructors
+
+- [constructor](Shape3DRenderer.md#constructor)
+
+### Properties
+
+- [texture](Shape3DRenderer.md#texture)
+- [transformBuffer](Shape3DRenderer.md#transformbuffer)
+- [nodeStructBuffer](Shape3DRenderer.md#nodestructbuffer)
+- [drawAtomicBuffer](Shape3DRenderer.md#drawatomicbuffer)
+- [nodes](Shape3DRenderer.md#nodes)
+- [object3D](Shape3DRenderer.md#object3d)
+- [isDestroyed](Shape3DRenderer.md#isdestroyed)
+- [receiveShadow](Shape3DRenderer.md#receiveshadow)
+- [morphData](Shape3DRenderer.md#morphdata)
+- [instanceCount](Shape3DRenderer.md#instancecount)
+- [lodLevel](Shape3DRenderer.md#lodlevel)
+- [alwaysRender](Shape3DRenderer.md#alwaysrender)
+- [instanceID](Shape3DRenderer.md#instanceid)
+- [drawType](Shape3DRenderer.md#drawtype)
+- [isRenderOrderChange](Shape3DRenderer.md#isrenderorderchange)
+- [needSortOnCameraZ](Shape3DRenderer.md#needsortoncameraz)
+- [isRecievePostEffectUI](Shape3DRenderer.md#isrecieveposteffectui)
+
+### Accessors
+
+- [eventDispatcher](Shape3DRenderer.md#eventdispatcher)
+- [isStart](Shape3DRenderer.md#isstart)
+- [transform](Shape3DRenderer.md#transform)
+- [enable](Shape3DRenderer.md#enable)
+- [geometry](Shape3DRenderer.md#geometry)
+- [material](Shape3DRenderer.md#material)
+- [renderLayer](Shape3DRenderer.md#renderlayer)
+- [rendererMask](Shape3DRenderer.md#renderermask)
+- [renderOrder](Shape3DRenderer.md#renderorder)
+- [materials](Shape3DRenderer.md#materials)
+- [castShadow](Shape3DRenderer.md#castshadow)
+- [castGI](Shape3DRenderer.md#castgi)
+- [castReflection](Shape3DRenderer.md#castreflection)
+
+### Methods
+
+- [init](Shape3DRenderer.md#init)
+- [set](Shape3DRenderer.md#set)
+- [createShape](Shape3DRenderer.md#createshape)
+- [getShapeObject3D](Shape3DRenderer.md#getshapeobject3d)
+- [removeShape](Shape3DRenderer.md#removeshape)
+- [onUpdate](Shape3DRenderer.md#onupdate)
+- [setNodeStruct](Shape3DRenderer.md#setnodestruct)
+- [updateShape](Shape3DRenderer.md#updateshape)
+- [setTextureID](Shape3DRenderer.md#settextureid)
+- [setLineTextureID](Shape3DRenderer.md#setlinetextureid)
+- [setBaseColor](Shape3DRenderer.md#setbasecolor)
+- [setLineColor](Shape3DRenderer.md#setlinecolor)
+- [setEmissiveColor](Shape3DRenderer.md#setemissivecolor)
+- [setFillRotation](Shape3DRenderer.md#setfillrotation)
+- [setUVRect](Shape3DRenderer.md#setuvrect)
+- [setUVRect2](Shape3DRenderer.md#setuvrect2)
+- [setUVSpeed](Shape3DRenderer.md#setuvspeed)
+- [onCompute](Shape3DRenderer.md#oncompute)
+- [start](Shape3DRenderer.md#start)
+- [stop](Shape3DRenderer.md#stop)
+- [onLateUpdate](Shape3DRenderer.md#onlateupdate)
+- [onBeforeUpdate](Shape3DRenderer.md#onbeforeupdate)
+- [onGraphic](Shape3DRenderer.md#ongraphic)
+- [onParentChange](Shape3DRenderer.md#onparentchange)
+- [onAddChild](Shape3DRenderer.md#onaddchild)
+- [onRemoveChild](Shape3DRenderer.md#onremovechild)
+- [onEnable](Shape3DRenderer.md#onenable)
+- [onDisable](Shape3DRenderer.md#ondisable)
+- [cloneTo](Shape3DRenderer.md#cloneto)
+- [copyComponent](Shape3DRenderer.md#copycomponent)
+- [setMorphInfluence](Shape3DRenderer.md#setmorphinfluence)
+- [setMorphInfluenceIndex](Shape3DRenderer.md#setmorphinfluenceindex)
+- [destroy](Shape3DRenderer.md#destroy)
+- [attachSceneOctree](Shape3DRenderer.md#attachsceneoctree)
+- [detachSceneOctree](Shape3DRenderer.md#detachsceneoctree)
+- [addMask](Shape3DRenderer.md#addmask)
+- [removeMask](Shape3DRenderer.md#removemask)
+- [hasMask](Shape3DRenderer.md#hasmask)
+- [addRendererMask](Shape3DRenderer.md#addrenderermask)
+- [removeRendererMask](Shape3DRenderer.md#removerenderermask)
+- [selfCloneMaterials](Shape3DRenderer.md#selfclonematerials)
+- [renderPass](Shape3DRenderer.md#renderpass)
+- [renderPass2](Shape3DRenderer.md#renderpass2)
+- [recordRenderPass2](Shape3DRenderer.md#recordrenderpass2)
+- [preInit](Shape3DRenderer.md#preinit)
+- [beforeDestroy](Shape3DRenderer.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new Shape3DRenderer**(): [`Shape3DRenderer`](Shape3DRenderer.md)
+
+#### Returns
+
+[`Shape3DRenderer`](Shape3DRenderer.md)
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[constructor](DynamicFaceRenderer.md#constructor)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L26)
+
+## Properties
+
+### texture
+
+• **texture**: `BitmapTexture2DArray`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[texture](DynamicFaceRenderer.md#texture)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:6](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L6)
+
+___
+
+### transformBuffer
+
+• **transformBuffer**: `StorageGPUBuffer`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[transformBuffer](DynamicFaceRenderer.md#transformbuffer)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:7](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L7)
+
+___
+
+### nodeStructBuffer
+
+• **nodeStructBuffer**: `StructStorageGPUBuffer`\<[`DynamicDrawStruct`](DynamicDrawStruct.md)\>
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[nodeStructBuffer](DynamicFaceRenderer.md#nodestructbuffer)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:8](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L8)
+
+___
+
+### drawAtomicBuffer
+
+• **drawAtomicBuffer**: `StorageGPUBuffer`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[drawAtomicBuffer](DynamicFaceRenderer.md#drawatomicbuffer)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L9)
+
+___
+
+### nodes
+
+• **nodes**: [`DynamicDrawStruct`](DynamicDrawStruct.md)[]
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[nodes](DynamicFaceRenderer.md#nodes)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:12](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L12)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[object3D](DynamicFaceRenderer.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[isDestroyed](DynamicFaceRenderer.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### receiveShadow
+
+• **receiveShadow**: `boolean`
+
+Enabling this option allows the grid to display any shadows cast on the grid.
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[receiveShadow](DynamicFaceRenderer.md#receiveshadow)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L23)
+
+___
+
+### morphData
+
+• **morphData**: `MorphTargetData`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[morphData](DynamicFaceRenderer.md#morphdata)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L24)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[instanceCount](DynamicFaceRenderer.md#instancecount)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[lodLevel](DynamicFaceRenderer.md#lodlevel)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[alwaysRender](DynamicFaceRenderer.md#alwaysrender)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[instanceID](DynamicFaceRenderer.md#instanceid)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[drawType](DynamicFaceRenderer.md#drawtype)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[isRenderOrderChange](DynamicFaceRenderer.md#isrenderorderchange)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[needSortOnCameraZ](DynamicFaceRenderer.md#needsortoncameraz)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[isRecievePostEffectUI](DynamicFaceRenderer.md#isrecieveposteffectui)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+DynamicFaceRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+DynamicFaceRenderer.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+DynamicFaceRenderer.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+DynamicFaceRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### geometry
+
+• `get` **geometry**(): `GeometryBase`
+
+The geometry of the mesh determines its shape
+
+#### Returns
+
+`GeometryBase`
+
+#### Inherited from
+
+DynamicFaceRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L53)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GeometryBase` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.geometry
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L57)
+
+___
+
+### material
+
+• `get` **material**(): `Material`
+
+material
+
+#### Returns
+
+`Material`
+
+#### Inherited from
+
+DynamicFaceRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L99)
+
+• `set` **material**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Material` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.material
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:103](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L103)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+DynamicFaceRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+DynamicFaceRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+DynamicFaceRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): `Material`[]
+
+#### Returns
+
+`Material`[]
+
+#### Inherited from
+
+DynamicFaceRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Material`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+DynamicFaceRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+DynamicFaceRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+DynamicFaceRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+DynamicFaceRenderer.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+## Methods
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[init](DynamicFaceRenderer.md#init)
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DRenderer.ts:27](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DRenderer.ts#L27)
+
+___
+
+### set
+
+▸ **set**\<`T`\>(`nodeStruct`, `tex`, `standAloneMatrix?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`DynamicDrawStruct`](DynamicDrawStruct.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `nodeStruct` | `Ctor`\<`T`\> |
+| `tex` | `BitmapTexture2DArray` |
+| `standAloneMatrix?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[set](DynamicFaceRenderer.md#set)
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DRenderer.ts:34](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DRenderer.ts#L34)
+
+___
+
+### createShape
+
+▸ **createShape**\<`T`\>(`cls`): `T`
+
+Create a shape3D by Shape3D constructor
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends [`Shape3D`](Shape3D.md) |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cls` | `Ctor`\<`T`\> |
+
+#### Returns
+
+`T`
+
+{T}
+
+**`Memberof`**
+
+Shape3DRenderer
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DRenderer.ts:51](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DRenderer.ts#L51)
+
+___
+
+### getShapeObject3D
+
+▸ **getShapeObject3D**(`shape`): `Object3D`
+
+Get binded Object3D objects based on Shape3D. And then you can control Shape3D through the Object 3D transform
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shape` | [`Shape3D`](Shape3D.md) |
+
+#### Returns
+
+`Object3D`
+
+{Object3D}
+
+**`Memberof`**
+
+Shape3DRenderer
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DRenderer.ts:77](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DRenderer.ts#L77)
+
+___
+
+### removeShape
+
+▸ **removeShape**(`shapeIndex`): [`Shape3D`](Shape3D.md)
+
+Remove a Shape3D by index
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shapeIndex` | `number` |
+
+#### Returns
+
+[`Shape3D`](Shape3D.md)
+
+{Shape3D}
+
+**`Memberof`**
+
+Shape3DRenderer
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DRenderer.ts:90](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DRenderer.ts#L90)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onUpdate](DynamicFaceRenderer.md#onupdate)
+
+#### Defined in
+
+[packages/graphic/renderer/Shape3DRenderer.ts:226](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/Shape3DRenderer.ts#L226)
+
+___
+
+### setNodeStruct
+
+▸ **setNodeStruct**(`index`, `shape`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `shape` | [`DynamicDrawStruct`](DynamicDrawStruct.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setNodeStruct](DynamicFaceRenderer.md#setnodestruct)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:134](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L134)
+
+___
+
+### updateShape
+
+▸ **updateShape**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[updateShape](DynamicFaceRenderer.md#updateshape)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:141](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L141)
+
+___
+
+### setTextureID
+
+▸ **setTextureID**(`i`, `id`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `id` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setTextureID](DynamicFaceRenderer.md#settextureid)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:150](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L150)
+
+___
+
+### setLineTextureID
+
+▸ **setLineTextureID**(`i`, `id`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `id` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setLineTextureID](DynamicFaceRenderer.md#setlinetextureid)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:155](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L155)
+
+___
+
+### setBaseColor
+
+▸ **setBaseColor**(`i`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setBaseColor](DynamicFaceRenderer.md#setbasecolor)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:160](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L160)
+
+___
+
+### setLineColor
+
+▸ **setLineColor**(`index`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setLineColor](DynamicFaceRenderer.md#setlinecolor)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:165](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L165)
+
+___
+
+### setEmissiveColor
+
+▸ **setEmissiveColor**(`i`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setEmissiveColor](DynamicFaceRenderer.md#setemissivecolor)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:170](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L170)
+
+___
+
+### setFillRotation
+
+▸ **setFillRotation**(`i`, `radians`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `radians` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setFillRotation](DynamicFaceRenderer.md#setfillrotation)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:175](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L175)
+
+___
+
+### setUVRect
+
+▸ **setUVRect**(`i`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `v` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setUVRect](DynamicFaceRenderer.md#setuvrect)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:180](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L180)
+
+___
+
+### setUVRect2
+
+▸ **setUVRect2**(`i`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `i` | `number` |
+| `v` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setUVRect2](DynamicFaceRenderer.md#setuvrect2)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:185](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L185)
+
+___
+
+### setUVSpeed
+
+▸ **setUVSpeed**(`i`, `v`): `void`
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `i` | `number` | index |
+| `v` | `Vector4` | {x:fill speed u, y: fill speed v, z:line speed u, w: line speed v} |
+
+#### Returns
+
+`void`
+
+**`Memberof`**
+
+DynamicFaceRenderer
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setUVSpeed](DynamicFaceRenderer.md#setuvspeed)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:196](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L196)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view`, `command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | `View3D` |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onCompute](DynamicFaceRenderer.md#oncompute)
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts:208](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/DynamicFaceRenderer.ts#L208)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[start](DynamicFaceRenderer.md#start)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[stop](DynamicFaceRenderer.md#stop)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onLateUpdate](DynamicFaceRenderer.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onBeforeUpdate](DynamicFaceRenderer.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onGraphic](DynamicFaceRenderer.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onParentChange](DynamicFaceRenderer.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onAddChild](DynamicFaceRenderer.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onRemoveChild](DynamicFaceRenderer.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onEnable](DynamicFaceRenderer.md#onenable)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L30)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[onDisable](DynamicFaceRenderer.md#ondisable)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:34](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L34)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `Object3D` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[cloneTo](DynamicFaceRenderer.md#cloneto)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L38)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[copyComponent](DynamicFaceRenderer.md#copycomponent)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:43](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L43)
+
+___
+
+### setMorphInfluence
+
+▸ **setMorphInfluence**(`key`, `value`): `void`
+
+Set deformation animation parameters
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setMorphInfluence](DynamicFaceRenderer.md#setmorphinfluence)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L110)
+
+___
+
+### setMorphInfluenceIndex
+
+▸ **setMorphInfluenceIndex**(`index`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[setMorphInfluenceIndex](DynamicFaceRenderer.md#setmorphinfluenceindex)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L119)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[destroy](DynamicFaceRenderer.md#destroy)
+
+#### Defined in
+
+[src/components/renderer/MeshRenderer.ts:157](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/MeshRenderer.ts#L157)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | `Octree` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[attachSceneOctree](DynamicFaceRenderer.md#attachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[detachSceneOctree](DynamicFaceRenderer.md#detachsceneoctree)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[addMask](DynamicFaceRenderer.md#addmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[removeMask](DynamicFaceRenderer.md#removemask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[hasMask](DynamicFaceRenderer.md#hasmask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[addRendererMask](DynamicFaceRenderer.md#addrenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[removeRendererMask](DynamicFaceRenderer.md#removerenderermask)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[selfCloneMaterials](DynamicFaceRenderer.md#selfclonematerials)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | `View3D` |
+| `passType` | `PassType` |
+| `renderContext` | `RenderContext` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[renderPass](DynamicFaceRenderer.md#renderpass)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L370)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+render pass at passType
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | `View3D` | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | `ClusterLightingBuffer` | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[renderPass2](DynamicFaceRenderer.md#renderpass2)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L438)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | `View3D` | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | `ClusterLightingBuffer` | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[recordRenderPass2](DynamicFaceRenderer.md#recordrenderpass2)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[preInit](DynamicFaceRenderer.md#preinit)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[DynamicFaceRenderer](DynamicFaceRenderer.md).[beforeDestroy](DynamicFaceRenderer.md#beforedestroy)
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
diff --git a/docs/graphic/classes/Shape3DStruct.md b/docs/graphic/classes/Shape3DStruct.md
new file mode 100644
index 00000000..ccb2d0bd
--- /dev/null
+++ b/docs/graphic/classes/Shape3DStruct.md
@@ -0,0 +1,394 @@
+# Class: Shape3DStruct
+
+## Hierarchy
+
+- [`DynamicDrawStruct`](DynamicDrawStruct.md)
+
+ ↳ **`Shape3DStruct`**
+
+### Constructors
+
+- [constructor](Shape3DStruct.md#constructor)
+
+### Properties
+
+- [shapeType](Shape3DStruct.md#shapetype)
+- [shapeOrder](Shape3DStruct.md#shapeorder)
+- [destPointStart](Shape3DStruct.md#destpointstart)
+- [destPointCount](Shape3DStruct.md#destpointcount)
+- [srcPointStart](Shape3DStruct.md#srcpointstart)
+- [srcPointCount](Shape3DStruct.md#srcpointcount)
+- [srcIndexStart](Shape3DStruct.md#srcindexstart)
+- [srcIndexCount](Shape3DStruct.md#srcindexcount)
+- [isClosed](Shape3DStruct.md#isclosed)
+- [fill](Shape3DStruct.md#fill)
+- [line](Shape3DStruct.md#line)
+- [lineWidth](Shape3DStruct.md#linewidth)
+- [xa](Shape3DStruct.md#xa)
+- [xb](Shape3DStruct.md#xb)
+- [xc](Shape3DStruct.md#xc)
+- [xd](Shape3DStruct.md#xd)
+- [xe](Shape3DStruct.md#xe)
+- [xf](Shape3DStruct.md#xf)
+- [xg](Shape3DStruct.md#xg)
+- [xh](Shape3DStruct.md#xh)
+
+### Methods
+
+- [getValueSize](Shape3DStruct.md#getvaluesize)
+- [Ref](Shape3DStruct.md#ref)
+- [Get](Shape3DStruct.md#get)
+- [GetSize](Shape3DStruct.md#getsize)
+- [getValueType](Shape3DStruct.md#getvaluetype)
+
+## Constructors
+
+### constructor
+
+• **new Shape3DStruct**(): [`Shape3DStruct`](Shape3DStruct.md)
+
+#### Returns
+
+[`Shape3DStruct`](Shape3DStruct.md)
+
+#### Inherited from
+
+[DynamicDrawStruct](DynamicDrawStruct.md).[constructor](DynamicDrawStruct.md#constructor)
+
+## Properties
+
+### shapeType
+
+• **shapeType**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:5](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L5)
+
+___
+
+### shapeOrder
+
+• **shapeOrder**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:6](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L6)
+
+___
+
+### destPointStart
+
+• **destPointStart**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:7](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L7)
+
+___
+
+### destPointCount
+
+• **destPointCount**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:8](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L8)
+
+___
+
+### srcPointStart
+
+• **srcPointStart**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:10](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L10)
+
+___
+
+### srcPointCount
+
+• **srcPointCount**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:11](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L11)
+
+___
+
+### srcIndexStart
+
+• **srcIndexStart**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:12](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L12)
+
+___
+
+### srcIndexCount
+
+• **srcIndexCount**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:13](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L13)
+
+___
+
+### isClosed
+
+• **isClosed**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:15](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L15)
+
+___
+
+### fill
+
+• **fill**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:16](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L16)
+
+___
+
+### line
+
+• **line**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L17)
+
+___
+
+### lineWidth
+
+• **lineWidth**: `number` = `10`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:18](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L18)
+
+___
+
+### xa
+
+• **xa**: `number` = `5`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L20)
+
+___
+
+### xb
+
+• **xb**: `number` = `4`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L21)
+
+___
+
+### xc
+
+• **xc**: `number` = `4`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:22](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L22)
+
+___
+
+### xd
+
+• **xd**: `number` = `2`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:23](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L23)
+
+___
+
+### xe
+
+• **xe**: `number` = `5`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:25](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L25)
+
+___
+
+### xf
+
+• **xf**: `number` = `4`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:26](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L26)
+
+___
+
+### xg
+
+• **xg**: `number` = `4`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:27](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L27)
+
+___
+
+### xh
+
+• **xh**: `number` = `2`
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:28](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L28)
+
+## Methods
+
+### getValueSize
+
+▸ **getValueSize**(`value`): `any`
+
+get any type value memory size
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `any` | any type value |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[DynamicDrawStruct](DynamicDrawStruct.md).[getValueSize](DynamicDrawStruct.md#getvaluesize)
+
+#### Defined in
+
+[src/util/struct/Struct.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L48)
+
+___
+
+### Ref
+
+▸ **Ref**\<`T`\>(`c`): \{ `name`: `string` ; `type`: `string` }[]
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+\{ `name`: `string` ; `type`: `string` }[]
+
+#### Inherited from
+
+[DynamicDrawStruct](DynamicDrawStruct.md).[Ref](DynamicDrawStruct.md#ref)
+
+#### Defined in
+
+[src/util/struct/Struct.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L93)
+
+___
+
+### Get
+
+▸ **Get**\<`T`\>(`c`): `Struct`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+`Struct`
+
+#### Inherited from
+
+[DynamicDrawStruct](DynamicDrawStruct.md).[Get](DynamicDrawStruct.md#get)
+
+#### Defined in
+
+[src/util/struct/Struct.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L99)
+
+___
+
+### GetSize
+
+▸ **GetSize**\<`T`\>(`c`): `number`
+
+get any struct memory size
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[DynamicDrawStruct](DynamicDrawStruct.md).[GetSize](DynamicDrawStruct.md#getsize)
+
+#### Defined in
+
+[src/util/struct/Struct.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L112)
+
+___
+
+### getValueType
+
+▸ **getValueType**(): \{ `name`: `string` ; `type`: `string` }[]
+
+get reflection name
+
+#### Returns
+
+\{ `name`: `string` ; `type`: `string` }[]
+
+#### Inherited from
+
+[DynamicDrawStruct](DynamicDrawStruct.md).[getValueType](DynamicDrawStruct.md#getvaluetype)
+
+#### Defined in
+
+[src/util/struct/Struct.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L25)
diff --git a/docs/graphic/classes/ShapeInfo.md b/docs/graphic/classes/ShapeInfo.md
new file mode 100644
index 00000000..03fc1026
--- /dev/null
+++ b/docs/graphic/classes/ShapeInfo.md
@@ -0,0 +1,317 @@
+# Class: ShapeInfo
+
+## Hierarchy
+
+- `Struct`
+
+ ↳ **`ShapeInfo`**
+
+### Constructors
+
+- [constructor](ShapeInfo.md#constructor)
+
+### Properties
+
+- [shapeIndex](ShapeInfo.md#shapeindex)
+- [shapeType](ShapeInfo.md#shapetype)
+- [width](ShapeInfo.md#width)
+- [lineCap](ShapeInfo.md#linecap)
+- [pathCount](ShapeInfo.md#pathcount)
+- [uScale](ShapeInfo.md#uscale)
+- [vScale](ShapeInfo.md#vscale)
+- [lineJoin](ShapeInfo.md#linejoin)
+- [startPath](ShapeInfo.md#startpath)
+- [endPath](ShapeInfo.md#endpath)
+- [uSpeed](ShapeInfo.md#uspeed)
+- [vSpeed](ShapeInfo.md#vspeed)
+- [paths](ShapeInfo.md#paths)
+
+### Methods
+
+- [getValueSize](ShapeInfo.md#getvaluesize)
+- [Ref](ShapeInfo.md#ref)
+- [Get](ShapeInfo.md#get)
+- [GetSize](ShapeInfo.md#getsize)
+- [getValueType](ShapeInfo.md#getvaluetype)
+
+## Constructors
+
+### constructor
+
+• **new ShapeInfo**(): [`ShapeInfo`](ShapeInfo.md)
+
+#### Returns
+
+[`ShapeInfo`](ShapeInfo.md)
+
+#### Inherited from
+
+Struct.constructor
+
+## Properties
+
+### shapeIndex
+
+• **shapeIndex**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/ShapeInfo.ts:4](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/ShapeInfo.ts#L4)
+
+___
+
+### shapeType
+
+• **shapeType**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/ShapeInfo.ts:5](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/ShapeInfo.ts#L5)
+
+___
+
+### width
+
+• **width**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/ShapeInfo.ts:6](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/ShapeInfo.ts#L6)
+
+___
+
+### lineCap
+
+• **lineCap**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/ShapeInfo.ts:7](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/ShapeInfo.ts#L7)
+
+___
+
+### pathCount
+
+• **pathCount**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/ShapeInfo.ts:8](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/ShapeInfo.ts#L8)
+
+___
+
+### uScale
+
+• **uScale**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/ShapeInfo.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/ShapeInfo.ts#L9)
+
+___
+
+### vScale
+
+• **vScale**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/ShapeInfo.ts:10](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/ShapeInfo.ts#L10)
+
+___
+
+### lineJoin
+
+• **lineJoin**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/ShapeInfo.ts:11](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/ShapeInfo.ts#L11)
+
+___
+
+### startPath
+
+• **startPath**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/ShapeInfo.ts:13](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/ShapeInfo.ts#L13)
+
+___
+
+### endPath
+
+• **endPath**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/ShapeInfo.ts:14](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/ShapeInfo.ts#L14)
+
+___
+
+### uSpeed
+
+• **uSpeed**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/ShapeInfo.ts:15](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/ShapeInfo.ts#L15)
+
+___
+
+### vSpeed
+
+• **vSpeed**: `number` = `0`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/ShapeInfo.ts:16](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/ShapeInfo.ts#L16)
+
+___
+
+### paths
+
+• **paths**: `Vector4`[] = `[]`
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/ShapeInfo.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/ShapeInfo.ts#L17)
+
+## Methods
+
+### getValueSize
+
+▸ **getValueSize**(`value`): `any`
+
+get any type value memory size
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `any` | any type value |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+Struct.getValueSize
+
+#### Defined in
+
+[src/util/struct/Struct.ts:48](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L48)
+
+___
+
+### Ref
+
+▸ **Ref**\<`T`\>(`c`): \{ `name`: `string` ; `type`: `string` }[]
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+\{ `name`: `string` ; `type`: `string` }[]
+
+#### Inherited from
+
+Struct.Ref
+
+#### Defined in
+
+[src/util/struct/Struct.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L93)
+
+___
+
+### Get
+
+▸ **Get**\<`T`\>(`c`): `Struct`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+`Struct`
+
+#### Inherited from
+
+Struct.Get
+
+#### Defined in
+
+[src/util/struct/Struct.ts:99](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L99)
+
+___
+
+### GetSize
+
+▸ **GetSize**\<`T`\>(`c`): `number`
+
+get any struct memory size
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | `Ctor`\<`T`\> |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Struct.GetSize
+
+#### Defined in
+
+[src/util/struct/Struct.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L112)
+
+___
+
+### getValueType
+
+▸ **getValueType**(): \{ `name`: `string` ; `type`: `string` }[]
+
+get reflection name
+
+#### Returns
+
+\{ `name`: `string` ; `type`: `string` }[]
+
+#### Inherited from
+
+Struct.getValueType
+
+#### Defined in
+
+[src/util/struct/Struct.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/util/struct/Struct.ts#L25)
diff --git a/docs/graphic/enums/CircleArcType.md b/docs/graphic/enums/CircleArcType.md
new file mode 100644
index 00000000..cc6c8a73
--- /dev/null
+++ b/docs/graphic/enums/CircleArcType.md
@@ -0,0 +1,26 @@
+# Enumeration: CircleArcType
+
+### Enumeration Members
+
+- [Sector](CircleArcType.md#sector)
+- [Moon](CircleArcType.md#moon)
+
+## Enumeration Members
+
+### Sector
+
+• **Sector** = ``0``
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:41](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L41)
+
+___
+
+### Moon
+
+• **Moon** = ``1``
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:42](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L42)
diff --git a/docs/graphic/enums/FaceMode.md b/docs/graphic/enums/FaceMode.md
new file mode 100644
index 00000000..fecac25e
--- /dev/null
+++ b/docs/graphic/enums/FaceMode.md
@@ -0,0 +1,37 @@
+# Enumeration: FaceMode
+
+### Enumeration Members
+
+- [FaceToCamera](FaceMode.md#facetocamera)
+- [FaceToPath](FaceMode.md#facetopath)
+- [FaceToUp](FaceMode.md#facetoup)
+
+## Enumeration Members
+
+### FaceToCamera
+
+• **FaceToCamera** = ``0``
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:5](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L5)
+
+___
+
+### FaceToPath
+
+• **FaceToPath** = ``1``
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:6](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L6)
+
+___
+
+### FaceToUp
+
+• **FaceToUp** = ``2``
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts:7](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DRibbonRenderer.ts#L7)
diff --git a/docs/graphic/enums/LineCap.md b/docs/graphic/enums/LineCap.md
new file mode 100644
index 00000000..6ae55084
--- /dev/null
+++ b/docs/graphic/enums/LineCap.md
@@ -0,0 +1,37 @@
+# Enumeration: LineCap
+
+### Enumeration Members
+
+- [butt](LineCap.md#butt)
+- [square](LineCap.md#square)
+- [round](LineCap.md#round)
+
+## Enumeration Members
+
+### butt
+
+• **butt** = ``0``
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:13](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L13)
+
+___
+
+### square
+
+• **square** = ``1``
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:14](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L14)
+
+___
+
+### round
+
+• **round** = ``2``
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:15](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L15)
diff --git a/docs/graphic/enums/LineJoin.md b/docs/graphic/enums/LineJoin.md
new file mode 100644
index 00000000..9b67a5f7
--- /dev/null
+++ b/docs/graphic/enums/LineJoin.md
@@ -0,0 +1,37 @@
+# Enumeration: LineJoin
+
+### Enumeration Members
+
+- [bevel](LineJoin.md#bevel)
+- [miter](LineJoin.md#miter)
+- [round](LineJoin.md#round)
+
+## Enumeration Members
+
+### bevel
+
+• **bevel** = ``0``
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:7](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L7)
+
+___
+
+### miter
+
+• **miter** = ``1``
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:8](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L8)
+
+___
+
+### round
+
+• **round** = ``2``
+
+#### Defined in
+
+[packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/graphic3d/Graphic3DFaceRenderer.ts#L9)
diff --git a/docs/graphic/enums/ShapeTypeEnum.md b/docs/graphic/enums/ShapeTypeEnum.md
new file mode 100644
index 00000000..202b3351
--- /dev/null
+++ b/docs/graphic/enums/ShapeTypeEnum.md
@@ -0,0 +1,70 @@
+# Enumeration: ShapeTypeEnum
+
+### Enumeration Members
+
+- [None](ShapeTypeEnum.md#none)
+- [Circle](ShapeTypeEnum.md#circle)
+- [RoundRect](ShapeTypeEnum.md#roundrect)
+- [Ellipse](ShapeTypeEnum.md#ellipse)
+- [Path2D](ShapeTypeEnum.md#path2d)
+- [Path3D](ShapeTypeEnum.md#path3d)
+
+## Enumeration Members
+
+### None
+
+• **None** = ``0``
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:32](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L32)
+
+___
+
+### Circle
+
+• **Circle** = ``1``
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:33](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L33)
+
+___
+
+### RoundRect
+
+• **RoundRect** = ``2``
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:34](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L34)
+
+___
+
+### Ellipse
+
+• **Ellipse** = ``3``
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:35](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L35)
+
+___
+
+### Path2D
+
+• **Path2D** = ``4``
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:36](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L36)
+
+___
+
+### Path3D
+
+• **Path3D** = ``5``
+
+#### Defined in
+
+[packages/graphic/renderer/shape3d/Shape3D.ts:37](https://github.com/Orillusion/orillusion/blob/main/packages/graphic/renderer/shape3d/Shape3D.ts#L37)
diff --git a/docs/graphic/index.md b/docs/graphic/index.md
new file mode 100644
index 00000000..5375f528
--- /dev/null
+++ b/docs/graphic/index.md
@@ -0,0 +1,39 @@
+# @orillusion/graphic
+
+### Enumerations
+
+- [LineJoin](enums/LineJoin.md)
+- [LineCap](enums/LineCap.md)
+- [FaceMode](enums/FaceMode.md)
+- [ShapeTypeEnum](enums/ShapeTypeEnum.md)
+- [CircleArcType](enums/CircleArcType.md)
+
+### Classes
+
+- [Graphic3D](classes/Graphic3D.md)
+- [GrassNodeStruct](classes/GrassNodeStruct.md)
+- [GrassRenderer](classes/GrassRenderer.md)
+- [Shape3DMaker](classes/Shape3DMaker.md)
+- [Shape3DRenderer](classes/Shape3DRenderer.md)
+- [DynamicDrawStruct](classes/DynamicDrawStruct.md)
+- [DynamicFaceRenderer](classes/DynamicFaceRenderer.md)
+- [Float32ArrayUtil](classes/Float32ArrayUtil.md)
+- [DrawInfo](classes/DrawInfo.md)
+- [GeometryInfo](classes/GeometryInfo.md)
+- [Graphic3DFaceRenderer](classes/Graphic3DFaceRenderer.md)
+- [Graphic3DMesh](classes/Graphic3DMesh.md)
+- [Graphic3DMeshRenderer](classes/Graphic3DMeshRenderer.md)
+- [RibbonStruct](classes/RibbonStruct.md)
+- [Graphic3DRibbonRenderer](classes/Graphic3DRibbonRenderer.md)
+- [ShapeInfo](classes/ShapeInfo.md)
+- [CircleShape3D](classes/CircleShape3D.md)
+- [CurveShape3D](classes/CurveShape3D.md)
+- [EllipseShape3D](classes/EllipseShape3D.md)
+- [LineShape3D](classes/LineShape3D.md)
+- [Path2DShape3D](classes/Path2DShape3D.md)
+- [Path3DShape3D](classes/Path3DShape3D.md)
+- [QuadraticCurveShape3D](classes/QuadraticCurveShape3D.md)
+- [RoundRectShape3D](classes/RoundRectShape3D.md)
+- [Shape3DStruct](classes/Shape3DStruct.md)
+- [Point3D](classes/Point3D.md)
+- [Shape3D](classes/Shape3D.md)
diff --git a/docs/guide/README.md b/docs/guide/README.md
deleted file mode 100755
index 21a9e2fb..00000000
--- a/docs/guide/README.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Introduction
-
-::: tip NOTE
-TODO, Coming soon...
-:::
-
-## How It Works
-
-::: tip NOTE
-TODO, Coming soon...
-:::
-
-## Why Not Three / Babylon or other Web3D engine?
-
-::: tip NOTE
-TODO, Coming soon...
-:::
-
-- **See also**: [API Specification](/reference/)
\ No newline at end of file
diff --git a/docs/guide/advanced/gi.md b/docs/guide/advanced/gi.md
new file mode 100644
index 00000000..e9071cee
--- /dev/null
+++ b/docs/guide/advanced/gi.md
@@ -0,0 +1,88 @@
+# 全局光照
+
+一般光照系统只考虑光源直接照射到物体表面所产生的效果,不会计算光源经过物体表面反射或折射的光线,即`间接光照`。全局光照系统能够对间接光照进行建模,实现更加逼真的光线效果。
+
+> 以下为同一个测试场景,关闭GI(左图)和开启GI(右图)的效果对比
+
+
+
+
+## 原理简介
+
+引擎在场景中按照设定的行列以及纵深数量放置了一系列探针 `(Probe)`,用来收集周围物体的反射光信息。它们会根据所处位置对所在区域的光照信息进行搜集和存储,形成一个动态的间接光 `Irrandiance Volume` 区域:
+
+
+
+在实时着色的阶段,除了计算直接光源的颜色和强度,还会根据着色单元所处的世界坐标,找到对应的探针组,使用三线性插值获得该区域周围的间接光源信息。
+
+## 使用方法
+和其它组件用法一样,只要在场景中添加 [GlobalIlluminationComponent](/api/classes/GlobalIlluminationComponent) 即可打开全局光照
+
+```ts
+//配置Global Irrandiance 参数
+Engine3D.setting.gi.probeYCount = 3
+Engine3D.setting.gi.probeXCount = 6
+Engine3D.setting.gi.probeZCount = 6
+Engine3D.setting.gi.probeSpace = 60
+Engine3D.setting.gi.offsetX = 0
+Engine3D.setting.gi.offsetY = 10
+Engine3D.setting.gi.offsetZ = 0
+// 自动更新GI信息,静态场景中可以在渲染完成后手动关闭节省性能
+Engine3D.setting.gi.autoRenderProbe = true
+
+//初始化引擎
+await Engine3D.init();
+let scene = new Scene3D()
+let camera = new Object3D()
+let mainCamera = camera.addComponent(Camera3D)
+scene.addChild(camera)
+
+// 初始化全局光照组件
+let probeObj = new Object3D();
+probeObj.addComponent(GlobalIlluminationComponent);
+this.scene.addChild(probeObj);
+
+// 渲染场景
+let view = new View3D()
+view.scene = this.scene
+view.camera = mainCamera
+Engine3D.startRenderView(view)
+```
+
+根据场景大小,用户可以动态调整探针区域范围:
+
+- 通过设置 `probeXCount`, `probeYCount`, `probeZCount` 调整探针数量(需渲染前设置);
+- 通过设置 `offsetX`, `offsetY`, `offsetZ` 调整区域中心位置;
+- 通过调整 `probeSpace` 调整探针的间距;
+
+
+### 配置参数
+[Engine3D.setting.gi](../../api/types/GlobalIlluminationSetting.md) 配置参数。
+
+| 参数 | 类型 | 描述 |
+| --- | --- | --- |
+| enable | boolean | 开启/关闭 |
+| offsetX | number | 探针组的注册点在x轴的偏移量 |
+| offsetY | number | 探针组的注册点在y轴的偏移量 |
+| offsetZ | number | 探针组的注册点在z轴的偏移量 |
+| probeXCount | number | 探针在x轴的数量 |
+| probeYCount | number | 探针在y轴的数量 |
+| probeZCount | number | 探针在z轴的数量 |
+| probeSize | number | 每个探针采样到的数据尺寸 |
+| probeSpace | number | 探针与探针之间的距离 |
+| ddgiGamma | number | 颜色gamma校正系数 |
+| indirectIntensity | number | 间接光的光照强度 |
+| bounceIntensity | number | 反射光的光照强度 |
+| octRTMaxSize | number | 设置八面体贴图的总尺寸 |
+| octRTSideSize | number | 设置八面体贴图,每个八面体正方形的尺寸 |
+| autoRenderProbe | boolean | 设置探针是否自动更新 |
+
+### 注意事项
+
+使用全局光照会消耗GPU的部分算力,由于所有的探针`Probe`对全场景的光照信息进行搜集,这个计算量是不可忽视的,为了让引擎能够正常流畅运行,我们做了分帧处理优化。最终GI的完整效果呈现是一个随时间累积的过程。如果用户对 `Irrandiance Volume` 区域做了修改,其结果也不是瞬间呈现出来,也会需要一个响应过程。
+
+> 如果你的场景是静态的,在引擎运行了一段时间后,可以主动关闭 `autoRenderProbe`,让引擎不再更新GI信息,从而解放这部分算力。
+
+
+
+<<< @/public/demos/advanced/Sample_GI.ts
diff --git a/docs/guide/advanced/post_bloom.md b/docs/guide/advanced/post_bloom.md
new file mode 100644
index 00000000..64c18536
--- /dev/null
+++ b/docs/guide/advanced/post_bloom.md
@@ -0,0 +1,51 @@
+---
+aside: false
+---
+# HDR 屏幕泛光 - BloomPost
+一种屏幕后期效果,也叫高光溢出,是一种光学效果;屏幕颜色内亮度高于阈值的部分会表现出扩散到周围像素中,并且随距离的增加而递减,形成一种发光朦胧的效果。
+```ts
+//初始化引擎
+await Engine3D.init();
+
+Engine3D.setting.render.postProcessing.bloom.downSampleStep = 5;
+Engine3D.setting.render.postProcessing.bloom.downSampleBlurSize = 5;
+Engine3D.setting.render.postProcessing.bloom.downSampleBlurSigma = 1.0;
+Engine3D.setting.render.postProcessing.bloom.upSampleBlurSize = 5;
+Engine3D.setting.render.postProcessing.bloom.upSampleBlurSigma = 1.0;
+Engine3D.setting.render.postProcessing.bloom.luminanceThreshole = 1.0;
+Engine3D.setting.render.postProcessing.bloom.bloomIntensity = 1.0;
+
+// 添加 BloomPost
+let postProcessing = this.scene.addComponent(PostProcessingComponent);
+postProcessing.addPost(BloomPost);
+
+//开始渲染
+let view = new View3D();
+view.scene = this.scene;
+view.camera = this.camera;
+Engine3D.startRenderView(view);
+```
+
+[Engine3D.setting.render.postProcessing.bloom](../../api/types/BloomSetting.md) 配置参数。
+
+| 参数 | 类型 | 描述 |
+| --- | --- | --- |
+| `enable` | `boolean` | enable |
+| `downSampleStep` | `number` | 下采样次数 |
+| `downSampleBlurSize` | `number` | 下采样模糊范围 |
+| `downSampleBlurSigma` | `number` | 下采样模糊计算指数 |
+| `upSampleBlurSize` | `number` | 上采样次数 |
+| `upSampleBlurSigma` | `number` | 上采样模糊范围 |
+| `luminanceThreshole` | `number` | Bloom高亮区域阈值 |
+| `bloomIntensity` | `boolean` | Bloom最终亮度加成系数 |
+
+一般我们可以通过对物体材质添加发光贴图和颜色来控制物体的发光效果:
+```ts
+let mat = new LitMaterial();
+mat.emissiveMap = Engine3D.res.whiteTexture;
+mat.emissiveColor = new Color(1.0, 0.0, 0.0);
+mat.emissiveIntensity = 3;
+```
+
+
+<<< @/public/demos/advanced/Sample_bloom.ts
\ No newline at end of file
diff --git a/docs/guide/advanced/post_depthOfField.md b/docs/guide/advanced/post_depthOfField.md
new file mode 100644
index 00000000..be80eb71
--- /dev/null
+++ b/docs/guide/advanced/post_depthOfField.md
@@ -0,0 +1,35 @@
+---
+aside: false
+---
+# 景深效果 - DepthOfField
+引擎实现的景深效果规定了距离相机最近、最远阈值,在相机和最近距离范围内的物体都为清晰的;而一旦超出了最近距离,物体随距离增加会呈现越来越模糊的效果。直到最远达到最大模糊程度。
+```ts
+//初始化引擎
+await Engine3D.init();
+
+Engine3D.setting.render.postProcessing.depthOfView.near = 150;
+Engine3D.setting.render.postProcessing.depthOfView.far = 300;
+Engine3D.setting.render.postProcessing.depthOfView.pixelOffset = 1;
+
+// 添加 DepthOfFieldPost
+let postProcessing = this.scene.addComponent(PostProcessingComponent);
+postProcessing.addPost(DepthOfFieldPost); //景深效果。
+
+//开始渲染
+let view = new View3D();
+view.scene = this.scene;
+view.camera = this.camera;
+Engine3D.startRenderView(view);
+```
+
+[Engine3D.setting.render.postProcessing.depthOfView](../../api/types/DepthOfViewSetting.md) 配置参数。
+
+| 参数 | 类型 | 描述 |
+| --- | --- | --- |
+| near | number | 设定低于该距离的物体将不会被模糊处理 |
+| far | number | 设定高于该距离的物体将会得到最大程度的模糊,`[near,far]` 之间的对象将会使用 `[0,1]` 之间线性插值过的系数做模糊处理 |
+| pixelOffset | number | 模糊效果像素扩散距离 |
+
+
+
+<<< @/public/demos/advanced/Sample_depth.ts
\ No newline at end of file
diff --git a/docs/guide/advanced/post_globalfog.md b/docs/guide/advanced/post_globalfog.md
new file mode 100644
index 00000000..48c869ad
--- /dev/null
+++ b/docs/guide/advanced/post_globalfog.md
@@ -0,0 +1,50 @@
+---
+aside: false
+---
+# 后期雾效 - GlobalFog
+雾效是一种非常常见的效果,模拟现实环境中人眼观察物体,会被一层具有特定颜色、浓度、体积的半透明的雾覆盖后朦胧的感觉。引擎内模拟实现的过程采用了相机位置、物体位置、物体的高度等参数,提供多种不同的衰减函数来达到不同雾效。
+```ts
+//初始化引擎
+await Engine3D.init();
+
+Engine3D.setting.render.postProcessing.globalFog.fogType = 0; //Liner:0, Exp:1, Exp2:2
+Engine3D.setting.render.postProcessing.globalFog.start = 400;
+Engine3D.setting.render.postProcessing.globalFog.end = 0;
+Engine3D.setting.render.postProcessing.globalFog.fogHeightScale = 1;
+Engine3D.setting.render.postProcessing.globalFog.density = 0.02;
+Engine3D.setting.render.postProcessing.globalFog.ins = 1;
+Engine3D.setting.render.postProcessing.globalFog.fogColor = new Color(84,90,239,255);
+Engine3D.setting.render.postProcessing.globalFog.skyFactor = 0.5;
+Engine3D.setting.render.postProcessing.globalFog.skyRoughness = 0.4;
+Engine3D.setting.render.postProcessing.globalFog.overrideSkyFactor = 0.8;
+
+// 添加 GlobalFog
+let postProcessing = this.scene.addComponent(PostProcessingComponent);
+postProcessing.addPost(GlobalFog);
+
+//开始渲染
+let view = new View3D();
+view.scene = this.scene;
+view.camera = this.camera;
+Engine3D.startRenderView(view);
+```
+
+[Engine3D.setting.render.postProcessing.globalFog](../../api/types/GlobalFogSetting.md) 配置参数。
+
+| 参数 | 类型 | 描述 |
+| --- | --- | --- |
+| enable | boolean | 开启/关闭。|
+| fogColor | Color | 雾的颜色 |
+| fogType | number | 雾的类型, 线性: 0, 指数: 1, 指数平方: 2 |
+| start | number | 雾的浓度衰减的起始距离,从 start 到 end 根据类型插值减小到0 |
+| end | number | 雾的浓度衰减的结束距离,从 start 到 end 根据类型插值减小0 |
+| density | number | 雾的浓度衰减系数,在指数/指数平方雾类型下,系数会额外加成 |
+| fogHeightScale | number | 雾的高度影响参数 |
+| ins | number | 高度影响系数 |
+| skyFactor | number | 雾的颜色和天空颜色混合系数 |
+| skyRoughness | number | 天空采样 mipmap 层级 |
+| overrideSkyFactor | number | 雾覆盖天空系数 |
+
+
+
+<<< @/public/demos/advanced/Sample_fog.ts
\ No newline at end of file
diff --git a/docs/guide/advanced/post_godRay.md b/docs/guide/advanced/post_godRay.md
new file mode 100644
index 00000000..bd095030
--- /dev/null
+++ b/docs/guide/advanced/post_godRay.md
@@ -0,0 +1,34 @@
+---
+aside: false
+---
+# 上帝射线 - GodRay
+`GodRay` 是一种由光线透过物体或者云层时产生的视觉效果,表现为一束或多束明亮光线,这种效果通常在自然场景中的光线穿过云层,树叶或其他
+遮挡物时出现,因为光线会被这些物体散射或折射,产生视觉上的辉光效果,
+```ts
+//初始化引擎
+await Engine3D.init();
+
+// 添加 后处理组件
+let postProcessing = this.scene.addComponent(PostProcessingComponent);
+
+// 添加 GodRay
+postProcessing.addPost(GodRayPost);
+
+//开始渲染
+let view = new View3D();
+view.scene = this.scene;
+view.camera = this.camera;
+Engine3D.startRenderView(view);
+```
+
+[Engine3D.setting.render.postProcessing.godray](../../api/types/GodraySetting.md) 配置参数。
+| 参数 | 类型 | 描述 |
+| --- | --- | --- |
+| scatteringExponent | number | 颜色扩散指数,默认为5 |
+| rayMarchCount | number | 追踪采样次数,默认为16 |
+| blendColor | boolean | true:将与GBuffer的mainColor混合 |
+| intensity | number | 加成颜色的强度,默认 0.5|
+
+
+
+<<< @/public/demos/advanced/Sample_godRay.ts
\ No newline at end of file
diff --git a/docs/guide/advanced/post_gtao.md b/docs/guide/advanced/post_gtao.md
new file mode 100644
index 00000000..4d3e2080
--- /dev/null
+++ b/docs/guide/advanced/post_gtao.md
@@ -0,0 +1,40 @@
+---
+aside: false
+---
+# 环境光遮蔽 - GTAO
+`AO` 是用来描绘物体和物体相交或靠近的时候遮挡周围漫反射光线的效果,可以解决或改善漏光、飘和阴影不实等问题,解决或改善场景中缝隙、褶皱与墙角、角线以及细小物体等的表现不清晰问题,综合改善细节尤其是暗部阴影,增强空间的层次感、真实感,同时加强和改善画面明暗对比,增强画面的艺术性。引擎内部通过采样指定屏幕范围内,指定距离范围内的像素点,求积分用于赋值当前像素 `AO` 系数。
+```ts
+//初始化引擎
+await Engine3D.init();
+
+Engine3D.setting.render.postProcessing.gtao.maxDistance = 5;
+Engine3D.setting.render.postProcessing.gtao.maxPixel = 50;
+Engine3D.setting.render.postProcessing.gtao.darkFactor = 1;
+Engine3D.setting.render.postProcessing.gtao.rayMarchSegment = 6;
+Engine3D.setting.render.postProcessing.gtao.multiBounce = true;
+Engine3D.setting.render.postProcessing.gtao.blendColor = true;
+
+// 添加 GTAOPost
+let postProcessing = this.scene.addComponent(PostProcessingComponent);
+postProcessing.addPost(GTAOPost);
+
+//开始渲染
+let view = new View3D();
+view.scene = this.scene;
+view.camera = this.camera;
+Engine3D.startRenderView(view);
+```
+
+[Engine3D.setting.render.postProcessing.gtao](../../api/types/GTAOSetting.md) 配置参数。
+| 参数 | 类型 | 描述 |
+| --- | --- | --- |
+| maxDistance | number | 设定ao采样时搜索3D空间周边的最大距离。|
+| maxPixel | number | 设定ao采样时搜索周边像素时的最大距离。|
+| darkFactor | number | 设定ao数值参与输出到屏幕时的系数,1:全部输出,0:不输出。|
+| rayMarchSegment | number | 设定ao采样时的步进的步数,值越大将会获得质量更好的ao效果,同时消耗更多的性能。|
+| multiBounce | boolean | 是否模拟颜色反弹。|
+| blendColor | boolean | true:将与GBuffer的mainColor混合;false:将只输出ao的颜色。|
+
+
+
+<<< @/public/demos/advanced/Sample_gtao.ts
\ No newline at end of file
diff --git a/docs/guide/advanced/post_outline.md b/docs/guide/advanced/post_outline.md
new file mode 100644
index 00000000..4fb602a9
--- /dev/null
+++ b/docs/guide/advanced/post_outline.md
@@ -0,0 +1,43 @@
+---
+aside: false
+---
+# 轮廓描边 - Outline
+引擎内实现了为指定的物体描绘未被遮挡的部分轮廓的功能。你可以为描边的轮廓线单独设置实线、淡出部分的宽度实现不同样式。
+```ts
+import {Engine3D, View3D, OutlinePost } from '@orillusion/core';
+// 初始化引擎
+await Engine3D.init();
+Engine3D.setting.render.postProcessing.outline.outlinePixel = 2;
+Engine3D.setting.render.postProcessing.outline.fadeOutlinePixel = 4;
+
+// 添加 OutlinePost
+let postProcessing = this.scene.addComponent(PostProcessingComponent);
+postProcessing.addPost(OutlinePost);
+
+//开始渲染
+let view = new View3D();
+view.scene = this.scene;
+view.camera = this.camera;
+Engine3D.startRenderView(view);
+```
+[Engine3D.setting.render.postProcessing.outline](/api/types/OutlineSetting.md) 配置参数。
+
+| 参数 | 类型 | 描述 |
+| --- | --- | --- |
+| outlinePixel | number | 描边硬边的像素宽度 |
+| fadeOutlinePixel | number | 描边淡出像素宽度 |
+
+
+通过 [outlinePostManager](/api/classes/OutlinePostManager) 指定描边列表。目前 `outline` 最多指定8组列表,每组可以设置不同的轮廓颜色;单组内的物体可以设置多个对象。分组的先后顺序决定了描边轮廓覆盖的优先级。
+
+```ts
+let obj1 = new Object3D()
+let obj2 = new Object3D()
+
+// 设定 Outline 目标, 分2组,2种颜色
+outlinePostManager.setOutlineList([[obj1], [obj2]], [new Color(1, 0.2, 0, 1), new Color(0.2, 1, 0)]);
+```
+
+
+
+<<< @/public/demos/advanced/Sample_outline.ts
\ No newline at end of file
diff --git a/docs/guide/advanced/post_ssr.md b/docs/guide/advanced/post_ssr.md
new file mode 100644
index 00000000..cdcd1306
--- /dev/null
+++ b/docs/guide/advanced/post_ssr.md
@@ -0,0 +1,42 @@
+---
+aside: false
+---
+# 屏幕空间反射 - SSR
+一种基于屏幕空间的反射效果实现,模拟光滑物体表面可以实时反射其周边物体影像的视觉效果。该反射效果优点为实时渲染,某一个物体发生移动,反射画面中物体也会发生移动;能精确的从每个像素反射。缺点为不能够反射出物体的背面,且屏幕范围外的物体也不能够被反射到其他的物体上。
+
+```ts
+//初始化引擎
+await Engine3D.init();
+
+Engine3D.setting.render.postProcessing.ssr.fadeEdgeRatio = 0.2;
+Engine3D.setting.render.postProcessing.ssr.rayMarchRatio = 0.5;
+Engine3D.setting.render.postProcessing.ssr.fadeDistanceMin = 600;
+Engine3D.setting.render.postProcessing.ssr.fadeDistanceMax = 2000;
+Engine3D.setting.render.postProcessing.ssr.roughnessThreshold = 0.5;
+Engine3D.setting.render.postProcessing.ssr.powDotRN = 0.2;
+
+// 添加 SSRPost
+let postProcessing = this.scene.addComponent(PostProcessingComponent);
+postProcessing.addPost(SSRPost);
+
+//开始渲染
+let view = new View3D();
+view.scene = this.scene;
+view.camera = this.camera;
+Engine3D.startRenderView(view);
+```
+
+[Engine3D.setting.render.postProcessing.ssr](../../api/types/SSRSetting.md) 配置参数。
+
+| 参数 | 类型 | 描述 |
+| --- | --- | --- |
+| fadeEdgeRatio | number | 渐变速率 |
+| rayMarchRatio | number | 光线步进速率 |
+| fadeDistanceMin | number | 消退距离最小值 |
+| fadeDistanceMax | number | 消退距离最大值 |
+| roughnessThreshold | number | 粗糙度阈值 |
+| powDotRN | number | `normal` 和 `reflection` 点积的 `pow` 参数 |
+
+
+
+<<< @/public/demos/advanced/Sample_ssr.ts
\ No newline at end of file
diff --git a/docs/guide/advanced/post_taa.md b/docs/guide/advanced/post_taa.md
new file mode 100644
index 00000000..8054b626
--- /dev/null
+++ b/docs/guide/advanced/post_taa.md
@@ -0,0 +1,48 @@
+---
+aside: false
+---
+# 反走样 - TAAPost
+一种3D渲染 `抗锯齿` 实现方案。3D渲染栅格化过程将显示对象按二位数组点阵的形式存储起来,得到的原始图像中物体边缘难免会有锯齿样。`TAA` 采用的方法为按照一定策略轻微的给相机设置一些偏移值,让物体在栅格化时会因不同的相机偏移值得到略微不同的结果。特别是在边缘的地方更为明显。最终输出到屏幕的颜色采用插值历史帧和当前帧的作为结果,且该结果用于下一次的插值。
+```ts
+// 引擎全局配置设置
+Engine3D.setting.render.postProcessing.taa.jitterSeedCount = 8;
+Engine3D.setting.render.postProcessing.taa.blendFactor = 0.1;
+Engine3D.setting.render.postProcessing.taa.sharpFactor = 0.6;
+Engine3D.setting.render.postProcessing.taa.sharpPreBlurFactor = 0.5;
+Engine3D.setting.render.postProcessing.taa.temporalJitterScale = 0.6;
+
+//初始化引擎
+await Engine3D.init();
+
+// 添加后处理组件
+let postProcessing = this.scene.addComponent(PostProcessingComponent);
+
+// 添加TAAPost
+let taaPost = postProcessing.addPost(TAAPost);
+
+// 通过 taaPost 对象设置(引擎全局配置和此处基于 taaPost 对象设置,结果是等价的)
+taaPost.jitterSeedCount = 8;
+taaPost.blendFactor = 0.1;
+taaPost.sharpFactor = 0.6;
+taaPost.sharpPreBlurFactor = 0.5;
+taaPost.temporalJitterScale = 0.6;
+
+// 开始渲染视图
+let view = new View3D();
+view.scene = this.scene;
+view.camera = mainCamera;
+Engine3D.startRenderView(view);
+```
+
+[Engine3D.setting.render.postProcessing.taa](../../api/types/TAASetting.md) 配置参数。
+| 参数 | 类型 | 描述 |
+| --- | --- | --- |
+| jitterSeedCount | number | 抖动相机随机种子采用个数,默认8个。(降低个数可以解决一些抖动太明显的问题,但是锯齿会变得更明显) |
+| blendFactor | number | 合并历史帧与当前帧的系数,参数越小,当前帧占比越小。|
+| sharpFactor | number | 图像锐化系数[0.1,1.9]:系数越小锐化效果越弱抗锯齿效果好,反之锐化越强抗锯齿效果越弱。|
+| sharpPreBlurFactor | number | 消图像锐化采样系数缩放系数:锐化时候采样的偏移量缩放。|
+| temporalJitterScale | number | 抖动相机随机偏移值的缩放系数[0,1]:系数越小抗锯齿效果变弱,像素抖动也会变弱。|
+
+
+
+<<< @/public/demos/advanced/Sample_taa.ts
\ No newline at end of file
diff --git a/docs/guide/advanced/posteffect.md b/docs/guide/advanced/posteffect.md
new file mode 100644
index 00000000..b27a6128
--- /dev/null
+++ b/docs/guide/advanced/posteffect.md
@@ -0,0 +1,17 @@
+---
+aside: false
+---
+# 后处理特效
+
+`Orillusion` 已经内置了多种后处理组件,目前包括:
+
+| 后处理组件 | 描述 |
+| :---: | :---: |
+| [DepthOfField](./post_depthOfField) | 景深效果 |
+| [SSR](./post_ssr) | 屏幕空间反射 |
+| [Outline](./post_outline) | 轮廓描边 |
+| [GlobalFog](./post_globalfog) | 屏幕空间雾化 |
+| [Bloom](./post_bloom) | HDR 泛光 |
+| [GTAO](./post_gtao) | 环境光遮蔽 |
+| [TAAPost](./post_taa) | 反走样 |
+| [GodRay](./post_godRay) | 上帝射线 |
\ No newline at end of file
diff --git a/docs/guide/advanced/shader/shader_compute.md b/docs/guide/advanced/shader/shader_compute.md
new file mode 100644
index 00000000..80902c62
--- /dev/null
+++ b/docs/guide/advanced/shader/shader_compute.md
@@ -0,0 +1,192 @@
+# Shader示例
+
+## GPU Buffer
+开始使用 `compute shader` 前,我们需要先了解 `compute shader` 中都有哪些数据类型,为了方便使用,我们封装了以下数据 `Buffer` 对象:
+| 类型 | 描述 |
+| --- | --- |
+| ComputeGPUBuffer | 常用的数据Buffer封装对象 |
+| UniformGPUBuffer | `Uniform` 数据Buffer封装对象 |
+| StorageGPUBuffer | `Storage` 数据Buffer封装对象 |
+| StructStorageGPUBuffer | 基于结构体的`Storage`数据Buffer封装对象 |
+
+### ComputeGPUBuffer的用法
+`ComputeGPUBuffer` 是比较常用的数据 `Buffer` 对象,该对象接受两个参数,数据大小以及一个可选的数据源:
+```ts
+// 创建一个大小为 64 float32的 ComputeGPUBuffer 数据对象
+var buffer = new ComputeGPUBuffer(64);
+
+// 创建一个 ComputeGPUBuffer 数据对象,并给与初始数据
+var data = new Float32Array(64);
+data[0] = 1;
+data[1] = 2;
+data[2] = 3;
+var buffer2 = new ComputeGPUBuffer(data.length, data);
+
+// 创建一个大小为 64 float32的 ComputeGPUBuffer 数据对象
+var buffer3 = new ComputeGPUBuffer(64);
+// 设置该对象数据
+buffer3.setFloat32Array("data", data);
+// 应用更新(将同步到GPU)
+buffer3.apply();
+```
+
+### UniformGPUBuffer的用法
+`UniformGPUBuffer` 是 `Uniform` 类型数据Buffer的封装对象,该对象与上述`ComputeGPUBuffer` 用法一致,也是接受两个参数,数据大小以及一个可选的数据源:
+```ts
+// 创建一个大小为 32 float32的 UniformGPUBuffer 数据对象
+var buffer = new UniformGPUBuffer(32);
+
+// 创建一个 UniformGPUBuffer 数据对象,并给与初始数据
+var data = new Float32Array(64);
+data[0] = 1;
+data[1] = 2;
+data[2] = 3;
+var buffer2 = new UniformGPUBuffer(data.length, data);
+
+// 创建一个大小为 64 float32的 UniformGPUBuffer 数据对象
+var buffer3 = new UniformGPUBuffer(64);
+// 设置该对象数据
+buffer3.setFloat32Array("data", data);
+// 应用更新(将同步到GPU)
+buffer3.apply();
+```
+
+### StorageGPUBuffer的用法
+`StorageGPUBuffer` 是 `Storage` 类型数据Buffer的封装对象,用法与上述`ComputeGPUBuffer`、`UniformGPUBuffer`一致,这里不再展开介绍。
+
+### StructStorageGPUBuffer的用法
+`StructStorageGPUBuffer` 是基于结构体的 `Storage` 数据Buffer封装对象,该对象接受两个参数,结构类型和结构对象个数:
+```ts
+class MyStructA extends Struct {
+ public x: number = 0;
+ public y: number = 0;
+ public z: number = 0;
+ public w: number = 0;
+}
+
+// 创建一个拥有 1 个MyStructA元素的 StructStorageGPUBuffer
+var buffer1 = new StructStorageGPUBuffer(MyStructA, 1);
+
+// 创建一个拥有 3 个MyStructA元素的 StructStorageGPUBuffer(相当于一维数组,数组长度为3)
+var buffer2 = new StructStorageGPUBuffer(MyStructA, 3);
+
+// 为下标为 2 的MyStructA设置值
+var value = new MyStructA();
+value.x = 100;
+buffer2.setStruct(MyStructA, 2, value);
+// 应用更新(将同步到GPU)
+buffer2.apply();
+```
+
+## Compute Shader
+为了方便使用,我们封装了 `ComputeShader` 对象,该对象接受一段WGSL代码作为初始化参数,例如:
+```ts
+this.mGaussianBlurShader = new ComputeShader(cs_shader);
+```
+
+`cs_shader` 内容如下:
+```wgsl
+struct GaussianBlurArgs {
+ radius: f32,
+ retain: vec3,
+};
+
+@group(0) @binding(0) var args: GaussianBlurArgs;
+@group(0) @binding(1) var colorMap: texture_2d;
+@group(0) @binding(2) var resultTex: texture_storage_2d;
+
+@compute @workgroup_size(8, 8)
+fn CsMain( @builtin(global_invocation_id) globalInvocation_id: vec3) {
+ var pixelCoord = vec2(globalInvocation_id.xy);
+
+ var value = vec4(0.0);
+ var count = 0.0;
+ let radius = i32(args.radius);
+ for (var i = -radius; i < radius; i += 1) {
+ for (var j = -radius; j < radius; j += 1) {
+ var offset = vec2(i, j);
+ value += textureLoad(colorMap, pixelCoord + offset, 0);
+ count += 1.0;
+ }
+ }
+
+ let result = value / count;
+ textureStore(resultTex, pixelCoord, result);
+}
+```
+这里对WGSL基本语法不做过多说明,详情查看 [WebGPU Shader Language](https://www.orillusion.com/zh/wgsl.html).
+
+当 `ComputeShader` 对象被创建后,我们需要关联它所使用到的相关数据,也就是上述代码中使用到的各类 `GPU Buffer` 和 `Texture` (本例为 `args`,`colorMap`,`resultTex`)。
+
+`args` 为 `uniform` 数据类型,此处用于存放配置信息,所以我们创建一个`UniformGPUBuffer` 对象用于管理该数据:
+```ts
+this.mGaussianBlurArgs = new UniformGPUBuffer(28);
+this.mGaussianBlurArgs.setFloat('radius', 2);
+this.mGaussianBlurArgs.apply();
+```
+
+`args` 所使用的数据有了以后,还需要将其关联到 `ComputeShader` 对象供`ComputeShader` 执行时访问:
+```ts
+this.mGaussianBlurShader.setUniformBuffer('args', this.mGaussianBlurArgs);
+```
+
+`colorMap` 是需要被高斯模糊的原始纹理,这里我们用引擎内部的全屏 `colorMap` 关联到`ComputeShader` 对象
+```ts
+this.autoSetColorTexture('colorMap', this.mGaussianBlurShader);
+```
+
+`resultTex` 是被模糊过的结果纹理,我们需要新建一张空纹理用于存储:
+```ts
+// 获取呈现大小(全屏大小)
+let presentationSize = webGPUContext.presentationSize;
+
+// 创建一张空的VirtualTexture
+this.mBlurResultTexture = new VirtualTexture(presentationSize[0], presentationSize[1], GPUTextureFormat.rgba16float, false, GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING);
+this.mBlurResultTexture.name = 'gaussianBlurResultTexture';
+
+// 设置 RTDescriptor 的相关参数(VirtualTexture的数据载入行为等)
+let descript = new RTDescriptor();
+descript.clearValue = [0, 0, 0, 1];
+descript.loadOp = `clear`;
+this.mRTFrame = new RTFrame([
+ this.mBlurResultTexture
+],[
+ descript
+]);
+
+// 将该纹理关联到ComputeShader
+this.mGaussianBlurShader.setStorageTexture(`resultTex`, this.mBlurResultTexture);
+```
+
+到这里,`ComputeShader`的初始化,相关 `GPU Buffer` 和 `Texture` 的创建与关联都已完成,接下来是执行 `ComputeShader`,在执行之前,我们还需要根据需求设置好派发调度时工作组数量,也就是参数 `workerSizeX`、
+`workerSizeY`、`workerSizeZ`:
+```ts
+this.mGaussianBlurShader.workerSizeX = Math.ceil(this.mBlurResultTexture.width / 8);
+this.mGaussianBlurShader.workerSizeY = Math.ceil(this.mBlurResultTexture.height / 8);
+this.mGaussianBlurShader.workerSizeZ = 1; // 默认为1,这里可不写
+```
+
+`workerSizeX`、`workerSizeY`、`workerSizeZ` 参数为派发计算时工作组数量,如图:
+
+
+每个红色立方体代表一个工作组(Working Group),由 `WGSL` 内置字段:`@workgroup_size(x,y,z)` 定义,`x,y,z`默认为 `1`,例如图中红色立方体的工作组,可通过 `@workgroup_size(4,4,4)` 表示。
+在WGSL里,内置变量 `global_invocation_id` 为全局调度编号,`local_invocation_id` 为工作组局部调度编号,上图 a、b、c 三点的全局与局部编号如下:
+| 位置点 | 局部编号 | 全局编号 |
+| :---: | :---: | :---: |
+| a | 0,0,0 | 0,0,0 |
+| b | 0,0,0 | 4,0,0 |
+| c | 1,1,0 | 5,5,0 |
+
+
+最后录入`ComputeShader`执行调度命令:
+```ts
+GPUContext.computeCommand(command, [this.mGaussianBlurShader]);
+```
+
+## 总结
+本节以一个高斯模糊示例,介绍了引擎中如何使用`Compute Shader`,如何创建`ComputeShader`所使用的各类`GPU Buffer`对象,`GPU Buffer`对象如何赋值,以及`ComputeShader`调度时参数设置,更多`ComputeShader`相关示例参见:
+
+
+
+<<< @/public/demos/compute/gaussianBlur.ts
+
\ No newline at end of file
diff --git a/docs/guide/advanced/shader/shader_define.md b/docs/guide/advanced/shader/shader_define.md
new file mode 100644
index 00000000..8b732741
--- /dev/null
+++ b/docs/guide/advanced/shader/shader_define.md
@@ -0,0 +1,22 @@
+# 着色器宏定义
+
+跟[代码引用](./shader_include.md)类似,除了直接引用 `shader` 外,我们还可以在通过简单的宏 `(if-else-endif)` 语句来进行代码选择性的加载
+
+比如,要创建两个材质球 `shader`,一个接受光,一个不接受光,除此之外所有代码相同,我们就可以通过定义 `USE_LIGHT` 宏变量来灵活的加载不同的 shader 代码:
+
+```wgsl
+// 加载全局 shader
+#include `GlobalUniform`
+
+// 根据宏定义 USE_LIGHT 选择加载 不同的 shader
+#if USE_LIGHT
+ #include `shader1`
+#else
+ #include `shader2`
+#endif
+
+// 其他代码
+...
+```
+
+关于 `宏` 定义,请见下章 [着色提变体](./shader_variants.md)
\ No newline at end of file
diff --git a/docs/guide/advanced/shader/shader_include.md b/docs/guide/advanced/shader/shader_include.md
new file mode 100644
index 00000000..02f2e7a3
--- /dev/null
+++ b/docs/guide/advanced/shader/shader_include.md
@@ -0,0 +1,54 @@
+# 代码引用
+在实际编写着色器代码的时候,我们会经常碰到这些情况:
+ - 会频繁的解析 `normalMap` 获得贴图提供的法向量
+ - 定义过的 `struct` 在另外一个地方也要有同样的定义
+ - 特定的一组 `texture` 和对应的 `sampler` 需要重复定义
+ - 特定的一组 `GPUBuffer`会被一些关联 `pass` 重复绑定
+
+
+于是我们最初的情况是 `copy` 同样的代码片段在需要使用的地方,这就意味着如果这段代码逻辑有调整,需要将所有被使用到的地方都要做一样的调整。
+这是程序员最不容易也最有经验去处理的事情。于是我们引入 `#include` 关键字到 `shader` 中。
+
+### #include
+按照上一章的方法,假设我们已经注册了一段全局代码到 `ShaderLib`, 并使用 `GlobalUniform` 作为唯一的 `key`:
+
+```ts
+// 注册GlobalUniform代码片段
+ShaderLib.register('GlobalUniform', GlobalUniform );
+```
+
+这样后续在其它 `shader` 中,只需要有一行代码,即可引入 `GlobalUniform` 的代码片段和数据。我们只需要修改 `GlobalUniform` 代码的内容,就能获得全局修改的效果。
+::: code-group
+```wgsl [shader1]
+// 引入 GlobalUniform 代码片段
+#include `GlobalUniform`
+
+// 其它代码1
+....
+```
+```wgsl [shader2]
+// 引入 GlobalUniform 代码片段
+#include `GlobalUniform`
+
+// 其它代码2
+....
+```
+```wgsl [shader3]
+// 引入 GlobalUniform 代码片段
+#include `GlobalUniform`
+
+// 其它代码3
+....
+```
+:::
+
+### 内置公共着色代码片段
+
+以下举例了一些经常会见到的内置过的代码片段定义:
+
+```wgsl
+#include "Common_vert" //顶点着色器通用代码
+#include "Common_frag" //片元着色器通用代码
+#include "BxDF_frag" //使用BxDF方程片元着色代码
+#include "UnLit_frag" //使用无光着色的片元着色代码
+```
\ No newline at end of file
diff --git a/docs/guide/advanced/shader/shader_internal.md b/docs/guide/advanced/shader/shader_internal.md
new file mode 100644
index 00000000..badfe484
--- /dev/null
+++ b/docs/guide/advanced/shader/shader_internal.md
@@ -0,0 +1,248 @@
+# 着色器内置变量
+在 `Orillusion` 引擎中,为了能够更规范和高效的编写一些复杂的着色器脚本(比如PBR材质着色逻辑),我们对着色器代码进行了拆分和封装。
+本篇将会介绍拆分之后的一些常用内置着色器脚本,比如变量、结构体定义、函数实现等给予解释。
+
+## 公共变量
+最初始的数据来自于管线中的顶点流 `VertexAttributes`,以及常量寄存器中定义的`Uniform` 数据 - `globalUniform`,以及脚本头部自定义的一些数学常量比如 `PI=3.14` 等:
+解析完这些数据后,我们能得到如下内置变量:
+
+### globalUniform
+引擎在渲染前准备的数据,通过 `Uniform` 的形式绑定到渲染管线中,相当于只读形式的全局数据。
+解析 `globalUniform` 可以得到的内置变量有:
+ ```wgsl
+//x:引擎当前的frame数据;y:引擎运行的当前时间;z:当前帧与上一帧之间的时间跨度。
+var TIME: vec4;
+//x:鼠标当前位置x;y:鼠标当前的位置y。
+var MOUSE: vec4;
+//x:引擎所运行的canvas画布的像素尺寸。
+var SCREEN: vec4;
+//x:投影近裁剪面距离;y:投影远裁剪面距离;z:1.0 + 1.0 / globalUniform.far。
+var ProjectionParams: vec4;
+//投影矩阵
+var ORI_MATRIX_P: mat4x4;
+//视图矩阵
+var ORI_MATRIX_V: mat4x4;
+//模型矩阵
+var ORI_MATRIX_M: mat4x4;
+//ORI_MATRIX_P * ORI_MATRIX_V
+var ORI_MATRIX_PV: mat4x4;
+//ORI_MATRIX_PV的逆矩阵
+var ORI_MATRIX_PVInv: mat4x4;
+//???
+var ORI_MATRIX_World: mat4x4;
+//相机矩阵
+var ORI_CAMERAMATRIX: mat4x4;
+//变换normal到世界坐标,使用到的矩阵
+var ORI_NORMALMATRIX: mat3x3;
+```
+### ORI_VertexOut
+在通用的顶点流处理流程 `Common_vert.wgsl` 中,解析顶点数据 `VertexAttributes` 得到的结构体。
+```wgsl
+//定义顶点数据结构
+struct VertexOutput {
+ //第一道UV,
+ @location(0) varying_UV0: vec2,
+ //第二道UV,一般可用于shadowmap的映射,也可做它用
+ @location(1) varying_UV1: vec2,
+ //视图空间下的坐标
+ @location(2) varying_ViewPos: vec4,
+ //NDC空间下的坐标
+ @location(3) varying_Clip: vec4,
+ //世界坐标
+ @location(4) varying_WPos: vec4,
+ //世界空间下的normal方向
+ @location(5) varying_WNormal: vec3,
+ //顶点色
+ @location(6) varying_Color: vec4,
+
+ #if USE_SHADOWMAPING
+ //todo解释
+ @location(7) varying_ShadowPos: vec4,
+ #endif
+
+ #if USE_TANGENT
+ //世界空间下的切线方向
+ @location(8) varying_Tangent: vec4,
+ #endif
+ //经过投影变换后的位置
+ @builtin(position) member: vec4
+};
+
+var ORI_VertexOut: VertexOutput ;
+```
+### ORI_VertexVarying
+顶点着色器传入到片段着色器,经过权重插值后的输入数据。通过与 `VertexOutput` 的比较分析,不难看出他们是一一对应的。
+`face` 属性除外。
+```wgsl
+ struct FragmentVarying {
+ @location(0) fragUV0: vec2,
+ @location(1) fragUV1: vec2,
+ @location(2) viewPosition: vec4,
+ @location(3) fragPosition: vec4,
+ @location(4) vWorldPos: vec4,
+ @location(5) vWorldNormal: vec3,
+ @location(6) vColor: vec4,
+
+ #if USE_SHADOWMAPING
+ @location(7) vShadowPos: vec4,
+ #endif
+
+ #if USE_TANGENT
+ @location(8) TANGENT: vec4,
+ #endif
+
+ //正面渲染or反面渲染
+ @builtin(front_facing) face: bool,
+ @builtin(position) fragCoord : vec4
+};
+
+var ORI_VertexVarying: FragmentVarying;
+```
+
+### ORI_ShadingInput
+该变量为PBR材质球量身定制,集合了PBR着色需要用到的各种参数。方便在后续使用的时候获取。
+以及着色之后,用户可以追加自定义特效,可以从这个变量里提取自己需要的数据。
+```wgsl
+struct ShadingInput{
+ //基础颜色,一般为默认白色
+ BaseColor:vec4,
+ //粗糙度
+ Roughness:f32,
+ //金属度
+ Metallic:f32,
+ //高光系数
+ Specular:f32,
+ //自发光颜色
+ EmissiveColor:vec4,
+ //表面颜色
+ SurfaceColor:vec4,
+ //法向量
+ Normal:vec3,
+ //切向量
+ Tangent:vec4,
+ //todo 解释说明
+ WorldPositionOffset:vec3,
+ //接受环境光遮蔽系数
+ AmbientOcclusion:f32,
+ //todo 解释说明
+ PixelDepthOffset:f32,
+ //透明度
+ Opacity:f32,
+ //透明遮罩系数
+ OpacityMask:f32,
+ //反射率
+ Refraction:f32,
+}
+
+var ORI_ShadingInput: ShadingInput;
+```
+
+### ORI_FragmentOutput
+片元着色的结果,将放入到该变量中,默认情况片元着色的结构就只有颜色数据需要输出。
+如果有一些后期特效需要处理的话,需要输出更多的内容到 `GBuffer` 中,方便计算。
+通常情况,需要参与后期计算的参数有世界坐标 `worldPos`,法向量 `worldNormal` 和一些材质球信息 `material` (光滑度/粗糙度/是否发光等),
+
+```wgsl
+struct FragmentOutput {
+ //颜色
+ @location(0) color: vec4,
+ #if USE_WORLDPOS
+ //世界坐标
+ @location(1) worldPos: vec4,
+ #endif
+ #if USEGBUFFER
+ //法向量
+ @location(2) worldNormal: vec4,
+ //材质球数据
+ @location(3) material: vec4
+ #endif
+
+ var ORI_FragmentOutput: FragmentOutput;
+}
+```
+
+### materialUniform
+在材质球中定义,与特定材质球关联的 `materialUniform`,该变量携带绘制该材质球所需要的变量。不同的材质球 `materialUniform` 数据结构定义应该各不相同。
+接下来以 `LitMaterial` 作为例子,简单介绍 `materialUniform` 内部的一些变量:
+
+> `LitMaterial`中使用到的 `materialUniform` 定义结构体,当前被封装到了`PhysicMaterialUniform_frag`。
+ ```wgsl
+struct MaterialUniform{
+ #if USE_BRDF
+ //物理着色,材质球数据描述内容
+ #include "PhysicMaterialUniform_frag"
+ #endif
+
+ #if USE_ColorLit
+ #endif
+
+ #if USE_UnLit
+ #endif
+}
+
+ ```
+
+> 继续在 `PhysicMaterialUniform_frag` 中查看更多的内容:
+
+```wgsl
+//PhysicMaterialUniform_frag文件定义的结构体
+//定义BRDF模型着色,材质球参数
+struct MaterialUniform {
+ //第一道UV偏移数据 x:U方向偏移 y:V方向偏移 z:U方向缩放 w:V方向缩放
+ transformUV1:vec4,
+ //第二道UV x:U方向偏移 y:V方向偏移 z:U方向缩放 w:V方向缩放
+ transformUV2:vec4,
+ //基础颜色(参考其他命名tintColor)
+ baseColor: vec4,
+ //发光颜色
+ emissiveColor: vec4,
+ //f0反射率
+ materialF0: vec4,
+ //接受环境光加成系数
+ envIntensity: f32,
+ //法向量缩放系数
+ normalScale: f32,
+ //粗糙度
+ roughness: f32,
+ //金属度
+ metallic: f32,
+ //环境光遮蔽强度
+ ao: f32,
+ //粗糙度最小值
+ roughness_min: f32,
+ //粗糙度最大值
+ roughness_max: f32,
+ //金属最小值
+ metallic_min: f32,
+ //金属最大值
+ metallic_max: f32,
+ //发光强度
+ emissiveIntensity: f32,
+ //透明剔除阈值
+ alphaCutoff: f32,
+ //折射率
+ ior: f32,
+ //清漆涂层颜色
+ clearcoatColor: vec4,
+ //清漆涂层权重
+ clearcoatWeight: f32,
+ //清漆涂层强度
+ clearcoatFactor: f32,
+ //清漆涂层粗糙度
+ clearcoatRoughnessFactor: f32,
+};
+```
+## 公共文件
+相较于普通程序编写函数定义的意义,着色器脚本里同样需要定义各种函数,提供功能复用和方便维护。以下介绍一些常用的函数:
+
+- `LightingFunction_frag` 光照计算需要用到的函数;
+- `NormalMap_frag` 封装有各种法线计算相关的函数;
+- `IESProfiles_frag` 光源描述文件解析函数;
+- `BRDF_frag` BRDF模型着色需要用到的函数;
+- `FastMath_shader` 快速开方,快速计算向量长度;
+
+
+## 总结
+随着引擎的版本迭代,内置函数会越来越丰富。你也可以将常用到的函数提取到类库中供复用。
+
+
\ No newline at end of file
diff --git a/docs/guide/advanced/shader/shader_intro.md b/docs/guide/advanced/shader/shader_intro.md
new file mode 100644
index 00000000..70033b71
--- /dev/null
+++ b/docs/guide/advanced/shader/shader_intro.md
@@ -0,0 +1,13 @@
+# WebGPU Shader
+
+本章节主要介绍如何使用 `wgsl` 语言编写 `orillusion` 着色器代码和注意事项
+
+与目前主流的3D引擎类似,`orillusion` 渲染模块的 `MeshRender` 中可以有多材质球,每个材质球可以定义多个渲染通道;在完成一个渲染任务期间,引擎会根据材质球类型、渲染通道的类型以及优先级按照规则对渲染输出不同的结果。
+
+## Shader 分类
+`Orillusion` 中 `shader` 可以分为两大类,每个类别的用途不同,使用方式也不同:
+
+- [RenderShader](./shader_material.md) - 用于顶点着色和片元着色阶段的 `shader` 程序
+- [ComputeShader](./shader_compute.md) - 在常规图形管线之外,在GPU上执行通用计算的 `shader` 程序
+
+
\ No newline at end of file
diff --git a/docs/guide/advanced/shader/shader_material.md b/docs/guide/advanced/shader/shader_material.md
new file mode 100644
index 00000000..9ab384d1
--- /dev/null
+++ b/docs/guide/advanced/shader/shader_material.md
@@ -0,0 +1,71 @@
+# RenderShader
+材质球 `Material` 用于描述被渲染物体表面的外观,控制引擎该如何渲染。一个材质球内部必须指定一个 `Shader`, 一个`Shader`可以添加一个或多个`RenderShaderPass`, 它们紧密相连,材质球的很多属性都是寄存在了着色器上。
+- 材质球和着色器是多对一的关系,材质球拥有着色器实例的引用;多个不同的材质球可以复用同一个着色器
+- 材质球除了包含着色器之外,还拥有贴图列表,渲染优先级等其它内容
+
+创建材质球必须指定着色器实例,以下内容将介绍如何创建着色器实例
+
+## 注册着色器
+每一个着色器都必须要通过 `ShaderLib` 进行注册,着色器必须拥有唯一的 `key` 作为名称
+```ts
+import {ShaderLib} from '@orillusion/core'
+let MyShader = `
+ fn vert(inputData:VertexAttributes) -> VertexOutput {
+ //...
+ return ORI_VertexOut ;
+ }
+
+ fn frag(){
+ //...
+ }
+ `;
+// 注册着色器
+ShaderLib.register('myShader', MyShader)
+```
+
+## 创建着色器实例
+我们可以继承 `Material` 来创建新的着色器实例,在通过 `ShaderLib` 注册对应的 `shader` 代码后,我们可以使用 `setShader(vs:string, fs:string)` 完成着色器的创建
+
+```ts
+let vsShader = `.... ` //wgsl vs 代码
+let fsShader = `.... ` //wgsl fs 代码
+
+class myShader extends Material{
+ constructor() {
+ super();
+ // 注册shader
+ ShaderLib.register("vsShader", vsShader);
+ ShaderLib.register("fsShader", fsShader);
+
+ // 创建RenderShaderPass实例
+ let renderShader = new RenderShaderPass('vsShader','fsShader');
+
+ // 设置ShaderPass入口函数
+ renderShader.setShaderEntry(`VertMain`, `FragMain`);
+
+ // 创建材质Shader实例
+ let shader = new Shader();
+ // 添加RenderShaderPass实例
+ shader.addRenderPass(renderShader);
+
+ // 将材质Shader实例关联到当前材质对象上
+ this.shader = shader;
+ }
+}
+```
+
+## 设定着色器主函数
+着色器实例创建好了之后,需要设定顶点着色和片元着色的主函数入口名称。
+```ts
+// 设置着色器代码入口名称
+renderShader.setShaderEntry(`VertMain`, `FragMain`)
+```
+
+## 设定着色器定义宏 `Define`
+使用宏定义可以优化你的着色器代码,让程序能够高效的按照设定的变量,进入到不同的分支路径中执行
+```ts
+// 使用 tangent 相关的代码
+shader.setDefine("USE_TANGENT", true);
+```
+
+> 更多宏定义相关内容将在 [着色器变体](./shader_variants.md) 中介绍
diff --git a/docs/guide/advanced/shader/shader_unlit.md b/docs/guide/advanced/shader/shader_unlit.md
new file mode 100644
index 00000000..61fef2f3
--- /dev/null
+++ b/docs/guide/advanced/shader/shader_unlit.md
@@ -0,0 +1,125 @@
+# 无光材质球
+本篇将以引擎内置的 `UnlitMaterial` 为例,介绍如何创建一个材质球。
+
+## 创建材质球
+通过继承 `Material` 创建新的 `UnLitMaterial`。
+```ts
+export class UnLitMaterial extends Material {
+ constructor() {
+ super();
+ //...
+ }
+}
+```
+
+## 编写着色器代码
+首先需要准备编辑着色器脚本。
+无光材质球作为比较基础的材质球,很多地方我们只需要`include`进来现有的代码段即可;
+
+```wgsl
+//引入通用顶点着色器相关代码
+#include "Common_vert"
+//引入通用片元着色器相关代码
+#include "Common_frag"
+//引入无光材质球片元着色器代码
+#include "UnLit_frag"
+//引入无光材质球,Uniform相关代码
+#include "UnLitMaterialUniform_frag"
+```
+
+定义顶点着色`vert`函数:
+```wgsl
+fn vert(inputData:VertexAttributes) -> VertexOutput {
+ //执行内置顶点着色器函数
+ ORI_Vert(inputData) ;
+ //输出顶点数据
+ return ORI_VertexOut ;
+}
+```
+
+定义片元着色`frag`函数:
+```wgsl
+fn frag(){
+ //获取第一道UV偏移数据
+ var transformUV1 = materialUniform.transformUV1;
+ //获取第二道UV偏移数据
+ var transformUV2 = materialUniform.transformUV2;
+ //计算实时UV
+ var uv = transformUV1.zw * ORI_VertexVarying.fragUV0 + transformUV1.xy;
+ //采样baseMap作为输出的颜色
+ let color = textureSample(baseMap,baseMapSampler,uv) ;
+ //将颜色存储到内置变量ORI_ShadingInput的BaseColor中
+ ORI_ShadingInput.BaseColor = color * materialUniform.baseColor ;
+ //执行无光着色函数
+ UnLit();
+}
+```
+将上述脚本通过特定的key`UnLitShader`放入ShaderLib中管理。
+```ts
+let Unlit:string = `${shaderCode}`;
+ ShaderLib.register('UnLitShader', UnLit);
+```
+
+### 创建着色器`RenderShader`
+在这里,我们将vertexShader和fragmentShader设置为同样的一段脚本。
+```ts
+//创建着色器实例
+let shader = this.setShader(`UnLitShader`,`UnLitShader`);
+//设置入口函数
+shader.setShaderEntry(`VertMain`,`FragMain`)
+```
+
+### 设置材质球变量
+材质球一般都会需要从外部修改材质球的渲染结果,我们通过抽象将这些需要修改的内容定义成变量,
+开放给外部使用。
+> 一个无光材质球可能同时会有简单的UV变换特效,会设置默认颜色、透明裁剪阈值等。
+在这里我们提取了四个变量供外部修改。
+```ts
+//第一道UV的变换系数
+shader.setUniformVector4(`transformUV1`, new Vector4(0, 0, 1, 1));
+//第二道UV的变换系数
+shader.setUniformVector4(`transformUV2`, new Vector4(0, 0, 1, 1));
+//基础颜色
+shader.setUniformColor(`baseColor`, new Color());
+//透明裁剪阈值
+shader.setUniformFloat(`alphaCutoff`, 0.5);
+
+```
+
+### 配置材质球的宏定义
+材质球有一些通用的宏定义,需要显示的设置:
+1. `useLight` 是否接受灯光影响;
+2. `acceptGI` 是否接受全局光照 `GI`;
+3. `acceptShadow` 是否接受阴影;
+4. `castShadow` 是否产生阴影;
+5. `receiveEnv` 是否介绍环境光;
+6. ...
+
+或许你还需要设置如下属性:
+1. `renderLayer`所在渲染层级;
+2. `renderOrder`渲染优先级(透明渲染);
+3. ...
+
+无光材质球的宏定义如下:
+```ts
+let shaderState = shader.shaderState;
+//不接受阴影
+shaderState.acceptShadow = false;
+//不接受环境光
+shaderState.receiveEnv = false;
+//不接受全局光照
+shaderState.acceptGI = false;
+//不受灯光影响
+shaderState.useLight = false;
+
+```
+
+## 总结
+自定义一个材质球的流程大体上和无光着色类似,在你实践的过程中,一般会遇到诸如此类的问题,逐个排除掉就可以获得正确结果了。
+1. 使用了内置变量,但是内置变量还未定义:需要检查是否include了对应的代码段;
+2. 使用了内置函数,但是内置函数未定义:需要检查是否include了对应的代码段;
+3. 定义了变量,与内置变量相冲突:重命名你的变量至与内置变量不冲突;
+4. 定义了函数,与内置函数相冲突:重命名你的函数至与内置函数不冲突;
+5. 定义了结构体,与内置结构体冲突:重命名你的结构体至与内置结构体不冲突;
+6. 错误的设定了宏,导致代码路径中使用到了未定义的变量、函数、结构体;
+7. 材质球的Uniform、Texture、GPUBuffer数据绑定命名不一致,修改你的着色器代码中命名至与TypeScript脚本相一致。
diff --git a/docs/guide/advanced/shader/shader_variants.md b/docs/guide/advanced/shader/shader_variants.md
new file mode 100644
index 00000000..050ba173
--- /dev/null
+++ b/docs/guide/advanced/shader/shader_variants.md
@@ -0,0 +1,67 @@
+# 着色器变体 - Variants
+
+对于开发者而言,同样一段着色器代码可能会面临多种使用环境,可能需要根据环境加载不同的变量或代码模块。我们内置了以下两个自定义 API 帮助开发者生成不同的着色器变体:
+- 设定不同的宏定义 `setDefine()`;
+- 设定不同的常量 `setConst()`;
+
+比如,要创建两个材质球 `shader`,一个接受光,一个不接受光,除此之外所有代码相同,我们就可以通过定义 `USE_LIGHT` 宏变量来灵活的加载不同的 `shader` 代码:
+
+具有 `LIGHT` 数据的模型,其材质球需要设定宏 `setDefine("USE_LIGHT", true)`;
+
+```ts
+// 同样的wgsl代码
+ShaderLib.register('vsCode', '....')
+ShaderLib.register('fsCode', '....')
+
+class shader1 extends Material{
+ constructor() {
+ super();
+ // 创建RenderShaderPass实例
+ let renderShader = new RenderShaderPass('vsCode','fsCode');
+
+ // 创建材质Shader实例
+ let shader = new Shader();
+ // 添加RenderShaderPass实例
+ shader.addRenderPass(renderShader);
+
+ // 通过定义 USE_LIGHT 加载灯光模块
+ shader.setDefine("USE_LIGHT", true);
+
+ // 将材质Shader实例关联到当前材质对象上
+ this.shader = shader;
+ }
+}
+class shader2 extends Material{
+ constructor() {
+ super();
+ // 创建RenderShaderPass实例
+ let renderShader = new RenderShaderPass('vsCode','fsCode');
+
+ // 创建材质Shader实例
+ let shader = new Shader();
+ // 添加RenderShaderPass实例
+ shader.addRenderPass(renderShader);
+
+ //通过定义 USE_LIGHT 加载其他模块
+ shader.setDefine("USE_LIGHT", false);
+
+ // 将材质Shader实例关联到当前材质对象上
+ this.shader = shader;
+ }
+}
+```
+同样一段着色器代码,会因为宏定义不同而生成不同的变体。从而可以生成具有不同功能的`RenderShader` 被用于不同的材质球中。
+```wgsl
+// 加载全局 shader
+#include `GlobalUniform`
+
+// 根据宏定义 USE_LIGHT 选择加载 不同的 shader
+#if USE_LIGHT
+ // ... 处理光的代码
+#else
+ // ... 不处理光的代码
+#endif
+
+// 其他代码
+...
+```
\ No newline at end of file
diff --git a/docs/guide/animation/morph.md b/docs/guide/animation/morph.md
new file mode 100644
index 00000000..488fa9a5
--- /dev/null
+++ b/docs/guide/animation/morph.md
@@ -0,0 +1,54 @@
+# Morph动画
+
+使用系统的 [Time](/api/classes/Time) 模块计算模型顶点的基础位置 `basePosition` 和目标位置 `morphTargetPosition` 的插值系数 `interpolation`,持续改变物体模型的点前顶点位置 `position`,从而获得连续的动画效果。
+
+::: tip
+目前引擎只支持模型内置的 `Morph` 动画状态,需要提前在建模工具中制作好对应的模型状态,后续版本将加入代码内手动创建自定义 `Morph` 对象。
+:::
+
+## 基本使用
+
+```ts
+import { Engine3D } from '@orillusion/core';
+// 加载支持 Morph 状态模型
+let faceObject = await Engine3D.res.loadGltf('gltfs/glb/face.glb');
+scene.addChild(faceObject);
+```
+引擎会自动为模型的所有节点添加 [MeshRenderer](/api/classes/MeshRenderer) 组件用于渲染显示,同时也会为所有支持 `Morph` 动画的节点添加对应的 [rendererMask](/api/classes/MeshRenderer#renderermask)。我们可以通过遍历所有 `MeshRenderer` 节点,找到所有符合 `MorphTarget` 的节点:
+```ts
+function findMorphRenderers(obj: Object3D): MeshRenderer[] {
+ let rendererList: MeshRenderer[] = [];
+ // 遍历所有节点
+ obj.forChild((child) => {
+ let mr = child.getComponent(MeshRenderer)
+ // 找到同时存在 MeshRenderer 和 MorphTarget 的节点
+ if(mr && mr.hasMask(RendererMask.MorphTarget))
+ rendererList.push(mr)
+ })
+ return rendererList;
+}
+
+let MorphRenders = findMorphRenderers(faceObject)
+```
+
+## 控制插值
+我们可以通过节点 `geometry` 的 [morphTargetDictionary](/api/classes/GeometryBase#morphtargetdictionary) 属性查找到节点对应的 `morph` 状态,然后通过 [setMorphInfluence](/api/classes/MeshRenderer#setmorphinfluence) 调节对应的插值系数来改变模型状态:
+```ts
+console.log(renderer.geometry.morphTargetDictionary)
+// {mouth:0} - 完全闭嘴状态
+renderer.setMorphInfluence('mouth', 1); // 设置完全张嘴状态
+```
+
+## 使用说明
+`morph` 动画,以人脸表情为例,假定参与脸部动画部分为 `眼睛` 和 `嘴唇`。 需要提前制作好对应模型,包含 `eye` 和`lip` 两块内容的 `morph` 动画状态:
+
+1. 定义模型基础状态:`睁眼` 和 `闭嘴`;
+2. 定义完全闭眼状态:`anim_close_eye`;
+3. 定义完全张嘴状态:`anim_open_lip`;
+4. 将眼睛 `开/闭` 状态对应插值系数 `eye_interpolation` - `0` 对应完全睁眼,`1` 对应完全闭眼;
+同理将嘴唇 `开/闭` 状态对应差值系数 `lip_interpolation` - `0` 对应完全闭合,`1` 对应完全张开;
+5. 在代码中通过调节两者 `interpolation` 系数数值,即可以混合对应 `闭眼` 和 `张嘴` 动态效果。
+
+
+
+<<< @/public/demos/animation/morphAnim.ts
\ No newline at end of file
diff --git a/docs/guide/animation/property.md b/docs/guide/animation/property.md
new file mode 100644
index 00000000..03b06cff
--- /dev/null
+++ b/docs/guide/animation/property.md
@@ -0,0 +1,116 @@
+# 属性动画(PropertyAnimation)
+
+属性动画组件 [PropertyAnimation](/api/classes/PropertyAnimation) 通过持续更改对象的属性值来变更目标的状态,实现动画效果。
+
+
+## 应用举例
+1. `Object3D` 的属性:`position`, `scale`, `rotation`
+2. `材质球` 中的贴图:`uv`, `offset`, `tiling`
+3. `后处理效果` 参数:`color`, `strength`
+
+以上属性都可以提供为属性动画更改的内容。
+
+## 基本使用
+指定场景中的某个节点 `Object3D`,为其添加组件 `PropertyAnimation`;然后给组件追加影片剪辑后即能使用。
+
+::: tip
+目前引擎只支持通过 `Unity` 工具导入经过 `Curve` 曲线或者 `Animation` 数据导出 `Clip` 素材,暂不支持代码中自定义属性动画,后续版本会加入
+:::
+
+```cs
+// Unity中导出clip的及脚本
+public class AnimationInfo : InfoBase
+{
+ [SerializeField] public Animation animation;
+ [SerializeField] public List clipList;
+
+ public string WriteJson()
+ {
+ string ret = JsonUtility.ToJson(this);
+ return ret;
+ }
+}
+
+```
+
+```ts
+// load test model
+let node = new Object3D();
+scene.addChild(node);
+// 添加组件
+let animation = node.addComponent(PropertyAnimation);
+
+// 加载clip素材
+let res = await fetch('path/to/clip.json')
+let json = await res.json()
+// 初始化clip
+let animClip = new PropertyAnimClip();
+// 解析clip
+animClip.parse(json);
+animClip.wrapMode = WrapMode.Once;
+animation.defaultClip = animClip.name;
+animation.autoPlay = false;
+// 将clip追加至组件
+animation.appendClip(animClip);
+
+```
+
+## 播放动画
+
+可以使用 [play](/api/classes/PropertyAnimation#play) 方法来播放对应名称 `(name)` 的 `PropertyAnimClip`。
+
+```ts
+animation.play('anim_0', true); // 默认 true 从头播放
+```
+
+## 暂停动画
+
+可以使用 [stop](/api/classes/PropertyAnimation#stop) 方法来播放指定的 `PropertyAnimClip`。
+
+```ts
+animation.stop();
+```
+
+## 切换动画
+
+可以使用 [toggle](/api/classes/PropertyAnimation#toggle) 方法来播放已暂停的动画,或暂停正在播放的动画。
+
+```ts
+animation.toggle();
+```
+
+## 指定动画时间
+可以使用 [seek](/api/classes/PropertyAnimation#seek) 方法来指定动画播放起始时间。
+
+```ts
+animation.seek(1.2);//指定到1.2s
+```
+
+## 获取影片剪辑
+
+使用 [getClip](/api/classes/PropertyAnimation#getclip) 方法,获取组件已绑定过的影片剪辑 `PropertyAnimClip`,参数为 `PropertyAnimClip` 的 `name`。
+
+```ts
+let clip: PropertyAnimClip = animation.getClip('anim_0');
+```
+
+## 获取当前剪辑
+可以使用 [currentClip](/api/classes/PropertyAnimation#currentclip) 方法来获取当前正在播放的 `PropertyAnimClip`。
+
+```ts
+const currentClip = animation.currentClip;
+```
+
+## 获取动画时间
+可以使用 [time](/api/classes/PropertyAnimation#time) 方法来获取当前时间。
+
+```ts
+const currentClip = animation.time;
+```
+
+## 示例
+
+
+
+<<< @/public/demos/animation/propertyAnim.ts
+
diff --git a/docs/guide/animation/skeleton.md b/docs/guide/animation/skeleton.md
new file mode 100644
index 00000000..e075e33c
--- /dev/null
+++ b/docs/guide/animation/skeleton.md
@@ -0,0 +1,176 @@
+# 骨骼动画
+骨骼动画是模型动画中的一种,通过骨骼关节的旋转、平移,变换 `Mesh` 顶点位置,达到驱动模型动画的目的。
+
+::: tip
+1、目前引擎只支持模型内置的骨骼动画,需要用户提前通过3D建模软件制作对应的骨骼动画素材
+2、从 `v0.8` 开始,骨骼动画和Morph动画通过 `AnimatorComponent` 统一驱动
+:::
+
+## 简介
+`Mesh` 上的每个顶点数据,都包含该点受影响的骨骼索引编号,以及受该骨骼影响的权重,这类数据信息统称为蒙皮信息,顶点受影响的骨骼一般限制为4根,更多的骨骼数只会增加计算量,对动画质量没有显著提高。
+
+在 `AnimatorComponent` 组件中,`PrefabBoneData` 包含骨骼关节相关的数据,拥有名称,旋转、平移、父骨骼等信息,多个 `PrefabBoneData` 组成一套完整的骨架 `PrefabAvatarData`
+
+`PropertyAnimationClip` 是一系列骨骼姿势变换的曲线数据集,存储了每根骨骼节点的缩放、旋转、平移的变换数据。
+
+`PropertyAnimationClipState` 为动画播放状态,它与 `PropertyAnimationClip` 关联,用于维护播放状态,以及插值权重等相关数据。
+
+`AnimatorComponent` 是整个动画的驱动组件,它与多个 `PropertyAnimationClipState` 关联,用来在多个动画状态之间切换,融合,驱动整个骨骼动画的最终变换姿势。
+
+
+## 加载动画模型
+当加载带有骨骼动画数据的模型文件后,引擎会自动为模型添加一个 `AnimatorComponent` 组件,并将模型中的动画数据加入其中。可以直接在模型的根实体上获取 `AnimatorComponent` 组件,并播放指定动画。
+```ts
+// load test model
+let soldier = await Engine3D.res.loadGltf('gltfs/glb/Soldier.glb');
+soldier.rotationY = -90;
+soldier.localScale.set(2, 2, 2);
+scene.addChild(soldier);
+
+// get animator component
+let animator = soldier.getComponentsInChild(AnimatorComponent)[0];
+animator.playAnim('Walk');
+```
+
+## 获取动画名称
+组件提供 [clips](/api/classes/AnimatorComponent#clips) 属性,用来获取所有动画剪辑数据对象,该对象都有唯一的 `clipName` ,用以区分不同动画状态。
+```ts
+let clips = animation.clips;
+for (var i = 0; i < clips.length; i++) {
+ console.log("Name:", clips[i].clipName)
+}
+```
+
+## 播放指定动画
+`AnimatorComponent` 组件提供 [playAnim](/api/classes/AnimatorComponent#playAnim) 方法来播放指定动画:
+```ts
+// 播放 Walk 名称的动画
+animator.playAnim('Walk');
+
+// 播放列表中首个动画
+let clips = animation.clips;
+animator.playAnim(clips[0].clipName);
+```
+
+## 调整播放速度
+`playAnim` 方法播放指定动画时,默认为正常速度播放`(1.0)`,如需加速播放通过参数 `speed` 设置,数值越大播放速度越快,数值越小播放速度越慢,当该值为负时将进行倒播。
+```ts
+// 正常播放
+animator.playAnim('Walk', 1);
+
+// 2倍减速
+animator.playAnim('Walk', 0.5);
+
+// 3倍加速
+animator.playAnim('Walk', 3.0);
+
+// 正常倒播
+animator.playAnim('Walk', -1.0);
+
+// 3倍加速倒播
+animator.playAnim('Walk', -3.0);
+```
+
+也可通过 `AnimatorComponent` 上的 `timeScale` 属性设置全局时间线缩放,与 `speed` 相同,数值越大播放速度越快,数值越小播放速度越慢,当该值为负时将进行倒播。
+```ts
+// 正常播放
+animator.timeScale = 1.0;
+
+// 2倍减速
+animator.timeScale = 0.5;
+
+// 2倍加速
+animator.timeScale = 2.0;
+
+// 2倍加速倒播
+animator.timeScale = -2.0;
+```
+
+
+
+<<< @/public/demos/animation/animationSingle.ts
+
+
+
+
+## 动画过渡
+可以使用 [crossFade](/api/classes/AnimatorComponent#crossFade) 方法来使当前动画过渡到指定状态。第一个参数为要过渡到的动画状态名称,第二个参数为过渡时间`(秒)`。
+```ts
+// 播放走路动画
+animation.playAnim('Walk');
+// 从走路状态历时1秒过度到跑步状态
+animation.crossFade('Run', 1.0);
+```
+
+
+
+<<< @/public/demos/animation/animationSingleMix.ts
+
diff --git a/docs/guide/core/clone.md b/docs/guide/core/clone.md
new file mode 100644
index 00000000..61a2da13
--- /dev/null
+++ b/docs/guide/core/clone.md
@@ -0,0 +1 @@
+# 克隆
\ No newline at end of file
diff --git a/docs/guide/core/component.md b/docs/guide/core/component.md
new file mode 100644
index 00000000..9dffa74a
--- /dev/null
+++ b/docs/guide/core/component.md
@@ -0,0 +1,87 @@
+# 实体与组件
+`Orillusion` 核心借鉴了 [ECS](https://wikipedia.org/wiki/Entity_component_system) 结构,遵循 `组合优于继承` 的开发设计原则,实现了自己的组件系统。我们将传统复杂的逻辑划分为独立的、可重复利用的部分,每个部分可以单独封装运行逻辑。然后通过灵活组合的形式,将多个简单组件合并在一起运行从而表现复杂的功能和逻辑。
+
+
+
+## 实体 - Entity
+`Entity` 是组件的容器,用于连接各个组件。它没有实际的功能,如果不添加任何组件,它不会进行任何渲染和功能的表达。
+在实际使用中,我们不会直接操作 `Entity`,一般使用 [Object3D](/guide/core/object) 和 [Scene3D](/guide/core/scene) 作为场景容器节点来连接各个组件。
+
+
+## 组件 - Compnent
+`Component` 是一系列可重复利用的模块或数据,`Entity` 的所有功能都要通过加载 `Component` 来实现。通过定义组件的逻辑回调和生命周期,我们可以将不同的组件进行自由组合,让 `Entity` 具备不同的功能,比如:
+
+- `相机 = Position + Rotation + Camera3D`
+- `灯泡 = Position + Rotation + PointLight + Shadow`
+- `盒子 = Position + Rotation + Scale + BoxGeometry + Material`
+
+其中,所有组件都是独立且平等的,且各自只负责一个单独的功能,这样的拆分使得 `Position` 和 `Rotation` 模块可以重复利用,在使用时按需要组合即可,大大提高代码的利用效率,也能有效降低各个模块间的耦合性。
+
+## 内置组件
+
+在 Orillusion 引擎中,我们已经内置了常用的基础组件,封装了大量的基础功能。比如,`Object3D` 已经内置了 `Transform` 组件,已经包含了 `Position`, `Rotation`, `Scale` 等相关功能,方便用户去操作 `Object3D` 的空间变换。
+
+以下是常用的引擎内置组件列表:
+| 名称 | 描述 |
+| :---: | :---: |
+| Camera3D | 相机组件,设置相机节点 |
+| Transform | 变换组件,用于控制物体矩阵坐标变换 |
+| HoverCameraController | 相机控制组件,用于控制相机位置和朝向 |
+| MeshRenderer | 网格渲染器组件, 用于渲染网格和材质 |
+| DirectLight | 方向光,设定方向光类型和参数 |
+| PointLight | 点光源,设定点光类型和参数 |
+| SpotLight | 聚光灯,设定聚光类型和参数 |
+| ColliderComponent | 碰撞体组件,用于检测碰撞 |
+| SkeletonAnimationComponent | 骨骼动画组件,用于控制动画播放 |
+| AtmosphericComponent | 大气天空盒组件 |
+
+更多内置组件详见 [Components](/api/#components)
+
+## 基础用法
+```ts
+//创建一个实体
+let obj = new Object3D();
+//将实体添加到场景中
+scene.addChild(obj);
+```
+## 添加组件
+```ts
+let obj = new Object3D();
+let light = obj.addComponent(DirectLight)
+```
+
+## 删除组件
+```ts
+let obj = new Object3D();
+let light = obj.removeComponent(DirectLight)
+```
+
+## 停用组件
+```ts
+let obj = new Object3D();
+let light = obj.getComponent(DirectLight)
+light.enable = false
+```
+
+## 启用组件
+```ts
+let obj = new Object3D();
+let light = obj.getComponent(DirectLight)
+light.enable = true
+```
+
+## 组件生命周期
+组件继承自 [CompnentBase](/api/classes/ComponentBase) 类,该类定义了几个基本生命周期:
+
+| 周期 | 描述 |
+| :---: | --- |
+| init | 组件初始化,只在被添加创建时运行一次 |
+| start | 组件开始运行,只在第一次 `onUpdate` 之前调用 |
+| stop | 组件销毁前被调用 |
+| onUpdate | 组件每帧更新时运行 |
+| onBeforeUpdate | 组件渲染更新前运行 |
+| onLateUpdate | 组件渲染更新后运行 |
+| onEnable | 组件 `enable = true` 时回调,组件加入主循环更新 |
+| onDisable | 组件 `enable = false` 时触发,组件将不再触发循环 |
+
+用户可以通过继承 [CompnentBase](/api/classes/ComponentBase) 基类来扩展不同的自定义功能,详情参考 [脚本组件](/guide/core/script)
\ No newline at end of file
diff --git a/docs/guide/core/config.md b/docs/guide/core/config.md
new file mode 100644
index 00000000..8ed65a4c
--- /dev/null
+++ b/docs/guide/core/config.md
@@ -0,0 +1,76 @@
+# EngineSetting
+通过 [EngineSetting](/api/types/EngineSetting) 可以设置引擎的一些常见配置,`EngineSetting` 主要由几个不同配置组成,包括拾取模式,渲染管线,阴影设置,后处理设置,天空盒设置等等。
+
+## 基础使用
+在引擎初始化前,需要先设置引擎的配置,可以通过 `Engine3D` 的 `setting` 的属性来设置。
+
+例如设置场景中可支持的最大灯光数量:
+```ts
+// 最大灯光数量
+Engine3D.setting.light.maxLight = 1024;
+// 启动对数深度
+Engine3D.setting.render.useLogDepth = true;
+// 先配置,后初始化
+await Engine3D.init();
+```
+
+## 拾取模式
+引擎支持两种拾取模式,一种是 `像素级拾取 (pixel)`,一种是 `包围盒拾取 (bound)`。
+
+引擎默认配置是 `bound` 模式, 包围盒拾取通过计算模型的AABB包围盒来拾取,精度不如 `pixel` 模式,但是计算更快,性能更好。包围盒拾取的模式可以通过引擎配置中的 `pick` 属性来设置。
+
+```ts
+Engine3D.setting.pick.enable = true;
+Engine3D.setting.pick.mode = 'bound';
+await Engine3D.init();
+```
+
+像素级拾取模式同样可以通过 `pick` 属性来设置。
+
+```ts
+Engine3D.setting.pick.enable = true;
+Engine3D.setting.pick.mode = 'pixel';
+await Engine3D.init();
+```
+
+详细用法请参考 [拾取事件](/guide/interaction/pickfire)
+
+## 后处理设置
+引擎支持多种后处理,包括各种抗锯齿,bloom,环境光遮蔽等等,可以通过 `render` 配置中的 `postProcessing` 属性来设置。
+
+例如设置 `bloom` 后处理效果:
+```ts
+// 开启 bloom
+Engine3D.setting.render.postProcessing.bloom.enable = true;
+// 设置强度
+Engine3D.setting.render.postProcessing.bloom.intensity = 0.5;
+```
+更多后处理相关设置,详见 [后处理](/guide/advanced/posteffect)
+
+## 阴影设置
+设置阴影的方法和属性,可以通过引擎配置中的 `shadow` 属性来设置。
+
+```ts
+Engine3D.setting.shadow.enable = true; // 开启阴影
+Engine3D.setting.shadow.type = 'SOFT'; // 软阴影类型
+Engine3D.setting.shadow.shadowSize = 2048; // 阴影贴图大小
+Engine3D.setting.shadow.shadowBound = 20; // 阴影区域的世界尺寸
+Engine3D.setting.shadow.shadowBias = 0.01; // 阴影偏移量
+
+```
+详见 [阴影](/guide/graphics/shadow)
+
+## 全局光照设置
+通过配置中的 `gi` 属性来设置全局光照。
+```ts
+Engine3D.setting.gi.enable = true;
+Engine3D.setting.gi.probeYCount = 6;
+Engine3D.setting.gi.probeXCount = 6;
+Engine3D.setting.gi.probeZCount = 6;
+Engine3D.setting.gi.offsetX = 0;
+Engine3D.setting.gi.offsetY = 10;
+Engine3D.setting.gi.offsetZ = 0;
+...
+```
+详见 [全局光照](/guide/advanced/gi)
+
diff --git a/docs/guide/core/engine.md b/docs/guide/core/engine.md
new file mode 100644
index 00000000..c20819ce
--- /dev/null
+++ b/docs/guide/core/engine.md
@@ -0,0 +1,84 @@
+# Engine3D
+`Engine3D` 是引擎核心唯一的全局实例,主要有以下几个常用方法:
+1. 调用 `Engine3D.init()` 来初始化引擎
+2. 调用 `Engine3D.startRenderView()` 开启视图渲染循环
+3. `Engine3D.res` 加载网络贴图或模型资源,详见 [资源加载](/guide/resource/Readme)
+4. `Engine3D.inputSystem` 统一管理用户的输入事件,详见 [交互](/guide/interaction/pointer)
+5. `Engine3D.setting` 统一配置渲染相关功能,详见 [配置](/guide/core/config)
+
+## 初始化
+通过 `Engine3D.init()` 方法来初始化引擎,默认参数可以为空。
+
+引擎内部的初始化需要请求 `GPU` 设备,初始化请求 `GPU` 设备是异步过程,因此需要用异步的方式调用,我们推荐使用 `async/await` 字段进行调用。
+
+```ts
+Engine3D.init().then(()=>{
+ // ...
+})
+// or
+async function run(){
+ await Engine3D.init();
+ // ...
+}
+run()
+```
+
+## 渲染循环回调
+在初始化时,通过传入参数,可以获取渲染主循环的回调,并在回调中执行自定义逻辑。
+
+```ts
+await Engine3D.init({
+ beforeRender: ()=>{
+ // 每一帧渲染前回调
+ },
+ renderLoop: ()=>{
+ // 每一帧回调
+ },
+ lateRender: ()=>{
+ // 每一帧渲染后回调
+ }
+});
+```
+
+## 配置 Canvas
+除了配置渲染回调,在初始化时还可以指定渲染的 `canvas`,如果没有指定,则引擎默认创建一个覆盖整个窗口的不透明 `canvas`。
+
+```ts
+await Engine3D.init({
+ canvasConfig:{
+ canvas: document.getElementById("xxx"), // 指定 canvas 元素, 可以自定义管理 canvas 大小或布局
+ alpha: true, // 是否背景透明, 默认 false
+ zIndex: 1, // CSS z-index, 默认 0
+ backgroundImage: "path/to/bg", // 若 alpha 透明时的背景图片
+ devicePixelRatio: 1 // 渲染 DPR, 默认使用 window.devicePixelRatio
+ }
+});
+```
+::: tip
+降低 `devicePixelRatio` 可以有效降低渲染压力,提高渲染性能,但同时渲染分辨率也会降低,可能增加锯齿效果
+:::
+
+更多详细配置,请参考 [CanvasConfig](/api/types/CanvasConfig)
+
+## 开始渲染
+在引擎初始化完成之后,需要创建一个 [View3D](/api/classes/View3D) 来开始渲染。`View3D` 至少需要一个场景 [Scene3D](/guide/core/scene) 和一个观察相机 [Camera3D](/api/classes/Camera3D) 才能启动,基本用法如下:
+
+```ts
+await Engine3D.init();
+// 创建场景
+this.scene = new Scene3D();
+
+//开始渲染
+let view = new View3D();
+view.scene = this.scene;
+view.camera = this.camera;
+Engine3D.startRenderView(view);
+
+// 暂停渲染循环
+Engine3D.pause();
+// 恢复渲染循环
+Engine3D.resume();
+```
+---
+详细用法请参考 [Engine3D](/api/classes/Engine3D) API
+
diff --git a/docs/guide/core/object.md b/docs/guide/core/object.md
new file mode 100644
index 00000000..5a337113
--- /dev/null
+++ b/docs/guide/core/object.md
@@ -0,0 +1,128 @@
+# Object3D
+`Object3D` 是引擎内置的实体对象,通常被当做基本的组件容器,可以通过不同组件组合来实现不同的功能。
+
+
+
+`Object3D` 默认自带了 [Transform](/guide/core/transform) 组件,在没有其它组件时,只保留基础的容器能力,可以被当做父节点添加或组合其它的 `Object3D`。
+
+`Object3D`提供了一系列方法,可以方便添加或者查找子对象以及子对象所附加的组件信息,还可以通过代码的方式和其它组件建立连接。
+
+
+## 节点状态
+
+初始化一个 `Object3D` 对象之后,默认处于显示状态,通过设置 `transform.enable` 的属性变更节点的状态,如果设置为 `false`,这将停用该节点对象以及该节点下所有的子节点对象,同时附加在这些节点之上的所有组件也将停止调用。
+```ts
+let obj = new Object3D();
+obj.transform.enable = false; //隐藏节点及其所有子节点
+```
+
+## 节点的添加和移除
+添加一个子节点,可以使用 [addChild](/api/classes/Object3D#addchild) 方法
+移除一个子节点,可以使用 [removeChild](/api/classes/Object3D#removeChild) 方法
+移除特定位置子节点,可以使用 [removeChildByIndex](/api/classes/Object3D#removeChildByIndex) 方法
+从父级移除自己,可以使用 [removeFromParent](/api/classes/Object3D#removeFromParent) 方法
+移除所有子节点,可以使用 [removeAllChild](/api/classes/Object3D#removeAllChild) 方法
+
+```ts
+let parent = new Object3D();
+let child = new Object3D();
+//添加节点
+parent.addChild(child);
+//移除节点
+parent.removeChild(child);
+//or 子节点自己删除
+child.removeFromParent();
+//or 移除所有子节点
+parent.removeAllChild();
+```
+
+## 添加和移除组件
+通过 `Object3D` 自带的 [addComponent](/api/classes/Object3D#addComponent) 和 [removeComponent](/api/classes/Object3D#removeComponent) 方法,可以方便的在运行时添加和移除组件。
+
+```ts
+let obj = new Object3D();
+//为节点添加平行光组件
+let dl = obj.addComponent(DirectLight);
+//移除组件
+obj.removeComponent(DirectLight);
+```
+
+## 获取组件节点
+所有的组件都是继承于 `ComponentBase`,在组件内部可以通过 `this.object3D` 属性获得当前组件所属的节点。
+```ts
+//自定义一个组件,效果是把节点的X轴位置增加10
+class CustomComponent extends ComponentBase {
+ public start() {
+ this.object3D.x += 10;
+ }
+}
+```
+
+## 获取节点的其它组件
+通过 `Object3D` 自带的 [getComponent](/api/classes/Object3D#getComponent) 方法,可以方便的获取节点上的组件。
+```ts
+//自定义一个组件,效果是变更节点上的另一个灯光组件,改变灯光的颜色
+class CustomComponent extends ComponentBase {
+ public start() {
+ let light = this.object3D.getComponent(DirectLight)
+ light.lightColor = new Color(1, 0, 0);
+ }
+}
+let obj = new Object3D();
+obj.addComponent(DirectLight);
+obj.addComponent(CustomComponent);
+```
+
+## 查找子节点
+通过方法 [getChildByIndex](/api/classes/Object3D#getChildByIndex) 可以按子节点层级顺序来获取子节点
+通过方法 [getChildByName](/api/classes/Object3D#getChildByName) 可以在知道子节点名称的情况下获取子节点
+
+## 遍历所有子节点
+我们可以通过 [forChild](/api/classes/Object3D#forChild) 遍历当前节点下的所有节点,包括子节点的子节点,通过回调函数完成具体操作。
+```ts
+// 遍历所有子节点,执行回调
+parent.forChild((child)=>{
+ // 具体操作逻辑
+})
+```
+
+## 释放节点资源
+通过方法 [destroy](/api/classes/Object3D#destroy) 可以释放当前节点的资源,包括对象本身和对象加载的所有组件。但默认情况下,渲染组件所需的材质、几何体以及贴图资源不会随着节点一起释放,因为多个物体可能正在共享同一个材质和几何体,或者未来场景需要使用到这些资源。如果想要释放所有资源,一般需要手动释放渲染对象。
+```ts
+// 创建对象
+let obj = new Object3D();
+//为节点添加渲染组件
+let mr = obj.addComponent(MeshRenderer)
+let geometry = mr.geometry = new BoxGeometry()
+let material = mr.material = new LitMaterial()
+
+// 销毁对象,释放内存
+obj.destroy() // 但不会释放 geometry 和 material
+geometry.destroy() // 手动释放几何资源
+material.destroy() // 手动释放材质资源
+```
+如果确定节点资源不再使用,可以使用 `destroy(true)` 附加参数来强制销毁节点的所有相关资源。
+::: tip
+如果渲染对象正在被共享使用,强制删除可能会触发引擎错误,导致渲染无法继续
+:::
+```ts
+let obj1 = new Object3D();
+let obj2 = new Object3D();
+
+// 创建几何体和材质
+let metry = new BoxGeometry()
+let material = new LitMaterial()
+
+// 为节点添加渲染组件, 共享几何体和材质信息
+let mr1 = obj1.addComponent(MeshRenderer)
+let mr2 = obj2.addComponent(MeshRenderer)
+mr1.geometry = mr2.geometry = geometry
+mr2.material = mr2.material = material
+
+// 若强制销毁其中一个,会触发引擎报错,渲染无法继续
+obj1.detroy(true) // 会强制释放 geometry 和 material
+```
+
+更多详细用法请参看 [Object3D](/api/classes/Object3D) API
+
+
diff --git a/docs/guide/core/scene.md b/docs/guide/core/scene.md
new file mode 100644
index 00000000..d7b0219e
--- /dev/null
+++ b/docs/guide/core/scene.md
@@ -0,0 +1,156 @@
+# Scene3D
+
+`Scene3D` 继承自 `Object3D`,拥有 `Object3D` 相同的属性和方法,不同的是 `Scene3D` 是引擎渲染根节点,是场景树的最高层级,所有想要被渲染的节点必须添加到 `Scene3D` 或 `Scene3D` 的子节点中。
+
+
+
+`Scene3D` 主要功能:
+1. `Scene3D` 中定义了场景的天空盒和环境光贴图。
+2. `Scene3D` 可以用来控制和管理场景树中的节点,例如:添加、删除、查找节点。
+
+
+## 基础用法
+```ts
+await Engine3D.init();
+// 创建场景
+let scene = new Scene3D();
+// 添加一个节点
+let obj = new Object3D();
+scene.addChild(obj);
+// 添加相机节点
+let cameraObj = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+scene.addChild(cameraObj);
+
+// 开始渲染
+let view = new View3D();
+view.scene = scene;
+view.camera = camera;
+Engine3D.startRenderView(view);
+
+// 移除一个节点
+scene.removeChild(obj);
+```
+
+## 大气天空盒
+可以通过 [AtmosphericComponent](/api/classes/AtmosphericComponent.md) 组件创建一个大气散射的天空盒:
+```ts
+// 添加大气天空盒组件,自动生成背景和环境光
+let sky = scene3D.addComponent(AtmosphericComponent);
+```
+详见以下示例:
+
+
+<<< @/public/demos/core/scene.ts
+
+通过 `AtmosphericComponent` 组件的 `sunX`, `sunY`, `exposure` 等属性来调整环境光的的变化。
+
+```ts
+let sky = scene3D.addComponent(AtmosphericComponent);
+sky.sunY = 0.54 // 太阳垂直位置,可以调节环境光亮度
+sky.exposure = 1.5; //调整环境光曝光度, 默认值1
+sky.roughness = 0.5; // 设置天空盒背景模糊强度, 范围[0, 1], 默认值0
+```
+
+### 自动跟随灯光
+除了手动设置 `sunX`, `sunY` 的数值,引擎还支持自动跟随场景中的灯光角度调整大气环境光位置
+
+```ts
+// 平行光
+let lightObj3D = new Object3D();
+lightObj3D.rotationX = 46;
+lightObj3D.rotationY = 62;
+lightObj3D.rotationZ = 0;
+let directLight = lightObj3D.addComponent(DirectLight);
+
+let sky = scene3D.addComponent(AtmosphericComponent);
+// 跟随平行光自动设置 sunX sunY
+sky.relativeTransform = directLight.transform
+```
+
+
+## 自定义天空盒
+如果想要自定义天空盒材质纹理,可以通过给 `Scene3D` 添加 `SkyRenderer` 组件来显示自定义背景; 同时,可以通过 `Scene3D` 对象的 `envMap` 属性来设置环境光。
+
+### 1. 单色背景和环境光
+可以通过 [SolidColorSky](/api/classes/SolidColorSky) 创建一个纯色的贴图来设置背景和环境光:
+```ts
+import {Scene3D, SolidColorSky, Color, SkyRenderer} from '@orillusion/core';
+
+let scene = new Scene3D();
+// 创建一个纯色贴图
+let colorSky = new SolidColorSky(new Color(0.5, 1.0, 0.8, 1))
+// 添加 SkyRenderer 组件,然后设置 map 贴图
+let sky = scene.addComponent(SkyRenderer);
+sky.map = colorSky;
+
+// 同时设置单色环境光
+scene.envMap = colorSky;
+```
+
+### 2. 十字天空盒
+可以通过加载 [十字立方贴图](/guide/graphics/texture#十字立方贴图) 设置天空盒:
+```ts
+// 可以加载一张完整十字立方贴图
+let textureCube = Engine3D.res.loadTextureCube('path/to/sky.png')
+// 或加载独立的6张立方贴图
+textureCube = Engine3D.res.loadTextureCube([
+ 'path/to/px.png',
+ 'path/to/nx.png',
+ 'path/to/py.png',
+ 'path/to/ny.png',
+ 'path/to/pz.png',
+ 'path/to/nz.png'
+])
+// 添加 SkyRenderer 组件,设置 map 贴图
+let sky = scene.addComponent(SkyRenderer);
+sky.map = textureCube;
+
+// 设置环境光
+scene.envMap = textureCube;
+```
+> 目前十字天空盒只支持 `LDR` 普通格式的图片。
+
+### 3. 全景天空盒
+引擎还支持设置 [全景图(equirectangular)](https://en.wikipedia.org/wiki/Equirectangular_projection) 类型的天空盒。我们可以通过内置的 `res` 快速加载普通 `RGBA` 格式的 `LDR` 图片, 也支持加载 `RGBE` 格式的 `HDR` 图片:
+```ts
+// 普通全景贴图
+let skyTexture = Engine3D.res.loadLDRTextureCube('path/to/sky.png');
+// HDR全景贴图
+skyTexture = Engine3D.res.loadHDRTextureCube('path/to/sky.hdr');
+
+// 添加 SkyRenderer 组件,设置 map 贴图
+let sky = scene.addComponent(SkyRenderer);
+sky.map = skyTexture;
+
+// 设置环境光
+scene.envMap = skyTexture;
+```
+
+### 4. 透明背景
+如果想显示透明背景,通过关闭天空盒组件来隐藏背景,注意一般还需要使用透明 [Canvas](/guide/core/engine#配置-canvas) 才能生效:
+
+```ts
+// 初始化引擎
+await Engine3D.init({
+ canvasConfig:{
+ alpha: true, // 使用透明的 Canvas 配置
+ zIndex: 1
+ }
+});
+let scene = new Scene3D();
+
+// 可以先添加大气天空盒,获得基本环境光
+let sky = scene3D.addComponent(AtmosphericComponent);
+// 再隐藏大气天空盒, 环境光不会消失
+sky.enable = false
+```
+当然也可以不添加大气天空盒或背景,直接设置环境光
+```ts
+// 设置一个简单白色环境光
+scene.envMap = new SolidColorSky(new Color(0.75, 0.75, 0.75));
+// 或者加载环境贴图
+scene.envMap = await Engine3D.res.loadHDRTextureCube('path/to/sky.hdr');
+```
+
+更多详细用法请参考 [Scene3D](/api/classes/Scene3D)
\ No newline at end of file
diff --git a/docs/guide/core/script.md b/docs/guide/core/script.md
new file mode 100644
index 00000000..b6c86b1e
--- /dev/null
+++ b/docs/guide/core/script.md
@@ -0,0 +1,106 @@
+# 脚本组件
+
+我们已经在 [组件](/guide/core/component) 中介绍了组件的 [生命周期](/guide/core/component#组件生命周期),用户可以继承 [ComponentBase](/api/classes/ComponentBase) 基类进行自定义组件的开发工作。用户可以通过覆写 `(overwrite)` 组件基类的生命周期函数来自定义运行逻辑:
+ - `初始化/卸载`: 如 `init` 和 `destroy`
+ - `状态变化`: 如 `start`,`stop`, `onEnable` 和 `onDisable`
+ - `更新逻辑`: 如 `onUpdate`, `onLateUpdate` 和 `onBeforeUpdate`
+
+
+## 基础用法
+为实体添加自定义脚本
+```ts
+class Script extends ComponentBase {
+ // 覆写 初始化
+ public init(){
+ // 该函数在组件被创建时调用,可以用来初始化内部的变量
+ // 注意,此时组件还没有被挂载到 Object3D 上,所以无法访问 this.object3D
+ }
+ // 覆写 渲染开始
+ public start(){
+ // 该函数在组件开始渲染前被调用,
+ // 此时可以访问 this.object3D, 可以用来获取节点的属性或其他组件
+ }
+ // 覆写 onUpdate
+ public onUpdate() {
+ // 每帧渲染循环调用,通常定义节点的循环逻辑
+ // 例如,每一帧更新物体旋转角度
+ this.object3D.rotationY += 1;
+ }
+}
+
+let ball: Object3D = new Object3D();
+ball.addComponent( Script );
+```
+在自定义脚本中,可以通过 `this.object3D` 获取当前组件挂载到的 `object3D` 对象,从而进行对象状态的更改。
+游戏/动画开发的一个关键点是在每一帧渲染前更新物体的行为,状态和方位。这些更新操作通常可以定义在组件自己的 `onUpdate` 回调中。引擎会自动注册 `onUpdate` 回调到主循环,实现每帧更新逻辑。
+
+## 示例
+下面我们通过三个不同的脚本动画示例来了解一下更复杂的脚本组件使用方法。
+
+### 1. 光照动画脚本组件
+---
+
+
+<<< @/public/demos/core/script_light.ts
+
+```ts
+class LightAnimation extends ComponentBase {
+ private light: DirectLight;
+ private color: Color;
+
+ // 覆写 start 初始化变量
+ protected start() {
+ this.light = this.object3D.getComponent(DirectLight);
+ this.color = this.light.lightColor;
+ }
+
+ onUpdate() {
+ // 更新 lightColor
+ this.color.r = Math.pow(Math.sin(Time.time * 0.001), 10);
+ this.light.lightColor = this.color;
+ }
+}
+```
+这里我们通过改变每一帧光照颜色的红色分量,使之随时间变化,从而产生最终光照动画的效果。
+
+### 2. 材质动画脚本组件
+---
+
+
+<<< @/public/demos/core/script_mat.ts
+
+```ts
+class MaterialAnimation extends ComponentBase {
+ private material: LitMaterial;
+
+ // 覆写 start 初始化变量
+ protected start() {
+ let mr = this.object3D.getComponent(MeshRenderer);
+ this.material = mr.material;
+ }
+
+ onUpdate() {
+ // 更新 baseColor
+ let delta = Time.time * 0.001
+ this.material.baseColor = new Color(Math.sin(delta), Math.cos(delta), Math.sin(delta));
+ }
+}
+```
+类似的,我们通过改变对象材质对象,比如跟随时间改变材质颜色,从而达到相应的动画效果。
+
+### 3. 路径动画脚本组件
+---
+
+
+<<< @/public/demos/core/script_path.ts
+
+```ts
+class PathAnimation extends ComponentBase {
+ onUpdate() {
+ // 更新 Position
+ this.object3D.x = Math.sin(Time.time * 0.001) * 2;
+ this.object3D.y = Math.cos(Time.time * 0.001) * 2;
+ }
+}
+```
+这次我们通过更改 `Object3D` 的 `Position` 属性,使物体随时间变化在 `xy` 平面内做一个圆周运动。
diff --git a/docs/guide/core/transform.md b/docs/guide/core/transform.md
new file mode 100644
index 00000000..dee7619b
--- /dev/null
+++ b/docs/guide/core/transform.md
@@ -0,0 +1,64 @@
+# 坐标变换
+
+[Transform](/api/classes/Transform) 组件是系统内置的基础 [组件](/guide/core/component),默认会添加在所有 `Object3D` 上,用来控制容器的`位置`,`缩放` 和 `旋转`坐标参数。
+
+---
+
+
+<<< @/public/demos/core/transform.ts
+
+## Position
+场景节点相对父容器的位置
+```ts
+let obj = new Object3D();
+//第一种用法(推荐用法)
+obj.x = 0;
+obj.y = 0;
+obj.z = 0;
+// or
+obj.transform.x = 0;
+obj.transform.y = 0;
+obj.transform.z = 0;
+//第二种用法
+obj.transform.localPosition.set(0,0,0);
+//第三种用法
+obj.transform.localPosition = new Vector3(0,0,0);
+```
+
+## Rotation
+场景节点相对父容器的旋转
+```ts
+let obj = new Object3D();
+//第一种用法(推荐用法)
+obj.rotationX = 0;
+obj.rotationY = 0;
+obj.rotationZ = 0;
+// or
+obj.transform.rotationX = 0;
+obj.transform.rotationY = 0;
+obj.transform.rotationZ = 0;
+//第二种用法
+obj.transform.localRotation.set(0,0,0);
+//第三种用法
+obj.transform.localRotation = new Vector3(0,0,0);
+```
+
+## Scale
+场景节点相对父容器的缩放
+```ts
+let obj = new Object3D();
+//第一种用法
+obj.scaleX = 1;
+obj.scaleY = 1;
+obj.scaleZ = 1;
+// or
+obj.transform.scaleX = 1;
+obj.transform.scaleY = 1;
+obj.transform.scaleZ = 1;
+//第二种用法
+obj.transform.localScale.set(1,1,1);
+//第三种用法
+obj.transform.localScale = new Vector3(0,0,0);
+```
+
+其它用法详见 [Transform](/api/classes/Transform) API
\ No newline at end of file
diff --git a/docs/guide/getting-started.md b/docs/guide/getting-started.md
deleted file mode 100644
index 5c34521f..00000000
--- a/docs/guide/getting-started.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Getting Started
-
-::: tip NOTE
-TODO, Coming soon...
-:::
\ No newline at end of file
diff --git a/docs/guide/getting_start/draw_cube.md b/docs/guide/getting_start/draw_cube.md
new file mode 100644
index 00000000..f217d01a
--- /dev/null
+++ b/docs/guide/getting_start/draw_cube.md
@@ -0,0 +1,111 @@
+# 绘制立方体
+在这一节,我们将通过一个绘制立方体的实例了解一下引擎的使用流程:
+
+
+
+<<< @/public/demos/getting_start/cube.ts
+
+## 引入模块
+首先,我们需要引入相应的模块:
+```ts
+import {
+ Engine3D,
+ Scene3D,
+ Object3D,
+ Camera3D,
+ View3D,
+ LitMaterial,
+ BoxGeometry,
+ MeshRenderer,
+ DirectLight,
+ HoverCameraController,
+ AtmosphericComponent
+} from '@orillusion/core';
+```
+| 模块 | 说明 |
+| --- | --- |
+| Engine3D | Engine3D 类为引擎主体,包含引擎初始化启动、运行渲染等核心方法 |
+| Scene3D | 通过新建 Scene3D 类可以创建一个场景实例,该场景实例在程序中通常作为根节点被使用 |
+| Object3D | Object3D 类定义了物体对象,该对象包含常用的物体属性如位置、旋转等参数 |
+| Camera3D | 通过新建 Camera3D 类可以创建一个摄像机3D组件的实例,该实例可以作为相机节点添加到场景中 |
+| View3D | View3D,指定引擎渲染的目标场景和观察相机 |
+| LitMaterial | 通过 LitMaterial 类可以创建材质实例,并通过设置材质参数实现不同的材质效果 |
+| BoxGeometry | 通过 BoxGeometry 类可以创建一个长方体几何体 |
+| MeshRenderer | MeshRenderer组件,为物体提供 mesh 对象几何渲染 |
+| DirectLight | 平行光组件,可以设置平行光组件的颜色、强度属性和光照角度来获得合适的光照效果 |
+| HoverCameraController | 盘旋相机组件,可以控制相机围绕观察点移动 |
+| AtmosphericComponent | 引擎内置的大气天空盒组件 |
+
+## 初始化引擎
+```ts
+await Engine3D.init();
+```
+
+## 新建场景根节点
+```ts
+let scene3D = new Scene3D();
+```
+
+## 添加天空盒
+```ts
+// 添加大气散射天空组件
+let sky = scene3D.addComponent(AtmosphericComponent);
+```
+
+## 添加摄像机控件
+```ts
+// 新建摄像机实例
+let cameraObj = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+// 根据窗口大小设置摄像机视角
+camera.perspective(60, window.innerWidth / window.innerHeight, 1, 5000.0);
+// 设置相机控制器
+let controller = camera.object3D.addComponent(HoverCameraController);
+controller.setCamera(0, 0, 15);
+// 添加相机节点
+scene3D.addChild(cameraObj);
+```
+
+## 添加光照
+```ts
+// 新建光照
+let light = new Object3D();
+// 添加直接光组件
+let component = light.addComponent(DirectLight);
+// 调整光照参数
+light.rotationX = 45;
+light.rotationY = 30;
+component.intensity = 2;
+// 添加光照对象
+scene3D.addChild(light);
+```
+
+## 新建对象并为其添加 MeshRenderer
+为对象添 MeshRenderer 后,我们需要将几何体和材质挂载到对象的 MeshRenderer 上。
+```ts
+// 新建对象
+const obj = new Object3D();
+// 为对象添 MeshRenderer
+let mr = obj.addComponent(MeshRenderer);
+// 设置几何体
+mr.geometry = new BoxGeometry(5, 5, 5);
+// 设置材质
+mr.material = new LitMaterial();
+```
+
+## 将物体对象添加到场景中
+```ts
+scene3D.addChild(obj);
+```
+
+## 渲染场景
+```ts
+// 创建View3D对象
+let view = new View3D();
+// 指定渲染的场景
+view.scene = scene3D;
+// 指定使用的相机
+view.camera = camera;
+// 开始渲染
+Engine3D.startRenderView(view);
+```
diff --git a/docs/guide/getting_start/initialization.md b/docs/guide/getting_start/initialization.md
new file mode 100644
index 00000000..53661720
--- /dev/null
+++ b/docs/guide/getting_start/initialization.md
@@ -0,0 +1,50 @@
+# 初始化引擎
+## 创建 Engine3D 实例
+在使用引擎前,必须通过 `Engine3D.init()` 方法进行初始化,引擎会自动创建一个 `Engine3D` 实例用于后续的操作
+```ts
+import { Engine3D } from '@orillusion/core';
+
+Engine3D.init().then(()=>{
+ // 进行后续操作
+});
+```
+::: tip
+`Engine3D.init()` 是一个异步 API,推荐配合 `async/await` 进行调用
+:::
+
+```ts
+import { Engine3D } from '@orillusion/core';
+
+async function demo(){
+ await Engine3D.init();
+ // 进行后续操作
+}
+demo();
+```
+
+## 手动创建 Canvas
+默认参数下,`Engine3D.init()` 实例会自动生成一个以屏幕大小为宽高的 `canvas` 画布。如果不想使用引擎自动创建的画布,用户也可以手动创建画布。
+比如,用户可以在 HTML 中插入一个 `` 标签,并指定一个 id:
+```html
+
+```
+::: tip
+使用外部画布需要手动设定 `style` 大小,比如具体的像素数值,或设置为 `100%` 来自动占满父级容器
+:::
+
+接下来,在 ts 代码中通过 `document.getElementById` 获取到该画布:
+```ts
+let canvas = document.getElementById('canvas');
+```
+
+并使用 `canvasConfig` 将 `canvas` 参数传入 `init()` 方法中进行初始化:
+```ts
+import { Engine3D } from '@orillusion/core';
+
+let canvas = document.getElementById('canvas');
+await Engine3D.init({
+ canvasConfig: { canvas }
+});
+```
+
+更多配置请参看 [Engine3D](/guide/core/engine)
\ No newline at end of file
diff --git a/docs/guide/getting_start/install.md b/docs/guide/getting_start/install.md
new file mode 100644
index 00000000..3df48878
--- /dev/null
+++ b/docs/guide/getting_start/install.md
@@ -0,0 +1,79 @@
+# 安装
+
+::: tip
+`WebGPU` 属于低级访问权限 API,为了防止[中间人攻击](https://en.wikipedia.org/wiki/Man-in-the-middle_attack),大部分浏览器限制仅能在 [Secure contexts](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts) 中访问使用。当发布基于 `WebGPU` 构建的 Web 应用时,需要用户自行部署基于 `https` 的安全域名,或基于 `localhost` 的域名进行访问,包括 `http://127.0.0.1`,`http://localhost` 或 `http://*.localhost` 等自定义域名。
+:::
+
+## 通过 NPM 安装
+我们推荐使用基于 `Node.js` 的前端构建工具来开发 `Web3D` 应用,比如配合 [Vite](https://vitejs.dev/) 或 [Webpack](https://webpack.js.org/) 等前端生态框架来构建复杂的前端项目,当然也可以更方便的使用 [TypeScript](https://www.typescriptlang.org/) 进行开发。
+1. 安装依赖
+
+使用 [npm](https://www.npmjs.com/) 命令在提示行中安装引擎依赖:
+```bash
+npm install @orillusion/core --save
+```
+2. 引入模块
+
+引入指定模块:
+```ts
+import { Engine3D, Camera3D } from '@orillusion/core'
+```
+或引入全局模块:
+```ts
+import * as Orillusion from '@orillusion/core'
+```
+
+::: tip
+`Orillusion` 引擎需要支持最新的 `WebGPU` 标准的浏览器运行,例如 `Chrome >= 114`, 因此无需兼容旧版 `JavaScript` 语法,默认基于 `ESNext` 进行构建发布。如果您使用 [Vite](https://vitejs.dev/) 或 [Webpack](https://webpack.js.org/) 等构建工具来部署项目,推荐将构建目标设定为 `ES2021` 及以上版本来确保所有 API 以最佳状态运行。
+:::
+
+## 通过 `CDN` 链接引入
+我们也支持借助 `
+
+
+```
+页面全局加载 `
+```
+
+### 2. ESModule 构建版本
+我们推荐使用 [ESModule](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Modules) 语法进行开发。大多数浏览器已经支持原生 `ES` 模块,用户可以直接引入符合 `ESNext` 标准的 `orillusion.es.js` 构建版本进行快速开发:
+
+```html
+
+```
+
+注意我们使用了 `
+
+
+```
\ No newline at end of file
diff --git a/docs/guide/getting_start/load_model.md b/docs/guide/getting_start/load_model.md
new file mode 100644
index 00000000..cee8a8fb
--- /dev/null
+++ b/docs/guide/getting_start/load_model.md
@@ -0,0 +1,22 @@
+# 加载3D模型
+我们推荐使用 `glTF`(Graphics Language Transmission Format)作为模型加载格式。
+
+`glTF`(Graphics Language Transmission Format)规范由 `khronos` 发布,能够高效传输和加载 3D 场景、模型。`glTF`(Graphics Language Transmission Format)会压缩 3D 资源大小,以减少应用文件大小及处理难度。更多关于 `glTF` 的介绍请参看 [glTF官网](https://www.khronos.org/gltf/)。
+
+## 基本使用
+引擎内已经封装了简易的 [资源管理](/guide/resource/Readme) 模块,我们可以使用 [loadGltf](/api/classes/Res#loadgltf) API 很方便的加载 `gltf` 或 `glb` 文件:
+```ts
+let scene = new Scene3D();
+// 加载 gltf 文件
+let data = await Engine3D.res.loadGltf('sample.gltf');
+// 添加至场景
+scene.addChild(data);
+```
+更多详细用法,请参考 [GLTF](/guide/resource/gltf) 介绍
+
+## 示例
+这里我们来看一个加载模型的简单示例:
+
+
+
+<<< @/public/demos/getting_start/load_model.ts{33}
\ No newline at end of file
diff --git a/docs/guide/getting_start/script.md b/docs/guide/getting_start/script.md
new file mode 100644
index 00000000..67d5be37
--- /dev/null
+++ b/docs/guide/getting_start/script.md
@@ -0,0 +1,35 @@
+---
+aside: false
+---
+# 第一个脚本组件
+`Orillusion` 的核心是 [组件系统](/guide/core/component),除了引擎内置的基础组件,用户也可以通过编写自定义组件来扩充任意功能。这一节我们将学习如何利用自定义组件为物体添加动画脚本,比如为上一节创建的立方体添加旋转动画。先来看看最终的效果:我们为立方体添加了一个自定义 `RotateScript` 组件,使之绕 `Y` 轴连续转动。
+
+
+
+<<< @/public/demos/getting_start/script.ts
+
+用户可以继承 `ComponentBase` 基类,并通过组件的 [生命周期](/guide/core/component#组件生命周期) 回调中编写自己的逻辑代码。借助脚本组件的更新回调设置每一帧物体的行为,状态和方位。
+示例中我们以一个包含 `onUpdate` 生命周期的简单脚本组件为例,编写一个为物体添加旋转动画的脚本。
+
+```ts
+class RotateScript extends ComponentBase {
+ public onUpdate() {
+ // update 生命周期,主循环每一帧执行
+ }
+}
+```
+
+我们可以通过 `this.object3D` 获取当前组件挂载到的 [object3D](/guide/core/object) 对象,从而更改节点的状态。例如,在 `update` 中更新 `object3D.rotationY`, 即每一帧围绕 `Y` 轴旋转加 `1` 度。
+
+```ts
+public onUpdate() {
+ this.object3D.rotationY += 1;
+}
+```
+
+定义好组件后,我们利用 [addComponent](/api/classes/Object3D#addcomponent) 将组件挂载到对象上即可。
+
+```ts
+obj.addComponent(RotateScript);
+```
+引擎主循环会自动运行 `onUpdate` 回调完成动画效果,更多自定义组件的使用方法可参考 [自定义组件](/guide/core/component) 页面。
diff --git a/docs/guide/graphics/camera.md b/docs/guide/graphics/camera.md
new file mode 100644
index 00000000..166029f6
--- /dev/null
+++ b/docs/guide/graphics/camera.md
@@ -0,0 +1,235 @@
+# 摄像机
+
+相机是为用户显示或捕获虚拟世界的工具,好比现实世界中观察事物的眼睛,所有炫酷的影像都需要通过相机渲染。在每个场景中必须至少有一个相机才能查看到场景内的对象。`Orillusion` 已经封装了常用的 [相机类型](#相机类型) 和 [控制器](#相机组件),用户也可以通过 [自定义组件](/guide/core/component) 为相机扩展功能。
+
+## 基本用法
+```ts
+import { Object3D, Scene3D, Camera3D } from '@orillusion/core'
+// 实例化一个场景
+let scene = new Scene3D();
+// 实例化一个节点
+let cameraObj = new Object3D();
+// 加载一个相机组件
+let camera = cameraObj.addComponent(Camera3D);
+// 将相机添加至场景
+scene.addChild(cameraObj);
+
+// 创建3D视图
+let view = new View3D();
+// 填充场景至3D视图
+view.scene = scene;
+// 填充相机至3D视图
+view.camera = camera;
+// 开始渲染
+Engine3D.startRenderView(view);
+```
+如果场景内有多个相机,可以通过设置 `view.camera` 来切换目标相机:
+```ts
+// 如果有多个相机
+let cameraObj1 = new Object3D();
+let camera1 = cameraObj.addComponent(Camera3D);
+let cameraObj2 = new Object3D();
+let camera2 = cameraObj.addComponent(Camera3D);
+
+// 创建3D视图
+let view = new View3D();
+// 设置渲染场景
+view.scene = scene;
+// 设置 camera1
+view.camera = camera1;
+...
+// 切换使用 camera2 进行渲染
+view.camera = camera2;
+
+```
+
+## 相机位置
+更改相机位置主要有三种方式:
+1. 通过 `TransForm` 变换:通过相机节点 `Object3D` 的 [transForm](/guide/core/transform) 属性可以手动设置相机的位置和方向角度:
+```ts
+// 创建一个节点
+let cameraObj = new Object3D();
+// 添加相机组件
+let camera = cameraObj.addComponent(Camera3D);
+// 设定 Object3D 的 Position 或 Rotation
+cameraObj.x = 10;
+cameraObj.rotateX = 90;
+...
+```
+
+2. 通过组件 `lookAt` 函数:相机组件提供的 [lookAt](/api/classes/Camera3D#lookat) 函数 可以同时设置相机 `Object3D` 的位置和观察目标位置:
+
+```ts
+// 创建一个节点
+let cameraObj = new Object3D();
+// 添加相机组件
+let camera = cameraObj.addComponent(Camera3D);
+// 使用 Camera3D 组件 lookAt 改变 Object3D 的位置和方向角度
+camera.lookAt(new Vector3(0,0,10), new Vector3(0,0,0), new Vector3(0,0,1));
+```
+| 参数 | 类型 | 描述 | 示例 |
+| --- | --- | ------ | --- |
+| pos | Vector3 | 自身的位置 (全局) | Vector3(0, 0, 0) |
+| target | Vector3 | 目标的位置 (全局) | Vector3(0, 1, 0) |
+| up | Vector3 | 相机朝上方向的坐标轴 | Vector3(0, 1, 0) |
+3. 相机控制器:引擎内置了几种常用的 [控制器组件](#相机组件),可以根据用户的输入交互自动调整相机的位置属性。
+
+
+## 相机类型
+目前主要支持正交相机、透视相机供开发者使用。
+
+### 正交投影
+
+在正交相机模式下无论物体距离相机远或近在渲染结果中物体的大小不变,我们通常在2D绘图中使用正交相机,并在我们的几何图形中将 `z` 坐标设为 `0.0`。但是 `z` 轴可以延伸到任何我们想要的长度。使用正交相机对显示对象进行投影,得到的结果是按照同比例缩放,不会有畸变产生。
+
+
+
+调用 [camera.orthoOffCenter](/api/classes/Camera3D.html#orthooffcenter) API 可以按照需求设置相机成正交相机:
+
+| 参数 | 类型 | 描述 | 示例 |
+| --- | --- | --- | --- |
+| left | number | 视锥体x轴最小值 | -window.innerWidth / 2 |
+| right | number | 视锥体x轴最大值 | window.innerWidth / 2 |
+| bottom | number | 视锥体y轴最小值 | -window.innerHeight / 2 |
+| top | number | 视锥体y轴最大值 | window.innerHeight / 2 |
+| near | number | 视锥体近截面z值| 1 |
+| far | number | 视锥体远截面z值| 5000 |
+
+
+### 透视投影
+透视投影会利用透视除法对距离观察者很远的对象进行缩短和收缩,逻辑尺寸相同的对象在可视区域靠前位置比靠后位置显得更大,可以实现逼近人眼的观察效果,是3D场景中最常用的投影模式。
+
+
+
+调用 [camera.perspective](/api/classes/Camera3D#perspective) 可以按照需求设置相机为透视相机:
+
+| 参数 | 类型 | 描述 | 示例 |
+| --- | --- | --- | --- |
+| fov | number | 透视度 | 60 |
+| aspect | number | 视口比例 | window.innerWidth / window.innerHeight |
+| near | number | 近截面 | 0.1 |
+| far | number | 远截面 | 1000 |
+
+
+
+<<< @/public/demos/graphics/camera_type.ts{35-41}
+
+## 相机组件
+相机组件为相机提供灵活的扩展支持,可以直接使用预定义组件,也可以自定义组件实现更个性化的需求。组件通过自身的 `update` 函数,执行与 `Engine3D` 主循环同步的自我更新逻辑。
+
+### [自由相机](/api/classes/FlyCameraController)
+该相机控制器 ,实现摄像机自由移动。它的交互功能有:
+ - 通过 W A S D 向着朝向方向 前进 后退 左右移动
+ - 通过按住鼠标左键控制相机的移动朝向
+
+
+
+<<< @/public/demos/graphics/camera_fly.ts
+
+基本用法:
+```ts
+import { Scene3D, Camera3D, FlyCameraController } from '@orillusion/core'
+// 实例化一个节点
+let cameraObj = new Object3D();
+// 加载一个相机组件
+let camera = cameraObj.addComponent(Camera3D);
+// 加载控制器组件
+let flyController = cameraObj.addComponent(FlyCameraController);
+// 通过组件 setCamera 设置相机位置
+flyController.setCamera(new Vector3(0, 0, 15), new Vector3(0, 0, 0));
+// 设置鼠标移动速度
+flyController.moveSpeed = 10;
+```
+自由相机可以通过 [setCamera](/api/classes/FlyCameraController#setcamera) 设定自身位置和朝向
+
+| 参数 | 类型 | 描述 | 示例 |
+| --- | --- | --- | --- |
+| targetPos | Vector3 | 自身位置 | new Vector3(0,0,10) |
+| lookAtPos | Vector3 | 目标位置 | new Vector3(0,0,0) |
+
+还可以修改 `moveSpeed` 来调整移动的速度快慢
+
+| 参数 | 类型 | 描述 | 示例 |
+| --- | --- | --- | --- |
+| moveSpeed | number | 移动速度 | 10 |
+
+### [盘旋相机](/api/classes/HoverCameraController)
+
+该相机控制器,实现摄像机在 `xz` 平面移动/围绕当前观察点旋转。它的交互功能有:
+ - 按下鼠标左键并移动鼠标,可以使相机围绕当前观察目标进行旋转。
+ - 按下鼠标右键并移动鼠标,可以使相机根据鼠标移动的方向与距离平滑移动当前场景可视区域
+ - 滑动鼠标滚轮可以控制摄像机的视距
+
+
+
+<<< @/public/demos/graphics/camera_hover.ts
+
+
+基本用法:
+```ts
+import { Scene3D, Camera3D, HoverCameraController } from '@orillusion/core'
+// 实例化一个节点
+let cameraObj = new Object3D();
+// 加载一个相机组件
+let camera = cameraObj.addComponent(Camera3D);
+// 加载控制器组件
+let hoverCameraController = cameraObj.addComponent(HoverCameraController);
+// 通过组件 setCamera 设置相机位置
+hoverController.setCamera(15, -15, 15, new Vector3(0, 0, 0));
+```
+盘旋相机可以通过 [setCamera](/api/classes/HoverCameraController#setcamera) 控制相机位置和朝向
+| 参数 | 类型 | 描述 | 示例 |
+| --- | --- | --- | --- |
+| roll | number | 围绕y轴旋转 | 0 |
+| pitch | number | 围绕x轴旋转 | 0 |
+| distance | number | 相机与目标的距离 | 10 |
+| target | Vector3 | 朝向目标坐标 | new Vector3(0,0,0) |
+
+
+### [轨道相机](/api/classes/OrbitController)
+该相机控制器,跟盘旋相机很相似,也是围绕一个坐标观察点旋转。但它可以直接设置相机的 `Object3D` 的位置和渲染来控制视角位置和朝向。主要特性如下:
+ - 按下鼠标左键并移动鼠标,可以使相机围绕当前观察目标进行全向旋转
+ - 按下鼠标右键并移动鼠标,可以根据鼠标移动方向在空间各个方向内移动相机中心,不仅可以在 `xz` 平面内自由移动,也支持 `y` 方向的自由移动
+ - 滑动鼠标滚轮可以控制摄像机和中心的距离
+ - 可以设置相机自动旋转
+ - 可以设置旋转,缩放,平移的速度
+ - 可以设置仰角最大值和最小值
+
+
+
+<<< @/public/demos/graphics/camera_orbit.ts{12-17}
+
+
+基本用法:
+```ts
+import { Scene3D, Camera3D, OrbitController } from '@orillusion/core'
+// 实例化一个节点
+let cameraObj = new Object3D();
+// 加载一个相机组件
+let camera = cameraObj.addComponent(Camera3D);
+// 加载控制器组件
+let orbit = cameraObj.addComponent(OrbitController);
+// 设置相机 Object3D 位置
+cameraObj.localPosition.set(0, 10, 30);
+// 开启自动旋转
+orbit.autoRotate = true
+// 自动旋转速度
+orbit.autoRotateSpeed = 0.1
+// 缩放速度系数
+orbit.zoomFactor = 0.1
+// 视角平移速度系数
+orbit.panFactor = 0.25
+// 视角平滑系数
+orbit.smooth = 5
+// 缩放最小距离
+orbit.minDistance = 1
+// 缩放最大距离
+orbit.maxDistance = 1000
+// 仰角最小值
+orbit.minPolarAngle = -90
+// 仰角最大值
+orbit.minPolarAngle = 90
+```
+
+### 自定义控制器
+用户可以通过 [自定义组件](/guide/core/script) 来扩展额外的相机组件,可以参考 [OrbitController](https://github.com/Orillusion/orillusion/blob/main/src/components/controller/OrbitController.ts) 的实现方式。
diff --git a/docs/guide/graphics/graphics.md b/docs/guide/graphics/graphics.md
new file mode 100644
index 00000000..fe64e104
--- /dev/null
+++ b/docs/guide/graphics/graphics.md
@@ -0,0 +1,253 @@
+# 图形绘制
+
+`Orillusion` 提供了 [@orillusion/graphic](/graphic/) 扩展包,主要用于对具有实时变化的点、线、面、体的绘制,使用特定的方法创建出一个动态网格,统一管理并参与到引擎渲染管线中去,性能高效、使用方便。
+
+目前提供三个模块来创建高性能图形数据:
+1. `Graphic3D`: 提供基础的线条制能力,常用于绘制辅助线等。
+1. `Graphic3DMesh` 渲染器:在同一个渲染器中批量创建出一组 `Mesh` 克隆体,可以自由定义调整每个克隆体的 `Transform`、`Texture` 以及 `Material`,组合出高自由度的图形和动画。
+2. `Shape3D` 渲染器: 创建复杂的自定义 `Shape3D` 对象,例如 `EllipseShape3D`、`RoundRectShape3D`、`CircleShape3D` 等。对于拥有可持续绘制功能的 `Shape3D` ,比如`Path2DShape3D`、`Path3DShape3D`,参照了 [CanvasPath](https://developer.mozilla.org/en-US/docs/Web/API/Path2D) 中的API设计来实现,让开发者能借鉴和沿用自己熟悉的开发方式进行图形绘制工作。
+
+## 安装
+跟引擎方法一致,我们可以通过 `NPM` 和 `CDN` 链接两种方式来引入图形插件:
+
+### 1. 通过 `NPM` 包安装
+```bash
+npm install @orillusion/core --save
+npm install @orillusion/graphic --save
+```
+```ts
+import { Engine3D } from "@orillusion/core"
+import { Graphic3D, Shape3D } from "@orillusion/graphic"
+```
+
+### 2. 通过 `CDN` 链接引入
+推荐使用 `ESModule` 构建版本
+```html
+
+```
+
+或通过 `
+
+
+```
+
+## `Graphic3D`
+通过创建一个 `Graphic3D` 对象统一绘制场景中的图形,目前提供 `drawLines`,`drawBox`,`drawCircle` 三种 `API` 快捷创建不同的线段组合。
+
+### 基本方法
+```ts
+import {Graphic3D} from '@orillusion/graphic'
+// ...
+
+// 创建一个 Graphic3D 对象
+let graphic3D = new Graphic3D();
+// 添加到场景中
+scene.addChild(graphic3D);
+
+// 使用 graphic3D 统一绘制线段
+// line - (uid, [start1, end1, start2, end2, ...], color)
+graphic3D.drawLines('line', [new Vector3(0, 0, 0), new Vector3(0, 10, 0)], new Color(1, 0, 0));
+// box - (uid, center, size, color)
+graphic3D.drawBox('box', new Vector3(-5, -5, -5), new Vector3(5, 5, 5), new Color(0, 1, 0));
+// circle - (uid, center, radius, segments, up, color)
+graphic3D.drawCircle('circle', new Vector3(-15, -5, -5), 5, 15, Vector3.X_AXIS, new Color(0, 0, 1));
+```
+
+
+
+<<< @/public/examples/graphic/GraphicLine.ts
+
+
+## `Graphic3DMesh` 渲染器
+通过 `Graphic3DMesh.draw()` 快速创建一个 `Graphic3DMeshRenderer` 实例,该对象可视为多个克隆 `Geometry` 的集合体,对于这个集合体中每一个对象都可以设置位置和贴图,通过组合达到想要的视觉效果。
+
+### 参数概览
+
+| 参数 | 描述 |
+| --- | --- |
+| scene | 在指定Scene3D中创建 |
+| geo | 指定网格数据源 |
+| texture | 贴图列表(使用下标进行索引) |
+| count | 指定一个渲染器能够支持的克隆集合体的最大数量(选择合适的数值将会提高性能) |
+
+::: tip
+`geo` 一般输入一个简单的 `PlaneGeometry` 作为模型源即可,通过不同的贴图来表现不同的外观。理论上你可以传入的任何模型源来创作。例如传入一个 `BoxGeometry` 类型的模型,即可获得由许多方块组合成的图形,创建像素风格的场景,或者模拟体素的渲染。
+:::
+
+1. 修改 `Transform`: 对特定下标的(index)单元修改其旋转、缩放、位置。
+取得 `Graphic3DMeshRenderer` 所属的 `object3Ds`,使用数组的下标(index)获得对应的 `Object3D`,对 `Object3D` 的 `Transform` 修改即可同步至目标单元。
+
+2. 修改 `Texture`: 调用函数 `setTextureID`,指定修改特定下标(index)单元对应的贴图下标(textureIndex),贴图从 `Graphic3DMeshRenderer` 初始化参数的texture中获取。
+
+3. 修改 `Material` : 在 `Graphic3DMeshRenderer` 类中开放有一些列命名为类似`setTextureID` 这样的API。第一个参数为指定设置的目标单元,第二个接口为设置的相关参数。开发者可以通过这样的API,修改修改图形的内容。例如Color、UV、Emissive等数据。
+
+### 使用示例
+
+```ts
+import { Object3D, Scene3D, Engine3D, BitmapTexture2DArray, BitmapTexture2D, PlaneGeometry, Vector3, Matrix4, Time, BlendMode, Color, ColorUtil } from "@orillusion/core";
+import { Graphic3D, Graphic3DMesh, Graphic3DMeshRenderer } from '@orillusion/graphic';
+
+// 加载贴图列表
+let textureArray = [];
+textureArray.push(await Engine3D.res.loadTexture("path/to/texture.png") as BitmapTexture2D);
+let bitmapTexture2DArray = new BitmapTexture2DArray(textureArray[0].width, textureArray[0].height, textureArray.length);
+
+bitmapTexture2DArray.setTextures(textureArray);
+
+// 使用Plane作为网格克隆数据源
+let geometry = new PlaneGeometry(1, 1, 1, 1, Vector3.Z_AXIS);
+
+// 在当前场景中,使用 plane 作为克隆数据源,创建一个 Graphic3DMeshRenderer 实例,该实例最大支持 100 个克隆对象。
+let mr:Graphic3DMeshRenderer = Graphic3DMesh.draw(scene, geometry, bitmapTexture2DArray, 100);
+
+// 修改材质球属性
+mr.material.blendMode = BlendMode.ADD;
+mr.material.transparent = true;
+mr.material.depthWriteEnabled = false;
+mr.material.useBillboard = true;
+
+// 拿到每个克隆体单元所对应的Object3D对象,修改该 Object3D 的 Transform 属性,即可同步修改目标克隆体 Transform。
+// 同样的操作,放在引擎的主update函数里,则可每帧修改以驱动动画效果。
+let parts = mr.object3Ds;
+for (let i = 0; i < 100; i++) {
+ const element = parts[i];
+ // set texture index from textureArray
+ mr.setTextureID(i, 0);
+ // update transform
+ element.transform.x = 1;
+ element.transform.scaleX = 1;
+ element.transform.rotationX = 0;
+ // ...
+}
+
+```
+
+
+
+<<< @/public/demos/graphics/graphic_mesh3d.ts
+
+> 更多 `Graphic3D` API 用法请参考 [GraphicMesh](/example/graphic/GraphicMesh.html) 示例代码。
+
+## `Shape3D` 渲染器
+
+通过 `Shape3DMaker` 创建一个 `Shape3DRenderer` 渲染器,它可以持有和维护一个 `Shape3D` 数据集。每个Shape3D是被定义好的各种各样的形状,例如 `EllipseShape3D`、`RoundRectShape3D`、`CircleShape3D` 等等。其中 `Path2DShape3D` 和 `Path3DShape3D` 拥有更加丰富的API,可以帮你组合绘制出复杂的图形。
+
+| 参数 | 描述 |
+| --- | --- |
+| name | 名称,用于标识Shape3DRenderer |
+| scene | 指定 Shape3DRenderer 放入到哪个 scene 中 |
+| textureList | 贴图列表,使用 index 进行索引 |
+| maxNodeCount | 指定渲染器支持最多 Shape3D 的数量 |
+| triangleEachNode | 指定每个 Shape3D 平均拥有的三角形的数量 |
+
+ > 渲染器参照 `CanvasPath` 中的API设计来实现,让开发者能沿用和借鉴自己熟悉的开发方式进行3D绘制工作。渲染器的 2D 绘制部分指的是在 `XZ` 平面中绘制点、线、面。同时对每个单元仍然可以通过 `Transform` 独立控制。而在 3D 空间中绘制图形,则需使用 `Path3DShape3D` 即可开始具有Y轴高程数据的图形绘制。
+
+### 基础属性
+
+引擎内置了很多基础图形,都继承于 `Shape3D` 类,主要包含以下属性:
+
+| 属性名称 | 描述 |
+| --- | --- |
+| lineColor | 绘制线条时加成的颜色 |
+| fillColor | 绘制填充区域时加成的颜色 |
+| lineTextureID | 设定绘制线条时采用的贴图 |
+| fillTextureID | 设定绘制填充区域时采用的贴图 |
+| fillRotation | 设置填充区域,使用贴图的旋转角度 |
+| shapeOrder | 设置每个Shape的层级(消除zFighting,每个 Shape3DRenderer 可以设定 zFighting 最大范围,根据这个范围和Shape3D的数量,得到每个Shape3D拥有的偏移量)|
+| points3D | 预留外部传入关键点的集合 |
+| isClosed | 图形首尾首尾封闭 |
+| fill | 图形是否填充 |
+| lineWidth | 绘制线条的宽度 |
+| lineUVRect | UV数据:xy分别对应线条贴图的offset、zw对应贴图数据的缩放 |
+| fillUVRect | UV数据:xy分别对应填充区域贴图的offset、zw对应贴图数据的缩放 |
+| uvSpeed | UV数据:xy分别填充区域贴图的uv移动速度;zw对应线条绘制时贴图数据的uv移动速度 |
+
+### 内置图形
+
+和 `CanvasPath` 的 API 类似,引擎目前提供一下几种 `Shape3D` 的子类/派生类:
+| 图形名称 | 描述 |
+| --- | --- |
+| CircleShape3D | 圆形、圆弧 |
+| CurveShape3D | 拥有2个锚点控制的贝塞尔曲线 |
+| EllipseShape3D | 椭圆 |
+| LineShape3D | 折线 |
+| Path2DShape3D | 在xz平面绘制线条路径 |
+| Path3DShape3D | 在3D空间内绘制线条路径 |
+| QuadraticCurveShape3D | 拥有1个锚点控制的贝塞尔曲线 |
+| RoundRectShape3D | 矩形、圆角矩形 |
+
+
+### 内置方法
+
+通过 `Shape3DMaker` 的实例,我们可以调用以下几种方法获得对应的特定图形:
+| 函数名称 | 图形类型 |
+| --- | --- |
+| ellipse | EllipseShape3D |
+| arc | CircleShape3D |
+| line | LineShape3D |
+| quadraticCurve | QuadraticCurveShape3D |
+| curve | CurveShape3D |
+| path2D | Path2DShape3D |
+| path3D | Path3DShape3D |
+| rect | RoundRectShape3D |
+| roundRect | RoundRectShape3D |
+
+::: tip
+所有 2D 图形,例如 `path2D` 将会忽略 `Y` 轴数据,图形将被展开在 `XZ` 平面
+:::
+
+除此之外,我们还可以通过 `Shape3DRenderer` 对 `Shape3D` 进行增删改操作:
+
+| 函数名称 | 描述 |
+| --- | --- |
+| createShape | 指定Shape3D的类型,在渲染器中创建Shape3D实例 |
+| removeShape | 删除一个Shape3D实例 |
+| getShapeObject3D | 通过Shape3D的实例的shapeIndex属性,获得对应的Object3D。供后续修改Transform使用 |
+
+### 使用示例
+
+```ts
+import { Object3D, Scene3D, Engine3D, BitmapTexture2DArray, BitmapTexture2D, PlaneGeometry, Vector3, Matrix4, Time, BlendMode, Color,ColorUtil } from "@orillusion/core";
+import { CircleShape3D, EllipseShape3D, Shape3DMaker, Shape3D } from "@orillusion/graphic";
+
+// 加载贴图列表
+let textureArray = [];
+textureArray.push(await Engine3D.res.loadTexture("path/to/texture.png") as BitmapTexture2D);
+let bitmapTexture2DArray = new BitmapTexture2DArray(textureArray[0].width, textureArray[0].height, textureArray.length);
+bitmapTexture2DArray.setTextures(textureArray);
+
+//在当前场景中,创建一个Shape3DRenderer实例
+maker = Shape3DMaker.makeRenderer(`path`, bitmapTexture2DArray, scene);
+maker.renderer.material.doubleSide = true;
+
+//创建一个基于XZ平面的Circle,其半径为5、圆心为(0, 0)
+let circle:CircleShape3D = maker.arc(5, 0, 0);
+circle.lineWidth = 1; //线条宽度为1
+circle.segment = 16; //该圆弧将会使用16条线段拟合
+circle.fill = true; //设置是否填充
+circle.line = true; //设置是否画线描边
+circle.uvSpeed = new Vector4(0, 0, 0, Math.random() - 0.5).multiplyScalar(0.005); //设置UV滚动速度
+circle.fillColor = Color.randomRGB(); //设置填充色加成
+circle.lineColor = Color.randomRGB(); //设置线条描边色加成
+
+circle.startAngle = 30; //设置圆弧起始角度
+circle.endAngle = 240; //设置圆弧结束角度
+
+// 将对circle的控制脚本放在引擎的主循环中,则可驱动动画效果
+
+```
+
+> 上述代码展示绘制一个独立圆形/圆弧,采用创建 `CircleShape3D` 的实例的方法。你也可以通过创建通用 `Path2DShape3D` 实例,然后调用其 `arc()` 函数获得。
+
+
+
+<<< @/public/demos/graphics/graphic_shape3d.ts
+
+> 更多 `Shape3D` API 用法请参考 [Shape3D](/example/graphic/Shape3D.html) 示例代码。
\ No newline at end of file
diff --git a/docs/guide/graphics/lighting.md b/docs/guide/graphics/lighting.md
new file mode 100644
index 00000000..7f7eb7f2
--- /dev/null
+++ b/docs/guide/graphics/lighting.md
@@ -0,0 +1,151 @@
+# 光照
+
+光照使场景更有层次感,使用光照,能建立更真实的三维场景。`Orillusion` 引擎的光照系统主要由以下几部分组成:
+
+| 光源 | 说明 |
+| :---: | :---: |
+| 灯光组件 | 基础光源组件:平行光,点光源 和 聚光灯 |
+| 环境反射 | 天空盒环境光,全局曝光 |
+| 全局光照 | 场景中反射或折射的间接光源 |
+
+## 灯光组件
+引擎目前内置了3种经典的光源类型:
+
+### 平行光
+
+[平行光](/api/classes/DirectLight) 表示的是光线从以某个方向均匀射出,光线之间是平行的,太阳照射在地球表面的光可以认为是平行光,因为太阳和地球距离的远大于地球半径,所以照射在地球的阳光可以看作是来自同一个方向的光,即平行光。`平行光` 有 `4` 个主要个特性:
+
+| 属性 | 类型 | 说明 |
+| --- | --- | --- |
+| lightColor | Color | 灯光的颜色, 默认是白色 `rgb(1.0,1.0,1.0)` |
+| intensity | Number | 光照强度,默认值为 `1` |
+| direction | Vector3 | 只读属性,获取平行光的方向向量 |
+| castShadow | Boolean | 是否开启投影, 默认 `false` 不开启 |
+
+一般使用平行光所在的 `Object3D` 的 `rotation` 控制灯光方向
+```ts
+let lightObj = new Object3D();
+scene.addChild(lightObj);
+
+//添加平行光
+let dl = lightObj.addComponent(DirectLight);
+//设置颜色
+dl.lightColor = new Color(1.0, 0.95, 0.84, 1.0);
+//设置强度
+dl.intensity = 20;
+
+// 通过 Object3D 设置光源的方向
+lightObj.rotateX = 45;
+lightObj.rotateY = 45;
+// 可以通过 direction 获取方向向量
+let target = dl.direction
+```
+
+
+
+<<< @/public/demos/graphics/lighting_dir.ts
+
+### 点光源
+
+[点光源](/api/classes/PointLight) 是存在于空间中的一个点,由该点向四面八方发射光线,超过有效距离的地方将无法接受到点光源的光线,并且离光源越远光照强度也会逐渐降低。通常用来模拟生活中常见的灯泡。点光源有主要以下属性:
+
+| 属性 | 类型 | 说明 |
+| --- | --- | --- |
+| lightColor | Color | 灯光的颜色, 默认是白色 `rgb(1.0,1.0,1.0)` |
+| intensity | Number | 光照强度,默认值为 `1` |
+| range | Number | 光照最远距离 |
+
+
+```ts
+let pointLightObj = new Object3D();
+// 设置光源 Object3D 的位置
+pointLightObj.x = -10;
+pointLightObj.y = 10;
+pointLightObj.z = 10;
+scene.addChild(pointLightObj);
+
+// 设置点光源组件的半径,强度和颜色
+let pointLight = pointLightObj.addComponent(PointLight);
+pointLight.range = 20;
+pointLight.intensity = 10;
+pointLight.lightColor = new Color(1.0, 0.95, 0.84, 1.0);
+```
+
+
+
+<<< @/public/demos/graphics/lighting_point.ts
+
+### 聚光灯
+
+[聚光灯](/api/classes/SpotLight) 和 `点光源` 类似,但是它的光线不是朝四面八方发射,而是朝某个方向范围,就像现实生活中的手电筒发出的光。聚光灯有几个主要特性:
+
+| 属性 | 类型 | 说明 |
+| --- | --- | --- |
+| lightColor | Color | 灯光的颜色, 默认是白色 `rgb(1.0,1.0,1.0)` |
+| intensity | Number | 光照强度,默认值为 `1` |
+| direction | Vector3 | 只读属性,获取聚光的方向向量 |
+| range | Number | 光照最远距离 |
+| innerAngle | Number | 光锥内切角,聚光在小于这个角度的范围内有光线 |
+| outerAngle | Number | 光锥外切角,光线会在内切角到外切角的范围内逐步衰减到0 |
+
+```ts
+let spotLightObj = new Object3D();
+// 设置光源 Object3D 的位置
+spotLightObj.y = 100;
+spotLightObj.rotationX= 90;
+scene.addChild(spotLightObj);
+
+// 设置聚光灯组件的属性
+let spotLight = spotLightObj.addComponent(SpotLight);
+spotLight.lightColor = new Color(1.0, 0.95, 0.84, 1.0);
+spotLight.intensity = 20;
+spotLight.range = 200;
+spotLight.innerAngle = 20;
+spotLight.outerAngle = 35;
+```
+
+
+
+<<< @/public/demos/graphics/lighting_spot.ts
+
+## IES 灯光信息
+照明工程学会(IES)定义了一种文件格式,可以描述真实灯光在现实世界的光照强度分布情况。IES 文件描述了各种类型的灯具的光线强弱度,衰减曲线,模拟灯珠的透射,折射等光线变化行为,最终解码成指定的2D数据图进行3D空间的灯光映射。
+
+### IES 灯光示例
+
+
+
+
+### 加载 IES 贴图
+除了常规的光源类型设置,引擎还支持通过加载预设的 `IES` 贴图来设置复杂的光线分布:
+```ts
+// 加载 IES 贴图
+let iesTexture = await Engine3D.res.loadTexture("https://cdn.orillusion.com/ies/ies_2.png");
+// 创建 IES 对象
+let iesPofiles = new IESProfiles();
+iesPofiles.IESTexture = iesTexture;
+let light = new Object3d()
+let pointLight = light.addComponent(PointLight);
+// 设置灯光 IES 分布
+pointLight.iesPofile = iesPofiles;
+```
+
+
+
+<<< @/public/demos/graphics/lighting_pointIes.ts
+
+### 获取 IES 贴图
+社区中有大量优质的 `IES` 资源分享社区,一些灯光设备厂商也会分享专业的 `IES` 文件,它们一般都是免费的,比如:
+
+- [ieslibrary](https://ieslibrary.com/en/home)
+- [leomoon](https://leomoon.com/store/shaders/ies-lights-pack/)
+- [Lithonia Lighting](https://lithonia.acuitybrands.com/resources/technical-downloads/photometricdownloads)
+- [Philips](https://www.usa.lighting.philips.com/support/support/literature/photometric-data)
+
+社区中同样有很多专业的 `IES` 预览/转换的软件,比如 [IESviewer](http://photometricviewer.com/),您也可以使用专业的3D建模软件来将 `IES` 文件转换到普通的 `png` 贴图文件,最后加载到引擎中来。
+
+## 环境光
+除了直接的光源,引擎通过设置 `Scene3D.evnMap` 天空盒贴图进行基本的环境光渲染,详情参考 [天空盒](/guide/core/scene.html) 相关介绍
+
+## 全局光照
+一般光照系统只考虑光源直接照射到物体表面所产生的效果,不会计算光源经过物体表面反射或折射的光线,即间接光照。全局光照系统能够对间接光照进行建模,实现更加逼真的光线效果。详情参考 [高级 GI](/guide/advanced/gi)
\ No newline at end of file
diff --git a/docs/guide/graphics/materials.md b/docs/guide/graphics/materials.md
new file mode 100644
index 00000000..c7bb9c67
--- /dev/null
+++ b/docs/guide/graphics/materials.md
@@ -0,0 +1,127 @@
+# 材质
+## 材质总览
+引擎通过 [MeshRenderer](/api/classes/MeshRenderer) 组件给物体添加相应的 `材质` 对象,用来模拟其颜色、光照、纹理等属性。目前引擎内置了2种经典材质模型:
+| 名称 | 描述 |
+| :---: | --- |
+| UnLitMaterial | 不计算光照和阴影,仅渲染原始颜色与纹理信息 |
+| LitMaterial | `PBR` 即基于物理渲染,旨在模拟现实世界光照效果 |
+
+我们推荐使用的 [glTF](/guide/resource/gltf) 格式文件包含了物体材质信息。用户可以通过常用建模软件设计并修改模型文件。引擎解析模型文件后,自动赋予物体相应材质。
+
+## 基础用法
+```ts
+import {Object3D. MeshRenderer, LitMaterial, SphereGeometry, Color} from '@orillusion/core'
+
+let object = new Object3D();
+// 添加 MeshRenderer 组件
+let mesh = object.addComponent(MeshRenderer);
+
+// 设置组件 material
+mesh.material = new UnLitMaterial();
+mesh.material.baseColor = new Color(1, 1, 1, 1);
+
+// 切换 Material
+mesh.material = new LitMaterial();
+```
+
+## Unlit 材质
+引擎提供了 [UnLitMaterial](/api/classes/CylinderGeometry) 材质,紧渲染物理基础颜色,不计算光照和阴影。
+
+| 属性 | 描述 |
+| :---: | :---: |
+| baseColor | 基础颜色 |
+| baseMap | 基础贴图 |
+
+
+
+<<< @/public/demos/materials/UnLitMaterial.ts
+
+## PBR 材质
+我们提倡使用 [LitMaterial](/api/classes/LitMaterial) 即 `PBR` 材质进行渲染。`PBR` 是 `Physically-Based Rendering` 的缩写,是指基于物理渲染的材质,它更符合真实的物理光照模型。
+
+| 属性 | 描述 |
+| :---: | :---: |
+| baseColor | 材质基础颜色 |
+| emissiveColor | 材质发光颜色 |
+| emissiveIntensity | 材质发光强度,需要开启 BloomPost 才能显示发光效果 |
+| roughness | 材质粗糙程度 |
+| metallic | 材料金属度 |
+| normalScale | 法线贴图对材质的影响程度 |
+| clearCoat | 透明涂层强度 |
+| envMap | 环境贴图 |
+| envIntensity | 环境光强度 |
+| materialF0 | 材质反射率 |
+| ao | Ambient Occlussion, 处理环境光对物体遮挡的效果 |
+| aoMap | 环境光遮挡贴图 |
+| baseMap | 基础贴图 |
+| normalMap | 法线贴图 |
+| maskMap | 遮罩贴图 |
+| emissiveMap | 材质发光贴图 |
+| brdfLUT | BRDF查找表 |
+
+
+
+<<< @/public/demos/materials/PBR.ts
+
+
+## 材质设置
+### 颜色
+```ts
+let mat = new UnLitMaterial();
+mat.baseColor = new Color(1, 0, 0, 1);
+```
+
+
+
+### 透明度 & 混合模式
+```ts
+let mat = new UnLitMaterial();
+mat.transparent = true;
+mat.blendMode = BlendMode.ALPHA;
+mat.baseColor = new Color(1, 0, 0, 0.5);
+```
+
+
+
+混合模式详情请参考 [BlendMode](/api/enums/BlendMode.html)
+
+### 切换剔除模式
+为了节省 `GPU` 性能,`Orillusion` 默认使用 `back` 剔除模式,即只渲染物体正面材质,我们可以设置材质 [cullMode](/api/classes/LitMaterial#cullMode) 属性来切换显示模式
+```ts
+let mat = new LitMaterial();
+mat.cullMode = GPUCullMode.none; // 不剔除,双面显示
+mat.cullMode = GPUCullMode.front; // 剔除正面,显示后面
+mat.cullMode = GPUCullMode.back; // 剔除后面,显示正面
+```
+
+
+
+### UV 变换
+模型顶点会存有多组纹理映射坐标,定义了该顶点在纹理中对应的2D坐标,它通常由一个二维变量 `(u,v)` 表示,所以也被称为 `UV坐标`。
+我们可以通过对模型的 `uv` 坐标进行矩阵变换来自定义纹理的映射关系。比如,设置材质shader 中的 `transformUV1` 变量来对原始 `uv` 进行 `位移(offset)` 和 `缩放(scaling)` 的坐标变换:
+```ts
+let mat = new LitMaterial();
+// 获取 uv - Vector4(offsetU, offsetV, scalingU, scalingV)
+let uv: Vector4 = mat.getUniformV4(`transformUV1`);
+// 设置 uv
+uv.set(1, 1, 2, 2);
+// 更新 uv
+mat.setUniformVector4(`transformUV1`, uv);
+```
+
+
+
+
+:::tip
+从 `v0.8` 开始,[LitMaterial](/api/classes/LitMaterial) 使用 `xxxMapOffsetSize` 获取和设置各个贴图的 `uv` 变换:
+```ts
+let mat = new LitMaterial();
+let baseUV = mat.getUniformV4('baseMapOffsetSize');
+let normalUV = mat.getUniformV4('normalMapOffsetSize');
+let emissiveUV = mat.getUniformV4('emissiveMapOffsetSize');
+let roughnessUV = mat.getUniformV4('roughnessMapOffsetSize');
+let metallicUV = mat.getUniformV4('metallicMapOffsetSize');
+let aoUV = mat.getUniformV4('aoMapOffsetSize');
+```
+:::
+
diff --git a/docs/guide/graphics/mesh.md b/docs/guide/graphics/mesh.md
new file mode 100644
index 00000000..6f1f988d
--- /dev/null
+++ b/docs/guide/graphics/mesh.md
@@ -0,0 +1,253 @@
+# 网格
+`mesh` 描述了模型的几何信息`(geometry)`和材质信息`(material)`。如果你想用一个 `Object3D` 对象展示一个3D的模型,那么它必须添加 [MeshRenderer](/api/classes/MeshRenderer) 组件,它主要包含两个属性:
+1. `geometry` 对象,它决定了物体具体的几何形状,包括`顶点位置`,`拓扑`,`UV`等;
+2. `material` 对象,它决定了物体呈现的材质球样式,包括`贴图`,`颜色`,`透明度`等属性。
+
+`Orillusion` 内置了几种常见的几何体,可以很方便的创建不同的 `mesh`类型:
+## 长方体
+[BoxGeometry](/api/classes/BoxGeometry) 类提供长方体创建功能。
+参数概览:
+| 参数 | 描述 |
+| --- | --- |
+| width | X轴上面的宽度,默认值为1。 |
+| height | y轴上面的高度,默认值为1。 |
+| depth | Z轴上面的深度,默认值为1。 |
+
+使用示例:
+```ts
+import {Object3D, MeshRenderer, BoxGeometry} from '@orillusion/core';
+
+let obj = new Object3D();
+// 添加 MeshRenderer 组件
+let mr = obj.addComponent(MeshRenderer);
+// 设置组件 geometry
+mr.geometry = new BoxGeometry(5,2,3);
+```
+
+
+
+<<< @/public/demos/mesh/box.ts
+
+
+## 球体
+[SphereGeometry](/api/classes/SphereGeometry) 类提供球体创建功能。
+参数概览:
+| 参数 | 描述 |
+| --- | --- |
+| widthSegments | 球体水平分段数(沿着经线分段) |
+| heightSegments | 球体垂直分段数(沿着纬线分段) |
+| phiStart | (可选)指定水平(经线)起始角度 |
+| phiLength | (可选)指定水平(经线)扫描角度的大小球体赤道线的弧长 |
+| thetaStart | (可选)指定垂直(纬线)起始角度 |
+| thetaLength | (可选)指定垂直(纬线)扫描角度大小 |
+
+使用示例:
+```ts
+import {Object3D, MeshRenderer, SphereGeometry} from '@orillusion/core';
+
+let obj = new Object3D();
+// 添加 MeshRenderer 组件
+let mr = obj.addComponent(MeshRenderer);
+// 设置组件 geometry
+mr.geometry = new SphereGeometry(2, 50, 50);
+```
+
+
+
+<<< @/public/demos/mesh/sphere.ts
+
+
+## 圆柱体
+[CylinderGeometry](/api/classes/CylinderGeometry) 类提供圆柱体创建功能。
+
+参数概览:
+| 参数 | 描述 |
+| --- | --- |
+| radiusTop | 顶部半径,默认值为1 |
+| radiusBottom | 底部半径,默认值为1 |
+| height | 桶高度,默认值为1 |
+| radialSegments | 圆面细分数量,默认值为8 |
+| heightSegments | 桶壁细分数量,默认值为8 |
+| openEnded | 是否开放的桶(有上下底),默认值为false |
+| thetaStart | 第一个分段的起始角度,默认值为0 |
+| thetaLength | 圆形扇区的中心角,默认值为Math.PI * 2 |
+
+使用示例:
+```ts
+import {Object3D, MeshRenderer, CylinderGeometry} from '@orillusion/core';
+
+let obj = new Object3D();
+// 添加 MeshRenderer 组件
+let mr = obj.addComponent(MeshRenderer);
+// 设置组件 geometry
+mr.geometry = new CylinderGeometry(2, 2, 10);
+```
+
+
+<<< @/public/demos/mesh/cylinder.ts
+
+## 圆环
+[TorusGeometry](/api/classes/TorusGeometry) 类提供圆柱体创建功能。
+
+参数概览:
+| 参数 | 描述 |
+| --- | --- |
+| radius | 圆环半径,默认值0.4 |
+| tube | 管道半径,默认值0.1 |
+| radialSegments | 圆环细分数量,默认值32 |
+| tubularSegments | 管道细分数量,默认值32 |
+
+使用示例:
+```ts
+import {Object3D, MeshRenderer, TorusGeometry} from '@orillusion/core';
+
+let obj = new Object3D();
+// 添加 MeshRenderer 组件
+let mr = obj.addComponent(MeshRenderer);
+// 设置组件 geometry
+mr.geometry = new TorusGeometry(3, 1, 32, 32);
+```
+
+
+<<< @/public/demos/mesh/torus.ts
+
+## 平面
+[PlaneGeometry](/api/classes/PlaneGeometry) 类提供平面创建功能。
+
+参数概览:
+| 参数 | 描述 |
+| --- | --- |
+| width | 平面沿着X轴的宽度。默认值是1。 |
+| height | 平面沿着Y轴的高度。默认值是1。 |
+| segmentW | 平面的宽度分段数,默认值是1。 |
+| segmentH | 平面的高度分段数,默认值是1。 |
+| up | 平面朝向,默认值是Vector3.Y_AXIS。 |
+
+使用示例:
+```ts
+import {Object3D, MeshRenderer, PlaneGeometry} from '@orillusion/core';
+
+let obj = new Object3D();
+// 添加 MeshRenderer 组件
+let mr = obj.addComponent(MeshRenderer);
+// 设置组件 geometry
+mr.geometry = new PlaneGeometry(100, 100, 1, 1);
+```
+
+
+<<< @/public/demos/mesh/plane.ts
+
+## 挤压缓冲几何体
+[ExtrudeGeometry](/api/classes/ExtrudeGeometry.md) 类提供从一个形状路径中挤压出一个几何体的功能。
+
+使用示例:
+```ts
+import {Object3D, MeshRenderer, ExtrudeGeometry, Vector3} from '@orillusion/core';
+
+let conduitObject3D = new Object3D();
+// 添加 MeshRenderer 组件
+let mr = conduitObject3D.addComponent(MeshRenderer);
+// 创建自定义形状
+let shape: Vector3[] = [], vertexCount = 8, shapeRadius = 1
+for (let i = 0; i < vertexCount; i++) {
+ let angle = Math.PI * 2 * i / vertexCount;
+ let point = new Vector3(Math.sin(angle), 0, Math.cos(angle)).multiplyScalar(shapeRadius);
+ shape.push(point);
+}
+// 创建自定义路径
+let curve: Vector3[] = [], sectionCount = 60, modelRadius = 4
+for (let i = 0; i < sectionCount; i++) {
+ let angle = Math.PI * 2 * i / 20;
+ modelRadius += 0.1 * i / sectionCount;
+ let offsetY = 0.6 - Math.sqrt(i / sectionCount);
+ let point = new Vector3(Math.sin(angle), offsetY * 6, Math.cos(angle)).multiplyScalar(modelRadius);
+ curve.push(point);
+}
+// 创建 Extrude Geometry
+mr.geometry = new ExtrudeGeometry().build(shape, true, curve, 0.2);
+```
+
+
+
+<<< @/public/demos/mesh/extrude.ts
+
+## 自定义几何体
+我们可以通过更新现有的几何体的顶点 [vertexBuffer](/api/classes/GeometryVertexBuffer) 来自定义几何体的形状
+
+使用示例:
+```ts
+import {Object3D, MeshRenderer, PlaneGeometry, LitMaterial, VertexAttributeName} from '@orillusion/core';
+
+let obj = new Object3D();
+// 添加 MeshRenderer 组件
+let mr = obj.addComponent(MeshRenderer);
+// 设置一个平面作为基础, 定义大小和分段数量
+mr.geometry = new PlaneGeometry(100, 100, 100, 100);
+mr.material = new LitMaterial()
+
+// 获得现有顶点信息
+let posAttrData = mr.geometry.getAttribute(VertexAttributeName.position);
+// 重写所有顶点 xyz 坐标
+for (let i = 0, count = posAttrData.data.length / 3; i < count; i++) {
+ posAttrData.data[i * 3 + 0] = Math.random(); // position x
+ posAttrData.data[i * 3 + 1] = Math.random(); // position y
+ posAttrData.data[i * 3 + 2] = Math.random(); // poisiton z
+}
+// 更新顶点信息
+mr.geometry.vertexBuffer.upload(VertexAttributeName.position, posAttrData);
+// 重新计算法向量
+mr.geometry.computeNormals();
+```
+我们甚至可以在主循环中每帧更改顶点信息
+
+
+
+<<< @/public/demos/mesh/custom.ts
+
+
+## 几何体扩展
+
+除了上述内置的常见几何体,引擎还提供了 [@orillusion/geometry](/geometry/) 几何体扩展包,目前包含字体几何体 `TextGeometry`, 2D挤压缓冲几何体`ExtrudeGeometry`, 地形几何体 `TerrainGeometry` 等扩展和工具类。
+
+用户可以通过 `NPM` 包快速引入几何体插件:
+
+```bash
+npm install @orillusion/core --save
+npm install @orillusion/geometry --save
+```
+```ts
+import { Engine3D } from "@orillusion/core"
+import { TextGeometry } from "@orillusion/geometry"
+```
+
+### 2D挤压缓冲
+
+和内置的 [ExtrudeGeometry](/api/classes/ExtrudeGeometry.md) 类似但不同,该扩展类简化了数据,支持从 [Shape2D](/geometry/classes/Shape2D.md) 平面图形中生成空间几何体。
+
+
+
+<<< @/public/examples/geometry/ExtrudeGeometry.ts
+
+### 字体几何体
+
+支持从常见的字体文件 `woff`,`otf`,`ttf` 中创建空间文字几何体
+
+
+
+<<< @/public/examples/geometry/TextGeometry.ts
+
+### 地形几何体
+
+支持通过 `2D` 高度图或高程图快速创建 `3D` 地形几何体
+
+
+
+<<< @/public/examples/geometry/TerrainGeometry.ts
+
+### 草地几何体
+
+创建模拟草地地形,配合[草地组件](/geometry/classes/GrassComponent)可以模拟动态随风摆动效果
+
+
+
+<<< @/public/examples/geometry/GrassGeometry.ts
\ No newline at end of file
diff --git a/docs/guide/graphics/renderer.md b/docs/guide/graphics/renderer.md
new file mode 100644
index 00000000..7c654268
--- /dev/null
+++ b/docs/guide/graphics/renderer.md
@@ -0,0 +1,34 @@
+# 渲染器组件
+
+## 渲染器
+渲染流程/管线中,定义了多个不同子渲染器。对整个场景做一次完整的渲染,需要在不同的阶段使用特定的渲染器按需执行,输出结果。最终合成屏幕上的显示效果。
+ 1. Forward 渲染器
+定义一系列的渲染任务,从一开始渲染整个场景到Global Data Buffer,到指定采用的后处理Post效果序列。引擎将按照用户的配置执行该渲染任务。
+```ts
+let renderJob = new ForwardRenderJob(this.scene);
+renderJob.addPost(new SSAOPost());
+renderJob.addPost(new GlobalFog());
+renderJob.addPost(new BloomPost());
+renderJob.addPost(new FXAAPost());
+```
+ 2. Shadow 渲染器
+Shadow渲染器,定义一个阴影贴图动态渲染的通道,通过搜集灯光,遍历场景需要渲染的对象,绘制出一张或者多张阴影贴图。该阴影贴图会在一处或者多处被重复使用,用于光照计算。
+ 3. Probe 渲染器
+Probe渲染器,主要用于搜集场景中指定位置和方向的周围360角度场景的描述信息。
+通过在预先摆放好的探针(Probe),采用CubeCamera对其使用6个方位的对全场景进行渲染,获得想要的数据。为后期处理提供必要的参数,如光照计算提供全局光照信息等。
+
+ 4. ClustingLighting 渲染器
+ClustingLighting渲染器,他主要用于搜集场景中的灯光信息,通过一定的方式重新组织数据,在最终渲染的时候可以更加高效的获取某个着色点的灯光信息,降低复杂的光照计算消耗。通过ClustingLighting渲染器的使用,使引擎里面能够同时支持更大规模的灯光数量。
+
+## RenderNode 渲染单元
+RenderNode,用于描述场景中需要被绘制的对象。
+一个渲染单元的定义,通常来说会包含如下信息:
+
+
+| materials |材质球列表 | 描述渲染对象的表面光学信息,指定如何使用着色的模型和提供参数 |
+| --- | --- | --- |
+| geometry| 几何数据 | 指定渲染单元的几何模型,可以是复杂三角面,也可以是简单的Plane等 |
+| renderOrder | 渲染顺序 | 指定渲染优先级|
+| castShadow| 是否参与阴影贴图绘制 |True:将被搜集进入阴影图的绘制过程。False:不参与阴影贴图绘制 |
+| castGI | 是否参与全局光照图生成 | True:将被搜集进入全局光照信息的绘制过程。False:不参与全局光照信息搜集 |
+| rendererType| 指定渲染类型 | 标记该渲染单元,为一些特殊的逻辑提供决策。如指定其为SkyRenderer。 |
\ No newline at end of file
diff --git a/docs/guide/graphics/shadow.md b/docs/guide/graphics/shadow.md
new file mode 100644
index 00000000..52f18050
--- /dev/null
+++ b/docs/guide/graphics/shadow.md
@@ -0,0 +1,159 @@
+# 阴影
+阴影为场景和模型添加了一定程度的深度和真实感,因为它们可以显示物体的比例和位置,使场景中的物体看起来更加立体。在引擎中,光源可以将物体的阴影投射到自身的其他部分或者附近的场景中,这些阴影可以是实时的,也可以是静态的。
+
+## 配置阴影
+
+阴影是通过光源来实现的,目前引擎中 [平行光(DirectLight)](/guide/graphics/lighting.html#平行光)、[点光源(PointLight)](/guide/graphics/lighting.html#点光源)、[聚光灯(SpotLight)](/guide/graphics/lighting.html#聚光灯) 都可以产生阴影。需要渲染阴影效果时,只需要将对应灯光的 `castShadow` 属性设置为 `true` 即可。
+
+```ts{12}
+let lightObj = new Object3D();
+// 设置灯光位置
+lightObj.x = 0;
+lightObj.y = 0;
+lightObj.z = 0;
+// 设置灯光角度,绕X轴旋转45度
+lightObj.rotationX = 45;
+lightObj.rotationY = 0;
+lightObj.rotationZ = 0;
+// 添加平行光组件,并开启阴影
+let lc = lightObj.addComponent(DirectLight);
+lc.castShadow = true; // 默认为 false
+lc.intensity = 5;
+scene.addChild(lightObj);
+```
+
+想要看到阴影效果,我们还需要产生阴影的物体和承载阴影的物体。如果希望光线照射到某个物体上产生阴影效果,需要在物体上添加一个 [MeshRenderer](/api/classes/MeshRenderer) 组件,并且将该组件的 `castShadow` 属性设置为 `true`。
+
+```ts{6}
+//创建一个box,用于产生阴影
+let castShadowObj = new Object3D();
+let mr1 = castShadowObj.addComponent(MeshRenderer);
+mr1.geometry = new BoxGeometry();
+mr1.material = new LitMaterial();
+mr1.castShadow = true
+scene.addChild(castShadowObj);
+```
+
+然后需要在接受阴影的物体上添加一个 [MeshRenderer](/api/classes/MeshRenderer) 组件,并且将该组件的 `receiveShadow` 属性设置为 `true`。
+
+```ts{6}
+//创建一个plane,用于接受阴影
+let receiveShadowObj = new Object3D();
+let mr2 = receiveShadowObj.addComponent(MeshRenderer);
+mr2.geometry = new PlaneGeometry(1000,1000);
+mr2.material =new LitMaterial();
+mr2.receiveShadow = true;
+scene.addChild(receiveShadowObj);
+```
+这样就可以在场景上看到一个 `box` 在平行光的照射下,产生了一个阴影并投射在了 `plane` 上:
+
+### 平行光阴影
+---
+
+
+<<< @/public/demos/graphics/shadow_dir.ts
+
+### 点光源阴影
+---
+
+
+<<< @/public/demos/graphics/shadow_point.ts
+
+### 聚光灯阴影
+---
+
+
+<<< @/public/demos/graphics/shadow_spot.ts
+
+## 阴影偏移
+阴影偏移 `shadowBias` 是影响阴影渲染的重要参数,因为一般阴影贴图的尺寸和最终渲染贴图的尺寸不完全相同的,会造成阴影采样失真等情况,通常可以通过手动设置一个微小的偏移量 `shadowBias` 来解决采样失真的情况。
+
+```ts
+Engine3D.setting.shadow.shadowBias = 0.0002 // 平行光阴影偏移
+Engine3D.setting.shadow.pointShadowBias = 0.2 // 点光源/聚光灯阴影偏移
+```
+
+> 一般 `shadowBias` 设置过小,会出现大面积摩尔纹或者完全覆盖阴影的情况;反之,如果设置过大,则会出现阴影和物体分离(漏光)的情况:
+
+
+
+<<< @/public/demos/graphics/shadow_bias.ts
+
+## 阴影类型
+通过设置阴影类型,可以控制阴影的表现效果。目前支持的阴影类型有:
+- HARD:硬阴影,是一种比较锐利的阴影,通常用于阴影距离物体比较近的情况。
+- SOFT:软阴影,是一种比较柔和、模糊的阴影,阴影边缘做了模糊处理,通常用于阴影离物体比较远的情况。
+- PCF:PCF(Percentage-Closer Filtering) 是一种常见的软阴影处理算法,通过对当前像素和周围的阴影深度进行采样并按距离进行加权平均,从而得到一种人工伪造的柔和阴影效果。目前引擎默认使用这个类型的阴影。
+
+配置阴影类型:
+```ts
+Engine3D.setting.shadow.type = 'SOFT'; // 默认 HARD
+```
+
+
+<<< @/public/demos/graphics/shadow_type.ts
+
+## 阴影大小
+引擎的 `setting` 提供了对阴影大小的控制参数,可以通过参数控制不同场景下阴影所使用的纹理大小和区域大小。
+
+相关属性如下:
+| 属性 | 类型 | 说明 |
+| --- | --- | --- |
+| shadowBound | Number | 阴影区域范围 |
+| shadowSize | Number | 平行光阴影贴图尺寸大小,默认1024 |
+| pointShadowSize | Number | 点光源阴影贴图大小尺寸,默认1024 |
+
+阴影贴图尺寸大小(`shadowSize`、`pointShadowSize`)直接影响最终阴影质量,且数值越小性能开销越低,并且阴影锯齿感越明显。
+
+`shadowBound` 参数控制场景中受照阴影区域大小,区域越大,阴影贴图尺寸也应适当增大,当大区域投射在小阴影贴图上时,也会导致很明显的阴影锯齿。
+```ts
+Engine3D.setting.shadow.shadowBound = 100
+```
+
+设置平行光阴影贴图尺寸大小:
+```ts
+Engine3D.setting.shadow.shadowSize = 2048
+```
+
+
+<<< @/public/demos/graphics/shadow_size.ts
+
+
+设置点光源阴影贴图大小尺寸:
+```ts
+Engine3D.setting.shadow.pointShadowSize = 2048
+```
+
+
+
+<<< @/public/demos/graphics/shadow_size_point.ts
+
+
+## 联级阴影贴图(Cascaded Shadow Maps)
+常用于支持大场景中更好的阴影渲染那效果,将视锥内阴影按四个等级进行划分,在着色处理阴影的阶段根据当前所处阴影等级选择合适的阴影贴图,能够获得更加精确、覆盖全视锥体范围的阴影效果。使用了CSM阴影后,能够解决阴影Bound范围过大,阴影的像素密度不够导致马赛克化过于严重;Bound范围小、阴影区域过小,远处的物体丢失阴影的问题。
+
+启用CSM阴影
+```ts
+let mainCamera:Camera3D;
+mainCamera.enableCSM = true;
+```
+
+
+
+<<< @/public/demos/graphics/shadow_csm.ts
+
+## 阴影属性
+
+| 属性 | 类型 | 说明 |
+| --- | --- | --- |
+| enable | Boolean | 是否启用阴影,默认 false |
+| type | String | 阴影类型,默认 PCF |
+| shadowQuality | Number | 阴影渲染品质 |
+| shadowBound | Number | 阴影区域范围 |
+| shadowSize | Number | 平行光阴影贴图尺寸大小,默认1024,数值越小性能开销越低,但阴影锯齿感越明显 |
+| pointShadowSize | Number | 点光源阴影贴图大小尺寸,默认1024 |
+| pointShadowBias | Number | 点光源和聚光灯的阴影偏移值 |
+| autoUpdate | Boolean | 是否自动更新阴影,默认 false |
+| csmMargin | Number | 设置不同级别阴影的过渡范围,在0-1区间调节 |
+| csmScatteringExp | Number | 微调各个级别阴影的范围,以满足不同的场景需求 |
+| csmAreaScale | Number | 微调阴影能够覆盖的最大范围,在0.0-1区间调节 |
diff --git a/docs/guide/graphics/texture.md b/docs/guide/graphics/texture.md
new file mode 100644
index 00000000..007dc3fb
--- /dev/null
+++ b/docs/guide/graphics/texture.md
@@ -0,0 +1,216 @@
+# 纹理
+
+## 纹理总览
+纹理(Texture), 是在 3D 渲染中最常用到的资源之一。我们在给模型着色时,需要给每个片元设置一个颜色值,这个色值除了直接手动设置,我们还可以选择从纹理中读取纹素进行着色,从而达到更加丰富的美术效果。
+
+
+## 纹理类型
+
+| 类型 | 描述 |
+| --- | --- |
+| [2D纹理](/api/classes/BitmapTexture2D) | 最常用的美术资源,使用二维 UV 坐标进行采样 |
+| [十字立方纹理](/api/classes/BitmapTextureCube) | 6张 2D 纹理组成了一个十字立方纹理,可以用来实现天空盒、环境反射等特效 |
+| [LDR立方纹理](/api/classes/LDRTextureCube) | 6张 LDR 纹理组成了一个全景天空图,可以用来实现天空盒、环境反射等特效 |
+| [HDR纹理](/api/classes/HDRTexture) | 支持 `RGBE` 格式的采样纹理 |
+| [HDR立方纹理](/api/classes/HDRTextureCube) | 6张 HDR 纹理组成了一个全景天空图,可以用来实现天空盒、环境反射等特效 |
+
+## 创建贴图
+
+### 1. 手动创建2D纹理
+
+通过创建纹理实例,我们可以手动创建一个贴图对象,再通过 `load` 手动加载对应的图片资源:
+- `2D纹理` 支持 web 常见的图片格式,`jpg/png/webp`;
+- `HDR纹理` 支持加载 `RGBE` 格式的 `.hdr` 图片;
+```ts
+import { BitmapTexture2D } from '@orillusion/core';
+// 创建2D纹理
+let texture = new BitmapTexture2D();
+// 加载贴图资源
+texture.load('path/to/image.png');
+
+// 创建 HDR 贴图
+let hdrTexture = new HDRTexture();
+hdrTexture = await hdrTexture.load('path/to/image.hdr');
+```
+
+### 2. 通过资源管理器加载
+
+除了手动创建纹理对象,我们推荐通过 [资源管理器](/guide/resource/Readme) 便捷的加载图片并自动创建对应的纹理贴图:
+
+
+```ts
+import { Engine3D } from '@orillusion/core';
+// 2D纹理
+let texture = Engine3D.res.loadTexture('path/to/image.png');
+// HDR贴图
+let hdrTexture = Engine3D.res.loadHDRTexture('path/to/image.hdr');
+// 十字立方纹理
+let texture = Engine3D.res.loadTextureCube('path/to/sky.png');
+// LDR全景图
+let HDRTextureCube = Engine3D.res.loadLDRTextureCube('path/to/sky.png');
+// HDR全景图
+let HDRTextureCube = Engine3D.res.loadHDRTextureCube('path/to/sky.hdr');
+```
+
+### 3. 手动填写颜色数据
+
+纹理底层其实对应着每个像素的颜色值,即 `RGBA` 通道,我们可以手动创建 `Uint8Array` 填写 `rgba` 颜色通道的具体数值,然后通过 [Uint8ArrayTexture](/api/classes/Uint8ArrayTexture) 类手动创建纹理:
+
+```ts
+// 图片参数
+let w = 32;
+let h = 32;
+let r = 255;
+let g = 0;
+let b = 0;
+let a = 255;
+// 创建 raw Uint8Array
+let textureData = new Uint8Array(w * h * 4);
+// 填充 rgba 数值
+for (let i = 0; i < w; i++) {
+ for (let j = 0; j < h; j++) {
+ let pixelIndex = j * w + i;
+ textureData[pixelIndex * 4 + 0] = r;
+ textureData[pixelIndex * 4 + 1] = g;
+ textureData[pixelIndex * 4 + 2] = b;
+ textureData[pixelIndex * 4 + 3] = a;
+ }
+ }
+// 通过 rawData 创建贴图
+let texture = new Uint8ArrayTexture();
+texture.create(16, 16, textureData, true);
+```
+
+## 加载贴图
+
+### 2D贴图
+
+我们可以直接将纹理赋予材质球的相应属性,比如基础的贴图 `(baseMap)`:
+
+```ts
+let floorMat = new LitMaterial();
+let texture = await Engine3D.res.loadTexture('path/to/image.png');
+floorMat.baseMap = texture;
+```
+
+
+
+<<< @/public/demos/texture/texture2D.ts
+
+### 十字立方贴图
+
+`十字立方贴图` 有 6 个面,即用 6 张 2D 纹理按下图的顺序排列组合成一个立方盒子:
+
+
+
+`十字立方纹理` 可以用来实现天空盒、环境反射等特效,我们推荐直接使用 [Res](#_2-通过资源管理器加载) 方式加载 `1` 张完整的十字立方贴图,直接赋值给 `scene.envMap` 即可:
+
+```ts
+// 加载一张十字立方贴图
+let textureCube = Engine3D.res.loadTextureCube('path/to/crossSky.png');
+// 设置天空盒
+scene.envMap = textureCube;
+```
+除此之外,我们也可以通过 [BitmapTextureCube](/api/classes/BitmapTextureCube) 类手动加载 `6` 个独立面的立方贴图:
+```ts
+let textureCube = new BitmapTextureCube();
+// 分别加在独立6个面
+await textureCube.load([
+ 'x Right',
+ '-x Left',
+ 'y Up',
+ '-y Down',
+ 'z Front',
+ '-z Back'
+]);
+```
+
+
+
+<<< @/public/demos/texture/textureBox.ts
+
+### 全景立方贴图
+除了 `十字立方贴图`,我们也可以通过 [Res](#_2-通过资源管理器加载) 加载全景 (equirectangular) 类型的贴图。同时支持 `RGBA` 类型的普通图片和支持 `RGBE` 格式的 `hdr` 图片:
+```ts
+// 普通格式全景图
+let ldrTextureCube = await Engine3D.res.loadLDRTextureCube('path/to/sky.png');
+// 加载hdr全景贴图
+let hdrTextureCube = await Engine3D.res.loadHDRTextureCube('path/to/sky.hdr');
+```
+
+
+
+<<< @/public/demos/texture/hdrBox.ts
+
+## 纹理设置
+
+### 1. 纹理重复
+
+纹理采样的默认范围为`[0,1]`, 即平铺纹理到整个平面,我们可以通过设置 [材质](/guide/graphics/materials) 的 [uvTransform_1](/api/classes/LitMaterial#uvtransform-1) 属性,手动的改变贴图重复的坐标范围:
+```ts
+let mat = new LitMaterial();
+// 使得贴图在 水平 和 竖直 方向上重复2次
+mat.uvTransform_1 = new Vector4(0,0,2,2);
+mat.baseMap = new BitmapTexture2D();
+```
+当纹理 `uvtransform_1` 超出 `[0,1]` 范围时,我们可以通过设置纹理的 `addressModeU` 和 `addressModeV` 两个属性,来控制水平方向和竖直方向上重复的方式,例如:
+
+```ts
+let texture = new BitmapTexture2D();
+// 水平方向,默认 repeat 模式
+texture.addressModeU = GPUAddressMode.repeat;
+// 竖直方向, 默认 repeat 模式
+texture.addressModeV = GPUAddressMode.repeat;
+```
+
+目前 `WebGPU` 默认支持以下几种循环模式:
+
+- 重复模式(repeat):默认模式,即对超出范围从 `[0,1]` 开始重新采样
+
+
+
+- 镜像重复模式(mirror_repeat):对超出范围经过镜像翻转后在从 `[0,1]` 开始重新采样。
+
+
+
+- 截取模式(clamp_to_edge):超出范围采样纹理边缘纹素颜色。
+
+
+
+
+
+
+<<< @/public/demos/texture/texture_address.ts
+
+### 2. 采样过滤模式
+
+一般来说,纹素和屏幕像素不会刚好对应,这就需要 `GPU` 去缩放像素大小。但不同的缩放模式会对最终像素颜色有一定的影响。我们可以通过设置纹理的 `magFilter` 和 `minFilter` 属性来控制 `GPU` 放大(Mag)和 缩小(Min)像素时采用的过滤模式。
+
+```ts
+let texture = new BitmapTexture2D();
+// 放大模式,默认 linear 模式
+texture.magFilter = 'linear';
+// 缩小模式,默认 linear 模式
+texture.minFilter = 'linear';
+```
+目前 `WebGPU` 支持 `linear` 线性采样 和 `nearest` 临近点采样模式。
+一般来说 `linear` 模式像素边缘更加平滑,适合复杂的图形过渡;`nearest` 像素边缘更加锐利,适合颜色分布清晰,边缘明显的纹理,可以通过如下例子,看到不同的采样模式对贴图变现的影响:
+
+
+
+<<< @/public/demos/texture/texture_filter.ts
+
+### 3. 多级渐远纹理 (Mipmap)
+在3D世界中,因为不同的物体和摄像机距离有近有远,对应的纹理图像有大有小。如果采用同样分辨率的纹理,对于远处的物体需要从高分辨率的原始图像中拾取一小分部像素颜色,这不仅浪费 `GPU` 性能,也会因为像素畸变造成不真实的感觉或产生大量 `摩尔纹`。
+`Orillusion` 使用一种 `多级渐远纹理 (Mipmap)` 的概念来解决这个问题,简单说就是对一个高分辨的图形自动缩放成一系列不同分辨率的纹理。根据贴图和观察者的距离不同,使用不同分辨率的贴图。远距离的物体使用低分辨的纹理,解析度更自然,而且也能有效节省 `GPU` 性能。
+
+我们可以通过 `useMipmap` 来进行开启或关闭,默认开启
+```ts
+let texture = new BitmapTexture2D();
+// 默认为 true
+texture.useMipmap = true;
+```
+
+
+
+<<< @/public/demos/texture/texture_mipmap.ts
\ No newline at end of file
diff --git a/docs/guide/gui/Readme.md b/docs/guide/gui/Readme.md
new file mode 100644
index 00000000..1d87f38e
--- /dev/null
+++ b/docs/guide/gui/Readme.md
@@ -0,0 +1,139 @@
+# 用户界面(GPU GUI)
+
+`Orillusion` 提供了高性能的用户界面(GUI)组件供开发者使用。
+通过合理搭配使用 GUI 组件,即可在项目中灵活展示 2D/3D 的 GUI 内容。本章我们先了解几个 GUI 的基本概念:
+
+## GUI 空间模式
+
+目前 `GUI` 支持两种模式渲染 `ViewSpace` 和 `WorldSpace`:
+
+- ViewSpace 模式:在这种模式下,GUI 组件被渲染在屏幕空间中,不随相机的视角更改而变动,也不会与其它物体产生 3D 空间遮挡关系;
+- WorldSpace 模式:在这种模式下,GUI 组件可看做三维空间的一块画布,拥有3D属性(旋转、缩放、平移),能够参与深度检测等,实现与其他对象遮挡和被遮挡关系。
+
+```ts
+import { ViewPanel, WorldPanel } from '@orillusion/core'
+
+// 创建一个面板对象
+let panelRoot: Object3D = new Object3D()
+// 添加 ViewPanel,设定为 ViewSpace 模式
+panelRoot.addComponent(ViewPanel)
+// 或 添加 WorldPanel,设定为 WorldSpace 模式
+panelRoot.addComponent(WorldPanel)
+```
+
+下面这个例子展示了 `ViewPanel` 与 `WorldPanel` 的区别:
+
+
+<<< @/public/demos/gui/panel.ts
+
+## UICanvas
+
+GUI 组件同样需要画布进行绘制,引擎中每个 `View3D` 中都内置有 `Canvas` 的数组,我们可以通过指定 `enableUICanvas` 来主动激活 `UICanvas` 对象:
+
+```ts
+let view = new View3D()
+...
+let canvas:UICanvas = view.enableUICanvas();
+```
+
+默认情况下,我们只需要一个 `UICanvas` 即可, 如果需要多个画布绘制,我们可以通过设置不同的 `index` 来激活多个 `UICanvas`,它们互相独立:
+
+```ts
+let canvas0:UICanvas = view.enableUICanvas(0);
+let canvas1:UICanvas = view.enableUICanvas(1);
+let canvas2:UICanvas = view.enableUICanvas(2);
+//...
+```
+
+以下示例展示了多个 `UICanvas` 共存的表现:
+
+
+
+<<< @/public/demos/gui/canvas.ts
+
+## UIPanel
+
+面板 `UIPanel` 用于承载具体的 GUI 组件渲染,需要添加到 `UICanvas` 中;
+```ts
+let panelObj = new Object3D();
+let panel:UIPanel = panelObj.addComponent(ViewPanel) // 创建一个屏幕空间面板组件
+let canvas:UICanvas = view.enableUICanvas(); // 启用默认的 UICanvas
+canvas.addChild(panel.object3D); // 添加面板
+```
+
+每个 `UIPanel` 可以视为 GUI 组件的根容器,在 `UIPanel` 内可以添加其它类型的 GUI 组件:
+
+```ts
+// 创建一个 UIImage 组件
+let imageQuad = new Object3D();
+let image:UIImage = imageQuad.addComponent(UIImage);
+// 创建一个 UIPanel
+let panel:UIPanel = new Object3D().addComponent(ViewPanel); // 创建一个屏幕空间面板组件
+// 将 UIImage 的 Object3D 添加到 UIPanel 的 Object3D 中
+panel.object3D.addChild(imageQuad);
+```
+
+### 渲染顺序
+在同一个 `UICanvas` 下,可以允许有多个 `ViewPanel` 或者 `WorldPanel` 共存,它们的渲染层级满足以下规则:
+
+1. `ViewPanel` 总是会显示在 `WorldPanel` 之上。
+2. `ViewPanel` 之间通过属性 `panelOrder` 控制绘制优先级。相同 `panelOrder` 下,根据它们所挂载的 `Object3D` 在场景树中的顺序为准。
+3. `WorldPanel` 之间通过属性 `panelOrder` 控制绘制优先级。相同 `panelOrder` 下,可以通过 `needSortOnCameraZ` 来让 `UIPanel` 根据相机远近距离自动排序。
+
+```ts
+let panel1 = new Object3D().addComponent(ViewPanel);
+let panel2 = new Object3D().addComponent(ViewPanel);
+let panel3 = new Object3D().addComponent(WorldPanel);
+let panel4 = new Object3D().addComponent(WorldPanel);
+
+// 手动设置 panelOrder, panel2 遮挡 panel1
+panel1.panelOrder = 1
+panel2.panelOrder = 2
+
+// ViewPanel 的 panel1/2 永远遮挡 WorldPanel 的 panel3/4
+panel3.panelOrder = 3
+panel4.panelOrder = 4 // panel4 优先遮挡 panel3
+
+// 若 panelOrder 相同,自动根据相机位置排序
+panel3.panelOrder = panel4.panelOrder = 3
+panel3.needSortOnCameraZ = true;
+panel4.needSortOnCameraZ = true;
+```
+
+### WorldPanel
+`WorldPanel` 组件相较于 `ViewPanel` 拥有更多的属性和功能:
+
+#### 相机锁定
+我们可以通过设置面板的 `billboard` 属性来控制面板的渲染角度:
+
+```ts
+let panel = new Object3D().addComponent(WorldPanel);
+panel.billboard = BillboardType.None; //默认视角,保持物体本身的渲染角度
+panel.billboard = BillboardType.BillboardY; //锁定Y轴,面板的XZ平面始终朝向相机方向
+panel.billboard = BillboardType.BillboardXYZ; //面板始终朝向相机
+
+```
+
+#### 深度测试
+设置面板是否参与深度排序:
+
+```ts
+let panel = new Object3D().addComponent(WorldPanel);
+panel.depthTest = true; //参与深度排序,获得遮挡关系
+panel.depthTest = false; //不参与深度排序,始终悬浮于所有物体的表面
+```
+
+#### 剔除模式
+跟 [材质剔除](guide/graphics/materials#切换剔除模式) 类似,我们也可以设置 `UIPanel` 渲染材质球的 `cullMode` 来切换剔除方式:
+
+```ts
+let panel = new Object3D().addComponent(WorldPanel);
+panel.cullMode = GPUCullMode.none; // 双面显示
+panel.cullMode = GPUCullMode.front; // 前面剔除,背面显示
+panel.cullMode = GPUCullMode.back; // 默认背面剔除,前面显示
+```
+
+下面这个例子,集中展示了面板之间的空间关系和 `WorldPanel` 的渲染特性:
+
+
+<<< @/public/demos/gui/panelOrder.ts
\ No newline at end of file
diff --git a/docs/guide/gui/button.md b/docs/guide/gui/button.md
new file mode 100644
index 00000000..58cfad57
--- /dev/null
+++ b/docs/guide/gui/button.md
@@ -0,0 +1,72 @@
+# UIButton
+
+[UIButton](/api/classes/UIButton.md) 继承自 [UIInteractive](/api/classes/UIInteractive)(可交互组件), 实现基本的按钮功能。 按钮组件内部封装有 `UIImage` 用于显示背景图,集成自可交互组件 `UIInteractive`,使用内置的 `UITransform` 描述的方形区域作为感应热区。
+
+## 组件贴图
+
+组件有多种状态 [UIInteractiveStyle](/api/enums/UIInteractiveStyle.md),每种状态对应一个贴图
+- `normalSprite` - 默认状态对应的贴图
+- `downSprite` - 鼠标按下时对应的贴图
+- `overSprite` - 鼠标 over 时对应的贴图
+- `disableSprite` - 组件被禁用时的贴图
+
+我们可以设置组件各种状态下对应的背景图,即可获得按钮随状态切换变换样式的效果
+```ts
+let button = new Object3D()
+let guiButton: UIButton = button.addComponent(UIButton)
+// 加载一组精灵贴图
+await Engine3D.res.loadAtlas('https://cdn.orillusion.com/atlas/UI_atlas.json')
+// 设置button对应状态贴图
+guiButton.normalSprite = Engine3D.res.getGUISprite('button-up')
+guiButton.downSprite = Engine3D.res.getGUISprite('button-down')
+guiButton.overSprite = Engine3D.res.getGUISprite('button-over')
+guiButton.disableSprite = Engine3D.res.getGUISprite('button-disable')
+```
+
+## 启用/禁用
+设置组件是否有效:
+- `true` - 按钮会响应鼠标事件
+- `false` - 不响应鼠标事件,并且呈现 `disableSprite` 的贴图
+
+```ts
+let button = new Object3D()
+let guiButton: UIButton = button.addComponent(UIButton)
+guiButton.enable = true; //false
+```
+
+## 组件交互
+跟普通 `Object3D` 一样,我们可以使用事件监听器来监听`PointerEvent3D` 中关于 `GUI` 系列事件,即可获得用户操作响应函数回调:
+
+- `PointerEvent3D.PICK_CLICK_GUI`:鼠标点击
+- `PointerEvent3D.PICK_OVER_GUI`:鼠标滑入
+- `PointerEvent3D.PICK_OUT_GUI`:鼠标移出
+- `PointerEvent3D.PICK_UP_GUI`:鼠标抬起
+- `PointerEvent3D.PICK_DOWN_GUI`:鼠标按下
+
+```ts
+let button = new Object3D()
+let guiButton: UIButton = button.addComponent(UIButton)
+
+button.addEventListener(PointerEvent3D.PICK_CLICK_GUI, this.onClick, this)
+button.addEventListener(PointerEvent3D.PICK_OUT_GUI, this.onOut, this)
+button.addEventListener(PointerEvent3D.PICK_OVER_GUI, this.onOver, this)
+button.addEventListener(PointerEvent3D.PICK_DOWN_GUI, this.onDown, this)
+```
+
+## 按钮文字
+一个对象可以添加多个 GUI 组件,比如同时添加 `UIButton` 和 `UITextField`
+
+```ts
+let button = new Object3D()
+let guiButton: UIButton = button.addComponent(UIButton)
+...
+// 加载字体资源
+await Engine3D.res.loadFont('https://cdn.orillusion.com/fnt/0.fnt')
+// 添加 GUI文字
+let buttonLabel = button.addComponent(UITextField);
+buttonLabel.text = 'Click me';
+```
+
+
+
+<<< @/public/demos/gui/button.ts
\ No newline at end of file
diff --git a/docs/guide/gui/demo.md b/docs/guide/gui/demo.md
new file mode 100644
index 00000000..286615d4
--- /dev/null
+++ b/docs/guide/gui/demo.md
@@ -0,0 +1,18 @@
+---
+aside: false
+---
+# 多面板示例
+
+下面这个例子,使用两个 `WorldPanel` 演示在实际3D场景中两种经典的面板使用场景:
+1. 其中一个面板,固定在3D场景中,面板内置有一个文本组件,文本信息可以动态实时更新内容
+2. 另一个面板,它被绑定在另一个3D节点上,可以随着父节点实时更新位置;且可以通过设置 `billboard` 类型来锁定其旋转角度,让面板始终朝向相机视角;配合 `depthTest` 可以实现不会被遮挡的标注效果
+
+
+
+<<< @/public/demos/gui/poi.ts
+
+下面这个例子,集中展示了多种 `GUI` 组件组合以及多 `UIPanel` 混合渲染:
+
+
+
+<<< @/public/demos/gui/demo.ts
diff --git a/docs/guide/gui/image.md b/docs/guide/gui/image.md
new file mode 100644
index 00000000..f02e6c92
--- /dev/null
+++ b/docs/guide/gui/image.md
@@ -0,0 +1,98 @@
+# UIImage
+
+[UIImage](/api/classes/UIImage) 组件提供图片的显示功能, 你可以通过加载单个图片或通过 `loadAtlas` 加载精灵图集 `GUISprite` 的列表到引擎中,然后指定 `GUISprite` 赋予图片组件供渲染。
+
+:::tip
+制作 `Atlas` 精灵图集依赖外部第三方工具,请自行搜索制作方法。默认 `UIImage` 组件未设置精灵图,将以白色方块形式呈现
+:::
+
+```ts
+import { Engine3D } from '@orillusion/core';
+
+// 创建用于显示UI的面板
+let panelRoot: Object3D = new Object3D();
+panelRoot.addComponent(ViewPanel);
+// 激活UICanvas
+let canvas = this.scene.view.enableUICanvas();
+// 面板加入到系统canvas中
+canvas.addChild(panelRoot);
+// 创建图片节点
+let imageQuad = new Object3D();
+panelRoot.addChild(imageQuad);
+this.image = imageQuad.addComponent(UIImage);
+this.image.uiTransform.resize(400, 60);
+this.image.uiTransform.y = 100;
+
+// 加载 Atlas 图集素材
+await Engine3D.res.loadAtlas('atlas/UI_atlas.json');
+this.image.sprite = Engine3D.res.getGUISprite('logo');
+```
+
+## 加载图集
+
+`Atlas` 封装了一组位图图片对象,我们可以通过 `Engine3D.res.loadAtlas` 加载全部图集,然后通过 `Engine3D.res.getGUISprite` 获取其中某一个元素图片,赋予组件进行渲染。
+
+```ts
+// 加载 Atlas 图集素材
+await Engine3D.res.loadAtlas('atlas/UI_atlas.json');
+// 在 UI_atlas.json 定义了 logo 素材
+image.sprite = Engine3D.res.getGUISprite('logo');
+```
+
+## 加载单个图片
+我们也可以通过已经创建好的 `Texture2D` 对象来主动生成一个 `GUISprite`,然后赋予 `UIImage` 组件供显示:
+```ts
+let bitmapTexture2D = new BitmapTexture2D();
+//设置y轴翻转
+bitmapTexture2D.flipY = true;
+//加载贴图
+await bitmapTexture2D.load('images/webgpu.png');
+//创建GUISprite
+let mySprite = makeAloneSprite('webgpu', bitmapTexture2D);
+//将GUISprite赋予UIImage组件
+this.image.sprite = mySprite;
+```
+
+
+## 修改图片颜色
+
+通过设置 `color` 属性更改图片颜色,如果组件有设置贴图,会乘法叠加贴图像素颜色
+
+```ts
+image.color = new Color(1.0, 0.0, 0.0, 1.0); //red
+```
+
+## 修改图片大小
+通过调用 `uiTransform.resize()` 来进行图片大小的调节
+
+```ts
+image.uiTransform.resize(150, 150)
+```
+
+## 组件visible(可见/隐藏)
+
+```ts
+image.visible = false;//true
+```
+
+## 销毁图片
+```ts
+image.destroy();
+```
+
+## 拉伸/平铺类型
+
+精灵图类型:参考 [ImageType](/api/enums/ImageType.md),设置精灵的渲染类型;
+
+- Simple:默认类型,精灵图被拉伸平铺到指定区域
+- Sliced:按照九宫格的方式进行拉伸渲染
+- Tiled:未支持
+- Filled:未支持
+
+```ts
+image.imageType = ImageType.Simple;
+```
+
+
+
+<<< @/public/demos/gui/image.ts
\ No newline at end of file
diff --git a/docs/guide/gui/imageGroup.md b/docs/guide/gui/imageGroup.md
new file mode 100644
index 00000000..3e85464f
--- /dev/null
+++ b/docs/guide/gui/imageGroup.md
@@ -0,0 +1,82 @@
+# UIImageGroup
+
+[UIImageGroup](/api/classes/UIImageGroup) 组件提供多图片的显示,该组件允许你在一个组件下,同时控制多个 `Quad` 渲染。相较于 `UIImage` 组件,其主要区别如下:
+1. `UIImageGroup` 多个 `Quad` 绑定在一个 `Object3D` 对象,在批量渲染同类型 `Sprite` 类型时,`UIImageGroup` 可以获得更加高效的渲染性能;
+2. `UIImageGroup` 中每个 `Quad` 使用自身的尺寸数据,节点所对应的`UITransform` 的缩放不会对每个 `Quad` 产生影响;
+3. `UIImageGroup` 需要指定下标 `index` 才能找到对应的 `Quad` 对象,设置 `Quad` 属性需要通过调用对应的 `set` API 进行设置。
+
+## 初始化图片组:
+
+```ts
+...
+// 创建图片组节点
+let groupObj = new Object3D();
+panelRoot.addChild(groupObj);
+
+// ImageGroup 组件需要设置内置多少个 Quad,默认为 1 个 Quad 节点
+this.imageGroup = groupObj.addComponent(UIImageGroup, (count: 2));
+```
+
+## 设置贴图
+
+和单个 `UIImage`一样,我们首先需要通过 `Engine3D.res.loadAtlas` 来加载精灵图集,然后通过 `setSprite` 赋予图片组中指定 `index` 的 `quad` 贴图内容:
+
+```ts
+// 加载 Atlas 图集素材
+await Engine3D.res.loadAtlas('atlas/UI_atlas.json');
+// 设置 0 位精灵贴图
+imageGroup.setSprite(0, Engine3D.res.getGUISprite('logo'));
+```
+
+## 修改图片颜色
+同样,通过 `setColor` 更改对应 `index` 的 `quad` 颜色,如果组件有设置贴图,会乘法叠加贴图像素颜色:
+
+```ts
+imageGroup.setColor(0, new Color(1.0, 0.0, 0.0, 1.0));
+```
+
+## 修改图片大小
+通过 `setSize` 更改对应 `index` 的 `quad` 大小:
+
+```ts
+imageGroup.setSize(0, 100, 100);
+```
+
+## 组件 visible(可见/隐藏)
+图片组中,可以设置 `visible` 属性统一修改所有 `quad` 显示或隐藏:
+
+```ts
+imageGroup.visible = false;//or true
+```
+
+## 销毁图片组
+```ts
+imageGroup.destroy();
+```
+
+## 修改指定下标精灵的拉伸/平铺类型
+
+精灵图类型:参考 [ImageType](/api/enums/ImageType.md),设置精灵的渲染类型;
+
+- Simple:默认类型,精灵图被拉伸平铺到指定区域
+- Sliced:按照九宫格的方式进行拉伸渲染
+- Tiled:未支持
+- Filled:未支持
+
+```ts
+imageGroup.setImageType(0, ImageType.Simple);
+```
+
+下面示例展示如何在 `UIImageGroup` 中设置单个 `Quad` 的位置和大小:
+
+
+
+<<< @/public/demos/gui/imageGroup.ts
+
+
+
diff --git a/docs/guide/gui/shadow.md b/docs/guide/gui/shadow.md
new file mode 100644
index 00000000..f4ffebf3
--- /dev/null
+++ b/docs/guide/gui/shadow.md
@@ -0,0 +1,85 @@
+# UIShadow
+
+[UIShadow](/api/classes/UIShadow) 组件可以赋予具备 `GUIRenderer` 组件投影效果。若同一个 `Object3D` 注册了多个渲染组件 `GUIRenderer`,比如同时拥有 `UITextField` 和 `UIImage`,则需要给每一个 `GUIRenderer` 添加单独的 `UIShadow` 组件
+
+```ts
+import { Engine3D } from '@orillusion/core';
+
+// 创建用于显示UI的面板
+let panelRoot: Object3D = new Object3D();
+panelRoot.addComponent(ViewPanel);
+// 激活UICanvas
+let canvas = this.scene.view.enableUICanvas();
+// 面板加入到系统canvas中
+canvas.addChild(panelRoot);
+// 创建图片节点
+let imageQuad = new Object3D();
+panelRoot.addChild(imageQuad);
+this.image = imageQuad.addComponent(UIImage);
+this.image.uiTransform.resize(400, 60);
+this.image.uiTransform.y = 100;
+// 注册投影组件
+let shadow = panelRoot.addComponent(UIShadow);
+shadow.quality = 1;//[0-4] 0:取消投影,1,单投影,2/3/4多投影
+```
+
+## shadowQuality
+通过设置 `shadowQuality` 可以调节投影品质, 品质越高,越消耗系统性能
+
+| 0 | 1 | 2 | 3 | 4 |
+| :---: | :---: | :---: | :---: | :---: |
+| 无阴影 | 单阴影 | 双阴影 | 三重阴影 | 四重阴影 |
+
+```ts
+let shadow: UIShadow;
+shadow.shadowQuality = 1;
+```
+## shadowOffset
+通过设置 `shadowOffset` 可以调节阴影相对原渲染单位偏移量
+
+```ts
+let shadow: UIShadow;
+shadow.shadowOffset = new Vector2(4.0, -4.0); // +x: right, +y: up
+```
+
+## shadowRadius
+通过设置 `shadowRadius` 可以调节各个投影的扩散距离
+
+```ts
+let shadow: UIShadow;
+shadow.shadowRadius = 2;
+```
+
+## shadowColor
+通过设置 `shadowRadius` 可以调节投影的颜色,透明度
+```ts
+let shadow: UIShadow;
+shadow.shadowColor = new Color(0.1, 0.5, 0.0, 0.8);
+```
+
+## isShadowless
+当有多个 `GUIRenderer` 组件挂载在同一个 `Object3D`上时,可以通过设置组件的 `isShadowless` 的属性来手动屏蔽指定组件的投影能力,只保留你想要投影的组件:
+
+```ts
+// 创建ui节点
+let root = new Object3D();
+// 挂载 UIImage
+let image = root.addComponent(UIImage);
+//image 将不产生投影
+image.isShadowless = true;
+//挂载 TextField
+let textField = root.addComponent(UITextField);
+
+// 挂载投影组件 UIShadow
+let shadow = root.addComponent(UIShadow);
+// 设置投影属性
+shadow.shadowQuality = 1;
+shadow.shadowColor = new Color(0.1, 0.5, 0.0, 0.8);
+shadow.shadowOffset = new Vector2(4.0, -4.0);
+shadow.shadowRadius = 4.0;
+```
+由于 `image` 屏蔽了投影能力,`UIShadow` 将只会作用于 `textField` 上。
+
+
+
+<<< @/public/demos/gui/shadow.ts
\ No newline at end of file
diff --git a/docs/guide/gui/textfield.md b/docs/guide/gui/textfield.md
new file mode 100644
index 00000000..6cd5e3a2
--- /dev/null
+++ b/docs/guide/gui/textfield.md
@@ -0,0 +1,83 @@
+# UITextField
+
+[UITextField](/api/classes/UITextField.md) 组件可以加载基于 `Bitmap Font` 的字体图集,在引擎中提供高性能的文本渲染能力。
+
+```ts
+import { Engine3D } from '@orillusion/core';
+// 加载 Bitmap Font 字体文件
+await Engine3D.res.loadFont('fnt/0.fnt');
+// 激活UICanvas
+let canvas = this.scene.view.enableUICanvas();
+// 创建用于显示UI的面板
+let panelRoot: Object3D = new Object3D();
+panelRoot.addComponent(ViewPanel);
+// 面板加入到系统canvas中
+canvas.addChild(panelRoot);
+// 创建文本节点
+let textQuad = new Object3D();
+panelRoot.addChild(textQuad);
+this.text = textQuad.addComponent(UITextField);
+// 设置Rect尺寸,该尺寸会影响文本框大小
+this.text.uiTransform.resize(400, 60);
+this.text.uiTransform.y = 100;
+
+this.text.text = 'Hello,Orillusion!';
+this.text.fontSize = 32;
+this.text.alignment = TextAnchor.MiddleCenter;
+```
+
+## 设置字体
+文本组件依赖于 `Bitmap Font` 图集,你需要先加载 `fnt` 图集文件到引擎中,然后文本才能被正常显示出来
+> 制作 `Bitmap Font` 字体依赖外部第三方工具,可以参考 [Hiero](https://libgdx.com/wiki/tools/hiero) 以及 [Distance field fonts
+](https://libgdx.com/wiki/graphics/2d/fonts/distance-field-fonts) 获取更多帮助
+```ts
+// e.g. 加载 Bitmap Font 字体文件
+await Engine3D.res.loadFont('path/to/font.fnt');
+text.font = 'fontName'; // 设定字体
+```
+
+## 设置内容
+```ts
+// 修改组件text
+text.text = 'Hello,Orillusion!';
+```
+
+## 字体大小
+```ts
+text.fontSize = 32;
+```
+
+## 对齐方式
+参考 [TextAnchor](/api/enums/TextAnchor.md),有九种对齐方式
+```ts
+text.alignment = TextAnchor.UpperLeft;
+```
+
+## 字体颜色
+```ts
+text.color = new Color(1.0, 0.0, 0.0, 1.0);// 默认为白色
+```
+
+## 行间距
+```ts
+text.lineSpacing = 1.5; //设置行距为字号尺寸的1.5倍。
+```
+
+## 文本框大小
+```ts
+text.uiTransform.resize(200, 200);//设置文本块为(200,200)。
+```
+
+## 设置组件visible(可见/隐藏)
+```ts
+text.visible = false;//true
+```
+
+## 销毁文本
+```ts
+text.destroy();
+```
+
+
+
+<<< @/public/demos/gui/textfield.ts
\ No newline at end of file
diff --git a/docs/guide/index.md b/docs/guide/index.md
new file mode 100644
index 00000000..4593448b
--- /dev/null
+++ b/docs/guide/index.md
@@ -0,0 +1,45 @@
+
+
+---
+
+`Orillusion` 引擎是一款完全支持 [WebGPU](https://www.orillusion.com/webgpu.html) 标准的轻量级渲染引擎。基于最新的 `Web` 图形API标准,我们做了大量的探索和尝试,实现了很多曾经在 `Web` 中很难实现或者根本实现不了的技术和功能。我们自己从以下几个方面对引擎的架构和功能特点做出了总结。
+
+## WebGPU 支持
+引擎底层没有考虑到兼容现有的 [WebGL](https://www.khronos.org/webgl/) 标准,而是完全向最新的 `WebGPU` 标准看齐。随着`WebGPU API` 和 `WGSL` 的持续发展,我们也将快速更新迭代引擎底层 `WebGPU` 的计算和渲染能力,提升引擎性能优势。
+
+## ECS 组件式系统
+引擎框架发展至今,业内普遍开始采用 `组合优于继承` 的开发设计原则。因此,我们放弃继承式架构,而选择了最新的 [ECS](https://wikipedia.org/wiki/Entity_component_system) 组件式架构做为引擎的成体设计思路。消除了继承模式中的继承链复杂,功能交织的问题,通过解耦,封装和模块化重新的设计,开发者可以更灵活的进行功能组合及扩展。
+
+## 面向数据(DO)设计
+严格的 `ECS` 架构要求,要求 `Entity`, `Component` 和 `System` 要完全独立分隔。这种设计范式下对于数据优化和性能是可以得到更大的提升。但是同时也会带来很大的负面问题就是开发成本和难度非常大。因此我们考虑到开发者的使用难度,以及Web开发者的开发习惯。我们采用了 `ECS` 中核心 `Data Oritented (面向数据开发)` 理念,实现按需 `DO` 的结构。目前的使用方式为,在 `GPU` 中创建连续内存,同时在 `CPU` 和 `GPU` 之间通过内存映射的方式,实现数据的连续高效传递,减少 `CPU` 和 `GPU` 之间数据交换的等待时间和次数。既能提高缓存命中率,实现性能的提升,也同时可以保证整体引擎开发和使用的易用性。
+
+
+
+
+
+## 集群光照剔除
+这里也就是 `Clustered Forward Rendering` 中的光照剔除方案。在二维 `(Tile)` 和三维 `(Cluster)` 同时对于空间进行块状分割,最后只计算对这个块状空间有光照贡献的光源,完成无效光源的剔除过程,提高计算效率。基于 `WebGL` 的 `Uniform Buffer` 有很多限制,光源数量支持比较少,一般在10个以内。`WebGPU` 有了具备了 `Storage Buffer`,基本上就是直接对标 `GPU` 显存的限制。只要做好自身的内存管理和优化,就可以充分利用GPU的能力,实现多光源渲染的场景。
+
+## 物理仿真系统
+我们首先接入了 `ammo.js`,做为CPU端的基本物理仿真功能实现。同时我们正在搭建基于`Compute Shader` 的 `GPU` 端物理仿真引擎,包括粒子,流体,软体,刚体,布料等。在`WebGL` 时期,只能依靠顶点和纹理的数据结构进行相应的计算过程,实现复杂,效率不高。通过`WebGPU` 的 `Compute Shader`,内存和数据结构更加灵活,给了我们很大的想象空间。目前已经实现了很多优秀的物理仿真案例,更多更强的物理仿真的功能正在快速迭代过程中。
+
+## 基于物理的材质渲染
+我们实现了最基本的 `Blinn-phong` 模型材质渲染。为了增加更好的真实感渲染效果,我们依靠 `HDR Light` ,也实现了基于 `PBR (Physically-based rendering)` 的材质渲染。也是目前主流引擎的标配了,是一项比较普及的基本引擎要求。
+
+## 动态漫反射全局光照
+`DDGI (Dynamic Diffuse Global Illumination)` 算法是一个基于 `Probe` 的全局光照算法。需要在空间中摆放许多个的 `Probe`,并进行分组,每组 `Probe` 打包成一个 `DDGI Volume`。`Compute Shader` 来计算每个`Probe` 的辐照度(光照信息)和 `G-buffer(几何信息)`,这些信息从球面映射到八面体再映射到正方形来存储。当需要着色时,只需要查看着色点周围的 `probe` 中存储的光照和几何信息来计算着色点的光照信息。将 `Volume` 绑定到摄像机上跟随移动,`Volume` 内的物体会应用间接光照,即被间接光照亮。从渲染效果等方面综合考量,目前我们设置的最大间接光源数量是32个。
+
+
+
+
+
+## 丰富的后处理特效
+`后处理特效` 是使得渲染内容氛围感提升的重要处理方式。我们基于 `WebGPU` 的 `compute shader`,目前实现了 `HDR 泛光`,`屏幕空间反射`, `环境光屏蔽` 等常用的后处理效果。依靠 `WebGPU` 的通用计算能力可以更高效的利用 `GPU` 计算优势,实现非常好的效果。
+
+例如,[屏幕空间反射 (SSR)](/guide/advanced/post_ssr) 是基于屏幕空间大小来实现反射效果。相比平面反射,可以实现场景任意表面反射,而且不需要额外的 `DrawCall`,是非常流行的实时反射技术。首先,屏幕空间物体的每个像素需要计算其反射向量。然后,需要判断屏幕空间的 `Ray Marching` 坐标的深度和深度缓存中存储的物体深度是否相交。最后,适当的调节粗糙度,把交点的颜色做为反射颜色完成着色。这个过程中的计算过程,我们都通过 `WebGPU` 的 `Compute Shader` 来实现,避免了 `CPU` 的消耗。最终在浏览器中可以呈现出非常良好的反射效果。
+
+更多扩展后处理特效请参考 [PostEffects](/guide/advanced/posteffect)
diff --git a/docs/guide/interaction/event.md b/docs/guide/interaction/event.md
new file mode 100644
index 00000000..8d58d9f1
--- /dev/null
+++ b/docs/guide/interaction/event.md
@@ -0,0 +1,39 @@
+# 自定义事件
+除了基本的鼠标和键盘事件,引擎还提供了自定义事件 [CEvent](#cevent) 类方便开发者使用,可以使用 `Engine3D.inputSystem` 触发和监听任意的自定义事件。我们推荐组件间需要交互时使用事件系统通信。
+
+
+
+<<< @/public/demos/interaction/event.ts
+
+## 事件派发
+调用 `Engine3D.inputSystem.dispatchEvent` 方法可以派发事件,派发对应事件会触发监听事件回调函数的执行。
+```ts
+import {Engine3D, CEvent} from '@orillusion/core';
+
+let customEvent = new CEvent("UserEvent", {name:'name',data:'data'});
+Engine3D.inputSystem.dispatchEvent(customEvent);
+```
+
+## 事件监听
+事件监听可以将事件与处理函数相关连
+```ts
+// 监听事件
+Engine3D.inputSystem.addEventListener("UserEvent", this.OnUserEvent, this);
+// 处理函数
+private OnUserEvent(e: CEvent) {
+ let params = e.data;
+}
+```
+
+## 移除事件
+不再需要的事件可以移除
+```ts
+Engine3D.inputSystem.removeEventListener("UserEvent", this.OnUserEvent, this);
+```
+
+## CEvent
+事件处理函数的参数是 [CEvent](/api/classes/CEvent) 类型,从该参数获取事件信息
+| 参数 | 类型 | 描述 | 示例 |
+| --- | --- | --- | --- |
+| type | string | 引擎中的事件的类型标识字符串 | "UserEvent" |
+| data | any | 附加数据 | {{ {name: 'name', data: 'any'} }} |
\ No newline at end of file
diff --git a/docs/guide/interaction/keyboard.md b/docs/guide/interaction/keyboard.md
new file mode 100644
index 00000000..cd3cb970
--- /dev/null
+++ b/docs/guide/interaction/keyboard.md
@@ -0,0 +1,45 @@
+# 键盘
+引擎同样可以通过 [inputSystem](/api/classes/InputSystem) 监听键盘输入事件,而且支持开发者随时查询当前的键盘交互实况,不需引入额外包且调用接口十分简单。
+
+## 监听事件
+跟监听鼠标事件一样,开发者可以将感兴趣的键盘按键挂载到事件系统,当该按钮触发后引擎会触发对应的回调函数。
+
+键盘事件支持的类型
+| 事件 | 说明 |
+| --- | --- |
+| KEY_DOWN | 按键每次按下时响应。 |
+| KEY_UP | 按键每次回弹时响应。 |
+
+基本使用方法:
+
+```ts{6}
+import { ComponentBase, KeyEvent, Engine3D } from "@orillusion/core";
+export class keyScript extends ComponentBase {
+ protected init() {}
+
+ protected start() {
+ Engine3D.inputSystem.addEventListener(KeyEvent.KEY_UP, this.onKeyUp, this);
+ }
+ onKeyUp(e: KeyEvent) {
+ // 按键回调
+ }
+}
+```
+
+## KeyEvent
+引擎会默认监听当前 `window` 下的键盘事件,调用监听函数后会在回调函数中获取到 [KeyEvent](/api/classes/KeyEvent) 类型的事件。
+
+| 参数 | 类型 | 说明 |
+| --- | --- | --- |
+| KEY_DOWN | string | 按键每次按下时响应。 |
+| KEY_UP | string | 按键每次回弹时响应。 |
+| keyCode | number | 对应的按键码,详情请参考 [keycode](/api/enums/KeyCode) 定义。 |
+
+
+## 示例
+该示例演示 W、S、A、D、Q、E六个按钮的操作
+
+
+
+<<< @/public/demos/interaction/keyboard.ts
+
diff --git a/docs/guide/interaction/pickfire.md b/docs/guide/interaction/pickfire.md
new file mode 100644
index 00000000..c90b84b3
--- /dev/null
+++ b/docs/guide/interaction/pickfire.md
@@ -0,0 +1,73 @@
+# 拾取事件
+在三维应用中时常需要点击场景中的物体,引擎支持射线包围盒拾取和帧缓冲区拾取。
+
+拾取支持的事件类型:
+| 名称 | 解释 |
+| --- | --- |
+| PICK_OVER | 当触控点进入碰撞体范围时触发一次 |
+| PICK_OUT | 当触控点离开碰撞体范围时触发一次 |
+| PICK_CLICK | 当触控点在碰撞体范围内按下并松开,在松开时触发一次 |
+| PICK_MOVE | 当触控点在碰撞体范围内移动时触发 |
+| PICK_UP | 当触控点在碰撞体范围内松开时触发一次 |
+| PICK_DOWN | 当触控点在碰撞体范围内按下时触发一次 |
+
+## 拾取检测
+引擎会统一监听鼠标事件,对场景中的所有可点击的 `Object3D` 进行拾取检测,并触发对应的事件。用户可以给物体添加 [ColliderComponent](/api/classes/ColliderComponent) 组件标明物体可被点击,并监听对应的 [PointerEvent3D](/guide/interaction/pointer#pointerevent3d) 事件即可。
+引擎统一封装了两种拾取类型的用法,可以通过简单配置进行切换
+
+```ts
+//引擎启动前需要配置开启拾取和拾取类型
+Engine3D.setting.pick.enable = true;
+// Bound: 包围盒拾取, pixel: 帧缓冲区拾取
+Engine3D.setting.pick.mode = `bound`; // or 'pixel'
+
+await Engine3D.init()
+// 拾取检测依赖 Collider 碰撞组件
+let obj = Object3D();
+obj.addComponent(ColliderComponent);
+
+// 在节点上添加 PickEvent 事件监听,在回调函数可以获取到对应的事件
+obj.addEventListener(PointerEvent3D.PICK_CLICK, onPick, this);
+
+// 或者通过 view.pickFire 监听所有物体点击事件
+view.pickFire.addEventListener(PointerEvent3D.PICK_CLICK, onPick, this);
+
+//回调函数中获取到事件信息
+function onPick(e: PointerEvent3D) {
+ ...
+}
+```
+
+## 包围盒拾取
+射线包围盒是一种常用的 CPU 计算拾取方法,需要计算 [ColliderComponent](/api/classes/ColliderComponent) 组件的 [ColliderShape](/api/classes/ColliderShape) 和鼠标射线的交集,在物体数量不多的场景中性能较好,但是精度较差,因为包围盒往往不能够精准的表达物体的真实形状。
+
+目前引擎提供的基本 `ColliderShape` 有 [BoxColliderShape](/api/classes/BoxColliderShape), [SphereColliderShape](/api/classes/SphereColliderShape), [CapsuleColliderShape](/api/classes/CapsuleColliderShape), 也可以通过物体本身 `Mesh` 形状构建 [MeshColliderShape](/api/classes/MeshColliderShape)
+
+```ts
+import {Object3D, Collider, BoxColliderShape, Vector3} from '@orillusion/core';
+
+let box = new Object3D();
+let mr = box.addComponent(MeshRenderer);
+// 设置 box geometry
+mr.geometry = new BoxGeometry(1,1,1);
+// 添加碰撞盒检测
+let collider = box.addComponent(ColliderComponent);
+// bound 模式需要手动设置碰撞盒样式和大小
+// 拾取精度取决于 box.geometry 和 collider.shape 的匹配程度
+collider.shape = new BoxColliderShape().setFromCenterAndSize(new Vector3(0, 0, 0), new Vector3(1, 1, 1));
+```
+
+- 左面的 `box` 使用同形状的 `BoxColliderShape` 进行检测,精度较好
+- 右边的 `sphere` 也使用 `BoxColliderShape`,但可点击区域就会比实际模型要大,精度较差
+
+
+
+<<< @/public/demos/interaction/pick_bound.ts
+
+
+## 帧缓冲拾取
+`pixel` 模式和 `bound` 模式不同,`帧缓冲拾取` 利用的是 `GPU` 的像素检测,几乎不消耗 `CPU` 性能,可以无视场景中交互对象的数量和形状复杂度,支持所有触控事件。当场景模型形状复杂或物体数量众多的时候,我们推荐使用 `pixel` 模式进行拾取检测。
+
+
+
+<<< @/public/demos/interaction/pick_pixel.ts
diff --git a/docs/guide/interaction/pointer.md b/docs/guide/interaction/pointer.md
new file mode 100644
index 00000000..eefdc93a
--- /dev/null
+++ b/docs/guide/interaction/pointer.md
@@ -0,0 +1,59 @@
+# 鼠标与触控
+引擎中提供了基本的输入系统 [inputSystem](/api/classes/InputSystem),可以统一处理鼠标与触屏的操作输入。
+
+## 监听事件
+`inputSystem` 接口已经整合到引擎的 `Engine3D` 实例中,用户可以很方便地使用,只需要监听对应的事件类型就可以在事件回调函数中获得对应的事件。
+```ts{6}
+import { ComponentBase, PointerEvent3D, Engine3D } from "@orillusion/core";
+export class PickScript extends ComponentBase {
+ protected init() {}
+
+ protected start() {
+ Engine3D.inputSystem.addEventListener(PointerEvent3D.POINTER_CLICK, this.onClick, this);
+ }
+ onClick(e: PointerEvent3D) {
+ // 点击回调
+ }
+}
+```
+
+引擎已经整合了触控与鼠标的操作,使用统一事件模型, 用 [PointerEvent3D](/api/classes/PointerEvent3D) 来指定具体的事件类型。
+| 事件 | 说明 |
+| --- | --- |
+| POINTER_CLICK | 触摸点击事件 |
+| POINTER_MOVE | 触摸滑动事件 |
+| POINTER_DOWN | 触摸开始事件 |
+| POINTER_UP | 触摸结束事件 |
+| POINTER_OUT | 触摸滑出事件 |
+
+
+## PointerEvent3D
+
+引擎会默认监听当前 `canvas`,统一了触控与鼠标的事件模型,调用监听函数后会在回调函数中获取到 [PointerEvent3D](/api/classes/PointerEvent3D) 类型的事件。
+
+| 参数 | 类型 | 描述 |
+| --- | --- | --- |
+| target | Object3D | 事件触发的目标对象 |
+| data | Object | 事件触发的坐标数据,包含目标对象 Normal 和 Position 信息等 |
+| pointerId | number | 对于某个由指针引起的事件的唯一标识 |
+| pointerType | string | 表明引发该事件的设备类型,例如:鼠标/笔/触摸等 |
+| isPrimary | boolean | 表示该指针是否为该类型指针中的首选指针 |
+| pressure | number | 规范化后的指针输入的压力值,取值范围为 0 到 1,0 代表硬件可检测到的压力最小值,1 代表最大值 |
+| mouseX | number | 当前屏幕 x 坐标 |
+| mouseY | number | 当前屏幕 y 坐标 |
+| movementX | number | 它提供了当前事件和上一个鼠标事件之间鼠标在水平方向上的移动值 |
+| movementY | number | 它提供了当前事件和上一个鼠标事件之间鼠标在垂直方向上的移动值 |
+| deltaX | number | 在向左滚动时返回负双值,向右滚动时返回正双值,否则为0 |
+| deltaY | number | 在向下滚动时返回正值,向上滚动时返回负值,否则为0 |
+| metaKey | boolean | Meta 键是否按下 |
+| ctrlKey | boolean | Ctrl 键是否按下 |
+| altKey | boolean | Alt 键是否按下 |
+| shiftKey | boolean | Shift 键是否按下 |
+
+
+## 示例
+该示例演示如何监听左键、右键、滚轮的操作。
+
+
+
+<<< @/public/demos/interaction/pointEvent.ts
\ No newline at end of file
diff --git a/docs/guide/media/Readme.md b/docs/guide/media/Readme.md
new file mode 100644
index 00000000..28c77f83
--- /dev/null
+++ b/docs/guide/media/Readme.md
@@ -0,0 +1,54 @@
+# 媒体扩展
+
+`Orillusion` 提供了 [@orillusion/media-extention](/media-extention/) 扩展包对多媒体进行支持,可以方便的加载展示图片、视频和音频,并提供相应的处理能力。请注意需要单独安装,安装之后使用方式与普通的贴图,材质或组件类似。
+
+## 安装
+跟引擎方法一致,我们可以通过 `NPM` 和 `CDN` 链接两种方式来引入物理插件:
+
+### 1. 通过 `NPM` 包安装
+```bash
+npm install @orillusion/core --save
+npm install @orillusion/media-extention --save
+```
+```ts
+import { Engine3D } from "@orillusion/core"
+import { Physics } from "@orillusion/media-extention"
+```
+
+### 2. 通过 `CDN` 链接引入
+推荐使用 `ESModule` 构建版本
+```html
+
+```
+
+或通过 `
+
+
+```
+
+## 媒体材质
+
+目前 [media-extention](/media-extention/) 支持以下几种类型的材质:
+
+| 材质 | 描述 |
+| --- | --- |
+| [ImageMaterial](/media-extention/classes/ImageMaterial.md) | 不计算光照,仅通过Image像素颜色渲染的基础材质 |
+| [VideoMaterial](/media-extention/classes/VideoMaterial.md) | 不计算光照,仅通过Video像素颜色渲染的基础材质 |
+| [ChromaKeyMaterial](/media-extention/classes/ChromaKeyMaterial.md) | 不计算光照,仅通过Video像素颜色渲染的基础材质,并且过滤了背景色 |
+
+## 音频组件
+
+除了图片和视频, [media-extention](/media-extention/) 还添加了常用的音频组件:
+
+| 组件 | 描述 |
+| --- | --- |
+| [AudioListener](/media-extention/classes/AudioListener.md) | 音频接收组件,需要与下面两个组件配合使用 |
+| [StaticAudio](/media-extention/classes/StaticAudio.md) | 静态音频组件,声音大小与位置无关 |
+| [PositionAudio](/media-extention/classes/PositionAudio.md) | 动态音频组件,声音大小随着音源位置变化 |
\ No newline at end of file
diff --git a/docs/guide/media/audio.md b/docs/guide/media/audio.md
new file mode 100644
index 00000000..eddf2c45
--- /dev/null
+++ b/docs/guide/media/audio.md
@@ -0,0 +1,62 @@
+# 音频组件
+引擎通过封装 [Web Audio API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API),提供用户加载播放音频的基础能力:
+
+- `AudioListener` - 虚拟音频接收组件,需要与下列音源配合使用
+- `StaticAudio` - 与空间位置无关的音源,播放效果与 Listener 无关
+- `PositionAudio` - 基于空间位置的音源,播放效果会随着 Listener 的相对位置改变
+
+## 静态音频
+播放与空间位置无关的音频,如全局背景音乐,音效等
+```ts
+import {AudioListener, StaticAudio} from '@orillusion/media-extention'
+
+// 音频接收组件,静态音频可以添加给任意对象,这里用 scene 为例
+let listener = scene.addComponent(AudioListener)
+
+// 创建静态音源
+let audioObj = new Object3D()
+let staticAudio = audioObj.addComponent(StaticAudio)
+// 设置收听对象
+staticAudio.setLisenter(listener)
+// 加载音频
+await staticAudio.load('https://cdn.orillusion.com/audio.ogg')
+// 播放音频,声音效果与空间位置无关
+staticAudio.play()
+```
+
+
+
+<<< @/public/demos/media/static_audio.ts
+
+## 3D空间音频
+基于 [PannerNode](https://developer.mozilla.org/en-US/docs/Web/API/PannerNode) 的3D空间位置的音频播放,声音的方位和大小与接收者和音源的相对位置有关。
+```ts
+import {AudioListener, PositionAudio} from '@orillusion/media-extention'
+
+let movingObj = new Object3D()
+// 添加音频接收组件,一般是动态移动的物体,比如添加给 camera 来模拟用户空间位置
+let listener = movingObj.addComponent(AudioListener)
+
+// 创建空间音源
+let audioObj = new Object3D()
+let positionAudio = audioObj.addComponent(PositionAudio)
+// 设置音源空间参数, 详见 PannerNode API
+positionAudio.refDistance = 10;
+positionAudio.maxDistance = 100;
+positionAudio.setDirectionalCone( 180, 230, 0.1 ); // coneInnerAngle, coneOuterAngle, coneOuterGain
+...
+// 显示音频的空间范围
+positionAudio.showHelper()
+
+// 设置收听对象
+positionAudio.setLisenter(listener)
+// 加载音频
+await positionAudio.load('https://cdn.orillusion.com/audio.ogg')
+
+// 播放音频,声音方位和大小会随着 movingObj 和 audioObj 的相对位置而变化
+positionAudio.play()
+```
+
+
+
+<<< @/public/demos/media/dynamic_audio.ts
diff --git a/docs/guide/media/chromakey.md b/docs/guide/media/chromakey.md
new file mode 100644
index 00000000..8d8e5fa4
--- /dev/null
+++ b/docs/guide/media/chromakey.md
@@ -0,0 +1,38 @@
+# 色键材质(过滤背景色)
+色键 `(ChromaKey)` 材质在 [Video](./video.md) 材质之上添加了过滤了背景色的功能,支持基本的视频材质UV以下属性:
+
+| 属性 | 类型 | 描述 |
+| :---: | :---: | :---: |
+| baseMap | VideoTexture | 视频贴图 |
+| baseColor | Color | 基础颜色 |
+| rectClip | Vector4 | 上下左右裁剪区域 |
+
+另外,`ChromaKeyMaterial` 还提供背景色过滤功能:
+| 属性 | 描述 |
+| :---: | :---: |
+| keyColor | 背景关键色 |
+| colorCutoff | 镂空强度 |
+| colorFeathering | 颜色羽化系数 |
+| maskFeathering | 边缘羽化系数 |
+| sharpening | 边缘锐化系数 |
+| despoil | 环境光削弱系数 |
+| despoilLuminanceAdd | 削弱后补光强度 |
+
+## 用法
+```ts
+import {ChromaKeyMaterial, VideoTexture} from '@orillusion/media-extention'
+
+// 创建视频纹理
+let videoTexture = new VideoTexture();
+await videoTexture.load('path/to/video')
+// 创建视频材质
+let mat = new ChromaKeyMaterial();
+mat.baseMap = videoTexture;
+// 设置过滤绿色
+mat.keyColor = new Color(0.0, 1.0, 0.0, 0.0)
+mat.colorCutoff = 0.2
+```
+
+
+
+<<< @/public/demos/media/chroma.ts
\ No newline at end of file
diff --git a/docs/guide/media/image.md b/docs/guide/media/image.md
new file mode 100644
index 00000000..e4b2f660
--- /dev/null
+++ b/docs/guide/media/image.md
@@ -0,0 +1,28 @@
+# 图片材质
+该材质继承于 [UnLit](../graphics/materials.md#unlit-材质) 材质,同样不计算光照,仅通过图片像素颜色渲染的基础材质,不同的是,本材质增加了空间裁剪 `rectClip` 的设置,可以自由的进行图片的裁剪。
+
+支持以下属性:
+| 属性 | 类型 | 描述 |
+| :---: | :---: | :---: |
+| baseMap | Texture | 图片贴图 |
+| baseColor | Color | 基础颜色 |
+| rectClip | Vector4 | 上下左右裁剪区域 |
+
+## 用法
+```ts
+import {ImageMaterial} from '@orillusion/media-extention'
+
+// 创建图片材质
+let mat = new ImageMaterial();
+// 加载2D纹理
+let texture = await Engine3D.res.loadTexture('path/to/image');
+mat.baseMap = texture;
+// 设置基础颜色
+mat.baseColor = new Color(1, 1, 1, 1)
+// 设置裁剪区域, left/top/right/bottom
+mat.rectClip = new Vector4(0, 0, 0, 0);
+```
+
+
+
+<<< @/public/demos/media/image.ts
\ No newline at end of file
diff --git a/docs/guide/media/video.md b/docs/guide/media/video.md
new file mode 100644
index 00000000..39d6fa5d
--- /dev/null
+++ b/docs/guide/media/video.md
@@ -0,0 +1,29 @@
+# 视频材质
+该材质继承于 [UnLit](../graphics/materials.md#unlit-材质) 材质,同样不计算光照,仅通过视频像素颜色渲染的基础材质,不同的是,可以自动同步视频播放的帧内容,另外,也增加了空间裁剪 `rectClip` 的设置,可以更自由的进行裁剪。
+
+视频材质支持以下属性:
+| 属性 | 类型 | 描述 |
+| :---: | :---: | :---: |
+| baseMap | VideoTexture | 视频贴图 |
+| baseColor | Color | 基础颜色 |
+| rectClip | Vector4 | 上下左右裁剪区域 |
+
+## 用法
+```ts
+import {VideoMaterial, VideoTexture} from '@orillusion/media-extention'
+
+// 创建视频纹理
+let videoTexture = new VideoTexture();
+await videoTexture.load('https://cdn.orillusion.com/videos/bunny.mp4')
+// 创建视频材质
+let mat = new VideoMaterial();
+mat.baseMap = videoTexture;
+// 设置基础颜色
+mat.baseColor = new Color(1, 1, 1, 1)
+// 设置裁剪区域, left/top/right/bottom
+mat.rectClip = new Vector4(0, 0, 0, 0);
+```
+
+
+
+<<< @/public/demos/media/video.ts
diff --git a/docs/guide/particle/Readme.md b/docs/guide/particle/Readme.md
new file mode 100644
index 00000000..acf468cd
--- /dev/null
+++ b/docs/guide/particle/Readme.md
@@ -0,0 +1,92 @@
+# 简介
+粒子系统是一种模拟大量粒子行为和运动的技术,这些粒子可以是虚拟的对象,如粉尘、火焰、水滴,也可以是抽象的元素,如光点、星星、雪花等,粒子系统通过模拟每个粒子的运动、外观和相互作用,生成各种逼真的动态效果。
+
+## 安装
+粒子系统以独立 [@orillusion/particle](/particle/) 扩展的形式提供,我们可以通过 `NPM` 和 `CDN` 链接两种方式来引入粒子系统插件:
+
+### 1. 通过 `NPM` 包安装
+```bash
+npm install @orillusion/core --save
+npm install @orillusion/particle --save
+```
+```ts
+import { Engine3D } from "@orillusion/core"
+import { ParticleSystem } from "@orillusion/particle"
+```
+
+### 2. 通过 `CDN` 链接引入
+推荐使用 `ESModule` 构建版本
+```html
+
+```
+
+或通过 `
+
+
+```
+
+## 使用方式
+### 1、添加粒子系统组件
+首选创建一个实体对象,并添加粒子系统组件:
+```ts
+let obj = new Object3D();
+let ps = obj.addComponent(ParticleSystem);
+scene.addChild(obj);
+```
+
+### 2、设置单个粒子的几何形状
+设置单个粒子的几何形状,例如使用一个`PlaneGeometry`:
+```ts
+ps.geometry = new PlaneGeometry(1, 1, 1, 1, Vector3.Z_AXIS);
+```
+
+### 3、设置粒子材质:
+设置粒子材质,并加载需要使用的纹理贴图:
+```ts
+let material = new ParticleMaterial();
+material.baseMap = await Engine3D.res.loadTexture('particle/fx_a_glow_003.png');
+ps.material = material;
+```
+
+### 4、选择仿真器:
+为 `ParticleSystem` 组件指定要使用的仿真器,目前仅 `ParticleStandSimulator` 仿真器可用:
+```ts
+let simulator = ps.useSimulator(ParticleStandSimulator);
+```
+
+### 5、添加发射器模块
+为 `ParticleStandSimulator` 添加一个必备的发射器模块,并设置发射参数:
+```ts
+let emitter = simulator.addModule(ParticleEmitterModule);
+// 设置最大粒子数
+emitter.maxParticle = 10000;
+// 设置持续发射时间
+emitter.duration = 10;
+// 设置发射速率(x个/秒)
+emitter.emissionRate = 1000;
+// 设置粒子生命周期大小
+emitter.startLifecycle.setScalar(1);
+// 设置发射器发射形状
+emitter.shapeType = ShapeType.Sphere;
+// 设置发射器发射形状的半径
+emitter.radius = 10;
+// 设置发射器从发射形状的哪个位置发射
+emitter.emitLocation = EmitLocation.Shell;
+```
+
+### 6、播放
+开始播放粒子动画
+```ts
+ps.play();
+```
+
+
+
+<<< @/public/demos/particle/ParticleSystem.ts
diff --git a/docs/guide/particle/baseModule.md b/docs/guide/particle/baseModule.md
new file mode 100644
index 00000000..73d52de6
--- /dev/null
+++ b/docs/guide/particle/baseModule.md
@@ -0,0 +1,95 @@
+# 基本模块
+粒子系统的仿真器可添加各种属性模块,每个属性模块包含一种功能实现和与之相关的参数,目前内置有:
+- `ParticleOverLifeScaleModule` - 粒子生命周期内大小变化模块
+- `ParticleOverLifeSpeedModule` - 生命周期内速度变化模块
+- `ParticleOverLifeRotationModule` - 生命周期内自旋变化模块
+- `ParticleOverLifeColorModule` - 生命周期内颜色变化模块
+- `ParticleGravityModifierModule` - 重力变化模块
+- `ParticleTextureSheetModule` - 纹理图集模块
+
+## 大小变换模块
+若想使单个粒子的大小在它自己的整个生命周期内,随着时间变换而变换时,可以给仿真器添加 `ParticleOverLifeScaleModule` 模块:
+```ts
+// 添加生命周期内大小变换模块
+let overLifeScaleModule = simulator.addModule(ParticleOverLifeScaleModule);
+// 设置大小变换参数,从起始的 1倍大小 到 结束时 3倍大小
+overLifeScaleModule.scaleSegments = [
+ new Vector4(1, 1, 1),
+ new Vector4(3, 3, 3),
+];
+```
+
+
+
+<<< @/public/demos/particle/OverLifeScaleModule.ts
+
+## 内旋转变换模块
+若想使单个粒子的旋转角度在它自己的整个生命周期内,随着时间变换而变换时,可以给仿真器添加 `ParticleOverLifeRotationModule` 模块:
+```ts
+// 添加生命周期内旋转变换模块
+let overLifeRotationModule = simulator.addModule(ParticleOverLifeRotationModule);
+// 设置自旋变换参数,从起始的 0° 到 结束时 270°
+overLifeRotationModule.rotationSegments = [
+ new Vector4(0, 0, 0),
+ new Vector4(0, 90 * DEGREES_TO_RADIANS, 0),
+];
+```
+
+
+
+
+<<< @/public/demos/particle/OverLifeRotationModule.ts
+
+## 颜色变换模块
+若想使单个粒子的颜色在它自己的整个生命周期内,随着时间变换而变换时,可以给仿真器添加 `ParticleOverLifeColorModule` 模块:
+```ts
+// 添加生命周期内颜色变换模块
+let overLifeColorModule = simulator.addModule(ParticleOverLifeColorModule);
+// 设置起始时颜色
+overLifeColorModule.startColor = new Color(1, 1, 0);
+// 设置起始时透明度
+overLifeColorModule.startAlpha = 0.0;
+// 设置结束时颜色
+overLifeColorModule.endColor = new Color(0.1, 0.6, 1);
+// 设置结束时透明度
+overLifeColorModule.endAlpha = 1.0;
+```
+
+
+
+
+<<< @/public/demos/particle/OverLifeColorModule.ts
+
+## 重力修改模块
+在模拟粒子运动轨迹时可以给仿真器添加一个重力修改模块 `ParticleGravityModifierModule` ,使粒子可以根据重力方向移动:
+```ts
+// 添加重力修改模块
+let gravityModifier = simulator.addModule(ParticleGravityModifierModule);
+gravityModifier.gravity = new Vector3(0, -0.98, 0);
+```
+
+
+
+<<< @/public/demos/particle/GravityModifierModule.ts
+
+## 纹理图集模块
+当需要给每个粒子提供不同纹理或者使单个粒子附带纹理动画时可以给仿真器添加一个纹理图集模块 `ParticleTextureSheetModule`:
+
+```ts
+// 添加纹理图集模块
+let sheetModule = simulator.addModule(ParticleTextureSheetModule);
+// 设置每列包含多少个子块
+sheetModule.clipCol = 4;
+// 设置整张纹理总共包含多少个子块
+sheetModule.totalClip = 4 * 4;
+// 设置整张纹理的宽度
+sheetModule.textureWidth = material.baseMap.width;
+// 设置整张纹理的高度
+sheetModule.textureHeight = material.baseMap.height;
+// 设置纹理动画播放速率
+sheetModule.playRate = 1.0;
+```
+
+
+
+<<< @/public/demos/particle/TextureSheetModule.ts
diff --git a/docs/guide/particle/emitter.md b/docs/guide/particle/emitter.md
new file mode 100644
index 00000000..21168cab
--- /dev/null
+++ b/docs/guide/particle/emitter.md
@@ -0,0 +1,42 @@
+---
+aside: false
+---
+# 发射器模块
+发射器模块是粒子系统中的一个重要组成部分,用于定义和控制粒子的发射行为。它决定了粒子在空间中的初始位置、速度、方向以及其他属性,从而影响整个粒子系统的效果。
+
+## 使用方式
+发射器模块是粒子仿真器必备模块,以下代码展示如何为粒子仿真器添加一个发射器模块:
+```ts
+let emitter = simulator.addModule(ParticleEmitterModule);
+// 设置最大粒子数
+emitter.maxParticle = 10000;
+// 设置持续发射时间
+emitter.duration = 10;
+// 设置发射速率(x个/秒)
+emitter.emissionRate = 1000;
+// 设置粒子生命周期大小
+emitter.startLifecycle.setScalar(1);
+// 设置发射器发射形状
+emitter.shapeType = ShapeType.Box;
+// 设置发射器发射形状的大小
+emitter.boxSize = new Vector3(10, 10, 10);
+// 设置发射器从发射形状的哪个位置发射
+emitter.emitLocation = EmitLocation.Edge;
+```
+
+粒子发射器模块 `ParticleEmitterModule` 包含一些重要的发射参数,各参数作用如下:
+| 名称 | 描述 |
+| :---: | --- |
+| maxParticle | 最大粒子数 |
+| duration | 粒子发射持续时间(单位:秒) |
+| emissionRate | 发射速率(每秒发射多少个粒子) |
+| startLifecycle | 粒子生命周期(单位:秒) |
+| shapeType | 发射器形状(圆形、矩形、球体、锥体) |
+| emitLocation | 发射位置(基于 实体,表面,边缘) |
+| angle | 角度(当发射器形状为锥体时有效) |
+| radius | 半径(当发射器形状为圆形、球体、锥体时有效) |
+| boxSize | 矩形/盒子 大小 |
+
+
+
+<<< @/public/demos/particle/ParticleEmitter.ts
diff --git a/docs/guide/particle/particle.md b/docs/guide/particle/particle.md
new file mode 100644
index 00000000..09a7642c
--- /dev/null
+++ b/docs/guide/particle/particle.md
@@ -0,0 +1,80 @@
+# 粒子动画
+粒子动画由组件 [ParticleSystem](/api/classes/ParticleSystem) 驱动,通过 `ParticleSimulator` 使用 `ComputeShader` 模拟粒子运动轨迹,实现粒子动画特效。
+
+## 基本模块
+使用 `ParticleSystem` 组件时,需要指定一个粒子仿真器,目前仅 `ParticleStandSimulator` 仿真器可用,该粒子仿真器有以下基本模块:
+
+| 名称 | 描述 |
+| :---: | --- |
+| ParticleEmitModule | 粒子发射器模块(必备模块) |
+| ParticleOverLifeScaleModule | 粒子生命周期内大小变化模块 |
+| ParticleOverLifeSpeedModule | 粒子生命周期内速度变化模块 |
+| ParticleOverLifeRotationModule | 粒子生命周期内旋转变化模块 |
+| ParticleGravityModifierModule | 粒子全局的重力变化模块 |
+| ParticleRotationModule | 粒子角速度旋转模块 |
+| ParticleTextureSheetModule | 粒子图集动画模块 |
+
+## 基本使用
+
+
+<<< @/public/demos/particle/particleAnim.ts
+
+以火焰Demo为例,首先给场景指定的对象添加 `ParticleSystem` 组件,并指定粒子的形状,材质:
+```ts
+// 创建一个3D对象实体,并添加到场景
+let obj = new Object3D();
+scene.addChild(obj);
+
+// 为该对象添加 ParticleSystem 组件
+let particleSystem = obj.addComponent(ParticleSystem);
+
+// 创建粒子材质,并加载指定的粒子纹理
+let material = new ParticleMaterial();
+material.baseMap = await Engine3D.res.loadTexture('https://cdn.orillusion.com/particle/fx_a_glow_003.png');
+
+// 设置单个粒子的形态
+particleSystem.geometry = new PlaneGeometry(5, 5, 1, 1, Vector3.Z_AXIS);
+particleSystem.material = material;
+
+```
+
+为 `ParticleSystem` 组件指定要使用的仿真器 `ParticleStandSimulator`:
+```ts
+// 使用指定仿真器
+let simulator = particleSystem.useSimulator(ParticleStandSimulator);
+
+// 添加发射器模块(必要模块,不可缺少)
+let emitter = simulator.addModule(ParticleEmitModule);
+// 设置最大粒子数
+emitter.maxParticle = 1 * 10000;
+// 设置持续发射时间
+emitter.duration = 10;
+// 设置发射速率(x个/秒)
+emitter.emissionRate = 50;
+// 设置粒子生命周期大小
+emitter.startLifecycle.setScalar(1);
+// 设置发射器发射形状
+emitter.shapeType = ShapeType.Box;
+// 设置发射器从发射形状的哪个位置发射(这里从外壳发射)
+emitter.emitLocation = EmitLocation.Shell;
+// 设置发射器大小
+emitter.boxSize = new Vector3(1, 0, 1);
+```
+
+为仿真器添加粒子模块,并配置属性参数:
+```ts
+// 添加重力修改模块(给予一个向上的微重力)
+simulator.addModule(ParticleGravityModifierModule).gravity = new Vector3(0, 0.2, 0);
+
+// 添加生命周期色彩模块
+simulator.addModule(ParticleOverLifeColorModule).colorSegments = [
+ new Vector4(1, 0.3, 0, 1),
+ new Vector4(0, 0.6, 1, 0)
+];
+```
+
+开始播放粒子:
+```ts
+// 开始播放
+particleSystem.play();
+```
diff --git a/docs/guide/performance/Readme.md b/docs/guide/performance/Readme.md
new file mode 100644
index 00000000..469eafa1
--- /dev/null
+++ b/docs/guide/performance/Readme.md
@@ -0,0 +1,56 @@
+# 统计面板
+
+`Orillusion` 提供了 [@orillusion/stats](/stats/classes/Stats) 组件用来显示引擎当前的运行状态,目前支持包括当前运行时的 `FPS` 和 `运行内存`。
+
+## 安装
+跟引擎方法一致,我们可以通过 `NPM` 和 `CDN` 链接两种方式来引入物理插件:
+
+### 1. 通过 `NPM` 包安装
+```bash
+npm install @orillusion/core --save
+npm install @orillusion/stats --save
+```
+```ts
+import { Engine3D } from "@orillusion/core"
+import { Stats } from "@orillusion/stats"
+```
+
+### 2. 通过 `CDN` 链接引入
+推荐使用 `ESModule` 构建版本
+```html
+
+```
+
+或通过 `
+
+
+```
+
+## 示例
+
+一般将 `Stats` 组件添加到 `Scene3D` 对象即可:
+```ts
+import { Scene } from "@orillusion/core"
+import { Stats } from "@orillusion/stats"
+let scene = new Scene3D();
+scene.addComponent(Stats);
+```
+
+
+
+<<< @/public/demos/performance/stats.ts{11}
+
+默认窗口内会在左上方出现一个矩形悬浮面板,如果需要修改位置,可以通过修改 `stats.container` 的 `style` 属性进行设置,或者添加 `css` 对 `.stats` class 进行设置。
+
+```ts
+let stats = scene.addComponent(Stats);
+stats.container.style.left = '10px';
+stats.container.style.top = '10px';
+```
\ No newline at end of file
diff --git a/docs/guide/physics/Readme.md b/docs/guide/physics/Readme.md
new file mode 100644
index 00000000..ce5c0d05
--- /dev/null
+++ b/docs/guide/physics/Readme.md
@@ -0,0 +1,183 @@
+# 物理总览
+物理系统是对真实世界的模拟,使场景中的模型对象可以像真实环境中的物体一样,拥有质量并正确响应重力及各种碰撞。引擎以扩展的形式 [@orillusion/physics](/physics/) 提供了物理引擎支持(基于 [Ammo.js](https://github.com/kripken/ammo.js)),并封装了常用的组件,可以帮助用户在项目中模拟物理系统。
+
+## 安装
+跟引擎方法一致,我们可以通过 `NPM` 和 `CDN` 链接两种方式来引入物理插件:
+
+### 1. 通过 `NPM` 包安装
+```bash
+npm install @orillusion/core --save
+npm install @orillusion/physics --save
+```
+```ts
+import { Engine3D } from "@orillusion/core"
+import { Physics } from "@orillusion/physics"
+```
+
+### 2. 通过 `CDN` 链接引入
+推荐使用 `ESModule` 构建版本
+```html
+
+```
+
+或通过 `
+
+
+```
+
+## 基本用法
+目前 [Physics](/physics/classes/Physics) 支持的参数及方法如下表所示:
+
+| API | 描述 |
+| --- | --- |
+| init(): void | 初始化物理引擎 |
+| initDebugDrawer(): void | 初始化物理调试器 |
+| update(): void | 更新物理系统,需要在 loop 主体中调用 |
+| gravity: Vector3 | 重力参数 |
+| isStop: boolean | 控制物理世界是否暂停运行 |
+| debugDrawer: PhysicsDebugDrawer | 可视化调试工具 |
+| physicsDragger: PhysicsDragger | 拖拽交互工具 |
+| world: Ammo.btDiscreteDynamicsWorld | Ammo.js 原生物理世界 |
+
+ `init()` 初始化配置参数:
+
+| 参数 | 类型 | 描述 |
+| --- | --- | --- |
+| useSoftBody | `boolean` | 是否启用软体模拟 |
+| useDrag | `boolean` | 是否启用拖拽交互功能 |
+| physicBound | `Vector3` | 物理世界边界 |
+| destroyObjectBeyondBounds | `boolean` | 超出边界时销毁3D对象 |
+
+### 启动物理系统
+我们可以初始化 `init()` 来开启物理系统,并通过在渲染主循环中调用 `update()` 实现物理世界的运行:
+```ts
+import { Engine3D } from '@orillusion/core'
+import { Physics } from '@orillusion/physics'
+
+await Physics.init();
+await Engine3D.init({
+ renderLoop: () => Physics.update()
+});
+```
+::: tip
+通过以上方法开启并运行物理系统后,引擎会在每一帧渲染时,根据设定的参数计算并更新物体模型对物理世界的实际响应。
+:::
+
+### 暂停与恢复
+```ts
+Physics.isStop = !Physics.isStop;
+```
+
+
+### 重力环境模拟
+默认重力为 `Vector3(0, -9.8, 0)`(地球重力)。自定义重力只需修改 `Physics.gravity`:
+```ts
+Physics.gravity = new Vector3(0, 0, 0); // 无重力环境
+```
+
+## 辅助功能
+- **物理可视化**:为了可视化物理对象,我们可以在引擎启动后初始化物理可视化调试器,需要为其传入 `Graphic3D` 对象:
+```ts
+const graphic3D = new Graphic3D();
+scene.addChild(graphic3D);
+Physics.initDebugDrawer(graphic3D, { enable: true });
+```
+
+::: details 使用 dat 控制调试器
+```ts
+import dat from "dat.gui";
+
+let gui = new dat.GUI();
+let f = gui.addFolder("PhysicsDebugDrawer");
+f.add(Physics.debugDrawer, 'enable').listen(); // 开启或关闭调试功能
+f.add(Physics.debugDrawer, 'debugMode', Physics.debugDrawer.debugModeList); // 调试模式
+f.add(Physics.debugDrawer, 'updateFreq', 1, 360, 1); // 线条渲染的频率(每帧)
+f.add(Physics.debugDrawer, 'maxLineCount', 100, 33000, 100); // 设置渲染的最大线条数量
+```
+:::
+
+- **物理对象交互**:如果需要使用鼠标与刚体进行拖拽控制,可以在 `init()` 中将此功能开启:
+
+```ts
+await Physics.init({ useDrag: true });
+```
+::: tip
+可以通过 `Physics.physicsDragger` 进行相关设置,详见 [PhysicsDragger](/physics/classes/PhysicsDragger)
+:::
+
+## 物理工具
+物理系统提供了一些工具,帮助开发者更灵活地进行定制开发。
+- [CollisionShapeUtil](/physics/classes/CollisionShapeUtil):提供多种方法来创建不同类型的碰撞形状。
+- [ContactProcessedUtil](/physics/classes/ContactProcessedUtil):用于注册和管理物理对象之间碰撞事件的工具类。
+- [RigidBodyMapping](/physics/classes/RigidBodyMapping):管理 `Ammo` 刚体与三维模型对象映射关系的工具类,需手动指定映射。
+- [RigidBodyUtil](/physics/classes/RigidBodyUtil):提供多种与 `Ammo` 刚体相关的实用方法,简化刚体的创建和各项操作。
+- [TempPhyMath](/physics/classes/TempPhyMath):临时物理数学工具类,提供 `Ammo` 数学对象(如向量和四元数)的实例,并支持与引擎数据类型相互转换。
+
+
+## 原生扩展
+当前引擎只封装了几个常用的组件,如果需要实现复杂的物理模拟,用户可以直接引用 `Ammo` 来使用原生的物理世界对象,通过 `Ammo.js` 自身提供的原生 `API` 实现更多自定化需求:
+```ts
+import { Ammo, Physics } from "@orillusion/physics";
+
+// init physics
+await Physics.init();
+
+// ...
+
+// native Ammo shape
+let boxShape = new Ammo.btBoxShape(
+ new Ammo.btVector3(1, 1, 1)
+);
+// native Ammo transform
+let transform = new Ammo.btTransform();
+```
+更多用法详见 [Ammo API](/physics/modules/Ammo)
+
+## 简单示例
+这里我们通过模拟一个正方体掉落在地上的过程,看一下物理系统具体可以提供哪些效果。
+
+
+
+<<< @/public/demos/physics/demo1.ts
+
+依照前面章节所介绍的流程,我们首先将场景、相机、环境贴图、光照等基础组件初始化并设定好参数。
+接下来,我们创建一个立方体,并为其添加刚体组件并指定碰撞形状,使之拥有质量并能正确响应重力与碰撞。
+
+```ts {7-9}
+const obj = new Object3D();
+let mr = obj.addComponent(MeshRenderer);
+mr.geometry = new BoxGeometry(5, 5, 5);
+mr.material = new LitMaterial();
+
+// 响应重力并设置碰撞形状
+let rigidbody = obj.addComponent(Rigidbody);
+rigidbody.mass = 10;
+rigidbody.shape = Rigidbody.collisionShape.createShapeFromObject(obj);
+
+scene3D.addChild(obj);
+```
+
+之后,我们在正方体下方创建一个平面,作为地面,同样为其添加刚体组件并指定碰撞形状。由于地面是静止的,所以我们设置其质量为 `0`。
+
+```ts {7-9}
+const obj = new Object3D();
+let mr = obj.addComponent(MeshRenderer);
+mr.geometry = new PlaneGeometry(size.x, size.y);
+mr.material = new LitMaterial();
+
+// 静态刚体,不响应重力
+let rigidbody = obj.addComponent(Rigidbody);
+rigidbody.mass = 0;
+rigidbody.shape = Rigidbody.collisionShape.createShapeFromObject(obj);
+
+scene.addChild(obj);
+```
+
+物理系统启动后,引擎立即根据物体质量响应其重力感应,当立方体和地面的碰撞体形状产生交集时,我们可以看到真实的物体落地碰撞效果,更多[物理示例](/example/physics/Dominoes)。
diff --git a/docs/guide/physics/collisionShape.md b/docs/guide/physics/collisionShape.md
new file mode 100644
index 00000000..e3d0ef1c
--- /dev/null
+++ b/docs/guide/physics/collisionShape.md
@@ -0,0 +1,107 @@
+# 碰撞体
+碰撞体形状 `Collision Shape` 定义了刚体响应碰撞的实际物理形状,物理系统可以通过 `Shape` 判定两个物体是否相交,从而产生碰撞效果。
+
+:::tip
+从 `@orillusion/physics@0.3` 开始,我们推荐直接使用 `Ammo` 原生 `Shape` 管理碰撞体
+:::
+
+## 碰撞体工具
+为了简化碰撞体的创建过程,[CollisionShapeUtil](/physics/classes/CollisionShapeUtil) 工具类提供了便捷的物理形状构建方法,涵盖了多种常见的碰撞体形状。该工具类将复杂的物理形状生成过程封装为一系列易于调用的方法,使开发者能够快速高效地为模型对象生成适配的碰撞体。
+
+### 内置形状
+
+目前 [CollisionShapeUtil](/physics/classes/CollisionShapeUtil) 提供的物理形状创建方法如下表所示:
+
+| 函数名称 | 返回类型 | 描述 |
+| --- | --- | --- |
+| createStaticPlaneShape | `Ammo.btStaticPlaneShape` | 创建一个静态平面碰撞形状,适用于无限大且静止的平面,如地面或墙壁 |
+| createBoxShape | `Ammo.btBoxShape` | 盒型碰撞形状 |
+| createSphereShape | `Ammo.btSphereShape` | 球型碰撞形状 |
+| createCapsuleShape | `Ammo.btCapsuleShape` | 胶囊型碰撞形状 |
+| createCylinderShape | `Ammo.btCylinderShape` | 圆柱型碰撞形状 |
+| createConeShape | `Ammo.btConeShape` | 圆锥形碰撞形状 |
+| createCompoundShape | `Ammo.btCompoundShape` | 复合形状,将多个子形状组合成一个复杂的碰撞体 |
+| createHeightfieldTerrainShape | `Ammo.btHeightfieldTerrainShape` | 高度场形状,适用于地形的碰撞检测 |
+| createConvexHullShape | `Ammo.btConvexHullShape` | 凸包形状,适用于动态物体的快速碰撞检测 |
+| createConvexTriangleMeshShape | `Ammo.btConvexTriangleMeshShape` | 凸包网格形状,适用于需要复杂几何表示的动态物体 |
+| createBvhTriangleMeshShape | `Ammo.btBvhTriangleMeshShape` | 边界体积层次 `BVH` 网格形状,适用于需要复杂几何表示的静态物体 |
+| createGImpactMeshShape | `Ammo.btGImpactMeshShape` | `GImpact` 网格形状,适用于复杂的三角网格碰撞检测,特别是动态物体 |
+| createShapeFromObject | `Ammo.btCollisionShape` | 创建一个匹配 `Object3D` 几何体类型的碰撞形状 |
+
+### 复杂结构支持
+`CollisionShapeUtil` 提供了两个支持处理嵌套对象的 `API`。这些 `API` 可以自动生成适合的碰撞形状或提取几何数据,适用于由引擎创建的复杂结构,无需手动为每个子对象单独配置。
+
+| 函数名称 | 返回类型 | 描述 |
+| --- | --- | --- |
+| createCompoundShapeFromObject | `Ammo.btCompoundShape` | 根据传入的 `Object3D` 及其子对象的几何体类型,自动创建一个复合碰撞体 |
+| getAllMeshVerticesAndIndices | `{ vertices:Float32Array; indices: Uint16Array; }` | 返回 `Object3D` 及其子对象的所有顶点和索引数据,经过世界变换矩阵转换后,可用于创建高精度的网格碰撞体 |
+
+## 基本使用
+
+创建碰撞体的过程已被简化,在大多数情况下,只需传入 `Object3D`,即可生成碰撞体。以下是使用 `CollisionShapeUtil` 创建基础碰撞形状的示例代码:
+
+```ts
+import { Object3D, MeshRenderer, CylinderGeometry, LitMaterial } from '@orillusion/core';
+import { CollisionShapeUtil } from '@orillusion/physics';
+
+// 创建一个圆锥体
+const coneObject = new Object3D();
+let mr = coneObject.addComponent(MeshRenderer);
+mr.geometry = new CylinderGeometry(0.01, 1, 5);
+mr.material = new LitMaterial();
+
+// 对于简单类型的几何体,如盒型、球型、圆锥、圆柱可以使用通用的方法创建碰撞体
+let coneShape1 = CollisionShapeUtil.createShapeFromObject(coneObject);
+// 或者通过计算局部包围盒创建圆锥形状
+let coneShape2 = CollisionShapeUtil.createConeShape(coneObject);
+// 或者指定形状尺寸
+let coneShape3 = CollisionShapeUtil.createConeShape(null, 1, 5);
+```
+
+同时,针对复杂类型的碰撞形状,构建流程也得到了简化。为了满足自定义需求,开发者可以传入 `vertices` 和 `indices` 以生成自定义的碰撞形状:
+
+```ts
+const object = await Engine3D.res.loadGltf('model.glb');
+
+// 创建一个BVH网格形状,使用模型自身的顶点和索引
+let bvhMeshShape = CollisionShapeUtil.createBvhTriangleMeshShape(object);
+
+// 或手动传入的顶点和索引
+const vertices = [...]
+const indices = [...]
+const vertices = new Float32Array(vertices);
+const indices = new Uint16Array(data.indices);
+let bvhMeshShape = CollisionShapeUtil.createBvhTriangleMeshShape(object, vertices, indices);
+```
+
+此外,基于 `TerrainGeometry` 或 `PlaneGeometry`,可以创建适用于模拟地形的高度场碰撞形状:
+
+```ts
+import { TerrainGeometry } from '@orillusion/geometry';
+
+// Load textures and create terrain geometry
+let heightTexture = await Engine3D.res.loadTexture('height.png');
+let terrainGeometry = new TerrainGeometry(100, 100, 60, 60);
+terrainGeometry.setHeight(heightTexture as BitmapTexture2D, 50);
+
+const terrain = new Object3D();
+let mr = terrain.addComponent(MeshRenderer);
+mr.geometry = terrainGeometry;
+mr.material = new LitMaterial();
+
+// 创建地形碰撞体
+let terrainShape = CollisionShapeUtil.createHeightfieldTerrainShape(terrain);
+```
+
+通过上述操作,我们可以创建多种碰撞体以适应不同的物理需求。然而,为了实现全面的物理模拟,单独的碰撞体是不够的。要获得真实的物理效果,还需要与 [刚体](/guide/physics/Rigidbody.html) 结合使用,从而实现完整的物理交互和模拟。
+
+
+## 示例
+
+不同的碰撞体形状适用于各类物理场景。以下示例展示了如何使用 `CollisionShapeUtil` 为多种几何形状生成对应的碰撞体,并结合 [刚体](/guide/physics/Rigidbody.html) 在物理系统中应用这些形状。
+
+
+
+<<< @/public/demos/physics/shapes.ts
+
+更多[物理示例](/example/physics/Dominoes)
\ No newline at end of file
diff --git a/docs/guide/physics/constraint.md b/docs/guide/physics/constraint.md
new file mode 100644
index 00000000..275fa902
--- /dev/null
+++ b/docs/guide/physics/constraint.md
@@ -0,0 +1,193 @@
+
+# 约束
+
+物理约束用于限制两个物理对象(通常是刚体)之间的相对运动。它们允许在物理模拟中创建更复杂的行为,如铰链、滑块或固定的连接。通过合理配置约束,可以实现现实世界中的各种机械结构和连接方式。
+
+## 约束组件概述
+
+约束以组件的形式添加和使用。约束父类实现了通用的约束功能,各个具体的约束组件通过继承该父类,并封装了底层的 `Ammo.js` 约束类型,提供了与原生约束类似的 `API`。这使得开发者能够省去手动创建约束的流程,可以快速、便捷地集成各种物理约束,实现复杂的物理行为。
+
+```ts
+import { Object3D } from '@orillusion/core';
+import { HingeConstraint, Rigidbody } from '@orillusion/physics';
+
+let object = new Object3D();
+let targetObject = new Object3D();
+let rigidbody = object.addComponent(Rigidbody);
+let targetRigidbody = targetObject.addComponent(Rigidbody);
+
+// 分别为两个刚体进行相关配置,如设置 mass、shape 等
+...
+
+// 为 object 添加铰链约束,并指定目标刚体,约束会将这两个刚体进行连接
+let hingeConstraint = object.addComponent(HingeConstraint);
+hingeConstraint.targetRigidbody = targetRigidbody;
+// 具体的约束配置请参考下述介绍的API
+...
+```
+
+> 请注意,对象必须在添加约束组件之前添加 [刚体](/guide/physics/Rigidbody.html) 组件。
+
+## 基本用法
+
+以下是约束的通用 `API`,各个约束类型还提供了独特的设置选项。
+
+| 属性 | 类型 | 描述 |
+| --- | --- | --- |
+| constraint | `Ammo.btTypedConstraint` | 获取 `Ammo.js` 的原生约束 |
+| breakingThreshold | `number` | 断裂阈值,值越大,约束越不易断裂 |
+| disableCollisionsBetweenLinkedBodies | `boolean` | 禁用关联刚体的碰撞,默认值为 `true` |
+| targetRigidbody | `Rigidbody` | 目标刚体,约束将限制当前刚体与目标刚体之间的相对运动 |
+| pivotSelf | `Vector3` | 自身刚体的枢轴点,决定了约束的旋转中心 |
+| pivotTarget | `Vector3` | 目标刚体的枢轴点 |
+| rotationSelf | `Quaternion` | 自身刚体的旋转设置 |
+| rotationTarget | `Quaternion` | 目标刚体的旋转设置 |
+
+| 方法 | 描述 |
+| --- | --- |
+| wait() | 异步获取完成初始化的原生约束实例 |
+| resetConstraint() | 重置约束,销毁当前约束实例后重新创建并返回新的约束实例 |
+
+## 重载支持
+
+在原生 `Ammo.js` 中,除了 `FixedConstraint` 之外,其余约束都提供了多种构造方法的重载。为了确保这些功能的完整性,约束组件中也提供了相应的重载支持。通常情况下,如果 `targetRigidbody` 属性未设置,约束将默认以单个刚体的形式创建。开发者可以根据具体需求,自由选择适合的约束构造方式。
+
+## 约束类型
+
+当前系统已集成了 `Ammo.js` 中的 7 种主要约束类型,每种约束均适用于特定的应用场景。
+
+### 1. 铰链约束 [HingeConstraint](/physics/classes/HingeConstraint)
+
+铰链约束允许物体绕某个轴进行旋转,适用于门、机械臂等需要单轴旋转的场景。
+
+| 属性 | 类型 | 描述 |
+| --- | --- | --- |
+| axisSelf | `Vector3` | 自身刚体上的铰链轴方向,默认值为 `Vector3.UP` |
+| axisTarget | `Vector3` | 目标刚体上的铰链轴方向,默认值为 `Vector3.UP` |
+| useReferenceFrameA | `boolean` | 是否使用自身刚体的参考框架,默认值为 `true` |
+| useTwoBodiesTransformOverload | `boolean` | 是否使用两个刚体的变换重载方式,默认值为 `false` |
+
+| 方法 | 描述 |
+| --- | --- |
+| setLimit() | 设置旋转限制 |
+| enableAngularMotor() | 启用或禁用角度马达 |
+
+```ts
+let hingeConstraint = object.addComponent(HingeConstraint);
+hingeConstraint.setLimit(-Math.PI / 2, Math.PI / 2, 0.9, 0.3);
+hingeConstraint.enableAngularMotor(true, 1.0, 10.0);
+```
+
+### 2. 滑动关节约束 [SliderConstraint](/physics/classes/SliderConstraint)
+
+滑动关节约束允许物体沿着一个轴进行平移,并绕该轴旋转,适用于滑轨或电梯等应用场景。
+
+| 属性 | 类型 | 描述 |
+| --- | --- | --- |
+| lowerLinLimit | `number` | 线性运动的下限限制 |
+| upperLinLimit | `number` | 线性运动的上限限制 |
+| lowerAngLimit | `number` | 角度运动的下限限制 |
+| upperAngLimit | `number` | 角度运动的上限限制 |
+| poweredLinMotor | `boolean` | 是否启用线性马达 |
+| maxLinMotorForce | `number` | 线性马达的最大推力 |
+| targetLinMotorVelocity | `number` | 线性马达的目标速度 |
+
+```ts
+let sliderConstraint = object.addComponent(SliderConstraint);
+sliderConstraint.lowerLinLimit = -10;
+sliderConstraint.upperLinLimit = 10;
+sliderConstraint.poweredLinMotor = true;
+sliderConstraint.maxLinMotorForce = 100;
+sliderConstraint.targetLinMotorVelocity = 5;
+```
+
+### 3. 固定约束 [FixedConstraint](/physics/classes/FixedConstraint)
+
+固定约束将两个物体完全固定在一起,限制其相对位置和旋转,从而实现刚性的连接效果。
+
+```ts
+let fixedConstraint = object.addComponent(FixedConstraint);
+fixedConstraint.targetRigidbody = targetRigidbody; // 固定约束类型必须指定目标刚体
+```
+
+### 4. 点到点约束 [PointToPointConstraint](/physics/classes/PointToPointConstraint)
+
+该约束限制了两个点之间的相对运动,但允许它们在空间中自由旋转。通常用于模拟绳索或链条的连接。
+
+```ts
+let p2pConstraint = object.addComponent(PointToPointConstraint);
+p2pConstraint.targetRigidbody = targetRigidbody;
+p2pConstraint.pivotSelf.set(0, 0, 0);
+p2pConstraint.pivotTarget.set(0, 5, 0);
+```
+
+### 5. 锥形扭转约束 [ConeTwistConstraint](/physics/classes/ConeTwistConstraint)
+
+锥形扭转约束用于创建类似球窝关节的运动,允许物体在一个锥形范围内自由旋转,并限制其绕某轴的扭转角度。
+
+| 属性 | 类型 | 描述 |
+| --- | --- | --- |
+| twistSpan | `number` | 扭转角度限制,绕 X 轴的扭转范围 |
+| swingSpan1 | `number` | 摆动角度限制1,绕 Y 轴的摆动范围 |
+| swingSpan2 | `number` | 摆动角度限制2,绕 Z 轴的摆动范围 |
+
+```ts
+let coneTwistConstraint = object.addComponent(ConeTwistConstraint);
+coneTwistConstraint.twistSpan = Math.PI / 4; // 限制扭转角度为 45 度
+```
+
+### 6. 通用六自由度约束 [Generic6DofConstraint](/physics/classes/Generic6DofConstraint)
+
+该约束允许沿三个线性轴和三个角度轴自由设置运动限制,提供了最大的灵活性以满足各种复杂的连接需求。
+
+| 属性 | 类型 | 描述 |
+| --- | --- | --- |
+| linearLowerLimit | `Vector3` | 线性运动的下限限制 |
+| linearUpperLimit | `Vector3` | 线性运动的上限限制 |
+| angularLowerLimit | `Vector3` | 角度运动的下限限制 |
+| angularUpperLimit | `Vector3` | 角度运动的上限限制 |
+| useLinearFrameReferenceFrame | `boolean` | 是否使用线性参考坐标系 |
+
+```ts
+let sixDofConstraint = object.addComponent(Generic6DofConstraint);
+sixDofConstraint.linearLowerLimit = new Vector3(-1, -1, -1); // 设置线性下限
+sixDofConstraint.linearUpperLimit = new Vector3(1, 1, 1); // 设置线性上限
+```
+
+### 7. 弹簧特性六自由度约束 [Generic6DofSpringConstraint](/physics/classes/Generic6DofSpringConstraint)
+
+此约束是在通用六自由度约束的基础上增加了弹簧特性,可以模拟弹簧的效果,如伸缩和振动。
+
+| 方法 | 描述 |
+| --- | --- |
+| enableSpring() | 启用或禁用弹簧功能 |
+| setStiffness() | 设置弹簧的刚度 |
+| setDamping() | 设置弹簧的阻尼 |
+| setEquilibriumPoint() | 设置弹簧的平衡点 |
+
+```ts
+let springConstraint = object.addComponent(Generic6DofSpringConstraint);
+// 启用并配置弹簧:索引0、1、2对应线性轴(x, y, z),3、4、5对应角度轴(x, y, z)
+for (let j = 3; j < 6; j++) {
+ dofSpringConstraint.enableSpring(j, true);
+ dofSpringConstraint.setStiffness(j, 10.0);
+ dofSpringConstraint.setDamping(j, 0.5);
+ dofSpringConstraint.setEquilibriumPoint(j);
+}
+```
+
+
+
+<<< @/public/examples/physics/dofSpringConstraint.ts
+
+::: tip 注意事项
+当两个刚体通过约束连接时,目标刚体的连接点默认会位于自身刚体的中心位置。可以在创建约束时通过调整 `pivotSelf` 或 `pivotTarget` 属性来修改它们的相对位置。然而,如果两个刚体在添加约束前处于重叠状态,这可能会导致约束模拟的不稳定。建议在添加约束前确保两个刚体没有重叠。
+:::
+
+## 示例
+
+合理配置物理约束可以显著提升物理模拟的表现力和真实性。以下示例展示了刚体、多种约束和软体之间的相互联动,充分体现了它们的协同作用。
+
+
+
+<<< @/public/examples/physics/MultipleConstraints.ts
diff --git a/docs/guide/physics/rigidbody.md b/docs/guide/physics/rigidbody.md
new file mode 100644
index 00000000..594f95f7
--- /dev/null
+++ b/docs/guide/physics/rigidbody.md
@@ -0,0 +1,181 @@
+# 刚体
+刚体是指在受到外力后自身形变可以忽略的物体。尽管理想刚体不可能真实存在,但在速度远小于光速的条件下,许多硬质物体通常都可以假定为完美刚体。根据刚体的特性,引擎物理系统可以模拟真实世界中物体的运动、碰撞逻辑,使之产生逼真的动画效果。
+
+在引擎的物理系统中,刚体是一个关键组件。为模型对象添加刚体组件 [Rigidbody](/physics/classes/Rigidbody) 后,物体将具备质量,并能够响应重力和其他物理力,表现出与现实世界相似的动态特性。
+
+::: details 刚体与模型对象的同步机制
+当为模型对象添加刚体组件后,物理引擎会接管该对象的变换(通常是位置和旋转)。在每一个物理模拟步长中(通常是60Hz,即每秒60帧频率),物理引擎根据刚体的物理属性(如质量、力、碰撞等)计算其运动状态,并将计算结果实时更新刚体的变换信息。刚体组件的更新函数在每一个渲染帧中通过获取刚体的插值变换,同步到模型对象,使其在场景中展现逼真的物理行为。请注意,一旦添加刚体组件,模型对象的变换将由物理引擎自动管理。
+:::
+
+## 刚体与碰撞体
+刚体负责处理物体的动力学属性和运动,但仅有刚体不足以完成物理模拟,因为它不包含物体的具体形状或大小信息。为了实现完整的物理模拟,刚体必须与碰撞体关联。碰撞体定义了物体在物理空间中的边界,刚体通过这些边界参与碰撞检测和处理。
+
+
+## 属性和方法
+[Rigidbody](/physics/classes/Rigidbody) 组件设计封装了很多 `API`,常用属性如下表所示:
+
+| 属性 | 类型 | 描述 |
+| --- | --- | --- |
+| btRigidbody | `Ammo.btRigidBody` | 获取 `Ammo.js` 的原生刚体对象 |
+| shape | `Ammo.btCollisionShape` | 刚体的碰撞形状,定义物体的物理边界 |
+| mass | `number` | 刚体的质量(单位:kg),决定物体的惯性。默认值为 `0.01` |
+| restitution | `number` | 弹性恢复系数,决定碰撞后物体的反弹程度。默认值为 `0.5` |
+| friction | `number`| 摩擦力,影响刚体与其他物体接触时的滑动行为。默认值为 `0.5` |
+| velocity | `Vector3` | 施加在刚体中心位置的力向量 |
+| damping | `[number, number]` | 阻尼系数,控制刚体的线性和角速度的衰减 |
+| enablePhysicsTransformSync | `boolean` | 是否启用刚体与模型对象的变换同步,默认值为 `false` |
+| isSilent | `boolean` | 是否为静默状态,设置为 `true` 时,不会触发双方的碰撞回调 |
+| enableCollisionEvent | `boolean` | 是否启用碰撞事件,默认值为 `true` |
+| collisionEvent | `Function` | 碰撞事件回调 |
+
+| 方法 | 描述 |
+| --- | --- |
+| wait() | 异步获取完成初始化的原生刚体实例 |
+| updateTransform() | 更新刚体的位置和旋转,并同步对象 |
+| clearForcesAndVelocities() | 清除刚体的所有力和速度,重置运动状态 |
+
+::: details 更多 `API`
+
+| API | 类型 | 描述 |
+| --- | --- | --- |
+| collisionShape | `CollisionShapeUtil` | 创建碰撞体的工具 |
+| rollingFriction | `number` | 滚动摩擦力,影响刚体滚动时的滑动行为 |
+| ccdSettings | `[number, number]` | 连续碰撞检测的设置,用于避免高速运动物体穿透其他物体 |
+| gravity | `Vector3` | 施加于刚体的重力向量,可以自定义不同于全局重力的向量 |
+| linearVelocity | `Vector3` | 刚体的线速度 |
+| angularVelocity | `Vector3` | 刚体的角速度 |
+| activationState | `ActivationState` | 刚体的激活状态 |
+| isKinematic | `boolean` | 设置为运动学刚体,将会自动开启 `enablePhysicsTransformSync` |
+| isTrigger | `boolean` | 设置为触发器,不参与物理反应,也不会触发碰撞事件 |
+| isDisableDebugVisible | `boolean` | 设置刚体在调试模式下是否可见 |
+| userIndex | `number` | 用户索引,可以用作刚体标识符 |
+| group | `number` | 刚体的碰撞组 |
+| mask | `number` | 刚体的碰撞掩码 |
+| margin | `number` | 定义碰撞体的碰撞边距 |
+| collisionFlags | `number` | 获取碰撞标志 |
+| addCollisionFlag() | `CollisionFlags` | 添加单个碰撞标志。用于设置刚体的特定行为,如静态、运动学等 |
+| removeCollisionFlag() | `CollisionFlags` | 移除单个碰撞标志 |
+:::
+
+
+## 基本用法
+
+为对象添加 `Rigidbody` 组件:
+```ts
+import { Object3D } from '@orillusion/core'
+import { Rigidbody, CollisionShapeUtil } from '@orillusion/physics'
+
+let object = new Object3D();
+let rigidbody = object.addComponent(Rigidbody);
+```
+
+在添加组件后,还需要为刚体设置碰撞体,根据上一篇介绍 [碰撞体](/guide/physics/collisionShape.html) 的相关内容,我们可以根据对象的几何形状来创建合适的碰撞体:
+```ts
+rigidbody.shape = CollisionShapeUtil.createShapeFromObject(object);
+```
+
+为刚体设置质量(单位:kg):
+```ts
+rigidbody.mass = 50;
+```
+
+如果需要静态刚体,则设置 `mass` 为 `0` 即可实现:
+```ts
+rigidbody.mass = 0;
+```
+
+可以通过以下方式操作原生的 `Ammo.js` 的刚体:
+```ts
+// 使用 wait 方法确保刚体初始化完成
+let bt = await rigidbody.wait();
+bt.getCollisionShape(); // native rigidbody API
+```
+
+## 核心功能
+
+### 碰撞检测与事件处理
+
+刚体组件支持详细的碰撞检测,并提供 `enableCollisionEvent` 属性和 `collisionEvent` 回调函数,允许开发者监听和处理刚体的碰撞事件。
+```ts
+rigidbody.enableCollisionEvent = true;
+rigidbody.collisionEvent = (contactPoint: Ammo.btManifoldPoint, selfBody: Ammo.btRigidBody, otherBody: Ammo.btRigidBody) => {
+ // 在这里进行碰撞事件处理
+};
+```
+> 由于物理引擎在每个模拟步中可能会多次检测到同一对刚体的碰撞,回调函数在碰撞期间会被持续触发。
+>
+> 为避免性能下降,可以在回调函数中加入防抖逻辑,或限制某些计算的执行频率。
+
+通常,注册碰撞事件后,刚体与其他物体碰撞时都会触发回调。对于无需处理的对象(如地面),可设置 `isSilent` 为 `true` 以避免回调触发。
+
+### 刚体与模型对象同步
+
+通过启用 `enablePhysicsTransformSync` 属性,确保模型对象的变换(位置、旋转、缩放)实时同步到物理刚体,从而保持视觉与物理行为的一致性。
+
+```ts
+rigidbody.enablePhysicsTransformSync = true;
+
+// 开启同步功能后,修改对象的位置、旋转、缩放时将会实时同步至刚体
+object.transform.x += 10;
+object.transform.rotationX += 10;
+object.transform.scaleX = 2;
+```
+
+## 幽灵对象
+幽灵对象 `Ghost Object` 是一种特殊的碰撞对象,它用于检测物体之间的重叠,而不产生物理反应。不同于刚体,幽灵对象不会受到力的影响,也不会对其他物体施加力,但它能检测到与其他物体的接触并触发相应的事件。这使得幽灵对象非常适合用于需要区域检测或触发事件的场景。
+
+### 幽灵组件介绍
+物理系统通过封装幽灵对象,提供了幽灵触发器组件 [GhostTrigger](/physics/classes/GhostTrigger) 。与刚体类似,幽灵触发器组件拥有许多相同的属性和方法,主要 `API` 如下表所示:
+
+| 属性 | 类型 | 描述 |
+| --- | --- | --- |
+| ghostObject | `Ammo.btPairCachingGhostObject` | 获取 `Ammo.js` 的原生幽灵对象 |
+| shape | `Ammo.btCollisionShape` | 幽灵对象的碰撞形状,定义物体的物理边界 |
+| enableCollisionEvent | `boolean` | 是否启用碰撞事件 |
+| collisionEvent | `Function` | 碰撞事件回调 |
+
+| 方法 | 描述 |
+| --- | --- |
+| wait() | 异步获取完全初始化的原生幽灵对象实例 |
+| createAndAddGhostObject() | 静态方法,创建幽灵对象并添加到物理世界 |
+
+### 基本用法
+与刚体组件的使用方式类似,我们可以直接添加幽灵触发器组件并配置 `shape` 和 `collisionEvent` 即可:
+```ts
+import { GhostTrigger, CollisionShapeUtil } from "@orillusion/physics";
+
+let ghostTrigger = object.addComponent(GhostTrigger);
+ghostTrigger.shape = CollisionShapeUtil.createBoxShape(object);
+ghostTrigger.collisionEvent = (contactPoint, selfBody, otherBody) => {
+ // 在这里处理幽灵对象的碰撞事件
+}
+```
+
+::: tip
+添加组件后,幽灵触发器会自动同步模型对象的变换,确保在模型移动或调整时,幽灵对象的位置和形状也会实时更新。
+:::
+
+幽灵对象通常用于区域检测,许多情况下不需要关联具体的模型对象。对此,`GhostTrigger` 组件提供了一个静态方法,开发者可以直接调用 `createAndAddGhostObject()` 创建原生幽灵对象,无需以组件形式添加:
+
+```ts
+import { Ammo, CollisionShapeUtil, GhostTrigger, ContactProcessedUtil } from "@orillusion/physics";
+
+let size = new Vector3(10, 5, 5);
+let shape = CollisionShapeUtil.createBoxShape(null, size);
+let position = new Vector3(0, 2.5, 0);
+let rotation = Vector3.ZERO;
+// 传入碰撞形状、位置、旋转信息以创建幽灵对象并自动添加到物理世界
+let ghostObj = GhostTrigger.createAndAddGhostObject(shape, position, rotation);
+// 使用碰撞工具注册事件
+ContactProcessedUtil.registerCollisionCallback(ghostObj.kB, (contactPoint, selfBody, otherBody) => {
+ // 在这里处理幽灵对象的碰撞事件
+});
+```
+
+## 示例
+
+在以下示例中,通过应用 `Rigidbody` 和 `GhostTrigger` 组件,实现了一个简易的区域检测。
+
+
+
+<<< @/public/demos/physics/areaDetection.ts
\ No newline at end of file
diff --git a/docs/guide/physics/softbody.md b/docs/guide/physics/softbody.md
new file mode 100644
index 00000000..df03da63
--- /dev/null
+++ b/docs/guide/physics/softbody.md
@@ -0,0 +1,191 @@
+
+# 软体
+软体是一类在受到外力时会产生明显形变的物体,与刚体不同,软体能够模拟如布料、橡胶等柔性物体的动态行为。尽管软体模拟更为复杂,但它能为物理引擎中的物体提供更逼真的动画效果,特别是在涉及到柔性材质时。
+
+## 组件介绍
+软体模拟是物理引擎的高级功能,当前系统针对不同类型的软体提供了相应的组件:
+
+- [ClothSoftbody](/physics/classes/ClothSoftbody) - 布料软体组件
+- [RopeSoftbody](/physics/classes/RopeSoftbody) - 绳索软体组件
+
+::: details 软体与模型对象的同步机制
+当为模型对象添加软体组件后,物理引擎会在每一个物理模拟步长中计算软体的形变和运动状态。这个过程涵盖了柔性材料在外力、重力等物理作用力下的响应。根据这些计算,物理引擎会更新软体的顶点、法线等数据。软体组件会在其更新函数中将这些变化同步到模型对象的几何体上,使其在场景中展现逼真的物理效果。请注意,添加软体组件后,几何体的变形将由物理引擎自动处理,通常无需手动调整。若修改模型对象的变换可能会导致与物理模拟的不一致。
+:::
+
+在使用软体组件前,需要确保物理系统已启用软体模拟:
+```ts
+Physics.init({useSoftBody: true});
+```
+
+## 基本功能
+
+软体组件提供了一些通用的 `API`,如下表所示:
+
+| 属性 | 类型 | 描述 |
+| --- | --- | --- |
+| btSoftBody | `Ammo.btSoftBody` | 获取 `Ammo.js` 的原生软体对象 |
+| mass | `number` | 软体的总质量,默认值为 `1` |
+| margin | `number` | 碰撞边距,默认值为 `0.15` |
+| group | `number` | 碰撞组,默认值为 `1` |
+| mask | `number` | 碰撞掩码,默认值为 `-1` |
+| influence | `number` | 锚点的影响力,默认值为 `1` |
+| disableCollision | `boolean` | 是否禁用与锚定刚体之间的碰撞,默认值为 `false` |
+| activationState | `ActivationState` | 设置软体的激活状态 |
+
+| 方法 | 描述 |
+| --- | --- |
+| wait() | 异步获取完全初始化的原生软体实例 |
+| applyFixedNodes() | 固定软体节点 |
+| clearAnchors() | 清除所有锚点 |
+| appendAnchor() | 锚定软体节点到指定刚体(原生方法的封装,不考虑变换) |
+
+## 布料软体 [ClothSoftbody](/physics/classes/ClothSoftbody)
+
+布料软体组件 `ClothSoftbody` 主要用于模拟布料的柔性动态行为,支持的 `API` 如下:
+
+| 属性 | 类型 | 描述 |
+| --- | --- | --- |
+| clothCorners | `Vector3[]` | 定义布料四个角的位置,默认以平面法向量计算各角 |
+| fixNodeIndices | `CornerType[] \| number[]` | 固定布料的节点索引或角类型 |
+| anchorIndices | `CornerType[] \| number[]` | 布料的锚点节点索引或角类型 |
+| anchorPosition | `Vector3` | 布料锚定刚体后相对刚体的位置 |
+| anchorRotation | `Vector3` | 布料锚定刚体后相对刚体的旋转 |
+| anchorRigidbody | `Rigidbody` | 添加锚点时需要的刚体 |
+
+### 基本用法
+
+为对象添加 `ClothSoftbody` 组件:
+```ts
+import { Object3D, MeshRenderer, PlaneGeometry, LitMaterial, Vector3 } from '@orillusion/core'
+import { ClothSoftbody } from '@orillusion/physics'
+
+let object = new Object3D();
+let mr = object.addComponent(MeshRenderer);
+
+// 设置平面的法向量,它决定了布料四个角的位置
+mr.geometry = new PlaneGeometry(5, 5, 10, 10, Vector3.Z_AXIS);
+mr.material = new LitMaterial();
+
+// 添加布料组件
+let clothSoftbody = object.addComponent(ClothSoftbody);
+```
+::: tip
+请注意:`ClothSoftbody` 组件仅支持 `PlaneGeometry` 类型的几何体。
+:::
+
+通过设置 `fixNodeIndices` 属性,可以固定特定的布料节点:
+```ts
+clothSoftbody.fixNodeIndices = ['leftTop', 'rightTop'];
+```
+
+在布料初始化完毕后,可以继续固定节点:
+```ts
+clothSoftbody.applyFixedNodes(['leftBottom', 'rightBottom']);
+```
+
+通过 `anchorIndices` 属性设置锚定节点,并指定附加的刚体:
+```ts
+clothSoftbody.anchorIndices = ['top'];
+clothSoftbody.anchorRigidbody = rigidbody;
+
+// 附加到刚体后软体的中心点与旋转将会与刚体变换一致。
+clothSoftbody.anchorPosition.set(0, 5, 0); // 通过 anchorPosition 设置相对位置
+clothSoftbody.anchorRotation.set(0, 90, 0); // 通过 anchorRotation 设置相对旋转
+```
+
+::: tip
+锚点设置时会自动将软体附加到刚体,并可以设置 `influence` 和 `disableCollision` 等属性。
+:::
+
+
+如果需要移除所有锚点,使软体从锚定的刚体上脱落,可以调用 `clearAnchors()` 方法:
+```ts
+clothSoftbody.clearAnchors();
+```
+
+### 示例
+>
+
+
+<<< @/public/examples/physics/Cloth.ts
+
+
+## 绳索软体 [RopeSoftbody](/physics/classes/RopeSoftbody)
+
+绳索软体组件 `RopeSoftbody` 主要用于模拟绳索的柔性动态行为,支持的 `API` 如下:
+
+| API | 类型 | 描述 |
+| --- | --- | --- |
+| fixeds | `number` | 绳索固定选项,`0`:两端不固定,`1`:起点固定,`2`:终点固定,`3`:两端固定|
+| fixNodeIndices | `number[]` | 固定节点索引,与 `fixeds` 属性作用相同,但可以更自由的控制任意节点 |
+| elasticity | `number` | 绳索弹性,值越大弹性越低,默认值为 `0.5` |
+| anchorRigidbodyHead | `Rigidbody` | 绳索起点处锚定的刚体 |
+| anchorRigidbodyTail | `Rigidbody` | 绳索终点处锚定的刚体 |
+| anchorOffsetHead | `Vector3` | 锚点的起点偏移量 |
+| anchorOffsetTail | `Vector3` | 锚点的终点偏移量 |
+| setElasticity() | `void` | 设置绳索弹性 |
+| buildRopeGeometry() | `GeometryBase` | 构建绳索(线条)几何体的静态方法 |
+
+### 基本用法
+
+为对象添加 `RopeSoftbody` 组件:
+
+```ts
+import { Object3D, MeshRenderer, PlaneGeometry, LitMaterial, Vector3 } from '@orillusion/core'
+import { RopeSoftbody } from '@orillusion/physics'
+
+let object = new Object3D();
+let mr = object.addComponent(MeshRenderer);
+let segmentCount = 10;
+let startPos = new Vector3(0, 10, 0);
+let endPos = new Vector3(10, 10, 0);
+// 设置绳索几何体
+mr.geometry = RopeSoftbody.buildRopeGeometry(segmentCount, startPos, endPos);
+mr.material = new LitMaterial();
+mr.material.topology = 'line-list'; // 需要设置为 line 渲染模式 // [!code highlight]
+
+// 添加绳索组件
+let ropeSoftbody = object.addComponent(RopeSoftbody);
+```
+::: tip
+`RopeSoftbody` 组件仅支持 `line` 类型的几何体。为方便使用,组件内提供了 `buildRopeGeometry()` 静态方法。
+注意添加材质时需要将拓扑结构 `topology` 设置为 `'line-list'`。
+:::
+
+
+固定绳索节点:
+```ts
+ropeSoftbody.fixeds = 1; // 固定绳索起点
+```
+
+末端连接刚体:
+```ts
+ropeSoftbody.anchorRigidbodyTail = rigidbody;
+ropeSoftbody.anchorOffsetTail.set(0, 1, 0); // 附加到刚体后绳索的终点将会与刚体位置一致,设置 anchorOffsetTail 以调整相对位置
+```
+
+### 示例
+>
+
+
+<<< @/public/examples/physics/Rope.ts
+
+
+## 软体配置
+
+在软体创建过程中,内部配置了一些基础的参数来控制软体的行为,包括位置迭代、阻尼系数、刚性系数等。开发者可以通过操作原生的 `Ammo.js` 软体进行自定义配置,确保软体具有理想的物理效果:
+```ts
+// 异步等待软体初始化完成
+let bt = await clothSoftbody.wait()
+// native softbody API
+let sbConfig = bt.get_m_cfg();
+sbConfig.set_kDF(0.2); // 设置动力学系数
+sbConfig.set_kDP(0.01); // 设置阻尼系数
+sbConfig.set_kLF(0.02); // 设置升力系数
+sbConfig.set_kDG(0.001); // 设置阻力系数
+...
+```
+
+::: tip
+软体组件的属性仅在初始化时设置有效。
+:::
\ No newline at end of file
diff --git a/docs/guide/resource/Readme.md b/docs/guide/resource/Readme.md
new file mode 100644
index 00000000..0fee1c94
--- /dev/null
+++ b/docs/guide/resource/Readme.md
@@ -0,0 +1,75 @@
+# 资源加载
+引擎通常需要加载不同的资源文件,为了统一管理所有文件的加载和读取,我们在 `Engine3D` 里封装了统一的 `res` 资源管理器,可以方便用户加载,存储和读取各种文件资源。
+
+
+## 基本用法
+```ts
+// 加载 2D贴图
+let texture = await Engine3D.res.loadTexture('path/to/image.png');
+// 加载 GLTF/GLB 模型
+let gltf = await Engine3D.res.loadGltf('path/to/model.gltf');
+let glb = await Engine3D.res.loadGltf('path/to/model.glb');
+```
+
+## 下载进度回调
+`res` 支持下载进度回调,我们可以配置 [LoaderFunctions](/api/types/LoaderFunctions) 用来监听文件加载事件回调,常用于 UI 加载进度提示:
+```ts
+
+let parser = await Engine3D.res.loadGltf('/sample.gltf',{
+ // 可以自定义 fetch 请求头,例如加入 Authorization
+ headers: {
+ 'Authorization': 'Bearer xxxx',
+ // ...
+ },
+ onProgress: (receivedLength:number, contentLength:number, url:string) => {
+ // 监听下载进度
+ },
+ onComplete: (url:string) => {
+ // 文件下载完成
+ },
+ onError: (e) => {
+ // 文件加载错误
+ },
+ onUrl: (url:string) =>{
+ // 可以根据需求,修改原始url,返回自定义路径
+ }
+});
+```
+
+## 贴图管理器
+我们可以将加载的贴图统一储存在 `res` 资源池中,使用时直接读取即可,方便集中下载和管理贴图
+```ts
+// 提前下载贴图
+let brdfLUTTexture = new BitmapTexture2D();
+await brdfLUTTexture.load('PBR/BRDFLUT.png');
+// 统一存储
+Engine3D.res.addTexture('BRDFLUT', brdfLUTTexture);
+// 需要时取出
+let brdfLUTTexture = Engine3D.res.getTexture('BRDFLUT');
+```
+
+## 材质球管理器
+同理,统一将各类材质球添加到材质球管理器,方便后续使用
+```ts
+let floorMat = new LitMaterial();
+Engine3D.res.addMat('floorMat', floorMat );
+// 需要时取出
+let floorMat = Engine3D.res.getMat('floorMat');
+```
+
+## 预设体管理器
+也可以将 `Object3D` 节点添加到资源管理内,方便查找和调用
+```ts
+let box = new Object3D();
+res.addPrefab('box', box);
+// 需要时取出
+let box = res.getPrefab('box');
+```
+
+## 示例
+
+
+<<< @/public/demos/resource/resource.ts
+
+
+
diff --git a/docs/guide/resource/gltf.md b/docs/guide/resource/gltf.md
new file mode 100644
index 00000000..16eb65a3
--- /dev/null
+++ b/docs/guide/resource/gltf.md
@@ -0,0 +1,27 @@
+# GLTF
+## 什么是 glTF?
+`glTF(GL Transmission Format)` 是 [khronos](https://www.khronos.org/gltf) 发布的一种能高效传输和加载 3D 场景的规范,是 3D 领域中的 `JPEG` 格式,其功能涵盖了 `FBX`、`OBJ` 等传统模型格式,基本支持 3D 场景中的所有特性,其插件机制也使用户可以灵活地自定义实现想要的功能。
+`glTF` 是目前 `Orillusion` 推荐的首选 3D 场景传输格式,`Orillusion` 对 `glTF` 的核心功能和插件都做了很好的支持。
+
+## 加载 glTF
+使用 [Engine3D.res.loadGltf](/api/classes/Res#loadgltf) 来加载 `gltf` 模型,该方法对 `gltf/glb` 文件做了优化处理,可以直接添加对象:
+```ts
+let scene = new Scene3D();
+// 加载 gltf 文件
+let data = await Engine3D.res.loadGltf('sample.gltf');
+// 添加至场景
+scene.addChild(data);
+```
+
+## 插件支持
+目前支持以下 `glTF` 插件,若 `glTF` 文件中包含相应插件,则会自动加载相应功能:
+| 插件 | 功能 |
+| --- | --- |
+| KHRdracomesh_compression | 支持 Draco 压缩,能有效节省模型体积 |
+| KHRlightspunctual | 支持多光源组合,会解析成引擎的光源,详见 [光照教程](/guide/graphics/lighting) |
+| KHRmaterialspbrSpecularGlossiness | 支持 `PBR` 高光-光泽度工作流 |
+| KHRmaterialsunlit | 支持 `Unlit` 材质 |
+| KHRmaterialsvariants | 允许渲染器存在多个材质,然后通过 `setMaterial` 接口进行材质切换 |
+| KHRmeshquantization | 支持顶点数据压缩,节省显存,如顶点数据一般都是浮点数,此插件可以保存为整型 |
+| KHRtexturetransform | 支持纹理的缩放位移变换 |
+| KHR_lights_punctual | 支持扩展灯光,包含 `direction light` ,`point light` , `spot light` |
\ No newline at end of file
diff --git a/docs/guide/tools/math.md b/docs/guide/tools/math.md
new file mode 100644
index 00000000..0b587d33
--- /dev/null
+++ b/docs/guide/tools/math.md
@@ -0,0 +1,424 @@
+# 数学
+在一个渲染场景中,我们经常会对物体进行平移、旋转、缩放等操作(这些操作我们统一称为 变换 ),从而达到我们想要的互动效果。而这些变换的计算,我们一般都是通过向量、四元数、矩阵等来实现的,为此我们提供一个数学库来完成 向量 、四元数 、矩阵 等相关运算。除此之外,数学库还提供了更为丰富的类来帮助我们描述空间中的 点 线 面 几何体,以及判断它们在三维空间中的相交、位置关系等。
+
+| 类型 | 解释|
+| --- | --- |
+| [Vector2](/api/classes/Vector2) | 二维向量,包含x、y分量 |
+| [Vector3](/api/classes/Vector3) | 三维向量,包含x、y、z、w分量 |
+| [Rect](/api/classes/Rect) | 矩形区域,包含x、y、w、h分量 |
+| [Color](/api/classes/Color) | 颜色类,使用 RGBA 表示 |
+| [Quaternion](/api/classes/Quaternion) | 四元数,包含x、y、z、w分量,负责旋转相关的运算|
+| [Matrix3](/api/classes/Matrix3) | 3x3矩阵,提供矩阵基本运算,变换相关运算 |
+| [Matrix4](/api/classes/Matrix4) | 4x4矩阵,提供矩阵基本运算,变换相关运算 |
+| [MathUti](/api/classes/MathUtil) | 内置数学基本计算工厂函数 |
+| [Plane](/api/classes/Plane) | 平面数学类 |
+| [Ray](/api/classes/Ray) | 射线 |
+| Rand | 普通随机 |
+| Random | 各种类型的随机分布函数 |
+| Bezier2D | 2D 贝塞尔曲线 |
+| Bezier3D | 3D 贝塞尔曲线 |
+| CubicBezierCurve | 三次贝塞尔曲线 |
+| CubicBezierPath | 三次贝塞尔路径 |
+| GradientNew | 颜色渐变 |
+| ParticleMath | 粒子系统用到的数学库 |
+
+## 向量
+向量最基本的定义就是一个方向。或者更正式的说,向量有一个方向(Direction)和大小(Magnitude,也叫做强度或长度)。你可以把向量想像成一个藏宝图上的指示:“向左走10步,向北走3步,然后向右走5步”;“左”就是方向,“10步”就是向量的长度。那么这个藏宝图的指示一共有3个向量。向量可以在任意维度(Dimension)上,但是我们通常只使用2至4维。如果一个向量有2个维度,它表示一个平面的方向(想象一下2D的图像),当它有3个维度的时候它可以表达一个3D世界的方向。
+### 二维向量
+```ts
+import {Vector2} from "@orillusion/core";
+
+// 创建默认二维向量, x,y 分量值均为0.0
+let v1 = new Vector2();
+
+// 创建二维向量,即 x,y 分量均为1.0
+let v2 = new Vector2(1.0, 1.0);
+
+// 设置指定值
+v1.set(2.0, 2.0);
+
+// 获取向量的分量值
+let x = v1.x;
+let y = v1.y;
+
+// 计算两个向量距离
+let result1 = v1.distance(v2);
+
+// 计算两个向量的和
+let result2 = v1.add(v2);
+
+// 计算两个向量的差
+let result3 = v1.sum(v2);
+
+// 将该向量的两个分量同时乘以一个指定的数值
+let result4 = v1.scale(2.0);
+
+// 将该向量的两个分量同时除以一个指定的数值
+let result5 = v1.divide(2.0);
+
+// 计算向量的长度
+let result6 = v1.length();
+
+// 计算当前向量与目标向量之间的角度
+let result7 = v1.getAngle(v2);
+
+// 使用静态函数计算两个向量之间的角度
+let result8 = Vector2.getAngle(v1, v2);
+
+// 计算当前向量与给定向量是否相等
+let result9 = v1.equals(v2);
+
+// 克隆当前向量
+let result10 = v1.clone();
+
+// 使用一个给定的向量给向前向量赋值
+v1.copyFrom(v2);
+
+// 将向量转换为单位向量
+v1.normalize();
+
+```
+### 三维向量
+```ts
+import {Vector3} from "@orillusion/core";
+
+// 创建默认三维向量, x,y,z 分量值均为0.0
+let v1 = new Vector3();
+
+// 创建二维向量,即 x,y,z,w 分量均为1.0
+let v2 = new Vector3(1.0, 1.0, 1.0, 1.0);
+
+// 设置指定值
+v1.set(2.0, 2.0, 2.0, 2.0);
+
+// 获取向量的分量值
+let x = v1.x;
+let y = v1.y;
+let z = v1.z;
+let w = v1.w;
+
+// 计算向量的长度
+let result1 = v1.length();
+
+// 计算两个向量的和
+let result2 = v1.add(v2);
+
+// 计算两个向量的差
+let result3 = v1.subtract(v2);
+
+// 将该向量的两个分量同时乘以一个指定的向量
+let result4 = v1.multiply(v2);
+
+// 将该向量的两个分量同时除以一个指定的向量
+let result5 = v1.divided(v2);
+
+// 静态函数计算向量的距离
+let result6 = Vector3.distance(v1, v2);
+
+// 使用静态函数计算两个向量之间的角度
+let result7 = Vector3.getAngle(v1, v2);
+
+// 计算当前向量与给定向量是否相等
+let result9 = v1.equals(v2);
+
+// 克隆当前向量
+let result9 = v1.clone();
+
+// 使用一个给定的向量给向前向量赋值
+v1.copyFrom(v2);
+
+// 将向量转换为单位向量
+v1.normalize();
+
+```
+## Rectangle
+用来表示一个矩形的区域
+```ts
+import {Rectangle} from "@orillusion/core";
+
+// 使用默认值构造一个矩形区域,默认值均是0
+let r1 = new Rectangle();
+
+// 使用指定值构造一个矩形区域
+let r2 = new Rectangle(0, 0, 10, 10);
+
+// 获取矩形宽度
+let h = r1.width;
+
+// 设置矩形宽度
+r1.width = 100;
+
+// 获取矩形高度
+let h = r1.height;
+
+// 设置矩形高度
+r1.height = 100;
+
+// 克隆一个新的矩形
+let r3 = r1.clone();
+
+// 使用新值覆盖矩形原有值
+r3.copyFrom(r2);
+
+// 将该对象的值复制到给定的矩形对象
+r2.copyTo(r3);
+
+// 判断给定的点是否在区域内
+let result1 = r1.inner(0, 0);
+
+// 判断矩形区域是否相等
+let result2 = r1.equal(r2)
+
+// 判断矩形区域是否有重叠部分
+let result3 = r1.equalInnerArea(r2);
+
+// 获取两个矩形区域重叠的部分
+let result4 = r1.innerArea(r2);
+
+```
+
+## Color
+```ts
+import { Color } from '@orillusion/core';
+
+// 创建 Color 对象,默认值无为1.0
+let c1 = new Color();
+
+// 使用给定值创建 Color 对象
+let c2 = new Color(1, 1, 1, 1);
+
+// 获取红色分量
+let r = c1.r;
+
+// 获取绿色分量
+let g = c1.g;
+
+// 获取蓝色分量
+let b = c1.b;
+
+// 获取透明度
+let a = c1.a;
+
+// 设置颜色值
+c1.setTo(0.5, 0.5, 0.5, 1);
+
+// 获取随机颜色
+let c3 = Color.random();
+
+// 克隆颜色值
+let c4 = c3.clone();
+
+// 使用字符串设置颜色值
+let c3.setHex('#AAA')
+
+// 获取颜色值字符串
+let result1 = c1.getHex();
+
+```
+
+
+## 四元数
+四元数是简单的超复数,而在图形引擎中,四元数主要用于三维旋转(四元数于三维旋转的关系),能够表示旋转的不止四元数,还有欧拉角、轴角、矩阵等形式,之所以选择四元数,主要有以下几个优势:
+
+* 解决了万向节死锁的问题
+* 只需要存储4个浮点数,相比矩阵来说更轻量
+* 无论是求逆、串联等操作,相比矩阵更为高效
+
+```ts
+import { Quaternion } from '@orillusion/core';
+
+// 使用默认值创建四元数对象,x、y、z、w分量值均为0
+let q1 = new Quaternion();
+
+// 使用指定值创建四元数对象
+let q2 = new Quaternion(0, 0, 0, 1);
+
+// 设置四元数的值,依次设置x、y、z、w分量值
+q2.set(0, 0, 0, 1);
+
+// 进行单位旋转四元数
+let result1 = q1.identity();
+
+// 四元数除法
+q1.divide(q2);
+
+// 四元数相乘
+result1.multiply(q1, q2);
+
+// 从由轴和角度所给定的旋转来设置该四元数
+q1.fromAxisAngle(new Vector3(), 15);
+
+// 把四元数转成角度返回
+let result2 = q1.toAxisAngle(new Vector3());
+
+// 用数值表示给定的欧拉旋转填充四元数对象
+q1.fromEulerAngles(1, 1, 1);
+
+// 把四元数转成欧拉角返回
+let result3 = q1.toEulerAngles();
+
+// 单位化四元数。将此四元数转换为单位系数
+q1.normalize();
+
+// 旋转一个3量坐标点
+let result4 = q1.transformVector(new Vector3());
+
+// 将数据从四元数复制到该实例
+q1.copyFrom(q2);
+
+
+```
+
+## 矩阵
+在 3D 图形引擎中,计算可以在多个不同的笛卡尔坐标空间中执行,从一个坐标空间到另一个坐标空间需要使用变换矩阵,而我们数学库中的Matrix模块正是为提供这种能力而存在的。
+
+### 三维矩阵
+```ts
+import { Matrix3 } from '@orillusion/core';
+
+// 使用默认值创建3维矩阵
+let m1 = new Matrix3();
+
+// 使用指定值创建3维矩阵
+let m2 = new Matrix3(10, 0, 0, 10, 0, 0);
+
+// 克隆一个新对象
+let m3 = m1.clone();
+
+// 将当前矩阵与目标矩阵合并
+m1.concat(m2);
+
+// 将当前矩阵值由目标矩阵值覆盖
+m1.copyFrom(m2);
+
+// 重置为单位矩阵
+m1.identity();
+
+// 倒置本矩阵
+m.invert();
+
+// 根据角度旋转
+m1.rotate(10);
+
+// 根据偏移量缩放
+m1.scale(10,10);
+
+// 判断矩阵是否相等
+let result1 = m1.equal(m2);
+```
+
+### 四维矩阵
+```ts
+import { Matrix4, Vector3 } from '@orillusion/core';
+
+// 使用默认值创建一个4维矩阵
+let m1 = new Matrix4();
+
+// 指定创建一个wasm 4维矩阵
+let m2 = new Matrix4(false);
+
+// 克隆一个新对象
+let m3 = m1.clone();
+
+// 相乘矩阵
+m1.multiply(m2);
+
+// 相加矩阵
+m1.add(m2);
+
+// 矩阵相减
+m1.sub(m2);
+
+// 获取逆矩阵
+m.invert();
+
+// 当前矩阵转置
+m1.transpose();
+
+// 设置矩阵位移
+m1.position = new Vector3(10,10, 10);
+
+// 返回矩阵位移
+let position = m1.position;
+
+// 设置矩阵缩放
+m1.scale = new Vector3(10,10, 10);
+
+// 返回矩阵缩放
+let scale = m1.scale;
+
+```
+
+## 平面
+```ts
+import { Plane, Vector3, Ray } from '@orillusion/core';
+
+// 构造新的平面对象,使用平面位置和平面法线量作为构造函数
+let p1 = new Plane(new Vector3(0,0,0), new Vector3(0,0,1));
+
+// 复制平面
+let p2 = p1.clone();
+
+// 判断平面是否和某线段相交,并计算交点
+let point1 = new Vector3();
+let result1 = p1.intersectsLine(new Vector3(0,0,0), new Vector3(10,10,10), point1);
+
+// 判断平面是否和某射线相交,并计算交点
+let point2 = new Vector3();
+let result2 = p1.intersectsRay(new Ray(), point2);
+
+```
+
+## 射线
+```ts
+import { Plane, Vector3, Ray } from '@orillusion/core';
+
+// 构造新的射线,默认起点和方向都是0
+let r1 = new Ray();
+
+// 构造新的射线,使用指定的起点和方向
+let r2 = new Ray(new Vector3(0,0,0), new Vector3(1,1,1));
+
+// 克隆一个射线对象
+let r3 = r1.copy();
+
+// 获取射线方向
+let direction = r1.direction;
+
+// 设置射线方向
+r1.direction = new Vector3( 1, 1, 1);
+
+// 计算射线上的某一点
+let result1 = r1.at(1);
+
+// 设置射线起点
+r1.setOrigin(new Vector3(1,1,1));
+
+// 获取射线的起点
+let result2 = r1.getOrigin();
+
+```
+
+## MathUtil
+
+```ts
+import { MathUtil, Vector3, Matrix4 } from '@orillusion/core';
+
+// 将数值限制在某一范围内
+let result1 = MathUtil.clampf(1, 0, 2);
+
+// 规范化角度,使其限制在[-180, 180]范围内
+let result2 = MathUtil.normalizeAngle(100);
+
+// 返回某数的小数部分
+let result3 = MathUtil.fract(1.1);
+
+// 计算两个向量之间的角度
+let result4 = MathUtil.angle_360(new Vector3(10, 10, 10), new Vector3(20, 20, 20));
+
+// 计算出一个方向变换到另一个方向的四元数
+let result5 = MathUtil.fromToRotation(new Vector3(10, 10, 10), new Vector3(20, 20, 20));
+
+// 计算向量变换,并将结果赋值到输入变量中
+let result6 = MathUtil.transformVector(new Matrix4(), new Vector3(20, 20, 20))
+```
\ No newline at end of file
diff --git a/docs/index.md b/docs/index.md
new file mode 100755
index 00000000..ba6e5ece
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,40 @@
+---
+layout: home
+title: Orillusion
+titleTemplate: 专业 WebGPU 引擎
+
+hero:
+ name: Orillusion
+ image:
+ light: /images/logo_black.png
+ dark: /images/logo_white.png
+ text: 次时代 WebGPU 引擎
+ tagline: 简单易用,功能强大,为 Web3D 提供完善开发工具
+ actions:
+ - theme: brand
+ text: 快速开始
+ link: /guide/
+ - theme: alt
+ text: 查看示例
+ link: /example/base/AddRemove
+ - theme: alt
+ text: GitHub
+ link: https://github.com/Orillusion/orillusion
+
+features:
+ - title: 简单易用
+ details: 极其简单的数据驱动开发,易用的 JavaScript & TypeScript API,免费,永久开源!
+ - title: 灵活扩展
+ details: 可扩展的ECS框架,可以简单做为一个库使用,也可以通过完善的组件库自如伸缩至一套完整框架
+ - title: 超强性能
+ details:
+ 原生 Web 跨平台运行环境,超快的 WebGPU 渲染技术,最省心的优化体验
+---
+
+
+
diff --git a/docs/media-extention/classes/AudioListener.md b/docs/media-extention/classes/AudioListener.md
new file mode 100644
index 00000000..c0a25537
--- /dev/null
+++ b/docs/media-extention/classes/AudioListener.md
@@ -0,0 +1,624 @@
+# Class: AudioListener
+
+Audio Listener
+Used in conjunction [PositionAudio](PositionAudio.md) or [StaticAudio](StaticAudio.md)
+
+## Hierarchy
+
+- `ComponentBase`
+
+ ↳ **`AudioListener`**
+
+### Constructors
+
+- [constructor](AudioListener.md#constructor)
+
+### Properties
+
+- [context](AudioListener.md#context)
+- [gain](AudioListener.md#gain)
+- [object3D](AudioListener.md#object3d)
+- [isDestroyed](AudioListener.md#isdestroyed)
+
+### Accessors
+
+- [eventDispatcher](AudioListener.md#eventdispatcher)
+- [isStart](AudioListener.md#isstart)
+- [transform](AudioListener.md#transform)
+- [enable](AudioListener.md#enable)
+
+### Methods
+
+- [onUpdate](AudioListener.md#onupdate)
+- [destroy](AudioListener.md#destroy)
+- [init](AudioListener.md#init)
+- [start](AudioListener.md#start)
+- [stop](AudioListener.md#stop)
+- [onEnable](AudioListener.md#onenable)
+- [onDisable](AudioListener.md#ondisable)
+- [onLateUpdate](AudioListener.md#onlateupdate)
+- [onBeforeUpdate](AudioListener.md#onbeforeupdate)
+- [onCompute](AudioListener.md#oncompute)
+- [onGraphic](AudioListener.md#ongraphic)
+- [onParentChange](AudioListener.md#onparentchange)
+- [onAddChild](AudioListener.md#onaddchild)
+- [onRemoveChild](AudioListener.md#onremovechild)
+- [cloneTo](AudioListener.md#cloneto)
+- [copyComponent](AudioListener.md#copycomponent)
+- [beforeDestroy](AudioListener.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new AudioListener**(): [`AudioListener`](AudioListener.md)
+
+#### Returns
+
+[`AudioListener`](AudioListener.md)
+
+#### Overrides
+
+ComponentBase.constructor
+
+#### Defined in
+
+[packages/media-extention/AudioListener.ts:11](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/AudioListener.ts#L11)
+
+## Properties
+
+### context
+
+• `Readonly` **context**: `AudioContext`
+
+#### Defined in
+
+[packages/media-extention/AudioListener.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/AudioListener.ts#L9)
+
+___
+
+### gain
+
+• `Readonly` **gain**: `GainNode`
+
+#### Defined in
+
+[packages/media-extention/AudioListener.ts:10](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/AudioListener.ts#L10)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+ComponentBase.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+ComponentBase.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### onUpdate
+
+▸ **onUpdate**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+ComponentBase.onUpdate
+
+#### Defined in
+
+[packages/media-extention/AudioListener.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/AudioListener.ts#L17)
+
+___
+
+### destroy
+
+▸ **destroy**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+ComponentBase.destroy
+
+#### Defined in
+
+[packages/media-extention/AudioListener.ts:44](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/AudioListener.ts#L44)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.init
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.start
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onEnable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onDisable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `Object3D` | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+ComponentBase.copyComponent
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.beforeDestroy
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
diff --git a/docs/media-extention/classes/ChromaKeyMaterial.md b/docs/media-extention/classes/ChromaKeyMaterial.md
new file mode 100644
index 00000000..1e98cd39
--- /dev/null
+++ b/docs/media-extention/classes/ChromaKeyMaterial.md
@@ -0,0 +1,1444 @@
+# Class: ChromaKeyMaterial
+
+ChromaKey Material
+Do not compute light, only read pixel color from a video source with a background color filter
+
+## Hierarchy
+
+- `Material`
+
+ ↳ **`ChromaKeyMaterial`**
+
+### Constructors
+
+- [constructor](ChromaKeyMaterial.md#constructor)
+
+### Properties
+
+- [instanceID](ChromaKeyMaterial.md#instanceid)
+- [name](ChromaKeyMaterial.md#name)
+- [enable](ChromaKeyMaterial.md#enable)
+
+### Accessors
+
+- [baseMap](ChromaKeyMaterial.md#basemap)
+- [baseColor](ChromaKeyMaterial.md#basecolor)
+- [rectClip](ChromaKeyMaterial.md#rectclip)
+- [keyColor](ChromaKeyMaterial.md#keycolor)
+- [colorCutoff](ChromaKeyMaterial.md#colorcutoff)
+- [colorFeathering](ChromaKeyMaterial.md#colorfeathering)
+- [maskFeathering](ChromaKeyMaterial.md#maskfeathering)
+- [sharpening](ChromaKeyMaterial.md#sharpening)
+- [despoil](ChromaKeyMaterial.md#despoil)
+- [despoilLuminanceAdd](ChromaKeyMaterial.md#despoilluminanceadd)
+- [shader](ChromaKeyMaterial.md#shader)
+- [doubleSide](ChromaKeyMaterial.md#doubleside)
+- [castShadow](ChromaKeyMaterial.md#castshadow)
+- [acceptShadow](ChromaKeyMaterial.md#acceptshadow)
+- [castReflection](ChromaKeyMaterial.md#castreflection)
+- [blendMode](ChromaKeyMaterial.md#blendmode)
+- [depthCompare](ChromaKeyMaterial.md#depthcompare)
+- [transparent](ChromaKeyMaterial.md#transparent)
+- [cullMode](ChromaKeyMaterial.md#cullmode)
+- [depthWriteEnabled](ChromaKeyMaterial.md#depthwriteenabled)
+- [useBillboard](ChromaKeyMaterial.md#usebillboard)
+
+### Methods
+
+- [debug](ChromaKeyMaterial.md#debug)
+- [getPass](ChromaKeyMaterial.md#getpass)
+- [getAllPass](ChromaKeyMaterial.md#getallpass)
+- [clone](ChromaKeyMaterial.md#clone)
+- [destroy](ChromaKeyMaterial.md#destroy)
+- [setDefine](ChromaKeyMaterial.md#setdefine)
+- [setTexture](ChromaKeyMaterial.md#settexture)
+- [setStorageBuffer](ChromaKeyMaterial.md#setstoragebuffer)
+- [setUniformBuffer](ChromaKeyMaterial.md#setuniformbuffer)
+- [setUniformFloat](ChromaKeyMaterial.md#setuniformfloat)
+- [setUniformVector2](ChromaKeyMaterial.md#setuniformvector2)
+- [setUniformVector3](ChromaKeyMaterial.md#setuniformvector3)
+- [setUniformVector4](ChromaKeyMaterial.md#setuniformvector4)
+- [setUniformColor](ChromaKeyMaterial.md#setuniformcolor)
+- [getUniformFloat](ChromaKeyMaterial.md#getuniformfloat)
+- [getUniformV2](ChromaKeyMaterial.md#getuniformv2)
+- [getUniformV3](ChromaKeyMaterial.md#getuniformv3)
+- [getUniformV4](ChromaKeyMaterial.md#getuniformv4)
+- [getUniformColor](ChromaKeyMaterial.md#getuniformcolor)
+- [getTexture](ChromaKeyMaterial.md#gettexture)
+- [getStorageBuffer](ChromaKeyMaterial.md#getstoragebuffer)
+- [getStructStorageBuffer](ChromaKeyMaterial.md#getstructstoragebuffer)
+- [getUniformBuffer](ChromaKeyMaterial.md#getuniformbuffer)
+- [applyUniform](ChromaKeyMaterial.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new ChromaKeyMaterial**(): [`ChromaKeyMaterial`](ChromaKeyMaterial.md)
+
+Create new ChromaKey material
+
+#### Returns
+
+[`ChromaKeyMaterial`](ChromaKeyMaterial.md)
+
+#### Overrides
+
+Material.constructor
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:13](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L13)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+Material Unique Identifier
+
+#### Inherited from
+
+Material.instanceID
+
+#### Defined in
+
+[src/materials/Material.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L19)
+
+___
+
+### name
+
+• **name**: `string`
+
+name of this material
+
+#### Inherited from
+
+Material.name
+
+#### Defined in
+
+[src/materials/Material.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L25)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+Material.enable
+
+#### Defined in
+
+[src/materials/Material.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L27)
+
+## Accessors
+
+### baseMap
+
+• `get` **baseMap**(): `Texture`
+
+#### Returns
+
+`Texture`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:57](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L57)
+
+• `set` **baseMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Texture` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:53](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L53)
+
+___
+
+### baseColor
+
+• `get` **baseColor**(): `Color`
+
+get base color (tint color)
+
+#### Returns
+
+`Color`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:71](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L71)
+
+• `set` **baseColor**(`color`): `void`
+
+set base color (tint color)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:64](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L64)
+
+___
+
+### rectClip
+
+• `get` **rectClip**(): `Vector4`
+
+Get current clip rect area
+
+#### Returns
+
+`Vector4`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:85](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L85)
+
+• `set` **rectClip**(`value`): `void`
+
+Set the clip rect area
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:78](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L78)
+
+___
+
+### keyColor
+
+• `get` **keyColor**(): `Color`
+
+Get the chromakey color
+
+#### Returns
+
+`Color`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:99](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L99)
+
+• `set` **keyColor**(`value`): `void`
+
+Set the chromakey color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:92](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L92)
+
+___
+
+### colorCutoff
+
+• `get` **colorCutoff**(): `number`
+
+Get the color cutoff factor
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:113](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L113)
+
+• `set` **colorCutoff**(`value`): `void`
+
+Set the color cutoff factor
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:106](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L106)
+
+___
+
+### colorFeathering
+
+• `get` **colorFeathering**(): `number`
+
+Get the color feather factor
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:127](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L127)
+
+• `set` **colorFeathering**(`value`): `void`
+
+Set the color feather factor
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:120](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L120)
+
+___
+
+### maskFeathering
+
+• `get` **maskFeathering**(): `number`
+
+Get the mask feather factor
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:141](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L141)
+
+• `set` **maskFeathering**(`value`): `void`
+
+Set the mask feather factor
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:134](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L134)
+
+___
+
+### sharpening
+
+• `get` **sharpening**(): `number`
+
+Get the sharpen factor
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:155](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L155)
+
+• `set` **sharpening**(`value`): `void`
+
+Set the sharpen factor
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:148](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L148)
+
+___
+
+### despoil
+
+• `get` **despoil**(): `number`
+
+Get the despoil factor
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:169](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L169)
+
+• `set` **despoil**(`value`): `void`
+
+Set the despoil factor
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:162](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L162)
+
+___
+
+### despoilLuminanceAdd
+
+• `get` **despoilLuminanceAdd**(): `number`
+
+Get the despoil luminance factor
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:183](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L183)
+
+• `set` **despoilLuminanceAdd**(`value`): `void`
+
+Set the despoil luminance factor
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:176](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L176)
+
+___
+
+### shader
+
+• `get` **shader**(): `Shader`
+
+#### Returns
+
+`Shader`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L41)
+
+• `set` **shader**(`shader`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shader` | `Shader` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L36)
+
+___
+
+### doubleSide
+
+• `get` **doubleSide**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L45)
+
+• `set` **doubleSide**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L49)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L53)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L57)
+
+___
+
+### acceptShadow
+
+• `get` **acceptShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L64)
+
+• `set` **acceptShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L68)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L77)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L81)
+
+___
+
+### blendMode
+
+• `get` **blendMode**(): `BlendMode`
+
+#### Returns
+
+`BlendMode`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L85)
+
+• `set` **blendMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BlendMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L89)
+
+___
+
+### depthCompare
+
+• `get` **depthCompare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L93)
+
+• `set` **depthCompare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L97)
+
+___
+
+### transparent
+
+• `get` **transparent**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L102)
+
+• `set` **transparent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L106)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L113)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L117)
+
+___
+
+### depthWriteEnabled
+
+• `get` **depthWriteEnabled**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L128)
+
+• `set` **depthWriteEnabled**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L132)
+
+___
+
+### useBillboard
+
+• `set` **useBillboard**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.useBillboard
+
+#### Defined in
+
+[src/materials/Material.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L136)
+
+## Methods
+
+### debug
+
+▸ **debug**(): `void`
+
+Show a debug GUI
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/ChromaKeyMaterial.ts:190](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ChromaKeyMaterial.ts#L190)
+
+___
+
+### getPass
+
+▸ **getPass**(`passType`): `RenderShaderPass`[]
+
+get render pass by renderType
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+`RenderShaderPass`[]
+
+#### Inherited from
+
+Material.getPass
+
+#### Defined in
+
+[src/materials/Material.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L145)
+
+___
+
+### getAllPass
+
+▸ **getAllPass**(): `RenderShaderPass`[]
+
+get all color render pass
+
+#### Returns
+
+`RenderShaderPass`[]
+
+#### Inherited from
+
+Material.getAllPass
+
+#### Defined in
+
+[src/materials/Material.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L153)
+
+___
+
+### clone
+
+▸ **clone**(): `Material`
+
+clone one material
+
+#### Returns
+
+`Material`
+
+Material
+
+#### Inherited from
+
+Material.clone
+
+#### Defined in
+
+[src/materials/Material.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L161)
+
+___
+
+### destroy
+
+▸ **destroy**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.destroy
+
+#### Defined in
+
+[src/materials/Material.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L168)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`define`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `define` | `string` |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setDefine
+
+#### Defined in
+
+[src/materials/Material.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L174)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`propertyName`, `texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `texture` | `Texture` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setTexture
+
+#### Defined in
+
+[src/materials/Material.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L178)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | `StorageGPUBuffer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setStorageBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L182)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | `UniformGPUBuffer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L186)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformFloat
+
+#### Defined in
+
+[src/materials/Material.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L191)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector2` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformVector2
+
+#### Defined in
+
+[src/materials/Material.ts:195](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L195)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformVector3
+
+#### Defined in
+
+[src/materials/Material.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L199)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformVector4
+
+#### Defined in
+
+[src/materials/Material.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L203)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformColor
+
+#### Defined in
+
+[src/materials/Material.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L207)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`str`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+Material.getUniformFloat
+
+#### Defined in
+
+[src/materials/Material.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L211)
+
+___
+
+### getUniformV2
+
+▸ **getUniformV2**(`str`): `Vector2`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector2`
+
+#### Inherited from
+
+Material.getUniformV2
+
+#### Defined in
+
+[src/materials/Material.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L215)
+
+___
+
+### getUniformV3
+
+▸ **getUniformV3**(`str`): `Vector3`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector3`
+
+#### Inherited from
+
+Material.getUniformV3
+
+#### Defined in
+
+[src/materials/Material.ts:219](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L219)
+
+___
+
+### getUniformV4
+
+▸ **getUniformV4**(`str`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+Material.getUniformV4
+
+#### Defined in
+
+[src/materials/Material.ts:223](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L223)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`str`): `Color`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+Material.getUniformColor
+
+#### Defined in
+
+[src/materials/Material.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L227)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`str`): `Texture`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Texture`
+
+#### Inherited from
+
+Material.getTexture
+
+#### Defined in
+
+[src/materials/Material.ts:231](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L231)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`str`): `StorageGPUBuffer`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`StorageGPUBuffer`
+
+#### Inherited from
+
+Material.getStorageBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:235](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L235)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+Material.getStructStorageBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:239](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L239)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+Material.getUniformBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:243](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L243)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.applyUniform
+
+#### Defined in
+
+[src/materials/Material.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L247)
diff --git a/docs/media-extention/classes/ImageMaterial.md b/docs/media-extention/classes/ImageMaterial.md
new file mode 100644
index 00000000..be396a34
--- /dev/null
+++ b/docs/media-extention/classes/ImageMaterial.md
@@ -0,0 +1,1199 @@
+# Class: ImageMaterial
+
+ImageMaterial
+Do not compute light, only read pixel color from a Image source
+
+## Hierarchy
+
+- `Material`
+
+ ↳ **`ImageMaterial`**
+
+### Constructors
+
+- [constructor](ImageMaterial.md#constructor)
+
+### Properties
+
+- [instanceID](ImageMaterial.md#instanceid)
+- [name](ImageMaterial.md#name)
+- [enable](ImageMaterial.md#enable)
+
+### Accessors
+
+- [baseMap](ImageMaterial.md#basemap)
+- [baseColor](ImageMaterial.md#basecolor)
+- [rectClip](ImageMaterial.md#rectclip)
+- [shader](ImageMaterial.md#shader)
+- [doubleSide](ImageMaterial.md#doubleside)
+- [castShadow](ImageMaterial.md#castshadow)
+- [acceptShadow](ImageMaterial.md#acceptshadow)
+- [castReflection](ImageMaterial.md#castreflection)
+- [blendMode](ImageMaterial.md#blendmode)
+- [depthCompare](ImageMaterial.md#depthcompare)
+- [transparent](ImageMaterial.md#transparent)
+- [cullMode](ImageMaterial.md#cullmode)
+- [depthWriteEnabled](ImageMaterial.md#depthwriteenabled)
+- [useBillboard](ImageMaterial.md#usebillboard)
+
+### Methods
+
+- [debug](ImageMaterial.md#debug)
+- [getPass](ImageMaterial.md#getpass)
+- [getAllPass](ImageMaterial.md#getallpass)
+- [clone](ImageMaterial.md#clone)
+- [destroy](ImageMaterial.md#destroy)
+- [setDefine](ImageMaterial.md#setdefine)
+- [setTexture](ImageMaterial.md#settexture)
+- [setStorageBuffer](ImageMaterial.md#setstoragebuffer)
+- [setUniformBuffer](ImageMaterial.md#setuniformbuffer)
+- [setUniformFloat](ImageMaterial.md#setuniformfloat)
+- [setUniformVector2](ImageMaterial.md#setuniformvector2)
+- [setUniformVector3](ImageMaterial.md#setuniformvector3)
+- [setUniformVector4](ImageMaterial.md#setuniformvector4)
+- [setUniformColor](ImageMaterial.md#setuniformcolor)
+- [getUniformFloat](ImageMaterial.md#getuniformfloat)
+- [getUniformV2](ImageMaterial.md#getuniformv2)
+- [getUniformV3](ImageMaterial.md#getuniformv3)
+- [getUniformV4](ImageMaterial.md#getuniformv4)
+- [getUniformColor](ImageMaterial.md#getuniformcolor)
+- [getTexture](ImageMaterial.md#gettexture)
+- [getStorageBuffer](ImageMaterial.md#getstoragebuffer)
+- [getStructStorageBuffer](ImageMaterial.md#getstructstoragebuffer)
+- [getUniformBuffer](ImageMaterial.md#getuniformbuffer)
+- [applyUniform](ImageMaterial.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new ImageMaterial**(): [`ImageMaterial`](ImageMaterial.md)
+
+Create a new ImageMaterial
+
+#### Returns
+
+[`ImageMaterial`](ImageMaterial.md)
+
+#### Overrides
+
+Material.constructor
+
+#### Defined in
+
+[packages/media-extention/ImageMaterial.ts:15](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ImageMaterial.ts#L15)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+Material Unique Identifier
+
+#### Inherited from
+
+Material.instanceID
+
+#### Defined in
+
+[src/materials/Material.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L19)
+
+___
+
+### name
+
+• **name**: `string`
+
+name of this material
+
+#### Inherited from
+
+Material.name
+
+#### Defined in
+
+[src/materials/Material.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L25)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+Material.enable
+
+#### Defined in
+
+[src/materials/Material.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L27)
+
+## Accessors
+
+### baseMap
+
+• `get` **baseMap**(): `Texture`
+
+#### Returns
+
+`Texture`
+
+#### Defined in
+
+[packages/media-extention/ImageMaterial.ts:47](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ImageMaterial.ts#L47)
+
+• `set` **baseMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Texture` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/ImageMaterial.ts:43](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ImageMaterial.ts#L43)
+
+___
+
+### baseColor
+
+• `get` **baseColor**(): `Color`
+
+get base color (tint color)
+
+#### Returns
+
+`Color`
+
+#### Defined in
+
+[packages/media-extention/ImageMaterial.ts:61](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ImageMaterial.ts#L61)
+
+• `set` **baseColor**(`color`): `void`
+
+set base color (tint color)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/ImageMaterial.ts:54](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ImageMaterial.ts#L54)
+
+___
+
+### rectClip
+
+• `get` **rectClip**(): `Vector4`
+
+Get the clip rect area
+
+#### Returns
+
+`Vector4`
+
+#### Defined in
+
+[packages/media-extention/ImageMaterial.ts:75](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ImageMaterial.ts#L75)
+
+• `set` **rectClip**(`value`): `void`
+
+Set the clip rect area
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/ImageMaterial.ts:68](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ImageMaterial.ts#L68)
+
+___
+
+### shader
+
+• `get` **shader**(): `Shader`
+
+#### Returns
+
+`Shader`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L41)
+
+• `set` **shader**(`shader`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shader` | `Shader` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L36)
+
+___
+
+### doubleSide
+
+• `get` **doubleSide**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L45)
+
+• `set` **doubleSide**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L49)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L53)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L57)
+
+___
+
+### acceptShadow
+
+• `get` **acceptShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L64)
+
+• `set` **acceptShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L68)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L77)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L81)
+
+___
+
+### blendMode
+
+• `get` **blendMode**(): `BlendMode`
+
+#### Returns
+
+`BlendMode`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L85)
+
+• `set` **blendMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BlendMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L89)
+
+___
+
+### depthCompare
+
+• `get` **depthCompare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L93)
+
+• `set` **depthCompare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L97)
+
+___
+
+### transparent
+
+• `get` **transparent**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L102)
+
+• `set` **transparent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L106)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L113)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L117)
+
+___
+
+### depthWriteEnabled
+
+• `get` **depthWriteEnabled**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L128)
+
+• `set` **depthWriteEnabled**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L132)
+
+___
+
+### useBillboard
+
+• `set` **useBillboard**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.useBillboard
+
+#### Defined in
+
+[src/materials/Material.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L136)
+
+## Methods
+
+### debug
+
+▸ **debug**(): `void`
+
+Start debug GUI
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/ImageMaterial.ts:82](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/ImageMaterial.ts#L82)
+
+___
+
+### getPass
+
+▸ **getPass**(`passType`): `RenderShaderPass`[]
+
+get render pass by renderType
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+`RenderShaderPass`[]
+
+#### Inherited from
+
+Material.getPass
+
+#### Defined in
+
+[src/materials/Material.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L145)
+
+___
+
+### getAllPass
+
+▸ **getAllPass**(): `RenderShaderPass`[]
+
+get all color render pass
+
+#### Returns
+
+`RenderShaderPass`[]
+
+#### Inherited from
+
+Material.getAllPass
+
+#### Defined in
+
+[src/materials/Material.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L153)
+
+___
+
+### clone
+
+▸ **clone**(): `Material`
+
+clone one material
+
+#### Returns
+
+`Material`
+
+Material
+
+#### Inherited from
+
+Material.clone
+
+#### Defined in
+
+[src/materials/Material.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L161)
+
+___
+
+### destroy
+
+▸ **destroy**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.destroy
+
+#### Defined in
+
+[src/materials/Material.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L168)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`define`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `define` | `string` |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setDefine
+
+#### Defined in
+
+[src/materials/Material.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L174)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`propertyName`, `texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `texture` | `Texture` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setTexture
+
+#### Defined in
+
+[src/materials/Material.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L178)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | `StorageGPUBuffer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setStorageBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L182)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | `UniformGPUBuffer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L186)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformFloat
+
+#### Defined in
+
+[src/materials/Material.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L191)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector2` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformVector2
+
+#### Defined in
+
+[src/materials/Material.ts:195](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L195)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformVector3
+
+#### Defined in
+
+[src/materials/Material.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L199)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformVector4
+
+#### Defined in
+
+[src/materials/Material.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L203)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformColor
+
+#### Defined in
+
+[src/materials/Material.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L207)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`str`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+Material.getUniformFloat
+
+#### Defined in
+
+[src/materials/Material.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L211)
+
+___
+
+### getUniformV2
+
+▸ **getUniformV2**(`str`): `Vector2`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector2`
+
+#### Inherited from
+
+Material.getUniformV2
+
+#### Defined in
+
+[src/materials/Material.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L215)
+
+___
+
+### getUniformV3
+
+▸ **getUniformV3**(`str`): `Vector3`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector3`
+
+#### Inherited from
+
+Material.getUniformV3
+
+#### Defined in
+
+[src/materials/Material.ts:219](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L219)
+
+___
+
+### getUniformV4
+
+▸ **getUniformV4**(`str`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+Material.getUniformV4
+
+#### Defined in
+
+[src/materials/Material.ts:223](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L223)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`str`): `Color`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+Material.getUniformColor
+
+#### Defined in
+
+[src/materials/Material.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L227)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`str`): `Texture`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Texture`
+
+#### Inherited from
+
+Material.getTexture
+
+#### Defined in
+
+[src/materials/Material.ts:231](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L231)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`str`): `StorageGPUBuffer`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`StorageGPUBuffer`
+
+#### Inherited from
+
+Material.getStorageBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:235](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L235)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+Material.getStructStorageBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:239](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L239)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+Material.getUniformBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:243](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L243)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.applyUniform
+
+#### Defined in
+
+[src/materials/Material.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L247)
diff --git a/docs/media-extention/classes/PositionAudio.md b/docs/media-extention/classes/PositionAudio.md
new file mode 100644
index 00000000..c08c5c57
--- /dev/null
+++ b/docs/media-extention/classes/PositionAudio.md
@@ -0,0 +1,1032 @@
+# Class: PositionAudio
+
+Dynamic audio component, with volume varying based on the relative position of the monitor
+
+## Hierarchy
+
+- [`StaticAudio`](StaticAudio.md)
+
+ ↳ **`PositionAudio`**
+
+### Constructors
+
+- [constructor](PositionAudio.md#constructor)
+
+### Properties
+
+- [panner](PositionAudio.md#panner)
+- [context](PositionAudio.md#context)
+- [gainNode](PositionAudio.md#gainnode)
+- [source](PositionAudio.md#source)
+- [playing](PositionAudio.md#playing)
+- [object3D](PositionAudio.md#object3d)
+- [isDestroyed](PositionAudio.md#isdestroyed)
+
+### Accessors
+
+- [refDistance](PositionAudio.md#refdistance)
+- [rolloffFactor](PositionAudio.md#rollofffactor)
+- [distanceModel](PositionAudio.md#distancemodel)
+- [maxDistance](PositionAudio.md#maxdistance)
+- [eventDispatcher](PositionAudio.md#eventdispatcher)
+- [isStart](PositionAudio.md#isstart)
+- [transform](PositionAudio.md#transform)
+- [enable](PositionAudio.md#enable)
+
+### Methods
+
+- [setLisenter](PositionAudio.md#setlisenter)
+- [showHelper](PositionAudio.md#showhelper)
+- [hideHelper](PositionAudio.md#hidehelper)
+- [toggleHelper](PositionAudio.md#togglehelper)
+- [updateHeler](PositionAudio.md#updateheler)
+- [setDirectionalCone](PositionAudio.md#setdirectionalcone)
+- [start](PositionAudio.md#start)
+- [stop](PositionAudio.md#stop)
+- [onUpdate](PositionAudio.md#onupdate)
+- [destroy](PositionAudio.md#destroy)
+- [load](PositionAudio.md#load)
+- [loadBuffer](PositionAudio.md#loadbuffer)
+- [play](PositionAudio.md#play)
+- [pause](PositionAudio.md#pause)
+- [setVolume](PositionAudio.md#setvolume)
+- [init](PositionAudio.md#init)
+- [onEnable](PositionAudio.md#onenable)
+- [onDisable](PositionAudio.md#ondisable)
+- [onLateUpdate](PositionAudio.md#onlateupdate)
+- [onBeforeUpdate](PositionAudio.md#onbeforeupdate)
+- [onCompute](PositionAudio.md#oncompute)
+- [onGraphic](PositionAudio.md#ongraphic)
+- [onParentChange](PositionAudio.md#onparentchange)
+- [onAddChild](PositionAudio.md#onaddchild)
+- [onRemoveChild](PositionAudio.md#onremovechild)
+- [cloneTo](PositionAudio.md#cloneto)
+- [copyComponent](PositionAudio.md#copycomponent)
+- [beforeDestroy](PositionAudio.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new PositionAudio**(): [`PositionAudio`](PositionAudio.md)
+
+#### Returns
+
+[`PositionAudio`](PositionAudio.md)
+
+#### Overrides
+
+[StaticAudio](StaticAudio.md).[constructor](StaticAudio.md#constructor)
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:14](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L14)
+
+## Properties
+
+### panner
+
+• **panner**: `PannerNode`
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L9)
+
+___
+
+### context
+
+• **context**: `AudioContext` = `null`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[context](StaticAudio.md#context)
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L9)
+
+___
+
+### gainNode
+
+• **gainNode**: `GainNode` = `null`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[gainNode](StaticAudio.md#gainnode)
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:10](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L10)
+
+___
+
+### source
+
+• **source**: `AudioBufferSourceNode` = `null`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[source](StaticAudio.md#source)
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:11](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L11)
+
+___
+
+### playing
+
+• **playing**: `boolean` = `false`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[playing](StaticAudio.md#playing)
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:16](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L16)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[object3D](StaticAudio.md#object3d)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[isDestroyed](StaticAudio.md#isdestroyed)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### refDistance
+
+• `get` **refDistance**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:99](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L99)
+
+• `set` **refDistance**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:102](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L102)
+
+___
+
+### rolloffFactor
+
+• `get` **rolloffFactor**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:108](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L108)
+
+• `set` **rolloffFactor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:111](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L111)
+
+___
+
+### distanceModel
+
+• `get` **distanceModel**(): `DistanceModelType`
+
+#### Returns
+
+`DistanceModelType`
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:114](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L114)
+
+• `set` **distanceModel**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `DistanceModelType` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:117](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L117)
+
+___
+
+### maxDistance
+
+• `get` **maxDistance**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:120](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L120)
+
+• `set` **maxDistance**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:123](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L123)
+
+___
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+StaticAudio.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+StaticAudio.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+StaticAudio.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+StaticAudio.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+StaticAudio.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+StaticAudio.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### setLisenter
+
+▸ **setLisenter**(`listener`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `listener` | [`AudioListener`](AudioListener.md) |
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+[StaticAudio](StaticAudio.md).[setLisenter](StaticAudio.md#setlisenter)
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L17)
+
+___
+
+### showHelper
+
+▸ **showHelper**(`thickness?`, `step?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `thickness?` | `number` |
+| `step?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L24)
+
+___
+
+### hideHelper
+
+▸ **hideHelper**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:78](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L78)
+
+___
+
+### toggleHelper
+
+▸ **toggleHelper**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:87](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L87)
+
+___
+
+### updateHeler
+
+▸ **updateHeler**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:95](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L95)
+
+___
+
+### setDirectionalCone
+
+▸ **setDirectionalCone**(`coneInnerAngle`, `coneOuterAngle`, `coneOuterGain`): [`PositionAudio`](PositionAudio.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `coneInnerAngle` | `number` |
+| `coneOuterAngle` | `number` |
+| `coneOuterGain` | `number` |
+
+#### Returns
+
+[`PositionAudio`](PositionAudio.md)
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:130](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L130)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[StaticAudio](StaticAudio.md).[start](StaticAudio.md#start)
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:142](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L142)
+
+___
+
+### stop
+
+▸ **stop**(): `this`
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+[StaticAudio](StaticAudio.md).[stop](StaticAudio.md#stop)
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:144](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L144)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[StaticAudio](StaticAudio.md).[onUpdate](StaticAudio.md#onupdate)
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:147](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L147)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[StaticAudio](StaticAudio.md).[destroy](StaticAudio.md#destroy)
+
+#### Defined in
+
+[packages/media-extention/PositionAudio.ts:170](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/PositionAudio.ts#L170)
+
+___
+
+### load
+
+▸ **load**(`url`, `options?`): `Promise`\<`void`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `url` | `string` |
+| `options` | `Object` |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[load](StaticAudio.md#load)
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:40](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L40)
+
+___
+
+### loadBuffer
+
+▸ **loadBuffer**(`buffer`, `options?`): `Promise`\<`void`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+| `options` | `Object` |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[loadBuffer](StaticAudio.md#loadbuffer)
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:46](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L46)
+
+___
+
+### play
+
+▸ **play**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[play](StaticAudio.md#play)
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:55](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L55)
+
+___
+
+### pause
+
+▸ **pause**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[pause](StaticAudio.md#pause)
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:78](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L78)
+
+___
+
+### setVolume
+
+▸ **setVolume**(`value`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[setVolume](StaticAudio.md#setvolume)
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:94](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L94)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[init](StaticAudio.md#init)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[onEnable](StaticAudio.md#onenable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[onDisable](StaticAudio.md#ondisable)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[onLateUpdate](StaticAudio.md#onlateupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[onBeforeUpdate](StaticAudio.md#onbeforeupdate)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[onCompute](StaticAudio.md#oncompute)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[onGraphic](StaticAudio.md#ongraphic)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[onParentChange](StaticAudio.md#onparentchange)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[onAddChild](StaticAudio.md#onaddchild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[onRemoveChild](StaticAudio.md#onremovechild)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `Object3D` | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[cloneTo](StaticAudio.md#cloneto)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[copyComponent](StaticAudio.md#copycomponent)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[StaticAudio](StaticAudio.md).[beforeDestroy](StaticAudio.md#beforedestroy)
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
diff --git a/docs/media-extention/classes/StaticAudio.md b/docs/media-extention/classes/StaticAudio.md
new file mode 100644
index 00000000..27694ac4
--- /dev/null
+++ b/docs/media-extention/classes/StaticAudio.md
@@ -0,0 +1,775 @@
+# Class: StaticAudio
+
+Static audio component, volume level does not vary depending on the position of the monitor
+
+## Hierarchy
+
+- `ComponentBase`
+
+ ↳ **`StaticAudio`**
+
+ ↳↳ [`PositionAudio`](PositionAudio.md)
+
+### Constructors
+
+- [constructor](StaticAudio.md#constructor)
+
+### Properties
+
+- [context](StaticAudio.md#context)
+- [gainNode](StaticAudio.md#gainnode)
+- [source](StaticAudio.md#source)
+- [playing](StaticAudio.md#playing)
+- [object3D](StaticAudio.md#object3d)
+- [isDestroyed](StaticAudio.md#isdestroyed)
+
+### Accessors
+
+- [eventDispatcher](StaticAudio.md#eventdispatcher)
+- [isStart](StaticAudio.md#isstart)
+- [transform](StaticAudio.md#transform)
+- [enable](StaticAudio.md#enable)
+
+### Methods
+
+- [setLisenter](StaticAudio.md#setlisenter)
+- [load](StaticAudio.md#load)
+- [loadBuffer](StaticAudio.md#loadbuffer)
+- [play](StaticAudio.md#play)
+- [pause](StaticAudio.md#pause)
+- [stop](StaticAudio.md#stop)
+- [setVolume](StaticAudio.md#setvolume)
+- [destroy](StaticAudio.md#destroy)
+- [init](StaticAudio.md#init)
+- [start](StaticAudio.md#start)
+- [onEnable](StaticAudio.md#onenable)
+- [onDisable](StaticAudio.md#ondisable)
+- [onUpdate](StaticAudio.md#onupdate)
+- [onLateUpdate](StaticAudio.md#onlateupdate)
+- [onBeforeUpdate](StaticAudio.md#onbeforeupdate)
+- [onCompute](StaticAudio.md#oncompute)
+- [onGraphic](StaticAudio.md#ongraphic)
+- [onParentChange](StaticAudio.md#onparentchange)
+- [onAddChild](StaticAudio.md#onaddchild)
+- [onRemoveChild](StaticAudio.md#onremovechild)
+- [cloneTo](StaticAudio.md#cloneto)
+- [copyComponent](StaticAudio.md#copycomponent)
+- [beforeDestroy](StaticAudio.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new StaticAudio**(): [`StaticAudio`](StaticAudio.md)
+
+#### Returns
+
+[`StaticAudio`](StaticAudio.md)
+
+#### Overrides
+
+ComponentBase.constructor
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L19)
+
+## Properties
+
+### context
+
+• **context**: `AudioContext` = `null`
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L9)
+
+___
+
+### gainNode
+
+• **gainNode**: `GainNode` = `null`
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:10](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L10)
+
+___
+
+### source
+
+• **source**: `AudioBufferSourceNode` = `null`
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:11](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L11)
+
+___
+
+### playing
+
+• **playing**: `boolean` = `false`
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:16](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L16)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+ComponentBase.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+ComponentBase.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### setLisenter
+
+▸ **setLisenter**(`listener`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `listener` | [`AudioListener`](AudioListener.md) |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:22](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L22)
+
+___
+
+### load
+
+▸ **load**(`url`, `options?`): `Promise`\<`void`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `url` | `string` |
+| `options` | `Object` |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:40](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L40)
+
+___
+
+### loadBuffer
+
+▸ **loadBuffer**(`buffer`, `options?`): `Promise`\<`void`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `buffer` | `ArrayBuffer` |
+| `options` | `Object` |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:46](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L46)
+
+___
+
+### play
+
+▸ **play**(): `this`
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:55](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L55)
+
+___
+
+### pause
+
+▸ **pause**(): `this`
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:78](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L78)
+
+___
+
+### stop
+
+▸ **stop**(): `this`
+
+#### Returns
+
+`this`
+
+#### Overrides
+
+ComponentBase.stop
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:89](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L89)
+
+___
+
+### setVolume
+
+▸ **setVolume**(`value`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:94](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L94)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+ComponentBase.destroy
+
+#### Defined in
+
+[packages/media-extention/StaticAudio.ts:105](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/StaticAudio.ts#L105)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.init
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.start
+
+#### Defined in
+
+[src/components/ComponentBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L113)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onEnable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onDisable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `Object3D` | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+ComponentBase.copyComponent
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.beforeDestroy
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
diff --git a/docs/media-extention/classes/VideoMaterial.md b/docs/media-extention/classes/VideoMaterial.md
new file mode 100644
index 00000000..4c1c8dbe
--- /dev/null
+++ b/docs/media-extention/classes/VideoMaterial.md
@@ -0,0 +1,1228 @@
+# Class: VideoMaterial
+
+Video Material
+Do not compute light, only read pixel color from a Video source
+
+## Hierarchy
+
+- `Material`
+
+ ↳ **`VideoMaterial`**
+
+### Constructors
+
+- [constructor](VideoMaterial.md#constructor)
+
+### Properties
+
+- [instanceID](VideoMaterial.md#instanceid)
+- [name](VideoMaterial.md#name)
+- [enable](VideoMaterial.md#enable)
+
+### Accessors
+
+- [rectClip](VideoMaterial.md#rectclip)
+- [baseColor](VideoMaterial.md#basecolor)
+- [baseMap](VideoMaterial.md#basemap)
+- [envMap](VideoMaterial.md#envmap)
+- [shadowMap](VideoMaterial.md#shadowmap)
+- [shader](VideoMaterial.md#shader)
+- [doubleSide](VideoMaterial.md#doubleside)
+- [castShadow](VideoMaterial.md#castshadow)
+- [acceptShadow](VideoMaterial.md#acceptshadow)
+- [castReflection](VideoMaterial.md#castreflection)
+- [blendMode](VideoMaterial.md#blendmode)
+- [depthCompare](VideoMaterial.md#depthcompare)
+- [transparent](VideoMaterial.md#transparent)
+- [cullMode](VideoMaterial.md#cullmode)
+- [depthWriteEnabled](VideoMaterial.md#depthwriteenabled)
+- [useBillboard](VideoMaterial.md#usebillboard)
+
+### Methods
+
+- [getPass](VideoMaterial.md#getpass)
+- [getAllPass](VideoMaterial.md#getallpass)
+- [clone](VideoMaterial.md#clone)
+- [destroy](VideoMaterial.md#destroy)
+- [setDefine](VideoMaterial.md#setdefine)
+- [setTexture](VideoMaterial.md#settexture)
+- [setStorageBuffer](VideoMaterial.md#setstoragebuffer)
+- [setUniformBuffer](VideoMaterial.md#setuniformbuffer)
+- [setUniformFloat](VideoMaterial.md#setuniformfloat)
+- [setUniformVector2](VideoMaterial.md#setuniformvector2)
+- [setUniformVector3](VideoMaterial.md#setuniformvector3)
+- [setUniformVector4](VideoMaterial.md#setuniformvector4)
+- [setUniformColor](VideoMaterial.md#setuniformcolor)
+- [getUniformFloat](VideoMaterial.md#getuniformfloat)
+- [getUniformV2](VideoMaterial.md#getuniformv2)
+- [getUniformV3](VideoMaterial.md#getuniformv3)
+- [getUniformV4](VideoMaterial.md#getuniformv4)
+- [getUniformColor](VideoMaterial.md#getuniformcolor)
+- [getTexture](VideoMaterial.md#gettexture)
+- [getStorageBuffer](VideoMaterial.md#getstoragebuffer)
+- [getStructStorageBuffer](VideoMaterial.md#getstructstoragebuffer)
+- [getUniformBuffer](VideoMaterial.md#getuniformbuffer)
+- [applyUniform](VideoMaterial.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new VideoMaterial**(): [`VideoMaterial`](VideoMaterial.md)
+
+Create new VideoMaterial
+
+#### Returns
+
+[`VideoMaterial`](VideoMaterial.md)
+
+#### Overrides
+
+Material.constructor
+
+#### Defined in
+
+[packages/media-extention/VideoMaterial.ts:13](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/VideoMaterial.ts#L13)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+Material Unique Identifier
+
+#### Inherited from
+
+Material.instanceID
+
+#### Defined in
+
+[src/materials/Material.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L19)
+
+___
+
+### name
+
+• **name**: `string`
+
+name of this material
+
+#### Inherited from
+
+Material.name
+
+#### Defined in
+
+[src/materials/Material.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L25)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+Material.enable
+
+#### Defined in
+
+[src/materials/Material.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L27)
+
+## Accessors
+
+### rectClip
+
+• `get` **rectClip**(): `Vector4`
+
+Get the clip rect area
+
+#### Returns
+
+`Vector4`
+
+#### Defined in
+
+[packages/media-extention/VideoMaterial.ts:52](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/VideoMaterial.ts#L52)
+
+• `set` **rectClip**(`value`): `void`
+
+Set the clip rect area
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/VideoMaterial.ts:45](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/VideoMaterial.ts#L45)
+
+___
+
+### baseColor
+
+• `get` **baseColor**(): `Color`
+
+get base color (tint color)
+
+#### Returns
+
+`Color`
+
+#### Defined in
+
+[packages/media-extention/VideoMaterial.ts:66](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/VideoMaterial.ts#L66)
+
+• `set` **baseColor**(`color`): `void`
+
+set base color (tint color)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/VideoMaterial.ts:59](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/VideoMaterial.ts#L59)
+
+___
+
+### baseMap
+
+• `get` **baseMap**(): `Texture`
+
+#### Returns
+
+`Texture`
+
+#### Defined in
+
+[packages/media-extention/VideoMaterial.ts:70](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/VideoMaterial.ts#L70)
+
+• `set` **baseMap**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Texture` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/VideoMaterial.ts:74](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/VideoMaterial.ts#L74)
+
+___
+
+### envMap
+
+• `set` **envMap**(`texture`): `void`
+
+Set no envMap
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | `Texture` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/VideoMaterial.ts:81](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/VideoMaterial.ts#L81)
+
+___
+
+### shadowMap
+
+• `set` **shadowMap**(`texture`): `void`
+
+Set no shadowMap
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | `Texture` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/media-extention/VideoMaterial.ts:88](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/VideoMaterial.ts#L88)
+
+___
+
+### shader
+
+• `get` **shader**(): `Shader`
+
+#### Returns
+
+`Shader`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L41)
+
+• `set` **shader**(`shader`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shader` | `Shader` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L36)
+
+___
+
+### doubleSide
+
+• `get` **doubleSide**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L45)
+
+• `set` **doubleSide**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L49)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L53)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L57)
+
+___
+
+### acceptShadow
+
+• `get` **acceptShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L64)
+
+• `set` **acceptShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L68)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L77)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L81)
+
+___
+
+### blendMode
+
+• `get` **blendMode**(): `BlendMode`
+
+#### Returns
+
+`BlendMode`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L85)
+
+• `set` **blendMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BlendMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L89)
+
+___
+
+### depthCompare
+
+• `get` **depthCompare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L93)
+
+• `set` **depthCompare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L97)
+
+___
+
+### transparent
+
+• `get` **transparent**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L102)
+
+• `set` **transparent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L106)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L113)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L117)
+
+___
+
+### depthWriteEnabled
+
+• `get` **depthWriteEnabled**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L128)
+
+• `set` **depthWriteEnabled**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L132)
+
+___
+
+### useBillboard
+
+• `set` **useBillboard**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.useBillboard
+
+#### Defined in
+
+[src/materials/Material.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L136)
+
+## Methods
+
+### getPass
+
+▸ **getPass**(`passType`): `RenderShaderPass`[]
+
+get render pass by renderType
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+`RenderShaderPass`[]
+
+#### Inherited from
+
+Material.getPass
+
+#### Defined in
+
+[src/materials/Material.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L145)
+
+___
+
+### getAllPass
+
+▸ **getAllPass**(): `RenderShaderPass`[]
+
+get all color render pass
+
+#### Returns
+
+`RenderShaderPass`[]
+
+#### Inherited from
+
+Material.getAllPass
+
+#### Defined in
+
+[src/materials/Material.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L153)
+
+___
+
+### clone
+
+▸ **clone**(): `Material`
+
+clone one material
+
+#### Returns
+
+`Material`
+
+Material
+
+#### Inherited from
+
+Material.clone
+
+#### Defined in
+
+[src/materials/Material.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L161)
+
+___
+
+### destroy
+
+▸ **destroy**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.destroy
+
+#### Defined in
+
+[src/materials/Material.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L168)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`define`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `define` | `string` |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setDefine
+
+#### Defined in
+
+[src/materials/Material.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L174)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`propertyName`, `texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `texture` | `Texture` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setTexture
+
+#### Defined in
+
+[src/materials/Material.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L178)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | `StorageGPUBuffer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setStorageBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L182)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | `UniformGPUBuffer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L186)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformFloat
+
+#### Defined in
+
+[src/materials/Material.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L191)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector2` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformVector2
+
+#### Defined in
+
+[src/materials/Material.ts:195](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L195)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformVector3
+
+#### Defined in
+
+[src/materials/Material.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L199)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformVector4
+
+#### Defined in
+
+[src/materials/Material.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L203)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformColor
+
+#### Defined in
+
+[src/materials/Material.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L207)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`str`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+Material.getUniformFloat
+
+#### Defined in
+
+[src/materials/Material.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L211)
+
+___
+
+### getUniformV2
+
+▸ **getUniformV2**(`str`): `Vector2`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector2`
+
+#### Inherited from
+
+Material.getUniformV2
+
+#### Defined in
+
+[src/materials/Material.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L215)
+
+___
+
+### getUniformV3
+
+▸ **getUniformV3**(`str`): `Vector3`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector3`
+
+#### Inherited from
+
+Material.getUniformV3
+
+#### Defined in
+
+[src/materials/Material.ts:219](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L219)
+
+___
+
+### getUniformV4
+
+▸ **getUniformV4**(`str`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+Material.getUniformV4
+
+#### Defined in
+
+[src/materials/Material.ts:223](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L223)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`str`): `Color`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+Material.getUniformColor
+
+#### Defined in
+
+[src/materials/Material.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L227)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`str`): `Texture`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Texture`
+
+#### Inherited from
+
+Material.getTexture
+
+#### Defined in
+
+[src/materials/Material.ts:231](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L231)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`str`): `StorageGPUBuffer`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`StorageGPUBuffer`
+
+#### Inherited from
+
+Material.getStorageBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:235](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L235)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+Material.getStructStorageBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:239](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L239)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+Material.getUniformBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:243](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L243)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.applyUniform
+
+#### Defined in
+
+[src/materials/Material.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L247)
diff --git a/docs/media-extention/classes/VideoTexture.md b/docs/media-extention/classes/VideoTexture.md
new file mode 100644
index 00000000..d04df142
--- /dev/null
+++ b/docs/media-extention/classes/VideoTexture.md
@@ -0,0 +1,1096 @@
+# Class: VideoTexture
+
+Video Texture
+
+## Hierarchy
+
+- `Texture`
+
+ ↳ **`VideoTexture`**
+
+### Constructors
+
+- [constructor](VideoTexture.md#constructor)
+
+### Properties
+
+- [media](VideoTexture.md#media)
+- [name](VideoTexture.md#name)
+- [url](VideoTexture.md#url)
+- [pid](VideoTexture.md#pid)
+- [view](VideoTexture.md#view)
+- [gpuSampler](VideoTexture.md#gpusampler)
+- [gpuSampler\_comparison](VideoTexture.md#gpusampler_comparison)
+- [format](VideoTexture.md#format)
+- [usage](VideoTexture.md#usage)
+- [width](VideoTexture.md#width)
+- [height](VideoTexture.md#height)
+- [depthOrArrayLayers](VideoTexture.md#depthorarraylayers)
+- [numberLayer](VideoTexture.md#numberlayer)
+- [viewDescriptor](VideoTexture.md#viewdescriptor)
+- [textureDescriptor](VideoTexture.md#texturedescriptor)
+- [visibility](VideoTexture.md#visibility)
+- [textureBindingLayout](VideoTexture.md#texturebindinglayout)
+- [samplerBindingLayout](VideoTexture.md#samplerbindinglayout)
+- [sampler\_comparisonBindingLayout](VideoTexture.md#sampler_comparisonbindinglayout)
+- [flipY](VideoTexture.md#flipy)
+- [isVideoTexture](VideoTexture.md#isvideotexture)
+- [isHDRTexture](VideoTexture.md#ishdrtexture)
+- [mipmapCount](VideoTexture.md#mipmapcount)
+
+### Accessors
+
+- [useMipmap](VideoTexture.md#usemipmap)
+- [sourceImageData](VideoTexture.md#sourceimagedata)
+- [addressModeU](VideoTexture.md#addressmodeu)
+- [addressModeV](VideoTexture.md#addressmodev)
+- [addressModeW](VideoTexture.md#addressmodew)
+- [magFilter](VideoTexture.md#magfilter)
+- [minFilter](VideoTexture.md#minfilter)
+- [mipmapFilter](VideoTexture.md#mipmapfilter)
+- [lodMinClamp](VideoTexture.md#lodminclamp)
+- [lodMaxClamp](VideoTexture.md#lodmaxclamp)
+- [compare](VideoTexture.md#compare)
+- [maxAnisotropy](VideoTexture.md#maxanisotropy)
+
+### Methods
+
+- [load](VideoTexture.md#load)
+- [getGPUTexture](VideoTexture.md#getgputexture)
+- [getGPUView](VideoTexture.md#getgpuview)
+- [init](VideoTexture.md#init)
+- [getMipmapCount](VideoTexture.md#getmipmapcount)
+- [bindStateChange](VideoTexture.md#bindstatechange)
+- [unBindStateChange](VideoTexture.md#unbindstatechange)
+- [destroy](VideoTexture.md#destroy)
+- [delayDestroyTexture](VideoTexture.md#delaydestroytexture)
+- [destroyTexture](VideoTexture.md#destroytexture)
+
+## Constructors
+
+### constructor
+
+• **new VideoTexture**(): [`VideoTexture`](VideoTexture.md)
+
+#### Returns
+
+[`VideoTexture`](VideoTexture.md)
+
+#### Overrides
+
+Texture.constructor
+
+#### Defined in
+
+[packages/media-extention/VideoTexture.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/VideoTexture.ts#L20)
+
+## Properties
+
+### media
+
+• **media**: `HTMLVideoElement`
+
+#### Defined in
+
+[packages/media-extention/VideoTexture.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/VideoTexture.ts#L17)
+
+___
+
+### name
+
+• **name**: `string`
+
+name of texture
+
+#### Inherited from
+
+Texture.name
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:15](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L15)
+
+___
+
+### url
+
+• **url**: `string`
+
+source url
+
+#### Inherited from
+
+Texture.url
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L20)
+
+___
+
+### pid
+
+• **pid**: `number`
+
+Return index in texture array
+
+#### Inherited from
+
+Texture.pid
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:30](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L30)
+
+___
+
+### view
+
+• **view**: `GPUTextureView` \| `GPUExternalTexture`
+
+GPUTextureView
+
+#### Inherited from
+
+Texture.view
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L35)
+
+___
+
+### gpuSampler
+
+• **gpuSampler**: `GPUSampler`
+
+GPUSampler
+
+#### Inherited from
+
+Texture.gpuSampler
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L40)
+
+___
+
+### gpuSampler\_comparison
+
+• **gpuSampler\_comparison**: `GPUSampler`
+
+GPUSampler for comparison
+
+#### Inherited from
+
+Texture.gpuSampler\_comparison
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L45)
+
+___
+
+### format
+
+• **format**: `GPUTextureFormat`
+
+GPUTextureFormat
+
+#### Inherited from
+
+Texture.format
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:50](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L50)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+GPUTextureUsage
+
+#### Inherited from
+
+Texture.usage
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L55)
+
+___
+
+### width
+
+• **width**: `number` = `4`
+
+texture width
+
+#### Inherited from
+
+Texture.width
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:60](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L60)
+
+___
+
+### height
+
+• **height**: `number` = `4`
+
+texture height
+
+#### Inherited from
+
+Texture.height
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:65](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L65)
+
+___
+
+### depthOrArrayLayers
+
+• **depthOrArrayLayers**: `number` = `1`
+
+depth or layers, default value is 1
+
+#### Inherited from
+
+Texture.depthOrArrayLayers
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L70)
+
+___
+
+### numberLayer
+
+• **numberLayer**: `number` = `1`
+
+depth or layers, default value is 1
+
+#### Inherited from
+
+Texture.numberLayer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:75](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L75)
+
+___
+
+### viewDescriptor
+
+• **viewDescriptor**: `GPUTextureViewDescriptor`
+
+GPUTextureViewDescriptor
+
+#### Inherited from
+
+Texture.viewDescriptor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:80](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L80)
+
+___
+
+### textureDescriptor
+
+• **textureDescriptor**: `GPUTextureDescriptor`
+
+GPUTextureDescriptor
+
+#### Inherited from
+
+Texture.textureDescriptor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L85)
+
+___
+
+### visibility
+
+• **visibility**: `number`
+
+GPUShaderStage
+
+#### Inherited from
+
+Texture.visibility
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:90](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L90)
+
+___
+
+### textureBindingLayout
+
+• **textureBindingLayout**: `GPUTextureBindingLayout`
+
+GPUTextureBindingLayout, contains viewDimension and multisampled
+
+#### Inherited from
+
+Texture.textureBindingLayout
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L96)
+
+___
+
+### samplerBindingLayout
+
+• **samplerBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+Texture.samplerBindingLayout
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L104)
+
+___
+
+### sampler\_comparisonBindingLayout
+
+• **sampler\_comparisonBindingLayout**: `GPUSamplerBindingLayout`
+
+GPUSamplerBindingLayout
+
+#### Inherited from
+
+Texture.sampler\_comparisonBindingLayout
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:111](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L111)
+
+___
+
+### flipY
+
+• **flipY**: `boolean`
+
+whether to flip the image on the y-axis
+
+#### Inherited from
+
+Texture.flipY
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L118)
+
+___
+
+### isVideoTexture
+
+• `Optional` **isVideoTexture**: `boolean`
+
+whether is video texture
+
+#### Inherited from
+
+Texture.isVideoTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L123)
+
+___
+
+### isHDRTexture
+
+• `Optional` **isHDRTexture**: `boolean`
+
+#### Inherited from
+
+Texture.isHDRTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L124)
+
+___
+
+### mipmapCount
+
+• **mipmapCount**: `number` = `1`
+
+mipmap Count, default value is 1
+
+#### Inherited from
+
+Texture.mipmapCount
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L191)
+
+## Accessors
+
+### useMipmap
+
+• `get` **useMipmap**(): `boolean`
+
+enable/disable mipmap
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Texture.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L315)
+
+• `set` **useMipmap**(`value`): `void`
+
+get mipmap
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.useMipmap
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:322](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L322)
+
+___
+
+### sourceImageData
+
+• `get` **sourceImageData**(): `HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Returns
+
+`HTMLCanvasElement` \| `ImageBitmap` \| `OffscreenCanvas`
+
+#### Inherited from
+
+Texture.sourceImageData
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:353](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L353)
+
+___
+
+### addressModeU
+
+• `get` **addressModeU**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+Texture.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L438)
+
+• `set` **addressModeU**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.addressModeU
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:442](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L442)
+
+___
+
+### addressModeV
+
+• `get` **addressModeV**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+Texture.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:449](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L449)
+
+• `set` **addressModeV**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.addressModeV
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:453](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L453)
+
+___
+
+### addressModeW
+
+• `get` **addressModeW**(): `GPUAddressMode`
+
+#### Returns
+
+`GPUAddressMode`
+
+#### Inherited from
+
+Texture.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:460](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L460)
+
+• `set` **addressModeW**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUAddressMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.addressModeW
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:464](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L464)
+
+___
+
+### magFilter
+
+• `get` **magFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+Texture.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:471](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L471)
+
+• `set` **magFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.magFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:475](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L475)
+
+___
+
+### minFilter
+
+• `get` **minFilter**(): `GPUFilterMode`
+
+#### Returns
+
+`GPUFilterMode`
+
+#### Inherited from
+
+Texture.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:482](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L482)
+
+• `set` **minFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.minFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L486)
+
+___
+
+### mipmapFilter
+
+• `get` **mipmapFilter**(): `GPUMipmapFilterMode`
+
+#### Returns
+
+`GPUMipmapFilterMode`
+
+#### Inherited from
+
+Texture.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:493](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L493)
+
+• `set` **mipmapFilter**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUMipmapFilterMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.mipmapFilter
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:497](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L497)
+
+___
+
+### lodMinClamp
+
+• `get` **lodMinClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Texture.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:504](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L504)
+
+• `set` **lodMinClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.lodMinClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:508](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L508)
+
+___
+
+### lodMaxClamp
+
+• `get` **lodMaxClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Texture.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:515](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L515)
+
+• `set` **lodMaxClamp**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.lodMaxClamp
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L519)
+
+___
+
+### compare
+
+• `get` **compare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Texture.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:526](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L526)
+
+• `set` **compare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.compare
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:530](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L530)
+
+___
+
+### maxAnisotropy
+
+• `get` **maxAnisotropy**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Texture.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:537](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L537)
+
+• `set` **maxAnisotropy**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.maxAnisotropy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:541](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L541)
+
+## Methods
+
+### load
+
+▸ **load**(`video`): `Promise`\<`void`\>
+
+load one Video Source
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `video` | `string` \| `HTMLVideoElement` \| `MediaStream` | the url of a video source, or a MediaStream object, or a HTMLVideoElement |
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[packages/media-extention/VideoTexture.ts:31](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/VideoTexture.ts#L31)
+
+___
+
+### getGPUTexture
+
+▸ **getGPUTexture**(): `any`
+
+#### Returns
+
+`any`
+
+#### Overrides
+
+Texture.getGPUTexture
+
+#### Defined in
+
+[packages/media-extention/VideoTexture.ts:60](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/VideoTexture.ts#L60)
+
+___
+
+### getGPUView
+
+▸ **getGPUView**(): `GPUExternalTexture`
+
+#### Returns
+
+`GPUExternalTexture`
+
+#### Overrides
+
+Texture.getGPUView
+
+#### Defined in
+
+[packages/media-extention/VideoTexture.ts:68](https://github.com/Orillusion/orillusion/blob/main/packages/media-extention/VideoTexture.ts#L68)
+
+___
+
+### init
+
+▸ **init**(): `this`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+Texture.init
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L215)
+
+___
+
+### getMipmapCount
+
+▸ **getMipmapCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+Texture.getMipmapCount
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:357](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L357)
+
+___
+
+### bindStateChange
+
+▸ **bindStateChange**(`fun`, `ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `fun` | `Function` |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.bindStateChange
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L408)
+
+___
+
+### unBindStateChange
+
+▸ **unBindStateChange**(`ref`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ref` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.unBindStateChange
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:412](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L412)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+release the texture
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.destroy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:426](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L426)
+
+___
+
+### delayDestroyTexture
+
+▸ **delayDestroyTexture**(`tex`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tex` | `GPUTexture` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.delayDestroyTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:549](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L549)
+
+___
+
+### destroyTexture
+
+▸ **destroyTexture**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Texture.destroyTexture
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/texture/Texture.ts:555](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/texture/Texture.ts#L555)
diff --git a/docs/media-extention/index.md b/docs/media-extention/index.md
new file mode 100644
index 00000000..34576a24
--- /dev/null
+++ b/docs/media-extention/index.md
@@ -0,0 +1,17 @@
+# @orillusion/media-extention
+
+## Audio
+
+- [AudioListener](classes/AudioListener.md)
+- [PositionAudio](classes/PositionAudio.md)
+- [StaticAudio](classes/StaticAudio.md)
+
+## Material
+
+- [ChromaKeyMaterial](classes/ChromaKeyMaterial.md)
+- [ImageMaterial](classes/ImageMaterial.md)
+- [VideoMaterial](classes/VideoMaterial.md)
+
+## Texture
+
+- [VideoTexture](classes/VideoTexture.md)
diff --git a/docs/particle/classes/ParticleBuffer.md b/docs/particle/classes/ParticleBuffer.md
new file mode 100644
index 00000000..bb317419
--- /dev/null
+++ b/docs/particle/classes/ParticleBuffer.md
@@ -0,0 +1,1518 @@
+# Class: ParticleBuffer
+
+Basic class of particle memory data
+
+## Hierarchy
+
+- `GPUBufferBase`
+
+ ↳ **`ParticleBuffer`**
+
+### Constructors
+
+- [constructor](ParticleBuffer.md#constructor)
+
+### Properties
+
+- [bufferType](ParticleBuffer.md#buffertype)
+- [buffer](ParticleBuffer.md#buffer)
+- [memory](ParticleBuffer.md#memory)
+- [memoryNodes](ParticleBuffer.md#memorynodes)
+- [seek](ParticleBuffer.md#seek)
+- [outFloat32Array](ParticleBuffer.md#outfloat32array)
+- [byteSize](ParticleBuffer.md#bytesize)
+- [usage](ParticleBuffer.md#usage)
+- [visibility](ParticleBuffer.md#visibility)
+
+### Methods
+
+- [alloc](ParticleBuffer.md#alloc)
+- [allocInt8](ParticleBuffer.md#allocint8)
+- [allocUint8](ParticleBuffer.md#allocuint8)
+- [allocInt16](ParticleBuffer.md#allocint16)
+- [allocUint16](ParticleBuffer.md#allocuint16)
+- [allocInt32](ParticleBuffer.md#allocint32)
+- [allocUint32](ParticleBuffer.md#allocuint32)
+- [allocFloat32](ParticleBuffer.md#allocfloat32)
+- [allocVec2](ParticleBuffer.md#allocvec2)
+- [allocVec3](ParticleBuffer.md#allocvec3)
+- [allocVec4](ParticleBuffer.md#allocvec4)
+- [debug](ParticleBuffer.md#debug)
+- [reset](ParticleBuffer.md#reset)
+- [setBoolean](ParticleBuffer.md#setboolean)
+- [readBoole](ParticleBuffer.md#readboole)
+- [setFloat](ParticleBuffer.md#setfloat)
+- [getFloat](ParticleBuffer.md#getfloat)
+- [setInt8](ParticleBuffer.md#setint8)
+- [getInt8](ParticleBuffer.md#getint8)
+- [setInt16](ParticleBuffer.md#setint16)
+- [getInt16](ParticleBuffer.md#getint16)
+- [setInt32](ParticleBuffer.md#setint32)
+- [getInt32](ParticleBuffer.md#getint32)
+- [setUint8](ParticleBuffer.md#setuint8)
+- [getUint8](ParticleBuffer.md#getuint8)
+- [setUint16](ParticleBuffer.md#setuint16)
+- [getUint16](ParticleBuffer.md#getuint16)
+- [setUint32](ParticleBuffer.md#setuint32)
+- [getUint32](ParticleBuffer.md#getuint32)
+- [setVector2](ParticleBuffer.md#setvector2)
+- [getVector2](ParticleBuffer.md#getvector2)
+- [setVector3](ParticleBuffer.md#setvector3)
+- [getVector3](ParticleBuffer.md#getvector3)
+- [setVector4](ParticleBuffer.md#setvector4)
+- [getVector4](ParticleBuffer.md#getvector4)
+- [setVector4Array](ParticleBuffer.md#setvector4array)
+- [setColor](ParticleBuffer.md#setcolor)
+- [getColor](ParticleBuffer.md#getcolor)
+- [setColorArray](ParticleBuffer.md#setcolorarray)
+- [setMatrix](ParticleBuffer.md#setmatrix)
+- [setMatrixArray](ParticleBuffer.md#setmatrixarray)
+- [setArray](ParticleBuffer.md#setarray)
+- [setFloat32Array](ParticleBuffer.md#setfloat32array)
+- [setInt32Array](ParticleBuffer.md#setint32array)
+- [setUint32Array](ParticleBuffer.md#setuint32array)
+- [setStruct](ParticleBuffer.md#setstruct)
+- [setStructArray](ParticleBuffer.md#setstructarray)
+- [clean](ParticleBuffer.md#clean)
+- [apply](ParticleBuffer.md#apply)
+- [mapAsyncWrite](ParticleBuffer.md#mapasyncwrite)
+- [destroy](ParticleBuffer.md#destroy)
+- [resizeBuffer](ParticleBuffer.md#resizebuffer)
+- [readBuffer](ParticleBuffer.md#readbuffer)
+
+## Constructors
+
+### constructor
+
+• **new ParticleBuffer**(`size`, `data?`): [`ParticleBuffer`](ParticleBuffer.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `size` | `number` |
+| `data?` | `Float32Array` |
+
+#### Returns
+
+[`ParticleBuffer`](ParticleBuffer.md)
+
+#### Overrides
+
+GPUBufferBase.constructor
+
+#### Defined in
+
+[packages/particle/buffer/ParticleBuffer.ts:8](https://github.com/Orillusion/orillusion/blob/main/packages/particle/buffer/ParticleBuffer.ts#L8)
+
+## Properties
+
+### bufferType
+
+• **bufferType**: `GPUBufferType`
+
+#### Inherited from
+
+GPUBufferBase.bufferType
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:20](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L20)
+
+___
+
+### buffer
+
+• **buffer**: `GPUBuffer`
+
+#### Inherited from
+
+GPUBufferBase.buffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L21)
+
+___
+
+### memory
+
+• **memory**: `MemoryDO`
+
+#### Inherited from
+
+GPUBufferBase.memory
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:22](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L22)
+
+___
+
+### memoryNodes
+
+• **memoryNodes**: `Map`\<`string` \| `number`, `MemoryInfo`\>
+
+#### Inherited from
+
+GPUBufferBase.memoryNodes
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L23)
+
+___
+
+### seek
+
+• **seek**: `number`
+
+#### Inherited from
+
+GPUBufferBase.seek
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L24)
+
+___
+
+### outFloat32Array
+
+• **outFloat32Array**: `Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.outFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L25)
+
+___
+
+### byteSize
+
+• **byteSize**: `number`
+
+#### Inherited from
+
+GPUBufferBase.byteSize
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:26](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L26)
+
+___
+
+### usage
+
+• **usage**: `number`
+
+#### Inherited from
+
+GPUBufferBase.usage
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L27)
+
+___
+
+### visibility
+
+• **visibility**: `number`
+
+#### Inherited from
+
+GPUBufferBase.visibility
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L28)
+
+## Methods
+
+### alloc
+
+▸ **alloc**(`name`, `byte`): `MemoryInfo`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `byte` | `number` |
+
+#### Returns
+
+`MemoryInfo`
+
+#### Defined in
+
+[packages/particle/buffer/ParticleBuffer.ts:15](https://github.com/Orillusion/orillusion/blob/main/packages/particle/buffer/ParticleBuffer.ts#L15)
+
+___
+
+### allocInt8
+
+▸ **allocInt8**(`name`): `MemoryInfo`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`MemoryInfo`
+
+#### Defined in
+
+[packages/particle/buffer/ParticleBuffer.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/particle/buffer/ParticleBuffer.ts#L24)
+
+___
+
+### allocUint8
+
+▸ **allocUint8**(`name`): `MemoryInfo`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`MemoryInfo`
+
+#### Defined in
+
+[packages/particle/buffer/ParticleBuffer.ts:28](https://github.com/Orillusion/orillusion/blob/main/packages/particle/buffer/ParticleBuffer.ts#L28)
+
+___
+
+### allocInt16
+
+▸ **allocInt16**(`name`): `MemoryInfo`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`MemoryInfo`
+
+#### Defined in
+
+[packages/particle/buffer/ParticleBuffer.ts:32](https://github.com/Orillusion/orillusion/blob/main/packages/particle/buffer/ParticleBuffer.ts#L32)
+
+___
+
+### allocUint16
+
+▸ **allocUint16**(`name`): `MemoryInfo`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`MemoryInfo`
+
+#### Defined in
+
+[packages/particle/buffer/ParticleBuffer.ts:36](https://github.com/Orillusion/orillusion/blob/main/packages/particle/buffer/ParticleBuffer.ts#L36)
+
+___
+
+### allocInt32
+
+▸ **allocInt32**(`name`): `MemoryInfo`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`MemoryInfo`
+
+#### Defined in
+
+[packages/particle/buffer/ParticleBuffer.ts:40](https://github.com/Orillusion/orillusion/blob/main/packages/particle/buffer/ParticleBuffer.ts#L40)
+
+___
+
+### allocUint32
+
+▸ **allocUint32**(`name`): `MemoryInfo`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`MemoryInfo`
+
+#### Defined in
+
+[packages/particle/buffer/ParticleBuffer.ts:44](https://github.com/Orillusion/orillusion/blob/main/packages/particle/buffer/ParticleBuffer.ts#L44)
+
+___
+
+### allocFloat32
+
+▸ **allocFloat32**(`name`): `MemoryInfo`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`MemoryInfo`
+
+#### Defined in
+
+[packages/particle/buffer/ParticleBuffer.ts:48](https://github.com/Orillusion/orillusion/blob/main/packages/particle/buffer/ParticleBuffer.ts#L48)
+
+___
+
+### allocVec2
+
+▸ **allocVec2**(`name`): `MemoryInfo`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`MemoryInfo`
+
+#### Defined in
+
+[packages/particle/buffer/ParticleBuffer.ts:52](https://github.com/Orillusion/orillusion/blob/main/packages/particle/buffer/ParticleBuffer.ts#L52)
+
+___
+
+### allocVec3
+
+▸ **allocVec3**(`name`): `MemoryInfo`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`MemoryInfo`
+
+#### Defined in
+
+[packages/particle/buffer/ParticleBuffer.ts:56](https://github.com/Orillusion/orillusion/blob/main/packages/particle/buffer/ParticleBuffer.ts#L56)
+
+___
+
+### allocVec4
+
+▸ **allocVec4**(`name`): `MemoryInfo`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`MemoryInfo`
+
+#### Defined in
+
+[packages/particle/buffer/ParticleBuffer.ts:60](https://github.com/Orillusion/orillusion/blob/main/packages/particle/buffer/ParticleBuffer.ts#L60)
+
+___
+
+### debug
+
+▸ **debug**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.debug
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L41)
+
+___
+
+### reset
+
+▸ **reset**(`clean?`, `size?`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `clean` | `boolean` | `false` |
+| `size` | `number` | `0` |
+| `data?` | `Float32Array` | `undefined` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.reset
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:44](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L44)
+
+___
+
+### setBoolean
+
+▸ **setBoolean**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setBoolean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:52](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L52)
+
+___
+
+### readBoole
+
+▸ **readBoole**(`name`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+GPUBufferBase.readBoole
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:62](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L62)
+
+___
+
+### setFloat
+
+▸ **setFloat**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:70](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L70)
+
+___
+
+### getFloat
+
+▸ **getFloat**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getFloat
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:79](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L79)
+
+___
+
+### setInt8
+
+▸ **setInt8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L87)
+
+___
+
+### getInt8
+
+▸ **getInt8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:96](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L96)
+
+___
+
+### setInt16
+
+▸ **setInt16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:104](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L104)
+
+___
+
+### getInt16
+
+▸ **getInt16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L113)
+
+___
+
+### setInt32
+
+▸ **setInt32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L121)
+
+___
+
+### getInt32
+
+▸ **getInt32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getInt32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:130](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L130)
+
+___
+
+### setUint8
+
+▸ **setUint8**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:138](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L138)
+
+___
+
+### getUint8
+
+▸ **getUint8**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint8
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:147](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L147)
+
+___
+
+### setUint16
+
+▸ **setUint16**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L156)
+
+___
+
+### getUint16
+
+▸ **getUint16**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint16
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:165](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L165)
+
+___
+
+### setUint32
+
+▸ **setUint32**(`name`, `v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L173)
+
+___
+
+### getUint32
+
+▸ **getUint32**(`name`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+GPUBufferBase.getUint32
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L182)
+
+___
+
+### setVector2
+
+▸ **setVector2**(`name`, `v2`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v2` | `Vector2` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:190](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L190)
+
+___
+
+### getVector2
+
+▸ **getVector2**(`name`): `Vector2`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`Vector2`
+
+#### Inherited from
+
+GPUBufferBase.getVector2
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L199)
+
+___
+
+### setVector3
+
+▸ **setVector3**(`name`, `v3`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v3` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L207)
+
+___
+
+### getVector3
+
+▸ **getVector3**(`name`): `Vector3`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`Vector3`
+
+#### Inherited from
+
+GPUBufferBase.getVector3
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:216](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L216)
+
+___
+
+### setVector4
+
+▸ **setVector4**(`name`, `v4`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4` | `Quaternion` \| `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:224](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L224)
+
+___
+
+### getVector4
+
+▸ **getVector4**(`name`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+GPUBufferBase.getVector4
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:233](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L233)
+
+___
+
+### setVector4Array
+
+▸ **setVector4Array**(`name`, `v4Array`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `v4Array` | `Vector3`[] \| `Vector4`[] \| `Quaternion`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setVector4Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:241](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L241)
+
+___
+
+### setColor
+
+▸ **setColor**(`name`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `color` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:250](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L250)
+
+___
+
+### getColor
+
+▸ **getColor**(`name`): `Color`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+GPUBufferBase.getColor
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:259](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L259)
+
+___
+
+### setColorArray
+
+▸ **setColorArray**(`name`, `colorArray`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `colorArray` | `Color`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setColorArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:267](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L267)
+
+___
+
+### setMatrix
+
+▸ **setMatrix**(`name`, `mat`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mat` | `Matrix4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrix
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:276](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L276)
+
+___
+
+### setMatrixArray
+
+▸ **setMatrixArray**(`name`, `mats`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `mats` | `Matrix4`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setMatrixArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:285](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L285)
+
+___
+
+### setArray
+
+▸ **setArray**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `number`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:297](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L297)
+
+___
+
+### setFloat32Array
+
+▸ **setFloat32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Float32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setFloat32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:306](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L306)
+
+___
+
+### setInt32Array
+
+▸ **setInt32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Int32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setInt32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:315](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L315)
+
+___
+
+### setUint32Array
+
+▸ **setUint32Array**(`name`, `data`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `data` | `Uint32Array` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setUint32Array
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:325](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L325)
+
+___
+
+### setStruct
+
+▸ **setStruct**\<`T`\>(`c`, `index`, `data`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `index` | `number` |
+| `data` | `any` |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStruct
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:334](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L334)
+
+___
+
+### setStructArray
+
+▸ **setStructArray**\<`T`\>(`c`, `dataList`, `property?`): `void`
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `Struct` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `c` | () => `T` |
+| `dataList` | `any`[] |
+| `property?` | `string` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.setStructArray
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:390](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L390)
+
+___
+
+### clean
+
+▸ **clean**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.clean
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:403](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L403)
+
+___
+
+### apply
+
+▸ **apply**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.apply
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:408](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L408)
+
+___
+
+### mapAsyncWrite
+
+▸ **mapAsyncWrite**(`mapAsyncArray`, `len`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mapAsyncArray` | `Float32Array` |
+| `len` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.mapAsyncWrite
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:413](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L413)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.destroy
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:454](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L454)
+
+___
+
+### resizeBuffer
+
+▸ **resizeBuffer**(`size`, `data?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `size` | `number` |
+| `data?` | `ArrayBufferData` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+GPUBufferBase.resizeBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:511](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L511)
+
+___
+
+### readBuffer
+
+▸ **readBuffer**(): `Float32Array`
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:558](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L558)
+
+▸ **readBuffer**(`promise`): `Float32Array`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``false`` |
+
+#### Returns
+
+`Float32Array`
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:559](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L559)
+
+▸ **readBuffer**(`promise`): `Promise`\<`Float32Array`\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `promise` | ``true`` |
+
+#### Returns
+
+`Promise`\<`Float32Array`\>
+
+#### Inherited from
+
+GPUBufferBase.readBuffer
+
+#### Defined in
+
+[src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts:560](https://github.com/Orillusion/orillusion/blob/main/src/gfx/graphics/webGpu/core/buffer/GPUBufferBase.ts#L560)
diff --git a/docs/particle/classes/ParticleEmitterModule.md b/docs/particle/classes/ParticleEmitterModule.md
new file mode 100644
index 00000000..5900694d
--- /dev/null
+++ b/docs/particle/classes/ParticleEmitterModule.md
@@ -0,0 +1,921 @@
+# Class: ParticleEmitterModule
+
+Particle module of emit
+
+## Hierarchy
+
+- `ParticleModuleBase`
+
+ ↳ **`ParticleEmitterModule`**
+
+### Constructors
+
+- [constructor](ParticleEmitterModule.md#constructor)
+
+### Accessors
+
+- [shapeType](ParticleEmitterModule.md#shapetype)
+- [emitLocation](ParticleEmitterModule.md#emitlocation)
+- [angle](ParticleEmitterModule.md#angle)
+- [radius](ParticleEmitterModule.md#radius)
+- [boxSize](ParticleEmitterModule.md#boxsize)
+- [randSeed](ParticleEmitterModule.md#randseed)
+- [maxParticle](ParticleEmitterModule.md#maxparticle)
+- [emissionRate](ParticleEmitterModule.md#emissionrate)
+- [duration](ParticleEmitterModule.md#duration)
+- [startLifecycle](ParticleEmitterModule.md#startlifecycle)
+- [startVelocityX](ParticleEmitterModule.md#startvelocityx)
+- [startVelocityY](ParticleEmitterModule.md#startvelocityy)
+- [startVelocityZ](ParticleEmitterModule.md#startvelocityz)
+- [startScale](ParticleEmitterModule.md#startscale)
+- [startScaleX](ParticleEmitterModule.md#startscalex)
+- [startScaleY](ParticleEmitterModule.md#startscaley)
+- [startScaleZ](ParticleEmitterModule.md#startscalez)
+- [startRotation](ParticleEmitterModule.md#startrotation)
+- [startRotationX](ParticleEmitterModule.md#startrotationx)
+- [startRotationY](ParticleEmitterModule.md#startrotationy)
+- [startRotationZ](ParticleEmitterModule.md#startrotationz)
+- [needReset](ParticleEmitterModule.md#needreset)
+
+### Methods
+
+- [isUseStartScaleXYZ](ParticleEmitterModule.md#isusestartscalexyz)
+- [isUseStartRotationXYZ](ParticleEmitterModule.md#isusestartrotationxyz)
+- [generateParticleModuleData](ParticleEmitterModule.md#generateparticlemoduledata)
+- [setSimulator](ParticleEmitterModule.md#setsimulator)
+- [calculateParticle](ParticleEmitterModule.md#calculateparticle)
+
+## Constructors
+
+### constructor
+
+• **new ParticleEmitterModule**(): [`ParticleEmitterModule`](ParticleEmitterModule.md)
+
+#### Returns
+
+[`ParticleEmitterModule`](ParticleEmitterModule.md)
+
+#### Inherited from
+
+ParticleModuleBase.constructor
+
+## Accessors
+
+### shapeType
+
+• `get` **shapeType**(): [`ShapeType`](../enums/ShapeType.md)
+
+Get shape type of emitter
+
+#### Returns
+
+[`ShapeType`](../enums/ShapeType.md)
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:82](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L82)
+
+• `set` **shapeType**(`v`): `void`
+
+Set shape type of emitter
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`ShapeType`](../enums/ShapeType.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:74](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L74)
+
+___
+
+### emitLocation
+
+• `get` **emitLocation**(): [`EmitLocation`](../enums/EmitLocation.md)
+
+Get emit location of emitter
+
+#### Returns
+
+[`EmitLocation`](../enums/EmitLocation.md)
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:99](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L99)
+
+• `set` **emitLocation**(`v`): `void`
+
+Set emit location of emitter
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`EmitLocation`](../enums/EmitLocation.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:91](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L91)
+
+___
+
+### angle
+
+• `get` **angle**(): `number`
+
+Get particle emitter angle
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:116](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L116)
+
+• `set` **angle**(`v`): `void`
+
+Set particle emitter angle
+When shapeType is cone, this value is the size of the cylindrical opening
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:109](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L109)
+
+___
+
+### radius
+
+• `get` **radius**(): `number`
+
+Get particle emitter radus
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:133](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L133)
+
+• `set` **radius**(`v`): `void`
+
+Set particle emitter radus
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:125](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L125)
+
+___
+
+### boxSize
+
+• `get` **boxSize**(): `Vector3`
+
+Get box size
+
+#### Returns
+
+`Vector3`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:150](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L150)
+
+• `set` **boxSize**(`v`): `void`
+
+Set box size, only when the shape is box
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:142](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L142)
+
+___
+
+### randSeed
+
+• `get` **randSeed**(): `number`
+
+Get random seed
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:167](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L167)
+
+• `set` **randSeed**(`v`): `void`
+
+Set random seed
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:159](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L159)
+
+___
+
+### maxParticle
+
+• `get` **maxParticle**(): `number`
+
+Get max number of quad in this particle
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:187](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L187)
+
+• `set` **maxParticle**(`value`): `void`
+
+Set max number of quad in this particle
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:176](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L176)
+
+___
+
+### emissionRate
+
+• `get` **emissionRate**(): `number`
+
+Get emit rate.
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:204](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L204)
+
+• `set` **emissionRate**(`v`): `void`
+
+Set emit rate. How many quad are allowed to be emitted per second
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:196](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L196)
+
+___
+
+### duration
+
+• `get` **duration**(): `number`
+
+Get duration of emitted particles
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:221](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L221)
+
+• `set` **duration**(`v`): `void`
+
+Set duration of emitted particles
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:213](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L213)
+
+___
+
+### startLifecycle
+
+• `get` **startLifecycle**(): `MinMaxCurve`
+
+Get life cycle of each quad
+
+#### Returns
+
+`MinMaxCurve`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:238](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L238)
+
+• `set` **startLifecycle**(`v`): `void`
+
+Set life cycle of each quad
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `MinMaxCurve` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:230](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L230)
+
+___
+
+### startVelocityX
+
+• `get` **startVelocityX**(): `MinMaxCurve`
+
+Get velocity speed of X-axis component
+
+#### Returns
+
+`MinMaxCurve`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:255](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L255)
+
+• `set` **startVelocityX**(`value`): `void`
+
+Set velocity speed of X-axis component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `MinMaxCurve` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:247](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L247)
+
+___
+
+### startVelocityY
+
+• `get` **startVelocityY**(): `MinMaxCurve`
+
+Get velocity speed of Y-axis component
+
+#### Returns
+
+`MinMaxCurve`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:270](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L270)
+
+• `set` **startVelocityY**(`value`): `void`
+
+Set velocity speed of Y-axis component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `MinMaxCurve` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:262](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L262)
+
+___
+
+### startVelocityZ
+
+• `get` **startVelocityZ**(): `MinMaxCurve`
+
+Get velocity speed of Z-axis component
+
+#### Returns
+
+`MinMaxCurve`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:285](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L285)
+
+• `set` **startVelocityZ**(`value`): `void`
+
+Set velocity speed of Z-axis component
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `MinMaxCurve` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:277](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L277)
+
+___
+
+### startScale
+
+• `get` **startScale**(): `MinMaxCurve`
+
+Get init scale of each quad
+
+#### Returns
+
+`MinMaxCurve`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:302](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L302)
+
+• `set` **startScale**(`v`): `void`
+
+Set init scale of each quad
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `MinMaxCurve` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:294](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L294)
+
+___
+
+### startScaleX
+
+• `get` **startScaleX**(): `MinMaxCurve`
+
+Get the scaling value of each quad on the x-axis
+
+#### Returns
+
+`MinMaxCurve`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:317](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L317)
+
+• `set` **startScaleX**(`v`): `void`
+
+Set the scaling value of each quad on the x-axis
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `MinMaxCurve` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:309](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L309)
+
+___
+
+### startScaleY
+
+• `get` **startScaleY**(): `MinMaxCurve`
+
+Get the scaling value of each quad on the y-axis
+
+#### Returns
+
+`MinMaxCurve`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:332](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L332)
+
+• `set` **startScaleY**(`v`): `void`
+
+Set the scaling value of each quad on the y-axis
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `MinMaxCurve` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:324](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L324)
+
+___
+
+### startScaleZ
+
+• `get` **startScaleZ**(): `MinMaxCurve`
+
+Get the scaling value of each quad on the z-axis
+
+#### Returns
+
+`MinMaxCurve`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:347](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L347)
+
+• `set` **startScaleZ**(`v`): `void`
+
+Set the scaling value of each quad on the z-axis
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `MinMaxCurve` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:339](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L339)
+
+___
+
+### startRotation
+
+• `get` **startRotation**(): `MinMaxCurve`
+
+Get init rotation of each quad
+
+#### Returns
+
+`MinMaxCurve`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:372](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L372)
+
+• `set` **startRotation**(`v`): `void`
+
+Set init rotation of each quad
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `MinMaxCurve` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:364](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L364)
+
+___
+
+### startRotationX
+
+• `get` **startRotationX**(): `MinMaxCurve`
+
+Get the rotation of each quad on the x-axis
+
+#### Returns
+
+`MinMaxCurve`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:387](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L387)
+
+• `set` **startRotationX**(`v`): `void`
+
+Set the rotation of each quad on the x-axis
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `MinMaxCurve` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:379](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L379)
+
+___
+
+### startRotationY
+
+• `get` **startRotationY**(): `MinMaxCurve`
+
+Get the rotation of each quad on the y-axis
+
+#### Returns
+
+`MinMaxCurve`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:402](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L402)
+
+• `set` **startRotationY**(`v`): `void`
+
+Set the rotation of each quad on the y-axis
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `MinMaxCurve` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:394](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L394)
+
+___
+
+### startRotationZ
+
+• `get` **startRotationZ**(): `MinMaxCurve`
+
+Get the rotation of each quad on the z-axis
+
+#### Returns
+
+`MinMaxCurve`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:417](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L417)
+
+• `set` **startRotationZ**(`v`): `void`
+
+Set the rotation of each quad on the z-axis
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `MinMaxCurve` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:409](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L409)
+
+___
+
+### needReset
+
+• `get` **needReset**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ParticleModuleBase.needReset
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L21)
+
+• `set` **needReset**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.needReset
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L17)
+
+## Methods
+
+### isUseStartScaleXYZ
+
+▸ **isUseStartScaleXYZ**(): `boolean`
+
+Is the scaling of quads different on each axis
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:357](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L357)
+
+___
+
+### isUseStartRotationXYZ
+
+▸ **isUseStartRotationXYZ**(): `boolean`
+
+Is the rotation of quads different on each axis
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:426](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L426)
+
+___
+
+### generateParticleModuleData
+
+▸ **generateParticleModuleData**(`globalMemory`, `localMemory`): `void`
+
+Genarate particle emit module
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `globalMemory` | `ParticleGlobalMemory` |
+| `localMemory` | `ParticleLocalMemory` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+ParticleModuleBase.generateParticleModuleData
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:443](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L443)
+
+___
+
+### setSimulator
+
+▸ **setSimulator**(`simulator`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `simulator` | `ParticleSimulator` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.setSimulator
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L25)
+
+___
+
+### calculateParticle
+
+▸ **calculateParticle**(`globalMemory`, `localMemory`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `globalMemory` | `ParticleGlobalMemory` |
+| `localMemory` | `ParticleLocalMemory` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.calculateParticle
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L29)
diff --git a/docs/particle/classes/ParticleGravityModifierModule.md b/docs/particle/classes/ParticleGravityModifierModule.md
new file mode 100644
index 00000000..2be1d167
--- /dev/null
+++ b/docs/particle/classes/ParticleGravityModifierModule.md
@@ -0,0 +1,186 @@
+# Class: ParticleGravityModifierModule
+
+Particle module of gravity modifier
+
+## Hierarchy
+
+- `ParticleModuleBase`
+
+ ↳ **`ParticleGravityModifierModule`**
+
+### Constructors
+
+- [constructor](ParticleGravityModifierModule.md#constructor)
+
+### Accessors
+
+- [gravity](ParticleGravityModifierModule.md#gravity)
+- [needReset](ParticleGravityModifierModule.md#needreset)
+
+### Methods
+
+- [generateParticleModuleData](ParticleGravityModifierModule.md#generateparticlemoduledata)
+- [setSimulator](ParticleGravityModifierModule.md#setsimulator)
+- [calculateParticle](ParticleGravityModifierModule.md#calculateparticle)
+
+## Constructors
+
+### constructor
+
+• **new ParticleGravityModifierModule**(): [`ParticleGravityModifierModule`](ParticleGravityModifierModule.md)
+
+#### Returns
+
+[`ParticleGravityModifierModule`](ParticleGravityModifierModule.md)
+
+#### Inherited from
+
+ParticleModuleBase.constructor
+
+## Accessors
+
+### gravity
+
+• `get` **gravity**(): `Vector3`
+
+Get gravity
+
+#### Returns
+
+`Vector3`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleGravityModifierModule.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleGravityModifierModule.ts#L24)
+
+• `set` **gravity**(`value`): `void`
+
+Set gravity
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleGravityModifierModule.ts:15](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleGravityModifierModule.ts#L15)
+
+___
+
+### needReset
+
+• `get` **needReset**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ParticleModuleBase.needReset
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L21)
+
+• `set` **needReset**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.needReset
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L17)
+
+## Methods
+
+### generateParticleModuleData
+
+▸ **generateParticleModuleData**(`globalMemory`, `localMemory`): `void`
+
+Genarate particle gravity module
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `globalMemory` | `ParticleGlobalMemory` |
+| `localMemory` | `ParticleLocalMemory` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+ParticleModuleBase.generateParticleModuleData
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleGravityModifierModule.ts:36](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleGravityModifierModule.ts#L36)
+
+___
+
+### setSimulator
+
+▸ **setSimulator**(`simulator`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `simulator` | `ParticleSimulator` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.setSimulator
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L25)
+
+___
+
+### calculateParticle
+
+▸ **calculateParticle**(`globalMemory`, `localMemory`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `globalMemory` | `ParticleGlobalMemory` |
+| `localMemory` | `ParticleLocalMemory` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.calculateParticle
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L29)
diff --git a/docs/particle/classes/ParticleMaterial.md b/docs/particle/classes/ParticleMaterial.md
new file mode 100644
index 00000000..fdee5a03
--- /dev/null
+++ b/docs/particle/classes/ParticleMaterial.md
@@ -0,0 +1,1151 @@
+# Class: ParticleMaterial
+
+material of particle renderer
+
+## Hierarchy
+
+- `Material`
+
+ ↳ **`ParticleMaterial`**
+
+### Constructors
+
+- [constructor](ParticleMaterial.md#constructor)
+
+### Properties
+
+- [instanceID](ParticleMaterial.md#instanceid)
+- [name](ParticleMaterial.md#name)
+- [enable](ParticleMaterial.md#enable)
+
+### Accessors
+
+- [baseMap](ParticleMaterial.md#basemap)
+- [envMap](ParticleMaterial.md#envmap)
+- [shadowMap](ParticleMaterial.md#shadowmap)
+- [shader](ParticleMaterial.md#shader)
+- [doubleSide](ParticleMaterial.md#doubleside)
+- [castShadow](ParticleMaterial.md#castshadow)
+- [acceptShadow](ParticleMaterial.md#acceptshadow)
+- [castReflection](ParticleMaterial.md#castreflection)
+- [blendMode](ParticleMaterial.md#blendmode)
+- [depthCompare](ParticleMaterial.md#depthcompare)
+- [transparent](ParticleMaterial.md#transparent)
+- [cullMode](ParticleMaterial.md#cullmode)
+- [depthWriteEnabled](ParticleMaterial.md#depthwriteenabled)
+- [useBillboard](ParticleMaterial.md#usebillboard)
+
+### Methods
+
+- [getPass](ParticleMaterial.md#getpass)
+- [getAllPass](ParticleMaterial.md#getallpass)
+- [clone](ParticleMaterial.md#clone)
+- [destroy](ParticleMaterial.md#destroy)
+- [setDefine](ParticleMaterial.md#setdefine)
+- [setTexture](ParticleMaterial.md#settexture)
+- [setStorageBuffer](ParticleMaterial.md#setstoragebuffer)
+- [setUniformBuffer](ParticleMaterial.md#setuniformbuffer)
+- [setUniformFloat](ParticleMaterial.md#setuniformfloat)
+- [setUniformVector2](ParticleMaterial.md#setuniformvector2)
+- [setUniformVector3](ParticleMaterial.md#setuniformvector3)
+- [setUniformVector4](ParticleMaterial.md#setuniformvector4)
+- [setUniformColor](ParticleMaterial.md#setuniformcolor)
+- [getUniformFloat](ParticleMaterial.md#getuniformfloat)
+- [getUniformV2](ParticleMaterial.md#getuniformv2)
+- [getUniformV3](ParticleMaterial.md#getuniformv3)
+- [getUniformV4](ParticleMaterial.md#getuniformv4)
+- [getUniformColor](ParticleMaterial.md#getuniformcolor)
+- [getTexture](ParticleMaterial.md#gettexture)
+- [getStorageBuffer](ParticleMaterial.md#getstoragebuffer)
+- [getStructStorageBuffer](ParticleMaterial.md#getstructstoragebuffer)
+- [getUniformBuffer](ParticleMaterial.md#getuniformbuffer)
+- [applyUniform](ParticleMaterial.md#applyuniform)
+
+## Constructors
+
+### constructor
+
+• **new ParticleMaterial**(): [`ParticleMaterial`](ParticleMaterial.md)
+
+#### Returns
+
+[`ParticleMaterial`](ParticleMaterial.md)
+
+#### Overrides
+
+Material.constructor
+
+#### Defined in
+
+[packages/particle/material/ParticleMaterial.ts:9](https://github.com/Orillusion/orillusion/blob/main/packages/particle/material/ParticleMaterial.ts#L9)
+
+## Properties
+
+### instanceID
+
+• **instanceID**: `string`
+
+Material Unique Identifier
+
+#### Inherited from
+
+Material.instanceID
+
+#### Defined in
+
+[src/materials/Material.ts:19](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L19)
+
+___
+
+### name
+
+• **name**: `string`
+
+name of this material
+
+#### Inherited from
+
+Material.name
+
+#### Defined in
+
+[src/materials/Material.ts:25](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L25)
+
+___
+
+### enable
+
+• **enable**: `boolean` = `true`
+
+#### Inherited from
+
+Material.enable
+
+#### Defined in
+
+[src/materials/Material.ts:27](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L27)
+
+## Accessors
+
+### baseMap
+
+• `get` **baseMap**(): `Texture`
+
+#### Returns
+
+`Texture`
+
+#### Defined in
+
+[packages/particle/material/ParticleMaterial.ts:46](https://github.com/Orillusion/orillusion/blob/main/packages/particle/material/ParticleMaterial.ts#L46)
+
+• `set` **baseMap**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | `Texture` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/material/ParticleMaterial.ts:41](https://github.com/Orillusion/orillusion/blob/main/packages/particle/material/ParticleMaterial.ts#L41)
+
+___
+
+### envMap
+
+• `set` **envMap**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | `Texture` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/material/ParticleMaterial.ts:50](https://github.com/Orillusion/orillusion/blob/main/packages/particle/material/ParticleMaterial.ts#L50)
+
+___
+
+### shadowMap
+
+• `set` **shadowMap**(`texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `texture` | `Texture` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/material/ParticleMaterial.ts:54](https://github.com/Orillusion/orillusion/blob/main/packages/particle/material/ParticleMaterial.ts#L54)
+
+___
+
+### shader
+
+• `get` **shader**(): `Shader`
+
+#### Returns
+
+`Shader`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:41](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L41)
+
+• `set` **shader**(`shader`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shader` | `Shader` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.shader
+
+#### Defined in
+
+[src/materials/Material.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L36)
+
+___
+
+### doubleSide
+
+• `get` **doubleSide**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:45](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L45)
+
+• `set` **doubleSide**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.doubleSide
+
+#### Defined in
+
+[src/materials/Material.ts:49](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L49)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:53](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L53)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castShadow
+
+#### Defined in
+
+[src/materials/Material.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L57)
+
+___
+
+### acceptShadow
+
+• `get` **acceptShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:64](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L64)
+
+• `set` **acceptShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.acceptShadow
+
+#### Defined in
+
+[src/materials/Material.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L68)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:77](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L77)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.castReflection
+
+#### Defined in
+
+[src/materials/Material.ts:81](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L81)
+
+___
+
+### blendMode
+
+• `get` **blendMode**(): `BlendMode`
+
+#### Returns
+
+`BlendMode`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:85](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L85)
+
+• `set` **blendMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `BlendMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.blendMode
+
+#### Defined in
+
+[src/materials/Material.ts:89](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L89)
+
+___
+
+### depthCompare
+
+• `get` **depthCompare**(): `GPUCompareFunction`
+
+#### Returns
+
+`GPUCompareFunction`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:93](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L93)
+
+• `set` **depthCompare**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCompareFunction` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthCompare
+
+#### Defined in
+
+[src/materials/Material.ts:97](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L97)
+
+___
+
+### transparent
+
+• `get` **transparent**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:102](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L102)
+
+• `set` **transparent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.transparent
+
+#### Defined in
+
+[src/materials/Material.ts:106](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L106)
+
+___
+
+### cullMode
+
+• `get` **cullMode**(): `GPUCullMode`
+
+#### Returns
+
+`GPUCullMode`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:113](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L113)
+
+• `set` **cullMode**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GPUCullMode` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.cullMode
+
+#### Defined in
+
+[src/materials/Material.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L117)
+
+___
+
+### depthWriteEnabled
+
+• `get` **depthWriteEnabled**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:128](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L128)
+
+• `set` **depthWriteEnabled**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.depthWriteEnabled
+
+#### Defined in
+
+[src/materials/Material.ts:132](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L132)
+
+___
+
+### useBillboard
+
+• `set` **useBillboard**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.useBillboard
+
+#### Defined in
+
+[src/materials/Material.ts:136](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L136)
+
+## Methods
+
+### getPass
+
+▸ **getPass**(`passType`): `RenderShaderPass`[]
+
+get render pass by renderType
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `passType` | `PassType` |
+
+#### Returns
+
+`RenderShaderPass`[]
+
+#### Inherited from
+
+Material.getPass
+
+#### Defined in
+
+[src/materials/Material.ts:145](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L145)
+
+___
+
+### getAllPass
+
+▸ **getAllPass**(): `RenderShaderPass`[]
+
+get all color render pass
+
+#### Returns
+
+`RenderShaderPass`[]
+
+#### Inherited from
+
+Material.getAllPass
+
+#### Defined in
+
+[src/materials/Material.ts:153](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L153)
+
+___
+
+### clone
+
+▸ **clone**(): `Material`
+
+clone one material
+
+#### Returns
+
+`Material`
+
+Material
+
+#### Inherited from
+
+Material.clone
+
+#### Defined in
+
+[src/materials/Material.ts:161](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L161)
+
+___
+
+### destroy
+
+▸ **destroy**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.destroy
+
+#### Defined in
+
+[src/materials/Material.ts:168](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L168)
+
+___
+
+### setDefine
+
+▸ **setDefine**(`define`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `define` | `string` |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setDefine
+
+#### Defined in
+
+[src/materials/Material.ts:174](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L174)
+
+___
+
+### setTexture
+
+▸ **setTexture**(`propertyName`, `texture`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `texture` | `Texture` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setTexture
+
+#### Defined in
+
+[src/materials/Material.ts:178](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L178)
+
+___
+
+### setStorageBuffer
+
+▸ **setStorageBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | `StorageGPUBuffer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setStorageBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:182](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L182)
+
+___
+
+### setUniformBuffer
+
+▸ **setUniformBuffer**(`propertyName`, `buffer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `buffer` | `UniformGPUBuffer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:186](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L186)
+
+___
+
+### setUniformFloat
+
+▸ **setUniformFloat**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformFloat
+
+#### Defined in
+
+[src/materials/Material.ts:191](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L191)
+
+___
+
+### setUniformVector2
+
+▸ **setUniformVector2**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector2` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformVector2
+
+#### Defined in
+
+[src/materials/Material.ts:195](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L195)
+
+___
+
+### setUniformVector3
+
+▸ **setUniformVector3**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformVector3
+
+#### Defined in
+
+[src/materials/Material.ts:199](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L199)
+
+___
+
+### setUniformVector4
+
+▸ **setUniformVector4**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Vector4` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformVector4
+
+#### Defined in
+
+[src/materials/Material.ts:203](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L203)
+
+___
+
+### setUniformColor
+
+▸ **setUniformColor**(`propertyName`, `value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `propertyName` | `string` |
+| `value` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.setUniformColor
+
+#### Defined in
+
+[src/materials/Material.ts:207](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L207)
+
+___
+
+### getUniformFloat
+
+▸ **getUniformFloat**(`str`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+Material.getUniformFloat
+
+#### Defined in
+
+[src/materials/Material.ts:211](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L211)
+
+___
+
+### getUniformV2
+
+▸ **getUniformV2**(`str`): `Vector2`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector2`
+
+#### Inherited from
+
+Material.getUniformV2
+
+#### Defined in
+
+[src/materials/Material.ts:215](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L215)
+
+___
+
+### getUniformV3
+
+▸ **getUniformV3**(`str`): `Vector3`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector3`
+
+#### Inherited from
+
+Material.getUniformV3
+
+#### Defined in
+
+[src/materials/Material.ts:219](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L219)
+
+___
+
+### getUniformV4
+
+▸ **getUniformV4**(`str`): `Vector4`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Vector4`
+
+#### Inherited from
+
+Material.getUniformV4
+
+#### Defined in
+
+[src/materials/Material.ts:223](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L223)
+
+___
+
+### getUniformColor
+
+▸ **getUniformColor**(`str`): `Color`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Color`
+
+#### Inherited from
+
+Material.getUniformColor
+
+#### Defined in
+
+[src/materials/Material.ts:227](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L227)
+
+___
+
+### getTexture
+
+▸ **getTexture**(`str`): `Texture`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`Texture`
+
+#### Inherited from
+
+Material.getTexture
+
+#### Defined in
+
+[src/materials/Material.ts:231](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L231)
+
+___
+
+### getStorageBuffer
+
+▸ **getStorageBuffer**(`str`): `StorageGPUBuffer`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`StorageGPUBuffer`
+
+#### Inherited from
+
+Material.getStorageBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:235](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L235)
+
+___
+
+### getStructStorageBuffer
+
+▸ **getStructStorageBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+Material.getStructStorageBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:239](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L239)
+
+___
+
+### getUniformBuffer
+
+▸ **getUniformBuffer**(`str`): `GPUBufferBase`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `str` | `string` |
+
+#### Returns
+
+`GPUBufferBase`
+
+#### Inherited from
+
+Material.getUniformBuffer
+
+#### Defined in
+
+[src/materials/Material.ts:243](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L243)
+
+___
+
+### applyUniform
+
+▸ **applyUniform**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+Material.applyUniform
+
+#### Defined in
+
+[src/materials/Material.ts:247](https://github.com/Orillusion/orillusion/blob/main/src/materials/Material.ts#L247)
diff --git a/docs/particle/classes/ParticleOverLifeColorModule.md b/docs/particle/classes/ParticleOverLifeColorModule.md
new file mode 100644
index 00000000..8ae7fae9
--- /dev/null
+++ b/docs/particle/classes/ParticleOverLifeColorModule.md
@@ -0,0 +1,291 @@
+# Class: ParticleOverLifeColorModule
+
+Particle module of color change over life time
+
+## Hierarchy
+
+- `ParticleModuleBase`
+
+ ↳ **`ParticleOverLifeColorModule`**
+
+### Constructors
+
+- [constructor](ParticleOverLifeColorModule.md#constructor)
+
+### Accessors
+
+- [needReset](ParticleOverLifeColorModule.md#needreset)
+- [startColor](ParticleOverLifeColorModule.md#startcolor)
+- [startAlpha](ParticleOverLifeColorModule.md#startalpha)
+- [endColor](ParticleOverLifeColorModule.md#endcolor)
+- [endAlpha](ParticleOverLifeColorModule.md#endalpha)
+
+### Methods
+
+- [setSimulator](ParticleOverLifeColorModule.md#setsimulator)
+- [calculateParticle](ParticleOverLifeColorModule.md#calculateparticle)
+- [generateParticleModuleData](ParticleOverLifeColorModule.md#generateparticlemoduledata)
+
+## Constructors
+
+### constructor
+
+• **new ParticleOverLifeColorModule**(): [`ParticleOverLifeColorModule`](ParticleOverLifeColorModule.md)
+
+#### Returns
+
+[`ParticleOverLifeColorModule`](ParticleOverLifeColorModule.md)
+
+#### Inherited from
+
+ParticleModuleBase.constructor
+
+## Accessors
+
+### needReset
+
+• `get` **needReset**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ParticleModuleBase.needReset
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L21)
+
+• `set` **needReset**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.needReset
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L17)
+
+___
+
+### startColor
+
+• `get` **startColor**(): `Color`
+
+Get start color
+
+#### Returns
+
+`Color`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleOverLifeColorModule.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleOverLifeColorModule.ts#L24)
+
+• `set` **startColor**(`v`): `void`
+
+Set start color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleOverLifeColorModule.ts:16](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleOverLifeColorModule.ts#L16)
+
+___
+
+### startAlpha
+
+• `get` **startAlpha**(): `number`
+
+Get start alpha
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleOverLifeColorModule.ts:39](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleOverLifeColorModule.ts#L39)
+
+• `set` **startAlpha**(`v`): `void`
+
+Set start alpha
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleOverLifeColorModule.ts:31](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleOverLifeColorModule.ts#L31)
+
+___
+
+### endColor
+
+• `get` **endColor**(): `Color`
+
+Get end color
+
+#### Returns
+
+`Color`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleOverLifeColorModule.ts:54](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleOverLifeColorModule.ts#L54)
+
+• `set` **endColor**(`v`): `void`
+
+Set end color
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `Color` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleOverLifeColorModule.ts:46](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleOverLifeColorModule.ts#L46)
+
+___
+
+### endAlpha
+
+• `get` **endAlpha**(): `number`
+
+Get end alpha
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleOverLifeColorModule.ts:69](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleOverLifeColorModule.ts#L69)
+
+• `set` **endAlpha**(`v`): `void`
+
+Set end alpha
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleOverLifeColorModule.ts:61](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleOverLifeColorModule.ts#L61)
+
+## Methods
+
+### setSimulator
+
+▸ **setSimulator**(`simulator`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `simulator` | `ParticleSimulator` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.setSimulator
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L25)
+
+___
+
+### calculateParticle
+
+▸ **calculateParticle**(`globalMemory`, `localMemory`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `globalMemory` | `ParticleGlobalMemory` |
+| `localMemory` | `ParticleLocalMemory` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.calculateParticle
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L29)
+
+___
+
+### generateParticleModuleData
+
+▸ **generateParticleModuleData**(`globalMemory`, `localMemory`): `void`
+
+Genarate particle color module with type over life time
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `globalMemory` | `ParticleGlobalMemory` |
+| `localMemory` | `ParticleLocalMemory` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+ParticleModuleBase.generateParticleModuleData
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleOverLifeColorModule.ts:80](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleOverLifeColorModule.ts#L80)
diff --git a/docs/particle/classes/ParticleOverLifeRotationModule.md b/docs/particle/classes/ParticleOverLifeRotationModule.md
new file mode 100644
index 00000000..7994f0b5
--- /dev/null
+++ b/docs/particle/classes/ParticleOverLifeRotationModule.md
@@ -0,0 +1,167 @@
+# Class: ParticleOverLifeRotationModule
+
+Particle module of rotation over life time
+
+## Hierarchy
+
+- `ParticleModuleBase`
+
+ ↳ **`ParticleOverLifeRotationModule`**
+
+### Constructors
+
+- [constructor](ParticleOverLifeRotationModule.md#constructor)
+
+### Properties
+
+- [rotationSegments](ParticleOverLifeRotationModule.md#rotationsegments)
+
+### Accessors
+
+- [needReset](ParticleOverLifeRotationModule.md#needreset)
+
+### Methods
+
+- [setSimulator](ParticleOverLifeRotationModule.md#setsimulator)
+- [calculateParticle](ParticleOverLifeRotationModule.md#calculateparticle)
+- [generateParticleModuleData](ParticleOverLifeRotationModule.md#generateparticlemoduledata)
+
+## Constructors
+
+### constructor
+
+• **new ParticleOverLifeRotationModule**(): [`ParticleOverLifeRotationModule`](ParticleOverLifeRotationModule.md)
+
+#### Returns
+
+[`ParticleOverLifeRotationModule`](ParticleOverLifeRotationModule.md)
+
+#### Inherited from
+
+ParticleModuleBase.constructor
+
+## Properties
+
+### rotationSegments
+
+• **rotationSegments**: `Vector4`[]
+
+Describe the rotation of particles from birth to end
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleOverLifeRotationModule.ts:15](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleOverLifeRotationModule.ts#L15)
+
+## Accessors
+
+### needReset
+
+• `get` **needReset**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ParticleModuleBase.needReset
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L21)
+
+• `set` **needReset**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.needReset
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L17)
+
+## Methods
+
+### setSimulator
+
+▸ **setSimulator**(`simulator`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `simulator` | `ParticleSimulator` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.setSimulator
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L25)
+
+___
+
+### calculateParticle
+
+▸ **calculateParticle**(`globalMemory`, `localMemory`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `globalMemory` | `ParticleGlobalMemory` |
+| `localMemory` | `ParticleLocalMemory` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.calculateParticle
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L29)
+
+___
+
+### generateParticleModuleData
+
+▸ **generateParticleModuleData**(`globalMemory`, `localMemory`): `void`
+
+Genarate particle rotation module with type over life time
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `globalMemory` | `ParticleGlobalMemory` |
+| `localMemory` | `ParticleLocalMemory` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+ParticleModuleBase.generateParticleModuleData
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleOverLifeRotationModule.ts:22](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleOverLifeRotationModule.ts#L22)
diff --git a/docs/particle/classes/ParticleOverLifeScaleModule.md b/docs/particle/classes/ParticleOverLifeScaleModule.md
new file mode 100644
index 00000000..de3e3f6a
--- /dev/null
+++ b/docs/particle/classes/ParticleOverLifeScaleModule.md
@@ -0,0 +1,167 @@
+# Class: ParticleOverLifeScaleModule
+
+Particle module of size scale over life time
+
+## Hierarchy
+
+- `ParticleModuleBase`
+
+ ↳ **`ParticleOverLifeScaleModule`**
+
+### Constructors
+
+- [constructor](ParticleOverLifeScaleModule.md#constructor)
+
+### Properties
+
+- [scaleSegments](ParticleOverLifeScaleModule.md#scalesegments)
+
+### Accessors
+
+- [needReset](ParticleOverLifeScaleModule.md#needreset)
+
+### Methods
+
+- [setSimulator](ParticleOverLifeScaleModule.md#setsimulator)
+- [calculateParticle](ParticleOverLifeScaleModule.md#calculateparticle)
+- [generateParticleModuleData](ParticleOverLifeScaleModule.md#generateparticlemoduledata)
+
+## Constructors
+
+### constructor
+
+• **new ParticleOverLifeScaleModule**(): [`ParticleOverLifeScaleModule`](ParticleOverLifeScaleModule.md)
+
+#### Returns
+
+[`ParticleOverLifeScaleModule`](ParticleOverLifeScaleModule.md)
+
+#### Inherited from
+
+ParticleModuleBase.constructor
+
+## Properties
+
+### scaleSegments
+
+• **scaleSegments**: `Vector4`[]
+
+Describe the size scale change of particles from birth to end
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleOverLifeScaleModule.ts:14](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleOverLifeScaleModule.ts#L14)
+
+## Accessors
+
+### needReset
+
+• `get` **needReset**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ParticleModuleBase.needReset
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L21)
+
+• `set` **needReset**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.needReset
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L17)
+
+## Methods
+
+### setSimulator
+
+▸ **setSimulator**(`simulator`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `simulator` | `ParticleSimulator` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.setSimulator
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L25)
+
+___
+
+### calculateParticle
+
+▸ **calculateParticle**(`globalMemory`, `localMemory`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `globalMemory` | `ParticleGlobalMemory` |
+| `localMemory` | `ParticleLocalMemory` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.calculateParticle
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L29)
+
+___
+
+### generateParticleModuleData
+
+▸ **generateParticleModuleData**(`globalMemory`, `localMemory`): `void`
+
+Genarate particle size scale module with type over life time
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `globalMemory` | `ParticleGlobalMemory` |
+| `localMemory` | `ParticleLocalMemory` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+ParticleModuleBase.generateParticleModuleData
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleOverLifeScaleModule.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleOverLifeScaleModule.ts#L21)
diff --git a/docs/particle/classes/ParticleOverLifeSpeedModule.md b/docs/particle/classes/ParticleOverLifeSpeedModule.md
new file mode 100644
index 00000000..d9d631a1
--- /dev/null
+++ b/docs/particle/classes/ParticleOverLifeSpeedModule.md
@@ -0,0 +1,167 @@
+# Class: ParticleOverLifeSpeedModule
+
+Particle module of move speed over life time
+
+## Hierarchy
+
+- `ParticleModuleBase`
+
+ ↳ **`ParticleOverLifeSpeedModule`**
+
+### Constructors
+
+- [constructor](ParticleOverLifeSpeedModule.md#constructor)
+
+### Properties
+
+- [speedSegments](ParticleOverLifeSpeedModule.md#speedsegments)
+
+### Accessors
+
+- [needReset](ParticleOverLifeSpeedModule.md#needreset)
+
+### Methods
+
+- [setSimulator](ParticleOverLifeSpeedModule.md#setsimulator)
+- [calculateParticle](ParticleOverLifeSpeedModule.md#calculateparticle)
+- [generateParticleModuleData](ParticleOverLifeSpeedModule.md#generateparticlemoduledata)
+
+## Constructors
+
+### constructor
+
+• **new ParticleOverLifeSpeedModule**(): [`ParticleOverLifeSpeedModule`](ParticleOverLifeSpeedModule.md)
+
+#### Returns
+
+[`ParticleOverLifeSpeedModule`](ParticleOverLifeSpeedModule.md)
+
+#### Inherited from
+
+ParticleModuleBase.constructor
+
+## Properties
+
+### speedSegments
+
+• **speedSegments**: `Vector4`[]
+
+Describe the velocity change of particles from birth to end
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleOverLifeSpeedModule.ts:15](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleOverLifeSpeedModule.ts#L15)
+
+## Accessors
+
+### needReset
+
+• `get` **needReset**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ParticleModuleBase.needReset
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L21)
+
+• `set` **needReset**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.needReset
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L17)
+
+## Methods
+
+### setSimulator
+
+▸ **setSimulator**(`simulator`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `simulator` | `ParticleSimulator` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.setSimulator
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L25)
+
+___
+
+### calculateParticle
+
+▸ **calculateParticle**(`globalMemory`, `localMemory`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `globalMemory` | `ParticleGlobalMemory` |
+| `localMemory` | `ParticleLocalMemory` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.calculateParticle
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L29)
+
+___
+
+### generateParticleModuleData
+
+▸ **generateParticleModuleData**(`globalMemory`, `localMemory`): `void`
+
+Genarate particle move speed module with type over life time
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `globalMemory` | `ParticleGlobalMemory` |
+| `localMemory` | `ParticleLocalMemory` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+ParticleModuleBase.generateParticleModuleData
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleOverLifeSpeedModule.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleOverLifeSpeedModule.ts#L24)
diff --git a/docs/particle/classes/ParticleRotationModule.md b/docs/particle/classes/ParticleRotationModule.md
new file mode 100644
index 00000000..42556240
--- /dev/null
+++ b/docs/particle/classes/ParticleRotationModule.md
@@ -0,0 +1,272 @@
+# Class: ParticleRotationModule
+
+Particle Module of rotate quad
+
+## Hierarchy
+
+- `ParticleModuleBase`
+
+ ↳ **`ParticleRotationModule`**
+
+### Constructors
+
+- [constructor](ParticleRotationModule.md#constructor)
+
+### Properties
+
+- [angularVelocityXYZ](ParticleRotationModule.md#angularvelocityxyz)
+
+### Accessors
+
+- [needReset](ParticleRotationModule.md#needreset)
+- [angularVelocityX](ParticleRotationModule.md#angularvelocityx)
+- [angularVelocityY](ParticleRotationModule.md#angularvelocityy)
+- [angularVelocityZ](ParticleRotationModule.md#angularvelocityz)
+
+### Methods
+
+- [setSimulator](ParticleRotationModule.md#setsimulator)
+- [calculateParticle](ParticleRotationModule.md#calculateparticle)
+- [generateParticleModuleData](ParticleRotationModule.md#generateparticlemoduledata)
+
+## Constructors
+
+### constructor
+
+• **new ParticleRotationModule**(): [`ParticleRotationModule`](ParticleRotationModule.md)
+
+#### Returns
+
+[`ParticleRotationModule`](ParticleRotationModule.md)
+
+#### Inherited from
+
+ParticleModuleBase.constructor
+
+## Properties
+
+### angularVelocityXYZ
+
+• **angularVelocityXYZ**: `MinMaxCurve`[]
+
+angular velocity of each quad
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleRotationModule.ts:59](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleRotationModule.ts#L59)
+
+## Accessors
+
+### needReset
+
+• `get` **needReset**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ParticleModuleBase.needReset
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L21)
+
+• `set` **needReset**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.needReset
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L17)
+
+___
+
+### angularVelocityX
+
+• `get` **angularVelocityX**(): `MinMaxCurve`
+
+Returns angular velocity X-axis component of each quad
+
+#### Returns
+
+`MinMaxCurve`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleRotationModule.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleRotationModule.ts#L17)
+
+• `set` **angularVelocityX**(`value`): `void`
+
+Set angular velocity X-axis component of each quad
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `MinMaxCurve` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleRotationModule.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleRotationModule.ts#L24)
+
+___
+
+### angularVelocityY
+
+• `get` **angularVelocityY**(): `MinMaxCurve`
+
+Returns angular velocity Y-axis component of each quad
+
+#### Returns
+
+`MinMaxCurve`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleRotationModule.ts:31](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleRotationModule.ts#L31)
+
+• `set` **angularVelocityY**(`value`): `void`
+
+Set angular velocity Y-axis component of each quad
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `MinMaxCurve` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleRotationModule.ts:38](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleRotationModule.ts#L38)
+
+___
+
+### angularVelocityZ
+
+• `get` **angularVelocityZ**(): `MinMaxCurve`
+
+Returns angular velocity Z-axis component of each quad
+
+#### Returns
+
+`MinMaxCurve`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleRotationModule.ts:45](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleRotationModule.ts#L45)
+
+• `set` **angularVelocityZ**(`value`): `void`
+
+Get angular velocity Z-axis component of each quad
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `MinMaxCurve` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleRotationModule.ts:52](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleRotationModule.ts#L52)
+
+## Methods
+
+### setSimulator
+
+▸ **setSimulator**(`simulator`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `simulator` | `ParticleSimulator` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.setSimulator
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L25)
+
+___
+
+### calculateParticle
+
+▸ **calculateParticle**(`globalMemory`, `localMemory`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `globalMemory` | `ParticleGlobalMemory` |
+| `localMemory` | `ParticleLocalMemory` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.calculateParticle
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L29)
+
+___
+
+### generateParticleModuleData
+
+▸ **generateParticleModuleData**(`globalMemory`, `localMemory`): `void`
+
+Genarate particle rotate module, init angular velocity of each quad
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `globalMemory` | `ParticleGlobalMemory` |
+| `localMemory` | `ParticleLocalMemory` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+ParticleModuleBase.generateParticleModuleData
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleRotationModule.ts:67](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleRotationModule.ts#L67)
diff --git a/docs/particle/classes/ParticleStandardSimulator.md b/docs/particle/classes/ParticleStandardSimulator.md
new file mode 100644
index 00000000..984dd46d
--- /dev/null
+++ b/docs/particle/classes/ParticleStandardSimulator.md
@@ -0,0 +1,411 @@
+# Class: ParticleStandardSimulator
+
+Standard particle simulator
+
+## Hierarchy
+
+- `ParticleSimulator`
+
+ ↳ **`ParticleStandardSimulator`**
+
+### Constructors
+
+- [constructor](ParticleStandardSimulator.md#constructor)
+
+### Properties
+
+- [maxParticle](ParticleStandardSimulator.md#maxparticle)
+- [needReset](ParticleStandardSimulator.md#needreset)
+- [preheatTime](ParticleStandardSimulator.md#preheattime)
+- [particleLocalMemory](ParticleStandardSimulator.md#particlelocalmemory)
+- [particleGlobalMemory](ParticleStandardSimulator.md#particleglobalmemory)
+
+### Accessors
+
+- [simulatorSpace](ParticleStandardSimulator.md#simulatorspace)
+- [looping](ParticleStandardSimulator.md#looping)
+- [maxActiveParticle](ParticleStandardSimulator.md#maxactiveparticle)
+
+### Methods
+
+- [addModule](ParticleStandardSimulator.md#addmodule)
+- [getModule](ParticleStandardSimulator.md#getmodule)
+- [removeModule](ParticleStandardSimulator.md#removemodule)
+- [build](ParticleStandardSimulator.md#build)
+- [compute](ParticleStandardSimulator.md#compute)
+- [updateBuffer](ParticleStandardSimulator.md#updatebuffer)
+- [debug](ParticleStandardSimulator.md#debug)
+
+## Constructors
+
+### constructor
+
+• **new ParticleStandardSimulator**(): [`ParticleStandardSimulator`](ParticleStandardSimulator.md)
+
+#### Returns
+
+[`ParticleStandardSimulator`](ParticleStandardSimulator.md)
+
+#### Overrides
+
+ParticleSimulator.constructor
+
+#### Defined in
+
+[packages/particle/simulator/ParticleStandardSimulator.ts:14](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleStandardSimulator.ts#L14)
+
+## Properties
+
+### maxParticle
+
+• **maxParticle**: `number` = `1000`
+
+#### Inherited from
+
+ParticleSimulator.maxParticle
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L20)
+
+___
+
+### needReset
+
+• **needReset**: `boolean` = `true`
+
+#### Inherited from
+
+ParticleSimulator.needReset
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L21)
+
+___
+
+### preheatTime
+
+• **preheatTime**: `number` = `0.0`
+
+preheat time
+
+#### Inherited from
+
+ParticleSimulator.preheatTime
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:26](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L26)
+
+___
+
+### particleLocalMemory
+
+• **particleLocalMemory**: `ParticleLocalMemory`
+
+particle data for each quad
+
+#### Inherited from
+
+ParticleSimulator.particleLocalMemory
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:48](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L48)
+
+___
+
+### particleGlobalMemory
+
+• **particleGlobalMemory**: `ParticleGlobalMemory`
+
+global particle data for all quad
+
+#### Inherited from
+
+ParticleSimulator.particleGlobalMemory
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:53](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L53)
+
+## Accessors
+
+### simulatorSpace
+
+• `get` **simulatorSpace**(): [`SimulatorSpace`](../enums/SimulatorSpace.md)
+
+Get particle simulator space.
+
+#### Returns
+
+[`SimulatorSpace`](../enums/SimulatorSpace.md)
+
+#### Inherited from
+
+ParticleSimulator.simulatorSpace
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:41](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L41)
+
+• `set` **simulatorSpace**(`v`): `void`
+
+Set particle simulator space. see [SimulatorSpace](../enums/SimulatorSpace.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`SimulatorSpace`](../enums/SimulatorSpace.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleSimulator.simulatorSpace
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:33](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L33)
+
+___
+
+### looping
+
+• `get` **looping**(): `boolean`
+
+Get need to loop animation
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ParticleSimulator.looping
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:76](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L76)
+
+• `set` **looping**(`value`): `void`
+
+Set need to loop animation
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleSimulator.looping
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:68](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L68)
+
+___
+
+### maxActiveParticle
+
+• `get` **maxActiveParticle**(): `number`
+
+Get maximum number of active particles(read only)
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/particle/simulator/ParticleStandardSimulator.ts:22](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleStandardSimulator.ts#L22)
+
+## Methods
+
+### addModule
+
+▸ **addModule**\<`T`\>(`c`): `T`
+
+add a particle module
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `ParticleModuleBase` |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | `Ctor`\<`T`\> | class of particle module |
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+ParticleSimulator.addModule
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:84](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L84)
+
+___
+
+### getModule
+
+▸ **getModule**\<`T`\>(`c`): `T`
+
+Get particle module
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `ParticleModuleBase` |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | `Ctor`\<`T`\> | class of particle module |
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+ParticleSimulator.getModule
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:99](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L99)
+
+___
+
+### removeModule
+
+▸ **removeModule**\<`T`\>(`c`): `void`
+
+Remove particle module
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `ParticleModuleBase` |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | `Ctor`\<`T`\> | class of particle module |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleSimulator.removeModule
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:107](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L107)
+
+___
+
+### build
+
+▸ **build**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleSimulator.build
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:121](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L121)
+
+___
+
+### compute
+
+▸ **compute**(`command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleSimulator.compute
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:140](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L140)
+
+___
+
+### updateBuffer
+
+▸ **updateBuffer**(`delta`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `delta` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleSimulator.updateBuffer
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:146](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L146)
+
+___
+
+### debug
+
+▸ **debug**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleSimulator.debug
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:173](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L173)
diff --git a/docs/particle/classes/ParticleSystem.md b/docs/particle/classes/ParticleSystem.md
new file mode 100644
index 00000000..550bb279
--- /dev/null
+++ b/docs/particle/classes/ParticleSystem.md
@@ -0,0 +1,1572 @@
+# Class: ParticleSystem
+
+A particle system can simulate and render many small images or geometries, it called particles to produce visual effects
+
+## Hierarchy
+
+- `RenderNode`
+
+ ↳ **`ParticleSystem`**
+
+### Constructors
+
+- [constructor](ParticleSystem.md#constructor)
+
+### Properties
+
+- [autoPlay](ParticleSystem.md#autoplay)
+- [particleSimulator](ParticleSystem.md#particlesimulator)
+- [playing](ParticleSystem.md#playing)
+- [playSpeed](ParticleSystem.md#playspeed)
+- [object3D](ParticleSystem.md#object3d)
+- [isDestroyed](ParticleSystem.md#isdestroyed)
+- [instanceCount](ParticleSystem.md#instancecount)
+- [lodLevel](ParticleSystem.md#lodlevel)
+- [alwaysRender](ParticleSystem.md#alwaysrender)
+- [instanceID](ParticleSystem.md#instanceid)
+- [drawType](ParticleSystem.md#drawtype)
+- [isRenderOrderChange](ParticleSystem.md#isrenderorderchange)
+- [needSortOnCameraZ](ParticleSystem.md#needsortoncameraz)
+- [isRecievePostEffectUI](ParticleSystem.md#isrecieveposteffectui)
+
+### Accessors
+
+- [material](ParticleSystem.md#material)
+- [geometry](ParticleSystem.md#geometry)
+- [preheatTime](ParticleSystem.md#preheattime)
+- [looping](ParticleSystem.md#looping)
+- [eventDispatcher](ParticleSystem.md#eventdispatcher)
+- [isStart](ParticleSystem.md#isstart)
+- [transform](ParticleSystem.md#transform)
+- [enable](ParticleSystem.md#enable)
+- [renderLayer](ParticleSystem.md#renderlayer)
+- [rendererMask](ParticleSystem.md#renderermask)
+- [renderOrder](ParticleSystem.md#renderorder)
+- [materials](ParticleSystem.md#materials)
+- [castShadow](ParticleSystem.md#castshadow)
+- [castGI](ParticleSystem.md#castgi)
+- [castReflection](ParticleSystem.md#castreflection)
+
+### Methods
+
+- [init](ParticleSystem.md#init)
+- [useSimulator](ParticleSystem.md#usesimulator)
+- [play](ParticleSystem.md#play)
+- [stop](ParticleSystem.md#stop)
+- [start](ParticleSystem.md#start)
+- [onCompute](ParticleSystem.md#oncompute)
+- [onUpdate](ParticleSystem.md#onupdate)
+- [onLateUpdate](ParticleSystem.md#onlateupdate)
+- [onBeforeUpdate](ParticleSystem.md#onbeforeupdate)
+- [onGraphic](ParticleSystem.md#ongraphic)
+- [onParentChange](ParticleSystem.md#onparentchange)
+- [onAddChild](ParticleSystem.md#onaddchild)
+- [onRemoveChild](ParticleSystem.md#onremovechild)
+- [cloneTo](ParticleSystem.md#cloneto)
+- [attachSceneOctree](ParticleSystem.md#attachsceneoctree)
+- [detachSceneOctree](ParticleSystem.md#detachsceneoctree)
+- [copyComponent](ParticleSystem.md#copycomponent)
+- [addMask](ParticleSystem.md#addmask)
+- [removeMask](ParticleSystem.md#removemask)
+- [hasMask](ParticleSystem.md#hasmask)
+- [addRendererMask](ParticleSystem.md#addrenderermask)
+- [removeRendererMask](ParticleSystem.md#removerenderermask)
+- [onEnable](ParticleSystem.md#onenable)
+- [onDisable](ParticleSystem.md#ondisable)
+- [selfCloneMaterials](ParticleSystem.md#selfclonematerials)
+- [renderPass](ParticleSystem.md#renderpass)
+- [renderPass2](ParticleSystem.md#renderpass2)
+- [recordRenderPass2](ParticleSystem.md#recordrenderpass2)
+- [preInit](ParticleSystem.md#preinit)
+- [nodeUpdate](ParticleSystem.md#nodeupdate)
+- [beforeDestroy](ParticleSystem.md#beforedestroy)
+- [destroy](ParticleSystem.md#destroy)
+
+## Constructors
+
+### constructor
+
+• **new ParticleSystem**(): [`ParticleSystem`](ParticleSystem.md)
+
+#### Returns
+
+[`ParticleSystem`](ParticleSystem.md)
+
+#### Overrides
+
+RenderNode.constructor
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:31](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L31)
+
+## Properties
+
+### autoPlay
+
+• **autoPlay**: `boolean` = `true`
+
+whether the animation will auto play
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:14](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L14)
+
+___
+
+### particleSimulator
+
+• **particleSimulator**: `ParticleSimulator`
+
+the simulator of particle.
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L19)
+
+___
+
+### playing
+
+• **playing**: `boolean` = `false`
+
+playing status
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L24)
+
+___
+
+### playSpeed
+
+• **playSpeed**: `number` = `1.0`
+
+animation playing speed
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L29)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+RenderNode.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+RenderNode.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+___
+
+### instanceCount
+
+• **instanceCount**: `number` = `0`
+
+#### Inherited from
+
+RenderNode.instanceCount
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:35](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L35)
+
+___
+
+### lodLevel
+
+• **lodLevel**: `number` = `0`
+
+#### Inherited from
+
+RenderNode.lodLevel
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:36](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L36)
+
+___
+
+### alwaysRender
+
+• **alwaysRender**: `boolean` = `false`
+
+#### Inherited from
+
+RenderNode.alwaysRender
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:37](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L37)
+
+___
+
+### instanceID
+
+• **instanceID**: `string`
+
+#### Inherited from
+
+RenderNode.instanceID
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L38)
+
+___
+
+### drawType
+
+• **drawType**: `number` = `0`
+
+#### Inherited from
+
+RenderNode.drawType
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:39](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L39)
+
+___
+
+### isRenderOrderChange
+
+• `Optional` **isRenderOrderChange**: `boolean`
+
+#### Inherited from
+
+RenderNode.isRenderOrderChange
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:55](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L55)
+
+___
+
+### needSortOnCameraZ
+
+• `Optional` **needSortOnCameraZ**: `boolean`
+
+#### Inherited from
+
+RenderNode.needSortOnCameraZ
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:56](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L56)
+
+___
+
+### isRecievePostEffectUI
+
+• `Optional` **isRecievePostEffectUI**: `boolean`
+
+#### Inherited from
+
+RenderNode.isRecievePostEffectUI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:57](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L57)
+
+## Accessors
+
+### material
+
+• `get` **material**(): `Material`
+
+material
+
+#### Returns
+
+`Material`
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:42](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L42)
+
+• `set` **material**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Material` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:46](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L46)
+
+___
+
+### geometry
+
+• `get` **geometry**(): `GeometryBase`
+
+The geometry of the mesh determines its shape
+
+#### Returns
+
+`GeometryBase`
+
+#### Overrides
+
+RenderNode.geometry
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:53](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L53)
+
+• `set` **geometry**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `GeometryBase` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.geometry
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:57](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L57)
+
+___
+
+### preheatTime
+
+• `get` **preheatTime**(): `number`
+
+Get preheat time(second)
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:76](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L76)
+
+• `set` **preheatTime**(`value`): `void`
+
+Set preheat time(second)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:69](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L69)
+
+___
+
+### looping
+
+• `get` **looping**(): `boolean`
+
+Get particle simulator's looping
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:90](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L90)
+
+• `set` **looping**(`value`): `void`
+
+Set particle simulator's looping
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:83](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L83)
+
+___
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+RenderNode.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+RenderNode.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+___
+
+### renderLayer
+
+• `get` **renderLayer**(): `RenderLayer`
+
+#### Returns
+
+`RenderLayer`
+
+#### Inherited from
+
+RenderNode.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:110](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L110)
+
+• `set` **renderLayer**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `RenderLayer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.renderLayer
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L114)
+
+___
+
+### rendererMask
+
+• `get` **rendererMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+RenderNode.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:152](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L152)
+
+• `set` **rendererMask**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.rendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:156](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L156)
+
+___
+
+### renderOrder
+
+• `get` **renderOrder**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+RenderNode.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:160](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L160)
+
+• `set` **renderOrder**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.renderOrder
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:164](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L164)
+
+___
+
+### materials
+
+• `get` **materials**(): `Material`[]
+
+#### Returns
+
+`Material`[]
+
+#### Inherited from
+
+RenderNode.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:173](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L173)
+
+• `set` **materials**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Material`[] |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.materials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:177](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L177)
+
+___
+
+### castShadow
+
+• `get` **castShadow**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:345](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L345)
+
+• `set` **castShadow**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.castShadow
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:349](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L349)
+
+___
+
+### castGI
+
+• `get` **castGI**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:354](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L354)
+
+• `set` **castGI**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.castGI
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:358](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L358)
+
+___
+
+### castReflection
+
+• `get` **castReflection**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:362](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L362)
+
+• `set` **castReflection**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.castReflection
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:366](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L366)
+
+## Methods
+
+### init
+
+▸ **init**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.init
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:94](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L94)
+
+___
+
+### useSimulator
+
+▸ **useSimulator**\<`T`\>(`c`): `ParticleSimulator`
+
+Set to use the specified particle emulator
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | extends `ParticleSimulator` |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `c` | `Ctor`\<`T`\> | class of particle emulator |
+
+#### Returns
+
+`ParticleSimulator`
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:102](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L102)
+
+___
+
+### play
+
+▸ **play**(`speed?`): `void`
+
+start to play animation, with a speed value
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `speed` | `number` | `1.0` | playSpeed, see[playSpeed](ParticleSystem.md#playspeed) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:112](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L112)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+stop playing
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.stop
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:120](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L120)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.start
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:124](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L124)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view`, `command`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | `View3D` |
+| `command` | `GPUCommandEncoder` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+RenderNode.onCompute
+
+#### Defined in
+
+[packages/particle/ParticleSystem.ts:147](https://github.com/Orillusion/orillusion/blob/main/packages/particle/ParticleSystem.ts#L147)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+RenderNode.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `Object3D` | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### attachSceneOctree
+
+▸ **attachSceneOctree**(`octree`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `octree` | `Octree` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.attachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:78](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L78)
+
+___
+
+### detachSceneOctree
+
+▸ **detachSceneOctree**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.detachSceneOctree
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:83](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L83)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+RenderNode.copyComponent
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:95](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L95)
+
+___
+
+### addMask
+
+▸ **addMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.addMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:140](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L140)
+
+___
+
+### removeMask
+
+▸ **removeMask**(`mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.removeMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:144](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L144)
+
+___
+
+### hasMask
+
+▸ **hasMask**(`mask`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mask` | `RendererMask` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.hasMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:148](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L148)
+
+___
+
+### addRendererMask
+
+▸ **addRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.addRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:228](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L228)
+
+___
+
+### removeRendererMask
+
+▸ **removeRendererMask**(`tag`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tag` | `RendererMask` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.removeRendererMask
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:232](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L232)
+
+___
+
+### onEnable
+
+▸ **onEnable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.onEnable
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:236](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L236)
+
+___
+
+### onDisable
+
+▸ **onDisable**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.onDisable
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:246](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L246)
+
+___
+
+### selfCloneMaterials
+
+▸ **selfCloneMaterials**(`key`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `key` | `string` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+RenderNode.selfCloneMaterials
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:252](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L252)
+
+___
+
+### renderPass
+
+▸ **renderPass**(`view`, `passType`, `renderContext`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | `View3D` |
+| `passType` | `PassType` |
+| `renderContext` | `RenderContext` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.renderPass
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:370](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L370)
+
+___
+
+### renderPass2
+
+▸ **renderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+render pass at passType
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | `View3D` | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | `ClusterLightingBuffer` | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.renderPass2
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:438](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L438)
+
+___
+
+### recordRenderPass2
+
+▸ **recordRenderPass2**(`view`, `passType`, `rendererPassState`, `clusterLightingBuffer`, `encoder`, `useBundle?`): `void`
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `view` | `View3D` | `undefined` |
+| `passType` | `PassType` | `undefined` |
+| `rendererPassState` | `RendererPassState` | `undefined` |
+| `clusterLightingBuffer` | `ClusterLightingBuffer` | `undefined` |
+| `encoder` | `GPURenderPassEncoder` | `undefined` |
+| `useBundle` | `boolean` | `false` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.recordRenderPass2
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:486](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L486)
+
+___
+
+### preInit
+
+▸ **preInit**(`_rendererType`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `_rendererType` | `PassType` |
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+RenderNode.preInit
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:519](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L519)
+
+___
+
+### nodeUpdate
+
+▸ **nodeUpdate**(`view`, `passType`, `renderPassState`, `clusterLightingBuffer?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view` | `View3D` |
+| `passType` | `PassType` |
+| `renderPassState` | `RendererPassState` |
+| `clusterLightingBuffer?` | `ClusterLightingBuffer` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.nodeUpdate
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:523](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L523)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.beforeDestroy
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:609](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L609)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+RenderNode.destroy
+
+#### Defined in
+
+[src/components/renderer/RenderNode.ts:625](https://github.com/Orillusion/orillusion/blob/main/src/components/renderer/RenderNode.ts#L625)
diff --git a/docs/particle/classes/ParticleTextureSheetModule.md b/docs/particle/classes/ParticleTextureSheetModule.md
new file mode 100644
index 00000000..53fda488
--- /dev/null
+++ b/docs/particle/classes/ParticleTextureSheetModule.md
@@ -0,0 +1,232 @@
+# Class: ParticleTextureSheetModule
+
+Particle Module of texture sheet
+
+## Hierarchy
+
+- `ParticleModuleBase`
+
+ ↳ **`ParticleTextureSheetModule`**
+
+### Constructors
+
+- [constructor](ParticleTextureSheetModule.md#constructor)
+
+### Properties
+
+- [clipCol](ParticleTextureSheetModule.md#clipcol)
+- [totalClip](ParticleTextureSheetModule.md#totalclip)
+- [playRate](ParticleTextureSheetModule.md#playrate)
+- [textureWidth](ParticleTextureSheetModule.md#texturewidth)
+- [textureHeight](ParticleTextureSheetModule.md#textureheight)
+- [playMode](ParticleTextureSheetModule.md#playmode)
+
+### Accessors
+
+- [needReset](ParticleTextureSheetModule.md#needreset)
+
+### Methods
+
+- [setSimulator](ParticleTextureSheetModule.md#setsimulator)
+- [calculateParticle](ParticleTextureSheetModule.md#calculateparticle)
+- [generateParticleModuleData](ParticleTextureSheetModule.md#generateparticlemoduledata)
+
+## Constructors
+
+### constructor
+
+• **new ParticleTextureSheetModule**(): [`ParticleTextureSheetModule`](ParticleTextureSheetModule.md)
+
+#### Returns
+
+[`ParticleTextureSheetModule`](ParticleTextureSheetModule.md)
+
+#### Inherited from
+
+ParticleModuleBase.constructor
+
+## Properties
+
+### clipCol
+
+• **clipCol**: `number` = `1`
+
+The number of columns in the texture sheet
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleTextureSheetModule.ts:14](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleTextureSheetModule.ts#L14)
+
+___
+
+### totalClip
+
+• **totalClip**: `number` = `1`
+
+The total number of clips texture sheet
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleTextureSheetModule.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleTextureSheetModule.ts#L19)
+
+___
+
+### playRate
+
+• **playRate**: `number` = `1.0`
+
+playing speed
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleTextureSheetModule.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleTextureSheetModule.ts#L24)
+
+___
+
+### textureWidth
+
+• **textureWidth**: `number` = `1`
+
+Texture width
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleTextureSheetModule.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleTextureSheetModule.ts#L29)
+
+___
+
+### textureHeight
+
+• **textureHeight**: `number` = `1`
+
+Texture Height
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleTextureSheetModule.ts:34](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleTextureSheetModule.ts#L34)
+
+___
+
+### playMode
+
+• **playMode**: `number` = `0`
+
+play mode
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleTextureSheetModule.ts:39](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleTextureSheetModule.ts#L39)
+
+## Accessors
+
+### needReset
+
+• `get` **needReset**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ParticleModuleBase.needReset
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L21)
+
+• `set` **needReset**(`v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.needReset
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L17)
+
+## Methods
+
+### setSimulator
+
+▸ **setSimulator**(`simulator`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `simulator` | `ParticleSimulator` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.setSimulator
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:25](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L25)
+
+___
+
+### calculateParticle
+
+▸ **calculateParticle**(`globalMemory`, `localMemory`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `globalMemory` | `ParticleGlobalMemory` |
+| `localMemory` | `ParticleLocalMemory` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ParticleModuleBase.calculateParticle
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleModuleBase.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleModuleBase.ts#L29)
+
+___
+
+### generateParticleModuleData
+
+▸ **generateParticleModuleData**(`globalMemory`, `localMemory`): `void`
+
+Genarate particle texture sheet module: such as clip col, total clip, play speed.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `globalMemory` | `ParticleGlobalMemory` |
+| `localMemory` | `ParticleLocalMemory` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+ParticleModuleBase.generateParticleModuleData
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleTextureSheetModule.ts:47](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleTextureSheetModule.ts#L47)
diff --git a/docs/particle/enums/EmitLocation.md b/docs/particle/enums/EmitLocation.md
new file mode 100644
index 00000000..b200f5cc
--- /dev/null
+++ b/docs/particle/enums/EmitLocation.md
@@ -0,0 +1,58 @@
+# Enumeration: EmitLocation
+
+enum emit loaction
+
+### Enumeration Members
+
+- [Default](EmitLocation.md#default)
+- [Edge](EmitLocation.md#edge)
+- [Shell](EmitLocation.md#shell)
+- [Volume](EmitLocation.md#volume)
+
+## Enumeration Members
+
+### Default
+
+• **Default** = ``0``
+
+particles will emit from default location
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:47](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L47)
+
+___
+
+### Edge
+
+• **Edge** = ``1``
+
+particles will emit from the edges of the specified shape
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:52](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L52)
+
+___
+
+### Shell
+
+• **Shell** = ``2``
+
+particles will emit from the shells of the specified shape
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:57](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L57)
+
+___
+
+### Volume
+
+• **Volume** = ``3``
+
+particles will emit from the volume of the specified shape
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:62](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L62)
diff --git a/docs/particle/enums/ShapeType.md b/docs/particle/enums/ShapeType.md
new file mode 100644
index 00000000..00436ecb
--- /dev/null
+++ b/docs/particle/enums/ShapeType.md
@@ -0,0 +1,71 @@
+# Enumeration: ShapeType
+
+enum shape of all particle emitter shapes
+
+### Enumeration Members
+
+- [Box](ShapeType.md#box)
+- [Circle](ShapeType.md#circle)
+- [Cone](ShapeType.md#cone)
+- [Sphere](ShapeType.md#sphere)
+- [Hemisphere](ShapeType.md#hemisphere)
+
+## Enumeration Members
+
+### Box
+
+• **Box** = ``0``
+
+Box shape
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:16](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L16)
+
+___
+
+### Circle
+
+• **Circle** = ``1``
+
+Circle shape
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L21)
+
+___
+
+### Cone
+
+• **Cone** = ``2``
+
+Cone shape
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:26](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L26)
+
+___
+
+### Sphere
+
+• **Sphere** = ``3``
+
+Sphere shape
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:31](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L31)
+
+___
+
+### Hemisphere
+
+• **Hemisphere** = ``4``
+
+Hemisphere shape
+
+#### Defined in
+
+[packages/particle/module/stand/ParticleEmitterModule.ts:36](https://github.com/Orillusion/orillusion/blob/main/packages/particle/module/stand/ParticleEmitterModule.ts#L36)
diff --git a/docs/particle/enums/SimulatorSpace.md b/docs/particle/enums/SimulatorSpace.md
new file mode 100644
index 00000000..deee8825
--- /dev/null
+++ b/docs/particle/enums/SimulatorSpace.md
@@ -0,0 +1,28 @@
+# Enumeration: SimulatorSpace
+
+enumerate particle simulator space.
+
+### Enumeration Members
+
+- [Local](SimulatorSpace.md#local)
+- [World](SimulatorSpace.md#world)
+
+## Enumeration Members
+
+### Local
+
+• **Local** = ``0``
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:11](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L11)
+
+___
+
+### World
+
+• **World** = ``1``
+
+#### Defined in
+
+[packages/particle/simulator/ParticleSimulator.ts:12](https://github.com/Orillusion/orillusion/blob/main/packages/particle/simulator/ParticleSimulator.ts#L12)
diff --git a/docs/particle/index.md b/docs/particle/index.md
new file mode 100644
index 00000000..05b5d0bb
--- /dev/null
+++ b/docs/particle/index.md
@@ -0,0 +1,22 @@
+# @orillusion/particle
+
+## Enumerations
+
+- [SimulatorSpace](enums/SimulatorSpace.md)
+
+## Particle
+
+- [ParticleSystem](classes/ParticleSystem.md)
+- [ParticleBuffer](classes/ParticleBuffer.md)
+- [ParticleMaterial](classes/ParticleMaterial.md)
+- [ShapeType](enums/ShapeType.md)
+- [EmitLocation](enums/EmitLocation.md)
+- [ParticleEmitterModule](classes/ParticleEmitterModule.md)
+- [ParticleGravityModifierModule](classes/ParticleGravityModifierModule.md)
+- [ParticleOverLifeColorModule](classes/ParticleOverLifeColorModule.md)
+- [ParticleOverLifeRotationModule](classes/ParticleOverLifeRotationModule.md)
+- [ParticleOverLifeScaleModule](classes/ParticleOverLifeScaleModule.md)
+- [ParticleOverLifeSpeedModule](classes/ParticleOverLifeSpeedModule.md)
+- [ParticleRotationModule](classes/ParticleRotationModule.md)
+- [ParticleTextureSheetModule](classes/ParticleTextureSheetModule.md)
+- [ParticleStandardSimulator](classes/ParticleStandardSimulator.md)
diff --git a/docs/physics/classes/Ammo.AllHitsRayResultCallback.md b/docs/physics/classes/Ammo.AllHitsRayResultCallback.md
new file mode 100644
index 00000000..080da685
--- /dev/null
+++ b/docs/physics/classes/Ammo.AllHitsRayResultCallback.md
@@ -0,0 +1,452 @@
+# Class: AllHitsRayResultCallback
+
+[Ammo](../modules/Ammo.md).AllHitsRayResultCallback
+
+## Hierarchy
+
+- [`RayResultCallback`](Ammo.RayResultCallback.md)
+
+ ↳ **`AllHitsRayResultCallback`**
+
+### Constructors
+
+- [constructor](Ammo.AllHitsRayResultCallback.md#constructor)
+
+### Methods
+
+- [hasHit](Ammo.AllHitsRayResultCallback.md#hashit)
+- [get\_m\_collisionFilterGroup](Ammo.AllHitsRayResultCallback.md#get_m_collisionfiltergroup)
+- [set\_m\_collisionFilterGroup](Ammo.AllHitsRayResultCallback.md#set_m_collisionfiltergroup)
+- [get\_m\_collisionFilterMask](Ammo.AllHitsRayResultCallback.md#get_m_collisionfiltermask)
+- [set\_m\_collisionFilterMask](Ammo.AllHitsRayResultCallback.md#set_m_collisionfiltermask)
+- [get\_m\_closestHitFraction](Ammo.AllHitsRayResultCallback.md#get_m_closesthitfraction)
+- [set\_m\_closestHitFraction](Ammo.AllHitsRayResultCallback.md#set_m_closesthitfraction)
+- [get\_m\_collisionObject](Ammo.AllHitsRayResultCallback.md#get_m_collisionobject)
+- [set\_m\_collisionObject](Ammo.AllHitsRayResultCallback.md#set_m_collisionobject)
+- [get\_m\_collisionObjects](Ammo.AllHitsRayResultCallback.md#get_m_collisionobjects)
+- [set\_m\_collisionObjects](Ammo.AllHitsRayResultCallback.md#set_m_collisionobjects)
+- [get\_m\_rayFromWorld](Ammo.AllHitsRayResultCallback.md#get_m_rayfromworld)
+- [set\_m\_rayFromWorld](Ammo.AllHitsRayResultCallback.md#set_m_rayfromworld)
+- [get\_m\_rayToWorld](Ammo.AllHitsRayResultCallback.md#get_m_raytoworld)
+- [set\_m\_rayToWorld](Ammo.AllHitsRayResultCallback.md#set_m_raytoworld)
+- [get\_m\_hitNormalWorld](Ammo.AllHitsRayResultCallback.md#get_m_hitnormalworld)
+- [set\_m\_hitNormalWorld](Ammo.AllHitsRayResultCallback.md#set_m_hitnormalworld)
+- [get\_m\_hitPointWorld](Ammo.AllHitsRayResultCallback.md#get_m_hitpointworld)
+- [set\_m\_hitPointWorld](Ammo.AllHitsRayResultCallback.md#set_m_hitpointworld)
+- [get\_m\_hitFractions](Ammo.AllHitsRayResultCallback.md#get_m_hitfractions)
+- [set\_m\_hitFractions](Ammo.AllHitsRayResultCallback.md#set_m_hitfractions)
+
+## Constructors
+
+### constructor
+
+• **new AllHitsRayResultCallback**(`from`, `to`): [`AllHitsRayResultCallback`](Ammo.AllHitsRayResultCallback.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | [`btVector3`](Ammo.btVector3.md) |
+| `to` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`AllHitsRayResultCallback`](Ammo.AllHitsRayResultCallback.md)
+
+#### Overrides
+
+[RayResultCallback](Ammo.RayResultCallback.md).[constructor](Ammo.RayResultCallback.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:194](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L194)
+
+## Methods
+
+### hasHit
+
+▸ **hasHit**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[hasHit](Ammo.RayResultCallback.md#hashit)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:164](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L164)
+
+___
+
+### get\_m\_collisionFilterGroup
+
+▸ **get_m_collisionFilterGroup**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[get_m_collisionFilterGroup](Ammo.RayResultCallback.md#get_m_collisionfiltergroup)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:165](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L165)
+
+___
+
+### set\_m\_collisionFilterGroup
+
+▸ **set_m_collisionFilterGroup**(`m_collisionFilterGroup`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_collisionFilterGroup` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[set_m_collisionFilterGroup](Ammo.RayResultCallback.md#set_m_collisionfiltergroup)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:166](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L166)
+
+___
+
+### get\_m\_collisionFilterMask
+
+▸ **get_m_collisionFilterMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[get_m_collisionFilterMask](Ammo.RayResultCallback.md#get_m_collisionfiltermask)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:167](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L167)
+
+___
+
+### set\_m\_collisionFilterMask
+
+▸ **set_m_collisionFilterMask**(`m_collisionFilterMask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_collisionFilterMask` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[set_m_collisionFilterMask](Ammo.RayResultCallback.md#set_m_collisionfiltermask)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:168](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L168)
+
+___
+
+### get\_m\_closestHitFraction
+
+▸ **get_m_closestHitFraction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[get_m_closestHitFraction](Ammo.RayResultCallback.md#get_m_closesthitfraction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:169](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L169)
+
+___
+
+### set\_m\_closestHitFraction
+
+▸ **set_m_closestHitFraction**(`m_closestHitFraction`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_closestHitFraction` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[set_m_closestHitFraction](Ammo.RayResultCallback.md#set_m_closesthitfraction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:170](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L170)
+
+___
+
+### get\_m\_collisionObject
+
+▸ **get_m_collisionObject**(): [`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Returns
+
+[`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[get_m_collisionObject](Ammo.RayResultCallback.md#get_m_collisionobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:171](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L171)
+
+___
+
+### set\_m\_collisionObject
+
+▸ **set_m_collisionObject**(`m_collisionObject`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_collisionObject` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[set_m_collisionObject](Ammo.RayResultCallback.md#set_m_collisionobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:172](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L172)
+
+___
+
+### get\_m\_collisionObjects
+
+▸ **get_m_collisionObjects**(): [`btConstCollisionObjectArray`](Ammo.btConstCollisionObjectArray.md)
+
+#### Returns
+
+[`btConstCollisionObjectArray`](Ammo.btConstCollisionObjectArray.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:195](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L195)
+
+___
+
+### set\_m\_collisionObjects
+
+▸ **set_m_collisionObjects**(`m_collisionObjects`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_collisionObjects` | [`btConstCollisionObjectArray`](Ammo.btConstCollisionObjectArray.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:196](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L196)
+
+___
+
+### get\_m\_rayFromWorld
+
+▸ **get_m_rayFromWorld**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:197](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L197)
+
+___
+
+### set\_m\_rayFromWorld
+
+▸ **set_m_rayFromWorld**(`m_rayFromWorld`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_rayFromWorld` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:198](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L198)
+
+___
+
+### get\_m\_rayToWorld
+
+▸ **get_m_rayToWorld**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:199](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L199)
+
+___
+
+### set\_m\_rayToWorld
+
+▸ **set_m_rayToWorld**(`m_rayToWorld`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_rayToWorld` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:200](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L200)
+
+___
+
+### get\_m\_hitNormalWorld
+
+▸ **get_m_hitNormalWorld**(): [`btVector3Array`](Ammo.btVector3Array.md)
+
+#### Returns
+
+[`btVector3Array`](Ammo.btVector3Array.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:201](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L201)
+
+___
+
+### set\_m\_hitNormalWorld
+
+▸ **set_m_hitNormalWorld**(`m_hitNormalWorld`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_hitNormalWorld` | [`btVector3Array`](Ammo.btVector3Array.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:202](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L202)
+
+___
+
+### get\_m\_hitPointWorld
+
+▸ **get_m_hitPointWorld**(): [`btVector3Array`](Ammo.btVector3Array.md)
+
+#### Returns
+
+[`btVector3Array`](Ammo.btVector3Array.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:203](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L203)
+
+___
+
+### set\_m\_hitPointWorld
+
+▸ **set_m_hitPointWorld**(`m_hitPointWorld`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_hitPointWorld` | [`btVector3Array`](Ammo.btVector3Array.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:204](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L204)
+
+___
+
+### get\_m\_hitFractions
+
+▸ **get_m_hitFractions**(): [`btScalarArray`](Ammo.btScalarArray.md)
+
+#### Returns
+
+[`btScalarArray`](Ammo.btScalarArray.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:205](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L205)
+
+___
+
+### set\_m\_hitFractions
+
+▸ **set_m_hitFractions**(`m_hitFractions`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_hitFractions` | [`btScalarArray`](Ammo.btScalarArray.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:206](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L206)
diff --git a/docs/physics/classes/Ammo.Anchor.md b/docs/physics/classes/Ammo.Anchor.md
new file mode 100644
index 00000000..27b4e2be
--- /dev/null
+++ b/docs/physics/classes/Ammo.Anchor.md
@@ -0,0 +1,272 @@
+# Class: Anchor
+
+[Ammo](../modules/Ammo.md).Anchor
+
+### Constructors
+
+- [constructor](Ammo.Anchor.md#constructor)
+
+### Methods
+
+- [get\_m\_node](Ammo.Anchor.md#get_m_node)
+- [set\_m\_node](Ammo.Anchor.md#set_m_node)
+- [get\_m\_local](Ammo.Anchor.md#get_m_local)
+- [set\_m\_local](Ammo.Anchor.md#set_m_local)
+- [get\_m\_body](Ammo.Anchor.md#get_m_body)
+- [set\_m\_body](Ammo.Anchor.md#set_m_body)
+- [get\_m\_influence](Ammo.Anchor.md#get_m_influence)
+- [set\_m\_influence](Ammo.Anchor.md#set_m_influence)
+- [get\_m\_c0](Ammo.Anchor.md#get_m_c0)
+- [set\_m\_c0](Ammo.Anchor.md#set_m_c0)
+- [get\_m\_c1](Ammo.Anchor.md#get_m_c1)
+- [set\_m\_c1](Ammo.Anchor.md#set_m_c1)
+- [get\_m\_c2](Ammo.Anchor.md#get_m_c2)
+- [set\_m\_c2](Ammo.Anchor.md#set_m_c2)
+
+## Constructors
+
+### constructor
+
+• **new Anchor**(): [`Anchor`](Ammo.Anchor.md)
+
+#### Returns
+
+[`Anchor`](Ammo.Anchor.md)
+
+## Methods
+
+### get\_m\_node
+
+▸ **get_m_node**(): [`Node`](Ammo.Node.md)
+
+#### Returns
+
+[`Node`](Ammo.Node.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:950](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L950)
+
+___
+
+### set\_m\_node
+
+▸ **set_m_node**(`m_node`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_node` | [`Node`](Ammo.Node.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:951](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L951)
+
+___
+
+### get\_m\_local
+
+▸ **get_m_local**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:952](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L952)
+
+___
+
+### set\_m\_local
+
+▸ **set_m_local**(`m_local`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_local` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:953](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L953)
+
+___
+
+### get\_m\_body
+
+▸ **get_m_body**(): [`btRigidBody`](Ammo.btRigidBody.md)
+
+#### Returns
+
+[`btRigidBody`](Ammo.btRigidBody.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:954](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L954)
+
+___
+
+### set\_m\_body
+
+▸ **set_m_body**(`m_body`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_body` | [`btRigidBody`](Ammo.btRigidBody.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:955](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L955)
+
+___
+
+### get\_m\_influence
+
+▸ **get_m_influence**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:956](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L956)
+
+___
+
+### set\_m\_influence
+
+▸ **set_m_influence**(`m_influence`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_influence` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:957](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L957)
+
+___
+
+### get\_m\_c0
+
+▸ **get_m_c0**(): [`btMatrix3x3`](Ammo.btMatrix3x3.md)
+
+#### Returns
+
+[`btMatrix3x3`](Ammo.btMatrix3x3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:958](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L958)
+
+___
+
+### set\_m\_c0
+
+▸ **set_m_c0**(`m_c0`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_c0` | [`btMatrix3x3`](Ammo.btMatrix3x3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:959](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L959)
+
+___
+
+### get\_m\_c1
+
+▸ **get_m_c1**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:960](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L960)
+
+___
+
+### set\_m\_c1
+
+▸ **set_m_c1**(`m_c1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_c1` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:961](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L961)
+
+___
+
+### get\_m\_c2
+
+▸ **get_m_c2**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:962](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L962)
+
+___
+
+### set\_m\_c2
+
+▸ **set_m_c2**(`m_c2`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_c2` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:963](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L963)
diff --git a/docs/physics/classes/Ammo.ClosestConvexResultCallback.md b/docs/physics/classes/Ammo.ClosestConvexResultCallback.md
new file mode 100644
index 00000000..9da673b3
--- /dev/null
+++ b/docs/physics/classes/Ammo.ClosestConvexResultCallback.md
@@ -0,0 +1,336 @@
+# Class: ClosestConvexResultCallback
+
+[Ammo](../modules/Ammo.md).ClosestConvexResultCallback
+
+## Hierarchy
+
+- [`ConvexResultCallback`](Ammo.ConvexResultCallback.md)
+
+ ↳ **`ClosestConvexResultCallback`**
+
+### Constructors
+
+- [constructor](Ammo.ClosestConvexResultCallback.md#constructor)
+
+### Methods
+
+- [hasHit](Ammo.ClosestConvexResultCallback.md#hashit)
+- [get\_m\_collisionFilterGroup](Ammo.ClosestConvexResultCallback.md#get_m_collisionfiltergroup)
+- [set\_m\_collisionFilterGroup](Ammo.ClosestConvexResultCallback.md#set_m_collisionfiltergroup)
+- [get\_m\_collisionFilterMask](Ammo.ClosestConvexResultCallback.md#get_m_collisionfiltermask)
+- [set\_m\_collisionFilterMask](Ammo.ClosestConvexResultCallback.md#set_m_collisionfiltermask)
+- [get\_m\_closestHitFraction](Ammo.ClosestConvexResultCallback.md#get_m_closesthitfraction)
+- [set\_m\_closestHitFraction](Ammo.ClosestConvexResultCallback.md#set_m_closesthitfraction)
+- [get\_m\_convexFromWorld](Ammo.ClosestConvexResultCallback.md#get_m_convexfromworld)
+- [set\_m\_convexFromWorld](Ammo.ClosestConvexResultCallback.md#set_m_convexfromworld)
+- [get\_m\_convexToWorld](Ammo.ClosestConvexResultCallback.md#get_m_convextoworld)
+- [set\_m\_convexToWorld](Ammo.ClosestConvexResultCallback.md#set_m_convextoworld)
+- [get\_m\_hitNormalWorld](Ammo.ClosestConvexResultCallback.md#get_m_hitnormalworld)
+- [set\_m\_hitNormalWorld](Ammo.ClosestConvexResultCallback.md#set_m_hitnormalworld)
+- [get\_m\_hitPointWorld](Ammo.ClosestConvexResultCallback.md#get_m_hitpointworld)
+- [set\_m\_hitPointWorld](Ammo.ClosestConvexResultCallback.md#set_m_hitpointworld)
+
+## Constructors
+
+### constructor
+
+• **new ClosestConvexResultCallback**(`convexFromWorld`, `convexToWorld`): [`ClosestConvexResultCallback`](Ammo.ClosestConvexResultCallback.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `convexFromWorld` | [`btVector3`](Ammo.btVector3.md) |
+| `convexToWorld` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`ClosestConvexResultCallback`](Ammo.ClosestConvexResultCallback.md)
+
+#### Overrides
+
+[ConvexResultCallback](Ammo.ConvexResultCallback.md).[constructor](Ammo.ConvexResultCallback.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:262](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L262)
+
+## Methods
+
+### hasHit
+
+▸ **hasHit**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[ConvexResultCallback](Ammo.ConvexResultCallback.md).[hasHit](Ammo.ConvexResultCallback.md#hashit)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:253](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L253)
+
+___
+
+### get\_m\_collisionFilterGroup
+
+▸ **get_m_collisionFilterGroup**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[ConvexResultCallback](Ammo.ConvexResultCallback.md).[get_m_collisionFilterGroup](Ammo.ConvexResultCallback.md#get_m_collisionfiltergroup)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:254](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L254)
+
+___
+
+### set\_m\_collisionFilterGroup
+
+▸ **set_m_collisionFilterGroup**(`m_collisionFilterGroup`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_collisionFilterGroup` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ConvexResultCallback](Ammo.ConvexResultCallback.md).[set_m_collisionFilterGroup](Ammo.ConvexResultCallback.md#set_m_collisionfiltergroup)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:255](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L255)
+
+___
+
+### get\_m\_collisionFilterMask
+
+▸ **get_m_collisionFilterMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[ConvexResultCallback](Ammo.ConvexResultCallback.md).[get_m_collisionFilterMask](Ammo.ConvexResultCallback.md#get_m_collisionfiltermask)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:256](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L256)
+
+___
+
+### set\_m\_collisionFilterMask
+
+▸ **set_m_collisionFilterMask**(`m_collisionFilterMask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_collisionFilterMask` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ConvexResultCallback](Ammo.ConvexResultCallback.md).[set_m_collisionFilterMask](Ammo.ConvexResultCallback.md#set_m_collisionfiltermask)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:257](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L257)
+
+___
+
+### get\_m\_closestHitFraction
+
+▸ **get_m_closestHitFraction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[ConvexResultCallback](Ammo.ConvexResultCallback.md).[get_m_closestHitFraction](Ammo.ConvexResultCallback.md#get_m_closesthitfraction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:258](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L258)
+
+___
+
+### set\_m\_closestHitFraction
+
+▸ **set_m_closestHitFraction**(`m_closestHitFraction`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_closestHitFraction` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[ConvexResultCallback](Ammo.ConvexResultCallback.md).[set_m_closestHitFraction](Ammo.ConvexResultCallback.md#set_m_closesthitfraction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:259](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L259)
+
+___
+
+### get\_m\_convexFromWorld
+
+▸ **get_m_convexFromWorld**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:263](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L263)
+
+___
+
+### set\_m\_convexFromWorld
+
+▸ **set_m_convexFromWorld**(`m_convexFromWorld`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_convexFromWorld` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:264](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L264)
+
+___
+
+### get\_m\_convexToWorld
+
+▸ **get_m_convexToWorld**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:265](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L265)
+
+___
+
+### set\_m\_convexToWorld
+
+▸ **set_m_convexToWorld**(`m_convexToWorld`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_convexToWorld` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:266](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L266)
+
+___
+
+### get\_m\_hitNormalWorld
+
+▸ **get_m_hitNormalWorld**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:267](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L267)
+
+___
+
+### set\_m\_hitNormalWorld
+
+▸ **set_m_hitNormalWorld**(`m_hitNormalWorld`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_hitNormalWorld` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:268](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L268)
+
+___
+
+### get\_m\_hitPointWorld
+
+▸ **get_m_hitPointWorld**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:269](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L269)
+
+___
+
+### set\_m\_hitPointWorld
+
+▸ **set_m_hitPointWorld**(`m_hitPointWorld`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_hitPointWorld` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:270](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L270)
diff --git a/docs/physics/classes/Ammo.ClosestRayResultCallback.md b/docs/physics/classes/Ammo.ClosestRayResultCallback.md
new file mode 100644
index 00000000..3b758bc1
--- /dev/null
+++ b/docs/physics/classes/Ammo.ClosestRayResultCallback.md
@@ -0,0 +1,380 @@
+# Class: ClosestRayResultCallback
+
+[Ammo](../modules/Ammo.md).ClosestRayResultCallback
+
+## Hierarchy
+
+- [`RayResultCallback`](Ammo.RayResultCallback.md)
+
+ ↳ **`ClosestRayResultCallback`**
+
+### Constructors
+
+- [constructor](Ammo.ClosestRayResultCallback.md#constructor)
+
+### Methods
+
+- [hasHit](Ammo.ClosestRayResultCallback.md#hashit)
+- [get\_m\_collisionFilterGroup](Ammo.ClosestRayResultCallback.md#get_m_collisionfiltergroup)
+- [set\_m\_collisionFilterGroup](Ammo.ClosestRayResultCallback.md#set_m_collisionfiltergroup)
+- [get\_m\_collisionFilterMask](Ammo.ClosestRayResultCallback.md#get_m_collisionfiltermask)
+- [set\_m\_collisionFilterMask](Ammo.ClosestRayResultCallback.md#set_m_collisionfiltermask)
+- [get\_m\_closestHitFraction](Ammo.ClosestRayResultCallback.md#get_m_closesthitfraction)
+- [set\_m\_closestHitFraction](Ammo.ClosestRayResultCallback.md#set_m_closesthitfraction)
+- [get\_m\_collisionObject](Ammo.ClosestRayResultCallback.md#get_m_collisionobject)
+- [set\_m\_collisionObject](Ammo.ClosestRayResultCallback.md#set_m_collisionobject)
+- [get\_m\_rayFromWorld](Ammo.ClosestRayResultCallback.md#get_m_rayfromworld)
+- [set\_m\_rayFromWorld](Ammo.ClosestRayResultCallback.md#set_m_rayfromworld)
+- [get\_m\_rayToWorld](Ammo.ClosestRayResultCallback.md#get_m_raytoworld)
+- [set\_m\_rayToWorld](Ammo.ClosestRayResultCallback.md#set_m_raytoworld)
+- [get\_m\_hitNormalWorld](Ammo.ClosestRayResultCallback.md#get_m_hitnormalworld)
+- [set\_m\_hitNormalWorld](Ammo.ClosestRayResultCallback.md#set_m_hitnormalworld)
+- [get\_m\_hitPointWorld](Ammo.ClosestRayResultCallback.md#get_m_hitpointworld)
+- [set\_m\_hitPointWorld](Ammo.ClosestRayResultCallback.md#set_m_hitpointworld)
+
+## Constructors
+
+### constructor
+
+• **new ClosestRayResultCallback**(`from`, `to`): [`ClosestRayResultCallback`](Ammo.ClosestRayResultCallback.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | [`btVector3`](Ammo.btVector3.md) |
+| `to` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`ClosestRayResultCallback`](Ammo.ClosestRayResultCallback.md)
+
+#### Overrides
+
+[RayResultCallback](Ammo.RayResultCallback.md).[constructor](Ammo.RayResultCallback.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:175](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L175)
+
+## Methods
+
+### hasHit
+
+▸ **hasHit**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[hasHit](Ammo.RayResultCallback.md#hashit)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:164](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L164)
+
+___
+
+### get\_m\_collisionFilterGroup
+
+▸ **get_m_collisionFilterGroup**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[get_m_collisionFilterGroup](Ammo.RayResultCallback.md#get_m_collisionfiltergroup)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:165](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L165)
+
+___
+
+### set\_m\_collisionFilterGroup
+
+▸ **set_m_collisionFilterGroup**(`m_collisionFilterGroup`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_collisionFilterGroup` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[set_m_collisionFilterGroup](Ammo.RayResultCallback.md#set_m_collisionfiltergroup)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:166](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L166)
+
+___
+
+### get\_m\_collisionFilterMask
+
+▸ **get_m_collisionFilterMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[get_m_collisionFilterMask](Ammo.RayResultCallback.md#get_m_collisionfiltermask)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:167](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L167)
+
+___
+
+### set\_m\_collisionFilterMask
+
+▸ **set_m_collisionFilterMask**(`m_collisionFilterMask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_collisionFilterMask` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[set_m_collisionFilterMask](Ammo.RayResultCallback.md#set_m_collisionfiltermask)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:168](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L168)
+
+___
+
+### get\_m\_closestHitFraction
+
+▸ **get_m_closestHitFraction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[get_m_closestHitFraction](Ammo.RayResultCallback.md#get_m_closesthitfraction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:169](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L169)
+
+___
+
+### set\_m\_closestHitFraction
+
+▸ **set_m_closestHitFraction**(`m_closestHitFraction`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_closestHitFraction` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[set_m_closestHitFraction](Ammo.RayResultCallback.md#set_m_closesthitfraction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:170](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L170)
+
+___
+
+### get\_m\_collisionObject
+
+▸ **get_m_collisionObject**(): [`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Returns
+
+[`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[get_m_collisionObject](Ammo.RayResultCallback.md#get_m_collisionobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:171](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L171)
+
+___
+
+### set\_m\_collisionObject
+
+▸ **set_m_collisionObject**(`m_collisionObject`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_collisionObject` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[RayResultCallback](Ammo.RayResultCallback.md).[set_m_collisionObject](Ammo.RayResultCallback.md#set_m_collisionobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:172](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L172)
+
+___
+
+### get\_m\_rayFromWorld
+
+▸ **get_m_rayFromWorld**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:176](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L176)
+
+___
+
+### set\_m\_rayFromWorld
+
+▸ **set_m_rayFromWorld**(`m_rayFromWorld`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_rayFromWorld` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:177](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L177)
+
+___
+
+### get\_m\_rayToWorld
+
+▸ **get_m_rayToWorld**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:178](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L178)
+
+___
+
+### set\_m\_rayToWorld
+
+▸ **set_m_rayToWorld**(`m_rayToWorld`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_rayToWorld` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:179](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L179)
+
+___
+
+### get\_m\_hitNormalWorld
+
+▸ **get_m_hitNormalWorld**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:180](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L180)
+
+___
+
+### set\_m\_hitNormalWorld
+
+▸ **set_m_hitNormalWorld**(`m_hitNormalWorld`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_hitNormalWorld` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:181](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L181)
+
+___
+
+### get\_m\_hitPointWorld
+
+▸ **get_m_hitPointWorld**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:182](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L182)
+
+___
+
+### set\_m\_hitPointWorld
+
+▸ **set_m_hitPointWorld**(`m_hitPointWorld`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_hitPointWorld` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:183](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L183)
diff --git a/docs/physics/classes/Ammo.ConcreteContactResultCallback.md b/docs/physics/classes/Ammo.ConcreteContactResultCallback.md
new file mode 100644
index 00000000..5e3a4496
--- /dev/null
+++ b/docs/physics/classes/Ammo.ConcreteContactResultCallback.md
@@ -0,0 +1,51 @@
+# Class: ConcreteContactResultCallback
+
+[Ammo](../modules/Ammo.md).ConcreteContactResultCallback
+
+### Constructors
+
+- [constructor](Ammo.ConcreteContactResultCallback.md#constructor)
+
+### Methods
+
+- [addSingleResult](Ammo.ConcreteContactResultCallback.md#addsingleresult)
+
+## Constructors
+
+### constructor
+
+• **new ConcreteContactResultCallback**(): [`ConcreteContactResultCallback`](Ammo.ConcreteContactResultCallback.md)
+
+#### Returns
+
+[`ConcreteContactResultCallback`](Ammo.ConcreteContactResultCallback.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:230](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L230)
+
+## Methods
+
+### addSingleResult
+
+▸ **addSingleResult**(`cp`, `colObj0Wrap`, `partId0`, `index0`, `colObj1Wrap`, `partId1`, `index1`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cp` | [`btManifoldPoint`](Ammo.btManifoldPoint.md) |
+| `colObj0Wrap` | [`btCollisionObjectWrapper`](Ammo.btCollisionObjectWrapper.md) |
+| `partId0` | `number` |
+| `index0` | `number` |
+| `colObj1Wrap` | [`btCollisionObjectWrapper`](Ammo.btCollisionObjectWrapper.md) |
+| `partId1` | `number` |
+| `index1` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:231](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L231)
diff --git a/docs/physics/classes/Ammo.Config.md b/docs/physics/classes/Ammo.Config.md
new file mode 100644
index 00000000..b38749e8
--- /dev/null
+++ b/docs/physics/classes/Ammo.Config.md
@@ -0,0 +1,920 @@
+# Class: Config
+
+[Ammo](../modules/Ammo.md).Config
+
+### Constructors
+
+- [constructor](Ammo.Config.md#constructor)
+
+### Methods
+
+- [get\_kVCF](Ammo.Config.md#get_kvcf)
+- [set\_kVCF](Ammo.Config.md#set_kvcf)
+- [get\_kDP](Ammo.Config.md#get_kdp)
+- [set\_kDP](Ammo.Config.md#set_kdp)
+- [get\_kDG](Ammo.Config.md#get_kdg)
+- [set\_kDG](Ammo.Config.md#set_kdg)
+- [get\_kLF](Ammo.Config.md#get_klf)
+- [set\_kLF](Ammo.Config.md#set_klf)
+- [get\_kPR](Ammo.Config.md#get_kpr)
+- [set\_kPR](Ammo.Config.md#set_kpr)
+- [get\_kVC](Ammo.Config.md#get_kvc)
+- [set\_kVC](Ammo.Config.md#set_kvc)
+- [get\_kDF](Ammo.Config.md#get_kdf)
+- [set\_kDF](Ammo.Config.md#set_kdf)
+- [get\_kMT](Ammo.Config.md#get_kmt)
+- [set\_kMT](Ammo.Config.md#set_kmt)
+- [get\_kCHR](Ammo.Config.md#get_kchr)
+- [set\_kCHR](Ammo.Config.md#set_kchr)
+- [get\_kKHR](Ammo.Config.md#get_kkhr)
+- [set\_kKHR](Ammo.Config.md#set_kkhr)
+- [get\_kSHR](Ammo.Config.md#get_kshr)
+- [set\_kSHR](Ammo.Config.md#set_kshr)
+- [get\_kAHR](Ammo.Config.md#get_kahr)
+- [set\_kAHR](Ammo.Config.md#set_kahr)
+- [get\_kSRHR\_CL](Ammo.Config.md#get_ksrhr_cl)
+- [set\_kSRHR\_CL](Ammo.Config.md#set_ksrhr_cl)
+- [get\_kSKHR\_CL](Ammo.Config.md#get_kskhr_cl)
+- [set\_kSKHR\_CL](Ammo.Config.md#set_kskhr_cl)
+- [get\_kSSHR\_CL](Ammo.Config.md#get_ksshr_cl)
+- [set\_kSSHR\_CL](Ammo.Config.md#set_ksshr_cl)
+- [get\_kSR\_SPLT\_CL](Ammo.Config.md#get_ksr_splt_cl)
+- [set\_kSR\_SPLT\_CL](Ammo.Config.md#set_ksr_splt_cl)
+- [get\_kSK\_SPLT\_CL](Ammo.Config.md#get_ksk_splt_cl)
+- [set\_kSK\_SPLT\_CL](Ammo.Config.md#set_ksk_splt_cl)
+- [get\_kSS\_SPLT\_CL](Ammo.Config.md#get_kss_splt_cl)
+- [set\_kSS\_SPLT\_CL](Ammo.Config.md#set_kss_splt_cl)
+- [get\_maxvolume](Ammo.Config.md#get_maxvolume)
+- [set\_maxvolume](Ammo.Config.md#set_maxvolume)
+- [get\_timescale](Ammo.Config.md#get_timescale)
+- [set\_timescale](Ammo.Config.md#set_timescale)
+- [get\_viterations](Ammo.Config.md#get_viterations)
+- [set\_viterations](Ammo.Config.md#set_viterations)
+- [get\_piterations](Ammo.Config.md#get_piterations)
+- [set\_piterations](Ammo.Config.md#set_piterations)
+- [get\_diterations](Ammo.Config.md#get_diterations)
+- [set\_diterations](Ammo.Config.md#set_diterations)
+- [get\_citerations](Ammo.Config.md#get_citerations)
+- [set\_citerations](Ammo.Config.md#set_citerations)
+- [get\_collisions](Ammo.Config.md#get_collisions)
+- [set\_collisions](Ammo.Config.md#set_collisions)
+
+## Constructors
+
+### constructor
+
+• **new Config**(): [`Config`](Ammo.Config.md)
+
+#### Returns
+
+[`Config`](Ammo.Config.md)
+
+## Methods
+
+### get\_kVCF
+
+▸ **get_kVCF**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:973](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L973)
+
+___
+
+### set\_kVCF
+
+▸ **set_kVCF**(`kVCF`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kVCF` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:974](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L974)
+
+___
+
+### get\_kDP
+
+▸ **get_kDP**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:975](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L975)
+
+___
+
+### set\_kDP
+
+▸ **set_kDP**(`kDP`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kDP` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:976](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L976)
+
+___
+
+### get\_kDG
+
+▸ **get_kDG**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:977](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L977)
+
+___
+
+### set\_kDG
+
+▸ **set_kDG**(`kDG`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kDG` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:978](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L978)
+
+___
+
+### get\_kLF
+
+▸ **get_kLF**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:979](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L979)
+
+___
+
+### set\_kLF
+
+▸ **set_kLF**(`kLF`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kLF` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:980](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L980)
+
+___
+
+### get\_kPR
+
+▸ **get_kPR**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:981](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L981)
+
+___
+
+### set\_kPR
+
+▸ **set_kPR**(`kPR`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kPR` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:982](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L982)
+
+___
+
+### get\_kVC
+
+▸ **get_kVC**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:983](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L983)
+
+___
+
+### set\_kVC
+
+▸ **set_kVC**(`kVC`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kVC` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:984](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L984)
+
+___
+
+### get\_kDF
+
+▸ **get_kDF**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:985](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L985)
+
+___
+
+### set\_kDF
+
+▸ **set_kDF**(`kDF`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kDF` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:986](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L986)
+
+___
+
+### get\_kMT
+
+▸ **get_kMT**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:987](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L987)
+
+___
+
+### set\_kMT
+
+▸ **set_kMT**(`kMT`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kMT` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:988](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L988)
+
+___
+
+### get\_kCHR
+
+▸ **get_kCHR**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:989](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L989)
+
+___
+
+### set\_kCHR
+
+▸ **set_kCHR**(`kCHR`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kCHR` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:990](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L990)
+
+___
+
+### get\_kKHR
+
+▸ **get_kKHR**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:991](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L991)
+
+___
+
+### set\_kKHR
+
+▸ **set_kKHR**(`kKHR`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kKHR` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:992](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L992)
+
+___
+
+### get\_kSHR
+
+▸ **get_kSHR**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:993](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L993)
+
+___
+
+### set\_kSHR
+
+▸ **set_kSHR**(`kSHR`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kSHR` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:994](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L994)
+
+___
+
+### get\_kAHR
+
+▸ **get_kAHR**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:995](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L995)
+
+___
+
+### set\_kAHR
+
+▸ **set_kAHR**(`kAHR`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kAHR` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:996](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L996)
+
+___
+
+### get\_kSRHR\_CL
+
+▸ **get_kSRHR_CL**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:997](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L997)
+
+___
+
+### set\_kSRHR\_CL
+
+▸ **set_kSRHR_CL**(`kSRHR_CL`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kSRHR_CL` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:998](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L998)
+
+___
+
+### get\_kSKHR\_CL
+
+▸ **get_kSKHR_CL**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:999](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L999)
+
+___
+
+### set\_kSKHR\_CL
+
+▸ **set_kSKHR_CL**(`kSKHR_CL`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kSKHR_CL` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1000](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1000)
+
+___
+
+### get\_kSSHR\_CL
+
+▸ **get_kSSHR_CL**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1001](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1001)
+
+___
+
+### set\_kSSHR\_CL
+
+▸ **set_kSSHR_CL**(`kSSHR_CL`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kSSHR_CL` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1002](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1002)
+
+___
+
+### get\_kSR\_SPLT\_CL
+
+▸ **get_kSR_SPLT_CL**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1003](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1003)
+
+___
+
+### set\_kSR\_SPLT\_CL
+
+▸ **set_kSR_SPLT_CL**(`kSR_SPLT_CL`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kSR_SPLT_CL` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1004](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1004)
+
+___
+
+### get\_kSK\_SPLT\_CL
+
+▸ **get_kSK_SPLT_CL**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1005](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1005)
+
+___
+
+### set\_kSK\_SPLT\_CL
+
+▸ **set_kSK_SPLT_CL**(`kSK_SPLT_CL`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kSK_SPLT_CL` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1006](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1006)
+
+___
+
+### get\_kSS\_SPLT\_CL
+
+▸ **get_kSS_SPLT_CL**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1007](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1007)
+
+___
+
+### set\_kSS\_SPLT\_CL
+
+▸ **set_kSS_SPLT_CL**(`kSS_SPLT_CL`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `kSS_SPLT_CL` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1008](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1008)
+
+___
+
+### get\_maxvolume
+
+▸ **get_maxvolume**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1009](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1009)
+
+___
+
+### set\_maxvolume
+
+▸ **set_maxvolume**(`maxvolume`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `maxvolume` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1010](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1010)
+
+___
+
+### get\_timescale
+
+▸ **get_timescale**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1011](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1011)
+
+___
+
+### set\_timescale
+
+▸ **set_timescale**(`timescale`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `timescale` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1012](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1012)
+
+___
+
+### get\_viterations
+
+▸ **get_viterations**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1013](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1013)
+
+___
+
+### set\_viterations
+
+▸ **set_viterations**(`viterations`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `viterations` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1014](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1014)
+
+___
+
+### get\_piterations
+
+▸ **get_piterations**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1015](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1015)
+
+___
+
+### set\_piterations
+
+▸ **set_piterations**(`piterations`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `piterations` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1016](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1016)
+
+___
+
+### get\_diterations
+
+▸ **get_diterations**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1017](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1017)
+
+___
+
+### set\_diterations
+
+▸ **set_diterations**(`diterations`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `diterations` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1018](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1018)
+
+___
+
+### get\_citerations
+
+▸ **get_citerations**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1019](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1019)
+
+___
+
+### set\_citerations
+
+▸ **set_citerations**(`citerations`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `citerations` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1020](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1020)
+
+___
+
+### get\_collisions
+
+▸ **get_collisions**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1021](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1021)
+
+___
+
+### set\_collisions
+
+▸ **set_collisions**(`collisions`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisions` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1022](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1022)
diff --git a/docs/physics/classes/Ammo.ContactResultCallback.md b/docs/physics/classes/Ammo.ContactResultCallback.md
new file mode 100644
index 00000000..b1ba63eb
--- /dev/null
+++ b/docs/physics/classes/Ammo.ContactResultCallback.md
@@ -0,0 +1,47 @@
+# Class: ContactResultCallback
+
+[Ammo](../modules/Ammo.md).ContactResultCallback
+
+### Constructors
+
+- [constructor](Ammo.ContactResultCallback.md#constructor)
+
+### Methods
+
+- [addSingleResult](Ammo.ContactResultCallback.md#addsingleresult)
+
+## Constructors
+
+### constructor
+
+• **new ContactResultCallback**(): [`ContactResultCallback`](Ammo.ContactResultCallback.md)
+
+#### Returns
+
+[`ContactResultCallback`](Ammo.ContactResultCallback.md)
+
+## Methods
+
+### addSingleResult
+
+▸ **addSingleResult**(`cp`, `colObj0Wrap`, `partId0`, `index0`, `colObj1Wrap`, `partId1`, `index1`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cp` | [`btManifoldPoint`](Ammo.btManifoldPoint.md) |
+| `colObj0Wrap` | [`btCollisionObjectWrapper`](Ammo.btCollisionObjectWrapper.md) |
+| `partId0` | `number` |
+| `index0` | `number` |
+| `colObj1Wrap` | [`btCollisionObjectWrapper`](Ammo.btCollisionObjectWrapper.md) |
+| `partId1` | `number` |
+| `index1` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:227](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L227)
diff --git a/docs/physics/classes/Ammo.ConvexResultCallback.md b/docs/physics/classes/Ammo.ConvexResultCallback.md
new file mode 100644
index 00000000..d7449f06
--- /dev/null
+++ b/docs/physics/classes/Ammo.ConvexResultCallback.md
@@ -0,0 +1,149 @@
+# Class: ConvexResultCallback
+
+[Ammo](../modules/Ammo.md).ConvexResultCallback
+
+## Hierarchy
+
+- **`ConvexResultCallback`**
+
+ ↳ [`ClosestConvexResultCallback`](Ammo.ClosestConvexResultCallback.md)
+
+### Constructors
+
+- [constructor](Ammo.ConvexResultCallback.md#constructor)
+
+### Methods
+
+- [hasHit](Ammo.ConvexResultCallback.md#hashit)
+- [get\_m\_collisionFilterGroup](Ammo.ConvexResultCallback.md#get_m_collisionfiltergroup)
+- [set\_m\_collisionFilterGroup](Ammo.ConvexResultCallback.md#set_m_collisionfiltergroup)
+- [get\_m\_collisionFilterMask](Ammo.ConvexResultCallback.md#get_m_collisionfiltermask)
+- [set\_m\_collisionFilterMask](Ammo.ConvexResultCallback.md#set_m_collisionfiltermask)
+- [get\_m\_closestHitFraction](Ammo.ConvexResultCallback.md#get_m_closesthitfraction)
+- [set\_m\_closestHitFraction](Ammo.ConvexResultCallback.md#set_m_closesthitfraction)
+
+## Constructors
+
+### constructor
+
+• **new ConvexResultCallback**(): [`ConvexResultCallback`](Ammo.ConvexResultCallback.md)
+
+#### Returns
+
+[`ConvexResultCallback`](Ammo.ConvexResultCallback.md)
+
+## Methods
+
+### hasHit
+
+▸ **hasHit**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:253](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L253)
+
+___
+
+### get\_m\_collisionFilterGroup
+
+▸ **get_m_collisionFilterGroup**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:254](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L254)
+
+___
+
+### set\_m\_collisionFilterGroup
+
+▸ **set_m_collisionFilterGroup**(`m_collisionFilterGroup`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_collisionFilterGroup` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:255](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L255)
+
+___
+
+### get\_m\_collisionFilterMask
+
+▸ **get_m_collisionFilterMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:256](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L256)
+
+___
+
+### set\_m\_collisionFilterMask
+
+▸ **set_m_collisionFilterMask**(`m_collisionFilterMask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_collisionFilterMask` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:257](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L257)
+
+___
+
+### get\_m\_closestHitFraction
+
+▸ **get_m_closestHitFraction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:258](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L258)
+
+___
+
+### set\_m\_closestHitFraction
+
+▸ **set_m_closestHitFraction**(`m_closestHitFraction`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_closestHitFraction` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:259](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L259)
diff --git a/docs/physics/classes/Ammo.DebugDrawer.md b/docs/physics/classes/Ammo.DebugDrawer.md
new file mode 100644
index 00000000..9584a9d9
--- /dev/null
+++ b/docs/physics/classes/Ammo.DebugDrawer.md
@@ -0,0 +1,151 @@
+# Class: DebugDrawer
+
+[Ammo](../modules/Ammo.md).DebugDrawer
+
+### Constructors
+
+- [constructor](Ammo.DebugDrawer.md#constructor)
+
+### Methods
+
+- [drawLine](Ammo.DebugDrawer.md#drawline)
+- [drawContactPoint](Ammo.DebugDrawer.md#drawcontactpoint)
+- [reportErrorWarning](Ammo.DebugDrawer.md#reporterrorwarning)
+- [draw3dText](Ammo.DebugDrawer.md#draw3dtext)
+- [setDebugMode](Ammo.DebugDrawer.md#setdebugmode)
+- [getDebugMode](Ammo.DebugDrawer.md#getdebugmode)
+
+## Constructors
+
+### constructor
+
+• **new DebugDrawer**(): [`DebugDrawer`](Ammo.DebugDrawer.md)
+
+#### Returns
+
+[`DebugDrawer`](Ammo.DebugDrawer.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:35](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L35)
+
+## Methods
+
+### drawLine
+
+▸ **drawLine**(`from`, `to`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | [`btVector3`](Ammo.btVector3.md) |
+| `to` | [`btVector3`](Ammo.btVector3.md) |
+| `color` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:36](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L36)
+
+___
+
+### drawContactPoint
+
+▸ **drawContactPoint**(`pointOnB`, `normalOnB`, `distance`, `lifeTime`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pointOnB` | [`btVector3`](Ammo.btVector3.md) |
+| `normalOnB` | [`btVector3`](Ammo.btVector3.md) |
+| `distance` | `number` |
+| `lifeTime` | `number` |
+| `color` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:37](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L37)
+
+___
+
+### reportErrorWarning
+
+▸ **reportErrorWarning**(`warningString`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `warningString` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:38](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L38)
+
+___
+
+### draw3dText
+
+▸ **draw3dText**(`location`, `textString`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `location` | [`btVector3`](Ammo.btVector3.md) |
+| `textString` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:39](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L39)
+
+___
+
+### setDebugMode
+
+▸ **setDebugMode**(`debugMode`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `debugMode` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:40](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L40)
+
+___
+
+### getDebugMode
+
+▸ **getDebugMode**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:41](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L41)
diff --git a/docs/physics/classes/Ammo.Face.md b/docs/physics/classes/Ammo.Face.md
new file mode 100644
index 00000000..20db3ba6
--- /dev/null
+++ b/docs/physics/classes/Ammo.Face.md
@@ -0,0 +1,128 @@
+# Class: Face
+
+[Ammo](../modules/Ammo.md).Face
+
+### Constructors
+
+- [constructor](Ammo.Face.md#constructor)
+
+### Methods
+
+- [get\_m\_n](Ammo.Face.md#get_m_n)
+- [set\_m\_n](Ammo.Face.md#set_m_n)
+- [get\_m\_normal](Ammo.Face.md#get_m_normal)
+- [set\_m\_normal](Ammo.Face.md#set_m_normal)
+- [get\_m\_ra](Ammo.Face.md#get_m_ra)
+- [set\_m\_ra](Ammo.Face.md#set_m_ra)
+
+## Constructors
+
+### constructor
+
+• **new Face**(): [`Face`](Ammo.Face.md)
+
+#### Returns
+
+[`Face`](Ammo.Face.md)
+
+## Methods
+
+### get\_m\_n
+
+▸ **get_m_n**(): readonly [`Node`](Ammo.Node.md)[]
+
+#### Returns
+
+readonly [`Node`](Ammo.Node.md)[]
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:904](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L904)
+
+___
+
+### set\_m\_n
+
+▸ **set_m_n**(`m_n`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_n` | readonly [`Node`](Ammo.Node.md)[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:905](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L905)
+
+___
+
+### get\_m\_normal
+
+▸ **get_m_normal**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:906](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L906)
+
+___
+
+### set\_m\_normal
+
+▸ **set_m_normal**(`m_normal`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_normal` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:907](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L907)
+
+___
+
+### get\_m\_ra
+
+▸ **get_m_ra**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:908](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L908)
+
+___
+
+### set\_m\_ra
+
+▸ **set_m_ra**(`m_ra`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_ra` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:909](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L909)
diff --git a/docs/physics/classes/Ammo.LocalConvexResult.md b/docs/physics/classes/Ammo.LocalConvexResult.md
new file mode 100644
index 00000000..cd577e12
--- /dev/null
+++ b/docs/physics/classes/Ammo.LocalConvexResult.md
@@ -0,0 +1,214 @@
+# Class: LocalConvexResult
+
+[Ammo](../modules/Ammo.md).LocalConvexResult
+
+### Constructors
+
+- [constructor](Ammo.LocalConvexResult.md#constructor)
+
+### Methods
+
+- [get\_m\_hitCollisionObject](Ammo.LocalConvexResult.md#get_m_hitcollisionobject)
+- [set\_m\_hitCollisionObject](Ammo.LocalConvexResult.md#set_m_hitcollisionobject)
+- [get\_m\_localShapeInfo](Ammo.LocalConvexResult.md#get_m_localshapeinfo)
+- [set\_m\_localShapeInfo](Ammo.LocalConvexResult.md#set_m_localshapeinfo)
+- [get\_m\_hitNormalLocal](Ammo.LocalConvexResult.md#get_m_hitnormallocal)
+- [set\_m\_hitNormalLocal](Ammo.LocalConvexResult.md#set_m_hitnormallocal)
+- [get\_m\_hitPointLocal](Ammo.LocalConvexResult.md#get_m_hitpointlocal)
+- [set\_m\_hitPointLocal](Ammo.LocalConvexResult.md#set_m_hitpointlocal)
+- [get\_m\_hitFraction](Ammo.LocalConvexResult.md#get_m_hitfraction)
+- [set\_m\_hitFraction](Ammo.LocalConvexResult.md#set_m_hitfraction)
+
+## Constructors
+
+### constructor
+
+• **new LocalConvexResult**(`hitCollisionObject`, `localShapeInfo`, `hitNormalLocal`, `hitPointLocal`, `hitFraction`): [`LocalConvexResult`](Ammo.LocalConvexResult.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `hitCollisionObject` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+| `localShapeInfo` | [`LocalShapeInfo`](Ammo.LocalShapeInfo.md) |
+| `hitNormalLocal` | [`btVector3`](Ammo.btVector3.md) |
+| `hitPointLocal` | [`btVector3`](Ammo.btVector3.md) |
+| `hitFraction` | `number` |
+
+#### Returns
+
+[`LocalConvexResult`](Ammo.LocalConvexResult.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:240](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L240)
+
+## Methods
+
+### get\_m\_hitCollisionObject
+
+▸ **get_m_hitCollisionObject**(): [`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Returns
+
+[`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:241](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L241)
+
+___
+
+### set\_m\_hitCollisionObject
+
+▸ **set_m_hitCollisionObject**(`m_hitCollisionObject`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_hitCollisionObject` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:242](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L242)
+
+___
+
+### get\_m\_localShapeInfo
+
+▸ **get_m_localShapeInfo**(): [`LocalShapeInfo`](Ammo.LocalShapeInfo.md)
+
+#### Returns
+
+[`LocalShapeInfo`](Ammo.LocalShapeInfo.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:243](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L243)
+
+___
+
+### set\_m\_localShapeInfo
+
+▸ **set_m_localShapeInfo**(`m_localShapeInfo`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_localShapeInfo` | [`LocalShapeInfo`](Ammo.LocalShapeInfo.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:244](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L244)
+
+___
+
+### get\_m\_hitNormalLocal
+
+▸ **get_m_hitNormalLocal**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:245](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L245)
+
+___
+
+### set\_m\_hitNormalLocal
+
+▸ **set_m_hitNormalLocal**(`m_hitNormalLocal`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_hitNormalLocal` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:246](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L246)
+
+___
+
+### get\_m\_hitPointLocal
+
+▸ **get_m_hitPointLocal**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:247](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L247)
+
+___
+
+### set\_m\_hitPointLocal
+
+▸ **set_m_hitPointLocal**(`m_hitPointLocal`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_hitPointLocal` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:248](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L248)
+
+___
+
+### get\_m\_hitFraction
+
+▸ **get_m_hitFraction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:249](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L249)
+
+___
+
+### set\_m\_hitFraction
+
+▸ **set_m_hitFraction**(`m_hitFraction`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_hitFraction` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:250](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L250)
diff --git a/docs/physics/classes/Ammo.LocalShapeInfo.md b/docs/physics/classes/Ammo.LocalShapeInfo.md
new file mode 100644
index 00000000..60033591
--- /dev/null
+++ b/docs/physics/classes/Ammo.LocalShapeInfo.md
@@ -0,0 +1,92 @@
+# Class: LocalShapeInfo
+
+[Ammo](../modules/Ammo.md).LocalShapeInfo
+
+### Constructors
+
+- [constructor](Ammo.LocalShapeInfo.md#constructor)
+
+### Methods
+
+- [get\_m\_shapePart](Ammo.LocalShapeInfo.md#get_m_shapepart)
+- [set\_m\_shapePart](Ammo.LocalShapeInfo.md#set_m_shapepart)
+- [get\_m\_triangleIndex](Ammo.LocalShapeInfo.md#get_m_triangleindex)
+- [set\_m\_triangleIndex](Ammo.LocalShapeInfo.md#set_m_triangleindex)
+
+## Constructors
+
+### constructor
+
+• **new LocalShapeInfo**(): [`LocalShapeInfo`](Ammo.LocalShapeInfo.md)
+
+#### Returns
+
+[`LocalShapeInfo`](Ammo.LocalShapeInfo.md)
+
+## Methods
+
+### get\_m\_shapePart
+
+▸ **get_m_shapePart**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:234](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L234)
+
+___
+
+### set\_m\_shapePart
+
+▸ **set_m_shapePart**(`m_shapePart`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_shapePart` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:235](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L235)
+
+___
+
+### get\_m\_triangleIndex
+
+▸ **get_m_triangleIndex**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:236](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L236)
+
+___
+
+### set\_m\_triangleIndex
+
+▸ **set_m_triangleIndex**(`m_triangleIndex`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_triangleIndex` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:237](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L237)
diff --git a/docs/physics/classes/Ammo.Material.md b/docs/physics/classes/Ammo.Material.md
new file mode 100644
index 00000000..e30feac7
--- /dev/null
+++ b/docs/physics/classes/Ammo.Material.md
@@ -0,0 +1,164 @@
+# Class: Material
+
+[Ammo](../modules/Ammo.md).Material
+
+### Constructors
+
+- [constructor](Ammo.Material.md#constructor)
+
+### Methods
+
+- [get\_m\_kLST](Ammo.Material.md#get_m_klst)
+- [set\_m\_kLST](Ammo.Material.md#set_m_klst)
+- [get\_m\_kAST](Ammo.Material.md#get_m_kast)
+- [set\_m\_kAST](Ammo.Material.md#set_m_kast)
+- [get\_m\_kVST](Ammo.Material.md#get_m_kvst)
+- [set\_m\_kVST](Ammo.Material.md#set_m_kvst)
+- [get\_m\_flags](Ammo.Material.md#get_m_flags)
+- [set\_m\_flags](Ammo.Material.md#set_m_flags)
+
+## Constructors
+
+### constructor
+
+• **new Material**(): [`Material`](Ammo.Material.md)
+
+#### Returns
+
+[`Material`](Ammo.Material.md)
+
+## Methods
+
+### get\_m\_kLST
+
+▸ **get_m_kLST**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:936](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L936)
+
+___
+
+### set\_m\_kLST
+
+▸ **set_m_kLST**(`m_kLST`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_kLST` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:937](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L937)
+
+___
+
+### get\_m\_kAST
+
+▸ **get_m_kAST**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:938](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L938)
+
+___
+
+### set\_m\_kAST
+
+▸ **set_m_kAST**(`m_kAST`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_kAST` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:939](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L939)
+
+___
+
+### get\_m\_kVST
+
+▸ **get_m_kVST**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:940](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L940)
+
+___
+
+### set\_m\_kVST
+
+▸ **set_m_kVST**(`m_kVST`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_kVST` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:941](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L941)
+
+___
+
+### get\_m\_flags
+
+▸ **get_m_flags**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:942](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L942)
+
+___
+
+### set\_m\_flags
+
+▸ **set_m_flags**(`m_flags`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_flags` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:943](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L943)
diff --git a/docs/physics/classes/Ammo.Node.md b/docs/physics/classes/Ammo.Node.md
new file mode 100644
index 00000000..884e0f55
--- /dev/null
+++ b/docs/physics/classes/Ammo.Node.md
@@ -0,0 +1,272 @@
+# Class: Node
+
+[Ammo](../modules/Ammo.md).Node
+
+### Constructors
+
+- [constructor](Ammo.Node.md#constructor)
+
+### Methods
+
+- [get\_m\_x](Ammo.Node.md#get_m_x)
+- [set\_m\_x](Ammo.Node.md#set_m_x)
+- [get\_m\_q](Ammo.Node.md#get_m_q)
+- [set\_m\_q](Ammo.Node.md#set_m_q)
+- [get\_m\_v](Ammo.Node.md#get_m_v)
+- [set\_m\_v](Ammo.Node.md#set_m_v)
+- [get\_m\_f](Ammo.Node.md#get_m_f)
+- [set\_m\_f](Ammo.Node.md#set_m_f)
+- [get\_m\_n](Ammo.Node.md#get_m_n)
+- [set\_m\_n](Ammo.Node.md#set_m_n)
+- [get\_m\_im](Ammo.Node.md#get_m_im)
+- [set\_m\_im](Ammo.Node.md#set_m_im)
+- [get\_m\_area](Ammo.Node.md#get_m_area)
+- [set\_m\_area](Ammo.Node.md#set_m_area)
+
+## Constructors
+
+### constructor
+
+• **new Node**(): [`Node`](Ammo.Node.md)
+
+#### Returns
+
+[`Node`](Ammo.Node.md)
+
+## Methods
+
+### get\_m\_x
+
+▸ **get_m_x**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:916](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L916)
+
+___
+
+### set\_m\_x
+
+▸ **set_m_x**(`m_x`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_x` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:917](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L917)
+
+___
+
+### get\_m\_q
+
+▸ **get_m_q**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:918](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L918)
+
+___
+
+### set\_m\_q
+
+▸ **set_m_q**(`m_q`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_q` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:919](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L919)
+
+___
+
+### get\_m\_v
+
+▸ **get_m_v**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:920](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L920)
+
+___
+
+### set\_m\_v
+
+▸ **set_m_v**(`m_v`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_v` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:921](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L921)
+
+___
+
+### get\_m\_f
+
+▸ **get_m_f**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:922](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L922)
+
+___
+
+### set\_m\_f
+
+▸ **set_m_f**(`m_f`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_f` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:923](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L923)
+
+___
+
+### get\_m\_n
+
+▸ **get_m_n**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:924](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L924)
+
+___
+
+### set\_m\_n
+
+▸ **set_m_n**(`m_n`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_n` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:925](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L925)
+
+___
+
+### get\_m\_im
+
+▸ **get_m_im**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:926](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L926)
+
+___
+
+### set\_m\_im
+
+▸ **set_m_im**(`m_im`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_im` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:927](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L927)
+
+___
+
+### get\_m\_area
+
+▸ **get_m_area**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:928](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L928)
+
+___
+
+### set\_m\_area
+
+▸ **set_m_area**(`m_area`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_area` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:929](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L929)
diff --git a/docs/physics/classes/Ammo.RayResultCallback.md b/docs/physics/classes/Ammo.RayResultCallback.md
new file mode 100644
index 00000000..cda64eae
--- /dev/null
+++ b/docs/physics/classes/Ammo.RayResultCallback.md
@@ -0,0 +1,187 @@
+# Class: RayResultCallback
+
+[Ammo](../modules/Ammo.md).RayResultCallback
+
+## Hierarchy
+
+- **`RayResultCallback`**
+
+ ↳ [`ClosestRayResultCallback`](Ammo.ClosestRayResultCallback.md)
+
+ ↳ [`AllHitsRayResultCallback`](Ammo.AllHitsRayResultCallback.md)
+
+### Constructors
+
+- [constructor](Ammo.RayResultCallback.md#constructor)
+
+### Methods
+
+- [hasHit](Ammo.RayResultCallback.md#hashit)
+- [get\_m\_collisionFilterGroup](Ammo.RayResultCallback.md#get_m_collisionfiltergroup)
+- [set\_m\_collisionFilterGroup](Ammo.RayResultCallback.md#set_m_collisionfiltergroup)
+- [get\_m\_collisionFilterMask](Ammo.RayResultCallback.md#get_m_collisionfiltermask)
+- [set\_m\_collisionFilterMask](Ammo.RayResultCallback.md#set_m_collisionfiltermask)
+- [get\_m\_closestHitFraction](Ammo.RayResultCallback.md#get_m_closesthitfraction)
+- [set\_m\_closestHitFraction](Ammo.RayResultCallback.md#set_m_closesthitfraction)
+- [get\_m\_collisionObject](Ammo.RayResultCallback.md#get_m_collisionobject)
+- [set\_m\_collisionObject](Ammo.RayResultCallback.md#set_m_collisionobject)
+
+## Constructors
+
+### constructor
+
+• **new RayResultCallback**(): [`RayResultCallback`](Ammo.RayResultCallback.md)
+
+#### Returns
+
+[`RayResultCallback`](Ammo.RayResultCallback.md)
+
+## Methods
+
+### hasHit
+
+▸ **hasHit**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:164](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L164)
+
+___
+
+### get\_m\_collisionFilterGroup
+
+▸ **get_m_collisionFilterGroup**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:165](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L165)
+
+___
+
+### set\_m\_collisionFilterGroup
+
+▸ **set_m_collisionFilterGroup**(`m_collisionFilterGroup`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_collisionFilterGroup` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:166](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L166)
+
+___
+
+### get\_m\_collisionFilterMask
+
+▸ **get_m_collisionFilterMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:167](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L167)
+
+___
+
+### set\_m\_collisionFilterMask
+
+▸ **set_m_collisionFilterMask**(`m_collisionFilterMask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_collisionFilterMask` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:168](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L168)
+
+___
+
+### get\_m\_closestHitFraction
+
+▸ **get_m_closestHitFraction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:169](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L169)
+
+___
+
+### set\_m\_closestHitFraction
+
+▸ **set_m_closestHitFraction**(`m_closestHitFraction`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_closestHitFraction` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:170](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L170)
+
+___
+
+### get\_m\_collisionObject
+
+▸ **get_m_collisionObject**(): [`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Returns
+
+[`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:171](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L171)
+
+___
+
+### set\_m\_collisionObject
+
+▸ **set_m_collisionObject**(`m_collisionObject`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_collisionObject` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:172](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L172)
diff --git a/docs/physics/classes/Ammo.RaycastInfo.md b/docs/physics/classes/Ammo.RaycastInfo.md
new file mode 100644
index 00000000..f0615f5b
--- /dev/null
+++ b/docs/physics/classes/Ammo.RaycastInfo.md
@@ -0,0 +1,308 @@
+# Class: RaycastInfo
+
+[Ammo](../modules/Ammo.md).RaycastInfo
+
+### Constructors
+
+- [constructor](Ammo.RaycastInfo.md#constructor)
+
+### Methods
+
+- [get\_m\_contactNormalWS](Ammo.RaycastInfo.md#get_m_contactnormalws)
+- [set\_m\_contactNormalWS](Ammo.RaycastInfo.md#set_m_contactnormalws)
+- [get\_m\_contactPointWS](Ammo.RaycastInfo.md#get_m_contactpointws)
+- [set\_m\_contactPointWS](Ammo.RaycastInfo.md#set_m_contactpointws)
+- [get\_m\_suspensionLength](Ammo.RaycastInfo.md#get_m_suspensionlength)
+- [set\_m\_suspensionLength](Ammo.RaycastInfo.md#set_m_suspensionlength)
+- [get\_m\_hardPointWS](Ammo.RaycastInfo.md#get_m_hardpointws)
+- [set\_m\_hardPointWS](Ammo.RaycastInfo.md#set_m_hardpointws)
+- [get\_m\_wheelDirectionWS](Ammo.RaycastInfo.md#get_m_wheeldirectionws)
+- [set\_m\_wheelDirectionWS](Ammo.RaycastInfo.md#set_m_wheeldirectionws)
+- [get\_m\_wheelAxleWS](Ammo.RaycastInfo.md#get_m_wheelaxlews)
+- [set\_m\_wheelAxleWS](Ammo.RaycastInfo.md#set_m_wheelaxlews)
+- [get\_m\_isInContact](Ammo.RaycastInfo.md#get_m_isincontact)
+- [set\_m\_isInContact](Ammo.RaycastInfo.md#set_m_isincontact)
+- [get\_m\_groundObject](Ammo.RaycastInfo.md#get_m_groundobject)
+- [set\_m\_groundObject](Ammo.RaycastInfo.md#set_m_groundobject)
+
+## Constructors
+
+### constructor
+
+• **new RaycastInfo**(): [`RaycastInfo`](Ammo.RaycastInfo.md)
+
+#### Returns
+
+[`RaycastInfo`](Ammo.RaycastInfo.md)
+
+## Methods
+
+### get\_m\_contactNormalWS
+
+▸ **get_m_contactNormalWS**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:721](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L721)
+
+___
+
+### set\_m\_contactNormalWS
+
+▸ **set_m_contactNormalWS**(`m_contactNormalWS`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_contactNormalWS` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:722](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L722)
+
+___
+
+### get\_m\_contactPointWS
+
+▸ **get_m_contactPointWS**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:723](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L723)
+
+___
+
+### set\_m\_contactPointWS
+
+▸ **set_m_contactPointWS**(`m_contactPointWS`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_contactPointWS` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:724](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L724)
+
+___
+
+### get\_m\_suspensionLength
+
+▸ **get_m_suspensionLength**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:725](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L725)
+
+___
+
+### set\_m\_suspensionLength
+
+▸ **set_m_suspensionLength**(`m_suspensionLength`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_suspensionLength` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:726](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L726)
+
+___
+
+### get\_m\_hardPointWS
+
+▸ **get_m_hardPointWS**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:727](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L727)
+
+___
+
+### set\_m\_hardPointWS
+
+▸ **set_m_hardPointWS**(`m_hardPointWS`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_hardPointWS` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:728](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L728)
+
+___
+
+### get\_m\_wheelDirectionWS
+
+▸ **get_m_wheelDirectionWS**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:729](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L729)
+
+___
+
+### set\_m\_wheelDirectionWS
+
+▸ **set_m_wheelDirectionWS**(`m_wheelDirectionWS`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_wheelDirectionWS` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:730](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L730)
+
+___
+
+### get\_m\_wheelAxleWS
+
+▸ **get_m_wheelAxleWS**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:731](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L731)
+
+___
+
+### set\_m\_wheelAxleWS
+
+▸ **set_m_wheelAxleWS**(`m_wheelAxleWS`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_wheelAxleWS` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:732](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L732)
+
+___
+
+### get\_m\_isInContact
+
+▸ **get_m_isInContact**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:733](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L733)
+
+___
+
+### set\_m\_isInContact
+
+▸ **set_m_isInContact**(`m_isInContact`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_isInContact` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:734](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L734)
+
+___
+
+### get\_m\_groundObject
+
+▸ **get_m_groundObject**(): `any`
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:735](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L735)
+
+___
+
+### set\_m\_groundObject
+
+▸ **set_m_groundObject**(`m_groundObject`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_groundObject` | `any` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:736](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L736)
diff --git a/docs/physics/classes/Ammo.btActionInterface.md b/docs/physics/classes/Ammo.btActionInterface.md
new file mode 100644
index 00000000..b9e070ed
--- /dev/null
+++ b/docs/physics/classes/Ammo.btActionInterface.md
@@ -0,0 +1,50 @@
+# Class: btActionInterface
+
+[Ammo](../modules/Ammo.md).btActionInterface
+
+## Hierarchy
+
+- **`btActionInterface`**
+
+ ↳ [`btKinematicCharacterController`](Ammo.btKinematicCharacterController.md)
+
+ ↳ [`btRaycastVehicle`](Ammo.btRaycastVehicle.md)
+
+### Constructors
+
+- [constructor](Ammo.btActionInterface.md#constructor)
+
+### Methods
+
+- [updateAction](Ammo.btActionInterface.md#updateaction)
+
+## Constructors
+
+### constructor
+
+• **new btActionInterface**(): [`btActionInterface`](Ammo.btActionInterface.md)
+
+#### Returns
+
+[`btActionInterface`](Ammo.btActionInterface.md)
+
+## Methods
+
+### updateAction
+
+▸ **updateAction**(`collisionWorld`, `deltaTimeStep`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionWorld` | [`btCollisionWorld`](Ammo.btCollisionWorld.md) |
+| `deltaTimeStep` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:818](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L818)
diff --git a/docs/physics/classes/Ammo.btAxisSweep3.md b/docs/physics/classes/Ammo.btAxisSweep3.md
new file mode 100644
index 00000000..c2cd2410
--- /dev/null
+++ b/docs/physics/classes/Ammo.btAxisSweep3.md
@@ -0,0 +1,31 @@
+# Class: btAxisSweep3
+
+[Ammo](../modules/Ammo.md).btAxisSweep3
+
+### Constructors
+
+- [constructor](Ammo.btAxisSweep3.md#constructor)
+
+## Constructors
+
+### constructor
+
+• **new btAxisSweep3**(`worldAabbMin`, `worldAabbMax`, `maxHandles?`, `pairCache?`, `disableRaycastAccelerator?`): [`btAxisSweep3`](Ammo.btAxisSweep3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldAabbMin` | [`btVector3`](Ammo.btVector3.md) |
+| `worldAabbMax` | [`btVector3`](Ammo.btVector3.md) |
+| `maxHandles?` | `number` |
+| `pairCache?` | [`btOverlappingPairCache`](Ammo.btOverlappingPairCache.md) |
+| `disableRaycastAccelerator?` | `boolean` |
+
+#### Returns
+
+[`btAxisSweep3`](Ammo.btAxisSweep3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:454](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L454)
diff --git a/docs/physics/classes/Ammo.btBoxShape.md b/docs/physics/classes/Ammo.btBoxShape.md
new file mode 100644
index 00000000..b3fc8d55
--- /dev/null
+++ b/docs/physics/classes/Ammo.btBoxShape.md
@@ -0,0 +1,154 @@
+# Class: btBoxShape
+
+[Ammo](../modules/Ammo.md).btBoxShape
+
+## Hierarchy
+
+- [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+ ↳ **`btBoxShape`**
+
+### Constructors
+
+- [constructor](Ammo.btBoxShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btBoxShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btBoxShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btBoxShape.md#calculatelocalinertia)
+- [setMargin](Ammo.btBoxShape.md#setmargin)
+- [getMargin](Ammo.btBoxShape.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btBoxShape**(`boxHalfExtents`): [`btBoxShape`](Ammo.btBoxShape.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `boxHalfExtents` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`btBoxShape`](Ammo.btBoxShape.md)
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[constructor](Ammo.btCollisionShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:284](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L284)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setLocalScaling](Ammo.btCollisionShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getLocalScaling](Ammo.btCollisionShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[calculateLocalInertia](Ammo.btCollisionShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setMargin](Ammo.btCollisionShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:285](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L285)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getMargin](Ammo.btCollisionShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:286](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L286)
diff --git a/docs/physics/classes/Ammo.btBroadphaseInterface.md b/docs/physics/classes/Ammo.btBroadphaseInterface.md
new file mode 100644
index 00000000..09368ddc
--- /dev/null
+++ b/docs/physics/classes/Ammo.btBroadphaseInterface.md
@@ -0,0 +1,41 @@
+# Class: btBroadphaseInterface
+
+[Ammo](../modules/Ammo.md).btBroadphaseInterface
+
+## Hierarchy
+
+- **`btBroadphaseInterface`**
+
+ ↳ [`btDbvtBroadphase`](Ammo.btDbvtBroadphase.md)
+
+### Constructors
+
+- [constructor](Ammo.btBroadphaseInterface.md#constructor)
+
+### Methods
+
+- [getOverlappingPairCache](Ammo.btBroadphaseInterface.md#getoverlappingpaircache)
+
+## Constructors
+
+### constructor
+
+• **new btBroadphaseInterface**(): [`btBroadphaseInterface`](Ammo.btBroadphaseInterface.md)
+
+#### Returns
+
+[`btBroadphaseInterface`](Ammo.btBroadphaseInterface.md)
+
+## Methods
+
+### getOverlappingPairCache
+
+▸ **getOverlappingPairCache**(): [`btOverlappingPairCache`](Ammo.btOverlappingPairCache.md)
+
+#### Returns
+
+[`btOverlappingPairCache`](Ammo.btOverlappingPairCache.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:457](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L457)
diff --git a/docs/physics/classes/Ammo.btBroadphaseProxy.md b/docs/physics/classes/Ammo.btBroadphaseProxy.md
new file mode 100644
index 00000000..2c9f5a0a
--- /dev/null
+++ b/docs/physics/classes/Ammo.btBroadphaseProxy.md
@@ -0,0 +1,92 @@
+# Class: btBroadphaseProxy
+
+[Ammo](../modules/Ammo.md).btBroadphaseProxy
+
+### Constructors
+
+- [constructor](Ammo.btBroadphaseProxy.md#constructor)
+
+### Methods
+
+- [get\_m\_collisionFilterGroup](Ammo.btBroadphaseProxy.md#get_m_collisionfiltergroup)
+- [set\_m\_collisionFilterGroup](Ammo.btBroadphaseProxy.md#set_m_collisionfiltergroup)
+- [get\_m\_collisionFilterMask](Ammo.btBroadphaseProxy.md#get_m_collisionfiltermask)
+- [set\_m\_collisionFilterMask](Ammo.btBroadphaseProxy.md#set_m_collisionfiltermask)
+
+## Constructors
+
+### constructor
+
+• **new btBroadphaseProxy**(): [`btBroadphaseProxy`](Ammo.btBroadphaseProxy.md)
+
+#### Returns
+
+[`btBroadphaseProxy`](Ammo.btBroadphaseProxy.md)
+
+## Methods
+
+### get\_m\_collisionFilterGroup
+
+▸ **get_m_collisionFilterGroup**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:464](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L464)
+
+___
+
+### set\_m\_collisionFilterGroup
+
+▸ **set_m_collisionFilterGroup**(`m_collisionFilterGroup`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_collisionFilterGroup` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:465](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L465)
+
+___
+
+### get\_m\_collisionFilterMask
+
+▸ **get_m_collisionFilterMask**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:466](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L466)
+
+___
+
+### set\_m\_collisionFilterMask
+
+▸ **set_m_collisionFilterMask**(`m_collisionFilterMask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_collisionFilterMask` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:467](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L467)
diff --git a/docs/physics/classes/Ammo.btBvhTriangleMeshShape.md b/docs/physics/classes/Ammo.btBvhTriangleMeshShape.md
new file mode 100644
index 00000000..1efd16aa
--- /dev/null
+++ b/docs/physics/classes/Ammo.btBvhTriangleMeshShape.md
@@ -0,0 +1,156 @@
+# Class: btBvhTriangleMeshShape
+
+[Ammo](../modules/Ammo.md).btBvhTriangleMeshShape
+
+## Hierarchy
+
+- [`btTriangleMeshShape`](Ammo.btTriangleMeshShape.md)
+
+ ↳ **`btBvhTriangleMeshShape`**
+
+### Constructors
+
+- [constructor](Ammo.btBvhTriangleMeshShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btBvhTriangleMeshShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btBvhTriangleMeshShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btBvhTriangleMeshShape.md#calculatelocalinertia)
+- [setMargin](Ammo.btBvhTriangleMeshShape.md#setmargin)
+- [getMargin](Ammo.btBvhTriangleMeshShape.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btBvhTriangleMeshShape**(`meshInterface`, `useQuantizedAabbCompression`, `buildBvh?`): [`btBvhTriangleMeshShape`](Ammo.btBvhTriangleMeshShape.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `meshInterface` | [`btStridingMeshInterface`](Ammo.btStridingMeshInterface.md) |
+| `useQuantizedAabbCompression` | `boolean` |
+| `buildBvh?` | `boolean` |
+
+#### Returns
+
+[`btBvhTriangleMeshShape`](Ammo.btBvhTriangleMeshShape.md)
+
+#### Overrides
+
+[btTriangleMeshShape](Ammo.btTriangleMeshShape.md).[constructor](Ammo.btTriangleMeshShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:417](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L417)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTriangleMeshShape](Ammo.btTriangleMeshShape.md).[setLocalScaling](Ammo.btTriangleMeshShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btTriangleMeshShape](Ammo.btTriangleMeshShape.md).[getLocalScaling](Ammo.btTriangleMeshShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTriangleMeshShape](Ammo.btTriangleMeshShape.md).[calculateLocalInertia](Ammo.btTriangleMeshShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTriangleMeshShape](Ammo.btTriangleMeshShape.md).[setMargin](Ammo.btTriangleMeshShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:276](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L276)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btTriangleMeshShape](Ammo.btTriangleMeshShape.md).[getMargin](Ammo.btTriangleMeshShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:277](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L277)
diff --git a/docs/physics/classes/Ammo.btCapsuleShape.md b/docs/physics/classes/Ammo.btCapsuleShape.md
new file mode 100644
index 00000000..b3f14d6f
--- /dev/null
+++ b/docs/physics/classes/Ammo.btCapsuleShape.md
@@ -0,0 +1,204 @@
+# Class: btCapsuleShape
+
+[Ammo](../modules/Ammo.md).btCapsuleShape
+
+## Hierarchy
+
+- [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+ ↳ **`btCapsuleShape`**
+
+ ↳↳ [`btCapsuleShapeX`](Ammo.btCapsuleShapeX.md)
+
+ ↳↳ [`btCapsuleShapeZ`](Ammo.btCapsuleShapeZ.md)
+
+### Constructors
+
+- [constructor](Ammo.btCapsuleShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btCapsuleShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btCapsuleShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btCapsuleShape.md#calculatelocalinertia)
+- [setMargin](Ammo.btCapsuleShape.md#setmargin)
+- [getMargin](Ammo.btCapsuleShape.md#getmargin)
+- [getUpAxis](Ammo.btCapsuleShape.md#getupaxis)
+- [getRadius](Ammo.btCapsuleShape.md#getradius)
+- [getHalfHeight](Ammo.btCapsuleShape.md#gethalfheight)
+
+## Constructors
+
+### constructor
+
+• **new btCapsuleShape**(`radius`, `height`): [`btCapsuleShape`](Ammo.btCapsuleShape.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radius` | `number` |
+| `height` | `number` |
+
+#### Returns
+
+[`btCapsuleShape`](Ammo.btCapsuleShape.md)
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[constructor](Ammo.btCollisionShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:289](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L289)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setLocalScaling](Ammo.btCollisionShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getLocalScaling](Ammo.btCollisionShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[calculateLocalInertia](Ammo.btCollisionShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setMargin](Ammo.btCollisionShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:290](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L290)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getMargin](Ammo.btCollisionShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:291](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L291)
+
+___
+
+### getUpAxis
+
+▸ **getUpAxis**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:292](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L292)
+
+___
+
+### getRadius
+
+▸ **getRadius**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:293](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L293)
+
+___
+
+### getHalfHeight
+
+▸ **getHalfHeight**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:294](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L294)
diff --git a/docs/physics/classes/Ammo.btCapsuleShapeX.md b/docs/physics/classes/Ammo.btCapsuleShapeX.md
new file mode 100644
index 00000000..6a0017f5
--- /dev/null
+++ b/docs/physics/classes/Ammo.btCapsuleShapeX.md
@@ -0,0 +1,212 @@
+# Class: btCapsuleShapeX
+
+[Ammo](../modules/Ammo.md).btCapsuleShapeX
+
+## Hierarchy
+
+- [`btCapsuleShape`](Ammo.btCapsuleShape.md)
+
+ ↳ **`btCapsuleShapeX`**
+
+### Constructors
+
+- [constructor](Ammo.btCapsuleShapeX.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btCapsuleShapeX.md#setlocalscaling)
+- [getLocalScaling](Ammo.btCapsuleShapeX.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btCapsuleShapeX.md#calculatelocalinertia)
+- [getUpAxis](Ammo.btCapsuleShapeX.md#getupaxis)
+- [getRadius](Ammo.btCapsuleShapeX.md#getradius)
+- [getHalfHeight](Ammo.btCapsuleShapeX.md#gethalfheight)
+- [setMargin](Ammo.btCapsuleShapeX.md#setmargin)
+- [getMargin](Ammo.btCapsuleShapeX.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btCapsuleShapeX**(`radius`, `height`): [`btCapsuleShapeX`](Ammo.btCapsuleShapeX.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radius` | `number` |
+| `height` | `number` |
+
+#### Returns
+
+[`btCapsuleShapeX`](Ammo.btCapsuleShapeX.md)
+
+#### Overrides
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[constructor](Ammo.btCapsuleShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:297](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L297)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[setLocalScaling](Ammo.btCapsuleShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[getLocalScaling](Ammo.btCapsuleShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[calculateLocalInertia](Ammo.btCapsuleShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### getUpAxis
+
+▸ **getUpAxis**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[getUpAxis](Ammo.btCapsuleShape.md#getupaxis)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:292](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L292)
+
+___
+
+### getRadius
+
+▸ **getRadius**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[getRadius](Ammo.btCapsuleShape.md#getradius)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:293](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L293)
+
+___
+
+### getHalfHeight
+
+▸ **getHalfHeight**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[getHalfHeight](Ammo.btCapsuleShape.md#gethalfheight)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:294](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L294)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[setMargin](Ammo.btCapsuleShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:298](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L298)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Overrides
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[getMargin](Ammo.btCapsuleShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:299](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L299)
diff --git a/docs/physics/classes/Ammo.btCapsuleShapeZ.md b/docs/physics/classes/Ammo.btCapsuleShapeZ.md
new file mode 100644
index 00000000..49325b48
--- /dev/null
+++ b/docs/physics/classes/Ammo.btCapsuleShapeZ.md
@@ -0,0 +1,212 @@
+# Class: btCapsuleShapeZ
+
+[Ammo](../modules/Ammo.md).btCapsuleShapeZ
+
+## Hierarchy
+
+- [`btCapsuleShape`](Ammo.btCapsuleShape.md)
+
+ ↳ **`btCapsuleShapeZ`**
+
+### Constructors
+
+- [constructor](Ammo.btCapsuleShapeZ.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btCapsuleShapeZ.md#setlocalscaling)
+- [getLocalScaling](Ammo.btCapsuleShapeZ.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btCapsuleShapeZ.md#calculatelocalinertia)
+- [getUpAxis](Ammo.btCapsuleShapeZ.md#getupaxis)
+- [getRadius](Ammo.btCapsuleShapeZ.md#getradius)
+- [getHalfHeight](Ammo.btCapsuleShapeZ.md#gethalfheight)
+- [setMargin](Ammo.btCapsuleShapeZ.md#setmargin)
+- [getMargin](Ammo.btCapsuleShapeZ.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btCapsuleShapeZ**(`radius`, `height`): [`btCapsuleShapeZ`](Ammo.btCapsuleShapeZ.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radius` | `number` |
+| `height` | `number` |
+
+#### Returns
+
+[`btCapsuleShapeZ`](Ammo.btCapsuleShapeZ.md)
+
+#### Overrides
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[constructor](Ammo.btCapsuleShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:302](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L302)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[setLocalScaling](Ammo.btCapsuleShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[getLocalScaling](Ammo.btCapsuleShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[calculateLocalInertia](Ammo.btCapsuleShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### getUpAxis
+
+▸ **getUpAxis**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[getUpAxis](Ammo.btCapsuleShape.md#getupaxis)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:292](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L292)
+
+___
+
+### getRadius
+
+▸ **getRadius**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[getRadius](Ammo.btCapsuleShape.md#getradius)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:293](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L293)
+
+___
+
+### getHalfHeight
+
+▸ **getHalfHeight**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[getHalfHeight](Ammo.btCapsuleShape.md#gethalfheight)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:294](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L294)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[setMargin](Ammo.btCapsuleShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:303](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L303)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Overrides
+
+[btCapsuleShape](Ammo.btCapsuleShape.md).[getMargin](Ammo.btCapsuleShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:304](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L304)
diff --git a/docs/physics/classes/Ammo.btCollisionConfiguration.md b/docs/physics/classes/Ammo.btCollisionConfiguration.md
new file mode 100644
index 00000000..bc7cf4ae
--- /dev/null
+++ b/docs/physics/classes/Ammo.btCollisionConfiguration.md
@@ -0,0 +1,17 @@
+# Class: btCollisionConfiguration
+
+[Ammo](../modules/Ammo.md).btCollisionConfiguration
+
+### Constructors
+
+- [constructor](Ammo.btCollisionConfiguration.md#constructor)
+
+## Constructors
+
+### constructor
+
+• **new btCollisionConfiguration**(): [`btCollisionConfiguration`](Ammo.btCollisionConfiguration.md)
+
+#### Returns
+
+[`btCollisionConfiguration`](Ammo.btCollisionConfiguration.md)
diff --git a/docs/physics/classes/Ammo.btCollisionDispatcher.md b/docs/physics/classes/Ammo.btCollisionDispatcher.md
new file mode 100644
index 00000000..8b026a75
--- /dev/null
+++ b/docs/physics/classes/Ammo.btCollisionDispatcher.md
@@ -0,0 +1,84 @@
+# Class: btCollisionDispatcher
+
+[Ammo](../modules/Ammo.md).btCollisionDispatcher
+
+## Hierarchy
+
+- [`btDispatcher`](Ammo.btDispatcher.md)
+
+ ↳ **`btCollisionDispatcher`**
+
+### Constructors
+
+- [constructor](Ammo.btCollisionDispatcher.md#constructor)
+
+### Methods
+
+- [getNumManifolds](Ammo.btCollisionDispatcher.md#getnummanifolds)
+- [getManifoldByIndexInternal](Ammo.btCollisionDispatcher.md#getmanifoldbyindexinternal)
+
+## Constructors
+
+### constructor
+
+• **new btCollisionDispatcher**(`conf`): [`btCollisionDispatcher`](Ammo.btCollisionDispatcher.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `conf` | [`btDefaultCollisionConfiguration`](Ammo.btDefaultCollisionConfiguration.md) |
+
+#### Returns
+
+[`btCollisionDispatcher`](Ammo.btCollisionDispatcher.md)
+
+#### Overrides
+
+[btDispatcher](Ammo.btDispatcher.md).[constructor](Ammo.btDispatcher.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:446](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L446)
+
+## Methods
+
+### getNumManifolds
+
+▸ **getNumManifolds**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btDispatcher](Ammo.btDispatcher.md).[getNumManifolds](Ammo.btDispatcher.md#getnummanifolds)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:442](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L442)
+
+___
+
+### getManifoldByIndexInternal
+
+▸ **getManifoldByIndexInternal**(`index`): [`btPersistentManifold`](Ammo.btPersistentManifold.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+[`btPersistentManifold`](Ammo.btPersistentManifold.md)
+
+#### Inherited from
+
+[btDispatcher](Ammo.btDispatcher.md).[getManifoldByIndexInternal](Ammo.btDispatcher.md#getmanifoldbyindexinternal)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:443](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L443)
diff --git a/docs/physics/classes/Ammo.btCollisionObject.md b/docs/physics/classes/Ammo.btCollisionObject.md
new file mode 100644
index 00000000..13542225
--- /dev/null
+++ b/docs/physics/classes/Ammo.btCollisionObject.md
@@ -0,0 +1,555 @@
+# Class: btCollisionObject
+
+[Ammo](../modules/Ammo.md).btCollisionObject
+
+## Hierarchy
+
+- **`btCollisionObject`**
+
+ ↳ [`btRigidBody`](Ammo.btRigidBody.md)
+
+ ↳ [`btGhostObject`](Ammo.btGhostObject.md)
+
+ ↳ [`btSoftBody`](Ammo.btSoftBody.md)
+
+### Constructors
+
+- [constructor](Ammo.btCollisionObject.md#constructor)
+
+### Properties
+
+- [kB](Ammo.btCollisionObject.md#kb)
+
+### Methods
+
+- [setAnisotropicFriction](Ammo.btCollisionObject.md#setanisotropicfriction)
+- [getCollisionShape](Ammo.btCollisionObject.md#getcollisionshape)
+- [setContactProcessingThreshold](Ammo.btCollisionObject.md#setcontactprocessingthreshold)
+- [setActivationState](Ammo.btCollisionObject.md#setactivationstate)
+- [forceActivationState](Ammo.btCollisionObject.md#forceactivationstate)
+- [activate](Ammo.btCollisionObject.md#activate)
+- [isActive](Ammo.btCollisionObject.md#isactive)
+- [isKinematicObject](Ammo.btCollisionObject.md#iskinematicobject)
+- [isStaticObject](Ammo.btCollisionObject.md#isstaticobject)
+- [isStaticOrKinematicObject](Ammo.btCollisionObject.md#isstaticorkinematicobject)
+- [getRestitution](Ammo.btCollisionObject.md#getrestitution)
+- [getFriction](Ammo.btCollisionObject.md#getfriction)
+- [getRollingFriction](Ammo.btCollisionObject.md#getrollingfriction)
+- [setRestitution](Ammo.btCollisionObject.md#setrestitution)
+- [setFriction](Ammo.btCollisionObject.md#setfriction)
+- [setRollingFriction](Ammo.btCollisionObject.md#setrollingfriction)
+- [getWorldTransform](Ammo.btCollisionObject.md#getworldtransform)
+- [getCollisionFlags](Ammo.btCollisionObject.md#getcollisionflags)
+- [setCollisionFlags](Ammo.btCollisionObject.md#setcollisionflags)
+- [setWorldTransform](Ammo.btCollisionObject.md#setworldtransform)
+- [setCollisionShape](Ammo.btCollisionObject.md#setcollisionshape)
+- [setCcdMotionThreshold](Ammo.btCollisionObject.md#setccdmotionthreshold)
+- [setCcdSweptSphereRadius](Ammo.btCollisionObject.md#setccdsweptsphereradius)
+- [getUserIndex](Ammo.btCollisionObject.md#getuserindex)
+- [setUserIndex](Ammo.btCollisionObject.md#setuserindex)
+- [getUserPointer](Ammo.btCollisionObject.md#getuserpointer)
+- [setUserPointer](Ammo.btCollisionObject.md#setuserpointer)
+- [getBroadphaseHandle](Ammo.btCollisionObject.md#getbroadphasehandle)
+
+## Constructors
+
+### constructor
+
+• **new btCollisionObject**(): [`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Returns
+
+[`btCollisionObject`](Ammo.btCollisionObject.md)
+
+## Properties
+
+### kB
+
+• **kB**: `number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:128](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L128)
+
+## Methods
+
+### setAnisotropicFriction
+
+▸ **setAnisotropicFriction**(`anisotropicFriction`, `frictionMode`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `anisotropicFriction` | [`btVector3`](Ammo.btVector3.md) |
+| `frictionMode` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:129](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L129)
+
+___
+
+### getCollisionShape
+
+▸ **getCollisionShape**(): [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Returns
+
+[`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:130](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L130)
+
+___
+
+### setContactProcessingThreshold
+
+▸ **setContactProcessingThreshold**(`contactProcessingThreshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `contactProcessingThreshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:131](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L131)
+
+___
+
+### setActivationState
+
+▸ **setActivationState**(`newState`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `newState` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:132](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L132)
+
+___
+
+### forceActivationState
+
+▸ **forceActivationState**(`newState`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `newState` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:133](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L133)
+
+___
+
+### activate
+
+▸ **activate**(`forceActivation?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `forceActivation?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:134](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L134)
+
+___
+
+### isActive
+
+▸ **isActive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:135](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L135)
+
+___
+
+### isKinematicObject
+
+▸ **isKinematicObject**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:136](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L136)
+
+___
+
+### isStaticObject
+
+▸ **isStaticObject**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:137](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L137)
+
+___
+
+### isStaticOrKinematicObject
+
+▸ **isStaticOrKinematicObject**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:138](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L138)
+
+___
+
+### getRestitution
+
+▸ **getRestitution**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:139](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L139)
+
+___
+
+### getFriction
+
+▸ **getFriction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:140](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L140)
+
+___
+
+### getRollingFriction
+
+▸ **getRollingFriction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:141](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L141)
+
+___
+
+### setRestitution
+
+▸ **setRestitution**(`rest`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rest` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:142](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L142)
+
+___
+
+### setFriction
+
+▸ **setFriction**(`frict`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `frict` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:143](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L143)
+
+___
+
+### setRollingFriction
+
+▸ **setRollingFriction**(`frict`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `frict` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:144](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L144)
+
+___
+
+### getWorldTransform
+
+▸ **getWorldTransform**(): [`btTransform`](Ammo.btTransform.md)
+
+#### Returns
+
+[`btTransform`](Ammo.btTransform.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:145](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L145)
+
+___
+
+### getCollisionFlags
+
+▸ **getCollisionFlags**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:146](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L146)
+
+___
+
+### setCollisionFlags
+
+▸ **setCollisionFlags**(`flags`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `flags` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:147](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L147)
+
+___
+
+### setWorldTransform
+
+▸ **setWorldTransform**(`worldTrans`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldTrans` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:148](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L148)
+
+___
+
+### setCollisionShape
+
+▸ **setCollisionShape**(`collisionShape`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionShape` | [`btCollisionShape`](Ammo.btCollisionShape.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:149](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L149)
+
+___
+
+### setCcdMotionThreshold
+
+▸ **setCcdMotionThreshold**(`ccdMotionThreshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ccdMotionThreshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:150](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L150)
+
+___
+
+### setCcdSweptSphereRadius
+
+▸ **setCcdSweptSphereRadius**(`radius`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radius` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:151](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L151)
+
+___
+
+### getUserIndex
+
+▸ **getUserIndex**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:152](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L152)
+
+___
+
+### setUserIndex
+
+▸ **setUserIndex**(`index`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:153](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L153)
+
+___
+
+### getUserPointer
+
+▸ **getUserPointer**(): `unknown`
+
+#### Returns
+
+`unknown`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:154](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L154)
+
+___
+
+### setUserPointer
+
+▸ **setUserPointer**(`userPointer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `userPointer` | `unknown` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:155](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L155)
+
+___
+
+### getBroadphaseHandle
+
+▸ **getBroadphaseHandle**(): [`btBroadphaseProxy`](Ammo.btBroadphaseProxy.md)
+
+#### Returns
+
+[`btBroadphaseProxy`](Ammo.btBroadphaseProxy.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:156](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L156)
diff --git a/docs/physics/classes/Ammo.btCollisionObjectWrapper.md b/docs/physics/classes/Ammo.btCollisionObjectWrapper.md
new file mode 100644
index 00000000..43e63de9
--- /dev/null
+++ b/docs/physics/classes/Ammo.btCollisionObjectWrapper.md
@@ -0,0 +1,65 @@
+# Class: btCollisionObjectWrapper
+
+[Ammo](../modules/Ammo.md).btCollisionObjectWrapper
+
+### Constructors
+
+- [constructor](Ammo.btCollisionObjectWrapper.md#constructor)
+
+### Methods
+
+- [getWorldTransform](Ammo.btCollisionObjectWrapper.md#getworldtransform)
+- [getCollisionObject](Ammo.btCollisionObjectWrapper.md#getcollisionobject)
+- [getCollisionShape](Ammo.btCollisionObjectWrapper.md#getcollisionshape)
+
+## Constructors
+
+### constructor
+
+• **new btCollisionObjectWrapper**(): [`btCollisionObjectWrapper`](Ammo.btCollisionObjectWrapper.md)
+
+#### Returns
+
+[`btCollisionObjectWrapper`](Ammo.btCollisionObjectWrapper.md)
+
+## Methods
+
+### getWorldTransform
+
+▸ **getWorldTransform**(): [`btTransform`](Ammo.btTransform.md)
+
+#### Returns
+
+[`btTransform`](Ammo.btTransform.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:159](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L159)
+
+___
+
+### getCollisionObject
+
+▸ **getCollisionObject**(): [`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Returns
+
+[`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:160](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L160)
+
+___
+
+### getCollisionShape
+
+▸ **getCollisionShape**(): [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Returns
+
+[`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:161](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L161)
diff --git a/docs/physics/classes/Ammo.btCollisionShape.md b/docs/physics/classes/Ammo.btCollisionShape.md
new file mode 100644
index 00000000..c177b24a
--- /dev/null
+++ b/docs/physics/classes/Ammo.btCollisionShape.md
@@ -0,0 +1,138 @@
+# Class: btCollisionShape
+
+[Ammo](../modules/Ammo.md).btCollisionShape
+
+## Hierarchy
+
+- **`btCollisionShape`**
+
+ ↳ [`btConvexShape`](Ammo.btConvexShape.md)
+
+ ↳ [`btBoxShape`](Ammo.btBoxShape.md)
+
+ ↳ [`btCapsuleShape`](Ammo.btCapsuleShape.md)
+
+ ↳ [`btCylinderShape`](Ammo.btCylinderShape.md)
+
+ ↳ [`btSphereShape`](Ammo.btSphereShape.md)
+
+ ↳ [`btMultiSphereShape`](Ammo.btMultiSphereShape.md)
+
+ ↳ [`btConeShape`](Ammo.btConeShape.md)
+
+ ↳ [`btConvexHullShape`](Ammo.btConvexHullShape.md)
+
+ ↳ [`btCompoundShape`](Ammo.btCompoundShape.md)
+
+ ↳ [`btConcaveShape`](Ammo.btConcaveShape.md)
+
+### Constructors
+
+- [constructor](Ammo.btCollisionShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btCollisionShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btCollisionShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btCollisionShape.md#calculatelocalinertia)
+- [setMargin](Ammo.btCollisionShape.md#setmargin)
+- [getMargin](Ammo.btCollisionShape.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btCollisionShape**(): [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Returns
+
+[`btCollisionShape`](Ammo.btCollisionShape.md)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:276](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L276)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:277](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L277)
diff --git a/docs/physics/classes/Ammo.btCollisionWorld.md b/docs/physics/classes/Ammo.btCollisionWorld.md
new file mode 100644
index 00000000..60a9081b
--- /dev/null
+++ b/docs/physics/classes/Ammo.btCollisionWorld.md
@@ -0,0 +1,318 @@
+# Class: btCollisionWorld
+
+[Ammo](../modules/Ammo.md).btCollisionWorld
+
+## Hierarchy
+
+- **`btCollisionWorld`**
+
+ ↳ [`btDynamicsWorld`](Ammo.btDynamicsWorld.md)
+
+### Constructors
+
+- [constructor](Ammo.btCollisionWorld.md#constructor)
+
+### Methods
+
+- [getDispatcher](Ammo.btCollisionWorld.md#getdispatcher)
+- [rayTest](Ammo.btCollisionWorld.md#raytest)
+- [getPairCache](Ammo.btCollisionWorld.md#getpaircache)
+- [getDispatchInfo](Ammo.btCollisionWorld.md#getdispatchinfo)
+- [addCollisionObject](Ammo.btCollisionWorld.md#addcollisionobject)
+- [removeCollisionObject](Ammo.btCollisionWorld.md#removecollisionobject)
+- [getBroadphase](Ammo.btCollisionWorld.md#getbroadphase)
+- [convexSweepTest](Ammo.btCollisionWorld.md#convexsweeptest)
+- [contactPairTest](Ammo.btCollisionWorld.md#contactpairtest)
+- [contactTest](Ammo.btCollisionWorld.md#contacttest)
+- [updateSingleAabb](Ammo.btCollisionWorld.md#updatesingleaabb)
+- [setDebugDrawer](Ammo.btCollisionWorld.md#setdebugdrawer)
+- [getDebugDrawer](Ammo.btCollisionWorld.md#getdebugdrawer)
+- [debugDrawWorld](Ammo.btCollisionWorld.md#debugdrawworld)
+- [debugDrawObject](Ammo.btCollisionWorld.md#debugdrawobject)
+
+## Constructors
+
+### constructor
+
+• **new btCollisionWorld**(): [`btCollisionWorld`](Ammo.btCollisionWorld.md)
+
+#### Returns
+
+[`btCollisionWorld`](Ammo.btCollisionWorld.md)
+
+## Methods
+
+### getDispatcher
+
+▸ **getDispatcher**(): [`btDispatcher`](Ammo.btDispatcher.md)
+
+#### Returns
+
+[`btDispatcher`](Ammo.btDispatcher.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:646](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L646)
+
+___
+
+### rayTest
+
+▸ **rayTest**(`rayFromWorld`, `rayToWorld`, `resultCallback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rayFromWorld` | [`btVector3`](Ammo.btVector3.md) |
+| `rayToWorld` | [`btVector3`](Ammo.btVector3.md) |
+| `resultCallback` | [`RayResultCallback`](Ammo.RayResultCallback.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:647](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L647)
+
+___
+
+### getPairCache
+
+▸ **getPairCache**(): [`btOverlappingPairCache`](Ammo.btOverlappingPairCache.md)
+
+#### Returns
+
+[`btOverlappingPairCache`](Ammo.btOverlappingPairCache.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:648](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L648)
+
+___
+
+### getDispatchInfo
+
+▸ **getDispatchInfo**(): [`btDispatcherInfo`](Ammo.btDispatcherInfo.md)
+
+#### Returns
+
+[`btDispatcherInfo`](Ammo.btDispatcherInfo.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:649](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L649)
+
+___
+
+### addCollisionObject
+
+▸ **addCollisionObject**(`collisionObject`, `collisionFilterGroup?`, `collisionFilterMask?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionObject` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+| `collisionFilterGroup?` | `number` |
+| `collisionFilterMask?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:650](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L650)
+
+___
+
+### removeCollisionObject
+
+▸ **removeCollisionObject**(`collisionObject`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionObject` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:651](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L651)
+
+___
+
+### getBroadphase
+
+▸ **getBroadphase**(): [`btBroadphaseInterface`](Ammo.btBroadphaseInterface.md)
+
+#### Returns
+
+[`btBroadphaseInterface`](Ammo.btBroadphaseInterface.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:652](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L652)
+
+___
+
+### convexSweepTest
+
+▸ **convexSweepTest**(`castShape`, `from`, `to`, `resultCallback`, `allowedCcdPenetration`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `castShape` | [`btConvexShape`](Ammo.btConvexShape.md) |
+| `from` | [`btTransform`](Ammo.btTransform.md) |
+| `to` | [`btTransform`](Ammo.btTransform.md) |
+| `resultCallback` | [`ConvexResultCallback`](Ammo.ConvexResultCallback.md) |
+| `allowedCcdPenetration` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:653](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L653)
+
+___
+
+### contactPairTest
+
+▸ **contactPairTest**(`colObjA`, `colObjB`, `resultCallback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `colObjA` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+| `colObjB` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+| `resultCallback` | [`ContactResultCallback`](Ammo.ContactResultCallback.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:654](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L654)
+
+___
+
+### contactTest
+
+▸ **contactTest**(`colObj`, `resultCallback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `colObj` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+| `resultCallback` | [`ContactResultCallback`](Ammo.ContactResultCallback.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:655](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L655)
+
+___
+
+### updateSingleAabb
+
+▸ **updateSingleAabb**(`colObj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `colObj` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:656](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L656)
+
+___
+
+### setDebugDrawer
+
+▸ **setDebugDrawer**(`debugDrawer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `debugDrawer` | [`btIDebugDraw`](Ammo.btIDebugDraw.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:657](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L657)
+
+___
+
+### getDebugDrawer
+
+▸ **getDebugDrawer**(): [`btIDebugDraw`](Ammo.btIDebugDraw.md)
+
+#### Returns
+
+[`btIDebugDraw`](Ammo.btIDebugDraw.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:658](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L658)
+
+___
+
+### debugDrawWorld
+
+▸ **debugDrawWorld**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:659](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L659)
+
+___
+
+### debugDrawObject
+
+▸ **debugDrawObject**(`worldTransform`, `shape`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldTransform` | [`btTransform`](Ammo.btTransform.md) |
+| `shape` | [`btCollisionShape`](Ammo.btCollisionShape.md) |
+| `color` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:660](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L660)
diff --git a/docs/physics/classes/Ammo.btCompoundShape.md b/docs/physics/classes/Ammo.btCompoundShape.md
new file mode 100644
index 00000000..136d000c
--- /dev/null
+++ b/docs/physics/classes/Ammo.btCompoundShape.md
@@ -0,0 +1,277 @@
+# Class: btCompoundShape
+
+[Ammo](../modules/Ammo.md).btCompoundShape
+
+## Hierarchy
+
+- [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+ ↳ **`btCompoundShape`**
+
+### Constructors
+
+- [constructor](Ammo.btCompoundShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btCompoundShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btCompoundShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btCompoundShape.md#calculatelocalinertia)
+- [addChildShape](Ammo.btCompoundShape.md#addchildshape)
+- [removeChildShape](Ammo.btCompoundShape.md#removechildshape)
+- [removeChildShapeByIndex](Ammo.btCompoundShape.md#removechildshapebyindex)
+- [getNumChildShapes](Ammo.btCompoundShape.md#getnumchildshapes)
+- [getChildShape](Ammo.btCompoundShape.md#getchildshape)
+- [updateChildTransform](Ammo.btCompoundShape.md#updatechildtransform)
+- [setMargin](Ammo.btCompoundShape.md#setmargin)
+- [getMargin](Ammo.btCompoundShape.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btCompoundShape**(`enableDynamicAabbTree?`): [`btCompoundShape`](Ammo.btCompoundShape.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `enableDynamicAabbTree?` | `boolean` |
+
+#### Returns
+
+[`btCompoundShape`](Ammo.btCompoundShape.md)
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[constructor](Ammo.btCollisionShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:379](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L379)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setLocalScaling](Ammo.btCollisionShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getLocalScaling](Ammo.btCollisionShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[calculateLocalInertia](Ammo.btCollisionShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### addChildShape
+
+▸ **addChildShape**(`localTransform`, `shape`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `localTransform` | [`btTransform`](Ammo.btTransform.md) |
+| `shape` | [`btCollisionShape`](Ammo.btCollisionShape.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:380](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L380)
+
+___
+
+### removeChildShape
+
+▸ **removeChildShape**(`shape`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shape` | [`btCollisionShape`](Ammo.btCollisionShape.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:381](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L381)
+
+___
+
+### removeChildShapeByIndex
+
+▸ **removeChildShapeByIndex**(`childShapeindex`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `childShapeindex` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:382](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L382)
+
+___
+
+### getNumChildShapes
+
+▸ **getNumChildShapes**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:383](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L383)
+
+___
+
+### getChildShape
+
+▸ **getChildShape**(`index`): [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+[`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:384](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L384)
+
+___
+
+### updateChildTransform
+
+▸ **updateChildTransform**(`childIndex`, `newChildTransform`, `shouldRecalculateLocalAabb?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `childIndex` | `number` |
+| `newChildTransform` | [`btTransform`](Ammo.btTransform.md) |
+| `shouldRecalculateLocalAabb?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:385](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L385)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setMargin](Ammo.btCollisionShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:386](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L386)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getMargin](Ammo.btCollisionShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:387](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L387)
diff --git a/docs/physics/classes/Ammo.btConcaveShape.md b/docs/physics/classes/Ammo.btConcaveShape.md
new file mode 100644
index 00000000..5c88c455
--- /dev/null
+++ b/docs/physics/classes/Ammo.btConcaveShape.md
@@ -0,0 +1,152 @@
+# Class: btConcaveShape
+
+[Ammo](../modules/Ammo.md).btConcaveShape
+
+## Hierarchy
+
+- [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+ ↳ **`btConcaveShape`**
+
+ ↳↳ [`btEmptyShape`](Ammo.btEmptyShape.md)
+
+ ↳↳ [`btStaticPlaneShape`](Ammo.btStaticPlaneShape.md)
+
+ ↳↳ [`btTriangleMeshShape`](Ammo.btTriangleMeshShape.md)
+
+ ↳↳ [`btHeightfieldTerrainShape`](Ammo.btHeightfieldTerrainShape.md)
+
+### Constructors
+
+- [constructor](Ammo.btConcaveShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btConcaveShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btConcaveShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btConcaveShape.md#calculatelocalinertia)
+- [setMargin](Ammo.btConcaveShape.md#setmargin)
+- [getMargin](Ammo.btConcaveShape.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btConcaveShape**(): [`btConcaveShape`](Ammo.btConcaveShape.md)
+
+#### Returns
+
+[`btConcaveShape`](Ammo.btConcaveShape.md)
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[constructor](Ammo.btCollisionShape.md#constructor)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setLocalScaling](Ammo.btCollisionShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getLocalScaling](Ammo.btCollisionShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[calculateLocalInertia](Ammo.btCollisionShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setMargin](Ammo.btCollisionShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:276](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L276)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getMargin](Ammo.btCollisionShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:277](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L277)
diff --git a/docs/physics/classes/Ammo.btConeShape.md b/docs/physics/classes/Ammo.btConeShape.md
new file mode 100644
index 00000000..89085d2d
--- /dev/null
+++ b/docs/physics/classes/Ammo.btConeShape.md
@@ -0,0 +1,159 @@
+# Class: btConeShape
+
+[Ammo](../modules/Ammo.md).btConeShape
+
+## Hierarchy
+
+- [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+ ↳ **`btConeShape`**
+
+ ↳↳ [`btConeShapeX`](Ammo.btConeShapeX.md)
+
+ ↳↳ [`btConeShapeZ`](Ammo.btConeShapeZ.md)
+
+### Constructors
+
+- [constructor](Ammo.btConeShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btConeShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btConeShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btConeShape.md#calculatelocalinertia)
+- [setMargin](Ammo.btConeShape.md#setmargin)
+- [getMargin](Ammo.btConeShape.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btConeShape**(`radius`, `height`): [`btConeShape`](Ammo.btConeShape.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radius` | `number` |
+| `height` | `number` |
+
+#### Returns
+
+[`btConeShape`](Ammo.btConeShape.md)
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[constructor](Ammo.btCollisionShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:330](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L330)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setLocalScaling](Ammo.btCollisionShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getLocalScaling](Ammo.btCollisionShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[calculateLocalInertia](Ammo.btCollisionShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setMargin](Ammo.btCollisionShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:276](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L276)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getMargin](Ammo.btCollisionShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:277](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L277)
diff --git a/docs/physics/classes/Ammo.btConeShapeX.md b/docs/physics/classes/Ammo.btConeShapeX.md
new file mode 100644
index 00000000..be7bcdfa
--- /dev/null
+++ b/docs/physics/classes/Ammo.btConeShapeX.md
@@ -0,0 +1,155 @@
+# Class: btConeShapeX
+
+[Ammo](../modules/Ammo.md).btConeShapeX
+
+## Hierarchy
+
+- [`btConeShape`](Ammo.btConeShape.md)
+
+ ↳ **`btConeShapeX`**
+
+### Constructors
+
+- [constructor](Ammo.btConeShapeX.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btConeShapeX.md#setlocalscaling)
+- [getLocalScaling](Ammo.btConeShapeX.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btConeShapeX.md#calculatelocalinertia)
+- [setMargin](Ammo.btConeShapeX.md#setmargin)
+- [getMargin](Ammo.btConeShapeX.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btConeShapeX**(`radius`, `height`): [`btConeShapeX`](Ammo.btConeShapeX.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radius` | `number` |
+| `height` | `number` |
+
+#### Returns
+
+[`btConeShapeX`](Ammo.btConeShapeX.md)
+
+#### Overrides
+
+[btConeShape](Ammo.btConeShape.md).[constructor](Ammo.btConeShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:333](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L333)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConeShape](Ammo.btConeShape.md).[setLocalScaling](Ammo.btConeShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btConeShape](Ammo.btConeShape.md).[getLocalScaling](Ammo.btConeShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConeShape](Ammo.btConeShape.md).[calculateLocalInertia](Ammo.btConeShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConeShape](Ammo.btConeShape.md).[setMargin](Ammo.btConeShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:276](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L276)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btConeShape](Ammo.btConeShape.md).[getMargin](Ammo.btConeShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:277](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L277)
diff --git a/docs/physics/classes/Ammo.btConeShapeZ.md b/docs/physics/classes/Ammo.btConeShapeZ.md
new file mode 100644
index 00000000..5b778c30
--- /dev/null
+++ b/docs/physics/classes/Ammo.btConeShapeZ.md
@@ -0,0 +1,155 @@
+# Class: btConeShapeZ
+
+[Ammo](../modules/Ammo.md).btConeShapeZ
+
+## Hierarchy
+
+- [`btConeShape`](Ammo.btConeShape.md)
+
+ ↳ **`btConeShapeZ`**
+
+### Constructors
+
+- [constructor](Ammo.btConeShapeZ.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btConeShapeZ.md#setlocalscaling)
+- [getLocalScaling](Ammo.btConeShapeZ.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btConeShapeZ.md#calculatelocalinertia)
+- [setMargin](Ammo.btConeShapeZ.md#setmargin)
+- [getMargin](Ammo.btConeShapeZ.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btConeShapeZ**(`radius`, `height`): [`btConeShapeZ`](Ammo.btConeShapeZ.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radius` | `number` |
+| `height` | `number` |
+
+#### Returns
+
+[`btConeShapeZ`](Ammo.btConeShapeZ.md)
+
+#### Overrides
+
+[btConeShape](Ammo.btConeShape.md).[constructor](Ammo.btConeShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:336](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L336)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConeShape](Ammo.btConeShape.md).[setLocalScaling](Ammo.btConeShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btConeShape](Ammo.btConeShape.md).[getLocalScaling](Ammo.btConeShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConeShape](Ammo.btConeShape.md).[calculateLocalInertia](Ammo.btConeShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConeShape](Ammo.btConeShape.md).[setMargin](Ammo.btConeShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:276](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L276)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btConeShape](Ammo.btConeShape.md).[getMargin](Ammo.btConeShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:277](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L277)
diff --git a/docs/physics/classes/Ammo.btConeTwistConstraint.md b/docs/physics/classes/Ammo.btConeTwistConstraint.md
new file mode 100644
index 00000000..81ef5010
--- /dev/null
+++ b/docs/physics/classes/Ammo.btConeTwistConstraint.md
@@ -0,0 +1,355 @@
+# Class: btConeTwistConstraint
+
+[Ammo](../modules/Ammo.md).btConeTwistConstraint
+
+## Hierarchy
+
+- [`btTypedConstraint`](Ammo.btTypedConstraint.md)
+
+ ↳ **`btConeTwistConstraint`**
+
+### Constructors
+
+- [constructor](Ammo.btConeTwistConstraint.md#constructor)
+
+### Methods
+
+- [enableFeedback](Ammo.btConeTwistConstraint.md#enablefeedback)
+- [getBreakingImpulseThreshold](Ammo.btConeTwistConstraint.md#getbreakingimpulsethreshold)
+- [setBreakingImpulseThreshold](Ammo.btConeTwistConstraint.md#setbreakingimpulsethreshold)
+- [getParam](Ammo.btConeTwistConstraint.md#getparam)
+- [setParam](Ammo.btConeTwistConstraint.md#setparam)
+- [setLimit](Ammo.btConeTwistConstraint.md#setlimit)
+- [setAngularOnly](Ammo.btConeTwistConstraint.md#setangularonly)
+- [setDamping](Ammo.btConeTwistConstraint.md#setdamping)
+- [enableMotor](Ammo.btConeTwistConstraint.md#enablemotor)
+- [setMaxMotorImpulse](Ammo.btConeTwistConstraint.md#setmaxmotorimpulse)
+- [setMaxMotorImpulseNormalized](Ammo.btConeTwistConstraint.md#setmaxmotorimpulsenormalized)
+- [setMotorTarget](Ammo.btConeTwistConstraint.md#setmotortarget)
+- [setMotorTargetInConstraintSpace](Ammo.btConeTwistConstraint.md#setmotortargetinconstraintspace)
+
+## Constructors
+
+### constructor
+
+• **new btConeTwistConstraint**(`rbA`, `rbB`, `rbAFrame`, `rbBFrame`): [`btConeTwistConstraint`](Ammo.btConeTwistConstraint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rbA` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `rbB` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `rbAFrame` | [`btTransform`](Ammo.btTransform.md) |
+| `rbBFrame` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+[`btConeTwistConstraint`](Ammo.btConeTwistConstraint.md)
+
+#### Overrides
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[constructor](Ammo.btTypedConstraint.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:582](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L582)
+
+• **new btConeTwistConstraint**(`rbA`, `rbAFrame`): [`btConeTwistConstraint`](Ammo.btConeTwistConstraint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rbA` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `rbAFrame` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+[`btConeTwistConstraint`](Ammo.btConeTwistConstraint.md)
+
+#### Overrides
+
+btTypedConstraint.constructor
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:583](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L583)
+
+## Methods
+
+### enableFeedback
+
+▸ **enableFeedback**(`needsFeedback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `needsFeedback` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[enableFeedback](Ammo.btTypedConstraint.md#enablefeedback)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:542](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L542)
+
+___
+
+### getBreakingImpulseThreshold
+
+▸ **getBreakingImpulseThreshold**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[getBreakingImpulseThreshold](Ammo.btTypedConstraint.md#getbreakingimpulsethreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:543](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L543)
+
+___
+
+### setBreakingImpulseThreshold
+
+▸ **setBreakingImpulseThreshold**(`threshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `threshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[setBreakingImpulseThreshold](Ammo.btTypedConstraint.md#setbreakingimpulsethreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:544](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L544)
+
+___
+
+### getParam
+
+▸ **getParam**(`num`, `axis`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `num` | `number` |
+| `axis` | `number` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[getParam](Ammo.btTypedConstraint.md#getparam)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:545](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L545)
+
+___
+
+### setParam
+
+▸ **setParam**(`num`, `value`, `axis`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `num` | `number` |
+| `value` | `number` |
+| `axis` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[setParam](Ammo.btTypedConstraint.md#setparam)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:546](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L546)
+
+___
+
+### setLimit
+
+▸ **setLimit**(`limitIndex`, `limitValue`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `limitIndex` | `number` |
+| `limitValue` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:584](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L584)
+
+___
+
+### setAngularOnly
+
+▸ **setAngularOnly**(`angularOnly`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `angularOnly` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:585](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L585)
+
+___
+
+### setDamping
+
+▸ **setDamping**(`damping`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `damping` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:586](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L586)
+
+___
+
+### enableMotor
+
+▸ **enableMotor**(`b`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `b` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:587](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L587)
+
+___
+
+### setMaxMotorImpulse
+
+▸ **setMaxMotorImpulse**(`maxMotorImpulse`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `maxMotorImpulse` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:588](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L588)
+
+___
+
+### setMaxMotorImpulseNormalized
+
+▸ **setMaxMotorImpulseNormalized**(`maxMotorImpulse`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `maxMotorImpulse` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:589](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L589)
+
+___
+
+### setMotorTarget
+
+▸ **setMotorTarget**(`q`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `q` | [`btQuaternion`](Ammo.btQuaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:590](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L590)
+
+___
+
+### setMotorTargetInConstraintSpace
+
+▸ **setMotorTargetInConstraintSpace**(`q`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `q` | [`btQuaternion`](Ammo.btQuaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:591](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L591)
diff --git a/docs/physics/classes/Ammo.btConstCollisionObjectArray.md b/docs/physics/classes/Ammo.btConstCollisionObjectArray.md
new file mode 100644
index 00000000..0d251535
--- /dev/null
+++ b/docs/physics/classes/Ammo.btConstCollisionObjectArray.md
@@ -0,0 +1,56 @@
+# Class: btConstCollisionObjectArray
+
+[Ammo](../modules/Ammo.md).btConstCollisionObjectArray
+
+### Constructors
+
+- [constructor](Ammo.btConstCollisionObjectArray.md#constructor)
+
+### Methods
+
+- [size](Ammo.btConstCollisionObjectArray.md#size)
+- [at](Ammo.btConstCollisionObjectArray.md#at)
+
+## Constructors
+
+### constructor
+
+• **new btConstCollisionObjectArray**(): [`btConstCollisionObjectArray`](Ammo.btConstCollisionObjectArray.md)
+
+#### Returns
+
+[`btConstCollisionObjectArray`](Ammo.btConstCollisionObjectArray.md)
+
+## Methods
+
+### size
+
+▸ **size**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:186](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L186)
+
+___
+
+### at
+
+▸ **at**(`n`): [`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `n` | `number` |
+
+#### Returns
+
+[`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:187](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L187)
diff --git a/docs/physics/classes/Ammo.btConstraintSetting.md b/docs/physics/classes/Ammo.btConstraintSetting.md
new file mode 100644
index 00000000..1fd0348e
--- /dev/null
+++ b/docs/physics/classes/Ammo.btConstraintSetting.md
@@ -0,0 +1,132 @@
+# Class: btConstraintSetting
+
+[Ammo](../modules/Ammo.md).btConstraintSetting
+
+### Constructors
+
+- [constructor](Ammo.btConstraintSetting.md#constructor)
+
+### Methods
+
+- [get\_m\_tau](Ammo.btConstraintSetting.md#get_m_tau)
+- [set\_m\_tau](Ammo.btConstraintSetting.md#set_m_tau)
+- [get\_m\_damping](Ammo.btConstraintSetting.md#get_m_damping)
+- [set\_m\_damping](Ammo.btConstraintSetting.md#set_m_damping)
+- [get\_m\_impulseClamp](Ammo.btConstraintSetting.md#get_m_impulseclamp)
+- [set\_m\_impulseClamp](Ammo.btConstraintSetting.md#set_m_impulseclamp)
+
+## Constructors
+
+### constructor
+
+• **new btConstraintSetting**(): [`btConstraintSetting`](Ammo.btConstraintSetting.md)
+
+#### Returns
+
+[`btConstraintSetting`](Ammo.btConstraintSetting.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:533](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L533)
+
+## Methods
+
+### get\_m\_tau
+
+▸ **get_m_tau**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:534](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L534)
+
+___
+
+### set\_m\_tau
+
+▸ **set_m_tau**(`m_tau`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_tau` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:535](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L535)
+
+___
+
+### get\_m\_damping
+
+▸ **get_m_damping**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:536](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L536)
+
+___
+
+### set\_m\_damping
+
+▸ **set_m_damping**(`m_damping`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_damping` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:537](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L537)
+
+___
+
+### get\_m\_impulseClamp
+
+▸ **get_m_impulseClamp**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:538](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L538)
+
+___
+
+### set\_m\_impulseClamp
+
+▸ **set_m_impulseClamp**(`m_impulseClamp`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_impulseClamp` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:539](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L539)
diff --git a/docs/physics/classes/Ammo.btConstraintSolver.md b/docs/physics/classes/Ammo.btConstraintSolver.md
new file mode 100644
index 00000000..837ffe90
--- /dev/null
+++ b/docs/physics/classes/Ammo.btConstraintSolver.md
@@ -0,0 +1,17 @@
+# Class: btConstraintSolver
+
+[Ammo](../modules/Ammo.md).btConstraintSolver
+
+### Constructors
+
+- [constructor](Ammo.btConstraintSolver.md#constructor)
+
+## Constructors
+
+### constructor
+
+• **new btConstraintSolver**(): [`btConstraintSolver`](Ammo.btConstraintSolver.md)
+
+#### Returns
+
+[`btConstraintSolver`](Ammo.btConstraintSolver.md)
diff --git a/docs/physics/classes/Ammo.btContactSolverInfo.md b/docs/physics/classes/Ammo.btContactSolverInfo.md
new file mode 100644
index 00000000..c05c8d88
--- /dev/null
+++ b/docs/physics/classes/Ammo.btContactSolverInfo.md
@@ -0,0 +1,128 @@
+# Class: btContactSolverInfo
+
+[Ammo](../modules/Ammo.md).btContactSolverInfo
+
+### Constructors
+
+- [constructor](Ammo.btContactSolverInfo.md#constructor)
+
+### Methods
+
+- [get\_m\_splitImpulse](Ammo.btContactSolverInfo.md#get_m_splitimpulse)
+- [set\_m\_splitImpulse](Ammo.btContactSolverInfo.md#set_m_splitimpulse)
+- [get\_m\_splitImpulsePenetrationThreshold](Ammo.btContactSolverInfo.md#get_m_splitimpulsepenetrationthreshold)
+- [set\_m\_splitImpulsePenetrationThreshold](Ammo.btContactSolverInfo.md#set_m_splitimpulsepenetrationthreshold)
+- [get\_m\_numIterations](Ammo.btContactSolverInfo.md#get_m_numiterations)
+- [set\_m\_numIterations](Ammo.btContactSolverInfo.md#set_m_numiterations)
+
+## Constructors
+
+### constructor
+
+• **new btContactSolverInfo**(): [`btContactSolverInfo`](Ammo.btContactSolverInfo.md)
+
+#### Returns
+
+[`btContactSolverInfo`](Ammo.btContactSolverInfo.md)
+
+## Methods
+
+### get\_m\_splitImpulse
+
+▸ **get_m_splitImpulse**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:663](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L663)
+
+___
+
+### set\_m\_splitImpulse
+
+▸ **set_m_splitImpulse**(`m_splitImpulse`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_splitImpulse` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:664](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L664)
+
+___
+
+### get\_m\_splitImpulsePenetrationThreshold
+
+▸ **get_m_splitImpulsePenetrationThreshold**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:665](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L665)
+
+___
+
+### set\_m\_splitImpulsePenetrationThreshold
+
+▸ **set_m_splitImpulsePenetrationThreshold**(`m_splitImpulsePenetrationThreshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_splitImpulsePenetrationThreshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:666](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L666)
+
+___
+
+### get\_m\_numIterations
+
+▸ **get_m_numIterations**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:667](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L667)
+
+___
+
+### set\_m\_numIterations
+
+▸ **set_m_numIterations**(`m_numIterations`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_numIterations` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:668](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L668)
diff --git a/docs/physics/classes/Ammo.btConvexHullShape.md b/docs/physics/classes/Ammo.btConvexHullShape.md
new file mode 100644
index 00000000..081ca719
--- /dev/null
+++ b/docs/physics/classes/Ammo.btConvexHullShape.md
@@ -0,0 +1,243 @@
+# Class: btConvexHullShape
+
+[Ammo](../modules/Ammo.md).btConvexHullShape
+
+## Hierarchy
+
+- [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+ ↳ **`btConvexHullShape`**
+
+### Constructors
+
+- [constructor](Ammo.btConvexHullShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btConvexHullShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btConvexHullShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btConvexHullShape.md#calculatelocalinertia)
+- [addPoint](Ammo.btConvexHullShape.md#addpoint)
+- [setMargin](Ammo.btConvexHullShape.md#setmargin)
+- [getMargin](Ammo.btConvexHullShape.md#getmargin)
+- [getNumVertices](Ammo.btConvexHullShape.md#getnumvertices)
+- [initializePolyhedralFeatures](Ammo.btConvexHullShape.md#initializepolyhedralfeatures)
+- [recalcLocalAabb](Ammo.btConvexHullShape.md#recalclocalaabb)
+- [getConvexPolyhedron](Ammo.btConvexHullShape.md#getconvexpolyhedron)
+
+## Constructors
+
+### constructor
+
+• **new btConvexHullShape**(`points?`, `numPoints?`): [`btConvexHullShape`](Ammo.btConvexHullShape.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `points?` | readonly `number`[] |
+| `numPoints?` | `number` |
+
+#### Returns
+
+[`btConvexHullShape`](Ammo.btConvexHullShape.md)
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[constructor](Ammo.btCollisionShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:363](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L363)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setLocalScaling](Ammo.btCollisionShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getLocalScaling](Ammo.btCollisionShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[calculateLocalInertia](Ammo.btCollisionShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### addPoint
+
+▸ **addPoint**(`point`, `recalculateLocalAABB?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `point` | [`btVector3`](Ammo.btVector3.md) |
+| `recalculateLocalAABB?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:364](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L364)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setMargin](Ammo.btCollisionShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:365](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L365)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getMargin](Ammo.btCollisionShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:366](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L366)
+
+___
+
+### getNumVertices
+
+▸ **getNumVertices**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:367](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L367)
+
+___
+
+### initializePolyhedralFeatures
+
+▸ **initializePolyhedralFeatures**(`shiftVerticesByMargin`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shiftVerticesByMargin` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:368](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L368)
+
+___
+
+### recalcLocalAabb
+
+▸ **recalcLocalAabb**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:369](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L369)
+
+___
+
+### getConvexPolyhedron
+
+▸ **getConvexPolyhedron**(): [`btConvexPolyhedron`](Ammo.btConvexPolyhedron.md)
+
+#### Returns
+
+[`btConvexPolyhedron`](Ammo.btConvexPolyhedron.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:370](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L370)
diff --git a/docs/physics/classes/Ammo.btConvexPolyhedron.md b/docs/physics/classes/Ammo.btConvexPolyhedron.md
new file mode 100644
index 00000000..5bb12b20
--- /dev/null
+++ b/docs/physics/classes/Ammo.btConvexPolyhedron.md
@@ -0,0 +1,92 @@
+# Class: btConvexPolyhedron
+
+[Ammo](../modules/Ammo.md).btConvexPolyhedron
+
+### Constructors
+
+- [constructor](Ammo.btConvexPolyhedron.md#constructor)
+
+### Methods
+
+- [get\_m\_vertices](Ammo.btConvexPolyhedron.md#get_m_vertices)
+- [set\_m\_vertices](Ammo.btConvexPolyhedron.md#set_m_vertices)
+- [get\_m\_faces](Ammo.btConvexPolyhedron.md#get_m_faces)
+- [set\_m\_faces](Ammo.btConvexPolyhedron.md#set_m_faces)
+
+## Constructors
+
+### constructor
+
+• **new btConvexPolyhedron**(): [`btConvexPolyhedron`](Ammo.btConvexPolyhedron.md)
+
+#### Returns
+
+[`btConvexPolyhedron`](Ammo.btConvexPolyhedron.md)
+
+## Methods
+
+### get\_m\_vertices
+
+▸ **get_m_vertices**(): [`btVector3Array`](Ammo.btVector3Array.md)
+
+#### Returns
+
+[`btVector3Array`](Ammo.btVector3Array.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:357](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L357)
+
+___
+
+### set\_m\_vertices
+
+▸ **set_m_vertices**(`m_vertices`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_vertices` | [`btVector3Array`](Ammo.btVector3Array.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:358](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L358)
+
+___
+
+### get\_m\_faces
+
+▸ **get_m_faces**(): [`btFaceArray`](Ammo.btFaceArray.md)
+
+#### Returns
+
+[`btFaceArray`](Ammo.btFaceArray.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:359](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L359)
+
+___
+
+### set\_m\_faces
+
+▸ **set_m_faces**(`m_faces`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_faces` | [`btFaceArray`](Ammo.btFaceArray.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:360](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L360)
diff --git a/docs/physics/classes/Ammo.btConvexShape.md b/docs/physics/classes/Ammo.btConvexShape.md
new file mode 100644
index 00000000..1fc1423c
--- /dev/null
+++ b/docs/physics/classes/Ammo.btConvexShape.md
@@ -0,0 +1,146 @@
+# Class: btConvexShape
+
+[Ammo](../modules/Ammo.md).btConvexShape
+
+## Hierarchy
+
+- [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+ ↳ **`btConvexShape`**
+
+ ↳↳ [`btConvexTriangleMeshShape`](Ammo.btConvexTriangleMeshShape.md)
+
+### Constructors
+
+- [constructor](Ammo.btConvexShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btConvexShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btConvexShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btConvexShape.md#calculatelocalinertia)
+- [setMargin](Ammo.btConvexShape.md#setmargin)
+- [getMargin](Ammo.btConvexShape.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btConvexShape**(): [`btConvexShape`](Ammo.btConvexShape.md)
+
+#### Returns
+
+[`btConvexShape`](Ammo.btConvexShape.md)
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[constructor](Ammo.btCollisionShape.md#constructor)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setLocalScaling](Ammo.btCollisionShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getLocalScaling](Ammo.btCollisionShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[calculateLocalInertia](Ammo.btCollisionShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setMargin](Ammo.btCollisionShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:276](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L276)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getMargin](Ammo.btCollisionShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:277](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L277)
diff --git a/docs/physics/classes/Ammo.btConvexTriangleMeshShape.md b/docs/physics/classes/Ammo.btConvexTriangleMeshShape.md
new file mode 100644
index 00000000..f5927139
--- /dev/null
+++ b/docs/physics/classes/Ammo.btConvexTriangleMeshShape.md
@@ -0,0 +1,155 @@
+# Class: btConvexTriangleMeshShape
+
+[Ammo](../modules/Ammo.md).btConvexTriangleMeshShape
+
+## Hierarchy
+
+- [`btConvexShape`](Ammo.btConvexShape.md)
+
+ ↳ **`btConvexTriangleMeshShape`**
+
+### Constructors
+
+- [constructor](Ammo.btConvexTriangleMeshShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btConvexTriangleMeshShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btConvexTriangleMeshShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btConvexTriangleMeshShape.md#calculatelocalinertia)
+- [setMargin](Ammo.btConvexTriangleMeshShape.md#setmargin)
+- [getMargin](Ammo.btConvexTriangleMeshShape.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btConvexTriangleMeshShape**(`meshInterface`, `calcAabb?`): [`btConvexTriangleMeshShape`](Ammo.btConvexTriangleMeshShape.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `meshInterface` | [`btStridingMeshInterface`](Ammo.btStridingMeshInterface.md) |
+| `calcAabb?` | `boolean` |
+
+#### Returns
+
+[`btConvexTriangleMeshShape`](Ammo.btConvexTriangleMeshShape.md)
+
+#### Overrides
+
+[btConvexShape](Ammo.btConvexShape.md).[constructor](Ammo.btConvexShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:281](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L281)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConvexShape](Ammo.btConvexShape.md).[setLocalScaling](Ammo.btConvexShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btConvexShape](Ammo.btConvexShape.md).[getLocalScaling](Ammo.btConvexShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConvexShape](Ammo.btConvexShape.md).[calculateLocalInertia](Ammo.btConvexShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConvexShape](Ammo.btConvexShape.md).[setMargin](Ammo.btConvexShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:276](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L276)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btConvexShape](Ammo.btConvexShape.md).[getMargin](Ammo.btConvexShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:277](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L277)
diff --git a/docs/physics/classes/Ammo.btCylinderShape.md b/docs/physics/classes/Ammo.btCylinderShape.md
new file mode 100644
index 00000000..491ce4cb
--- /dev/null
+++ b/docs/physics/classes/Ammo.btCylinderShape.md
@@ -0,0 +1,158 @@
+# Class: btCylinderShape
+
+[Ammo](../modules/Ammo.md).btCylinderShape
+
+## Hierarchy
+
+- [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+ ↳ **`btCylinderShape`**
+
+ ↳↳ [`btCylinderShapeX`](Ammo.btCylinderShapeX.md)
+
+ ↳↳ [`btCylinderShapeZ`](Ammo.btCylinderShapeZ.md)
+
+### Constructors
+
+- [constructor](Ammo.btCylinderShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btCylinderShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btCylinderShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btCylinderShape.md#calculatelocalinertia)
+- [setMargin](Ammo.btCylinderShape.md#setmargin)
+- [getMargin](Ammo.btCylinderShape.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btCylinderShape**(`halfExtents`): [`btCylinderShape`](Ammo.btCylinderShape.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `halfExtents` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`btCylinderShape`](Ammo.btCylinderShape.md)
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[constructor](Ammo.btCollisionShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:307](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L307)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setLocalScaling](Ammo.btCollisionShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getLocalScaling](Ammo.btCollisionShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[calculateLocalInertia](Ammo.btCollisionShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setMargin](Ammo.btCollisionShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:308](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L308)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getMargin](Ammo.btCollisionShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:309](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L309)
diff --git a/docs/physics/classes/Ammo.btCylinderShapeX.md b/docs/physics/classes/Ammo.btCylinderShapeX.md
new file mode 100644
index 00000000..febf7821
--- /dev/null
+++ b/docs/physics/classes/Ammo.btCylinderShapeX.md
@@ -0,0 +1,154 @@
+# Class: btCylinderShapeX
+
+[Ammo](../modules/Ammo.md).btCylinderShapeX
+
+## Hierarchy
+
+- [`btCylinderShape`](Ammo.btCylinderShape.md)
+
+ ↳ **`btCylinderShapeX`**
+
+### Constructors
+
+- [constructor](Ammo.btCylinderShapeX.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btCylinderShapeX.md#setlocalscaling)
+- [getLocalScaling](Ammo.btCylinderShapeX.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btCylinderShapeX.md#calculatelocalinertia)
+- [setMargin](Ammo.btCylinderShapeX.md#setmargin)
+- [getMargin](Ammo.btCylinderShapeX.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btCylinderShapeX**(`halfExtents`): [`btCylinderShapeX`](Ammo.btCylinderShapeX.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `halfExtents` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`btCylinderShapeX`](Ammo.btCylinderShapeX.md)
+
+#### Overrides
+
+[btCylinderShape](Ammo.btCylinderShape.md).[constructor](Ammo.btCylinderShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:312](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L312)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCylinderShape](Ammo.btCylinderShape.md).[setLocalScaling](Ammo.btCylinderShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btCylinderShape](Ammo.btCylinderShape.md).[getLocalScaling](Ammo.btCylinderShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCylinderShape](Ammo.btCylinderShape.md).[calculateLocalInertia](Ammo.btCylinderShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[btCylinderShape](Ammo.btCylinderShape.md).[setMargin](Ammo.btCylinderShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:313](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L313)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Overrides
+
+[btCylinderShape](Ammo.btCylinderShape.md).[getMargin](Ammo.btCylinderShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:314](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L314)
diff --git a/docs/physics/classes/Ammo.btCylinderShapeZ.md b/docs/physics/classes/Ammo.btCylinderShapeZ.md
new file mode 100644
index 00000000..c98529da
--- /dev/null
+++ b/docs/physics/classes/Ammo.btCylinderShapeZ.md
@@ -0,0 +1,154 @@
+# Class: btCylinderShapeZ
+
+[Ammo](../modules/Ammo.md).btCylinderShapeZ
+
+## Hierarchy
+
+- [`btCylinderShape`](Ammo.btCylinderShape.md)
+
+ ↳ **`btCylinderShapeZ`**
+
+### Constructors
+
+- [constructor](Ammo.btCylinderShapeZ.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btCylinderShapeZ.md#setlocalscaling)
+- [getLocalScaling](Ammo.btCylinderShapeZ.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btCylinderShapeZ.md#calculatelocalinertia)
+- [setMargin](Ammo.btCylinderShapeZ.md#setmargin)
+- [getMargin](Ammo.btCylinderShapeZ.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btCylinderShapeZ**(`halfExtents`): [`btCylinderShapeZ`](Ammo.btCylinderShapeZ.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `halfExtents` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`btCylinderShapeZ`](Ammo.btCylinderShapeZ.md)
+
+#### Overrides
+
+[btCylinderShape](Ammo.btCylinderShape.md).[constructor](Ammo.btCylinderShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:317](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L317)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCylinderShape](Ammo.btCylinderShape.md).[setLocalScaling](Ammo.btCylinderShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btCylinderShape](Ammo.btCylinderShape.md).[getLocalScaling](Ammo.btCylinderShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCylinderShape](Ammo.btCylinderShape.md).[calculateLocalInertia](Ammo.btCylinderShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[btCylinderShape](Ammo.btCylinderShape.md).[setMargin](Ammo.btCylinderShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:318](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L318)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Overrides
+
+[btCylinderShape](Ammo.btCylinderShape.md).[getMargin](Ammo.btCylinderShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:319](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L319)
diff --git a/docs/physics/classes/Ammo.btDbvtBroadphase.md b/docs/physics/classes/Ammo.btDbvtBroadphase.md
new file mode 100644
index 00000000..b6f0e2c0
--- /dev/null
+++ b/docs/physics/classes/Ammo.btDbvtBroadphase.md
@@ -0,0 +1,53 @@
+# Class: btDbvtBroadphase
+
+[Ammo](../modules/Ammo.md).btDbvtBroadphase
+
+## Hierarchy
+
+- [`btBroadphaseInterface`](Ammo.btBroadphaseInterface.md)
+
+ ↳ **`btDbvtBroadphase`**
+
+### Constructors
+
+- [constructor](Ammo.btDbvtBroadphase.md#constructor)
+
+### Methods
+
+- [getOverlappingPairCache](Ammo.btDbvtBroadphase.md#getoverlappingpaircache)
+
+## Constructors
+
+### constructor
+
+• **new btDbvtBroadphase**(): [`btDbvtBroadphase`](Ammo.btDbvtBroadphase.md)
+
+#### Returns
+
+[`btDbvtBroadphase`](Ammo.btDbvtBroadphase.md)
+
+#### Overrides
+
+[btBroadphaseInterface](Ammo.btBroadphaseInterface.md).[constructor](Ammo.btBroadphaseInterface.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:461](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L461)
+
+## Methods
+
+### getOverlappingPairCache
+
+▸ **getOverlappingPairCache**(): [`btOverlappingPairCache`](Ammo.btOverlappingPairCache.md)
+
+#### Returns
+
+[`btOverlappingPairCache`](Ammo.btOverlappingPairCache.md)
+
+#### Inherited from
+
+[btBroadphaseInterface](Ammo.btBroadphaseInterface.md).[getOverlappingPairCache](Ammo.btBroadphaseInterface.md#getoverlappingpaircache)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:457](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L457)
diff --git a/docs/physics/classes/Ammo.btDefaultCollisionConfiguration.md b/docs/physics/classes/Ammo.btDefaultCollisionConfiguration.md
new file mode 100644
index 00000000..0a75afee
--- /dev/null
+++ b/docs/physics/classes/Ammo.btDefaultCollisionConfiguration.md
@@ -0,0 +1,33 @@
+# Class: btDefaultCollisionConfiguration
+
+[Ammo](../modules/Ammo.md).btDefaultCollisionConfiguration
+
+## Hierarchy
+
+- **`btDefaultCollisionConfiguration`**
+
+ ↳ [`btSoftBodyRigidBodyCollisionConfiguration`](Ammo.btSoftBodyRigidBodyCollisionConfiguration.md)
+
+### Constructors
+
+- [constructor](Ammo.btDefaultCollisionConfiguration.md#constructor)
+
+## Constructors
+
+### constructor
+
+• **new btDefaultCollisionConfiguration**(`info?`): [`btDefaultCollisionConfiguration`](Ammo.btDefaultCollisionConfiguration.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `info?` | [`btDefaultCollisionConstructionInfo`](Ammo.btDefaultCollisionConstructionInfo.md) |
+
+#### Returns
+
+[`btDefaultCollisionConfiguration`](Ammo.btDefaultCollisionConfiguration.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:432](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L432)
diff --git a/docs/physics/classes/Ammo.btDefaultCollisionConstructionInfo.md b/docs/physics/classes/Ammo.btDefaultCollisionConstructionInfo.md
new file mode 100644
index 00000000..458fc1af
--- /dev/null
+++ b/docs/physics/classes/Ammo.btDefaultCollisionConstructionInfo.md
@@ -0,0 +1,21 @@
+# Class: btDefaultCollisionConstructionInfo
+
+[Ammo](../modules/Ammo.md).btDefaultCollisionConstructionInfo
+
+### Constructors
+
+- [constructor](Ammo.btDefaultCollisionConstructionInfo.md#constructor)
+
+## Constructors
+
+### constructor
+
+• **new btDefaultCollisionConstructionInfo**(): [`btDefaultCollisionConstructionInfo`](Ammo.btDefaultCollisionConstructionInfo.md)
+
+#### Returns
+
+[`btDefaultCollisionConstructionInfo`](Ammo.btDefaultCollisionConstructionInfo.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:429](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L429)
diff --git a/docs/physics/classes/Ammo.btDefaultMotionState.md b/docs/physics/classes/Ammo.btDefaultMotionState.md
new file mode 100644
index 00000000..6bff604e
--- /dev/null
+++ b/docs/physics/classes/Ammo.btDefaultMotionState.md
@@ -0,0 +1,127 @@
+# Class: btDefaultMotionState
+
+[Ammo](../modules/Ammo.md).btDefaultMotionState
+
+## Hierarchy
+
+- [`btMotionState`](Ammo.btMotionState.md)
+
+ ↳ **`btDefaultMotionState`**
+
+### Constructors
+
+- [constructor](Ammo.btDefaultMotionState.md#constructor)
+
+### Methods
+
+- [getWorldTransform](Ammo.btDefaultMotionState.md#getworldtransform)
+- [setWorldTransform](Ammo.btDefaultMotionState.md#setworldtransform)
+- [get\_m\_graphicsWorldTrans](Ammo.btDefaultMotionState.md#get_m_graphicsworldtrans)
+- [set\_m\_graphicsWorldTrans](Ammo.btDefaultMotionState.md#set_m_graphicsworldtrans)
+
+## Constructors
+
+### constructor
+
+• **new btDefaultMotionState**(`startTrans?`, `centerOfMassOffset?`): [`btDefaultMotionState`](Ammo.btDefaultMotionState.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `startTrans?` | [`btTransform`](Ammo.btTransform.md) |
+| `centerOfMassOffset?` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+[`btDefaultMotionState`](Ammo.btDefaultMotionState.md)
+
+#### Overrides
+
+[btMotionState](Ammo.btMotionState.md).[constructor](Ammo.btMotionState.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:123](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L123)
+
+## Methods
+
+### getWorldTransform
+
+▸ **getWorldTransform**(`worldTrans`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldTrans` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btMotionState](Ammo.btMotionState.md).[getWorldTransform](Ammo.btMotionState.md#getworldtransform)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:119](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L119)
+
+___
+
+### setWorldTransform
+
+▸ **setWorldTransform**(`worldTrans`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldTrans` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btMotionState](Ammo.btMotionState.md).[setWorldTransform](Ammo.btMotionState.md#setworldtransform)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:120](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L120)
+
+___
+
+### get\_m\_graphicsWorldTrans
+
+▸ **get_m_graphicsWorldTrans**(): [`btTransform`](Ammo.btTransform.md)
+
+#### Returns
+
+[`btTransform`](Ammo.btTransform.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:124](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L124)
+
+___
+
+### set\_m\_graphicsWorldTrans
+
+▸ **set_m_graphicsWorldTrans**(`m_graphicsWorldTrans`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_graphicsWorldTrans` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:125](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L125)
diff --git a/docs/physics/classes/Ammo.btDefaultSoftBodySolver.md b/docs/physics/classes/Ammo.btDefaultSoftBodySolver.md
new file mode 100644
index 00000000..1b4f6a0d
--- /dev/null
+++ b/docs/physics/classes/Ammo.btDefaultSoftBodySolver.md
@@ -0,0 +1,31 @@
+# Class: btDefaultSoftBodySolver
+
+[Ammo](../modules/Ammo.md).btDefaultSoftBodySolver
+
+## Hierarchy
+
+- [`btSoftBodySolver`](Ammo.btSoftBodySolver.md)
+
+ ↳ **`btDefaultSoftBodySolver`**
+
+### Constructors
+
+- [constructor](Ammo.btDefaultSoftBodySolver.md#constructor)
+
+## Constructors
+
+### constructor
+
+• **new btDefaultSoftBodySolver**(): [`btDefaultSoftBodySolver`](Ammo.btDefaultSoftBodySolver.md)
+
+#### Returns
+
+[`btDefaultSoftBodySolver`](Ammo.btDefaultSoftBodySolver.md)
+
+#### Overrides
+
+[btSoftBodySolver](Ammo.btSoftBodySolver.md).[constructor](Ammo.btSoftBodySolver.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1063](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1063)
diff --git a/docs/physics/classes/Ammo.btDefaultVehicleRaycaster.md b/docs/physics/classes/Ammo.btDefaultVehicleRaycaster.md
new file mode 100644
index 00000000..b7645386
--- /dev/null
+++ b/docs/physics/classes/Ammo.btDefaultVehicleRaycaster.md
@@ -0,0 +1,67 @@
+# Class: btDefaultVehicleRaycaster
+
+[Ammo](../modules/Ammo.md).btDefaultVehicleRaycaster
+
+## Hierarchy
+
+- [`btVehicleRaycaster`](Ammo.btVehicleRaycaster.md)
+
+ ↳ **`btDefaultVehicleRaycaster`**
+
+### Constructors
+
+- [constructor](Ammo.btDefaultVehicleRaycaster.md#constructor)
+
+### Methods
+
+- [castRay](Ammo.btDefaultVehicleRaycaster.md#castray)
+
+## Constructors
+
+### constructor
+
+• **new btDefaultVehicleRaycaster**(`world`): [`btDefaultVehicleRaycaster`](Ammo.btDefaultVehicleRaycaster.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `world` | [`btDynamicsWorld`](Ammo.btDynamicsWorld.md) |
+
+#### Returns
+
+[`btDefaultVehicleRaycaster`](Ammo.btDefaultVehicleRaycaster.md)
+
+#### Overrides
+
+[btVehicleRaycaster](Ammo.btVehicleRaycaster.md).[constructor](Ammo.btVehicleRaycaster.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:718](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L718)
+
+## Methods
+
+### castRay
+
+▸ **castRay**(`from`, `to`, `result`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | [`btVector3`](Ammo.btVector3.md) |
+| `to` | [`btVector3`](Ammo.btVector3.md) |
+| `result` | [`btVehicleRaycasterResult`](Ammo.btVehicleRaycasterResult.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btVehicleRaycaster](Ammo.btVehicleRaycaster.md).[castRay](Ammo.btVehicleRaycaster.md#castray)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:715](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L715)
diff --git a/docs/physics/classes/Ammo.btDiscreteDynamicsWorld.md b/docs/physics/classes/Ammo.btDiscreteDynamicsWorld.md
new file mode 100644
index 00000000..b7449e11
--- /dev/null
+++ b/docs/physics/classes/Ammo.btDiscreteDynamicsWorld.md
@@ -0,0 +1,718 @@
+# Class: btDiscreteDynamicsWorld
+
+[Ammo](../modules/Ammo.md).btDiscreteDynamicsWorld
+
+## Hierarchy
+
+- [`btDynamicsWorld`](Ammo.btDynamicsWorld.md)
+
+ ↳ **`btDiscreteDynamicsWorld`**
+
+ ↳↳ [`btSoftRigidDynamicsWorld`](Ammo.btSoftRigidDynamicsWorld.md)
+
+### Constructors
+
+- [constructor](Ammo.btDiscreteDynamicsWorld.md#constructor)
+
+### Methods
+
+- [getDispatcher](Ammo.btDiscreteDynamicsWorld.md#getdispatcher)
+- [rayTest](Ammo.btDiscreteDynamicsWorld.md#raytest)
+- [getPairCache](Ammo.btDiscreteDynamicsWorld.md#getpaircache)
+- [getDispatchInfo](Ammo.btDiscreteDynamicsWorld.md#getdispatchinfo)
+- [addCollisionObject](Ammo.btDiscreteDynamicsWorld.md#addcollisionobject)
+- [removeCollisionObject](Ammo.btDiscreteDynamicsWorld.md#removecollisionobject)
+- [getBroadphase](Ammo.btDiscreteDynamicsWorld.md#getbroadphase)
+- [convexSweepTest](Ammo.btDiscreteDynamicsWorld.md#convexsweeptest)
+- [contactPairTest](Ammo.btDiscreteDynamicsWorld.md#contactpairtest)
+- [contactTest](Ammo.btDiscreteDynamicsWorld.md#contacttest)
+- [updateSingleAabb](Ammo.btDiscreteDynamicsWorld.md#updatesingleaabb)
+- [setDebugDrawer](Ammo.btDiscreteDynamicsWorld.md#setdebugdrawer)
+- [getDebugDrawer](Ammo.btDiscreteDynamicsWorld.md#getdebugdrawer)
+- [debugDrawWorld](Ammo.btDiscreteDynamicsWorld.md#debugdrawworld)
+- [debugDrawObject](Ammo.btDiscreteDynamicsWorld.md#debugdrawobject)
+- [addAction](Ammo.btDiscreteDynamicsWorld.md#addaction)
+- [removeAction](Ammo.btDiscreteDynamicsWorld.md#removeaction)
+- [getSolverInfo](Ammo.btDiscreteDynamicsWorld.md#getsolverinfo)
+- [setInternalTickCallback](Ammo.btDiscreteDynamicsWorld.md#setinternaltickcallback)
+- [setGravity](Ammo.btDiscreteDynamicsWorld.md#setgravity)
+- [getGravity](Ammo.btDiscreteDynamicsWorld.md#getgravity)
+- [addRigidBody](Ammo.btDiscreteDynamicsWorld.md#addrigidbody)
+- [removeRigidBody](Ammo.btDiscreteDynamicsWorld.md#removerigidbody)
+- [addConstraint](Ammo.btDiscreteDynamicsWorld.md#addconstraint)
+- [removeConstraint](Ammo.btDiscreteDynamicsWorld.md#removeconstraint)
+- [stepSimulation](Ammo.btDiscreteDynamicsWorld.md#stepsimulation)
+- [setContactAddedCallback](Ammo.btDiscreteDynamicsWorld.md#setcontactaddedcallback)
+- [setContactProcessedCallback](Ammo.btDiscreteDynamicsWorld.md#setcontactprocessedcallback)
+- [setContactDestroyedCallback](Ammo.btDiscreteDynamicsWorld.md#setcontactdestroyedcallback)
+
+## Constructors
+
+### constructor
+
+• **new btDiscreteDynamicsWorld**(`dispatcher`, `pairCache`, `constraintSolver`, `collisionConfiguration`): [`btDiscreteDynamicsWorld`](Ammo.btDiscreteDynamicsWorld.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `dispatcher` | [`btDispatcher`](Ammo.btDispatcher.md) |
+| `pairCache` | [`btBroadphaseInterface`](Ammo.btBroadphaseInterface.md) |
+| `constraintSolver` | [`btConstraintSolver`](Ammo.btConstraintSolver.md) |
+| `collisionConfiguration` | [`btCollisionConfiguration`](Ammo.btCollisionConfiguration.md) |
+
+#### Returns
+
+[`btDiscreteDynamicsWorld`](Ammo.btDiscreteDynamicsWorld.md)
+
+#### Overrides
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[constructor](Ammo.btDynamicsWorld.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:678](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L678)
+
+## Methods
+
+### getDispatcher
+
+▸ **getDispatcher**(): [`btDispatcher`](Ammo.btDispatcher.md)
+
+#### Returns
+
+[`btDispatcher`](Ammo.btDispatcher.md)
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[getDispatcher](Ammo.btDynamicsWorld.md#getdispatcher)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:646](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L646)
+
+___
+
+### rayTest
+
+▸ **rayTest**(`rayFromWorld`, `rayToWorld`, `resultCallback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rayFromWorld` | [`btVector3`](Ammo.btVector3.md) |
+| `rayToWorld` | [`btVector3`](Ammo.btVector3.md) |
+| `resultCallback` | [`RayResultCallback`](Ammo.RayResultCallback.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[rayTest](Ammo.btDynamicsWorld.md#raytest)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:647](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L647)
+
+___
+
+### getPairCache
+
+▸ **getPairCache**(): [`btOverlappingPairCache`](Ammo.btOverlappingPairCache.md)
+
+#### Returns
+
+[`btOverlappingPairCache`](Ammo.btOverlappingPairCache.md)
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[getPairCache](Ammo.btDynamicsWorld.md#getpaircache)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:648](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L648)
+
+___
+
+### getDispatchInfo
+
+▸ **getDispatchInfo**(): [`btDispatcherInfo`](Ammo.btDispatcherInfo.md)
+
+#### Returns
+
+[`btDispatcherInfo`](Ammo.btDispatcherInfo.md)
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[getDispatchInfo](Ammo.btDynamicsWorld.md#getdispatchinfo)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:649](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L649)
+
+___
+
+### addCollisionObject
+
+▸ **addCollisionObject**(`collisionObject`, `collisionFilterGroup?`, `collisionFilterMask?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionObject` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+| `collisionFilterGroup?` | `number` |
+| `collisionFilterMask?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[addCollisionObject](Ammo.btDynamicsWorld.md#addcollisionobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:650](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L650)
+
+___
+
+### removeCollisionObject
+
+▸ **removeCollisionObject**(`collisionObject`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionObject` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[removeCollisionObject](Ammo.btDynamicsWorld.md#removecollisionobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:651](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L651)
+
+___
+
+### getBroadphase
+
+▸ **getBroadphase**(): [`btBroadphaseInterface`](Ammo.btBroadphaseInterface.md)
+
+#### Returns
+
+[`btBroadphaseInterface`](Ammo.btBroadphaseInterface.md)
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[getBroadphase](Ammo.btDynamicsWorld.md#getbroadphase)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:652](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L652)
+
+___
+
+### convexSweepTest
+
+▸ **convexSweepTest**(`castShape`, `from`, `to`, `resultCallback`, `allowedCcdPenetration`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `castShape` | [`btConvexShape`](Ammo.btConvexShape.md) |
+| `from` | [`btTransform`](Ammo.btTransform.md) |
+| `to` | [`btTransform`](Ammo.btTransform.md) |
+| `resultCallback` | [`ConvexResultCallback`](Ammo.ConvexResultCallback.md) |
+| `allowedCcdPenetration` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[convexSweepTest](Ammo.btDynamicsWorld.md#convexsweeptest)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:653](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L653)
+
+___
+
+### contactPairTest
+
+▸ **contactPairTest**(`colObjA`, `colObjB`, `resultCallback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `colObjA` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+| `colObjB` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+| `resultCallback` | [`ContactResultCallback`](Ammo.ContactResultCallback.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[contactPairTest](Ammo.btDynamicsWorld.md#contactpairtest)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:654](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L654)
+
+___
+
+### contactTest
+
+▸ **contactTest**(`colObj`, `resultCallback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `colObj` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+| `resultCallback` | [`ContactResultCallback`](Ammo.ContactResultCallback.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[contactTest](Ammo.btDynamicsWorld.md#contacttest)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:655](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L655)
+
+___
+
+### updateSingleAabb
+
+▸ **updateSingleAabb**(`colObj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `colObj` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[updateSingleAabb](Ammo.btDynamicsWorld.md#updatesingleaabb)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:656](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L656)
+
+___
+
+### setDebugDrawer
+
+▸ **setDebugDrawer**(`debugDrawer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `debugDrawer` | [`btIDebugDraw`](Ammo.btIDebugDraw.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[setDebugDrawer](Ammo.btDynamicsWorld.md#setdebugdrawer)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:657](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L657)
+
+___
+
+### getDebugDrawer
+
+▸ **getDebugDrawer**(): [`btIDebugDraw`](Ammo.btIDebugDraw.md)
+
+#### Returns
+
+[`btIDebugDraw`](Ammo.btIDebugDraw.md)
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[getDebugDrawer](Ammo.btDynamicsWorld.md#getdebugdrawer)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:658](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L658)
+
+___
+
+### debugDrawWorld
+
+▸ **debugDrawWorld**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[debugDrawWorld](Ammo.btDynamicsWorld.md#debugdrawworld)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:659](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L659)
+
+___
+
+### debugDrawObject
+
+▸ **debugDrawObject**(`worldTransform`, `shape`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldTransform` | [`btTransform`](Ammo.btTransform.md) |
+| `shape` | [`btCollisionShape`](Ammo.btCollisionShape.md) |
+| `color` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[debugDrawObject](Ammo.btDynamicsWorld.md#debugdrawobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:660](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L660)
+
+___
+
+### addAction
+
+▸ **addAction**(`action`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `action` | [`btActionInterface`](Ammo.btActionInterface.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[addAction](Ammo.btDynamicsWorld.md#addaction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:672](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L672)
+
+___
+
+### removeAction
+
+▸ **removeAction**(`action`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `action` | [`btActionInterface`](Ammo.btActionInterface.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[removeAction](Ammo.btDynamicsWorld.md#removeaction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:673](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L673)
+
+___
+
+### getSolverInfo
+
+▸ **getSolverInfo**(): [`btContactSolverInfo`](Ammo.btContactSolverInfo.md)
+
+#### Returns
+
+[`btContactSolverInfo`](Ammo.btContactSolverInfo.md)
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[getSolverInfo](Ammo.btDynamicsWorld.md#getsolverinfo)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:674](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L674)
+
+___
+
+### setInternalTickCallback
+
+▸ **setInternalTickCallback**(`cb`, `worldUserInfo?`, `isPreTick?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cb` | [`btInternalTickCallback`](../types/Ammo.btInternalTickCallback.md) |
+| `worldUserInfo?` | `unknown` |
+| `isPreTick?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDynamicsWorld](Ammo.btDynamicsWorld.md).[setInternalTickCallback](Ammo.btDynamicsWorld.md#setinternaltickcallback)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:675](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L675)
+
+___
+
+### setGravity
+
+▸ **setGravity**(`gravity`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `gravity` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:679](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L679)
+
+___
+
+### getGravity
+
+▸ **getGravity**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:680](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L680)
+
+___
+
+### addRigidBody
+
+▸ **addRigidBody**(`body`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `body` | [`btRigidBody`](Ammo.btRigidBody.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:681](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L681)
+
+▸ **addRigidBody**(`body`, `group`, `mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `body` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `group` | `number` |
+| `mask` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:682](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L682)
+
+___
+
+### removeRigidBody
+
+▸ **removeRigidBody**(`body`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `body` | [`btRigidBody`](Ammo.btRigidBody.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:683](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L683)
+
+___
+
+### addConstraint
+
+▸ **addConstraint**(`constraint`, `disableCollisionsBetweenLinkedBodies?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `constraint` | [`btTypedConstraint`](Ammo.btTypedConstraint.md) |
+| `disableCollisionsBetweenLinkedBodies?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:684](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L684)
+
+___
+
+### removeConstraint
+
+▸ **removeConstraint**(`constraint`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `constraint` | [`btTypedConstraint`](Ammo.btTypedConstraint.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:685](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L685)
+
+___
+
+### stepSimulation
+
+▸ **stepSimulation**(`timeStep`, `maxSubSteps?`, `fixedTimeStep?`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `timeStep` | `number` |
+| `maxSubSteps?` | `number` |
+| `fixedTimeStep?` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:686](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L686)
+
+___
+
+### setContactAddedCallback
+
+▸ **setContactAddedCallback**(`funcpointer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `funcpointer` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:687](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L687)
+
+___
+
+### setContactProcessedCallback
+
+▸ **setContactProcessedCallback**(`funcpointer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `funcpointer` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:688](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L688)
+
+___
+
+### setContactDestroyedCallback
+
+▸ **setContactDestroyedCallback**(`funcpointer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `funcpointer` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:689](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L689)
diff --git a/docs/physics/classes/Ammo.btDispatcher.md b/docs/physics/classes/Ammo.btDispatcher.md
new file mode 100644
index 00000000..54fae900
--- /dev/null
+++ b/docs/physics/classes/Ammo.btDispatcher.md
@@ -0,0 +1,62 @@
+# Class: btDispatcher
+
+[Ammo](../modules/Ammo.md).btDispatcher
+
+## Hierarchy
+
+- **`btDispatcher`**
+
+ ↳ [`btCollisionDispatcher`](Ammo.btCollisionDispatcher.md)
+
+### Constructors
+
+- [constructor](Ammo.btDispatcher.md#constructor)
+
+### Methods
+
+- [getNumManifolds](Ammo.btDispatcher.md#getnummanifolds)
+- [getManifoldByIndexInternal](Ammo.btDispatcher.md#getmanifoldbyindexinternal)
+
+## Constructors
+
+### constructor
+
+• **new btDispatcher**(): [`btDispatcher`](Ammo.btDispatcher.md)
+
+#### Returns
+
+[`btDispatcher`](Ammo.btDispatcher.md)
+
+## Methods
+
+### getNumManifolds
+
+▸ **getNumManifolds**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:442](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L442)
+
+___
+
+### getManifoldByIndexInternal
+
+▸ **getManifoldByIndexInternal**(`index`): [`btPersistentManifold`](Ammo.btPersistentManifold.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+[`btPersistentManifold`](Ammo.btPersistentManifold.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:443](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L443)
diff --git a/docs/physics/classes/Ammo.btDispatcherInfo.md b/docs/physics/classes/Ammo.btDispatcherInfo.md
new file mode 100644
index 00000000..7a630c83
--- /dev/null
+++ b/docs/physics/classes/Ammo.btDispatcherInfo.md
@@ -0,0 +1,416 @@
+# Class: btDispatcherInfo
+
+[Ammo](../modules/Ammo.md).btDispatcherInfo
+
+### Constructors
+
+- [constructor](Ammo.btDispatcherInfo.md#constructor)
+
+### Methods
+
+- [get\_m\_timeStep](Ammo.btDispatcherInfo.md#get_m_timestep)
+- [set\_m\_timeStep](Ammo.btDispatcherInfo.md#set_m_timestep)
+- [get\_m\_stepCount](Ammo.btDispatcherInfo.md#get_m_stepcount)
+- [set\_m\_stepCount](Ammo.btDispatcherInfo.md#set_m_stepcount)
+- [get\_m\_dispatchFunc](Ammo.btDispatcherInfo.md#get_m_dispatchfunc)
+- [set\_m\_dispatchFunc](Ammo.btDispatcherInfo.md#set_m_dispatchfunc)
+- [get\_m\_timeOfImpact](Ammo.btDispatcherInfo.md#get_m_timeofimpact)
+- [set\_m\_timeOfImpact](Ammo.btDispatcherInfo.md#set_m_timeofimpact)
+- [get\_m\_useContinuous](Ammo.btDispatcherInfo.md#get_m_usecontinuous)
+- [set\_m\_useContinuous](Ammo.btDispatcherInfo.md#set_m_usecontinuous)
+- [get\_m\_enableSatConvex](Ammo.btDispatcherInfo.md#get_m_enablesatconvex)
+- [set\_m\_enableSatConvex](Ammo.btDispatcherInfo.md#set_m_enablesatconvex)
+- [get\_m\_enableSPU](Ammo.btDispatcherInfo.md#get_m_enablespu)
+- [set\_m\_enableSPU](Ammo.btDispatcherInfo.md#set_m_enablespu)
+- [get\_m\_useEpa](Ammo.btDispatcherInfo.md#get_m_useepa)
+- [set\_m\_useEpa](Ammo.btDispatcherInfo.md#set_m_useepa)
+- [get\_m\_allowedCcdPenetration](Ammo.btDispatcherInfo.md#get_m_allowedccdpenetration)
+- [set\_m\_allowedCcdPenetration](Ammo.btDispatcherInfo.md#set_m_allowedccdpenetration)
+- [get\_m\_useConvexConservativeDistanceUtil](Ammo.btDispatcherInfo.md#get_m_useconvexconservativedistanceutil)
+- [set\_m\_useConvexConservativeDistanceUtil](Ammo.btDispatcherInfo.md#set_m_useconvexconservativedistanceutil)
+- [get\_m\_convexConservativeDistanceThreshold](Ammo.btDispatcherInfo.md#get_m_convexconservativedistancethreshold)
+- [set\_m\_convexConservativeDistanceThreshold](Ammo.btDispatcherInfo.md#set_m_convexconservativedistancethreshold)
+
+## Constructors
+
+### constructor
+
+• **new btDispatcherInfo**(): [`btDispatcherInfo`](Ammo.btDispatcherInfo.md)
+
+#### Returns
+
+[`btDispatcherInfo`](Ammo.btDispatcherInfo.md)
+
+## Methods
+
+### get\_m\_timeStep
+
+▸ **get_m_timeStep**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:622](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L622)
+
+___
+
+### set\_m\_timeStep
+
+▸ **set_m_timeStep**(`m_timeStep`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_timeStep` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:623](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L623)
+
+___
+
+### get\_m\_stepCount
+
+▸ **get_m_stepCount**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:624](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L624)
+
+___
+
+### set\_m\_stepCount
+
+▸ **set_m_stepCount**(`m_stepCount`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_stepCount` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:625](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L625)
+
+___
+
+### get\_m\_dispatchFunc
+
+▸ **get_m_dispatchFunc**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:626](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L626)
+
+___
+
+### set\_m\_dispatchFunc
+
+▸ **set_m_dispatchFunc**(`m_dispatchFunc`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_dispatchFunc` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:627](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L627)
+
+___
+
+### get\_m\_timeOfImpact
+
+▸ **get_m_timeOfImpact**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:628](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L628)
+
+___
+
+### set\_m\_timeOfImpact
+
+▸ **set_m_timeOfImpact**(`m_timeOfImpact`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_timeOfImpact` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:629](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L629)
+
+___
+
+### get\_m\_useContinuous
+
+▸ **get_m_useContinuous**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:630](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L630)
+
+___
+
+### set\_m\_useContinuous
+
+▸ **set_m_useContinuous**(`m_useContinuous`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_useContinuous` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:631](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L631)
+
+___
+
+### get\_m\_enableSatConvex
+
+▸ **get_m_enableSatConvex**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:632](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L632)
+
+___
+
+### set\_m\_enableSatConvex
+
+▸ **set_m_enableSatConvex**(`m_enableSatConvex`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_enableSatConvex` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:633](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L633)
+
+___
+
+### get\_m\_enableSPU
+
+▸ **get_m_enableSPU**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:634](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L634)
+
+___
+
+### set\_m\_enableSPU
+
+▸ **set_m_enableSPU**(`m_enableSPU`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_enableSPU` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:635](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L635)
+
+___
+
+### get\_m\_useEpa
+
+▸ **get_m_useEpa**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:636](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L636)
+
+___
+
+### set\_m\_useEpa
+
+▸ **set_m_useEpa**(`m_useEpa`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_useEpa` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:637](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L637)
+
+___
+
+### get\_m\_allowedCcdPenetration
+
+▸ **get_m_allowedCcdPenetration**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:638](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L638)
+
+___
+
+### set\_m\_allowedCcdPenetration
+
+▸ **set_m_allowedCcdPenetration**(`m_allowedCcdPenetration`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_allowedCcdPenetration` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:639](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L639)
+
+___
+
+### get\_m\_useConvexConservativeDistanceUtil
+
+▸ **get_m_useConvexConservativeDistanceUtil**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:640](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L640)
+
+___
+
+### set\_m\_useConvexConservativeDistanceUtil
+
+▸ **set_m_useConvexConservativeDistanceUtil**(`m_useConvexConservativeDistanceUtil`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_useConvexConservativeDistanceUtil` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:641](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L641)
+
+___
+
+### get\_m\_convexConservativeDistanceThreshold
+
+▸ **get_m_convexConservativeDistanceThreshold**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:642](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L642)
+
+___
+
+### set\_m\_convexConservativeDistanceThreshold
+
+▸ **set_m_convexConservativeDistanceThreshold**(`m_convexConservativeDistanceThreshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_convexConservativeDistanceThreshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:643](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L643)
diff --git a/docs/physics/classes/Ammo.btDynamicsWorld.md b/docs/physics/classes/Ammo.btDynamicsWorld.md
new file mode 100644
index 00000000..ae3af6a0
--- /dev/null
+++ b/docs/physics/classes/Ammo.btDynamicsWorld.md
@@ -0,0 +1,464 @@
+# Class: btDynamicsWorld
+
+[Ammo](../modules/Ammo.md).btDynamicsWorld
+
+## Hierarchy
+
+- [`btCollisionWorld`](Ammo.btCollisionWorld.md)
+
+ ↳ **`btDynamicsWorld`**
+
+ ↳↳ [`btDiscreteDynamicsWorld`](Ammo.btDiscreteDynamicsWorld.md)
+
+### Constructors
+
+- [constructor](Ammo.btDynamicsWorld.md#constructor)
+
+### Methods
+
+- [getDispatcher](Ammo.btDynamicsWorld.md#getdispatcher)
+- [rayTest](Ammo.btDynamicsWorld.md#raytest)
+- [getPairCache](Ammo.btDynamicsWorld.md#getpaircache)
+- [getDispatchInfo](Ammo.btDynamicsWorld.md#getdispatchinfo)
+- [addCollisionObject](Ammo.btDynamicsWorld.md#addcollisionobject)
+- [removeCollisionObject](Ammo.btDynamicsWorld.md#removecollisionobject)
+- [getBroadphase](Ammo.btDynamicsWorld.md#getbroadphase)
+- [convexSweepTest](Ammo.btDynamicsWorld.md#convexsweeptest)
+- [contactPairTest](Ammo.btDynamicsWorld.md#contactpairtest)
+- [contactTest](Ammo.btDynamicsWorld.md#contacttest)
+- [updateSingleAabb](Ammo.btDynamicsWorld.md#updatesingleaabb)
+- [setDebugDrawer](Ammo.btDynamicsWorld.md#setdebugdrawer)
+- [getDebugDrawer](Ammo.btDynamicsWorld.md#getdebugdrawer)
+- [debugDrawWorld](Ammo.btDynamicsWorld.md#debugdrawworld)
+- [debugDrawObject](Ammo.btDynamicsWorld.md#debugdrawobject)
+- [addAction](Ammo.btDynamicsWorld.md#addaction)
+- [removeAction](Ammo.btDynamicsWorld.md#removeaction)
+- [getSolverInfo](Ammo.btDynamicsWorld.md#getsolverinfo)
+- [setInternalTickCallback](Ammo.btDynamicsWorld.md#setinternaltickcallback)
+
+## Constructors
+
+### constructor
+
+• **new btDynamicsWorld**(): [`btDynamicsWorld`](Ammo.btDynamicsWorld.md)
+
+#### Returns
+
+[`btDynamicsWorld`](Ammo.btDynamicsWorld.md)
+
+#### Inherited from
+
+[btCollisionWorld](Ammo.btCollisionWorld.md).[constructor](Ammo.btCollisionWorld.md#constructor)
+
+## Methods
+
+### getDispatcher
+
+▸ **getDispatcher**(): [`btDispatcher`](Ammo.btDispatcher.md)
+
+#### Returns
+
+[`btDispatcher`](Ammo.btDispatcher.md)
+
+#### Inherited from
+
+[btCollisionWorld](Ammo.btCollisionWorld.md).[getDispatcher](Ammo.btCollisionWorld.md#getdispatcher)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:646](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L646)
+
+___
+
+### rayTest
+
+▸ **rayTest**(`rayFromWorld`, `rayToWorld`, `resultCallback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rayFromWorld` | [`btVector3`](Ammo.btVector3.md) |
+| `rayToWorld` | [`btVector3`](Ammo.btVector3.md) |
+| `resultCallback` | [`RayResultCallback`](Ammo.RayResultCallback.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionWorld](Ammo.btCollisionWorld.md).[rayTest](Ammo.btCollisionWorld.md#raytest)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:647](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L647)
+
+___
+
+### getPairCache
+
+▸ **getPairCache**(): [`btOverlappingPairCache`](Ammo.btOverlappingPairCache.md)
+
+#### Returns
+
+[`btOverlappingPairCache`](Ammo.btOverlappingPairCache.md)
+
+#### Inherited from
+
+[btCollisionWorld](Ammo.btCollisionWorld.md).[getPairCache](Ammo.btCollisionWorld.md#getpaircache)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:648](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L648)
+
+___
+
+### getDispatchInfo
+
+▸ **getDispatchInfo**(): [`btDispatcherInfo`](Ammo.btDispatcherInfo.md)
+
+#### Returns
+
+[`btDispatcherInfo`](Ammo.btDispatcherInfo.md)
+
+#### Inherited from
+
+[btCollisionWorld](Ammo.btCollisionWorld.md).[getDispatchInfo](Ammo.btCollisionWorld.md#getdispatchinfo)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:649](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L649)
+
+___
+
+### addCollisionObject
+
+▸ **addCollisionObject**(`collisionObject`, `collisionFilterGroup?`, `collisionFilterMask?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionObject` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+| `collisionFilterGroup?` | `number` |
+| `collisionFilterMask?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionWorld](Ammo.btCollisionWorld.md).[addCollisionObject](Ammo.btCollisionWorld.md#addcollisionobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:650](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L650)
+
+___
+
+### removeCollisionObject
+
+▸ **removeCollisionObject**(`collisionObject`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionObject` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionWorld](Ammo.btCollisionWorld.md).[removeCollisionObject](Ammo.btCollisionWorld.md#removecollisionobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:651](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L651)
+
+___
+
+### getBroadphase
+
+▸ **getBroadphase**(): [`btBroadphaseInterface`](Ammo.btBroadphaseInterface.md)
+
+#### Returns
+
+[`btBroadphaseInterface`](Ammo.btBroadphaseInterface.md)
+
+#### Inherited from
+
+[btCollisionWorld](Ammo.btCollisionWorld.md).[getBroadphase](Ammo.btCollisionWorld.md#getbroadphase)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:652](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L652)
+
+___
+
+### convexSweepTest
+
+▸ **convexSweepTest**(`castShape`, `from`, `to`, `resultCallback`, `allowedCcdPenetration`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `castShape` | [`btConvexShape`](Ammo.btConvexShape.md) |
+| `from` | [`btTransform`](Ammo.btTransform.md) |
+| `to` | [`btTransform`](Ammo.btTransform.md) |
+| `resultCallback` | [`ConvexResultCallback`](Ammo.ConvexResultCallback.md) |
+| `allowedCcdPenetration` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionWorld](Ammo.btCollisionWorld.md).[convexSweepTest](Ammo.btCollisionWorld.md#convexsweeptest)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:653](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L653)
+
+___
+
+### contactPairTest
+
+▸ **contactPairTest**(`colObjA`, `colObjB`, `resultCallback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `colObjA` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+| `colObjB` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+| `resultCallback` | [`ContactResultCallback`](Ammo.ContactResultCallback.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionWorld](Ammo.btCollisionWorld.md).[contactPairTest](Ammo.btCollisionWorld.md#contactpairtest)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:654](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L654)
+
+___
+
+### contactTest
+
+▸ **contactTest**(`colObj`, `resultCallback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `colObj` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+| `resultCallback` | [`ContactResultCallback`](Ammo.ContactResultCallback.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionWorld](Ammo.btCollisionWorld.md).[contactTest](Ammo.btCollisionWorld.md#contacttest)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:655](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L655)
+
+___
+
+### updateSingleAabb
+
+▸ **updateSingleAabb**(`colObj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `colObj` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionWorld](Ammo.btCollisionWorld.md).[updateSingleAabb](Ammo.btCollisionWorld.md#updatesingleaabb)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:656](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L656)
+
+___
+
+### setDebugDrawer
+
+▸ **setDebugDrawer**(`debugDrawer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `debugDrawer` | [`btIDebugDraw`](Ammo.btIDebugDraw.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionWorld](Ammo.btCollisionWorld.md).[setDebugDrawer](Ammo.btCollisionWorld.md#setdebugdrawer)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:657](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L657)
+
+___
+
+### getDebugDrawer
+
+▸ **getDebugDrawer**(): [`btIDebugDraw`](Ammo.btIDebugDraw.md)
+
+#### Returns
+
+[`btIDebugDraw`](Ammo.btIDebugDraw.md)
+
+#### Inherited from
+
+[btCollisionWorld](Ammo.btCollisionWorld.md).[getDebugDrawer](Ammo.btCollisionWorld.md#getdebugdrawer)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:658](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L658)
+
+___
+
+### debugDrawWorld
+
+▸ **debugDrawWorld**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionWorld](Ammo.btCollisionWorld.md).[debugDrawWorld](Ammo.btCollisionWorld.md#debugdrawworld)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:659](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L659)
+
+___
+
+### debugDrawObject
+
+▸ **debugDrawObject**(`worldTransform`, `shape`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldTransform` | [`btTransform`](Ammo.btTransform.md) |
+| `shape` | [`btCollisionShape`](Ammo.btCollisionShape.md) |
+| `color` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionWorld](Ammo.btCollisionWorld.md).[debugDrawObject](Ammo.btCollisionWorld.md#debugdrawobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:660](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L660)
+
+___
+
+### addAction
+
+▸ **addAction**(`action`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `action` | [`btActionInterface`](Ammo.btActionInterface.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:672](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L672)
+
+___
+
+### removeAction
+
+▸ **removeAction**(`action`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `action` | [`btActionInterface`](Ammo.btActionInterface.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:673](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L673)
+
+___
+
+### getSolverInfo
+
+▸ **getSolverInfo**(): [`btContactSolverInfo`](Ammo.btContactSolverInfo.md)
+
+#### Returns
+
+[`btContactSolverInfo`](Ammo.btContactSolverInfo.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:674](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L674)
+
+___
+
+### setInternalTickCallback
+
+▸ **setInternalTickCallback**(`cb`, `worldUserInfo?`, `isPreTick?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cb` | [`btInternalTickCallback`](../types/Ammo.btInternalTickCallback.md) |
+| `worldUserInfo?` | `unknown` |
+| `isPreTick?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:675](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L675)
diff --git a/docs/physics/classes/Ammo.btEmptyShape.md b/docs/physics/classes/Ammo.btEmptyShape.md
new file mode 100644
index 00000000..b416ce34
--- /dev/null
+++ b/docs/physics/classes/Ammo.btEmptyShape.md
@@ -0,0 +1,148 @@
+# Class: btEmptyShape
+
+[Ammo](../modules/Ammo.md).btEmptyShape
+
+## Hierarchy
+
+- [`btConcaveShape`](Ammo.btConcaveShape.md)
+
+ ↳ **`btEmptyShape`**
+
+### Constructors
+
+- [constructor](Ammo.btEmptyShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btEmptyShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btEmptyShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btEmptyShape.md#calculatelocalinertia)
+- [setMargin](Ammo.btEmptyShape.md#setmargin)
+- [getMargin](Ammo.btEmptyShape.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btEmptyShape**(): [`btEmptyShape`](Ammo.btEmptyShape.md)
+
+#### Returns
+
+[`btEmptyShape`](Ammo.btEmptyShape.md)
+
+#### Overrides
+
+[btConcaveShape](Ammo.btConcaveShape.md).[constructor](Ammo.btConcaveShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:410](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L410)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[setLocalScaling](Ammo.btConcaveShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[getLocalScaling](Ammo.btConcaveShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[calculateLocalInertia](Ammo.btConcaveShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[setMargin](Ammo.btConcaveShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:276](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L276)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[getMargin](Ammo.btConcaveShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:277](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L277)
diff --git a/docs/physics/classes/Ammo.btFace.md b/docs/physics/classes/Ammo.btFace.md
new file mode 100644
index 00000000..353b3c4d
--- /dev/null
+++ b/docs/physics/classes/Ammo.btFace.md
@@ -0,0 +1,92 @@
+# Class: btFace
+
+[Ammo](../modules/Ammo.md).btFace
+
+### Constructors
+
+- [constructor](Ammo.btFace.md#constructor)
+
+### Methods
+
+- [get\_m\_indices](Ammo.btFace.md#get_m_indices)
+- [set\_m\_indices](Ammo.btFace.md#set_m_indices)
+- [get\_m\_plane](Ammo.btFace.md#get_m_plane)
+- [set\_m\_plane](Ammo.btFace.md#set_m_plane)
+
+## Constructors
+
+### constructor
+
+• **new btFace**(): [`btFace`](Ammo.btFace.md)
+
+#### Returns
+
+[`btFace`](Ammo.btFace.md)
+
+## Methods
+
+### get\_m\_indices
+
+▸ **get_m_indices**(): [`btIntArray`](Ammo.btIntArray.md)
+
+#### Returns
+
+[`btIntArray`](Ammo.btIntArray.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:343](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L343)
+
+___
+
+### set\_m\_indices
+
+▸ **set_m_indices**(`m_indices`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_indices` | [`btIntArray`](Ammo.btIntArray.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:344](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L344)
+
+___
+
+### get\_m\_plane
+
+▸ **get_m_plane**(): readonly `number`[]
+
+#### Returns
+
+readonly `number`[]
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:345](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L345)
+
+___
+
+### set\_m\_plane
+
+▸ **set_m_plane**(`m_plane`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_plane` | readonly `number`[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:346](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L346)
diff --git a/docs/physics/classes/Ammo.btFaceArray.md b/docs/physics/classes/Ammo.btFaceArray.md
new file mode 100644
index 00000000..1b6c2f18
--- /dev/null
+++ b/docs/physics/classes/Ammo.btFaceArray.md
@@ -0,0 +1,56 @@
+# Class: btFaceArray
+
+[Ammo](../modules/Ammo.md).btFaceArray
+
+### Constructors
+
+- [constructor](Ammo.btFaceArray.md#constructor)
+
+### Methods
+
+- [size](Ammo.btFaceArray.md#size)
+- [at](Ammo.btFaceArray.md#at)
+
+## Constructors
+
+### constructor
+
+• **new btFaceArray**(): [`btFaceArray`](Ammo.btFaceArray.md)
+
+#### Returns
+
+[`btFaceArray`](Ammo.btFaceArray.md)
+
+## Methods
+
+### size
+
+▸ **size**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:353](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L353)
+
+___
+
+### at
+
+▸ **at**(`n`): [`btFace`](Ammo.btFace.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `n` | `number` |
+
+#### Returns
+
+[`btFace`](Ammo.btFace.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:354](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L354)
diff --git a/docs/physics/classes/Ammo.btFixedConstraint.md b/docs/physics/classes/Ammo.btFixedConstraint.md
new file mode 100644
index 00000000..b0a98763
--- /dev/null
+++ b/docs/physics/classes/Ammo.btFixedConstraint.md
@@ -0,0 +1,165 @@
+# Class: btFixedConstraint
+
+[Ammo](../modules/Ammo.md).btFixedConstraint
+
+## Hierarchy
+
+- [`btTypedConstraint`](Ammo.btTypedConstraint.md)
+
+ ↳ **`btFixedConstraint`**
+
+### Constructors
+
+- [constructor](Ammo.btFixedConstraint.md#constructor)
+
+### Methods
+
+- [enableFeedback](Ammo.btFixedConstraint.md#enablefeedback)
+- [getBreakingImpulseThreshold](Ammo.btFixedConstraint.md#getbreakingimpulsethreshold)
+- [setBreakingImpulseThreshold](Ammo.btFixedConstraint.md#setbreakingimpulsethreshold)
+- [getParam](Ammo.btFixedConstraint.md#getparam)
+- [setParam](Ammo.btFixedConstraint.md#setparam)
+
+## Constructors
+
+### constructor
+
+• **new btFixedConstraint**(`rbA`, `rbB`, `frameInA`, `frameInB`): [`btFixedConstraint`](Ammo.btFixedConstraint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rbA` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `rbB` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `frameInA` | [`btTransform`](Ammo.btTransform.md) |
+| `frameInB` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+[`btFixedConstraint`](Ammo.btFixedConstraint.md)
+
+#### Overrides
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[constructor](Ammo.btTypedConstraint.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:618](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L618)
+
+## Methods
+
+### enableFeedback
+
+▸ **enableFeedback**(`needsFeedback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `needsFeedback` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[enableFeedback](Ammo.btTypedConstraint.md#enablefeedback)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:542](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L542)
+
+___
+
+### getBreakingImpulseThreshold
+
+▸ **getBreakingImpulseThreshold**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[getBreakingImpulseThreshold](Ammo.btTypedConstraint.md#getbreakingimpulsethreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:543](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L543)
+
+___
+
+### setBreakingImpulseThreshold
+
+▸ **setBreakingImpulseThreshold**(`threshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `threshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[setBreakingImpulseThreshold](Ammo.btTypedConstraint.md#setbreakingimpulsethreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:544](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L544)
+
+___
+
+### getParam
+
+▸ **getParam**(`num`, `axis`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `num` | `number` |
+| `axis` | `number` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[getParam](Ammo.btTypedConstraint.md#getparam)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:545](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L545)
+
+___
+
+### setParam
+
+▸ **setParam**(`num`, `value`, `axis`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `num` | `number` |
+| `value` | `number` |
+| `axis` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[setParam](Ammo.btTypedConstraint.md#setparam)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:546](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L546)
diff --git a/docs/physics/classes/Ammo.btGImpactMeshShape.md b/docs/physics/classes/Ammo.btGImpactMeshShape.md
new file mode 100644
index 00000000..a3071e46
--- /dev/null
+++ b/docs/physics/classes/Ammo.btGImpactMeshShape.md
@@ -0,0 +1,169 @@
+# Class: btGImpactMeshShape
+
+[Ammo](../modules/Ammo.md).btGImpactMeshShape
+
+## Hierarchy
+
+- [`btTriangleMeshShape`](Ammo.btTriangleMeshShape.md)
+
+ ↳ **`btGImpactMeshShape`**
+
+### Constructors
+
+- [constructor](Ammo.btGImpactMeshShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btGImpactMeshShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btGImpactMeshShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btGImpactMeshShape.md#calculatelocalinertia)
+- [setMargin](Ammo.btGImpactMeshShape.md#setmargin)
+- [getMargin](Ammo.btGImpactMeshShape.md#getmargin)
+- [updateBound](Ammo.btGImpactMeshShape.md#updatebound)
+
+## Constructors
+
+### constructor
+
+• **new btGImpactMeshShape**(`meshInterface`): [`btGImpactMeshShape`](Ammo.btGImpactMeshShape.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `meshInterface` | [`btStridingMeshInterface`](Ammo.btStridingMeshInterface.md) |
+
+#### Returns
+
+[`btGImpactMeshShape`](Ammo.btGImpactMeshShape.md)
+
+#### Overrides
+
+[btTriangleMeshShape](Ammo.btTriangleMeshShape.md).[constructor](Ammo.btTriangleMeshShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:420](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L420)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTriangleMeshShape](Ammo.btTriangleMeshShape.md).[setLocalScaling](Ammo.btTriangleMeshShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btTriangleMeshShape](Ammo.btTriangleMeshShape.md).[getLocalScaling](Ammo.btTriangleMeshShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTriangleMeshShape](Ammo.btTriangleMeshShape.md).[calculateLocalInertia](Ammo.btTriangleMeshShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTriangleMeshShape](Ammo.btTriangleMeshShape.md).[setMargin](Ammo.btTriangleMeshShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:276](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L276)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btTriangleMeshShape](Ammo.btTriangleMeshShape.md).[getMargin](Ammo.btTriangleMeshShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:277](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L277)
+
+___
+
+### updateBound
+
+▸ **updateBound**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:421](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L421)
diff --git a/docs/physics/classes/Ammo.btGeneric6DofConstraint.md b/docs/physics/classes/Ammo.btGeneric6DofConstraint.md
new file mode 100644
index 00000000..404483fe
--- /dev/null
+++ b/docs/physics/classes/Ammo.btGeneric6DofConstraint.md
@@ -0,0 +1,289 @@
+# Class: btGeneric6DofConstraint
+
+[Ammo](../modules/Ammo.md).btGeneric6DofConstraint
+
+## Hierarchy
+
+- [`btTypedConstraint`](Ammo.btTypedConstraint.md)
+
+ ↳ **`btGeneric6DofConstraint`**
+
+ ↳↳ [`btGeneric6DofSpringConstraint`](Ammo.btGeneric6DofSpringConstraint.md)
+
+### Constructors
+
+- [constructor](Ammo.btGeneric6DofConstraint.md#constructor)
+
+### Methods
+
+- [enableFeedback](Ammo.btGeneric6DofConstraint.md#enablefeedback)
+- [getBreakingImpulseThreshold](Ammo.btGeneric6DofConstraint.md#getbreakingimpulsethreshold)
+- [setBreakingImpulseThreshold](Ammo.btGeneric6DofConstraint.md#setbreakingimpulsethreshold)
+- [getParam](Ammo.btGeneric6DofConstraint.md#getparam)
+- [setParam](Ammo.btGeneric6DofConstraint.md#setparam)
+- [setLinearLowerLimit](Ammo.btGeneric6DofConstraint.md#setlinearlowerlimit)
+- [setLinearUpperLimit](Ammo.btGeneric6DofConstraint.md#setlinearupperlimit)
+- [setAngularLowerLimit](Ammo.btGeneric6DofConstraint.md#setangularlowerlimit)
+- [setAngularUpperLimit](Ammo.btGeneric6DofConstraint.md#setangularupperlimit)
+- [getFrameOffsetA](Ammo.btGeneric6DofConstraint.md#getframeoffseta)
+
+## Constructors
+
+### constructor
+
+• **new btGeneric6DofConstraint**(`rbA`, `rbB`, `frameInA`, `frameInB`, `useLinearFrameReferenceFrameA`): [`btGeneric6DofConstraint`](Ammo.btGeneric6DofConstraint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rbA` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `rbB` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `frameInA` | [`btTransform`](Ammo.btTransform.md) |
+| `frameInB` | [`btTransform`](Ammo.btTransform.md) |
+| `useLinearFrameReferenceFrameA` | `boolean` |
+
+#### Returns
+
+[`btGeneric6DofConstraint`](Ammo.btGeneric6DofConstraint.md)
+
+#### Overrides
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[constructor](Ammo.btTypedConstraint.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:560](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L560)
+
+• **new btGeneric6DofConstraint**(`rbB`, `frameInB`, `useLinearFrameReferenceFrameB`): [`btGeneric6DofConstraint`](Ammo.btGeneric6DofConstraint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rbB` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `frameInB` | [`btTransform`](Ammo.btTransform.md) |
+| `useLinearFrameReferenceFrameB` | `boolean` |
+
+#### Returns
+
+[`btGeneric6DofConstraint`](Ammo.btGeneric6DofConstraint.md)
+
+#### Overrides
+
+btTypedConstraint.constructor
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:561](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L561)
+
+## Methods
+
+### enableFeedback
+
+▸ **enableFeedback**(`needsFeedback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `needsFeedback` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[enableFeedback](Ammo.btTypedConstraint.md#enablefeedback)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:542](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L542)
+
+___
+
+### getBreakingImpulseThreshold
+
+▸ **getBreakingImpulseThreshold**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[getBreakingImpulseThreshold](Ammo.btTypedConstraint.md#getbreakingimpulsethreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:543](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L543)
+
+___
+
+### setBreakingImpulseThreshold
+
+▸ **setBreakingImpulseThreshold**(`threshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `threshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[setBreakingImpulseThreshold](Ammo.btTypedConstraint.md#setbreakingimpulsethreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:544](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L544)
+
+___
+
+### getParam
+
+▸ **getParam**(`num`, `axis`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `num` | `number` |
+| `axis` | `number` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[getParam](Ammo.btTypedConstraint.md#getparam)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:545](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L545)
+
+___
+
+### setParam
+
+▸ **setParam**(`num`, `value`, `axis`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `num` | `number` |
+| `value` | `number` |
+| `axis` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[setParam](Ammo.btTypedConstraint.md#setparam)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:546](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L546)
+
+___
+
+### setLinearLowerLimit
+
+▸ **setLinearLowerLimit**(`linearLower`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `linearLower` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:562](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L562)
+
+___
+
+### setLinearUpperLimit
+
+▸ **setLinearUpperLimit**(`linearUpper`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `linearUpper` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:563](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L563)
+
+___
+
+### setAngularLowerLimit
+
+▸ **setAngularLowerLimit**(`angularLower`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `angularLower` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:564](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L564)
+
+___
+
+### setAngularUpperLimit
+
+▸ **setAngularUpperLimit**(`angularUpper`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `angularUpper` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:565](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L565)
+
+___
+
+### getFrameOffsetA
+
+▸ **getFrameOffsetA**(): [`btTransform`](Ammo.btTransform.md)
+
+#### Returns
+
+[`btTransform`](Ammo.btTransform.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:566](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L566)
diff --git a/docs/physics/classes/Ammo.btGeneric6DofSpringConstraint.md b/docs/physics/classes/Ammo.btGeneric6DofSpringConstraint.md
new file mode 100644
index 00000000..6daf139f
--- /dev/null
+++ b/docs/physics/classes/Ammo.btGeneric6DofSpringConstraint.md
@@ -0,0 +1,421 @@
+# Class: btGeneric6DofSpringConstraint
+
+[Ammo](../modules/Ammo.md).btGeneric6DofSpringConstraint
+
+## Hierarchy
+
+- [`btGeneric6DofConstraint`](Ammo.btGeneric6DofConstraint.md)
+
+ ↳ **`btGeneric6DofSpringConstraint`**
+
+### Constructors
+
+- [constructor](Ammo.btGeneric6DofSpringConstraint.md#constructor)
+
+### Methods
+
+- [enableFeedback](Ammo.btGeneric6DofSpringConstraint.md#enablefeedback)
+- [getBreakingImpulseThreshold](Ammo.btGeneric6DofSpringConstraint.md#getbreakingimpulsethreshold)
+- [setBreakingImpulseThreshold](Ammo.btGeneric6DofSpringConstraint.md#setbreakingimpulsethreshold)
+- [getParam](Ammo.btGeneric6DofSpringConstraint.md#getparam)
+- [setParam](Ammo.btGeneric6DofSpringConstraint.md#setparam)
+- [setLinearLowerLimit](Ammo.btGeneric6DofSpringConstraint.md#setlinearlowerlimit)
+- [setLinearUpperLimit](Ammo.btGeneric6DofSpringConstraint.md#setlinearupperlimit)
+- [setAngularLowerLimit](Ammo.btGeneric6DofSpringConstraint.md#setangularlowerlimit)
+- [setAngularUpperLimit](Ammo.btGeneric6DofSpringConstraint.md#setangularupperlimit)
+- [getFrameOffsetA](Ammo.btGeneric6DofSpringConstraint.md#getframeoffseta)
+- [enableSpring](Ammo.btGeneric6DofSpringConstraint.md#enablespring)
+- [setStiffness](Ammo.btGeneric6DofSpringConstraint.md#setstiffness)
+- [setDamping](Ammo.btGeneric6DofSpringConstraint.md#setdamping)
+- [setEquilibriumPoint](Ammo.btGeneric6DofSpringConstraint.md#setequilibriumpoint)
+
+## Constructors
+
+### constructor
+
+• **new btGeneric6DofSpringConstraint**(`rbA`, `rbB`, `frameInA`, `frameInB`, `useLinearFrameReferenceFrameA`): [`btGeneric6DofSpringConstraint`](Ammo.btGeneric6DofSpringConstraint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rbA` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `rbB` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `frameInA` | [`btTransform`](Ammo.btTransform.md) |
+| `frameInB` | [`btTransform`](Ammo.btTransform.md) |
+| `useLinearFrameReferenceFrameA` | `boolean` |
+
+#### Returns
+
+[`btGeneric6DofSpringConstraint`](Ammo.btGeneric6DofSpringConstraint.md)
+
+#### Overrides
+
+[btGeneric6DofConstraint](Ammo.btGeneric6DofConstraint.md).[constructor](Ammo.btGeneric6DofConstraint.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:569](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L569)
+
+• **new btGeneric6DofSpringConstraint**(`rbB`, `frameInB`, `useLinearFrameReferenceFrameB`): [`btGeneric6DofSpringConstraint`](Ammo.btGeneric6DofSpringConstraint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rbB` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `frameInB` | [`btTransform`](Ammo.btTransform.md) |
+| `useLinearFrameReferenceFrameB` | `boolean` |
+
+#### Returns
+
+[`btGeneric6DofSpringConstraint`](Ammo.btGeneric6DofSpringConstraint.md)
+
+#### Overrides
+
+[btGeneric6DofConstraint](Ammo.btGeneric6DofConstraint.md).[constructor](Ammo.btGeneric6DofConstraint.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:570](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L570)
+
+## Methods
+
+### enableFeedback
+
+▸ **enableFeedback**(`needsFeedback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `needsFeedback` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGeneric6DofConstraint](Ammo.btGeneric6DofConstraint.md).[enableFeedback](Ammo.btGeneric6DofConstraint.md#enablefeedback)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:542](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L542)
+
+___
+
+### getBreakingImpulseThreshold
+
+▸ **getBreakingImpulseThreshold**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btGeneric6DofConstraint](Ammo.btGeneric6DofConstraint.md).[getBreakingImpulseThreshold](Ammo.btGeneric6DofConstraint.md#getbreakingimpulsethreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:543](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L543)
+
+___
+
+### setBreakingImpulseThreshold
+
+▸ **setBreakingImpulseThreshold**(`threshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `threshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGeneric6DofConstraint](Ammo.btGeneric6DofConstraint.md).[setBreakingImpulseThreshold](Ammo.btGeneric6DofConstraint.md#setbreakingimpulsethreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:544](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L544)
+
+___
+
+### getParam
+
+▸ **getParam**(`num`, `axis`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `num` | `number` |
+| `axis` | `number` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btGeneric6DofConstraint](Ammo.btGeneric6DofConstraint.md).[getParam](Ammo.btGeneric6DofConstraint.md#getparam)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:545](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L545)
+
+___
+
+### setParam
+
+▸ **setParam**(`num`, `value`, `axis`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `num` | `number` |
+| `value` | `number` |
+| `axis` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGeneric6DofConstraint](Ammo.btGeneric6DofConstraint.md).[setParam](Ammo.btGeneric6DofConstraint.md#setparam)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:546](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L546)
+
+___
+
+### setLinearLowerLimit
+
+▸ **setLinearLowerLimit**(`linearLower`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `linearLower` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGeneric6DofConstraint](Ammo.btGeneric6DofConstraint.md).[setLinearLowerLimit](Ammo.btGeneric6DofConstraint.md#setlinearlowerlimit)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:562](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L562)
+
+___
+
+### setLinearUpperLimit
+
+▸ **setLinearUpperLimit**(`linearUpper`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `linearUpper` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGeneric6DofConstraint](Ammo.btGeneric6DofConstraint.md).[setLinearUpperLimit](Ammo.btGeneric6DofConstraint.md#setlinearupperlimit)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:563](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L563)
+
+___
+
+### setAngularLowerLimit
+
+▸ **setAngularLowerLimit**(`angularLower`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `angularLower` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGeneric6DofConstraint](Ammo.btGeneric6DofConstraint.md).[setAngularLowerLimit](Ammo.btGeneric6DofConstraint.md#setangularlowerlimit)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:564](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L564)
+
+___
+
+### setAngularUpperLimit
+
+▸ **setAngularUpperLimit**(`angularUpper`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `angularUpper` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGeneric6DofConstraint](Ammo.btGeneric6DofConstraint.md).[setAngularUpperLimit](Ammo.btGeneric6DofConstraint.md#setangularupperlimit)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:565](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L565)
+
+___
+
+### getFrameOffsetA
+
+▸ **getFrameOffsetA**(): [`btTransform`](Ammo.btTransform.md)
+
+#### Returns
+
+[`btTransform`](Ammo.btTransform.md)
+
+#### Inherited from
+
+[btGeneric6DofConstraint](Ammo.btGeneric6DofConstraint.md).[getFrameOffsetA](Ammo.btGeneric6DofConstraint.md#getframeoffseta)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:566](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L566)
+
+___
+
+### enableSpring
+
+▸ **enableSpring**(`index`, `onOff`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `onOff` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:571](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L571)
+
+___
+
+### setStiffness
+
+▸ **setStiffness**(`index`, `stiffness`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `stiffness` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:572](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L572)
+
+___
+
+### setDamping
+
+▸ **setDamping**(`index`, `damping`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `damping` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:573](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L573)
+
+___
+
+### setEquilibriumPoint
+
+▸ **setEquilibriumPoint**(`index`, `val`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+| `val` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:574](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L574)
+
+▸ **setEquilibriumPoint**(`index`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:575](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L575)
+
+▸ **setEquilibriumPoint**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:576](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L576)
diff --git a/docs/physics/classes/Ammo.btGhostObject.md b/docs/physics/classes/Ammo.btGhostObject.md
new file mode 100644
index 00000000..56732b2a
--- /dev/null
+++ b/docs/physics/classes/Ammo.btGhostObject.md
@@ -0,0 +1,713 @@
+# Class: btGhostObject
+
+[Ammo](../modules/Ammo.md).btGhostObject
+
+## Hierarchy
+
+- [`btCollisionObject`](Ammo.btCollisionObject.md)
+
+ ↳ **`btGhostObject`**
+
+ ↳↳ [`btPairCachingGhostObject`](Ammo.btPairCachingGhostObject.md)
+
+### Constructors
+
+- [constructor](Ammo.btGhostObject.md#constructor)
+
+### Properties
+
+- [kB](Ammo.btGhostObject.md#kb)
+
+### Methods
+
+- [setAnisotropicFriction](Ammo.btGhostObject.md#setanisotropicfriction)
+- [getCollisionShape](Ammo.btGhostObject.md#getcollisionshape)
+- [setContactProcessingThreshold](Ammo.btGhostObject.md#setcontactprocessingthreshold)
+- [setActivationState](Ammo.btGhostObject.md#setactivationstate)
+- [forceActivationState](Ammo.btGhostObject.md#forceactivationstate)
+- [activate](Ammo.btGhostObject.md#activate)
+- [isActive](Ammo.btGhostObject.md#isactive)
+- [isKinematicObject](Ammo.btGhostObject.md#iskinematicobject)
+- [isStaticObject](Ammo.btGhostObject.md#isstaticobject)
+- [isStaticOrKinematicObject](Ammo.btGhostObject.md#isstaticorkinematicobject)
+- [getRestitution](Ammo.btGhostObject.md#getrestitution)
+- [getFriction](Ammo.btGhostObject.md#getfriction)
+- [getRollingFriction](Ammo.btGhostObject.md#getrollingfriction)
+- [setRestitution](Ammo.btGhostObject.md#setrestitution)
+- [setFriction](Ammo.btGhostObject.md#setfriction)
+- [setRollingFriction](Ammo.btGhostObject.md#setrollingfriction)
+- [getWorldTransform](Ammo.btGhostObject.md#getworldtransform)
+- [getCollisionFlags](Ammo.btGhostObject.md#getcollisionflags)
+- [setCollisionFlags](Ammo.btGhostObject.md#setcollisionflags)
+- [setWorldTransform](Ammo.btGhostObject.md#setworldtransform)
+- [setCollisionShape](Ammo.btGhostObject.md#setcollisionshape)
+- [setCcdMotionThreshold](Ammo.btGhostObject.md#setccdmotionthreshold)
+- [setCcdSweptSphereRadius](Ammo.btGhostObject.md#setccdsweptsphereradius)
+- [getUserIndex](Ammo.btGhostObject.md#getuserindex)
+- [setUserIndex](Ammo.btGhostObject.md#setuserindex)
+- [getUserPointer](Ammo.btGhostObject.md#getuserpointer)
+- [setUserPointer](Ammo.btGhostObject.md#setuserpointer)
+- [getBroadphaseHandle](Ammo.btGhostObject.md#getbroadphasehandle)
+- [getNumOverlappingObjects](Ammo.btGhostObject.md#getnumoverlappingobjects)
+- [getOverlappingObject](Ammo.btGhostObject.md#getoverlappingobject)
+
+## Constructors
+
+### constructor
+
+• **new btGhostObject**(): [`btGhostObject`](Ammo.btGhostObject.md)
+
+#### Returns
+
+[`btGhostObject`](Ammo.btGhostObject.md)
+
+#### Overrides
+
+[btCollisionObject](Ammo.btCollisionObject.md).[constructor](Ammo.btCollisionObject.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:874](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L874)
+
+## Properties
+
+### kB
+
+• **kB**: `number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[kB](Ammo.btCollisionObject.md#kb)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:128](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L128)
+
+## Methods
+
+### setAnisotropicFriction
+
+▸ **setAnisotropicFriction**(`anisotropicFriction`, `frictionMode`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `anisotropicFriction` | [`btVector3`](Ammo.btVector3.md) |
+| `frictionMode` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setAnisotropicFriction](Ammo.btCollisionObject.md#setanisotropicfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:129](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L129)
+
+___
+
+### getCollisionShape
+
+▸ **getCollisionShape**(): [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Returns
+
+[`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getCollisionShape](Ammo.btCollisionObject.md#getcollisionshape)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:130](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L130)
+
+___
+
+### setContactProcessingThreshold
+
+▸ **setContactProcessingThreshold**(`contactProcessingThreshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `contactProcessingThreshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setContactProcessingThreshold](Ammo.btCollisionObject.md#setcontactprocessingthreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:131](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L131)
+
+___
+
+### setActivationState
+
+▸ **setActivationState**(`newState`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `newState` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setActivationState](Ammo.btCollisionObject.md#setactivationstate)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:132](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L132)
+
+___
+
+### forceActivationState
+
+▸ **forceActivationState**(`newState`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `newState` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[forceActivationState](Ammo.btCollisionObject.md#forceactivationstate)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:133](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L133)
+
+___
+
+### activate
+
+▸ **activate**(`forceActivation?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `forceActivation?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[activate](Ammo.btCollisionObject.md#activate)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:134](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L134)
+
+___
+
+### isActive
+
+▸ **isActive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[isActive](Ammo.btCollisionObject.md#isactive)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:135](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L135)
+
+___
+
+### isKinematicObject
+
+▸ **isKinematicObject**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[isKinematicObject](Ammo.btCollisionObject.md#iskinematicobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:136](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L136)
+
+___
+
+### isStaticObject
+
+▸ **isStaticObject**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[isStaticObject](Ammo.btCollisionObject.md#isstaticobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:137](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L137)
+
+___
+
+### isStaticOrKinematicObject
+
+▸ **isStaticOrKinematicObject**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[isStaticOrKinematicObject](Ammo.btCollisionObject.md#isstaticorkinematicobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:138](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L138)
+
+___
+
+### getRestitution
+
+▸ **getRestitution**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getRestitution](Ammo.btCollisionObject.md#getrestitution)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:139](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L139)
+
+___
+
+### getFriction
+
+▸ **getFriction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getFriction](Ammo.btCollisionObject.md#getfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:140](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L140)
+
+___
+
+### getRollingFriction
+
+▸ **getRollingFriction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getRollingFriction](Ammo.btCollisionObject.md#getrollingfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:141](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L141)
+
+___
+
+### setRestitution
+
+▸ **setRestitution**(`rest`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rest` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setRestitution](Ammo.btCollisionObject.md#setrestitution)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:142](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L142)
+
+___
+
+### setFriction
+
+▸ **setFriction**(`frict`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `frict` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setFriction](Ammo.btCollisionObject.md#setfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:143](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L143)
+
+___
+
+### setRollingFriction
+
+▸ **setRollingFriction**(`frict`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `frict` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setRollingFriction](Ammo.btCollisionObject.md#setrollingfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:144](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L144)
+
+___
+
+### getWorldTransform
+
+▸ **getWorldTransform**(): [`btTransform`](Ammo.btTransform.md)
+
+#### Returns
+
+[`btTransform`](Ammo.btTransform.md)
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getWorldTransform](Ammo.btCollisionObject.md#getworldtransform)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:145](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L145)
+
+___
+
+### getCollisionFlags
+
+▸ **getCollisionFlags**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getCollisionFlags](Ammo.btCollisionObject.md#getcollisionflags)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:146](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L146)
+
+___
+
+### setCollisionFlags
+
+▸ **setCollisionFlags**(`flags`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `flags` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setCollisionFlags](Ammo.btCollisionObject.md#setcollisionflags)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:147](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L147)
+
+___
+
+### setWorldTransform
+
+▸ **setWorldTransform**(`worldTrans`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldTrans` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setWorldTransform](Ammo.btCollisionObject.md#setworldtransform)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:148](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L148)
+
+___
+
+### setCollisionShape
+
+▸ **setCollisionShape**(`collisionShape`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionShape` | [`btCollisionShape`](Ammo.btCollisionShape.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setCollisionShape](Ammo.btCollisionObject.md#setcollisionshape)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:149](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L149)
+
+___
+
+### setCcdMotionThreshold
+
+▸ **setCcdMotionThreshold**(`ccdMotionThreshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ccdMotionThreshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setCcdMotionThreshold](Ammo.btCollisionObject.md#setccdmotionthreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:150](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L150)
+
+___
+
+### setCcdSweptSphereRadius
+
+▸ **setCcdSweptSphereRadius**(`radius`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radius` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setCcdSweptSphereRadius](Ammo.btCollisionObject.md#setccdsweptsphereradius)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:151](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L151)
+
+___
+
+### getUserIndex
+
+▸ **getUserIndex**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getUserIndex](Ammo.btCollisionObject.md#getuserindex)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:152](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L152)
+
+___
+
+### setUserIndex
+
+▸ **setUserIndex**(`index`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setUserIndex](Ammo.btCollisionObject.md#setuserindex)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:153](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L153)
+
+___
+
+### getUserPointer
+
+▸ **getUserPointer**(): `unknown`
+
+#### Returns
+
+`unknown`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getUserPointer](Ammo.btCollisionObject.md#getuserpointer)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:154](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L154)
+
+___
+
+### setUserPointer
+
+▸ **setUserPointer**(`userPointer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `userPointer` | `unknown` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setUserPointer](Ammo.btCollisionObject.md#setuserpointer)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:155](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L155)
+
+___
+
+### getBroadphaseHandle
+
+▸ **getBroadphaseHandle**(): [`btBroadphaseProxy`](Ammo.btBroadphaseProxy.md)
+
+#### Returns
+
+[`btBroadphaseProxy`](Ammo.btBroadphaseProxy.md)
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getBroadphaseHandle](Ammo.btCollisionObject.md#getbroadphasehandle)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:156](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L156)
+
+___
+
+### getNumOverlappingObjects
+
+▸ **getNumOverlappingObjects**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:875](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L875)
+
+___
+
+### getOverlappingObject
+
+▸ **getOverlappingObject**(`index`): [`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+[`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:876](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L876)
diff --git a/docs/physics/classes/Ammo.btGhostPairCallback.md b/docs/physics/classes/Ammo.btGhostPairCallback.md
new file mode 100644
index 00000000..9a7499a4
--- /dev/null
+++ b/docs/physics/classes/Ammo.btGhostPairCallback.md
@@ -0,0 +1,21 @@
+# Class: btGhostPairCallback
+
+[Ammo](../modules/Ammo.md).btGhostPairCallback
+
+### Constructors
+
+- [constructor](Ammo.btGhostPairCallback.md#constructor)
+
+## Constructors
+
+### constructor
+
+• **new btGhostPairCallback**(): [`btGhostPairCallback`](Ammo.btGhostPairCallback.md)
+
+#### Returns
+
+[`btGhostPairCallback`](Ammo.btGhostPairCallback.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:882](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L882)
diff --git a/docs/physics/classes/Ammo.btHeightfieldTerrainShape.md b/docs/physics/classes/Ammo.btHeightfieldTerrainShape.md
new file mode 100644
index 00000000..737f4775
--- /dev/null
+++ b/docs/physics/classes/Ammo.btHeightfieldTerrainShape.md
@@ -0,0 +1,162 @@
+# Class: btHeightfieldTerrainShape
+
+[Ammo](../modules/Ammo.md).btHeightfieldTerrainShape
+
+## Hierarchy
+
+- [`btConcaveShape`](Ammo.btConcaveShape.md)
+
+ ↳ **`btHeightfieldTerrainShape`**
+
+### Constructors
+
+- [constructor](Ammo.btHeightfieldTerrainShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btHeightfieldTerrainShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btHeightfieldTerrainShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btHeightfieldTerrainShape.md#calculatelocalinertia)
+- [setMargin](Ammo.btHeightfieldTerrainShape.md#setmargin)
+- [getMargin](Ammo.btHeightfieldTerrainShape.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btHeightfieldTerrainShape**(`heightStickWidth`, `heightStickLength`, `heightfieldData`, `heightScale`, `minHeight`, `maxHeight`, `upAxis`, `hdt`, `flipQuadEdges`): [`btHeightfieldTerrainShape`](Ammo.btHeightfieldTerrainShape.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `heightStickWidth` | `number` |
+| `heightStickLength` | `number` |
+| `heightfieldData` | `unknown` |
+| `heightScale` | `number` |
+| `minHeight` | `number` |
+| `maxHeight` | `number` |
+| `upAxis` | `number` |
+| `hdt` | [`PHY_ScalarType`](../types/Ammo.PHY_ScalarType.md) |
+| `flipQuadEdges` | `boolean` |
+
+#### Returns
+
+[`btHeightfieldTerrainShape`](Ammo.btHeightfieldTerrainShape.md)
+
+#### Overrides
+
+[btConcaveShape](Ammo.btConcaveShape.md).[constructor](Ammo.btConcaveShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:424](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L424)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[setLocalScaling](Ammo.btConcaveShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[getLocalScaling](Ammo.btConcaveShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[calculateLocalInertia](Ammo.btConcaveShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[btConcaveShape](Ammo.btConcaveShape.md).[setMargin](Ammo.btConcaveShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:425](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L425)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Overrides
+
+[btConcaveShape](Ammo.btConcaveShape.md).[getMargin](Ammo.btConcaveShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:426](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L426)
diff --git a/docs/physics/classes/Ammo.btHingeConstraint.md b/docs/physics/classes/Ammo.btHingeConstraint.md
new file mode 100644
index 00000000..be09b299
--- /dev/null
+++ b/docs/physics/classes/Ammo.btHingeConstraint.md
@@ -0,0 +1,347 @@
+# Class: btHingeConstraint
+
+[Ammo](../modules/Ammo.md).btHingeConstraint
+
+## Hierarchy
+
+- [`btTypedConstraint`](Ammo.btTypedConstraint.md)
+
+ ↳ **`btHingeConstraint`**
+
+### Constructors
+
+- [constructor](Ammo.btHingeConstraint.md#constructor)
+
+### Methods
+
+- [enableFeedback](Ammo.btHingeConstraint.md#enablefeedback)
+- [getBreakingImpulseThreshold](Ammo.btHingeConstraint.md#getbreakingimpulsethreshold)
+- [setBreakingImpulseThreshold](Ammo.btHingeConstraint.md#setbreakingimpulsethreshold)
+- [getParam](Ammo.btHingeConstraint.md#getparam)
+- [setParam](Ammo.btHingeConstraint.md#setparam)
+- [setLimit](Ammo.btHingeConstraint.md#setlimit)
+- [enableAngularMotor](Ammo.btHingeConstraint.md#enableangularmotor)
+- [setAngularOnly](Ammo.btHingeConstraint.md#setangularonly)
+- [enableMotor](Ammo.btHingeConstraint.md#enablemotor)
+- [setMaxMotorImpulse](Ammo.btHingeConstraint.md#setmaxmotorimpulse)
+- [setMotorTarget](Ammo.btHingeConstraint.md#setmotortarget)
+
+## Constructors
+
+### constructor
+
+• **new btHingeConstraint**(`rbA`, `rbB`, `pivotInA`, `pivotInB`, `axisInA`, `axisInB`, `useReferenceFrameA?`): [`btHingeConstraint`](Ammo.btHingeConstraint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rbA` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `rbB` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `pivotInA` | [`btVector3`](Ammo.btVector3.md) |
+| `pivotInB` | [`btVector3`](Ammo.btVector3.md) |
+| `axisInA` | [`btVector3`](Ammo.btVector3.md) |
+| `axisInB` | [`btVector3`](Ammo.btVector3.md) |
+| `useReferenceFrameA?` | `boolean` |
+
+#### Returns
+
+[`btHingeConstraint`](Ammo.btHingeConstraint.md)
+
+#### Overrides
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[constructor](Ammo.btTypedConstraint.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:594](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L594)
+
+• **new btHingeConstraint**(`rbA`, `rbB`, `rbAFrame`, `rbBFrame`, `useReferenceFrameA?`): [`btHingeConstraint`](Ammo.btHingeConstraint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rbA` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `rbB` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `rbAFrame` | [`btTransform`](Ammo.btTransform.md) |
+| `rbBFrame` | [`btTransform`](Ammo.btTransform.md) |
+| `useReferenceFrameA?` | `boolean` |
+
+#### Returns
+
+[`btHingeConstraint`](Ammo.btHingeConstraint.md)
+
+#### Overrides
+
+btTypedConstraint.constructor
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:595](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L595)
+
+• **new btHingeConstraint**(`rbA`, `rbAFrame`, `useReferenceFrameA?`): [`btHingeConstraint`](Ammo.btHingeConstraint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rbA` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `rbAFrame` | [`btTransform`](Ammo.btTransform.md) |
+| `useReferenceFrameA?` | `boolean` |
+
+#### Returns
+
+[`btHingeConstraint`](Ammo.btHingeConstraint.md)
+
+#### Overrides
+
+btTypedConstraint.constructor
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:596](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L596)
+
+## Methods
+
+### enableFeedback
+
+▸ **enableFeedback**(`needsFeedback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `needsFeedback` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[enableFeedback](Ammo.btTypedConstraint.md#enablefeedback)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:542](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L542)
+
+___
+
+### getBreakingImpulseThreshold
+
+▸ **getBreakingImpulseThreshold**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[getBreakingImpulseThreshold](Ammo.btTypedConstraint.md#getbreakingimpulsethreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:543](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L543)
+
+___
+
+### setBreakingImpulseThreshold
+
+▸ **setBreakingImpulseThreshold**(`threshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `threshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[setBreakingImpulseThreshold](Ammo.btTypedConstraint.md#setbreakingimpulsethreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:544](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L544)
+
+___
+
+### getParam
+
+▸ **getParam**(`num`, `axis`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `num` | `number` |
+| `axis` | `number` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[getParam](Ammo.btTypedConstraint.md#getparam)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:545](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L545)
+
+___
+
+### setParam
+
+▸ **setParam**(`num`, `value`, `axis`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `num` | `number` |
+| `value` | `number` |
+| `axis` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[setParam](Ammo.btTypedConstraint.md#setparam)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:546](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L546)
+
+___
+
+### setLimit
+
+▸ **setLimit**(`low`, `high`, `softness`, `biasFactor`, `relaxationFactor?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `low` | `number` |
+| `high` | `number` |
+| `softness` | `number` |
+| `biasFactor` | `number` |
+| `relaxationFactor?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:597](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L597)
+
+___
+
+### enableAngularMotor
+
+▸ **enableAngularMotor**(`enableMotor`, `targetVelocity`, `maxMotorImpulse`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `enableMotor` | `boolean` |
+| `targetVelocity` | `number` |
+| `maxMotorImpulse` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:598](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L598)
+
+___
+
+### setAngularOnly
+
+▸ **setAngularOnly**(`angularOnly`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `angularOnly` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:599](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L599)
+
+___
+
+### enableMotor
+
+▸ **enableMotor**(`enableMotor`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `enableMotor` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:600](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L600)
+
+___
+
+### setMaxMotorImpulse
+
+▸ **setMaxMotorImpulse**(`maxMotorImpulse`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `maxMotorImpulse` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:601](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L601)
+
+___
+
+### setMotorTarget
+
+▸ **setMotorTarget**(`targetAngle`, `dt`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `targetAngle` | `number` |
+| `dt` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:602](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L602)
diff --git a/docs/physics/classes/Ammo.btIDebugDraw.md b/docs/physics/classes/Ammo.btIDebugDraw.md
new file mode 100644
index 00000000..536b97a9
--- /dev/null
+++ b/docs/physics/classes/Ammo.btIDebugDraw.md
@@ -0,0 +1,147 @@
+# Class: btIDebugDraw
+
+[Ammo](../modules/Ammo.md).btIDebugDraw
+
+### Constructors
+
+- [constructor](Ammo.btIDebugDraw.md#constructor)
+
+### Methods
+
+- [drawLine](Ammo.btIDebugDraw.md#drawline)
+- [drawContactPoint](Ammo.btIDebugDraw.md#drawcontactpoint)
+- [reportErrorWarning](Ammo.btIDebugDraw.md#reporterrorwarning)
+- [draw3dText](Ammo.btIDebugDraw.md#draw3dtext)
+- [setDebugMode](Ammo.btIDebugDraw.md#setdebugmode)
+- [getDebugMode](Ammo.btIDebugDraw.md#getdebugmode)
+
+## Constructors
+
+### constructor
+
+• **new btIDebugDraw**(): [`btIDebugDraw`](Ammo.btIDebugDraw.md)
+
+#### Returns
+
+[`btIDebugDraw`](Ammo.btIDebugDraw.md)
+
+## Methods
+
+### drawLine
+
+▸ **drawLine**(`from`, `to`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | [`btVector3`](Ammo.btVector3.md) |
+| `to` | [`btVector3`](Ammo.btVector3.md) |
+| `color` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:27](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L27)
+
+___
+
+### drawContactPoint
+
+▸ **drawContactPoint**(`pointOnB`, `normalOnB`, `distance`, `lifeTime`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pointOnB` | [`btVector3`](Ammo.btVector3.md) |
+| `normalOnB` | [`btVector3`](Ammo.btVector3.md) |
+| `distance` | `number` |
+| `lifeTime` | `number` |
+| `color` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:28](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L28)
+
+___
+
+### reportErrorWarning
+
+▸ **reportErrorWarning**(`warningString`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `warningString` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L29)
+
+___
+
+### draw3dText
+
+▸ **draw3dText**(`location`, `textString`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `location` | [`btVector3`](Ammo.btVector3.md) |
+| `textString` | `string` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:30](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L30)
+
+___
+
+### setDebugMode
+
+▸ **setDebugMode**(`debugMode`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `debugMode` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:31](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L31)
+
+___
+
+### getDebugMode
+
+▸ **getDebugMode**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:32](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L32)
diff --git a/docs/physics/classes/Ammo.btIndexedMesh.md b/docs/physics/classes/Ammo.btIndexedMesh.md
new file mode 100644
index 00000000..57ff9fa9
--- /dev/null
+++ b/docs/physics/classes/Ammo.btIndexedMesh.md
@@ -0,0 +1,56 @@
+# Class: btIndexedMesh
+
+[Ammo](../modules/Ammo.md).btIndexedMesh
+
+### Constructors
+
+- [constructor](Ammo.btIndexedMesh.md#constructor)
+
+### Methods
+
+- [get\_m\_numTriangles](Ammo.btIndexedMesh.md#get_m_numtriangles)
+- [set\_m\_numTriangles](Ammo.btIndexedMesh.md#set_m_numtriangles)
+
+## Constructors
+
+### constructor
+
+• **new btIndexedMesh**(): [`btIndexedMesh`](Ammo.btIndexedMesh.md)
+
+#### Returns
+
+[`btIndexedMesh`](Ammo.btIndexedMesh.md)
+
+## Methods
+
+### get\_m\_numTriangles
+
+▸ **get_m_numTriangles**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:393](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L393)
+
+___
+
+### set\_m\_numTriangles
+
+▸ **set_m_numTriangles**(`m_numTriangles`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_numTriangles` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:394](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L394)
diff --git a/docs/physics/classes/Ammo.btIndexedMeshArray.md b/docs/physics/classes/Ammo.btIndexedMeshArray.md
new file mode 100644
index 00000000..4c52c859
--- /dev/null
+++ b/docs/physics/classes/Ammo.btIndexedMeshArray.md
@@ -0,0 +1,56 @@
+# Class: btIndexedMeshArray
+
+[Ammo](../modules/Ammo.md).btIndexedMeshArray
+
+### Constructors
+
+- [constructor](Ammo.btIndexedMeshArray.md#constructor)
+
+### Methods
+
+- [size](Ammo.btIndexedMeshArray.md#size)
+- [at](Ammo.btIndexedMeshArray.md#at)
+
+## Constructors
+
+### constructor
+
+• **new btIndexedMeshArray**(): [`btIndexedMeshArray`](Ammo.btIndexedMeshArray.md)
+
+#### Returns
+
+[`btIndexedMeshArray`](Ammo.btIndexedMeshArray.md)
+
+## Methods
+
+### size
+
+▸ **size**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:397](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L397)
+
+___
+
+### at
+
+▸ **at**(`n`): [`btIndexedMesh`](Ammo.btIndexedMesh.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `n` | `number` |
+
+#### Returns
+
+[`btIndexedMesh`](Ammo.btIndexedMesh.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:398](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L398)
diff --git a/docs/physics/classes/Ammo.btIntArray.md b/docs/physics/classes/Ammo.btIntArray.md
new file mode 100644
index 00000000..87e33790
--- /dev/null
+++ b/docs/physics/classes/Ammo.btIntArray.md
@@ -0,0 +1,56 @@
+# Class: btIntArray
+
+[Ammo](../modules/Ammo.md).btIntArray
+
+### Constructors
+
+- [constructor](Ammo.btIntArray.md#constructor)
+
+### Methods
+
+- [size](Ammo.btIntArray.md#size)
+- [at](Ammo.btIntArray.md#at)
+
+## Constructors
+
+### constructor
+
+• **new btIntArray**(): [`btIntArray`](Ammo.btIntArray.md)
+
+#### Returns
+
+[`btIntArray`](Ammo.btIntArray.md)
+
+## Methods
+
+### size
+
+▸ **size**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:339](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L339)
+
+___
+
+### at
+
+▸ **at**(`n`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `n` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:340](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L340)
diff --git a/docs/physics/classes/Ammo.btKinematicCharacterController.md b/docs/physics/classes/Ammo.btKinematicCharacterController.md
new file mode 100644
index 00000000..b14a63f2
--- /dev/null
+++ b/docs/physics/classes/Ammo.btKinematicCharacterController.md
@@ -0,0 +1,434 @@
+# Class: btKinematicCharacterController
+
+[Ammo](../modules/Ammo.md).btKinematicCharacterController
+
+## Hierarchy
+
+- [`btActionInterface`](Ammo.btActionInterface.md)
+
+ ↳ **`btKinematicCharacterController`**
+
+### Constructors
+
+- [constructor](Ammo.btKinematicCharacterController.md#constructor)
+
+### Methods
+
+- [updateAction](Ammo.btKinematicCharacterController.md#updateaction)
+- [setUpAxis](Ammo.btKinematicCharacterController.md#setupaxis)
+- [setWalkDirection](Ammo.btKinematicCharacterController.md#setwalkdirection)
+- [setVelocityForTimeInterval](Ammo.btKinematicCharacterController.md#setvelocityfortimeinterval)
+- [warp](Ammo.btKinematicCharacterController.md#warp)
+- [preStep](Ammo.btKinematicCharacterController.md#prestep)
+- [playerStep](Ammo.btKinematicCharacterController.md#playerstep)
+- [setFallSpeed](Ammo.btKinematicCharacterController.md#setfallspeed)
+- [setJumpSpeed](Ammo.btKinematicCharacterController.md#setjumpspeed)
+- [setMaxJumpHeight](Ammo.btKinematicCharacterController.md#setmaxjumpheight)
+- [canJump](Ammo.btKinematicCharacterController.md#canjump)
+- [jump](Ammo.btKinematicCharacterController.md#jump)
+- [setGravity](Ammo.btKinematicCharacterController.md#setgravity)
+- [getGravity](Ammo.btKinematicCharacterController.md#getgravity)
+- [setMaxSlope](Ammo.btKinematicCharacterController.md#setmaxslope)
+- [getMaxSlope](Ammo.btKinematicCharacterController.md#getmaxslope)
+- [getGhostObject](Ammo.btKinematicCharacterController.md#getghostobject)
+- [setUseGhostSweepTest](Ammo.btKinematicCharacterController.md#setuseghostsweeptest)
+- [onGround](Ammo.btKinematicCharacterController.md#onground)
+- [setUpInterpolate](Ammo.btKinematicCharacterController.md#setupinterpolate)
+
+## Constructors
+
+### constructor
+
+• **new btKinematicCharacterController**(`ghostObject`, `convexShape`, `stepHeight`, `upAxis?`): [`btKinematicCharacterController`](Ammo.btKinematicCharacterController.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ghostObject` | [`btPairCachingGhostObject`](Ammo.btPairCachingGhostObject.md) |
+| `convexShape` | [`btConvexShape`](Ammo.btConvexShape.md) |
+| `stepHeight` | `number` |
+| `upAxis?` | `number` |
+
+#### Returns
+
+[`btKinematicCharacterController`](Ammo.btKinematicCharacterController.md)
+
+#### Overrides
+
+[btActionInterface](Ammo.btActionInterface.md).[constructor](Ammo.btActionInterface.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:821](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L821)
+
+## Methods
+
+### updateAction
+
+▸ **updateAction**(`collisionWorld`, `deltaTimeStep`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionWorld` | [`btCollisionWorld`](Ammo.btCollisionWorld.md) |
+| `deltaTimeStep` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btActionInterface](Ammo.btActionInterface.md).[updateAction](Ammo.btActionInterface.md#updateaction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:818](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L818)
+
+___
+
+### setUpAxis
+
+▸ **setUpAxis**(`axis`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `axis` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:822](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L822)
+
+___
+
+### setWalkDirection
+
+▸ **setWalkDirection**(`walkDirection`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `walkDirection` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:823](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L823)
+
+___
+
+### setVelocityForTimeInterval
+
+▸ **setVelocityForTimeInterval**(`velocity`, `timeInterval`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `velocity` | [`btVector3`](Ammo.btVector3.md) |
+| `timeInterval` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:824](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L824)
+
+___
+
+### warp
+
+▸ **warp**(`origin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `origin` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:825](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L825)
+
+___
+
+### preStep
+
+▸ **preStep**(`collisionWorld`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionWorld` | [`btCollisionWorld`](Ammo.btCollisionWorld.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:826](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L826)
+
+___
+
+### playerStep
+
+▸ **playerStep**(`collisionWorld`, `dt`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionWorld` | [`btCollisionWorld`](Ammo.btCollisionWorld.md) |
+| `dt` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:827](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L827)
+
+___
+
+### setFallSpeed
+
+▸ **setFallSpeed**(`fallSpeed`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `fallSpeed` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:828](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L828)
+
+___
+
+### setJumpSpeed
+
+▸ **setJumpSpeed**(`jumpSpeed`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `jumpSpeed` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:829](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L829)
+
+___
+
+### setMaxJumpHeight
+
+▸ **setMaxJumpHeight**(`maxJumpHeight`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `maxJumpHeight` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:830](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L830)
+
+___
+
+### canJump
+
+▸ **canJump**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:831](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L831)
+
+___
+
+### jump
+
+▸ **jump**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:832](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L832)
+
+___
+
+### setGravity
+
+▸ **setGravity**(`gravity`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `gravity` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:833](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L833)
+
+___
+
+### getGravity
+
+▸ **getGravity**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:834](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L834)
+
+___
+
+### setMaxSlope
+
+▸ **setMaxSlope**(`slopeRadians`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `slopeRadians` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:835](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L835)
+
+___
+
+### getMaxSlope
+
+▸ **getMaxSlope**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:836](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L836)
+
+___
+
+### getGhostObject
+
+▸ **getGhostObject**(): [`btPairCachingGhostObject`](Ammo.btPairCachingGhostObject.md)
+
+#### Returns
+
+[`btPairCachingGhostObject`](Ammo.btPairCachingGhostObject.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:837](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L837)
+
+___
+
+### setUseGhostSweepTest
+
+▸ **setUseGhostSweepTest**(`useGhostObjectSweepTest`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `useGhostObjectSweepTest` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:838](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L838)
+
+___
+
+### onGround
+
+▸ **onGround**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:839](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L839)
+
+___
+
+### setUpInterpolate
+
+▸ **setUpInterpolate**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:840](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L840)
diff --git a/docs/physics/classes/Ammo.btManifoldPoint.md b/docs/physics/classes/Ammo.btManifoldPoint.md
new file mode 100644
index 00000000..c4ddd84c
--- /dev/null
+++ b/docs/physics/classes/Ammo.btManifoldPoint.md
@@ -0,0 +1,296 @@
+# Class: btManifoldPoint
+
+[Ammo](../modules/Ammo.md).btManifoldPoint
+
+### Constructors
+
+- [constructor](Ammo.btManifoldPoint.md#constructor)
+
+### Methods
+
+- [getPositionWorldOnA](Ammo.btManifoldPoint.md#getpositionworldona)
+- [getPositionWorldOnB](Ammo.btManifoldPoint.md#getpositionworldonb)
+- [getAppliedImpulse](Ammo.btManifoldPoint.md#getappliedimpulse)
+- [getDistance](Ammo.btManifoldPoint.md#getdistance)
+- [get\_m\_localPointA](Ammo.btManifoldPoint.md#get_m_localpointa)
+- [set\_m\_localPointA](Ammo.btManifoldPoint.md#set_m_localpointa)
+- [get\_m\_localPointB](Ammo.btManifoldPoint.md#get_m_localpointb)
+- [set\_m\_localPointB](Ammo.btManifoldPoint.md#set_m_localpointb)
+- [get\_m\_positionWorldOnB](Ammo.btManifoldPoint.md#get_m_positionworldonb)
+- [set\_m\_positionWorldOnB](Ammo.btManifoldPoint.md#set_m_positionworldonb)
+- [get\_m\_positionWorldOnA](Ammo.btManifoldPoint.md#get_m_positionworldona)
+- [set\_m\_positionWorldOnA](Ammo.btManifoldPoint.md#set_m_positionworldona)
+- [get\_m\_normalWorldOnB](Ammo.btManifoldPoint.md#get_m_normalworldonb)
+- [set\_m\_normalWorldOnB](Ammo.btManifoldPoint.md#set_m_normalworldonb)
+- [get\_m\_userPersistentData](Ammo.btManifoldPoint.md#get_m_userpersistentdata)
+- [set\_m\_userPersistentData](Ammo.btManifoldPoint.md#set_m_userpersistentdata)
+
+## Constructors
+
+### constructor
+
+• **new btManifoldPoint**(): [`btManifoldPoint`](Ammo.btManifoldPoint.md)
+
+#### Returns
+
+[`btManifoldPoint`](Ammo.btManifoldPoint.md)
+
+## Methods
+
+### getPositionWorldOnA
+
+▸ **getPositionWorldOnA**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:209](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L209)
+
+___
+
+### getPositionWorldOnB
+
+▸ **getPositionWorldOnB**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:210](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L210)
+
+___
+
+### getAppliedImpulse
+
+▸ **getAppliedImpulse**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:211](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L211)
+
+___
+
+### getDistance
+
+▸ **getDistance**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:212](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L212)
+
+___
+
+### get\_m\_localPointA
+
+▸ **get_m_localPointA**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:213](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L213)
+
+___
+
+### set\_m\_localPointA
+
+▸ **set_m_localPointA**(`m_localPointA`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_localPointA` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:214](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L214)
+
+___
+
+### get\_m\_localPointB
+
+▸ **get_m_localPointB**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:215](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L215)
+
+___
+
+### set\_m\_localPointB
+
+▸ **set_m_localPointB**(`m_localPointB`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_localPointB` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:216](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L216)
+
+___
+
+### get\_m\_positionWorldOnB
+
+▸ **get_m_positionWorldOnB**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:217](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L217)
+
+___
+
+### set\_m\_positionWorldOnB
+
+▸ **set_m_positionWorldOnB**(`m_positionWorldOnB`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_positionWorldOnB` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:218](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L218)
+
+___
+
+### get\_m\_positionWorldOnA
+
+▸ **get_m_positionWorldOnA**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:219](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L219)
+
+___
+
+### set\_m\_positionWorldOnA
+
+▸ **set_m_positionWorldOnA**(`m_positionWorldOnA`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_positionWorldOnA` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:220](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L220)
+
+___
+
+### get\_m\_normalWorldOnB
+
+▸ **get_m_normalWorldOnB**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:221](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L221)
+
+___
+
+### set\_m\_normalWorldOnB
+
+▸ **set_m_normalWorldOnB**(`m_normalWorldOnB`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_normalWorldOnB` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:222](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L222)
+
+___
+
+### get\_m\_userPersistentData
+
+▸ **get_m_userPersistentData**(): `any`
+
+#### Returns
+
+`any`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:223](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L223)
+
+___
+
+### set\_m\_userPersistentData
+
+▸ **set_m_userPersistentData**(`m_userPersistentData`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_userPersistentData` | `any` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:224](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L224)
diff --git a/docs/physics/classes/Ammo.btMatrix3x3.md b/docs/physics/classes/Ammo.btMatrix3x3.md
new file mode 100644
index 00000000..d2236f09
--- /dev/null
+++ b/docs/physics/classes/Ammo.btMatrix3x3.md
@@ -0,0 +1,85 @@
+# Class: btMatrix3x3
+
+[Ammo](../modules/Ammo.md).btMatrix3x3
+
+### Constructors
+
+- [constructor](Ammo.btMatrix3x3.md#constructor)
+
+### Methods
+
+- [setEulerZYX](Ammo.btMatrix3x3.md#seteulerzyx)
+- [getRotation](Ammo.btMatrix3x3.md#getrotation)
+- [getRow](Ammo.btMatrix3x3.md#getrow)
+
+## Constructors
+
+### constructor
+
+• **new btMatrix3x3**(): [`btMatrix3x3`](Ammo.btMatrix3x3.md)
+
+#### Returns
+
+[`btMatrix3x3`](Ammo.btMatrix3x3.md)
+
+## Methods
+
+### setEulerZYX
+
+▸ **setEulerZYX**(`ex`, `ey`, `ez`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ex` | `number` |
+| `ey` | `number` |
+| `ez` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:101](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L101)
+
+___
+
+### getRotation
+
+▸ **getRotation**(`q`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `q` | [`btQuaternion`](Ammo.btQuaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:102](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L102)
+
+___
+
+### getRow
+
+▸ **getRow**(`y`): [`btVector3`](Ammo.btVector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `y` | `number` |
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:103](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L103)
diff --git a/docs/physics/classes/Ammo.btMotionState.md b/docs/physics/classes/Ammo.btMotionState.md
new file mode 100644
index 00000000..e8996276
--- /dev/null
+++ b/docs/physics/classes/Ammo.btMotionState.md
@@ -0,0 +1,68 @@
+# Class: btMotionState
+
+[Ammo](../modules/Ammo.md).btMotionState
+
+## Hierarchy
+
+- **`btMotionState`**
+
+ ↳ [`btDefaultMotionState`](Ammo.btDefaultMotionState.md)
+
+### Constructors
+
+- [constructor](Ammo.btMotionState.md#constructor)
+
+### Methods
+
+- [getWorldTransform](Ammo.btMotionState.md#getworldtransform)
+- [setWorldTransform](Ammo.btMotionState.md#setworldtransform)
+
+## Constructors
+
+### constructor
+
+• **new btMotionState**(): [`btMotionState`](Ammo.btMotionState.md)
+
+#### Returns
+
+[`btMotionState`](Ammo.btMotionState.md)
+
+## Methods
+
+### getWorldTransform
+
+▸ **getWorldTransform**(`worldTrans`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldTrans` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:119](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L119)
+
+___
+
+### setWorldTransform
+
+▸ **setWorldTransform**(`worldTrans`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldTrans` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:120](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L120)
diff --git a/docs/physics/classes/Ammo.btMultiSphereShape.md b/docs/physics/classes/Ammo.btMultiSphereShape.md
new file mode 100644
index 00000000..f1323a64
--- /dev/null
+++ b/docs/physics/classes/Ammo.btMultiSphereShape.md
@@ -0,0 +1,156 @@
+# Class: btMultiSphereShape
+
+[Ammo](../modules/Ammo.md).btMultiSphereShape
+
+## Hierarchy
+
+- [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+ ↳ **`btMultiSphereShape`**
+
+### Constructors
+
+- [constructor](Ammo.btMultiSphereShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btMultiSphereShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btMultiSphereShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btMultiSphereShape.md#calculatelocalinertia)
+- [setMargin](Ammo.btMultiSphereShape.md#setmargin)
+- [getMargin](Ammo.btMultiSphereShape.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btMultiSphereShape**(`positions`, `radii`, `numPoints`): [`btMultiSphereShape`](Ammo.btMultiSphereShape.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `positions` | [`btVector3`](Ammo.btVector3.md) |
+| `radii` | readonly `number`[] |
+| `numPoints` | `number` |
+
+#### Returns
+
+[`btMultiSphereShape`](Ammo.btMultiSphereShape.md)
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[constructor](Ammo.btCollisionShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:327](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L327)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setLocalScaling](Ammo.btCollisionShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getLocalScaling](Ammo.btCollisionShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[calculateLocalInertia](Ammo.btCollisionShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setMargin](Ammo.btCollisionShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:276](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L276)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getMargin](Ammo.btCollisionShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:277](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L277)
diff --git a/docs/physics/classes/Ammo.btOverlappingPairCache.md b/docs/physics/classes/Ammo.btOverlappingPairCache.md
new file mode 100644
index 00000000..2649db9f
--- /dev/null
+++ b/docs/physics/classes/Ammo.btOverlappingPairCache.md
@@ -0,0 +1,56 @@
+# Class: btOverlappingPairCache
+
+[Ammo](../modules/Ammo.md).btOverlappingPairCache
+
+### Constructors
+
+- [constructor](Ammo.btOverlappingPairCache.md#constructor)
+
+### Methods
+
+- [setInternalGhostPairCallback](Ammo.btOverlappingPairCache.md#setinternalghostpaircallback)
+- [getNumOverlappingPairs](Ammo.btOverlappingPairCache.md#getnumoverlappingpairs)
+
+## Constructors
+
+### constructor
+
+• **new btOverlappingPairCache**(): [`btOverlappingPairCache`](Ammo.btOverlappingPairCache.md)
+
+#### Returns
+
+[`btOverlappingPairCache`](Ammo.btOverlappingPairCache.md)
+
+## Methods
+
+### setInternalGhostPairCallback
+
+▸ **setInternalGhostPairCallback**(`ghostPairCallback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ghostPairCallback` | [`btOverlappingPairCallback`](Ammo.btOverlappingPairCallback.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:450](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L450)
+
+___
+
+### getNumOverlappingPairs
+
+▸ **getNumOverlappingPairs**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:451](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L451)
diff --git a/docs/physics/classes/Ammo.btOverlappingPairCallback.md b/docs/physics/classes/Ammo.btOverlappingPairCallback.md
new file mode 100644
index 00000000..1ae9ba6a
--- /dev/null
+++ b/docs/physics/classes/Ammo.btOverlappingPairCallback.md
@@ -0,0 +1,17 @@
+# Class: btOverlappingPairCallback
+
+[Ammo](../modules/Ammo.md).btOverlappingPairCallback
+
+### Constructors
+
+- [constructor](Ammo.btOverlappingPairCallback.md#constructor)
+
+## Constructors
+
+### constructor
+
+• **new btOverlappingPairCallback**(): [`btOverlappingPairCallback`](Ammo.btOverlappingPairCallback.md)
+
+#### Returns
+
+[`btOverlappingPairCallback`](Ammo.btOverlappingPairCallback.md)
diff --git a/docs/physics/classes/Ammo.btPairCachingGhostObject.md b/docs/physics/classes/Ammo.btPairCachingGhostObject.md
new file mode 100644
index 00000000..fd90540f
--- /dev/null
+++ b/docs/physics/classes/Ammo.btPairCachingGhostObject.md
@@ -0,0 +1,719 @@
+# Class: btPairCachingGhostObject
+
+[Ammo](../modules/Ammo.md).btPairCachingGhostObject
+
+## Hierarchy
+
+- [`btGhostObject`](Ammo.btGhostObject.md)
+
+ ↳ **`btPairCachingGhostObject`**
+
+### Constructors
+
+- [constructor](Ammo.btPairCachingGhostObject.md#constructor)
+
+### Properties
+
+- [kB](Ammo.btPairCachingGhostObject.md#kb)
+
+### Methods
+
+- [setAnisotropicFriction](Ammo.btPairCachingGhostObject.md#setanisotropicfriction)
+- [getCollisionShape](Ammo.btPairCachingGhostObject.md#getcollisionshape)
+- [setContactProcessingThreshold](Ammo.btPairCachingGhostObject.md#setcontactprocessingthreshold)
+- [setActivationState](Ammo.btPairCachingGhostObject.md#setactivationstate)
+- [forceActivationState](Ammo.btPairCachingGhostObject.md#forceactivationstate)
+- [activate](Ammo.btPairCachingGhostObject.md#activate)
+- [isActive](Ammo.btPairCachingGhostObject.md#isactive)
+- [isKinematicObject](Ammo.btPairCachingGhostObject.md#iskinematicobject)
+- [isStaticObject](Ammo.btPairCachingGhostObject.md#isstaticobject)
+- [isStaticOrKinematicObject](Ammo.btPairCachingGhostObject.md#isstaticorkinematicobject)
+- [getRestitution](Ammo.btPairCachingGhostObject.md#getrestitution)
+- [getFriction](Ammo.btPairCachingGhostObject.md#getfriction)
+- [getRollingFriction](Ammo.btPairCachingGhostObject.md#getrollingfriction)
+- [setRestitution](Ammo.btPairCachingGhostObject.md#setrestitution)
+- [setFriction](Ammo.btPairCachingGhostObject.md#setfriction)
+- [setRollingFriction](Ammo.btPairCachingGhostObject.md#setrollingfriction)
+- [getWorldTransform](Ammo.btPairCachingGhostObject.md#getworldtransform)
+- [getCollisionFlags](Ammo.btPairCachingGhostObject.md#getcollisionflags)
+- [setCollisionFlags](Ammo.btPairCachingGhostObject.md#setcollisionflags)
+- [setWorldTransform](Ammo.btPairCachingGhostObject.md#setworldtransform)
+- [setCollisionShape](Ammo.btPairCachingGhostObject.md#setcollisionshape)
+- [setCcdMotionThreshold](Ammo.btPairCachingGhostObject.md#setccdmotionthreshold)
+- [setCcdSweptSphereRadius](Ammo.btPairCachingGhostObject.md#setccdsweptsphereradius)
+- [getUserIndex](Ammo.btPairCachingGhostObject.md#getuserindex)
+- [setUserIndex](Ammo.btPairCachingGhostObject.md#setuserindex)
+- [getUserPointer](Ammo.btPairCachingGhostObject.md#getuserpointer)
+- [setUserPointer](Ammo.btPairCachingGhostObject.md#setuserpointer)
+- [getBroadphaseHandle](Ammo.btPairCachingGhostObject.md#getbroadphasehandle)
+- [getNumOverlappingObjects](Ammo.btPairCachingGhostObject.md#getnumoverlappingobjects)
+- [getOverlappingObject](Ammo.btPairCachingGhostObject.md#getoverlappingobject)
+
+## Constructors
+
+### constructor
+
+• **new btPairCachingGhostObject**(): [`btPairCachingGhostObject`](Ammo.btPairCachingGhostObject.md)
+
+#### Returns
+
+[`btPairCachingGhostObject`](Ammo.btPairCachingGhostObject.md)
+
+#### Overrides
+
+[btGhostObject](Ammo.btGhostObject.md).[constructor](Ammo.btGhostObject.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:879](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L879)
+
+## Properties
+
+### kB
+
+• **kB**: `number`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[kB](Ammo.btGhostObject.md#kb)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:128](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L128)
+
+## Methods
+
+### setAnisotropicFriction
+
+▸ **setAnisotropicFriction**(`anisotropicFriction`, `frictionMode`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `anisotropicFriction` | [`btVector3`](Ammo.btVector3.md) |
+| `frictionMode` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[setAnisotropicFriction](Ammo.btGhostObject.md#setanisotropicfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:129](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L129)
+
+___
+
+### getCollisionShape
+
+▸ **getCollisionShape**(): [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Returns
+
+[`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[getCollisionShape](Ammo.btGhostObject.md#getcollisionshape)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:130](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L130)
+
+___
+
+### setContactProcessingThreshold
+
+▸ **setContactProcessingThreshold**(`contactProcessingThreshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `contactProcessingThreshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[setContactProcessingThreshold](Ammo.btGhostObject.md#setcontactprocessingthreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:131](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L131)
+
+___
+
+### setActivationState
+
+▸ **setActivationState**(`newState`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `newState` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[setActivationState](Ammo.btGhostObject.md#setactivationstate)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:132](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L132)
+
+___
+
+### forceActivationState
+
+▸ **forceActivationState**(`newState`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `newState` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[forceActivationState](Ammo.btGhostObject.md#forceactivationstate)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:133](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L133)
+
+___
+
+### activate
+
+▸ **activate**(`forceActivation?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `forceActivation?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[activate](Ammo.btGhostObject.md#activate)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:134](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L134)
+
+___
+
+### isActive
+
+▸ **isActive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[isActive](Ammo.btGhostObject.md#isactive)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:135](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L135)
+
+___
+
+### isKinematicObject
+
+▸ **isKinematicObject**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[isKinematicObject](Ammo.btGhostObject.md#iskinematicobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:136](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L136)
+
+___
+
+### isStaticObject
+
+▸ **isStaticObject**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[isStaticObject](Ammo.btGhostObject.md#isstaticobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:137](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L137)
+
+___
+
+### isStaticOrKinematicObject
+
+▸ **isStaticOrKinematicObject**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[isStaticOrKinematicObject](Ammo.btGhostObject.md#isstaticorkinematicobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:138](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L138)
+
+___
+
+### getRestitution
+
+▸ **getRestitution**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[getRestitution](Ammo.btGhostObject.md#getrestitution)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:139](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L139)
+
+___
+
+### getFriction
+
+▸ **getFriction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[getFriction](Ammo.btGhostObject.md#getfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:140](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L140)
+
+___
+
+### getRollingFriction
+
+▸ **getRollingFriction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[getRollingFriction](Ammo.btGhostObject.md#getrollingfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:141](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L141)
+
+___
+
+### setRestitution
+
+▸ **setRestitution**(`rest`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rest` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[setRestitution](Ammo.btGhostObject.md#setrestitution)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:142](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L142)
+
+___
+
+### setFriction
+
+▸ **setFriction**(`frict`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `frict` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[setFriction](Ammo.btGhostObject.md#setfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:143](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L143)
+
+___
+
+### setRollingFriction
+
+▸ **setRollingFriction**(`frict`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `frict` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[setRollingFriction](Ammo.btGhostObject.md#setrollingfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:144](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L144)
+
+___
+
+### getWorldTransform
+
+▸ **getWorldTransform**(): [`btTransform`](Ammo.btTransform.md)
+
+#### Returns
+
+[`btTransform`](Ammo.btTransform.md)
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[getWorldTransform](Ammo.btGhostObject.md#getworldtransform)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:145](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L145)
+
+___
+
+### getCollisionFlags
+
+▸ **getCollisionFlags**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[getCollisionFlags](Ammo.btGhostObject.md#getcollisionflags)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:146](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L146)
+
+___
+
+### setCollisionFlags
+
+▸ **setCollisionFlags**(`flags`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `flags` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[setCollisionFlags](Ammo.btGhostObject.md#setcollisionflags)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:147](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L147)
+
+___
+
+### setWorldTransform
+
+▸ **setWorldTransform**(`worldTrans`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldTrans` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[setWorldTransform](Ammo.btGhostObject.md#setworldtransform)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:148](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L148)
+
+___
+
+### setCollisionShape
+
+▸ **setCollisionShape**(`collisionShape`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionShape` | [`btCollisionShape`](Ammo.btCollisionShape.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[setCollisionShape](Ammo.btGhostObject.md#setcollisionshape)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:149](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L149)
+
+___
+
+### setCcdMotionThreshold
+
+▸ **setCcdMotionThreshold**(`ccdMotionThreshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ccdMotionThreshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[setCcdMotionThreshold](Ammo.btGhostObject.md#setccdmotionthreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:150](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L150)
+
+___
+
+### setCcdSweptSphereRadius
+
+▸ **setCcdSweptSphereRadius**(`radius`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radius` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[setCcdSweptSphereRadius](Ammo.btGhostObject.md#setccdsweptsphereradius)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:151](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L151)
+
+___
+
+### getUserIndex
+
+▸ **getUserIndex**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[getUserIndex](Ammo.btGhostObject.md#getuserindex)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:152](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L152)
+
+___
+
+### setUserIndex
+
+▸ **setUserIndex**(`index`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[setUserIndex](Ammo.btGhostObject.md#setuserindex)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:153](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L153)
+
+___
+
+### getUserPointer
+
+▸ **getUserPointer**(): `unknown`
+
+#### Returns
+
+`unknown`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[getUserPointer](Ammo.btGhostObject.md#getuserpointer)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:154](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L154)
+
+___
+
+### setUserPointer
+
+▸ **setUserPointer**(`userPointer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `userPointer` | `unknown` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[setUserPointer](Ammo.btGhostObject.md#setuserpointer)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:155](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L155)
+
+___
+
+### getBroadphaseHandle
+
+▸ **getBroadphaseHandle**(): [`btBroadphaseProxy`](Ammo.btBroadphaseProxy.md)
+
+#### Returns
+
+[`btBroadphaseProxy`](Ammo.btBroadphaseProxy.md)
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[getBroadphaseHandle](Ammo.btGhostObject.md#getbroadphasehandle)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:156](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L156)
+
+___
+
+### getNumOverlappingObjects
+
+▸ **getNumOverlappingObjects**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[getNumOverlappingObjects](Ammo.btGhostObject.md#getnumoverlappingobjects)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:875](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L875)
+
+___
+
+### getOverlappingObject
+
+▸ **getOverlappingObject**(`index`): [`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+[`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Inherited from
+
+[btGhostObject](Ammo.btGhostObject.md).[getOverlappingObject](Ammo.btGhostObject.md#getoverlappingobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:876](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L876)
diff --git a/docs/physics/classes/Ammo.btPersistentManifold.md b/docs/physics/classes/Ammo.btPersistentManifold.md
new file mode 100644
index 00000000..2e2f82d1
--- /dev/null
+++ b/docs/physics/classes/Ammo.btPersistentManifold.md
@@ -0,0 +1,90 @@
+# Class: btPersistentManifold
+
+[Ammo](../modules/Ammo.md).btPersistentManifold
+
+### Constructors
+
+- [constructor](Ammo.btPersistentManifold.md#constructor)
+
+### Methods
+
+- [getBody0](Ammo.btPersistentManifold.md#getbody0)
+- [getBody1](Ammo.btPersistentManifold.md#getbody1)
+- [getNumContacts](Ammo.btPersistentManifold.md#getnumcontacts)
+- [getContactPoint](Ammo.btPersistentManifold.md#getcontactpoint)
+
+## Constructors
+
+### constructor
+
+• **new btPersistentManifold**(): [`btPersistentManifold`](Ammo.btPersistentManifold.md)
+
+#### Returns
+
+[`btPersistentManifold`](Ammo.btPersistentManifold.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:435](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L435)
+
+## Methods
+
+### getBody0
+
+▸ **getBody0**(): [`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Returns
+
+[`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:436](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L436)
+
+___
+
+### getBody1
+
+▸ **getBody1**(): [`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Returns
+
+[`btCollisionObject`](Ammo.btCollisionObject.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:437](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L437)
+
+___
+
+### getNumContacts
+
+▸ **getNumContacts**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:438](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L438)
+
+___
+
+### getContactPoint
+
+▸ **getContactPoint**(`index`): [`btManifoldPoint`](Ammo.btManifoldPoint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+[`btManifoldPoint`](Ammo.btManifoldPoint.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:439](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L439)
diff --git a/docs/physics/classes/Ammo.btPoint2PointConstraint.md b/docs/physics/classes/Ammo.btPoint2PointConstraint.md
new file mode 100644
index 00000000..a2064d14
--- /dev/null
+++ b/docs/physics/classes/Ammo.btPoint2PointConstraint.md
@@ -0,0 +1,294 @@
+# Class: btPoint2PointConstraint
+
+[Ammo](../modules/Ammo.md).btPoint2PointConstraint
+
+## Hierarchy
+
+- [`btTypedConstraint`](Ammo.btTypedConstraint.md)
+
+ ↳ **`btPoint2PointConstraint`**
+
+### Constructors
+
+- [constructor](Ammo.btPoint2PointConstraint.md#constructor)
+
+### Methods
+
+- [enableFeedback](Ammo.btPoint2PointConstraint.md#enablefeedback)
+- [getBreakingImpulseThreshold](Ammo.btPoint2PointConstraint.md#getbreakingimpulsethreshold)
+- [setBreakingImpulseThreshold](Ammo.btPoint2PointConstraint.md#setbreakingimpulsethreshold)
+- [getParam](Ammo.btPoint2PointConstraint.md#getparam)
+- [setParam](Ammo.btPoint2PointConstraint.md#setparam)
+- [setPivotA](Ammo.btPoint2PointConstraint.md#setpivota)
+- [setPivotB](Ammo.btPoint2PointConstraint.md#setpivotb)
+- [getPivotInA](Ammo.btPoint2PointConstraint.md#getpivotina)
+- [getPivotInB](Ammo.btPoint2PointConstraint.md#getpivotinb)
+- [get\_m\_setting](Ammo.btPoint2PointConstraint.md#get_m_setting)
+- [set\_m\_setting](Ammo.btPoint2PointConstraint.md#set_m_setting)
+
+## Constructors
+
+### constructor
+
+• **new btPoint2PointConstraint**(`rbA`, `rbB`, `pivotInA`, `pivotInB`): [`btPoint2PointConstraint`](Ammo.btPoint2PointConstraint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rbA` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `rbB` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `pivotInA` | [`btVector3`](Ammo.btVector3.md) |
+| `pivotInB` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`btPoint2PointConstraint`](Ammo.btPoint2PointConstraint.md)
+
+#### Overrides
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[constructor](Ammo.btTypedConstraint.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:550](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L550)
+
+• **new btPoint2PointConstraint**(`rbA`, `pivotInA`): [`btPoint2PointConstraint`](Ammo.btPoint2PointConstraint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rbA` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `pivotInA` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`btPoint2PointConstraint`](Ammo.btPoint2PointConstraint.md)
+
+#### Overrides
+
+btTypedConstraint.constructor
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:551](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L551)
+
+## Methods
+
+### enableFeedback
+
+▸ **enableFeedback**(`needsFeedback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `needsFeedback` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[enableFeedback](Ammo.btTypedConstraint.md#enablefeedback)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:542](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L542)
+
+___
+
+### getBreakingImpulseThreshold
+
+▸ **getBreakingImpulseThreshold**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[getBreakingImpulseThreshold](Ammo.btTypedConstraint.md#getbreakingimpulsethreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:543](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L543)
+
+___
+
+### setBreakingImpulseThreshold
+
+▸ **setBreakingImpulseThreshold**(`threshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `threshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[setBreakingImpulseThreshold](Ammo.btTypedConstraint.md#setbreakingimpulsethreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:544](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L544)
+
+___
+
+### getParam
+
+▸ **getParam**(`num`, `axis`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `num` | `number` |
+| `axis` | `number` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[getParam](Ammo.btTypedConstraint.md#getparam)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:545](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L545)
+
+___
+
+### setParam
+
+▸ **setParam**(`num`, `value`, `axis`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `num` | `number` |
+| `value` | `number` |
+| `axis` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[setParam](Ammo.btTypedConstraint.md#setparam)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:546](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L546)
+
+___
+
+### setPivotA
+
+▸ **setPivotA**(`pivotA`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pivotA` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:552](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L552)
+
+___
+
+### setPivotB
+
+▸ **setPivotB**(`pivotB`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pivotB` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:553](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L553)
+
+___
+
+### getPivotInA
+
+▸ **getPivotInA**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:554](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L554)
+
+___
+
+### getPivotInB
+
+▸ **getPivotInB**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:555](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L555)
+
+___
+
+### get\_m\_setting
+
+▸ **get_m_setting**(): [`btConstraintSetting`](Ammo.btConstraintSetting.md)
+
+#### Returns
+
+[`btConstraintSetting`](Ammo.btConstraintSetting.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:556](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L556)
+
+___
+
+### set\_m\_setting
+
+▸ **set_m_setting**(`m_setting`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_setting` | [`btConstraintSetting`](Ammo.btConstraintSetting.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:557](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L557)
diff --git a/docs/physics/classes/Ammo.btQuadWord.md b/docs/physics/classes/Ammo.btQuadWord.md
new file mode 100644
index 00000000..25fc449a
--- /dev/null
+++ b/docs/physics/classes/Ammo.btQuadWord.md
@@ -0,0 +1,170 @@
+# Class: btQuadWord
+
+[Ammo](../modules/Ammo.md).btQuadWord
+
+## Hierarchy
+
+- **`btQuadWord`**
+
+ ↳ [`btQuaternion`](Ammo.btQuaternion.md)
+
+### Constructors
+
+- [constructor](Ammo.btQuadWord.md#constructor)
+
+### Methods
+
+- [x](Ammo.btQuadWord.md#x)
+- [y](Ammo.btQuadWord.md#y)
+- [z](Ammo.btQuadWord.md#z)
+- [w](Ammo.btQuadWord.md#w)
+- [setX](Ammo.btQuadWord.md#setx)
+- [setY](Ammo.btQuadWord.md#sety)
+- [setZ](Ammo.btQuadWord.md#setz)
+- [setW](Ammo.btQuadWord.md#setw)
+
+## Constructors
+
+### constructor
+
+• **new btQuadWord**(): [`btQuadWord`](Ammo.btQuadWord.md)
+
+#### Returns
+
+[`btQuadWord`](Ammo.btQuadWord.md)
+
+## Methods
+
+### x
+
+▸ **x**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:69](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L69)
+
+___
+
+### y
+
+▸ **y**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:70](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L70)
+
+___
+
+### z
+
+▸ **z**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:71](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L71)
+
+___
+
+### w
+
+▸ **w**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:72](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L72)
+
+___
+
+### setX
+
+▸ **setX**(`x`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:73](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L73)
+
+___
+
+### setY
+
+▸ **setY**(`y`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `y` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:74](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L74)
+
+___
+
+### setZ
+
+▸ **setZ**(`z`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `z` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:75](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L75)
+
+___
+
+### setW
+
+▸ **setW**(`w`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `w` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:76](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L76)
diff --git a/docs/physics/classes/Ammo.btQuaternion.md b/docs/physics/classes/Ammo.btQuaternion.md
new file mode 100644
index 00000000..7ce027cf
--- /dev/null
+++ b/docs/physics/classes/Ammo.btQuaternion.md
@@ -0,0 +1,576 @@
+# Class: btQuaternion
+
+[Ammo](../modules/Ammo.md).btQuaternion
+
+## Hierarchy
+
+- [`btQuadWord`](Ammo.btQuadWord.md)
+
+ ↳ **`btQuaternion`**
+
+### Constructors
+
+- [constructor](Ammo.btQuaternion.md#constructor)
+
+### Methods
+
+- [x](Ammo.btQuaternion.md#x)
+- [y](Ammo.btQuaternion.md#y)
+- [z](Ammo.btQuaternion.md#z)
+- [w](Ammo.btQuaternion.md#w)
+- [setX](Ammo.btQuaternion.md#setx)
+- [setY](Ammo.btQuaternion.md#sety)
+- [setZ](Ammo.btQuaternion.md#setz)
+- [setW](Ammo.btQuaternion.md#setw)
+- [setValue](Ammo.btQuaternion.md#setvalue)
+- [setEulerZYX](Ammo.btQuaternion.md#seteulerzyx)
+- [setRotation](Ammo.btQuaternion.md#setrotation)
+- [normalize](Ammo.btQuaternion.md#normalize)
+- [length2](Ammo.btQuaternion.md#length2)
+- [length](Ammo.btQuaternion.md#length)
+- [dot](Ammo.btQuaternion.md#dot)
+- [normalized](Ammo.btQuaternion.md#normalized)
+- [getAxis](Ammo.btQuaternion.md#getaxis)
+- [inverse](Ammo.btQuaternion.md#inverse)
+- [getAngle](Ammo.btQuaternion.md#getangle)
+- [getAngleShortestPath](Ammo.btQuaternion.md#getangleshortestpath)
+- [angle](Ammo.btQuaternion.md#angle)
+- [angleShortestPath](Ammo.btQuaternion.md#angleshortestpath)
+- [op\_add](Ammo.btQuaternion.md#op_add)
+- [op\_sub](Ammo.btQuaternion.md#op_sub)
+- [op\_mul](Ammo.btQuaternion.md#op_mul)
+- [op\_mulq](Ammo.btQuaternion.md#op_mulq)
+- [op\_div](Ammo.btQuaternion.md#op_div)
+
+## Constructors
+
+### constructor
+
+• **new btQuaternion**(`x`, `y`, `z`, `w`): [`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `z` | `number` |
+| `w` | `number` |
+
+#### Returns
+
+[`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Overrides
+
+[btQuadWord](Ammo.btQuadWord.md).[constructor](Ammo.btQuadWord.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:79](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L79)
+
+## Methods
+
+### x
+
+▸ **x**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btQuadWord](Ammo.btQuadWord.md).[x](Ammo.btQuadWord.md#x)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:69](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L69)
+
+___
+
+### y
+
+▸ **y**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btQuadWord](Ammo.btQuadWord.md).[y](Ammo.btQuadWord.md#y)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:70](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L70)
+
+___
+
+### z
+
+▸ **z**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btQuadWord](Ammo.btQuadWord.md).[z](Ammo.btQuadWord.md#z)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:71](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L71)
+
+___
+
+### w
+
+▸ **w**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btQuadWord](Ammo.btQuadWord.md).[w](Ammo.btQuadWord.md#w)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:72](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L72)
+
+___
+
+### setX
+
+▸ **setX**(`x`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btQuadWord](Ammo.btQuadWord.md).[setX](Ammo.btQuadWord.md#setx)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:73](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L73)
+
+___
+
+### setY
+
+▸ **setY**(`y`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `y` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btQuadWord](Ammo.btQuadWord.md).[setY](Ammo.btQuadWord.md#sety)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:74](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L74)
+
+___
+
+### setZ
+
+▸ **setZ**(`z`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `z` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btQuadWord](Ammo.btQuadWord.md).[setZ](Ammo.btQuadWord.md#setz)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:75](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L75)
+
+___
+
+### setW
+
+▸ **setW**(`w`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `w` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btQuadWord](Ammo.btQuadWord.md).[setW](Ammo.btQuadWord.md#setw)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:76](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L76)
+
+___
+
+### setValue
+
+▸ **setValue**(`x`, `y`, `z`, `w`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `z` | `number` |
+| `w` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:80](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L80)
+
+___
+
+### setEulerZYX
+
+▸ **setEulerZYX**(`z`, `y`, `x`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `z` | `number` |
+| `y` | `number` |
+| `x` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:81](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L81)
+
+___
+
+### setRotation
+
+▸ **setRotation**(`axis`, `angle`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `axis` | [`btVector3`](Ammo.btVector3.md) |
+| `angle` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:82](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L82)
+
+___
+
+### normalize
+
+▸ **normalize**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:83](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L83)
+
+___
+
+### length2
+
+▸ **length2**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:84](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L84)
+
+___
+
+### length
+
+▸ **length**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:85](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L85)
+
+___
+
+### dot
+
+▸ **dot**(`q`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `q` | [`btQuaternion`](Ammo.btQuaternion.md) |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:86](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L86)
+
+___
+
+### normalized
+
+▸ **normalized**(): [`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Returns
+
+[`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:87](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L87)
+
+___
+
+### getAxis
+
+▸ **getAxis**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:88](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L88)
+
+___
+
+### inverse
+
+▸ **inverse**(): [`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Returns
+
+[`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:89](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L89)
+
+___
+
+### getAngle
+
+▸ **getAngle**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:90](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L90)
+
+___
+
+### getAngleShortestPath
+
+▸ **getAngleShortestPath**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:91](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L91)
+
+___
+
+### angle
+
+▸ **angle**(`q`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `q` | [`btQuaternion`](Ammo.btQuaternion.md) |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:92](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L92)
+
+___
+
+### angleShortestPath
+
+▸ **angleShortestPath**(`q`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `q` | [`btQuaternion`](Ammo.btQuaternion.md) |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:93](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L93)
+
+___
+
+### op\_add
+
+▸ **op_add**(`q`): [`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `q` | [`btQuaternion`](Ammo.btQuaternion.md) |
+
+#### Returns
+
+[`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:94](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L94)
+
+___
+
+### op\_sub
+
+▸ **op_sub**(`q`): [`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `q` | [`btQuaternion`](Ammo.btQuaternion.md) |
+
+#### Returns
+
+[`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:95](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L95)
+
+___
+
+### op\_mul
+
+▸ **op_mul**(`s`): [`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `s` | `number` |
+
+#### Returns
+
+[`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:96](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L96)
+
+___
+
+### op\_mulq
+
+▸ **op_mulq**(`q`): [`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `q` | [`btQuaternion`](Ammo.btQuaternion.md) |
+
+#### Returns
+
+[`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:97](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L97)
+
+___
+
+### op\_div
+
+▸ **op_div**(`s`): [`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `s` | `number` |
+
+#### Returns
+
+[`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:98](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L98)
diff --git a/docs/physics/classes/Ammo.btRaycastVehicle.md b/docs/physics/classes/Ammo.btRaycastVehicle.md
new file mode 100644
index 00000000..aa95c846
--- /dev/null
+++ b/docs/physics/classes/Ammo.btRaycastVehicle.md
@@ -0,0 +1,603 @@
+# Class: btRaycastVehicle
+
+[Ammo](../modules/Ammo.md).btRaycastVehicle
+
+## Hierarchy
+
+- [`btActionInterface`](Ammo.btActionInterface.md)
+
+ ↳ **`btRaycastVehicle`**
+
+### Constructors
+
+- [constructor](Ammo.btRaycastVehicle.md#constructor)
+
+### Methods
+
+- [updateAction](Ammo.btRaycastVehicle.md#updateaction)
+- [applyEngineForce](Ammo.btRaycastVehicle.md#applyengineforce)
+- [setSteeringValue](Ammo.btRaycastVehicle.md#setsteeringvalue)
+- [getWheelTransformWS](Ammo.btRaycastVehicle.md#getwheeltransformws)
+- [updateWheelTransform](Ammo.btRaycastVehicle.md#updatewheeltransform)
+- [addWheel](Ammo.btRaycastVehicle.md#addwheel)
+- [getNumWheels](Ammo.btRaycastVehicle.md#getnumwheels)
+- [getRigidBody](Ammo.btRaycastVehicle.md#getrigidbody)
+- [getWheelInfo](Ammo.btRaycastVehicle.md#getwheelinfo)
+- [setBrake](Ammo.btRaycastVehicle.md#setbrake)
+- [setCoordinateSystem](Ammo.btRaycastVehicle.md#setcoordinatesystem)
+- [getCurrentSpeedKmHour](Ammo.btRaycastVehicle.md#getcurrentspeedkmhour)
+- [getChassisWorldTransform](Ammo.btRaycastVehicle.md#getchassisworldtransform)
+- [rayCast](Ammo.btRaycastVehicle.md#raycast)
+- [updateVehicle](Ammo.btRaycastVehicle.md#updatevehicle)
+- [resetSuspension](Ammo.btRaycastVehicle.md#resetsuspension)
+- [getSteeringValue](Ammo.btRaycastVehicle.md#getsteeringvalue)
+- [updateWheelTransformsWS](Ammo.btRaycastVehicle.md#updatewheeltransformsws)
+- [setPitchControl](Ammo.btRaycastVehicle.md#setpitchcontrol)
+- [updateSuspension](Ammo.btRaycastVehicle.md#updatesuspension)
+- [updateFriction](Ammo.btRaycastVehicle.md#updatefriction)
+- [getRightAxis](Ammo.btRaycastVehicle.md#getrightaxis)
+- [getUpAxis](Ammo.btRaycastVehicle.md#getupaxis)
+- [getForwardAxis](Ammo.btRaycastVehicle.md#getforwardaxis)
+- [getForwardVector](Ammo.btRaycastVehicle.md#getforwardvector)
+- [getUserConstraintType](Ammo.btRaycastVehicle.md#getuserconstrainttype)
+- [setUserConstraintType](Ammo.btRaycastVehicle.md#setuserconstrainttype)
+- [setUserConstraintId](Ammo.btRaycastVehicle.md#setuserconstraintid)
+- [getUserConstraintId](Ammo.btRaycastVehicle.md#getuserconstraintid)
+
+## Constructors
+
+### constructor
+
+• **new btRaycastVehicle**(`tuning`, `chassis`, `raycaster`): [`btRaycastVehicle`](Ammo.btRaycastVehicle.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tuning` | [`btVehicleTuning`](Ammo.btVehicleTuning.md) |
+| `chassis` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `raycaster` | [`btVehicleRaycaster`](Ammo.btVehicleRaycaster.md) |
+
+#### Returns
+
+[`btRaycastVehicle`](Ammo.btRaycastVehicle.md)
+
+#### Overrides
+
+[btActionInterface](Ammo.btActionInterface.md).[constructor](Ammo.btActionInterface.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:843](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L843)
+
+## Methods
+
+### updateAction
+
+▸ **updateAction**(`collisionWorld`, `deltaTimeStep`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionWorld` | [`btCollisionWorld`](Ammo.btCollisionWorld.md) |
+| `deltaTimeStep` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btActionInterface](Ammo.btActionInterface.md).[updateAction](Ammo.btActionInterface.md#updateaction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:818](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L818)
+
+___
+
+### applyEngineForce
+
+▸ **applyEngineForce**(`force`, `wheel`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | `number` |
+| `wheel` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:844](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L844)
+
+___
+
+### setSteeringValue
+
+▸ **setSteeringValue**(`steering`, `wheel`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `steering` | `number` |
+| `wheel` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:845](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L845)
+
+___
+
+### getWheelTransformWS
+
+▸ **getWheelTransformWS**(`wheelIndex`): [`btTransform`](Ammo.btTransform.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `wheelIndex` | `number` |
+
+#### Returns
+
+[`btTransform`](Ammo.btTransform.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:846](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L846)
+
+___
+
+### updateWheelTransform
+
+▸ **updateWheelTransform**(`wheelIndex`, `interpolatedTransform`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `wheelIndex` | `number` |
+| `interpolatedTransform` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:847](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L847)
+
+___
+
+### addWheel
+
+▸ **addWheel**(`connectionPointCS0`, `wheelDirectionCS0`, `wheelAxleCS`, `suspensionRestLength`, `wheelRadius`, `tuning`, `isFrontWheel`): [`btWheelInfo`](Ammo.btWheelInfo.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `connectionPointCS0` | [`btVector3`](Ammo.btVector3.md) |
+| `wheelDirectionCS0` | [`btVector3`](Ammo.btVector3.md) |
+| `wheelAxleCS` | [`btVector3`](Ammo.btVector3.md) |
+| `suspensionRestLength` | `number` |
+| `wheelRadius` | `number` |
+| `tuning` | [`btVehicleTuning`](Ammo.btVehicleTuning.md) |
+| `isFrontWheel` | `boolean` |
+
+#### Returns
+
+[`btWheelInfo`](Ammo.btWheelInfo.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:848](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L848)
+
+___
+
+### getNumWheels
+
+▸ **getNumWheels**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:849](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L849)
+
+___
+
+### getRigidBody
+
+▸ **getRigidBody**(): [`btRigidBody`](Ammo.btRigidBody.md)
+
+#### Returns
+
+[`btRigidBody`](Ammo.btRigidBody.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:850](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L850)
+
+___
+
+### getWheelInfo
+
+▸ **getWheelInfo**(`index`): [`btWheelInfo`](Ammo.btWheelInfo.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+[`btWheelInfo`](Ammo.btWheelInfo.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:851](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L851)
+
+___
+
+### setBrake
+
+▸ **setBrake**(`brake`, `wheelIndex`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `brake` | `number` |
+| `wheelIndex` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:852](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L852)
+
+___
+
+### setCoordinateSystem
+
+▸ **setCoordinateSystem**(`rightIndex`, `upIndex`, `forwardIndex`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rightIndex` | `number` |
+| `upIndex` | `number` |
+| `forwardIndex` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:853](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L853)
+
+___
+
+### getCurrentSpeedKmHour
+
+▸ **getCurrentSpeedKmHour**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:854](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L854)
+
+___
+
+### getChassisWorldTransform
+
+▸ **getChassisWorldTransform**(): [`btTransform`](Ammo.btTransform.md)
+
+#### Returns
+
+[`btTransform`](Ammo.btTransform.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:855](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L855)
+
+___
+
+### rayCast
+
+▸ **rayCast**(`wheel`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `wheel` | [`btWheelInfo`](Ammo.btWheelInfo.md) |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:856](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L856)
+
+___
+
+### updateVehicle
+
+▸ **updateVehicle**(`step`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `step` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:857](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L857)
+
+___
+
+### resetSuspension
+
+▸ **resetSuspension**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:858](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L858)
+
+___
+
+### getSteeringValue
+
+▸ **getSteeringValue**(`wheel`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `wheel` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:859](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L859)
+
+___
+
+### updateWheelTransformsWS
+
+▸ **updateWheelTransformsWS**(`wheel`, `interpolatedTransform?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `wheel` | [`btWheelInfo`](Ammo.btWheelInfo.md) |
+| `interpolatedTransform?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:860](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L860)
+
+___
+
+### setPitchControl
+
+▸ **setPitchControl**(`pitch`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `pitch` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:861](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L861)
+
+___
+
+### updateSuspension
+
+▸ **updateSuspension**(`deltaTime`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `deltaTime` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:862](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L862)
+
+___
+
+### updateFriction
+
+▸ **updateFriction**(`timeStep`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `timeStep` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:863](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L863)
+
+___
+
+### getRightAxis
+
+▸ **getRightAxis**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:864](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L864)
+
+___
+
+### getUpAxis
+
+▸ **getUpAxis**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:865](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L865)
+
+___
+
+### getForwardAxis
+
+▸ **getForwardAxis**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:866](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L866)
+
+___
+
+### getForwardVector
+
+▸ **getForwardVector**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:867](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L867)
+
+___
+
+### getUserConstraintType
+
+▸ **getUserConstraintType**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:868](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L868)
+
+___
+
+### setUserConstraintType
+
+▸ **setUserConstraintType**(`userConstraintType`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `userConstraintType` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:869](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L869)
+
+___
+
+### setUserConstraintId
+
+▸ **setUserConstraintId**(`uid`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `uid` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:870](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L870)
+
+___
+
+### getUserConstraintId
+
+▸ **getUserConstraintId**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:871](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L871)
diff --git a/docs/physics/classes/Ammo.btRigidBody.md b/docs/physics/classes/Ammo.btRigidBody.md
new file mode 100644
index 00000000..44611903
--- /dev/null
+++ b/docs/physics/classes/Ammo.btRigidBody.md
@@ -0,0 +1,1302 @@
+# Class: btRigidBody
+
+[Ammo](../modules/Ammo.md).btRigidBody
+
+## Hierarchy
+
+- [`btCollisionObject`](Ammo.btCollisionObject.md)
+
+ ↳ **`btRigidBody`**
+
+### Constructors
+
+- [constructor](Ammo.btRigidBody.md#constructor)
+
+### Properties
+
+- [kB](Ammo.btRigidBody.md#kb)
+
+### Methods
+
+- [setAnisotropicFriction](Ammo.btRigidBody.md#setanisotropicfriction)
+- [getCollisionShape](Ammo.btRigidBody.md#getcollisionshape)
+- [setContactProcessingThreshold](Ammo.btRigidBody.md#setcontactprocessingthreshold)
+- [setActivationState](Ammo.btRigidBody.md#setactivationstate)
+- [forceActivationState](Ammo.btRigidBody.md#forceactivationstate)
+- [activate](Ammo.btRigidBody.md#activate)
+- [isActive](Ammo.btRigidBody.md#isactive)
+- [isKinematicObject](Ammo.btRigidBody.md#iskinematicobject)
+- [isStaticObject](Ammo.btRigidBody.md#isstaticobject)
+- [isStaticOrKinematicObject](Ammo.btRigidBody.md#isstaticorkinematicobject)
+- [getRestitution](Ammo.btRigidBody.md#getrestitution)
+- [getFriction](Ammo.btRigidBody.md#getfriction)
+- [getRollingFriction](Ammo.btRigidBody.md#getrollingfriction)
+- [setRestitution](Ammo.btRigidBody.md#setrestitution)
+- [setFriction](Ammo.btRigidBody.md#setfriction)
+- [setRollingFriction](Ammo.btRigidBody.md#setrollingfriction)
+- [getWorldTransform](Ammo.btRigidBody.md#getworldtransform)
+- [getCollisionFlags](Ammo.btRigidBody.md#getcollisionflags)
+- [setCollisionFlags](Ammo.btRigidBody.md#setcollisionflags)
+- [setWorldTransform](Ammo.btRigidBody.md#setworldtransform)
+- [setCollisionShape](Ammo.btRigidBody.md#setcollisionshape)
+- [setCcdMotionThreshold](Ammo.btRigidBody.md#setccdmotionthreshold)
+- [setCcdSweptSphereRadius](Ammo.btRigidBody.md#setccdsweptsphereradius)
+- [getUserIndex](Ammo.btRigidBody.md#getuserindex)
+- [setUserIndex](Ammo.btRigidBody.md#setuserindex)
+- [getUserPointer](Ammo.btRigidBody.md#getuserpointer)
+- [setUserPointer](Ammo.btRigidBody.md#setuserpointer)
+- [getBroadphaseHandle](Ammo.btRigidBody.md#getbroadphasehandle)
+- [getCenterOfMassTransform](Ammo.btRigidBody.md#getcenterofmasstransform)
+- [setCenterOfMassTransform](Ammo.btRigidBody.md#setcenterofmasstransform)
+- [setSleepingThresholds](Ammo.btRigidBody.md#setsleepingthresholds)
+- [getLinearDamping](Ammo.btRigidBody.md#getlineardamping)
+- [getAngularDamping](Ammo.btRigidBody.md#getangulardamping)
+- [setDamping](Ammo.btRigidBody.md#setdamping)
+- [setMassProps](Ammo.btRigidBody.md#setmassprops)
+- [getLinearFactor](Ammo.btRigidBody.md#getlinearfactor)
+- [setLinearFactor](Ammo.btRigidBody.md#setlinearfactor)
+- [applyTorque](Ammo.btRigidBody.md#applytorque)
+- [applyLocalTorque](Ammo.btRigidBody.md#applylocaltorque)
+- [applyForce](Ammo.btRigidBody.md#applyforce)
+- [applyCentralForce](Ammo.btRigidBody.md#applycentralforce)
+- [applyCentralLocalForce](Ammo.btRigidBody.md#applycentrallocalforce)
+- [applyTorqueImpulse](Ammo.btRigidBody.md#applytorqueimpulse)
+- [applyImpulse](Ammo.btRigidBody.md#applyimpulse)
+- [applyCentralImpulse](Ammo.btRigidBody.md#applycentralimpulse)
+- [updateInertiaTensor](Ammo.btRigidBody.md#updateinertiatensor)
+- [getLinearVelocity](Ammo.btRigidBody.md#getlinearvelocity)
+- [getAngularVelocity](Ammo.btRigidBody.md#getangularvelocity)
+- [setLinearVelocity](Ammo.btRigidBody.md#setlinearvelocity)
+- [setAngularVelocity](Ammo.btRigidBody.md#setangularvelocity)
+- [getMotionState](Ammo.btRigidBody.md#getmotionstate)
+- [setMotionState](Ammo.btRigidBody.md#setmotionstate)
+- [getAngularFactor](Ammo.btRigidBody.md#getangularfactor)
+- [setAngularFactor](Ammo.btRigidBody.md#setangularfactor)
+- [upcast](Ammo.btRigidBody.md#upcast)
+- [getAabb](Ammo.btRigidBody.md#getaabb)
+- [applyGravity](Ammo.btRigidBody.md#applygravity)
+- [getGravity](Ammo.btRigidBody.md#getgravity)
+- [setGravity](Ammo.btRigidBody.md#setgravity)
+- [getBroadphaseProxy](Ammo.btRigidBody.md#getbroadphaseproxy)
+- [clearForces](Ammo.btRigidBody.md#clearforces)
+
+## Constructors
+
+### constructor
+
+• **new btRigidBody**(`constructionInfo`): [`btRigidBody`](Ammo.btRigidBody.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `constructionInfo` | [`btRigidBodyConstructionInfo`](Ammo.btRigidBodyConstructionInfo.md) |
+
+#### Returns
+
+[`btRigidBody`](Ammo.btRigidBody.md)
+
+#### Overrides
+
+[btCollisionObject](Ammo.btCollisionObject.md).[constructor](Ammo.btCollisionObject.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:497](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L497)
+
+## Properties
+
+### kB
+
+• **kB**: `number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[kB](Ammo.btCollisionObject.md#kb)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:128](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L128)
+
+## Methods
+
+### setAnisotropicFriction
+
+▸ **setAnisotropicFriction**(`anisotropicFriction`, `frictionMode`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `anisotropicFriction` | [`btVector3`](Ammo.btVector3.md) |
+| `frictionMode` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setAnisotropicFriction](Ammo.btCollisionObject.md#setanisotropicfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:129](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L129)
+
+___
+
+### getCollisionShape
+
+▸ **getCollisionShape**(): [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Returns
+
+[`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getCollisionShape](Ammo.btCollisionObject.md#getcollisionshape)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:130](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L130)
+
+___
+
+### setContactProcessingThreshold
+
+▸ **setContactProcessingThreshold**(`contactProcessingThreshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `contactProcessingThreshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setContactProcessingThreshold](Ammo.btCollisionObject.md#setcontactprocessingthreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:131](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L131)
+
+___
+
+### setActivationState
+
+▸ **setActivationState**(`newState`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `newState` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setActivationState](Ammo.btCollisionObject.md#setactivationstate)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:132](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L132)
+
+___
+
+### forceActivationState
+
+▸ **forceActivationState**(`newState`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `newState` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[forceActivationState](Ammo.btCollisionObject.md#forceactivationstate)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:133](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L133)
+
+___
+
+### activate
+
+▸ **activate**(`forceActivation?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `forceActivation?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[activate](Ammo.btCollisionObject.md#activate)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:134](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L134)
+
+___
+
+### isActive
+
+▸ **isActive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[isActive](Ammo.btCollisionObject.md#isactive)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:135](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L135)
+
+___
+
+### isKinematicObject
+
+▸ **isKinematicObject**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[isKinematicObject](Ammo.btCollisionObject.md#iskinematicobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:136](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L136)
+
+___
+
+### isStaticObject
+
+▸ **isStaticObject**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[isStaticObject](Ammo.btCollisionObject.md#isstaticobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:137](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L137)
+
+___
+
+### isStaticOrKinematicObject
+
+▸ **isStaticOrKinematicObject**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[isStaticOrKinematicObject](Ammo.btCollisionObject.md#isstaticorkinematicobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:138](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L138)
+
+___
+
+### getRestitution
+
+▸ **getRestitution**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getRestitution](Ammo.btCollisionObject.md#getrestitution)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:139](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L139)
+
+___
+
+### getFriction
+
+▸ **getFriction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getFriction](Ammo.btCollisionObject.md#getfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:140](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L140)
+
+___
+
+### getRollingFriction
+
+▸ **getRollingFriction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getRollingFriction](Ammo.btCollisionObject.md#getrollingfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:141](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L141)
+
+___
+
+### setRestitution
+
+▸ **setRestitution**(`rest`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rest` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setRestitution](Ammo.btCollisionObject.md#setrestitution)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:142](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L142)
+
+___
+
+### setFriction
+
+▸ **setFriction**(`frict`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `frict` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setFriction](Ammo.btCollisionObject.md#setfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:143](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L143)
+
+___
+
+### setRollingFriction
+
+▸ **setRollingFriction**(`frict`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `frict` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setRollingFriction](Ammo.btCollisionObject.md#setrollingfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:144](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L144)
+
+___
+
+### getWorldTransform
+
+▸ **getWorldTransform**(): [`btTransform`](Ammo.btTransform.md)
+
+#### Returns
+
+[`btTransform`](Ammo.btTransform.md)
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getWorldTransform](Ammo.btCollisionObject.md#getworldtransform)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:145](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L145)
+
+___
+
+### getCollisionFlags
+
+▸ **getCollisionFlags**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getCollisionFlags](Ammo.btCollisionObject.md#getcollisionflags)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:146](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L146)
+
+___
+
+### setCollisionFlags
+
+▸ **setCollisionFlags**(`flags`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `flags` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setCollisionFlags](Ammo.btCollisionObject.md#setcollisionflags)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:147](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L147)
+
+___
+
+### setWorldTransform
+
+▸ **setWorldTransform**(`worldTrans`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldTrans` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setWorldTransform](Ammo.btCollisionObject.md#setworldtransform)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:148](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L148)
+
+___
+
+### setCollisionShape
+
+▸ **setCollisionShape**(`collisionShape`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionShape` | [`btCollisionShape`](Ammo.btCollisionShape.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setCollisionShape](Ammo.btCollisionObject.md#setcollisionshape)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:149](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L149)
+
+___
+
+### setCcdMotionThreshold
+
+▸ **setCcdMotionThreshold**(`ccdMotionThreshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ccdMotionThreshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setCcdMotionThreshold](Ammo.btCollisionObject.md#setccdmotionthreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:150](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L150)
+
+___
+
+### setCcdSweptSphereRadius
+
+▸ **setCcdSweptSphereRadius**(`radius`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radius` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setCcdSweptSphereRadius](Ammo.btCollisionObject.md#setccdsweptsphereradius)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:151](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L151)
+
+___
+
+### getUserIndex
+
+▸ **getUserIndex**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getUserIndex](Ammo.btCollisionObject.md#getuserindex)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:152](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L152)
+
+___
+
+### setUserIndex
+
+▸ **setUserIndex**(`index`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setUserIndex](Ammo.btCollisionObject.md#setuserindex)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:153](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L153)
+
+___
+
+### getUserPointer
+
+▸ **getUserPointer**(): `unknown`
+
+#### Returns
+
+`unknown`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getUserPointer](Ammo.btCollisionObject.md#getuserpointer)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:154](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L154)
+
+___
+
+### setUserPointer
+
+▸ **setUserPointer**(`userPointer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `userPointer` | `unknown` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setUserPointer](Ammo.btCollisionObject.md#setuserpointer)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:155](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L155)
+
+___
+
+### getBroadphaseHandle
+
+▸ **getBroadphaseHandle**(): [`btBroadphaseProxy`](Ammo.btBroadphaseProxy.md)
+
+#### Returns
+
+[`btBroadphaseProxy`](Ammo.btBroadphaseProxy.md)
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getBroadphaseHandle](Ammo.btCollisionObject.md#getbroadphasehandle)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:156](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L156)
+
+___
+
+### getCenterOfMassTransform
+
+▸ **getCenterOfMassTransform**(): [`btTransform`](Ammo.btTransform.md)
+
+#### Returns
+
+[`btTransform`](Ammo.btTransform.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:498](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L498)
+
+___
+
+### setCenterOfMassTransform
+
+▸ **setCenterOfMassTransform**(`xform`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `xform` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:499](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L499)
+
+___
+
+### setSleepingThresholds
+
+▸ **setSleepingThresholds**(`linear`, `angular`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `linear` | `number` |
+| `angular` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:500](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L500)
+
+___
+
+### getLinearDamping
+
+▸ **getLinearDamping**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:501](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L501)
+
+___
+
+### getAngularDamping
+
+▸ **getAngularDamping**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:502](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L502)
+
+___
+
+### setDamping
+
+▸ **setDamping**(`lin_damping`, `ang_damping`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lin_damping` | `number` |
+| `ang_damping` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:503](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L503)
+
+___
+
+### setMassProps
+
+▸ **setMassProps**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:504](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L504)
+
+___
+
+### getLinearFactor
+
+▸ **getLinearFactor**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:505](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L505)
+
+___
+
+### setLinearFactor
+
+▸ **setLinearFactor**(`linearFactor`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `linearFactor` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:506](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L506)
+
+___
+
+### applyTorque
+
+▸ **applyTorque**(`torque`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `torque` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:507](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L507)
+
+___
+
+### applyLocalTorque
+
+▸ **applyLocalTorque**(`torque`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `torque` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:508](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L508)
+
+___
+
+### applyForce
+
+▸ **applyForce**(`force`, `rel_pos`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | [`btVector3`](Ammo.btVector3.md) |
+| `rel_pos` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:509](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L509)
+
+___
+
+### applyCentralForce
+
+▸ **applyCentralForce**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:510](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L510)
+
+___
+
+### applyCentralLocalForce
+
+▸ **applyCentralLocalForce**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:511](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L511)
+
+___
+
+### applyTorqueImpulse
+
+▸ **applyTorqueImpulse**(`torque`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `torque` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:512](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L512)
+
+___
+
+### applyImpulse
+
+▸ **applyImpulse**(`impulse`, `rel_pos`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `impulse` | [`btVector3`](Ammo.btVector3.md) |
+| `rel_pos` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:513](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L513)
+
+___
+
+### applyCentralImpulse
+
+▸ **applyCentralImpulse**(`impulse`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `impulse` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:514](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L514)
+
+___
+
+### updateInertiaTensor
+
+▸ **updateInertiaTensor**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:515](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L515)
+
+___
+
+### getLinearVelocity
+
+▸ **getLinearVelocity**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:516](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L516)
+
+___
+
+### getAngularVelocity
+
+▸ **getAngularVelocity**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:517](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L517)
+
+___
+
+### setLinearVelocity
+
+▸ **setLinearVelocity**(`lin_vel`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lin_vel` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:518](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L518)
+
+___
+
+### setAngularVelocity
+
+▸ **setAngularVelocity**(`ang_vel`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ang_vel` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:519](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L519)
+
+___
+
+### getMotionState
+
+▸ **getMotionState**(): [`btMotionState`](Ammo.btMotionState.md)
+
+#### Returns
+
+[`btMotionState`](Ammo.btMotionState.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:520](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L520)
+
+___
+
+### setMotionState
+
+▸ **setMotionState**(`motionState`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `motionState` | [`btMotionState`](Ammo.btMotionState.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:521](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L521)
+
+___
+
+### getAngularFactor
+
+▸ **getAngularFactor**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:522](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L522)
+
+___
+
+### setAngularFactor
+
+▸ **setAngularFactor**(`angularFactor`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `angularFactor` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:523](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L523)
+
+___
+
+### upcast
+
+▸ **upcast**(`colObj`): [`btRigidBody`](Ammo.btRigidBody.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `colObj` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+
+#### Returns
+
+[`btRigidBody`](Ammo.btRigidBody.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:524](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L524)
+
+___
+
+### getAabb
+
+▸ **getAabb**(`aabbMin`, `aabbMax`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `aabbMin` | [`btVector3`](Ammo.btVector3.md) |
+| `aabbMax` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:525](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L525)
+
+___
+
+### applyGravity
+
+▸ **applyGravity**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:526](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L526)
+
+___
+
+### getGravity
+
+▸ **getGravity**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:527](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L527)
+
+___
+
+### setGravity
+
+▸ **setGravity**(`acceleration`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `acceleration` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:528](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L528)
+
+___
+
+### getBroadphaseProxy
+
+▸ **getBroadphaseProxy**(): [`btBroadphaseProxy`](Ammo.btBroadphaseProxy.md)
+
+#### Returns
+
+[`btBroadphaseProxy`](Ammo.btBroadphaseProxy.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:529](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L529)
+
+___
+
+### clearForces
+
+▸ **clearForces**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:530](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L530)
diff --git a/docs/physics/classes/Ammo.btRigidBodyConstructionInfo.md b/docs/physics/classes/Ammo.btRigidBodyConstructionInfo.md
new file mode 100644
index 00000000..812a159e
--- /dev/null
+++ b/docs/physics/classes/Ammo.btRigidBodyConstructionInfo.md
@@ -0,0 +1,465 @@
+# Class: btRigidBodyConstructionInfo
+
+[Ammo](../modules/Ammo.md).btRigidBodyConstructionInfo
+
+### Constructors
+
+- [constructor](Ammo.btRigidBodyConstructionInfo.md#constructor)
+
+### Methods
+
+- [get\_m\_linearDamping](Ammo.btRigidBodyConstructionInfo.md#get_m_lineardamping)
+- [set\_m\_linearDamping](Ammo.btRigidBodyConstructionInfo.md#set_m_lineardamping)
+- [get\_m\_angularDamping](Ammo.btRigidBodyConstructionInfo.md#get_m_angulardamping)
+- [set\_m\_angularDamping](Ammo.btRigidBodyConstructionInfo.md#set_m_angulardamping)
+- [get\_m\_friction](Ammo.btRigidBodyConstructionInfo.md#get_m_friction)
+- [set\_m\_friction](Ammo.btRigidBodyConstructionInfo.md#set_m_friction)
+- [get\_m\_rollingFriction](Ammo.btRigidBodyConstructionInfo.md#get_m_rollingfriction)
+- [set\_m\_rollingFriction](Ammo.btRigidBodyConstructionInfo.md#set_m_rollingfriction)
+- [get\_m\_restitution](Ammo.btRigidBodyConstructionInfo.md#get_m_restitution)
+- [set\_m\_restitution](Ammo.btRigidBodyConstructionInfo.md#set_m_restitution)
+- [get\_m\_linearSleepingThreshold](Ammo.btRigidBodyConstructionInfo.md#get_m_linearsleepingthreshold)
+- [set\_m\_linearSleepingThreshold](Ammo.btRigidBodyConstructionInfo.md#set_m_linearsleepingthreshold)
+- [get\_m\_angularSleepingThreshold](Ammo.btRigidBodyConstructionInfo.md#get_m_angularsleepingthreshold)
+- [set\_m\_angularSleepingThreshold](Ammo.btRigidBodyConstructionInfo.md#set_m_angularsleepingthreshold)
+- [get\_m\_additionalDamping](Ammo.btRigidBodyConstructionInfo.md#get_m_additionaldamping)
+- [set\_m\_additionalDamping](Ammo.btRigidBodyConstructionInfo.md#set_m_additionaldamping)
+- [get\_m\_additionalDampingFactor](Ammo.btRigidBodyConstructionInfo.md#get_m_additionaldampingfactor)
+- [set\_m\_additionalDampingFactor](Ammo.btRigidBodyConstructionInfo.md#set_m_additionaldampingfactor)
+- [get\_m\_additionalLinearDampingThresholdSqr](Ammo.btRigidBodyConstructionInfo.md#get_m_additionallineardampingthresholdsqr)
+- [set\_m\_additionalLinearDampingThresholdSqr](Ammo.btRigidBodyConstructionInfo.md#set_m_additionallineardampingthresholdsqr)
+- [get\_m\_additionalAngularDampingThresholdSqr](Ammo.btRigidBodyConstructionInfo.md#get_m_additionalangulardampingthresholdsqr)
+- [set\_m\_additionalAngularDampingThresholdSqr](Ammo.btRigidBodyConstructionInfo.md#set_m_additionalangulardampingthresholdsqr)
+- [get\_m\_additionalAngularDampingFactor](Ammo.btRigidBodyConstructionInfo.md#get_m_additionalangulardampingfactor)
+- [set\_m\_additionalAngularDampingFactor](Ammo.btRigidBodyConstructionInfo.md#set_m_additionalangulardampingfactor)
+
+## Constructors
+
+### constructor
+
+• **new btRigidBodyConstructionInfo**(`mass`, `motionState`, `collisionShape`, `localInertia?`): [`btRigidBodyConstructionInfo`](Ammo.btRigidBodyConstructionInfo.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `motionState` | [`btMotionState`](Ammo.btMotionState.md) |
+| `collisionShape` | [`btCollisionShape`](Ammo.btCollisionShape.md) |
+| `localInertia?` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`btRigidBodyConstructionInfo`](Ammo.btRigidBodyConstructionInfo.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:470](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L470)
+
+## Methods
+
+### get\_m\_linearDamping
+
+▸ **get_m_linearDamping**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:471](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L471)
+
+___
+
+### set\_m\_linearDamping
+
+▸ **set_m_linearDamping**(`m_linearDamping`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_linearDamping` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:472](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L472)
+
+___
+
+### get\_m\_angularDamping
+
+▸ **get_m_angularDamping**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:473](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L473)
+
+___
+
+### set\_m\_angularDamping
+
+▸ **set_m_angularDamping**(`m_angularDamping`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_angularDamping` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:474](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L474)
+
+___
+
+### get\_m\_friction
+
+▸ **get_m_friction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:475](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L475)
+
+___
+
+### set\_m\_friction
+
+▸ **set_m_friction**(`m_friction`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_friction` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:476](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L476)
+
+___
+
+### get\_m\_rollingFriction
+
+▸ **get_m_rollingFriction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:477](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L477)
+
+___
+
+### set\_m\_rollingFriction
+
+▸ **set_m_rollingFriction**(`m_rollingFriction`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_rollingFriction` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:478](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L478)
+
+___
+
+### get\_m\_restitution
+
+▸ **get_m_restitution**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:479](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L479)
+
+___
+
+### set\_m\_restitution
+
+▸ **set_m_restitution**(`m_restitution`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_restitution` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:480](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L480)
+
+___
+
+### get\_m\_linearSleepingThreshold
+
+▸ **get_m_linearSleepingThreshold**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:481](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L481)
+
+___
+
+### set\_m\_linearSleepingThreshold
+
+▸ **set_m_linearSleepingThreshold**(`m_linearSleepingThreshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_linearSleepingThreshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:482](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L482)
+
+___
+
+### get\_m\_angularSleepingThreshold
+
+▸ **get_m_angularSleepingThreshold**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:483](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L483)
+
+___
+
+### set\_m\_angularSleepingThreshold
+
+▸ **set_m_angularSleepingThreshold**(`m_angularSleepingThreshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_angularSleepingThreshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:484](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L484)
+
+___
+
+### get\_m\_additionalDamping
+
+▸ **get_m_additionalDamping**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:485](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L485)
+
+___
+
+### set\_m\_additionalDamping
+
+▸ **set_m_additionalDamping**(`m_additionalDamping`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_additionalDamping` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:486](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L486)
+
+___
+
+### get\_m\_additionalDampingFactor
+
+▸ **get_m_additionalDampingFactor**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:487](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L487)
+
+___
+
+### set\_m\_additionalDampingFactor
+
+▸ **set_m_additionalDampingFactor**(`m_additionalDampingFactor`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_additionalDampingFactor` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:488](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L488)
+
+___
+
+### get\_m\_additionalLinearDampingThresholdSqr
+
+▸ **get_m_additionalLinearDampingThresholdSqr**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:489](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L489)
+
+___
+
+### set\_m\_additionalLinearDampingThresholdSqr
+
+▸ **set_m_additionalLinearDampingThresholdSqr**(`m_additionalLinearDampingThresholdSqr`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_additionalLinearDampingThresholdSqr` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:490](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L490)
+
+___
+
+### get\_m\_additionalAngularDampingThresholdSqr
+
+▸ **get_m_additionalAngularDampingThresholdSqr**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:491](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L491)
+
+___
+
+### set\_m\_additionalAngularDampingThresholdSqr
+
+▸ **set_m_additionalAngularDampingThresholdSqr**(`m_additionalAngularDampingThresholdSqr`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_additionalAngularDampingThresholdSqr` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:492](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L492)
+
+___
+
+### get\_m\_additionalAngularDampingFactor
+
+▸ **get_m_additionalAngularDampingFactor**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:493](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L493)
+
+___
+
+### set\_m\_additionalAngularDampingFactor
+
+▸ **set_m_additionalAngularDampingFactor**(`m_additionalAngularDampingFactor`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_additionalAngularDampingFactor` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:494](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L494)
diff --git a/docs/physics/classes/Ammo.btScalarArray.md b/docs/physics/classes/Ammo.btScalarArray.md
new file mode 100644
index 00000000..114c5095
--- /dev/null
+++ b/docs/physics/classes/Ammo.btScalarArray.md
@@ -0,0 +1,56 @@
+# Class: btScalarArray
+
+[Ammo](../modules/Ammo.md).btScalarArray
+
+### Constructors
+
+- [constructor](Ammo.btScalarArray.md#constructor)
+
+### Methods
+
+- [size](Ammo.btScalarArray.md#size)
+- [at](Ammo.btScalarArray.md#at)
+
+## Constructors
+
+### constructor
+
+• **new btScalarArray**(): [`btScalarArray`](Ammo.btScalarArray.md)
+
+#### Returns
+
+[`btScalarArray`](Ammo.btScalarArray.md)
+
+## Methods
+
+### size
+
+▸ **size**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:190](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L190)
+
+___
+
+### at
+
+▸ **at**(`n`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `n` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:191](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L191)
diff --git a/docs/physics/classes/Ammo.btSequentialImpulseConstraintSolver.md b/docs/physics/classes/Ammo.btSequentialImpulseConstraintSolver.md
new file mode 100644
index 00000000..efe737fd
--- /dev/null
+++ b/docs/physics/classes/Ammo.btSequentialImpulseConstraintSolver.md
@@ -0,0 +1,21 @@
+# Class: btSequentialImpulseConstraintSolver
+
+[Ammo](../modules/Ammo.md).btSequentialImpulseConstraintSolver
+
+### Constructors
+
+- [constructor](Ammo.btSequentialImpulseConstraintSolver.md#constructor)
+
+## Constructors
+
+### constructor
+
+• **new btSequentialImpulseConstraintSolver**(): [`btSequentialImpulseConstraintSolver`](Ammo.btSequentialImpulseConstraintSolver.md)
+
+#### Returns
+
+[`btSequentialImpulseConstraintSolver`](Ammo.btSequentialImpulseConstraintSolver.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:579](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L579)
diff --git a/docs/physics/classes/Ammo.btShapeHull.md b/docs/physics/classes/Ammo.btShapeHull.md
new file mode 100644
index 00000000..b0cf123e
--- /dev/null
+++ b/docs/physics/classes/Ammo.btShapeHull.md
@@ -0,0 +1,81 @@
+# Class: btShapeHull
+
+[Ammo](../modules/Ammo.md).btShapeHull
+
+### Constructors
+
+- [constructor](Ammo.btShapeHull.md#constructor)
+
+### Methods
+
+- [buildHull](Ammo.btShapeHull.md#buildhull)
+- [numVertices](Ammo.btShapeHull.md#numvertices)
+- [getVertexPointer](Ammo.btShapeHull.md#getvertexpointer)
+
+## Constructors
+
+### constructor
+
+• **new btShapeHull**(`shape`): [`btShapeHull`](Ammo.btShapeHull.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `shape` | [`btConvexShape`](Ammo.btConvexShape.md) |
+
+#### Returns
+
+[`btShapeHull`](Ammo.btShapeHull.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:373](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L373)
+
+## Methods
+
+### buildHull
+
+▸ **buildHull**(`margin`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:374](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L374)
+
+___
+
+### numVertices
+
+▸ **numVertices**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:375](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L375)
+
+___
+
+### getVertexPointer
+
+▸ **getVertexPointer**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:376](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L376)
diff --git a/docs/physics/classes/Ammo.btSliderConstraint.md b/docs/physics/classes/Ammo.btSliderConstraint.md
new file mode 100644
index 00000000..58949344
--- /dev/null
+++ b/docs/physics/classes/Ammo.btSliderConstraint.md
@@ -0,0 +1,365 @@
+# Class: btSliderConstraint
+
+[Ammo](../modules/Ammo.md).btSliderConstraint
+
+## Hierarchy
+
+- [`btTypedConstraint`](Ammo.btTypedConstraint.md)
+
+ ↳ **`btSliderConstraint`**
+
+### Constructors
+
+- [constructor](Ammo.btSliderConstraint.md#constructor)
+
+### Methods
+
+- [enableFeedback](Ammo.btSliderConstraint.md#enablefeedback)
+- [getBreakingImpulseThreshold](Ammo.btSliderConstraint.md#getbreakingimpulsethreshold)
+- [setBreakingImpulseThreshold](Ammo.btSliderConstraint.md#setbreakingimpulsethreshold)
+- [getParam](Ammo.btSliderConstraint.md#getparam)
+- [setParam](Ammo.btSliderConstraint.md#setparam)
+- [setLowerLinLimit](Ammo.btSliderConstraint.md#setlowerlinlimit)
+- [setUpperLinLimit](Ammo.btSliderConstraint.md#setupperlinlimit)
+- [setLowerAngLimit](Ammo.btSliderConstraint.md#setloweranglimit)
+- [setUpperAngLimit](Ammo.btSliderConstraint.md#setupperanglimit)
+- [getLinearPos](Ammo.btSliderConstraint.md#getlinearpos)
+- [getAngularPos](Ammo.btSliderConstraint.md#getangularpos)
+- [setTargetLinMotorVelocity](Ammo.btSliderConstraint.md#settargetlinmotorvelocity)
+- [setPoweredLinMotor](Ammo.btSliderConstraint.md#setpoweredlinmotor)
+- [setMaxLinMotorForce](Ammo.btSliderConstraint.md#setmaxlinmotorforce)
+
+## Constructors
+
+### constructor
+
+• **new btSliderConstraint**(`rbA`, `rbB`, `frameInA`, `frameInB`, `useLinearReferenceFrameA`): [`btSliderConstraint`](Ammo.btSliderConstraint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rbA` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `rbB` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `frameInA` | [`btTransform`](Ammo.btTransform.md) |
+| `frameInB` | [`btTransform`](Ammo.btTransform.md) |
+| `useLinearReferenceFrameA` | `boolean` |
+
+#### Returns
+
+[`btSliderConstraint`](Ammo.btSliderConstraint.md)
+
+#### Overrides
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[constructor](Ammo.btTypedConstraint.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:605](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L605)
+
+• **new btSliderConstraint**(`rbB`, `frameInB`, `useLinearReferenceFrameA`): [`btSliderConstraint`](Ammo.btSliderConstraint.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rbB` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `frameInB` | [`btTransform`](Ammo.btTransform.md) |
+| `useLinearReferenceFrameA` | `boolean` |
+
+#### Returns
+
+[`btSliderConstraint`](Ammo.btSliderConstraint.md)
+
+#### Overrides
+
+btTypedConstraint.constructor
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:606](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L606)
+
+## Methods
+
+### enableFeedback
+
+▸ **enableFeedback**(`needsFeedback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `needsFeedback` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[enableFeedback](Ammo.btTypedConstraint.md#enablefeedback)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:542](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L542)
+
+___
+
+### getBreakingImpulseThreshold
+
+▸ **getBreakingImpulseThreshold**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[getBreakingImpulseThreshold](Ammo.btTypedConstraint.md#getbreakingimpulsethreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:543](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L543)
+
+___
+
+### setBreakingImpulseThreshold
+
+▸ **setBreakingImpulseThreshold**(`threshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `threshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[setBreakingImpulseThreshold](Ammo.btTypedConstraint.md#setbreakingimpulsethreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:544](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L544)
+
+___
+
+### getParam
+
+▸ **getParam**(`num`, `axis`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `num` | `number` |
+| `axis` | `number` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[getParam](Ammo.btTypedConstraint.md#getparam)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:545](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L545)
+
+___
+
+### setParam
+
+▸ **setParam**(`num`, `value`, `axis`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `num` | `number` |
+| `value` | `number` |
+| `axis` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btTypedConstraint](Ammo.btTypedConstraint.md).[setParam](Ammo.btTypedConstraint.md#setparam)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:546](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L546)
+
+___
+
+### setLowerLinLimit
+
+▸ **setLowerLinLimit**(`lowerLimit`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lowerLimit` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:607](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L607)
+
+___
+
+### setUpperLinLimit
+
+▸ **setUpperLinLimit**(`upperLimit`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `upperLimit` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:608](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L608)
+
+___
+
+### setLowerAngLimit
+
+▸ **setLowerAngLimit**(`lowerAngLimit`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lowerAngLimit` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:609](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L609)
+
+___
+
+### setUpperAngLimit
+
+▸ **setUpperAngLimit**(`upperAngLimit`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `upperAngLimit` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:610](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L610)
+
+___
+
+### getLinearPos
+
+▸ **getLinearPos**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:611](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L611)
+
+___
+
+### getAngularPos
+
+▸ **getAngularPos**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:612](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L612)
+
+___
+
+### setTargetLinMotorVelocity
+
+▸ **setTargetLinMotorVelocity**(`velocity`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `velocity` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:613](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L613)
+
+___
+
+### setPoweredLinMotor
+
+▸ **setPoweredLinMotor**(`onOff`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `onOff` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:614](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L614)
+
+___
+
+### setMaxLinMotorForce
+
+▸ **setMaxLinMotorForce**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:615](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L615)
diff --git a/docs/physics/classes/Ammo.btSoftBody.md b/docs/physics/classes/Ammo.btSoftBody.md
new file mode 100644
index 00000000..c15aa043
--- /dev/null
+++ b/docs/physics/classes/Ammo.btSoftBody.md
@@ -0,0 +1,1311 @@
+# Class: btSoftBody
+
+[Ammo](../modules/Ammo.md).btSoftBody
+
+## Hierarchy
+
+- [`btCollisionObject`](Ammo.btCollisionObject.md)
+
+ ↳ **`btSoftBody`**
+
+### Constructors
+
+- [constructor](Ammo.btSoftBody.md#constructor)
+
+### Properties
+
+- [kB](Ammo.btSoftBody.md#kb)
+
+### Methods
+
+- [setAnisotropicFriction](Ammo.btSoftBody.md#setanisotropicfriction)
+- [getCollisionShape](Ammo.btSoftBody.md#getcollisionshape)
+- [setContactProcessingThreshold](Ammo.btSoftBody.md#setcontactprocessingthreshold)
+- [setActivationState](Ammo.btSoftBody.md#setactivationstate)
+- [forceActivationState](Ammo.btSoftBody.md#forceactivationstate)
+- [activate](Ammo.btSoftBody.md#activate)
+- [isActive](Ammo.btSoftBody.md#isactive)
+- [isKinematicObject](Ammo.btSoftBody.md#iskinematicobject)
+- [isStaticObject](Ammo.btSoftBody.md#isstaticobject)
+- [isStaticOrKinematicObject](Ammo.btSoftBody.md#isstaticorkinematicobject)
+- [getRestitution](Ammo.btSoftBody.md#getrestitution)
+- [getFriction](Ammo.btSoftBody.md#getfriction)
+- [getRollingFriction](Ammo.btSoftBody.md#getrollingfriction)
+- [setRestitution](Ammo.btSoftBody.md#setrestitution)
+- [setFriction](Ammo.btSoftBody.md#setfriction)
+- [setRollingFriction](Ammo.btSoftBody.md#setrollingfriction)
+- [getWorldTransform](Ammo.btSoftBody.md#getworldtransform)
+- [getCollisionFlags](Ammo.btSoftBody.md#getcollisionflags)
+- [setCollisionFlags](Ammo.btSoftBody.md#setcollisionflags)
+- [setWorldTransform](Ammo.btSoftBody.md#setworldtransform)
+- [setCollisionShape](Ammo.btSoftBody.md#setcollisionshape)
+- [setCcdMotionThreshold](Ammo.btSoftBody.md#setccdmotionthreshold)
+- [setCcdSweptSphereRadius](Ammo.btSoftBody.md#setccdsweptsphereradius)
+- [getUserIndex](Ammo.btSoftBody.md#getuserindex)
+- [setUserIndex](Ammo.btSoftBody.md#setuserindex)
+- [getUserPointer](Ammo.btSoftBody.md#getuserpointer)
+- [setUserPointer](Ammo.btSoftBody.md#setuserpointer)
+- [getBroadphaseHandle](Ammo.btSoftBody.md#getbroadphasehandle)
+- [get\_m\_cfg](Ammo.btSoftBody.md#get_m_cfg)
+- [set\_m\_cfg](Ammo.btSoftBody.md#set_m_cfg)
+- [get\_m\_nodes](Ammo.btSoftBody.md#get_m_nodes)
+- [set\_m\_nodes](Ammo.btSoftBody.md#set_m_nodes)
+- [get\_m\_faces](Ammo.btSoftBody.md#get_m_faces)
+- [set\_m\_faces](Ammo.btSoftBody.md#set_m_faces)
+- [get\_m\_materials](Ammo.btSoftBody.md#get_m_materials)
+- [set\_m\_materials](Ammo.btSoftBody.md#set_m_materials)
+- [get\_m\_anchors](Ammo.btSoftBody.md#get_m_anchors)
+- [set\_m\_anchors](Ammo.btSoftBody.md#set_m_anchors)
+- [checkLink](Ammo.btSoftBody.md#checklink)
+- [checkFace](Ammo.btSoftBody.md#checkface)
+- [appendMaterial](Ammo.btSoftBody.md#appendmaterial)
+- [appendNode](Ammo.btSoftBody.md#appendnode)
+- [appendLink](Ammo.btSoftBody.md#appendlink)
+- [appendFace](Ammo.btSoftBody.md#appendface)
+- [appendTetra](Ammo.btSoftBody.md#appendtetra)
+- [appendAnchor](Ammo.btSoftBody.md#appendanchor)
+- [addForce](Ammo.btSoftBody.md#addforce)
+- [addAeroForceToNode](Ammo.btSoftBody.md#addaeroforcetonode)
+- [getTotalMass](Ammo.btSoftBody.md#gettotalmass)
+- [setTotalMass](Ammo.btSoftBody.md#settotalmass)
+- [setMass](Ammo.btSoftBody.md#setmass)
+- [transform](Ammo.btSoftBody.md#transform)
+- [translate](Ammo.btSoftBody.md#translate)
+- [rotate](Ammo.btSoftBody.md#rotate)
+- [scale](Ammo.btSoftBody.md#scale)
+- [generateClusters](Ammo.btSoftBody.md#generateclusters)
+- [generateBendingConstraints](Ammo.btSoftBody.md#generatebendingconstraints)
+- [upcast](Ammo.btSoftBody.md#upcast)
+
+## Constructors
+
+### constructor
+
+• **new btSoftBody**(`worldInfo`, `node_count`, `x`, `m`): [`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldInfo` | [`btSoftBodyWorldInfo`](Ammo.btSoftBodyWorldInfo.md) |
+| `node_count` | `number` |
+| `x` | [`btVector3`](Ammo.btVector3.md) |
+| `m` | readonly `number`[] |
+
+#### Returns
+
+[`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Overrides
+
+[btCollisionObject](Ammo.btCollisionObject.md).[constructor](Ammo.btCollisionObject.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1025](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1025)
+
+## Properties
+
+### kB
+
+• **kB**: `number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[kB](Ammo.btCollisionObject.md#kb)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:128](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L128)
+
+## Methods
+
+### setAnisotropicFriction
+
+▸ **setAnisotropicFriction**(`anisotropicFriction`, `frictionMode`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `anisotropicFriction` | [`btVector3`](Ammo.btVector3.md) |
+| `frictionMode` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setAnisotropicFriction](Ammo.btCollisionObject.md#setanisotropicfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:129](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L129)
+
+___
+
+### getCollisionShape
+
+▸ **getCollisionShape**(): [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Returns
+
+[`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getCollisionShape](Ammo.btCollisionObject.md#getcollisionshape)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:130](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L130)
+
+___
+
+### setContactProcessingThreshold
+
+▸ **setContactProcessingThreshold**(`contactProcessingThreshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `contactProcessingThreshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setContactProcessingThreshold](Ammo.btCollisionObject.md#setcontactprocessingthreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:131](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L131)
+
+___
+
+### setActivationState
+
+▸ **setActivationState**(`newState`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `newState` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setActivationState](Ammo.btCollisionObject.md#setactivationstate)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:132](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L132)
+
+___
+
+### forceActivationState
+
+▸ **forceActivationState**(`newState`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `newState` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[forceActivationState](Ammo.btCollisionObject.md#forceactivationstate)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:133](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L133)
+
+___
+
+### activate
+
+▸ **activate**(`forceActivation?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `forceActivation?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[activate](Ammo.btCollisionObject.md#activate)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:134](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L134)
+
+___
+
+### isActive
+
+▸ **isActive**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[isActive](Ammo.btCollisionObject.md#isactive)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:135](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L135)
+
+___
+
+### isKinematicObject
+
+▸ **isKinematicObject**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[isKinematicObject](Ammo.btCollisionObject.md#iskinematicobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:136](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L136)
+
+___
+
+### isStaticObject
+
+▸ **isStaticObject**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[isStaticObject](Ammo.btCollisionObject.md#isstaticobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:137](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L137)
+
+___
+
+### isStaticOrKinematicObject
+
+▸ **isStaticOrKinematicObject**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[isStaticOrKinematicObject](Ammo.btCollisionObject.md#isstaticorkinematicobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:138](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L138)
+
+___
+
+### getRestitution
+
+▸ **getRestitution**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getRestitution](Ammo.btCollisionObject.md#getrestitution)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:139](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L139)
+
+___
+
+### getFriction
+
+▸ **getFriction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getFriction](Ammo.btCollisionObject.md#getfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:140](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L140)
+
+___
+
+### getRollingFriction
+
+▸ **getRollingFriction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getRollingFriction](Ammo.btCollisionObject.md#getrollingfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:141](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L141)
+
+___
+
+### setRestitution
+
+▸ **setRestitution**(`rest`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rest` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setRestitution](Ammo.btCollisionObject.md#setrestitution)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:142](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L142)
+
+___
+
+### setFriction
+
+▸ **setFriction**(`frict`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `frict` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setFriction](Ammo.btCollisionObject.md#setfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:143](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L143)
+
+___
+
+### setRollingFriction
+
+▸ **setRollingFriction**(`frict`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `frict` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setRollingFriction](Ammo.btCollisionObject.md#setrollingfriction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:144](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L144)
+
+___
+
+### getWorldTransform
+
+▸ **getWorldTransform**(): [`btTransform`](Ammo.btTransform.md)
+
+#### Returns
+
+[`btTransform`](Ammo.btTransform.md)
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getWorldTransform](Ammo.btCollisionObject.md#getworldtransform)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:145](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L145)
+
+___
+
+### getCollisionFlags
+
+▸ **getCollisionFlags**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getCollisionFlags](Ammo.btCollisionObject.md#getcollisionflags)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:146](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L146)
+
+___
+
+### setCollisionFlags
+
+▸ **setCollisionFlags**(`flags`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `flags` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setCollisionFlags](Ammo.btCollisionObject.md#setcollisionflags)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:147](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L147)
+
+___
+
+### setWorldTransform
+
+▸ **setWorldTransform**(`worldTrans`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldTrans` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setWorldTransform](Ammo.btCollisionObject.md#setworldtransform)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:148](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L148)
+
+___
+
+### setCollisionShape
+
+▸ **setCollisionShape**(`collisionShape`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionShape` | [`btCollisionShape`](Ammo.btCollisionShape.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setCollisionShape](Ammo.btCollisionObject.md#setcollisionshape)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:149](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L149)
+
+___
+
+### setCcdMotionThreshold
+
+▸ **setCcdMotionThreshold**(`ccdMotionThreshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ccdMotionThreshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setCcdMotionThreshold](Ammo.btCollisionObject.md#setccdmotionthreshold)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:150](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L150)
+
+___
+
+### setCcdSweptSphereRadius
+
+▸ **setCcdSweptSphereRadius**(`radius`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radius` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setCcdSweptSphereRadius](Ammo.btCollisionObject.md#setccdsweptsphereradius)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:151](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L151)
+
+___
+
+### getUserIndex
+
+▸ **getUserIndex**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getUserIndex](Ammo.btCollisionObject.md#getuserindex)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:152](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L152)
+
+___
+
+### setUserIndex
+
+▸ **setUserIndex**(`index`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setUserIndex](Ammo.btCollisionObject.md#setuserindex)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:153](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L153)
+
+___
+
+### getUserPointer
+
+▸ **getUserPointer**(): `unknown`
+
+#### Returns
+
+`unknown`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getUserPointer](Ammo.btCollisionObject.md#getuserpointer)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:154](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L154)
+
+___
+
+### setUserPointer
+
+▸ **setUserPointer**(`userPointer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `userPointer` | `unknown` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[setUserPointer](Ammo.btCollisionObject.md#setuserpointer)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:155](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L155)
+
+___
+
+### getBroadphaseHandle
+
+▸ **getBroadphaseHandle**(): [`btBroadphaseProxy`](Ammo.btBroadphaseProxy.md)
+
+#### Returns
+
+[`btBroadphaseProxy`](Ammo.btBroadphaseProxy.md)
+
+#### Inherited from
+
+[btCollisionObject](Ammo.btCollisionObject.md).[getBroadphaseHandle](Ammo.btCollisionObject.md#getbroadphasehandle)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:156](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L156)
+
+___
+
+### get\_m\_cfg
+
+▸ **get_m_cfg**(): [`Config`](Ammo.Config.md)
+
+#### Returns
+
+[`Config`](Ammo.Config.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1026](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1026)
+
+___
+
+### set\_m\_cfg
+
+▸ **set_m_cfg**(`m_cfg`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_cfg` | [`Config`](Ammo.Config.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1027](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1027)
+
+___
+
+### get\_m\_nodes
+
+▸ **get_m_nodes**(): [`tNodeArray`](Ammo.tNodeArray.md)
+
+#### Returns
+
+[`tNodeArray`](Ammo.tNodeArray.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1028](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1028)
+
+___
+
+### set\_m\_nodes
+
+▸ **set_m_nodes**(`m_nodes`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_nodes` | [`tNodeArray`](Ammo.tNodeArray.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1029](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1029)
+
+___
+
+### get\_m\_faces
+
+▸ **get_m_faces**(): [`tFaceArray`](Ammo.tFaceArray.md)
+
+#### Returns
+
+[`tFaceArray`](Ammo.tFaceArray.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1030](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1030)
+
+___
+
+### set\_m\_faces
+
+▸ **set_m_faces**(`m_faces`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_faces` | [`tFaceArray`](Ammo.tFaceArray.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1031](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1031)
+
+___
+
+### get\_m\_materials
+
+▸ **get_m_materials**(): [`tMaterialArray`](Ammo.tMaterialArray.md)
+
+#### Returns
+
+[`tMaterialArray`](Ammo.tMaterialArray.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1032](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1032)
+
+___
+
+### set\_m\_materials
+
+▸ **set_m_materials**(`m_materials`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_materials` | [`tMaterialArray`](Ammo.tMaterialArray.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1033](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1033)
+
+___
+
+### get\_m\_anchors
+
+▸ **get_m_anchors**(): [`tAnchorArray`](Ammo.tAnchorArray.md)
+
+#### Returns
+
+[`tAnchorArray`](Ammo.tAnchorArray.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1034](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1034)
+
+___
+
+### set\_m\_anchors
+
+▸ **set_m_anchors**(`m_anchors`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_anchors` | [`tAnchorArray`](Ammo.tAnchorArray.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1035](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1035)
+
+___
+
+### checkLink
+
+▸ **checkLink**(`node0`, `node1`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `node0` | `number` |
+| `node1` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1036](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1036)
+
+___
+
+### checkFace
+
+▸ **checkFace**(`node0`, `node1`, `node2`): `boolean`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `node0` | `number` |
+| `node1` | `number` |
+| `node2` | `number` |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1037](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1037)
+
+___
+
+### appendMaterial
+
+▸ **appendMaterial**(): [`Material`](Ammo.Material.md)
+
+#### Returns
+
+[`Material`](Ammo.Material.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1038](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1038)
+
+___
+
+### appendNode
+
+▸ **appendNode**(`x`, `m`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | [`btVector3`](Ammo.btVector3.md) |
+| `m` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1039](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1039)
+
+___
+
+### appendLink
+
+▸ **appendLink**(`node0`, `node1`, `mat`, `bcheckexist`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `node0` | `number` |
+| `node1` | `number` |
+| `mat` | [`Material`](Ammo.Material.md) |
+| `bcheckexist` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1040](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1040)
+
+___
+
+### appendFace
+
+▸ **appendFace**(`node0`, `node1`, `node2`, `mat`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `node0` | `number` |
+| `node1` | `number` |
+| `node2` | `number` |
+| `mat` | [`Material`](Ammo.Material.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1041](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1041)
+
+___
+
+### appendTetra
+
+▸ **appendTetra**(`node0`, `node1`, `node2`, `node3`, `mat`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `node0` | `number` |
+| `node1` | `number` |
+| `node2` | `number` |
+| `node3` | `number` |
+| `mat` | [`Material`](Ammo.Material.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1042](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1042)
+
+___
+
+### appendAnchor
+
+▸ **appendAnchor**(`node`, `body`, `disableCollisionBetweenLinkedBodies`, `influence`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `node` | `number` |
+| `body` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `disableCollisionBetweenLinkedBodies` | `boolean` |
+| `influence` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1043](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1043)
+
+___
+
+### addForce
+
+▸ **addForce**(`force`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1044](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1044)
+
+▸ **addForce**(`force`, `node`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force` | [`btVector3`](Ammo.btVector3.md) |
+| `node` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1045](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1045)
+
+___
+
+### addAeroForceToNode
+
+▸ **addAeroForceToNode**(`windVelocity`, `nodeIndex`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `windVelocity` | [`btVector3`](Ammo.btVector3.md) |
+| `nodeIndex` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1046](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1046)
+
+___
+
+### getTotalMass
+
+▸ **getTotalMass**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1047](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1047)
+
+___
+
+### setTotalMass
+
+▸ **setTotalMass**(`mass`, `fromfaces`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `fromfaces` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1048](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1048)
+
+___
+
+### setMass
+
+▸ **setMass**(`node`, `mass`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `node` | `number` |
+| `mass` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1049](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1049)
+
+___
+
+### transform
+
+▸ **transform**(`trs`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `trs` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1050](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1050)
+
+___
+
+### translate
+
+▸ **translate**(`trs`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `trs` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1051](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1051)
+
+___
+
+### rotate
+
+▸ **rotate**(`rot`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rot` | [`btQuaternion`](Ammo.btQuaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1052](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1052)
+
+___
+
+### scale
+
+▸ **scale**(`scl`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scl` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1053](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1053)
+
+___
+
+### generateClusters
+
+▸ **generateClusters**(`k`, `maxiterations?`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `k` | `number` |
+| `maxiterations?` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1054](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1054)
+
+___
+
+### generateBendingConstraints
+
+▸ **generateBendingConstraints**(`distance`, `mat`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `distance` | `number` |
+| `mat` | [`Material`](Ammo.Material.md) |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1055](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1055)
+
+___
+
+### upcast
+
+▸ **upcast**(`colObj`): [`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `colObj` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+
+#### Returns
+
+[`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1056](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1056)
diff --git a/docs/physics/classes/Ammo.btSoftBodyArray.md b/docs/physics/classes/Ammo.btSoftBodyArray.md
new file mode 100644
index 00000000..3f328e62
--- /dev/null
+++ b/docs/physics/classes/Ammo.btSoftBodyArray.md
@@ -0,0 +1,56 @@
+# Class: btSoftBodyArray
+
+[Ammo](../modules/Ammo.md).btSoftBodyArray
+
+### Constructors
+
+- [constructor](Ammo.btSoftBodyArray.md#constructor)
+
+### Methods
+
+- [size](Ammo.btSoftBodyArray.md#size)
+- [at](Ammo.btSoftBodyArray.md#at)
+
+## Constructors
+
+### constructor
+
+• **new btSoftBodyArray**(): [`btSoftBodyArray`](Ammo.btSoftBodyArray.md)
+
+#### Returns
+
+[`btSoftBodyArray`](Ammo.btSoftBodyArray.md)
+
+## Methods
+
+### size
+
+▸ **size**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1066](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1066)
+
+___
+
+### at
+
+▸ **at**(`n`): [`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `n` | `number` |
+
+#### Returns
+
+[`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1067](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1067)
diff --git a/docs/physics/classes/Ammo.btSoftBodyHelpers.md b/docs/physics/classes/Ammo.btSoftBodyHelpers.md
new file mode 100644
index 00000000..c4a9a830
--- /dev/null
+++ b/docs/physics/classes/Ammo.btSoftBodyHelpers.md
@@ -0,0 +1,181 @@
+# Class: btSoftBodyHelpers
+
+[Ammo](../modules/Ammo.md).btSoftBodyHelpers
+
+### Constructors
+
+- [constructor](Ammo.btSoftBodyHelpers.md#constructor)
+
+### Methods
+
+- [CreateRope](Ammo.btSoftBodyHelpers.md#createrope)
+- [CreatePatch](Ammo.btSoftBodyHelpers.md#createpatch)
+- [CreatePatchUV](Ammo.btSoftBodyHelpers.md#createpatchuv)
+- [CreateEllipsoid](Ammo.btSoftBodyHelpers.md#createellipsoid)
+- [CreateFromTriMesh](Ammo.btSoftBodyHelpers.md#createfromtrimesh)
+- [CreateFromConvexHull](Ammo.btSoftBodyHelpers.md#createfromconvexhull)
+
+## Constructors
+
+### constructor
+
+• **new btSoftBodyHelpers**(): [`btSoftBodyHelpers`](Ammo.btSoftBodyHelpers.md)
+
+#### Returns
+
+[`btSoftBodyHelpers`](Ammo.btSoftBodyHelpers.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1078](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1078)
+
+## Methods
+
+### CreateRope
+
+▸ **CreateRope**(`worldInfo`, `from`, `to`, `res`, `fixeds`): [`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldInfo` | [`btSoftBodyWorldInfo`](Ammo.btSoftBodyWorldInfo.md) |
+| `from` | [`btVector3`](Ammo.btVector3.md) |
+| `to` | [`btVector3`](Ammo.btVector3.md) |
+| `res` | `number` |
+| `fixeds` | `number` |
+
+#### Returns
+
+[`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1079](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1079)
+
+___
+
+### CreatePatch
+
+▸ **CreatePatch**(`worldInfo`, `corner00`, `corner10`, `corner01`, `corner11`, `resx`, `resy`, `fixeds`, `gendiags`): [`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldInfo` | [`btSoftBodyWorldInfo`](Ammo.btSoftBodyWorldInfo.md) |
+| `corner00` | [`btVector3`](Ammo.btVector3.md) |
+| `corner10` | [`btVector3`](Ammo.btVector3.md) |
+| `corner01` | [`btVector3`](Ammo.btVector3.md) |
+| `corner11` | [`btVector3`](Ammo.btVector3.md) |
+| `resx` | `number` |
+| `resy` | `number` |
+| `fixeds` | `number` |
+| `gendiags` | `boolean` |
+
+#### Returns
+
+[`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1080](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1080)
+
+___
+
+### CreatePatchUV
+
+▸ **CreatePatchUV**(`worldInfo`, `corner00`, `corner10`, `corner01`, `corner11`, `resx`, `resy`, `fixeds`, `gendiags`, `tex_coords`): [`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldInfo` | [`btSoftBodyWorldInfo`](Ammo.btSoftBodyWorldInfo.md) |
+| `corner00` | [`btVector3`](Ammo.btVector3.md) |
+| `corner10` | [`btVector3`](Ammo.btVector3.md) |
+| `corner01` | [`btVector3`](Ammo.btVector3.md) |
+| `corner11` | [`btVector3`](Ammo.btVector3.md) |
+| `resx` | `number` |
+| `resy` | `number` |
+| `fixeds` | `number` |
+| `gendiags` | `boolean` |
+| `tex_coords` | readonly `number`[] |
+
+#### Returns
+
+[`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1081](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1081)
+
+___
+
+### CreateEllipsoid
+
+▸ **CreateEllipsoid**(`worldInfo`, `center`, `radius`, `res`): [`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldInfo` | [`btSoftBodyWorldInfo`](Ammo.btSoftBodyWorldInfo.md) |
+| `center` | [`btVector3`](Ammo.btVector3.md) |
+| `radius` | [`btVector3`](Ammo.btVector3.md) |
+| `res` | `number` |
+
+#### Returns
+
+[`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1082](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1082)
+
+___
+
+### CreateFromTriMesh
+
+▸ **CreateFromTriMesh**(`worldInfo`, `vertices`, `triangles`, `ntriangles`, `randomizeConstraints`): [`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldInfo` | [`btSoftBodyWorldInfo`](Ammo.btSoftBodyWorldInfo.md) |
+| `vertices` | readonly `number`[] |
+| `triangles` | readonly `number`[] |
+| `ntriangles` | `number` |
+| `randomizeConstraints` | `boolean` |
+
+#### Returns
+
+[`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1083](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1083)
+
+___
+
+### CreateFromConvexHull
+
+▸ **CreateFromConvexHull**(`worldInfo`, `vertices`, `nvertices`, `randomizeConstraints`): [`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldInfo` | [`btSoftBodyWorldInfo`](Ammo.btSoftBodyWorldInfo.md) |
+| `vertices` | [`btVector3`](Ammo.btVector3.md) |
+| `nvertices` | `number` |
+| `randomizeConstraints` | `boolean` |
+
+#### Returns
+
+[`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1084](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1084)
diff --git a/docs/physics/classes/Ammo.btSoftBodyRigidBodyCollisionConfiguration.md b/docs/physics/classes/Ammo.btSoftBodyRigidBodyCollisionConfiguration.md
new file mode 100644
index 00000000..42cedca4
--- /dev/null
+++ b/docs/physics/classes/Ammo.btSoftBodyRigidBodyCollisionConfiguration.md
@@ -0,0 +1,37 @@
+# Class: btSoftBodyRigidBodyCollisionConfiguration
+
+[Ammo](../modules/Ammo.md).btSoftBodyRigidBodyCollisionConfiguration
+
+## Hierarchy
+
+- [`btDefaultCollisionConfiguration`](Ammo.btDefaultCollisionConfiguration.md)
+
+ ↳ **`btSoftBodyRigidBodyCollisionConfiguration`**
+
+### Constructors
+
+- [constructor](Ammo.btSoftBodyRigidBodyCollisionConfiguration.md#constructor)
+
+## Constructors
+
+### constructor
+
+• **new btSoftBodyRigidBodyCollisionConfiguration**(`info?`): [`btSoftBodyRigidBodyCollisionConfiguration`](Ammo.btSoftBodyRigidBodyCollisionConfiguration.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `info?` | [`btDefaultCollisionConstructionInfo`](Ammo.btDefaultCollisionConstructionInfo.md) |
+
+#### Returns
+
+[`btSoftBodyRigidBodyCollisionConfiguration`](Ammo.btSoftBodyRigidBodyCollisionConfiguration.md)
+
+#### Overrides
+
+[btDefaultCollisionConfiguration](Ammo.btDefaultCollisionConfiguration.md).[constructor](Ammo.btDefaultCollisionConfiguration.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1059](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1059)
diff --git a/docs/physics/classes/Ammo.btSoftBodySolver.md b/docs/physics/classes/Ammo.btSoftBodySolver.md
new file mode 100644
index 00000000..87864475
--- /dev/null
+++ b/docs/physics/classes/Ammo.btSoftBodySolver.md
@@ -0,0 +1,23 @@
+# Class: btSoftBodySolver
+
+[Ammo](../modules/Ammo.md).btSoftBodySolver
+
+## Hierarchy
+
+- **`btSoftBodySolver`**
+
+ ↳ [`btDefaultSoftBodySolver`](Ammo.btDefaultSoftBodySolver.md)
+
+### Constructors
+
+- [constructor](Ammo.btSoftBodySolver.md#constructor)
+
+## Constructors
+
+### constructor
+
+• **new btSoftBodySolver**(): [`btSoftBodySolver`](Ammo.btSoftBodySolver.md)
+
+#### Returns
+
+[`btSoftBodySolver`](Ammo.btSoftBodySolver.md)
diff --git a/docs/physics/classes/Ammo.btSoftBodyWorldInfo.md b/docs/physics/classes/Ammo.btSoftBodyWorldInfo.md
new file mode 100644
index 00000000..d0c1c758
--- /dev/null
+++ b/docs/physics/classes/Ammo.btSoftBodyWorldInfo.md
@@ -0,0 +1,312 @@
+# Class: btSoftBodyWorldInfo
+
+[Ammo](../modules/Ammo.md).btSoftBodyWorldInfo
+
+### Constructors
+
+- [constructor](Ammo.btSoftBodyWorldInfo.md#constructor)
+
+### Methods
+
+- [get\_air\_density](Ammo.btSoftBodyWorldInfo.md#get_air_density)
+- [set\_air\_density](Ammo.btSoftBodyWorldInfo.md#set_air_density)
+- [get\_water\_density](Ammo.btSoftBodyWorldInfo.md#get_water_density)
+- [set\_water\_density](Ammo.btSoftBodyWorldInfo.md#set_water_density)
+- [get\_water\_offset](Ammo.btSoftBodyWorldInfo.md#get_water_offset)
+- [set\_water\_offset](Ammo.btSoftBodyWorldInfo.md#set_water_offset)
+- [get\_m\_maxDisplacement](Ammo.btSoftBodyWorldInfo.md#get_m_maxdisplacement)
+- [set\_m\_maxDisplacement](Ammo.btSoftBodyWorldInfo.md#set_m_maxdisplacement)
+- [get\_water\_normal](Ammo.btSoftBodyWorldInfo.md#get_water_normal)
+- [set\_water\_normal](Ammo.btSoftBodyWorldInfo.md#set_water_normal)
+- [get\_m\_broadphase](Ammo.btSoftBodyWorldInfo.md#get_m_broadphase)
+- [set\_m\_broadphase](Ammo.btSoftBodyWorldInfo.md#set_m_broadphase)
+- [get\_m\_dispatcher](Ammo.btSoftBodyWorldInfo.md#get_m_dispatcher)
+- [set\_m\_dispatcher](Ammo.btSoftBodyWorldInfo.md#set_m_dispatcher)
+- [get\_m\_gravity](Ammo.btSoftBodyWorldInfo.md#get_m_gravity)
+- [set\_m\_gravity](Ammo.btSoftBodyWorldInfo.md#set_m_gravity)
+
+## Constructors
+
+### constructor
+
+• **new btSoftBodyWorldInfo**(): [`btSoftBodyWorldInfo`](Ammo.btSoftBodyWorldInfo.md)
+
+#### Returns
+
+[`btSoftBodyWorldInfo`](Ammo.btSoftBodyWorldInfo.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:885](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L885)
+
+## Methods
+
+### get\_air\_density
+
+▸ **get_air_density**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:886](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L886)
+
+___
+
+### set\_air\_density
+
+▸ **set_air_density**(`air_density`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `air_density` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:887](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L887)
+
+___
+
+### get\_water\_density
+
+▸ **get_water_density**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:888](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L888)
+
+___
+
+### set\_water\_density
+
+▸ **set_water_density**(`water_density`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `water_density` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:889](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L889)
+
+___
+
+### get\_water\_offset
+
+▸ **get_water_offset**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:890](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L890)
+
+___
+
+### set\_water\_offset
+
+▸ **set_water_offset**(`water_offset`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `water_offset` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:891](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L891)
+
+___
+
+### get\_m\_maxDisplacement
+
+▸ **get_m_maxDisplacement**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:892](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L892)
+
+___
+
+### set\_m\_maxDisplacement
+
+▸ **set_m_maxDisplacement**(`m_maxDisplacement`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_maxDisplacement` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:893](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L893)
+
+___
+
+### get\_water\_normal
+
+▸ **get_water_normal**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:894](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L894)
+
+___
+
+### set\_water\_normal
+
+▸ **set_water_normal**(`water_normal`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `water_normal` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:895](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L895)
+
+___
+
+### get\_m\_broadphase
+
+▸ **get_m_broadphase**(): [`btBroadphaseInterface`](Ammo.btBroadphaseInterface.md)
+
+#### Returns
+
+[`btBroadphaseInterface`](Ammo.btBroadphaseInterface.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:896](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L896)
+
+___
+
+### set\_m\_broadphase
+
+▸ **set_m_broadphase**(`m_broadphase`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_broadphase` | [`btBroadphaseInterface`](Ammo.btBroadphaseInterface.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:897](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L897)
+
+___
+
+### get\_m\_dispatcher
+
+▸ **get_m_dispatcher**(): [`btDispatcher`](Ammo.btDispatcher.md)
+
+#### Returns
+
+[`btDispatcher`](Ammo.btDispatcher.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:898](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L898)
+
+___
+
+### set\_m\_dispatcher
+
+▸ **set_m_dispatcher**(`m_dispatcher`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_dispatcher` | [`btDispatcher`](Ammo.btDispatcher.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:899](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L899)
+
+___
+
+### get\_m\_gravity
+
+▸ **get_m_gravity**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:900](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L900)
+
+___
+
+### set\_m\_gravity
+
+▸ **set_m_gravity**(`m_gravity`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_gravity` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:901](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L901)
diff --git a/docs/physics/classes/Ammo.btSoftRigidDynamicsWorld.md b/docs/physics/classes/Ammo.btSoftRigidDynamicsWorld.md
new file mode 100644
index 00000000..451db690
--- /dev/null
+++ b/docs/physics/classes/Ammo.btSoftRigidDynamicsWorld.md
@@ -0,0 +1,835 @@
+# Class: btSoftRigidDynamicsWorld
+
+[Ammo](../modules/Ammo.md).btSoftRigidDynamicsWorld
+
+## Hierarchy
+
+- [`btDiscreteDynamicsWorld`](Ammo.btDiscreteDynamicsWorld.md)
+
+ ↳ **`btSoftRigidDynamicsWorld`**
+
+### Constructors
+
+- [constructor](Ammo.btSoftRigidDynamicsWorld.md#constructor)
+
+### Methods
+
+- [getDispatcher](Ammo.btSoftRigidDynamicsWorld.md#getdispatcher)
+- [rayTest](Ammo.btSoftRigidDynamicsWorld.md#raytest)
+- [getPairCache](Ammo.btSoftRigidDynamicsWorld.md#getpaircache)
+- [getDispatchInfo](Ammo.btSoftRigidDynamicsWorld.md#getdispatchinfo)
+- [addCollisionObject](Ammo.btSoftRigidDynamicsWorld.md#addcollisionobject)
+- [getBroadphase](Ammo.btSoftRigidDynamicsWorld.md#getbroadphase)
+- [convexSweepTest](Ammo.btSoftRigidDynamicsWorld.md#convexsweeptest)
+- [contactPairTest](Ammo.btSoftRigidDynamicsWorld.md#contactpairtest)
+- [contactTest](Ammo.btSoftRigidDynamicsWorld.md#contacttest)
+- [updateSingleAabb](Ammo.btSoftRigidDynamicsWorld.md#updatesingleaabb)
+- [setDebugDrawer](Ammo.btSoftRigidDynamicsWorld.md#setdebugdrawer)
+- [getDebugDrawer](Ammo.btSoftRigidDynamicsWorld.md#getdebugdrawer)
+- [debugDrawWorld](Ammo.btSoftRigidDynamicsWorld.md#debugdrawworld)
+- [debugDrawObject](Ammo.btSoftRigidDynamicsWorld.md#debugdrawobject)
+- [addAction](Ammo.btSoftRigidDynamicsWorld.md#addaction)
+- [removeAction](Ammo.btSoftRigidDynamicsWorld.md#removeaction)
+- [getSolverInfo](Ammo.btSoftRigidDynamicsWorld.md#getsolverinfo)
+- [setInternalTickCallback](Ammo.btSoftRigidDynamicsWorld.md#setinternaltickcallback)
+- [setGravity](Ammo.btSoftRigidDynamicsWorld.md#setgravity)
+- [getGravity](Ammo.btSoftRigidDynamicsWorld.md#getgravity)
+- [addRigidBody](Ammo.btSoftRigidDynamicsWorld.md#addrigidbody)
+- [removeRigidBody](Ammo.btSoftRigidDynamicsWorld.md#removerigidbody)
+- [addConstraint](Ammo.btSoftRigidDynamicsWorld.md#addconstraint)
+- [removeConstraint](Ammo.btSoftRigidDynamicsWorld.md#removeconstraint)
+- [stepSimulation](Ammo.btSoftRigidDynamicsWorld.md#stepsimulation)
+- [setContactAddedCallback](Ammo.btSoftRigidDynamicsWorld.md#setcontactaddedcallback)
+- [setContactProcessedCallback](Ammo.btSoftRigidDynamicsWorld.md#setcontactprocessedcallback)
+- [setContactDestroyedCallback](Ammo.btSoftRigidDynamicsWorld.md#setcontactdestroyedcallback)
+- [addSoftBody](Ammo.btSoftRigidDynamicsWorld.md#addsoftbody)
+- [removeSoftBody](Ammo.btSoftRigidDynamicsWorld.md#removesoftbody)
+- [removeCollisionObject](Ammo.btSoftRigidDynamicsWorld.md#removecollisionobject)
+- [getWorldInfo](Ammo.btSoftRigidDynamicsWorld.md#getworldinfo)
+- [getSoftBodyArray](Ammo.btSoftRigidDynamicsWorld.md#getsoftbodyarray)
+
+## Constructors
+
+### constructor
+
+• **new btSoftRigidDynamicsWorld**(`dispatcher`, `pairCache`, `constraintSolver`, `collisionConfiguration`, `softBodySolver`): [`btSoftRigidDynamicsWorld`](Ammo.btSoftRigidDynamicsWorld.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `dispatcher` | [`btDispatcher`](Ammo.btDispatcher.md) |
+| `pairCache` | [`btBroadphaseInterface`](Ammo.btBroadphaseInterface.md) |
+| `constraintSolver` | [`btConstraintSolver`](Ammo.btConstraintSolver.md) |
+| `collisionConfiguration` | [`btCollisionConfiguration`](Ammo.btCollisionConfiguration.md) |
+| `softBodySolver` | [`btSoftBodySolver`](Ammo.btSoftBodySolver.md) |
+
+#### Returns
+
+[`btSoftRigidDynamicsWorld`](Ammo.btSoftRigidDynamicsWorld.md)
+
+#### Overrides
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[constructor](Ammo.btDiscreteDynamicsWorld.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1070](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1070)
+
+## Methods
+
+### getDispatcher
+
+▸ **getDispatcher**(): [`btDispatcher`](Ammo.btDispatcher.md)
+
+#### Returns
+
+[`btDispatcher`](Ammo.btDispatcher.md)
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[getDispatcher](Ammo.btDiscreteDynamicsWorld.md#getdispatcher)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:646](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L646)
+
+___
+
+### rayTest
+
+▸ **rayTest**(`rayFromWorld`, `rayToWorld`, `resultCallback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rayFromWorld` | [`btVector3`](Ammo.btVector3.md) |
+| `rayToWorld` | [`btVector3`](Ammo.btVector3.md) |
+| `resultCallback` | [`RayResultCallback`](Ammo.RayResultCallback.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[rayTest](Ammo.btDiscreteDynamicsWorld.md#raytest)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:647](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L647)
+
+___
+
+### getPairCache
+
+▸ **getPairCache**(): [`btOverlappingPairCache`](Ammo.btOverlappingPairCache.md)
+
+#### Returns
+
+[`btOverlappingPairCache`](Ammo.btOverlappingPairCache.md)
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[getPairCache](Ammo.btDiscreteDynamicsWorld.md#getpaircache)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:648](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L648)
+
+___
+
+### getDispatchInfo
+
+▸ **getDispatchInfo**(): [`btDispatcherInfo`](Ammo.btDispatcherInfo.md)
+
+#### Returns
+
+[`btDispatcherInfo`](Ammo.btDispatcherInfo.md)
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[getDispatchInfo](Ammo.btDiscreteDynamicsWorld.md#getdispatchinfo)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:649](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L649)
+
+___
+
+### addCollisionObject
+
+▸ **addCollisionObject**(`collisionObject`, `collisionFilterGroup?`, `collisionFilterMask?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionObject` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+| `collisionFilterGroup?` | `number` |
+| `collisionFilterMask?` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[addCollisionObject](Ammo.btDiscreteDynamicsWorld.md#addcollisionobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:650](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L650)
+
+___
+
+### getBroadphase
+
+▸ **getBroadphase**(): [`btBroadphaseInterface`](Ammo.btBroadphaseInterface.md)
+
+#### Returns
+
+[`btBroadphaseInterface`](Ammo.btBroadphaseInterface.md)
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[getBroadphase](Ammo.btDiscreteDynamicsWorld.md#getbroadphase)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:652](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L652)
+
+___
+
+### convexSweepTest
+
+▸ **convexSweepTest**(`castShape`, `from`, `to`, `resultCallback`, `allowedCcdPenetration`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `castShape` | [`btConvexShape`](Ammo.btConvexShape.md) |
+| `from` | [`btTransform`](Ammo.btTransform.md) |
+| `to` | [`btTransform`](Ammo.btTransform.md) |
+| `resultCallback` | [`ConvexResultCallback`](Ammo.ConvexResultCallback.md) |
+| `allowedCcdPenetration` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[convexSweepTest](Ammo.btDiscreteDynamicsWorld.md#convexsweeptest)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:653](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L653)
+
+___
+
+### contactPairTest
+
+▸ **contactPairTest**(`colObjA`, `colObjB`, `resultCallback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `colObjA` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+| `colObjB` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+| `resultCallback` | [`ContactResultCallback`](Ammo.ContactResultCallback.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[contactPairTest](Ammo.btDiscreteDynamicsWorld.md#contactpairtest)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:654](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L654)
+
+___
+
+### contactTest
+
+▸ **contactTest**(`colObj`, `resultCallback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `colObj` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+| `resultCallback` | [`ContactResultCallback`](Ammo.ContactResultCallback.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[contactTest](Ammo.btDiscreteDynamicsWorld.md#contacttest)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:655](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L655)
+
+___
+
+### updateSingleAabb
+
+▸ **updateSingleAabb**(`colObj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `colObj` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[updateSingleAabb](Ammo.btDiscreteDynamicsWorld.md#updatesingleaabb)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:656](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L656)
+
+___
+
+### setDebugDrawer
+
+▸ **setDebugDrawer**(`debugDrawer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `debugDrawer` | [`btIDebugDraw`](Ammo.btIDebugDraw.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[setDebugDrawer](Ammo.btDiscreteDynamicsWorld.md#setdebugdrawer)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:657](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L657)
+
+___
+
+### getDebugDrawer
+
+▸ **getDebugDrawer**(): [`btIDebugDraw`](Ammo.btIDebugDraw.md)
+
+#### Returns
+
+[`btIDebugDraw`](Ammo.btIDebugDraw.md)
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[getDebugDrawer](Ammo.btDiscreteDynamicsWorld.md#getdebugdrawer)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:658](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L658)
+
+___
+
+### debugDrawWorld
+
+▸ **debugDrawWorld**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[debugDrawWorld](Ammo.btDiscreteDynamicsWorld.md#debugdrawworld)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:659](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L659)
+
+___
+
+### debugDrawObject
+
+▸ **debugDrawObject**(`worldTransform`, `shape`, `color`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `worldTransform` | [`btTransform`](Ammo.btTransform.md) |
+| `shape` | [`btCollisionShape`](Ammo.btCollisionShape.md) |
+| `color` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[debugDrawObject](Ammo.btDiscreteDynamicsWorld.md#debugdrawobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:660](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L660)
+
+___
+
+### addAction
+
+▸ **addAction**(`action`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `action` | [`btActionInterface`](Ammo.btActionInterface.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[addAction](Ammo.btDiscreteDynamicsWorld.md#addaction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:672](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L672)
+
+___
+
+### removeAction
+
+▸ **removeAction**(`action`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `action` | [`btActionInterface`](Ammo.btActionInterface.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[removeAction](Ammo.btDiscreteDynamicsWorld.md#removeaction)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:673](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L673)
+
+___
+
+### getSolverInfo
+
+▸ **getSolverInfo**(): [`btContactSolverInfo`](Ammo.btContactSolverInfo.md)
+
+#### Returns
+
+[`btContactSolverInfo`](Ammo.btContactSolverInfo.md)
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[getSolverInfo](Ammo.btDiscreteDynamicsWorld.md#getsolverinfo)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:674](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L674)
+
+___
+
+### setInternalTickCallback
+
+▸ **setInternalTickCallback**(`cb`, `worldUserInfo?`, `isPreTick?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `cb` | [`btInternalTickCallback`](../types/Ammo.btInternalTickCallback.md) |
+| `worldUserInfo?` | `unknown` |
+| `isPreTick?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[setInternalTickCallback](Ammo.btDiscreteDynamicsWorld.md#setinternaltickcallback)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:675](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L675)
+
+___
+
+### setGravity
+
+▸ **setGravity**(`gravity`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `gravity` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[setGravity](Ammo.btDiscreteDynamicsWorld.md#setgravity)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:679](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L679)
+
+___
+
+### getGravity
+
+▸ **getGravity**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[getGravity](Ammo.btDiscreteDynamicsWorld.md#getgravity)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:680](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L680)
+
+___
+
+### addRigidBody
+
+▸ **addRigidBody**(`body`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `body` | [`btRigidBody`](Ammo.btRigidBody.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[addRigidBody](Ammo.btDiscreteDynamicsWorld.md#addrigidbody)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:681](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L681)
+
+▸ **addRigidBody**(`body`, `group`, `mask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `body` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `group` | `number` |
+| `mask` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[addRigidBody](Ammo.btDiscreteDynamicsWorld.md#addrigidbody)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:682](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L682)
+
+___
+
+### removeRigidBody
+
+▸ **removeRigidBody**(`body`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `body` | [`btRigidBody`](Ammo.btRigidBody.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[removeRigidBody](Ammo.btDiscreteDynamicsWorld.md#removerigidbody)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:683](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L683)
+
+___
+
+### addConstraint
+
+▸ **addConstraint**(`constraint`, `disableCollisionsBetweenLinkedBodies?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `constraint` | [`btTypedConstraint`](Ammo.btTypedConstraint.md) |
+| `disableCollisionsBetweenLinkedBodies?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[addConstraint](Ammo.btDiscreteDynamicsWorld.md#addconstraint)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:684](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L684)
+
+___
+
+### removeConstraint
+
+▸ **removeConstraint**(`constraint`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `constraint` | [`btTypedConstraint`](Ammo.btTypedConstraint.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[removeConstraint](Ammo.btDiscreteDynamicsWorld.md#removeconstraint)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:685](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L685)
+
+___
+
+### stepSimulation
+
+▸ **stepSimulation**(`timeStep`, `maxSubSteps?`, `fixedTimeStep?`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `timeStep` | `number` |
+| `maxSubSteps?` | `number` |
+| `fixedTimeStep?` | `number` |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[stepSimulation](Ammo.btDiscreteDynamicsWorld.md#stepsimulation)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:686](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L686)
+
+___
+
+### setContactAddedCallback
+
+▸ **setContactAddedCallback**(`funcpointer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `funcpointer` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[setContactAddedCallback](Ammo.btDiscreteDynamicsWorld.md#setcontactaddedcallback)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:687](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L687)
+
+___
+
+### setContactProcessedCallback
+
+▸ **setContactProcessedCallback**(`funcpointer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `funcpointer` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[setContactProcessedCallback](Ammo.btDiscreteDynamicsWorld.md#setcontactprocessedcallback)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:688](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L688)
+
+___
+
+### setContactDestroyedCallback
+
+▸ **setContactDestroyedCallback**(`funcpointer`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `funcpointer` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[setContactDestroyedCallback](Ammo.btDiscreteDynamicsWorld.md#setcontactdestroyedcallback)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:689](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L689)
+
+___
+
+### addSoftBody
+
+▸ **addSoftBody**(`body`, `collisionFilterGroup`, `collisionFilterMask`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `body` | [`btSoftBody`](Ammo.btSoftBody.md) |
+| `collisionFilterGroup` | `number` |
+| `collisionFilterMask` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1071](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1071)
+
+___
+
+### removeSoftBody
+
+▸ **removeSoftBody**(`body`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `body` | [`btSoftBody`](Ammo.btSoftBody.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1072](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1072)
+
+___
+
+### removeCollisionObject
+
+▸ **removeCollisionObject**(`collisionObject`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `collisionObject` | [`btCollisionObject`](Ammo.btCollisionObject.md) |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[btDiscreteDynamicsWorld](Ammo.btDiscreteDynamicsWorld.md).[removeCollisionObject](Ammo.btDiscreteDynamicsWorld.md#removecollisionobject)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1073](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1073)
+
+___
+
+### getWorldInfo
+
+▸ **getWorldInfo**(): [`btSoftBodyWorldInfo`](Ammo.btSoftBodyWorldInfo.md)
+
+#### Returns
+
+[`btSoftBodyWorldInfo`](Ammo.btSoftBodyWorldInfo.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1074](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1074)
+
+___
+
+### getSoftBodyArray
+
+▸ **getSoftBodyArray**(): [`btSoftBodyArray`](Ammo.btSoftBodyArray.md)
+
+#### Returns
+
+[`btSoftBodyArray`](Ammo.btSoftBodyArray.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:1075](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L1075)
diff --git a/docs/physics/classes/Ammo.btSphereShape.md b/docs/physics/classes/Ammo.btSphereShape.md
new file mode 100644
index 00000000..0fcfe023
--- /dev/null
+++ b/docs/physics/classes/Ammo.btSphereShape.md
@@ -0,0 +1,154 @@
+# Class: btSphereShape
+
+[Ammo](../modules/Ammo.md).btSphereShape
+
+## Hierarchy
+
+- [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+ ↳ **`btSphereShape`**
+
+### Constructors
+
+- [constructor](Ammo.btSphereShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btSphereShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btSphereShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btSphereShape.md#calculatelocalinertia)
+- [setMargin](Ammo.btSphereShape.md#setmargin)
+- [getMargin](Ammo.btSphereShape.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btSphereShape**(`radius`): [`btSphereShape`](Ammo.btSphereShape.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `radius` | `number` |
+
+#### Returns
+
+[`btSphereShape`](Ammo.btSphereShape.md)
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[constructor](Ammo.btCollisionShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:322](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L322)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setLocalScaling](Ammo.btCollisionShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getLocalScaling](Ammo.btCollisionShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btCollisionShape](Ammo.btCollisionShape.md).[calculateLocalInertia](Ammo.btCollisionShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[setMargin](Ammo.btCollisionShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:323](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L323)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Overrides
+
+[btCollisionShape](Ammo.btCollisionShape.md).[getMargin](Ammo.btCollisionShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:324](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L324)
diff --git a/docs/physics/classes/Ammo.btStaticPlaneShape.md b/docs/physics/classes/Ammo.btStaticPlaneShape.md
new file mode 100644
index 00000000..7efae832
--- /dev/null
+++ b/docs/physics/classes/Ammo.btStaticPlaneShape.md
@@ -0,0 +1,155 @@
+# Class: btStaticPlaneShape
+
+[Ammo](../modules/Ammo.md).btStaticPlaneShape
+
+## Hierarchy
+
+- [`btConcaveShape`](Ammo.btConcaveShape.md)
+
+ ↳ **`btStaticPlaneShape`**
+
+### Constructors
+
+- [constructor](Ammo.btStaticPlaneShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btStaticPlaneShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btStaticPlaneShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btStaticPlaneShape.md#calculatelocalinertia)
+- [setMargin](Ammo.btStaticPlaneShape.md#setmargin)
+- [getMargin](Ammo.btStaticPlaneShape.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btStaticPlaneShape**(`planeNormal`, `planeConstant`): [`btStaticPlaneShape`](Ammo.btStaticPlaneShape.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `planeNormal` | [`btVector3`](Ammo.btVector3.md) |
+| `planeConstant` | `number` |
+
+#### Returns
+
+[`btStaticPlaneShape`](Ammo.btStaticPlaneShape.md)
+
+#### Overrides
+
+[btConcaveShape](Ammo.btConcaveShape.md).[constructor](Ammo.btConcaveShape.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:413](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L413)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[setLocalScaling](Ammo.btConcaveShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[getLocalScaling](Ammo.btConcaveShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[calculateLocalInertia](Ammo.btConcaveShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[setMargin](Ammo.btConcaveShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:276](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L276)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[getMargin](Ammo.btConcaveShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:277](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L277)
diff --git a/docs/physics/classes/Ammo.btStridingMeshInterface.md b/docs/physics/classes/Ammo.btStridingMeshInterface.md
new file mode 100644
index 00000000..b7f60fa7
--- /dev/null
+++ b/docs/physics/classes/Ammo.btStridingMeshInterface.md
@@ -0,0 +1,47 @@
+# Class: btStridingMeshInterface
+
+[Ammo](../modules/Ammo.md).btStridingMeshInterface
+
+## Hierarchy
+
+- **`btStridingMeshInterface`**
+
+ ↳ [`btTriangleMesh`](Ammo.btTriangleMesh.md)
+
+### Constructors
+
+- [constructor](Ammo.btStridingMeshInterface.md#constructor)
+
+### Methods
+
+- [setScaling](Ammo.btStridingMeshInterface.md#setscaling)
+
+## Constructors
+
+### constructor
+
+• **new btStridingMeshInterface**(): [`btStridingMeshInterface`](Ammo.btStridingMeshInterface.md)
+
+#### Returns
+
+[`btStridingMeshInterface`](Ammo.btStridingMeshInterface.md)
+
+## Methods
+
+### setScaling
+
+▸ **setScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:390](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L390)
diff --git a/docs/physics/classes/Ammo.btTransform.md b/docs/physics/classes/Ammo.btTransform.md
new file mode 100644
index 00000000..fe5ddbfb
--- /dev/null
+++ b/docs/physics/classes/Ammo.btTransform.md
@@ -0,0 +1,200 @@
+# Class: btTransform
+
+[Ammo](../modules/Ammo.md).btTransform
+
+### Constructors
+
+- [constructor](Ammo.btTransform.md#constructor)
+
+### Methods
+
+- [setIdentity](Ammo.btTransform.md#setidentity)
+- [setOrigin](Ammo.btTransform.md#setorigin)
+- [setRotation](Ammo.btTransform.md#setrotation)
+- [getOrigin](Ammo.btTransform.md#getorigin)
+- [getRotation](Ammo.btTransform.md#getrotation)
+- [getBasis](Ammo.btTransform.md#getbasis)
+- [setFromOpenGLMatrix](Ammo.btTransform.md#setfromopenglmatrix)
+- [inverse](Ammo.btTransform.md#inverse)
+- [op\_mul](Ammo.btTransform.md#op_mul)
+
+## Constructors
+
+### constructor
+
+• **new btTransform**(): [`btTransform`](Ammo.btTransform.md)
+
+#### Returns
+
+[`btTransform`](Ammo.btTransform.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:106](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L106)
+
+• **new btTransform**(`q`, `v`): [`btTransform`](Ammo.btTransform.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `q` | [`btQuaternion`](Ammo.btQuaternion.md) |
+| `v` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`btTransform`](Ammo.btTransform.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:107](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L107)
+
+## Methods
+
+### setIdentity
+
+▸ **setIdentity**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:108](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L108)
+
+___
+
+### setOrigin
+
+▸ **setOrigin**(`origin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `origin` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:109](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L109)
+
+___
+
+### setRotation
+
+▸ **setRotation**(`rotation`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `rotation` | [`btQuaternion`](Ammo.btQuaternion.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:110](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L110)
+
+___
+
+### getOrigin
+
+▸ **getOrigin**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:111](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L111)
+
+___
+
+### getRotation
+
+▸ **getRotation**(): [`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Returns
+
+[`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:112](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L112)
+
+___
+
+### getBasis
+
+▸ **getBasis**(): [`btMatrix3x3`](Ammo.btMatrix3x3.md)
+
+#### Returns
+
+[`btMatrix3x3`](Ammo.btMatrix3x3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:113](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L113)
+
+___
+
+### setFromOpenGLMatrix
+
+▸ **setFromOpenGLMatrix**(`m`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m` | readonly `number`[] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:114](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L114)
+
+___
+
+### inverse
+
+▸ **inverse**(): [`btTransform`](Ammo.btTransform.md)
+
+#### Returns
+
+[`btTransform`](Ammo.btTransform.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:115](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L115)
+
+___
+
+### op\_mul
+
+▸ **op_mul**(`t`): [`btTransform`](Ammo.btTransform.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `t` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+[`btTransform`](Ammo.btTransform.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:116](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L116)
diff --git a/docs/physics/classes/Ammo.btTriangleMesh.md b/docs/physics/classes/Ammo.btTriangleMesh.md
new file mode 100644
index 00000000..ccb751a4
--- /dev/null
+++ b/docs/physics/classes/Ammo.btTriangleMesh.md
@@ -0,0 +1,148 @@
+# Class: btTriangleMesh
+
+[Ammo](../modules/Ammo.md).btTriangleMesh
+
+## Hierarchy
+
+- [`btStridingMeshInterface`](Ammo.btStridingMeshInterface.md)
+
+ ↳ **`btTriangleMesh`**
+
+### Constructors
+
+- [constructor](Ammo.btTriangleMesh.md#constructor)
+
+### Methods
+
+- [setScaling](Ammo.btTriangleMesh.md#setscaling)
+- [addTriangle](Ammo.btTriangleMesh.md#addtriangle)
+- [findOrAddVertex](Ammo.btTriangleMesh.md#findoraddvertex)
+- [addIndex](Ammo.btTriangleMesh.md#addindex)
+- [getIndexedMeshArray](Ammo.btTriangleMesh.md#getindexedmesharray)
+
+## Constructors
+
+### constructor
+
+• **new btTriangleMesh**(`use32bitIndices?`, `use4componentVertices?`): [`btTriangleMesh`](Ammo.btTriangleMesh.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `use32bitIndices?` | `boolean` |
+| `use4componentVertices?` | `boolean` |
+
+#### Returns
+
+[`btTriangleMesh`](Ammo.btTriangleMesh.md)
+
+#### Overrides
+
+[btStridingMeshInterface](Ammo.btStridingMeshInterface.md).[constructor](Ammo.btStridingMeshInterface.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:401](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L401)
+
+## Methods
+
+### setScaling
+
+▸ **setScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btStridingMeshInterface](Ammo.btStridingMeshInterface.md).[setScaling](Ammo.btStridingMeshInterface.md#setscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:390](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L390)
+
+___
+
+### addTriangle
+
+▸ **addTriangle**(`vertex0`, `vertex1`, `vertex2`, `removeDuplicateVertices?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `vertex0` | [`btVector3`](Ammo.btVector3.md) |
+| `vertex1` | [`btVector3`](Ammo.btVector3.md) |
+| `vertex2` | [`btVector3`](Ammo.btVector3.md) |
+| `removeDuplicateVertices?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:402](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L402)
+
+___
+
+### findOrAddVertex
+
+▸ **findOrAddVertex**(`vertex`, `removeDuplicateVertices`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `vertex` | [`btVector3`](Ammo.btVector3.md) |
+| `removeDuplicateVertices` | `boolean` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:403](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L403)
+
+___
+
+### addIndex
+
+▸ **addIndex**(`index`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `index` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:404](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L404)
+
+___
+
+### getIndexedMeshArray
+
+▸ **getIndexedMeshArray**(): [`btIndexedMeshArray`](Ammo.btIndexedMeshArray.md)
+
+#### Returns
+
+[`btIndexedMeshArray`](Ammo.btIndexedMeshArray.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:405](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L405)
diff --git a/docs/physics/classes/Ammo.btTriangleMeshShape.md b/docs/physics/classes/Ammo.btTriangleMeshShape.md
new file mode 100644
index 00000000..8db1f886
--- /dev/null
+++ b/docs/physics/classes/Ammo.btTriangleMeshShape.md
@@ -0,0 +1,148 @@
+# Class: btTriangleMeshShape
+
+[Ammo](../modules/Ammo.md).btTriangleMeshShape
+
+## Hierarchy
+
+- [`btConcaveShape`](Ammo.btConcaveShape.md)
+
+ ↳ **`btTriangleMeshShape`**
+
+ ↳↳ [`btBvhTriangleMeshShape`](Ammo.btBvhTriangleMeshShape.md)
+
+ ↳↳ [`btGImpactMeshShape`](Ammo.btGImpactMeshShape.md)
+
+### Constructors
+
+- [constructor](Ammo.btTriangleMeshShape.md#constructor)
+
+### Methods
+
+- [setLocalScaling](Ammo.btTriangleMeshShape.md#setlocalscaling)
+- [getLocalScaling](Ammo.btTriangleMeshShape.md#getlocalscaling)
+- [calculateLocalInertia](Ammo.btTriangleMeshShape.md#calculatelocalinertia)
+- [setMargin](Ammo.btTriangleMeshShape.md#setmargin)
+- [getMargin](Ammo.btTriangleMeshShape.md#getmargin)
+
+## Constructors
+
+### constructor
+
+• **new btTriangleMeshShape**(): [`btTriangleMeshShape`](Ammo.btTriangleMeshShape.md)
+
+#### Returns
+
+[`btTriangleMeshShape`](Ammo.btTriangleMeshShape.md)
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[constructor](Ammo.btConcaveShape.md#constructor)
+
+## Methods
+
+### setLocalScaling
+
+▸ **setLocalScaling**(`scaling`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `scaling` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[setLocalScaling](Ammo.btConcaveShape.md#setlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L273)
+
+___
+
+### getLocalScaling
+
+▸ **getLocalScaling**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[getLocalScaling](Ammo.btConcaveShape.md#getlocalscaling)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:274](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L274)
+
+___
+
+### calculateLocalInertia
+
+▸ **calculateLocalInertia**(`mass`, `inertia`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `mass` | `number` |
+| `inertia` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[calculateLocalInertia](Ammo.btConcaveShape.md#calculatelocalinertia)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:275](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L275)
+
+___
+
+### setMargin
+
+▸ **setMargin**(`margin`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `margin` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[setMargin](Ammo.btConcaveShape.md#setmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:276](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L276)
+
+___
+
+### getMargin
+
+▸ **getMargin**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btConcaveShape](Ammo.btConcaveShape.md).[getMargin](Ammo.btConcaveShape.md#getmargin)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:277](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L277)
diff --git a/docs/physics/classes/Ammo.btTypedConstraint.md b/docs/physics/classes/Ammo.btTypedConstraint.md
new file mode 100644
index 00000000..e7c6518a
--- /dev/null
+++ b/docs/physics/classes/Ammo.btTypedConstraint.md
@@ -0,0 +1,138 @@
+# Class: btTypedConstraint
+
+[Ammo](../modules/Ammo.md).btTypedConstraint
+
+## Hierarchy
+
+- **`btTypedConstraint`**
+
+ ↳ [`btPoint2PointConstraint`](Ammo.btPoint2PointConstraint.md)
+
+ ↳ [`btGeneric6DofConstraint`](Ammo.btGeneric6DofConstraint.md)
+
+ ↳ [`btConeTwistConstraint`](Ammo.btConeTwistConstraint.md)
+
+ ↳ [`btHingeConstraint`](Ammo.btHingeConstraint.md)
+
+ ↳ [`btSliderConstraint`](Ammo.btSliderConstraint.md)
+
+ ↳ [`btFixedConstraint`](Ammo.btFixedConstraint.md)
+
+### Constructors
+
+- [constructor](Ammo.btTypedConstraint.md#constructor)
+
+### Methods
+
+- [enableFeedback](Ammo.btTypedConstraint.md#enablefeedback)
+- [getBreakingImpulseThreshold](Ammo.btTypedConstraint.md#getbreakingimpulsethreshold)
+- [setBreakingImpulseThreshold](Ammo.btTypedConstraint.md#setbreakingimpulsethreshold)
+- [getParam](Ammo.btTypedConstraint.md#getparam)
+- [setParam](Ammo.btTypedConstraint.md#setparam)
+
+## Constructors
+
+### constructor
+
+• **new btTypedConstraint**(): [`btTypedConstraint`](Ammo.btTypedConstraint.md)
+
+#### Returns
+
+[`btTypedConstraint`](Ammo.btTypedConstraint.md)
+
+## Methods
+
+### enableFeedback
+
+▸ **enableFeedback**(`needsFeedback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `needsFeedback` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:542](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L542)
+
+___
+
+### getBreakingImpulseThreshold
+
+▸ **getBreakingImpulseThreshold**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:543](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L543)
+
+___
+
+### setBreakingImpulseThreshold
+
+▸ **setBreakingImpulseThreshold**(`threshold`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `threshold` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:544](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L544)
+
+___
+
+### getParam
+
+▸ **getParam**(`num`, `axis`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `num` | `number` |
+| `axis` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:545](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L545)
+
+___
+
+### setParam
+
+▸ **setParam**(`num`, `value`, `axis`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `num` | `number` |
+| `value` | `number` |
+| `axis` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:546](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L546)
diff --git a/docs/physics/classes/Ammo.btVector3.md b/docs/physics/classes/Ammo.btVector3.md
new file mode 100644
index 00000000..520f43ee
--- /dev/null
+++ b/docs/physics/classes/Ammo.btVector3.md
@@ -0,0 +1,315 @@
+# Class: btVector3
+
+[Ammo](../modules/Ammo.md).btVector3
+
+## Hierarchy
+
+- **`btVector3`**
+
+ ↳ [`btVector4`](Ammo.btVector4.md)
+
+### Constructors
+
+- [constructor](Ammo.btVector3.md#constructor)
+
+### Methods
+
+- [length](Ammo.btVector3.md#length)
+- [x](Ammo.btVector3.md#x)
+- [y](Ammo.btVector3.md#y)
+- [z](Ammo.btVector3.md#z)
+- [setX](Ammo.btVector3.md#setx)
+- [setY](Ammo.btVector3.md#sety)
+- [setZ](Ammo.btVector3.md#setz)
+- [setValue](Ammo.btVector3.md#setvalue)
+- [normalize](Ammo.btVector3.md#normalize)
+- [rotate](Ammo.btVector3.md#rotate)
+- [dot](Ammo.btVector3.md#dot)
+- [op\_mul](Ammo.btVector3.md#op_mul)
+- [op\_add](Ammo.btVector3.md#op_add)
+- [op\_sub](Ammo.btVector3.md#op_sub)
+
+## Constructors
+
+### constructor
+
+• **new btVector3**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:44](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L44)
+
+• **new btVector3**(`x`, `y`, `z`): [`btVector3`](Ammo.btVector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `z` | `number` |
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:45](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L45)
+
+## Methods
+
+### length
+
+▸ **length**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:46](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L46)
+
+___
+
+### x
+
+▸ **x**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:47](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L47)
+
+___
+
+### y
+
+▸ **y**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:48](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L48)
+
+___
+
+### z
+
+▸ **z**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:49](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L49)
+
+___
+
+### setX
+
+▸ **setX**(`x`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:50](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L50)
+
+___
+
+### setY
+
+▸ **setY**(`y`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `y` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:51](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L51)
+
+___
+
+### setZ
+
+▸ **setZ**(`z`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `z` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:52](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L52)
+
+___
+
+### setValue
+
+▸ **setValue**(`x`, `y`, `z`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `z` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:53](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L53)
+
+___
+
+### normalize
+
+▸ **normalize**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:54](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L54)
+
+___
+
+### rotate
+
+▸ **rotate**(`wAxis`, `angle`): [`btVector3`](Ammo.btVector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `wAxis` | [`btVector3`](Ammo.btVector3.md) |
+| `angle` | `number` |
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:55](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L55)
+
+___
+
+### dot
+
+▸ **dot**(`v`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:56](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L56)
+
+___
+
+### op\_mul
+
+▸ **op_mul**(`x`): [`btVector3`](Ammo.btVector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:57](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L57)
+
+___
+
+### op\_add
+
+▸ **op_add**(`v`): [`btVector3`](Ammo.btVector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:58](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L58)
+
+___
+
+### op\_sub
+
+▸ **op_sub**(`v`): [`btVector3`](Ammo.btVector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:59](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L59)
diff --git a/docs/physics/classes/Ammo.btVector3Array.md b/docs/physics/classes/Ammo.btVector3Array.md
new file mode 100644
index 00000000..e3786b46
--- /dev/null
+++ b/docs/physics/classes/Ammo.btVector3Array.md
@@ -0,0 +1,56 @@
+# Class: btVector3Array
+
+[Ammo](../modules/Ammo.md).btVector3Array
+
+### Constructors
+
+- [constructor](Ammo.btVector3Array.md#constructor)
+
+### Methods
+
+- [size](Ammo.btVector3Array.md#size)
+- [at](Ammo.btVector3Array.md#at)
+
+## Constructors
+
+### constructor
+
+• **new btVector3Array**(): [`btVector3Array`](Ammo.btVector3Array.md)
+
+#### Returns
+
+[`btVector3Array`](Ammo.btVector3Array.md)
+
+## Methods
+
+### size
+
+▸ **size**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:349](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L349)
+
+___
+
+### at
+
+▸ **at**(`n`): [`btVector3`](Ammo.btVector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `n` | `number` |
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:350](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L350)
diff --git a/docs/physics/classes/Ammo.btVector4.md b/docs/physics/classes/Ammo.btVector4.md
new file mode 100644
index 00000000..c4017d47
--- /dev/null
+++ b/docs/physics/classes/Ammo.btVector4.md
@@ -0,0 +1,418 @@
+# Class: btVector4
+
+[Ammo](../modules/Ammo.md).btVector4
+
+## Hierarchy
+
+- [`btVector3`](Ammo.btVector3.md)
+
+ ↳ **`btVector4`**
+
+### Constructors
+
+- [constructor](Ammo.btVector4.md#constructor)
+
+### Methods
+
+- [length](Ammo.btVector4.md#length)
+- [x](Ammo.btVector4.md#x)
+- [y](Ammo.btVector4.md#y)
+- [z](Ammo.btVector4.md#z)
+- [setX](Ammo.btVector4.md#setx)
+- [setY](Ammo.btVector4.md#sety)
+- [setZ](Ammo.btVector4.md#setz)
+- [normalize](Ammo.btVector4.md#normalize)
+- [rotate](Ammo.btVector4.md#rotate)
+- [dot](Ammo.btVector4.md#dot)
+- [op\_mul](Ammo.btVector4.md#op_mul)
+- [op\_add](Ammo.btVector4.md#op_add)
+- [op\_sub](Ammo.btVector4.md#op_sub)
+- [w](Ammo.btVector4.md#w)
+- [setValue](Ammo.btVector4.md#setvalue)
+
+## Constructors
+
+### constructor
+
+• **new btVector4**(): [`btVector4`](Ammo.btVector4.md)
+
+#### Returns
+
+[`btVector4`](Ammo.btVector4.md)
+
+#### Overrides
+
+[btVector3](Ammo.btVector3.md).[constructor](Ammo.btVector3.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:62](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L62)
+
+• **new btVector4**(`x`, `y`, `z`, `w`): [`btVector4`](Ammo.btVector4.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `z` | `number` |
+| `w` | `number` |
+
+#### Returns
+
+[`btVector4`](Ammo.btVector4.md)
+
+#### Overrides
+
+[btVector3](Ammo.btVector3.md).[constructor](Ammo.btVector3.md#constructor)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:63](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L63)
+
+## Methods
+
+### length
+
+▸ **length**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btVector3](Ammo.btVector3.md).[length](Ammo.btVector3.md#length)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:46](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L46)
+
+___
+
+### x
+
+▸ **x**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btVector3](Ammo.btVector3.md).[x](Ammo.btVector3.md#x)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:47](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L47)
+
+___
+
+### y
+
+▸ **y**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btVector3](Ammo.btVector3.md).[y](Ammo.btVector3.md#y)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:48](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L48)
+
+___
+
+### z
+
+▸ **z**(): `number`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btVector3](Ammo.btVector3.md).[z](Ammo.btVector3.md#z)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:49](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L49)
+
+___
+
+### setX
+
+▸ **setX**(`x`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btVector3](Ammo.btVector3.md).[setX](Ammo.btVector3.md#setx)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:50](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L50)
+
+___
+
+### setY
+
+▸ **setY**(`y`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `y` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btVector3](Ammo.btVector3.md).[setY](Ammo.btVector3.md#sety)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:51](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L51)
+
+___
+
+### setZ
+
+▸ **setZ**(`z`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `z` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btVector3](Ammo.btVector3.md).[setZ](Ammo.btVector3.md#setz)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:52](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L52)
+
+___
+
+### normalize
+
+▸ **normalize**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+[btVector3](Ammo.btVector3.md).[normalize](Ammo.btVector3.md#normalize)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:54](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L54)
+
+___
+
+### rotate
+
+▸ **rotate**(`wAxis`, `angle`): [`btVector3`](Ammo.btVector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `wAxis` | [`btVector3`](Ammo.btVector3.md) |
+| `angle` | `number` |
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btVector3](Ammo.btVector3.md).[rotate](Ammo.btVector3.md#rotate)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:55](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L55)
+
+___
+
+### dot
+
+▸ **dot**(`v`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+[btVector3](Ammo.btVector3.md).[dot](Ammo.btVector3.md#dot)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:56](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L56)
+
+___
+
+### op\_mul
+
+▸ **op_mul**(`x`): [`btVector3`](Ammo.btVector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btVector3](Ammo.btVector3.md).[op_mul](Ammo.btVector3.md#op_mul)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:57](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L57)
+
+___
+
+### op\_add
+
+▸ **op_add**(`v`): [`btVector3`](Ammo.btVector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btVector3](Ammo.btVector3.md).[op_add](Ammo.btVector3.md#op_add)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:58](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L58)
+
+___
+
+### op\_sub
+
+▸ **op_sub**(`v`): [`btVector3`](Ammo.btVector3.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `v` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Inherited from
+
+[btVector3](Ammo.btVector3.md).[op_sub](Ammo.btVector3.md#op_sub)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:59](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L59)
+
+___
+
+### w
+
+▸ **w**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:64](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L64)
+
+___
+
+### setValue
+
+▸ **setValue**(`x`, `y`, `z`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `z` | `number` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[btVector3](Ammo.btVector3.md).[setValue](Ammo.btVector3.md#setvalue)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:65](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L65)
+
+▸ **setValue**(`x`, `y`, `z`, `w`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `z` | `number` |
+| `w` | `number` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+btVector3.setValue
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:66](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L66)
diff --git a/docs/physics/classes/Ammo.btVehicleRaycaster.md b/docs/physics/classes/Ammo.btVehicleRaycaster.md
new file mode 100644
index 00000000..390ee4aa
--- /dev/null
+++ b/docs/physics/classes/Ammo.btVehicleRaycaster.md
@@ -0,0 +1,49 @@
+# Class: btVehicleRaycaster
+
+[Ammo](../modules/Ammo.md).btVehicleRaycaster
+
+## Hierarchy
+
+- **`btVehicleRaycaster`**
+
+ ↳ [`btDefaultVehicleRaycaster`](Ammo.btDefaultVehicleRaycaster.md)
+
+### Constructors
+
+- [constructor](Ammo.btVehicleRaycaster.md#constructor)
+
+### Methods
+
+- [castRay](Ammo.btVehicleRaycaster.md#castray)
+
+## Constructors
+
+### constructor
+
+• **new btVehicleRaycaster**(): [`btVehicleRaycaster`](Ammo.btVehicleRaycaster.md)
+
+#### Returns
+
+[`btVehicleRaycaster`](Ammo.btVehicleRaycaster.md)
+
+## Methods
+
+### castRay
+
+▸ **castRay**(`from`, `to`, `result`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | [`btVector3`](Ammo.btVector3.md) |
+| `to` | [`btVector3`](Ammo.btVector3.md) |
+| `result` | [`btVehicleRaycasterResult`](Ammo.btVehicleRaycasterResult.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:715](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L715)
diff --git a/docs/physics/classes/Ammo.btVehicleRaycasterResult.md b/docs/physics/classes/Ammo.btVehicleRaycasterResult.md
new file mode 100644
index 00000000..3e8e0265
--- /dev/null
+++ b/docs/physics/classes/Ammo.btVehicleRaycasterResult.md
@@ -0,0 +1,128 @@
+# Class: btVehicleRaycasterResult
+
+[Ammo](../modules/Ammo.md).btVehicleRaycasterResult
+
+### Constructors
+
+- [constructor](Ammo.btVehicleRaycasterResult.md#constructor)
+
+### Methods
+
+- [get\_m\_hitPointInWorld](Ammo.btVehicleRaycasterResult.md#get_m_hitpointinworld)
+- [set\_m\_hitPointInWorld](Ammo.btVehicleRaycasterResult.md#set_m_hitpointinworld)
+- [get\_m\_hitNormalInWorld](Ammo.btVehicleRaycasterResult.md#get_m_hitnormalinworld)
+- [set\_m\_hitNormalInWorld](Ammo.btVehicleRaycasterResult.md#set_m_hitnormalinworld)
+- [get\_m\_distFraction](Ammo.btVehicleRaycasterResult.md#get_m_distfraction)
+- [set\_m\_distFraction](Ammo.btVehicleRaycasterResult.md#set_m_distfraction)
+
+## Constructors
+
+### constructor
+
+• **new btVehicleRaycasterResult**(): [`btVehicleRaycasterResult`](Ammo.btVehicleRaycasterResult.md)
+
+#### Returns
+
+[`btVehicleRaycasterResult`](Ammo.btVehicleRaycasterResult.md)
+
+## Methods
+
+### get\_m\_hitPointInWorld
+
+▸ **get_m_hitPointInWorld**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:707](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L707)
+
+___
+
+### set\_m\_hitPointInWorld
+
+▸ **set_m_hitPointInWorld**(`m_hitPointInWorld`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_hitPointInWorld` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:708](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L708)
+
+___
+
+### get\_m\_hitNormalInWorld
+
+▸ **get_m_hitNormalInWorld**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:709](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L709)
+
+___
+
+### set\_m\_hitNormalInWorld
+
+▸ **set_m_hitNormalInWorld**(`m_hitNormalInWorld`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_hitNormalInWorld` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:710](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L710)
+
+___
+
+### get\_m\_distFraction
+
+▸ **get_m_distFraction**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:711](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L711)
+
+___
+
+### set\_m\_distFraction
+
+▸ **set_m_distFraction**(`m_distFraction`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_distFraction` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:712](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L712)
diff --git a/docs/physics/classes/Ammo.btVehicleTuning.md b/docs/physics/classes/Ammo.btVehicleTuning.md
new file mode 100644
index 00000000..a1509e3d
--- /dev/null
+++ b/docs/physics/classes/Ammo.btVehicleTuning.md
@@ -0,0 +1,240 @@
+# Class: btVehicleTuning
+
+[Ammo](../modules/Ammo.md).btVehicleTuning
+
+### Constructors
+
+- [constructor](Ammo.btVehicleTuning.md#constructor)
+
+### Methods
+
+- [get\_m\_suspensionStiffness](Ammo.btVehicleTuning.md#get_m_suspensionstiffness)
+- [set\_m\_suspensionStiffness](Ammo.btVehicleTuning.md#set_m_suspensionstiffness)
+- [get\_m\_suspensionCompression](Ammo.btVehicleTuning.md#get_m_suspensioncompression)
+- [set\_m\_suspensionCompression](Ammo.btVehicleTuning.md#set_m_suspensioncompression)
+- [get\_m\_suspensionDamping](Ammo.btVehicleTuning.md#get_m_suspensiondamping)
+- [set\_m\_suspensionDamping](Ammo.btVehicleTuning.md#set_m_suspensiondamping)
+- [get\_m\_maxSuspensionTravelCm](Ammo.btVehicleTuning.md#get_m_maxsuspensiontravelcm)
+- [set\_m\_maxSuspensionTravelCm](Ammo.btVehicleTuning.md#set_m_maxsuspensiontravelcm)
+- [get\_m\_frictionSlip](Ammo.btVehicleTuning.md#get_m_frictionslip)
+- [set\_m\_frictionSlip](Ammo.btVehicleTuning.md#set_m_frictionslip)
+- [get\_m\_maxSuspensionForce](Ammo.btVehicleTuning.md#get_m_maxsuspensionforce)
+- [set\_m\_maxSuspensionForce](Ammo.btVehicleTuning.md#set_m_maxsuspensionforce)
+
+## Constructors
+
+### constructor
+
+• **new btVehicleTuning**(): [`btVehicleTuning`](Ammo.btVehicleTuning.md)
+
+#### Returns
+
+[`btVehicleTuning`](Ammo.btVehicleTuning.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:692](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L692)
+
+## Methods
+
+### get\_m\_suspensionStiffness
+
+▸ **get_m_suspensionStiffness**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:693](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L693)
+
+___
+
+### set\_m\_suspensionStiffness
+
+▸ **set_m_suspensionStiffness**(`m_suspensionStiffness`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_suspensionStiffness` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:694](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L694)
+
+___
+
+### get\_m\_suspensionCompression
+
+▸ **get_m_suspensionCompression**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:695](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L695)
+
+___
+
+### set\_m\_suspensionCompression
+
+▸ **set_m_suspensionCompression**(`m_suspensionCompression`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_suspensionCompression` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:696](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L696)
+
+___
+
+### get\_m\_suspensionDamping
+
+▸ **get_m_suspensionDamping**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:697](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L697)
+
+___
+
+### set\_m\_suspensionDamping
+
+▸ **set_m_suspensionDamping**(`m_suspensionDamping`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_suspensionDamping` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:698](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L698)
+
+___
+
+### get\_m\_maxSuspensionTravelCm
+
+▸ **get_m_maxSuspensionTravelCm**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:699](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L699)
+
+___
+
+### set\_m\_maxSuspensionTravelCm
+
+▸ **set_m_maxSuspensionTravelCm**(`m_maxSuspensionTravelCm`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_maxSuspensionTravelCm` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:700](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L700)
+
+___
+
+### get\_m\_frictionSlip
+
+▸ **get_m_frictionSlip**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:701](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L701)
+
+___
+
+### set\_m\_frictionSlip
+
+▸ **set_m_frictionSlip**(`m_frictionSlip`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_frictionSlip` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:702](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L702)
+
+___
+
+### get\_m\_maxSuspensionForce
+
+▸ **get_m_maxSuspensionForce**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:703](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L703)
+
+___
+
+### set\_m\_maxSuspensionForce
+
+▸ **set_m_maxSuspensionForce**(`m_maxSuspensionForce`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_maxSuspensionForce` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:704](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L704)
diff --git a/docs/physics/classes/Ammo.btWheelInfo.md b/docs/physics/classes/Ammo.btWheelInfo.md
new file mode 100644
index 00000000..9352de4f
--- /dev/null
+++ b/docs/physics/classes/Ammo.btWheelInfo.md
@@ -0,0 +1,931 @@
+# Class: btWheelInfo
+
+[Ammo](../modules/Ammo.md).btWheelInfo
+
+### Constructors
+
+- [constructor](Ammo.btWheelInfo.md#constructor)
+
+### Methods
+
+- [get\_m\_suspensionStiffness](Ammo.btWheelInfo.md#get_m_suspensionstiffness)
+- [set\_m\_suspensionStiffness](Ammo.btWheelInfo.md#set_m_suspensionstiffness)
+- [get\_m\_frictionSlip](Ammo.btWheelInfo.md#get_m_frictionslip)
+- [set\_m\_frictionSlip](Ammo.btWheelInfo.md#set_m_frictionslip)
+- [get\_m\_engineForce](Ammo.btWheelInfo.md#get_m_engineforce)
+- [set\_m\_engineForce](Ammo.btWheelInfo.md#set_m_engineforce)
+- [get\_m\_rollInfluence](Ammo.btWheelInfo.md#get_m_rollinfluence)
+- [set\_m\_rollInfluence](Ammo.btWheelInfo.md#set_m_rollinfluence)
+- [get\_m\_suspensionRestLength1](Ammo.btWheelInfo.md#get_m_suspensionrestlength1)
+- [set\_m\_suspensionRestLength1](Ammo.btWheelInfo.md#set_m_suspensionrestlength1)
+- [get\_m\_wheelsRadius](Ammo.btWheelInfo.md#get_m_wheelsradius)
+- [set\_m\_wheelsRadius](Ammo.btWheelInfo.md#set_m_wheelsradius)
+- [get\_m\_wheelsDampingCompression](Ammo.btWheelInfo.md#get_m_wheelsdampingcompression)
+- [set\_m\_wheelsDampingCompression](Ammo.btWheelInfo.md#set_m_wheelsdampingcompression)
+- [get\_m\_wheelsDampingRelaxation](Ammo.btWheelInfo.md#get_m_wheelsdampingrelaxation)
+- [set\_m\_wheelsDampingRelaxation](Ammo.btWheelInfo.md#set_m_wheelsdampingrelaxation)
+- [get\_m\_steering](Ammo.btWheelInfo.md#get_m_steering)
+- [set\_m\_steering](Ammo.btWheelInfo.md#set_m_steering)
+- [get\_m\_maxSuspensionForce](Ammo.btWheelInfo.md#get_m_maxsuspensionforce)
+- [set\_m\_maxSuspensionForce](Ammo.btWheelInfo.md#set_m_maxsuspensionforce)
+- [get\_m\_maxSuspensionTravelCm](Ammo.btWheelInfo.md#get_m_maxsuspensiontravelcm)
+- [set\_m\_maxSuspensionTravelCm](Ammo.btWheelInfo.md#set_m_maxsuspensiontravelcm)
+- [get\_m\_wheelsSuspensionForce](Ammo.btWheelInfo.md#get_m_wheelssuspensionforce)
+- [set\_m\_wheelsSuspensionForce](Ammo.btWheelInfo.md#set_m_wheelssuspensionforce)
+- [get\_m\_bIsFrontWheel](Ammo.btWheelInfo.md#get_m_bisfrontwheel)
+- [set\_m\_bIsFrontWheel](Ammo.btWheelInfo.md#set_m_bisfrontwheel)
+- [get\_m\_raycastInfo](Ammo.btWheelInfo.md#get_m_raycastinfo)
+- [set\_m\_raycastInfo](Ammo.btWheelInfo.md#set_m_raycastinfo)
+- [get\_m\_chassisConnectionPointCS](Ammo.btWheelInfo.md#get_m_chassisconnectionpointcs)
+- [set\_m\_chassisConnectionPointCS](Ammo.btWheelInfo.md#set_m_chassisconnectionpointcs)
+- [getSuspensionRestLength](Ammo.btWheelInfo.md#getsuspensionrestlength)
+- [updateWheel](Ammo.btWheelInfo.md#updatewheel)
+- [get\_m\_worldTransform](Ammo.btWheelInfo.md#get_m_worldtransform)
+- [set\_m\_worldTransform](Ammo.btWheelInfo.md#set_m_worldtransform)
+- [get\_m\_wheelDirectionCS](Ammo.btWheelInfo.md#get_m_wheeldirectioncs)
+- [set\_m\_wheelDirectionCS](Ammo.btWheelInfo.md#set_m_wheeldirectioncs)
+- [get\_m\_wheelAxleCS](Ammo.btWheelInfo.md#get_m_wheelaxlecs)
+- [set\_m\_wheelAxleCS](Ammo.btWheelInfo.md#set_m_wheelaxlecs)
+- [get\_m\_rotation](Ammo.btWheelInfo.md#get_m_rotation)
+- [set\_m\_rotation](Ammo.btWheelInfo.md#set_m_rotation)
+- [get\_m\_deltaRotation](Ammo.btWheelInfo.md#get_m_deltarotation)
+- [set\_m\_deltaRotation](Ammo.btWheelInfo.md#set_m_deltarotation)
+- [get\_m\_brake](Ammo.btWheelInfo.md#get_m_brake)
+- [set\_m\_brake](Ammo.btWheelInfo.md#set_m_brake)
+- [get\_m\_clippedInvContactDotSuspension](Ammo.btWheelInfo.md#get_m_clippedinvcontactdotsuspension)
+- [set\_m\_clippedInvContactDotSuspension](Ammo.btWheelInfo.md#set_m_clippedinvcontactdotsuspension)
+- [get\_m\_suspensionRelativeVelocity](Ammo.btWheelInfo.md#get_m_suspensionrelativevelocity)
+- [set\_m\_suspensionRelativeVelocity](Ammo.btWheelInfo.md#set_m_suspensionrelativevelocity)
+- [get\_m\_skidInfo](Ammo.btWheelInfo.md#get_m_skidinfo)
+- [set\_m\_skidInfo](Ammo.btWheelInfo.md#set_m_skidinfo)
+
+## Constructors
+
+### constructor
+
+• **new btWheelInfo**(`ci`): [`btWheelInfo`](Ammo.btWheelInfo.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ci` | [`btWheelInfoConstructionInfo`](Ammo.btWheelInfoConstructionInfo.md) |
+
+#### Returns
+
+[`btWheelInfo`](Ammo.btWheelInfo.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:795](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L795)
+
+## Methods
+
+### get\_m\_suspensionStiffness
+
+▸ **get_m_suspensionStiffness**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:765](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L765)
+
+___
+
+### set\_m\_suspensionStiffness
+
+▸ **set_m_suspensionStiffness**(`m_suspensionStiffness`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_suspensionStiffness` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:766](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L766)
+
+___
+
+### get\_m\_frictionSlip
+
+▸ **get_m_frictionSlip**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:767](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L767)
+
+___
+
+### set\_m\_frictionSlip
+
+▸ **set_m_frictionSlip**(`m_frictionSlip`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_frictionSlip` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:768](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L768)
+
+___
+
+### get\_m\_engineForce
+
+▸ **get_m_engineForce**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:769](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L769)
+
+___
+
+### set\_m\_engineForce
+
+▸ **set_m_engineForce**(`m_engineForce`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_engineForce` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:770](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L770)
+
+___
+
+### get\_m\_rollInfluence
+
+▸ **get_m_rollInfluence**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:771](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L771)
+
+___
+
+### set\_m\_rollInfluence
+
+▸ **set_m_rollInfluence**(`m_rollInfluence`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_rollInfluence` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:772](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L772)
+
+___
+
+### get\_m\_suspensionRestLength1
+
+▸ **get_m_suspensionRestLength1**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:773](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L773)
+
+___
+
+### set\_m\_suspensionRestLength1
+
+▸ **set_m_suspensionRestLength1**(`m_suspensionRestLength1`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_suspensionRestLength1` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:774](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L774)
+
+___
+
+### get\_m\_wheelsRadius
+
+▸ **get_m_wheelsRadius**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:775](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L775)
+
+___
+
+### set\_m\_wheelsRadius
+
+▸ **set_m_wheelsRadius**(`m_wheelsRadius`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_wheelsRadius` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:776](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L776)
+
+___
+
+### get\_m\_wheelsDampingCompression
+
+▸ **get_m_wheelsDampingCompression**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:777](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L777)
+
+___
+
+### set\_m\_wheelsDampingCompression
+
+▸ **set_m_wheelsDampingCompression**(`m_wheelsDampingCompression`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_wheelsDampingCompression` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:778](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L778)
+
+___
+
+### get\_m\_wheelsDampingRelaxation
+
+▸ **get_m_wheelsDampingRelaxation**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:779](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L779)
+
+___
+
+### set\_m\_wheelsDampingRelaxation
+
+▸ **set_m_wheelsDampingRelaxation**(`m_wheelsDampingRelaxation`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_wheelsDampingRelaxation` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:780](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L780)
+
+___
+
+### get\_m\_steering
+
+▸ **get_m_steering**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:781](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L781)
+
+___
+
+### set\_m\_steering
+
+▸ **set_m_steering**(`m_steering`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_steering` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:782](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L782)
+
+___
+
+### get\_m\_maxSuspensionForce
+
+▸ **get_m_maxSuspensionForce**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:783](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L783)
+
+___
+
+### set\_m\_maxSuspensionForce
+
+▸ **set_m_maxSuspensionForce**(`m_maxSuspensionForce`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_maxSuspensionForce` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:784](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L784)
+
+___
+
+### get\_m\_maxSuspensionTravelCm
+
+▸ **get_m_maxSuspensionTravelCm**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:785](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L785)
+
+___
+
+### set\_m\_maxSuspensionTravelCm
+
+▸ **set_m_maxSuspensionTravelCm**(`m_maxSuspensionTravelCm`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_maxSuspensionTravelCm` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:786](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L786)
+
+___
+
+### get\_m\_wheelsSuspensionForce
+
+▸ **get_m_wheelsSuspensionForce**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:787](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L787)
+
+___
+
+### set\_m\_wheelsSuspensionForce
+
+▸ **set_m_wheelsSuspensionForce**(`m_wheelsSuspensionForce`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_wheelsSuspensionForce` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:788](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L788)
+
+___
+
+### get\_m\_bIsFrontWheel
+
+▸ **get_m_bIsFrontWheel**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:789](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L789)
+
+___
+
+### set\_m\_bIsFrontWheel
+
+▸ **set_m_bIsFrontWheel**(`m_bIsFrontWheel`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_bIsFrontWheel` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:790](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L790)
+
+___
+
+### get\_m\_raycastInfo
+
+▸ **get_m_raycastInfo**(): [`RaycastInfo`](Ammo.RaycastInfo.md)
+
+#### Returns
+
+[`RaycastInfo`](Ammo.RaycastInfo.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:791](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L791)
+
+___
+
+### set\_m\_raycastInfo
+
+▸ **set_m_raycastInfo**(`m_raycastInfo`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_raycastInfo` | [`RaycastInfo`](Ammo.RaycastInfo.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:792](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L792)
+
+___
+
+### get\_m\_chassisConnectionPointCS
+
+▸ **get_m_chassisConnectionPointCS**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:793](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L793)
+
+___
+
+### set\_m\_chassisConnectionPointCS
+
+▸ **set_m_chassisConnectionPointCS**(`m_chassisConnectionPointCS`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_chassisConnectionPointCS` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:794](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L794)
+
+___
+
+### getSuspensionRestLength
+
+▸ **getSuspensionRestLength**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:796](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L796)
+
+___
+
+### updateWheel
+
+▸ **updateWheel**(`chassis`, `raycastInfo`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `chassis` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `raycastInfo` | [`RaycastInfo`](Ammo.RaycastInfo.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:797](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L797)
+
+___
+
+### get\_m\_worldTransform
+
+▸ **get_m_worldTransform**(): [`btTransform`](Ammo.btTransform.md)
+
+#### Returns
+
+[`btTransform`](Ammo.btTransform.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:798](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L798)
+
+___
+
+### set\_m\_worldTransform
+
+▸ **set_m_worldTransform**(`m_worldTransform`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_worldTransform` | [`btTransform`](Ammo.btTransform.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:799](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L799)
+
+___
+
+### get\_m\_wheelDirectionCS
+
+▸ **get_m_wheelDirectionCS**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:800](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L800)
+
+___
+
+### set\_m\_wheelDirectionCS
+
+▸ **set_m_wheelDirectionCS**(`m_wheelDirectionCS`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_wheelDirectionCS` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:801](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L801)
+
+___
+
+### get\_m\_wheelAxleCS
+
+▸ **get_m_wheelAxleCS**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:802](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L802)
+
+___
+
+### set\_m\_wheelAxleCS
+
+▸ **set_m_wheelAxleCS**(`m_wheelAxleCS`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_wheelAxleCS` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:803](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L803)
+
+___
+
+### get\_m\_rotation
+
+▸ **get_m_rotation**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:804](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L804)
+
+___
+
+### set\_m\_rotation
+
+▸ **set_m_rotation**(`m_rotation`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_rotation` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:805](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L805)
+
+___
+
+### get\_m\_deltaRotation
+
+▸ **get_m_deltaRotation**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:806](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L806)
+
+___
+
+### set\_m\_deltaRotation
+
+▸ **set_m_deltaRotation**(`m_deltaRotation`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_deltaRotation` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:807](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L807)
+
+___
+
+### get\_m\_brake
+
+▸ **get_m_brake**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:808](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L808)
+
+___
+
+### set\_m\_brake
+
+▸ **set_m_brake**(`m_brake`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_brake` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:809](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L809)
+
+___
+
+### get\_m\_clippedInvContactDotSuspension
+
+▸ **get_m_clippedInvContactDotSuspension**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:810](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L810)
+
+___
+
+### set\_m\_clippedInvContactDotSuspension
+
+▸ **set_m_clippedInvContactDotSuspension**(`m_clippedInvContactDotSuspension`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_clippedInvContactDotSuspension` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:811](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L811)
+
+___
+
+### get\_m\_suspensionRelativeVelocity
+
+▸ **get_m_suspensionRelativeVelocity**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:812](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L812)
+
+___
+
+### set\_m\_suspensionRelativeVelocity
+
+▸ **set_m_suspensionRelativeVelocity**(`m_suspensionRelativeVelocity`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_suspensionRelativeVelocity` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:813](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L813)
+
+___
+
+### get\_m\_skidInfo
+
+▸ **get_m_skidInfo**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:814](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L814)
+
+___
+
+### set\_m\_skidInfo
+
+▸ **set_m_skidInfo**(`m_skidInfo`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_skidInfo` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:815](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L815)
diff --git a/docs/physics/classes/Ammo.btWheelInfoConstructionInfo.md b/docs/physics/classes/Ammo.btWheelInfoConstructionInfo.md
new file mode 100644
index 00000000..d16bc02a
--- /dev/null
+++ b/docs/physics/classes/Ammo.btWheelInfoConstructionInfo.md
@@ -0,0 +1,452 @@
+# Class: btWheelInfoConstructionInfo
+
+[Ammo](../modules/Ammo.md).btWheelInfoConstructionInfo
+
+### Constructors
+
+- [constructor](Ammo.btWheelInfoConstructionInfo.md#constructor)
+
+### Methods
+
+- [get\_m\_chassisConnectionCS](Ammo.btWheelInfoConstructionInfo.md#get_m_chassisconnectioncs)
+- [set\_m\_chassisConnectionCS](Ammo.btWheelInfoConstructionInfo.md#set_m_chassisconnectioncs)
+- [get\_m\_wheelDirectionCS](Ammo.btWheelInfoConstructionInfo.md#get_m_wheeldirectioncs)
+- [set\_m\_wheelDirectionCS](Ammo.btWheelInfoConstructionInfo.md#set_m_wheeldirectioncs)
+- [get\_m\_wheelAxleCS](Ammo.btWheelInfoConstructionInfo.md#get_m_wheelaxlecs)
+- [set\_m\_wheelAxleCS](Ammo.btWheelInfoConstructionInfo.md#set_m_wheelaxlecs)
+- [get\_m\_suspensionRestLength](Ammo.btWheelInfoConstructionInfo.md#get_m_suspensionrestlength)
+- [set\_m\_suspensionRestLength](Ammo.btWheelInfoConstructionInfo.md#set_m_suspensionrestlength)
+- [get\_m\_maxSuspensionTravelCm](Ammo.btWheelInfoConstructionInfo.md#get_m_maxsuspensiontravelcm)
+- [set\_m\_maxSuspensionTravelCm](Ammo.btWheelInfoConstructionInfo.md#set_m_maxsuspensiontravelcm)
+- [get\_m\_wheelRadius](Ammo.btWheelInfoConstructionInfo.md#get_m_wheelradius)
+- [set\_m\_wheelRadius](Ammo.btWheelInfoConstructionInfo.md#set_m_wheelradius)
+- [get\_m\_suspensionStiffness](Ammo.btWheelInfoConstructionInfo.md#get_m_suspensionstiffness)
+- [set\_m\_suspensionStiffness](Ammo.btWheelInfoConstructionInfo.md#set_m_suspensionstiffness)
+- [get\_m\_wheelsDampingCompression](Ammo.btWheelInfoConstructionInfo.md#get_m_wheelsdampingcompression)
+- [set\_m\_wheelsDampingCompression](Ammo.btWheelInfoConstructionInfo.md#set_m_wheelsdampingcompression)
+- [get\_m\_wheelsDampingRelaxation](Ammo.btWheelInfoConstructionInfo.md#get_m_wheelsdampingrelaxation)
+- [set\_m\_wheelsDampingRelaxation](Ammo.btWheelInfoConstructionInfo.md#set_m_wheelsdampingrelaxation)
+- [get\_m\_frictionSlip](Ammo.btWheelInfoConstructionInfo.md#get_m_frictionslip)
+- [set\_m\_frictionSlip](Ammo.btWheelInfoConstructionInfo.md#set_m_frictionslip)
+- [get\_m\_maxSuspensionForce](Ammo.btWheelInfoConstructionInfo.md#get_m_maxsuspensionforce)
+- [set\_m\_maxSuspensionForce](Ammo.btWheelInfoConstructionInfo.md#set_m_maxsuspensionforce)
+- [get\_m\_bIsFrontWheel](Ammo.btWheelInfoConstructionInfo.md#get_m_bisfrontwheel)
+- [set\_m\_bIsFrontWheel](Ammo.btWheelInfoConstructionInfo.md#set_m_bisfrontwheel)
+
+## Constructors
+
+### constructor
+
+• **new btWheelInfoConstructionInfo**(): [`btWheelInfoConstructionInfo`](Ammo.btWheelInfoConstructionInfo.md)
+
+#### Returns
+
+[`btWheelInfoConstructionInfo`](Ammo.btWheelInfoConstructionInfo.md)
+
+## Methods
+
+### get\_m\_chassisConnectionCS
+
+▸ **get_m_chassisConnectionCS**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:739](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L739)
+
+___
+
+### set\_m\_chassisConnectionCS
+
+▸ **set_m_chassisConnectionCS**(`m_chassisConnectionCS`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_chassisConnectionCS` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:740](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L740)
+
+___
+
+### get\_m\_wheelDirectionCS
+
+▸ **get_m_wheelDirectionCS**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:741](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L741)
+
+___
+
+### set\_m\_wheelDirectionCS
+
+▸ **set_m_wheelDirectionCS**(`m_wheelDirectionCS`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_wheelDirectionCS` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:742](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L742)
+
+___
+
+### get\_m\_wheelAxleCS
+
+▸ **get_m_wheelAxleCS**(): [`btVector3`](Ammo.btVector3.md)
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:743](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L743)
+
+___
+
+### set\_m\_wheelAxleCS
+
+▸ **set_m_wheelAxleCS**(`m_wheelAxleCS`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_wheelAxleCS` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:744](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L744)
+
+___
+
+### get\_m\_suspensionRestLength
+
+▸ **get_m_suspensionRestLength**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:745](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L745)
+
+___
+
+### set\_m\_suspensionRestLength
+
+▸ **set_m_suspensionRestLength**(`m_suspensionRestLength`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_suspensionRestLength` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:746](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L746)
+
+___
+
+### get\_m\_maxSuspensionTravelCm
+
+▸ **get_m_maxSuspensionTravelCm**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:747](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L747)
+
+___
+
+### set\_m\_maxSuspensionTravelCm
+
+▸ **set_m_maxSuspensionTravelCm**(`m_maxSuspensionTravelCm`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_maxSuspensionTravelCm` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:748](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L748)
+
+___
+
+### get\_m\_wheelRadius
+
+▸ **get_m_wheelRadius**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:749](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L749)
+
+___
+
+### set\_m\_wheelRadius
+
+▸ **set_m_wheelRadius**(`m_wheelRadius`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_wheelRadius` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:750](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L750)
+
+___
+
+### get\_m\_suspensionStiffness
+
+▸ **get_m_suspensionStiffness**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:751](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L751)
+
+___
+
+### set\_m\_suspensionStiffness
+
+▸ **set_m_suspensionStiffness**(`m_suspensionStiffness`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_suspensionStiffness` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:752](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L752)
+
+___
+
+### get\_m\_wheelsDampingCompression
+
+▸ **get_m_wheelsDampingCompression**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:753](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L753)
+
+___
+
+### set\_m\_wheelsDampingCompression
+
+▸ **set_m_wheelsDampingCompression**(`m_wheelsDampingCompression`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_wheelsDampingCompression` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:754](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L754)
+
+___
+
+### get\_m\_wheelsDampingRelaxation
+
+▸ **get_m_wheelsDampingRelaxation**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:755](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L755)
+
+___
+
+### set\_m\_wheelsDampingRelaxation
+
+▸ **set_m_wheelsDampingRelaxation**(`m_wheelsDampingRelaxation`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_wheelsDampingRelaxation` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:756](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L756)
+
+___
+
+### get\_m\_frictionSlip
+
+▸ **get_m_frictionSlip**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:757](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L757)
+
+___
+
+### set\_m\_frictionSlip
+
+▸ **set_m_frictionSlip**(`m_frictionSlip`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_frictionSlip` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:758](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L758)
+
+___
+
+### get\_m\_maxSuspensionForce
+
+▸ **get_m_maxSuspensionForce**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:759](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L759)
+
+___
+
+### set\_m\_maxSuspensionForce
+
+▸ **set_m_maxSuspensionForce**(`m_maxSuspensionForce`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_maxSuspensionForce` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:760](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L760)
+
+___
+
+### get\_m\_bIsFrontWheel
+
+▸ **get_m_bIsFrontWheel**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:761](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L761)
+
+___
+
+### set\_m\_bIsFrontWheel
+
+▸ **set_m_bIsFrontWheel**(`m_bIsFrontWheel`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `m_bIsFrontWheel` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:762](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L762)
diff --git a/docs/physics/classes/Ammo.tAnchorArray.md b/docs/physics/classes/Ammo.tAnchorArray.md
new file mode 100644
index 00000000..d2a190d1
--- /dev/null
+++ b/docs/physics/classes/Ammo.tAnchorArray.md
@@ -0,0 +1,107 @@
+# Class: tAnchorArray
+
+[Ammo](../modules/Ammo.md).tAnchorArray
+
+### Constructors
+
+- [constructor](Ammo.tAnchorArray.md#constructor)
+
+### Methods
+
+- [size](Ammo.tAnchorArray.md#size)
+- [at](Ammo.tAnchorArray.md#at)
+- [clear](Ammo.tAnchorArray.md#clear)
+- [push\_back](Ammo.tAnchorArray.md#push_back)
+- [pop\_back](Ammo.tAnchorArray.md#pop_back)
+
+## Constructors
+
+### constructor
+
+• **new tAnchorArray**(): [`tAnchorArray`](Ammo.tAnchorArray.md)
+
+#### Returns
+
+[`tAnchorArray`](Ammo.tAnchorArray.md)
+
+## Methods
+
+### size
+
+▸ **size**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:966](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L966)
+
+___
+
+### at
+
+▸ **at**(`n`): [`Anchor`](Ammo.Anchor.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `n` | `number` |
+
+#### Returns
+
+[`Anchor`](Ammo.Anchor.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:967](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L967)
+
+___
+
+### clear
+
+▸ **clear**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:968](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L968)
+
+___
+
+### push\_back
+
+▸ **push_back**(`val`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `val` | [`Anchor`](Ammo.Anchor.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:969](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L969)
+
+___
+
+### pop\_back
+
+▸ **pop_back**(): `void`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:970](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L970)
diff --git a/docs/physics/classes/Ammo.tFaceArray.md b/docs/physics/classes/Ammo.tFaceArray.md
new file mode 100644
index 00000000..928731fe
--- /dev/null
+++ b/docs/physics/classes/Ammo.tFaceArray.md
@@ -0,0 +1,56 @@
+# Class: tFaceArray
+
+[Ammo](../modules/Ammo.md).tFaceArray
+
+### Constructors
+
+- [constructor](Ammo.tFaceArray.md#constructor)
+
+### Methods
+
+- [size](Ammo.tFaceArray.md#size)
+- [at](Ammo.tFaceArray.md#at)
+
+## Constructors
+
+### constructor
+
+• **new tFaceArray**(): [`tFaceArray`](Ammo.tFaceArray.md)
+
+#### Returns
+
+[`tFaceArray`](Ammo.tFaceArray.md)
+
+## Methods
+
+### size
+
+▸ **size**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:912](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L912)
+
+___
+
+### at
+
+▸ **at**(`n`): [`Face`](Ammo.Face.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `n` | `number` |
+
+#### Returns
+
+[`Face`](Ammo.Face.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:913](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L913)
diff --git a/docs/physics/classes/Ammo.tMaterialArray.md b/docs/physics/classes/Ammo.tMaterialArray.md
new file mode 100644
index 00000000..37750275
--- /dev/null
+++ b/docs/physics/classes/Ammo.tMaterialArray.md
@@ -0,0 +1,56 @@
+# Class: tMaterialArray
+
+[Ammo](../modules/Ammo.md).tMaterialArray
+
+### Constructors
+
+- [constructor](Ammo.tMaterialArray.md#constructor)
+
+### Methods
+
+- [size](Ammo.tMaterialArray.md#size)
+- [at](Ammo.tMaterialArray.md#at)
+
+## Constructors
+
+### constructor
+
+• **new tMaterialArray**(): [`tMaterialArray`](Ammo.tMaterialArray.md)
+
+#### Returns
+
+[`tMaterialArray`](Ammo.tMaterialArray.md)
+
+## Methods
+
+### size
+
+▸ **size**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:946](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L946)
+
+___
+
+### at
+
+▸ **at**(`n`): [`Material`](Ammo.Material.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `n` | `number` |
+
+#### Returns
+
+[`Material`](Ammo.Material.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:947](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L947)
diff --git a/docs/physics/classes/Ammo.tNodeArray.md b/docs/physics/classes/Ammo.tNodeArray.md
new file mode 100644
index 00000000..744632fa
--- /dev/null
+++ b/docs/physics/classes/Ammo.tNodeArray.md
@@ -0,0 +1,56 @@
+# Class: tNodeArray
+
+[Ammo](../modules/Ammo.md).tNodeArray
+
+### Constructors
+
+- [constructor](Ammo.tNodeArray.md#constructor)
+
+### Methods
+
+- [size](Ammo.tNodeArray.md#size)
+- [at](Ammo.tNodeArray.md#at)
+
+## Constructors
+
+### constructor
+
+• **new tNodeArray**(): [`tNodeArray`](Ammo.tNodeArray.md)
+
+#### Returns
+
+[`tNodeArray`](Ammo.tNodeArray.md)
+
+## Methods
+
+### size
+
+▸ **size**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:932](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L932)
+
+___
+
+### at
+
+▸ **at**(`n`): [`Node`](Ammo.Node.md)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `n` | `number` |
+
+#### Returns
+
+[`Node`](Ammo.Node.md)
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:933](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L933)
diff --git a/docs/physics/classes/ClothSoftbody.md b/docs/physics/classes/ClothSoftbody.md
new file mode 100644
index 00000000..1b3875f0
--- /dev/null
+++ b/docs/physics/classes/ClothSoftbody.md
@@ -0,0 +1,962 @@
+# Class: ClothSoftbody
+
+## Hierarchy
+
+- `SoftbodyBase`
+
+ ↳ **`ClothSoftbody`**
+
+### Constructors
+
+- [constructor](ClothSoftbody.md#constructor)
+
+### Properties
+
+- [clothCorners](ClothSoftbody.md#clothcorners)
+- [fixNodeIndices](ClothSoftbody.md#fixnodeindices)
+- [anchorRigidbody](ClothSoftbody.md#anchorrigidbody)
+- [anchorIndices](ClothSoftbody.md#anchorindices)
+- [anchorPosition](ClothSoftbody.md#anchorposition)
+- [anchorRotation](ClothSoftbody.md#anchorrotation)
+- [mass](ClothSoftbody.md#mass)
+- [margin](ClothSoftbody.md#margin)
+- [group](ClothSoftbody.md#group)
+- [mask](ClothSoftbody.md#mask)
+- [influence](ClothSoftbody.md#influence)
+- [disableCollision](ClothSoftbody.md#disablecollision)
+- [object3D](ClothSoftbody.md#object3d)
+- [isDestroyed](ClothSoftbody.md#isdestroyed)
+
+### Accessors
+
+- [activationState](ClothSoftbody.md#activationstate)
+- [btBodyInited](ClothSoftbody.md#btbodyinited)
+- [btSoftBody](ClothSoftbody.md#btsoftbody)
+- [eventDispatcher](ClothSoftbody.md#eventdispatcher)
+- [isStart](ClothSoftbody.md#isstart)
+- [transform](ClothSoftbody.md#transform)
+- [enable](ClothSoftbody.md#enable)
+
+### Methods
+
+- [start](ClothSoftbody.md#start)
+- [applyFixedNodes](ClothSoftbody.md#applyfixednodes)
+- [clearAnchors](ClothSoftbody.md#clearanchors)
+- [onUpdate](ClothSoftbody.md#onupdate)
+- [destroy](ClothSoftbody.md#destroy)
+- [init](ClothSoftbody.md#init)
+- [wait](ClothSoftbody.md#wait)
+- [appendAnchor](ClothSoftbody.md#appendanchor)
+- [clearFixedNodes](ClothSoftbody.md#clearfixednodes)
+- [stop](ClothSoftbody.md#stop)
+- [onEnable](ClothSoftbody.md#onenable)
+- [onDisable](ClothSoftbody.md#ondisable)
+- [onLateUpdate](ClothSoftbody.md#onlateupdate)
+- [onBeforeUpdate](ClothSoftbody.md#onbeforeupdate)
+- [onCompute](ClothSoftbody.md#oncompute)
+- [onGraphic](ClothSoftbody.md#ongraphic)
+- [onParentChange](ClothSoftbody.md#onparentchange)
+- [onAddChild](ClothSoftbody.md#onaddchild)
+- [onRemoveChild](ClothSoftbody.md#onremovechild)
+- [cloneTo](ClothSoftbody.md#cloneto)
+- [copyComponent](ClothSoftbody.md#copycomponent)
+- [beforeDestroy](ClothSoftbody.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new ClothSoftbody**(): [`ClothSoftbody`](ClothSoftbody.md)
+
+#### Returns
+
+[`ClothSoftbody`](ClothSoftbody.md)
+
+#### Inherited from
+
+SoftbodyBase.constructor
+
+## Properties
+
+### clothCorners
+
+• **clothCorners**: [`Vector3`, `Vector3`, `Vector3`, `Vector3`]
+
+布料的四个角,默认以平面法向量计算各角。
+
+#### Defined in
+
+[packages/physics/softbody/ClothSoftbody.ts:22](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/ClothSoftbody.ts#L22)
+
+___
+
+### fixNodeIndices
+
+• **fixNodeIndices**: `number`[] \| [`CornerType`](../types/CornerType.md)[] = `[]`
+
+固定节点索引。
+
+#### Defined in
+
+[packages/physics/softbody/ClothSoftbody.ts:27](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/ClothSoftbody.ts#L27)
+
+___
+
+### anchorRigidbody
+
+• **anchorRigidbody**: [`Rigidbody`](Rigidbody.md)
+
+添加锚点时需要的刚体。
+
+#### Defined in
+
+[packages/physics/softbody/ClothSoftbody.ts:32](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/ClothSoftbody.ts#L32)
+
+___
+
+### anchorIndices
+
+• **anchorIndices**: `number`[] \| [`CornerType`](../types/CornerType.md)[] = `[]`
+
+布料的锚点。
+
+#### Defined in
+
+[packages/physics/softbody/ClothSoftbody.ts:37](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/ClothSoftbody.ts#L37)
+
+___
+
+### anchorPosition
+
+• **anchorPosition**: `Vector3`
+
+仅在设置 `anchorRigidbody` 后有效,表示布料软体相对刚体的位置。
+
+#### Defined in
+
+[packages/physics/softbody/ClothSoftbody.ts:42](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/ClothSoftbody.ts#L42)
+
+___
+
+### anchorRotation
+
+• **anchorRotation**: `Vector3`
+
+仅在设置 `anchorRigidbody` 后有效,表示布料软体相对刚体的旋转。
+
+#### Defined in
+
+[packages/physics/softbody/ClothSoftbody.ts:47](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/ClothSoftbody.ts#L47)
+
+___
+
+### mass
+
+• **mass**: `number` = `1`
+
+软体的总质量,默认值为 `1`
+
+#### Inherited from
+
+SoftbodyBase.mass
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L17)
+
+___
+
+### margin
+
+• **margin**: `number` = `0.15`
+
+碰撞边距,默认值为 `0.15`
+
+#### Inherited from
+
+SoftbodyBase.margin
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:22](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L22)
+
+___
+
+### group
+
+• **group**: `number` = `1`
+
+碰撞组,默认值为 `1`
+
+#### Inherited from
+
+SoftbodyBase.group
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L27)
+
+___
+
+### mask
+
+• **mask**: `number` = `-1`
+
+碰撞掩码,默认值为 `-1`
+
+#### Inherited from
+
+SoftbodyBase.mask
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:32](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L32)
+
+___
+
+### influence
+
+• **influence**: `number` = `1`
+
+锚点的影响力。影响力值越大,软体节点越紧密地跟随刚体的运动。通常,这个值在0到1之间。默认值为 `1`。
+
+#### Inherited from
+
+SoftbodyBase.influence
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:37](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L37)
+
+___
+
+### disableCollision
+
+• **disableCollision**: `boolean` = `false`
+
+是否禁用与锚定刚体之间的碰撞,默认值为 `false`。
+
+#### Inherited from
+
+SoftbodyBase.disableCollision
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:42](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L42)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+SoftbodyBase.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+SoftbodyBase.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### activationState
+
+• `set` **activationState**(`value`): `void`
+
+设置软体激活状态。
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`ActivationState`](../enums/ActivationState.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.activationState
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L47)
+
+___
+
+### btBodyInited
+
+• `get` **btBodyInited**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+SoftbodyBase.btBodyInited
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:51](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L51)
+
+___
+
+### btSoftBody
+
+• `get` **btSoftBody**(): [`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Returns
+
+[`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Inherited from
+
+SoftbodyBase.btSoftBody
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:55](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L55)
+
+___
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+SoftbodyBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+SoftbodyBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+SoftbodyBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+SoftbodyBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### start
+
+▸ **start**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Overrides
+
+SoftbodyBase.start
+
+#### Defined in
+
+[packages/physics/softbody/ClothSoftbody.ts:49](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/ClothSoftbody.ts#L49)
+
+___
+
+### applyFixedNodes
+
+▸ **applyFixedNodes**(`fixedNodeIndices`): `void`
+
+固定软体节点。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `fixedNodeIndices` | `number`[] \| [`CornerType`](../types/CornerType.md)[] | 表示需要固定的节点索引或 CornerType 数组。 |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+SoftbodyBase.applyFixedNodes
+
+#### Defined in
+
+[packages/physics/softbody/ClothSoftbody.ts:192](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/ClothSoftbody.ts#L192)
+
+___
+
+### clearAnchors
+
+▸ **clearAnchors**(): `void`
+
+清除锚点,软体将会从附加的刚体上脱落
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/softbody/ClothSoftbody.ts:202](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/ClothSoftbody.ts#L202)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+SoftbodyBase.onUpdate
+
+#### Defined in
+
+[packages/physics/softbody/ClothSoftbody.ts:209](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/ClothSoftbody.ts#L209)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+SoftbodyBase.destroy
+
+#### Defined in
+
+[packages/physics/softbody/ClothSoftbody.ts:243](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/ClothSoftbody.ts#L243)
+
+___
+
+### init
+
+▸ **init**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.init
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:59](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L59)
+
+___
+
+### wait
+
+▸ **wait**(): `Promise`\<[`btSoftBody`](Ammo.btSoftBody.md)\>
+
+Asynchronously retrieves the fully initialized soft body instance.
+
+#### Returns
+
+`Promise`\<[`btSoftBody`](Ammo.btSoftBody.md)\>
+
+#### Inherited from
+
+SoftbodyBase.wait
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:95](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L95)
+
+___
+
+### appendAnchor
+
+▸ **appendAnchor**(`nodeIndex`, `targetRigidbody`, `disCollision?`, `influence?`): `void`
+
+Wraps the native soft body's `appendAnchor` method to anchor a node to a rigid body.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `nodeIndex` | `number` | Index of the node to anchor. |
+| `targetRigidbody` | [`Rigidbody`](Rigidbody.md) | The rigid body to anchor to. |
+| `disCollision?` | `boolean` | Optional. Disable collisions if true. |
+| `influence?` | `number` | Optional. Anchor's influence. |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.appendAnchor
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:107](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L107)
+
+___
+
+### clearFixedNodes
+
+▸ **clearFixedNodes**(`index?`): `void`
+
+清除固定节点
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index?` | `number` | 需要清除的节点索引,如果未提供,则清除所有节点。 |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.clearFixedNodes
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:140](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L140)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onEnable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onDisable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `Object3D` | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+SoftbodyBase.copyComponent
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.beforeDestroy
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
diff --git a/docs/physics/classes/CollisionShapeUtil.md b/docs/physics/classes/CollisionShapeUtil.md
new file mode 100644
index 00000000..3c271b68
--- /dev/null
+++ b/docs/physics/classes/CollisionShapeUtil.md
@@ -0,0 +1,460 @@
+# Class: CollisionShapeUtil
+
+CollisionShapeUtil
+提供多种碰撞体构建功能
+
+### Constructors
+
+- [constructor](CollisionShapeUtil.md#constructor)
+
+### Methods
+
+- [createStaticPlaneShape](CollisionShapeUtil.md#createstaticplaneshape)
+- [createBoxShape](CollisionShapeUtil.md#createboxshape)
+- [createSphereShape](CollisionShapeUtil.md#createsphereshape)
+- [createCapsuleShape](CollisionShapeUtil.md#createcapsuleshape)
+- [createCylinderShape](CollisionShapeUtil.md#createcylindershape)
+- [createConeShape](CollisionShapeUtil.md#createconeshape)
+- [createCompoundShape](CollisionShapeUtil.md#createcompoundshape)
+- [createCompoundShapeFromObject](CollisionShapeUtil.md#createcompoundshapefromobject)
+- [createShapeFromObject](CollisionShapeUtil.md#createshapefromobject)
+- [createHeightfieldTerrainShape](CollisionShapeUtil.md#createheightfieldterrainshape)
+- [createConvexHullShape](CollisionShapeUtil.md#createconvexhullshape)
+- [createConvexTriangleMeshShape](CollisionShapeUtil.md#createconvextrianglemeshshape)
+- [createBvhTriangleMeshShape](CollisionShapeUtil.md#createbvhtrianglemeshshape)
+- [createGImpactMeshShape](CollisionShapeUtil.md#creategimpactmeshshape)
+- [buildTriangleMesh](CollisionShapeUtil.md#buildtrianglemesh)
+- [getAllMeshVerticesAndIndices](CollisionShapeUtil.md#getallmeshverticesandindices)
+
+## Constructors
+
+### constructor
+
+• **new CollisionShapeUtil**(): [`CollisionShapeUtil`](CollisionShapeUtil.md)
+
+#### Returns
+
+[`CollisionShapeUtil`](CollisionShapeUtil.md)
+
+## Methods
+
+### createStaticPlaneShape
+
+▸ **createStaticPlaneShape**(`planeNormal?`, `planeConstant?`): [`btStaticPlaneShape`](Ammo.btStaticPlaneShape.md)
+
+创建静态平面碰撞形状,适用于静态无限平面的碰撞,如地面或墙壁。
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `planeNormal` | `Vector3` | `Vector3.UP` | 平面法向量,默认值为 Vector3.UP。 |
+| `planeConstant` | `number` | `0` | 平面常数,表示平面距离原点的距离,默认值为 0。 |
+
+#### Returns
+
+[`btStaticPlaneShape`](Ammo.btStaticPlaneShape.md)
+
+Ammo.btStaticPlaneShape - 静态平面碰撞形状实例。
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:22](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L22)
+
+___
+
+### createBoxShape
+
+▸ **createBoxShape**(`object3D`, `size?`): [`btBoxShape`](Ammo.btBoxShape.md)
+
+创建盒型碰撞形状,适用于具有明确尺寸的盒形物体。
+如果未指定尺寸,则使用三维对象的包围盒大小。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `object3D` | `Object3D` | 用于创建碰撞体的三维对象。 |
+| `size?` | `Vector3` | 可选参数,盒型碰撞体的尺寸。 |
+
+#### Returns
+
+[`btBoxShape`](Ammo.btBoxShape.md)
+
+Ammo.btBoxShape - 盒型碰撞形状实例。
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:36](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L36)
+
+___
+
+### createSphereShape
+
+▸ **createSphereShape**(`object3D`, `radius?`): [`btSphereShape`](Ammo.btSphereShape.md)
+
+创建球型碰撞形状,适用于球形物体。
+如果未指定半径,则使用三维对象的包围盒半径 `X`。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `object3D` | `Object3D` | 用于创建碰撞体的三维对象。 |
+| `radius?` | `number` | 可选参数,球型碰撞体的半径。 |
+
+#### Returns
+
+[`btSphereShape`](Ammo.btSphereShape.md)
+
+Ammo.btSphereShape - 球型碰撞形状实例。
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:51](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L51)
+
+___
+
+### createCapsuleShape
+
+▸ **createCapsuleShape**(`object3D`, `radius?`, `height?`): [`btCapsuleShape`](Ammo.btCapsuleShape.md)
+
+创建胶囊型碰撞形状,适用于胶囊形物体。
+如果未指定尺寸,则使用三维对象的包围盒半径 `X` 和高度 `Y`。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `object3D` | `Object3D` | 用于创建碰撞体的三维对象。 |
+| `radius?` | `number` | 可选参数,胶囊的半径。 |
+| `height?` | `number` | 可选参数,胶囊中间的圆柱部分的高度。 |
+
+#### Returns
+
+[`btCapsuleShape`](Ammo.btCapsuleShape.md)
+
+Ammo.btCapsuleShape - 胶囊型碰撞形状实例。
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:66](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L66)
+
+___
+
+### createCylinderShape
+
+▸ **createCylinderShape**(`object3D`, `radius?`, `height?`): [`btCylinderShape`](Ammo.btCylinderShape.md)
+
+创建圆柱型碰撞形状,适用于圆柱形物体。
+如果未指定尺寸,则使用三维对象的包围盒半径 `X` 和高度 `Y`。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `object3D` | `Object3D` | 用于创建碰撞体的三维对象。 |
+| `radius?` | `number` | 可选参数,圆柱的半径。 |
+| `height?` | `number` | 可选参数,圆柱的完整高度。 |
+
+#### Returns
+
+[`btCylinderShape`](Ammo.btCylinderShape.md)
+
+Ammo.btCylinderShape - 圆柱型碰撞形状实例。
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:85](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L85)
+
+___
+
+### createConeShape
+
+▸ **createConeShape**(`object3D`, `radius?`, `height?`): [`btConeShape`](Ammo.btConeShape.md)
+
+创建圆锥形碰撞形状,适用于圆锥形物体。
+如果未指定尺寸,则使用三维对象的包围盒半径 `X` 和高度 `Y`。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `object3D` | `Object3D` | 用于创建碰撞体的三维对象。 |
+| `radius?` | `number` | 可选参数,圆锥的半径。 |
+| `height?` | `number` | 可选参数,圆锥的高度。 |
+
+#### Returns
+
+[`btConeShape`](Ammo.btConeShape.md)
+
+Ammo.btConeShape - 圆锥形碰撞形状实例。
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:105](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L105)
+
+___
+
+### createCompoundShape
+
+▸ **createCompoundShape**(`childShapes`): [`btCompoundShape`](Ammo.btCompoundShape.md)
+
+创建复合形状,将多个子形状组合成一个形状。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `childShapes` | [`ChildShape`](../interfaces/ChildShape.md)[] | 包含子形状实例与位置、旋转属性的数组。 |
+
+#### Returns
+
+[`btCompoundShape`](Ammo.btCompoundShape.md)
+
+Ammo.btCompoundShape - 复合形状实例。
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:121](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L121)
+
+___
+
+### createCompoundShapeFromObject
+
+▸ **createCompoundShapeFromObject**(`object3D`, `includeParent?`): [`btCompoundShape`](Ammo.btCompoundShape.md)
+
+根据 Object3D 对象及其子对象创建复合碰撞形状。
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `object3D` | `Object3D` | `undefined` | 三维对象,包含多个子对象。 |
+| `includeParent` | `boolean` | `true` | 是否包含父对象的几何体,默认值为 `true`。 |
+
+#### Returns
+
+[`btCompoundShape`](Ammo.btCompoundShape.md)
+
+复合碰撞形状。
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:142](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L142)
+
+___
+
+### createShapeFromObject
+
+▸ **createShapeFromObject**(`object3D`): [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+根据 Object3D 对象的几何体类型创建相应的碰撞形状。
+
+仅支持Box、Sphere、Plane、Cylinder类型的几何体。对于不匹配的几何体类型,返回 btConvexHullShape 凸包形状。
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `object3D` | `Object3D` |
+
+#### Returns
+
+[`btCollisionShape`](Ammo.btCollisionShape.md)
+
+Ammo.btCollisionShape
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:188](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L188)
+
+___
+
+### createHeightfieldTerrainShape
+
+▸ **createHeightfieldTerrainShape**(`object3D`, `heightScale?`, `upAxis?`, `hdt?`, `flipQuadEdges?`): [`btHeightfieldTerrainShape`](Ammo.btHeightfieldTerrainShape.md)
+
+创建高度场形状,基于平面顶点数据模拟地形。
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `object3D` | `Object3D` | `undefined` | 用于创建碰撞体的三维对象。 |
+| `heightScale` | `number` | `1` | 高度缩放比例,默认值为 `1`。 |
+| `upAxis` | `number` | `1` | 高度场的上轴,默认值为 `1`。 |
+| `hdt` | [`PHY_ScalarType`](../types/Ammo.PHY_ScalarType.md) | `'PHY_FLOAT'` | 高度场的数据类型,默认值为 `Ammo.PHY_FLOAT`。 |
+| `flipQuadEdges` | `boolean` | `false` | 是否翻转四边形的边,默认值为 `false`。 |
+
+#### Returns
+
+[`btHeightfieldTerrainShape`](Ammo.btHeightfieldTerrainShape.md)
+
+Ammo.btHeightfieldTerrainShape - 高度场形状实例。
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:246](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L246)
+
+___
+
+### createConvexHullShape
+
+▸ **createConvexHullShape**(`object3D`, `modelVertices?`): [`btConvexHullShape`](Ammo.btConvexHullShape.md)
+
+创建凸包形状,适用于具有凹陷填充的模型。
+此形状适用于动态物体并提供快速的碰撞检测。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `object3D` | `Object3D` | 用于创建碰撞体的三维对象。 |
+| `modelVertices?` | `Float32Array` | 可选参数,提供碰撞体所需的顶点数据,默认为三维对象的顶点数据。 |
+
+#### Returns
+
+[`btConvexHullShape`](Ammo.btConvexHullShape.md)
+
+Ammo.btConvexHullShape - 凸包形状实例。
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:299](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L299)
+
+___
+
+### createConvexTriangleMeshShape
+
+▸ **createConvexTriangleMeshShape**(`object3D`, `modelVertices?`, `modelIndices?`): [`btBvhTriangleMeshShape`](Ammo.btBvhTriangleMeshShape.md)
+
+创建凸包网格形状,适用于需要复杂几何表示的动态物体。
+此形状不要求额外的凸包生成步骤,适用于凸的三角形网格。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `object3D` | `Object3D` | 用于创建碰撞体的三维对象。 |
+| `modelVertices?` | `Float32Array` | 可选参数,提供碰撞体所需的顶点数据。 |
+| `modelIndices?` | `Uint16Array` | 可选参数,提供碰撞体所需的索引数据。 |
+
+#### Returns
+
+[`btBvhTriangleMeshShape`](Ammo.btBvhTriangleMeshShape.md)
+
+Ammo.btConvexTriangleMeshShape - 凸包网格形状实例。
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:322](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L322)
+
+___
+
+### createBvhTriangleMeshShape
+
+▸ **createBvhTriangleMeshShape**(`object3D`, `modelVertices?`, `modelIndices?`): [`btBvhTriangleMeshShape`](Ammo.btBvhTriangleMeshShape.md)
+
+创建边界体积层次(BVH)网格形状,适用于需要复杂几何表示的静态物体。
+此形状适合大规模静态网格,但对动态对象不适用。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `object3D` | `Object3D` | 用于创建碰撞体的三维对象。 |
+| `modelVertices?` | `Float32Array` | 可选参数,提供碰撞体所需的顶点数据。 |
+| `modelIndices?` | `Uint16Array` | 可选参数,提供碰撞体所需的索引数据。 |
+
+#### Returns
+
+[`btBvhTriangleMeshShape`](Ammo.btBvhTriangleMeshShape.md)
+
+Ammo.btBvhTriangleMeshShape - BVH 网格形状实例。
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:349](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L349)
+
+___
+
+### createGImpactMeshShape
+
+▸ **createGImpactMeshShape**(`object3D`, `modelVertices?`, `modelIndices?`): [`btGImpactMeshShape`](Ammo.btGImpactMeshShape.md)
+
+创建 GImpact 网格形状,适用于需要复杂几何表示的动态物体。
+基于 GIMPACT 算法,可以用于复杂的三角网格碰撞检测,包括动态物体的交互,此形状性能消耗较高,但提供更精确的碰撞检测。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `object3D` | `Object3D` | 用于创建碰撞体的三维对象。 |
+| `modelVertices?` | `Float32Array` | 可选参数,提供碰撞体所需的顶点数据。 |
+| `modelIndices?` | `Uint16Array` | 可选参数,提供碰撞体所需的索引数据。 |
+
+#### Returns
+
+[`btGImpactMeshShape`](Ammo.btGImpactMeshShape.md)
+
+Ammo.btGImpactMeshShape - GImpact 网格形状实例。
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:376](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L376)
+
+___
+
+### buildTriangleMesh
+
+▸ **buildTriangleMesh**(`vertices`, `indices`): [`btTriangleMesh`](Ammo.btTriangleMesh.md)
+
+构建 btTriangleMesh 对象,用于创建网格形状。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `vertices` | `Float32Array` | 顶点数据,按 xyz 顺序排列。 |
+| `indices` | `Uint16Array` | 索引数据,定义三角形的顶点索引。 |
+
+#### Returns
+
+[`btTriangleMesh`](Ammo.btTriangleMesh.md)
+
+Ammo.btTriangleMesh - 构建的三角形网格。
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:402](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L402)
+
+___
+
+### getAllMeshVerticesAndIndices
+
+▸ **getAllMeshVerticesAndIndices**(`object3D`, `isTransformChildren?`): `Object`
+
+获取3D对象所有网格的顶点与索引。
+
+#### Parameters
+
+| Name | Type | Default value | Description |
+| :------ | :------ | :------ | :------ |
+| `object3D` | `Object3D` | `undefined` | 三维对象。 |
+| `isTransformChildren` | `boolean` | `true` | 是否将子对象的顶点转换到父对象的局部坐标系。默认值为 `true`。 |
+
+#### Returns
+
+`Object`
+
+顶点数据和索引数据。
+
+| Name | Type |
+| :------ | :------ |
+| `vertices` | `Float32Array` |
+| `indices` | `Uint16Array` |
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:426](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L426)
diff --git a/docs/physics/classes/ConeTwistConstraint.md b/docs/physics/classes/ConeTwistConstraint.md
new file mode 100644
index 00000000..45ba8abd
--- /dev/null
+++ b/docs/physics/classes/ConeTwistConstraint.md
@@ -0,0 +1,943 @@
+# Class: ConeTwistConstraint
+
+锥形扭转约束
+
+## Hierarchy
+
+- `ConstraintBase`\<[`btConeTwistConstraint`](Ammo.btConeTwistConstraint.md)\>
+
+ ↳ **`ConeTwistConstraint`**
+
+### Constructors
+
+- [constructor](ConeTwistConstraint.md#constructor)
+
+### Properties
+
+- [pivotSelf](ConeTwistConstraint.md#pivotself)
+- [pivotTarget](ConeTwistConstraint.md#pivottarget)
+- [rotationSelf](ConeTwistConstraint.md#rotationself)
+- [rotationTarget](ConeTwistConstraint.md#rotationtarget)
+- [disableCollisionsBetweenLinkedBodies](ConeTwistConstraint.md#disablecollisionsbetweenlinkedbodies)
+- [object3D](ConeTwistConstraint.md#object3d)
+- [isDestroyed](ConeTwistConstraint.md#isdestroyed)
+
+### Accessors
+
+- [twistSpan](ConeTwistConstraint.md#twistspan)
+- [swingSpan1](ConeTwistConstraint.md#swingspan1)
+- [swingSpan2](ConeTwistConstraint.md#swingspan2)
+- [breakingThreshold](ConeTwistConstraint.md#breakingthreshold)
+- [constraint](ConeTwistConstraint.md#constraint)
+- [targetRigidbody](ConeTwistConstraint.md#targetrigidbody)
+- [eventDispatcher](ConeTwistConstraint.md#eventdispatcher)
+- [isStart](ConeTwistConstraint.md#isstart)
+- [transform](ConeTwistConstraint.md#transform)
+- [enable](ConeTwistConstraint.md#enable)
+
+### Methods
+
+- [start](ConeTwistConstraint.md#start)
+- [wait](ConeTwistConstraint.md#wait)
+- [resetConstraint](ConeTwistConstraint.md#resetconstraint)
+- [destroy](ConeTwistConstraint.md#destroy)
+- [init](ConeTwistConstraint.md#init)
+- [stop](ConeTwistConstraint.md#stop)
+- [onEnable](ConeTwistConstraint.md#onenable)
+- [onDisable](ConeTwistConstraint.md#ondisable)
+- [onUpdate](ConeTwistConstraint.md#onupdate)
+- [onLateUpdate](ConeTwistConstraint.md#onlateupdate)
+- [onBeforeUpdate](ConeTwistConstraint.md#onbeforeupdate)
+- [onCompute](ConeTwistConstraint.md#oncompute)
+- [onGraphic](ConeTwistConstraint.md#ongraphic)
+- [onParentChange](ConeTwistConstraint.md#onparentchange)
+- [onAddChild](ConeTwistConstraint.md#onaddchild)
+- [onRemoveChild](ConeTwistConstraint.md#onremovechild)
+- [cloneTo](ConeTwistConstraint.md#cloneto)
+- [copyComponent](ConeTwistConstraint.md#copycomponent)
+- [beforeDestroy](ConeTwistConstraint.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new ConeTwistConstraint**(): [`ConeTwistConstraint`](ConeTwistConstraint.md)
+
+#### Returns
+
+[`ConeTwistConstraint`](ConeTwistConstraint.md)
+
+#### Inherited from
+
+ConstraintBase\.constructor
+
+## Properties
+
+### pivotSelf
+
+• **pivotSelf**: `Vector3`
+
+The pivot point for the self body
+`FrameInA Origin`
+
+#### Inherited from
+
+ConstraintBase.pivotSelf
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L19)
+
+___
+
+### pivotTarget
+
+• **pivotTarget**: `Vector3`
+
+The pivot point for the target body
+`FrameInB Origin`
+
+#### Inherited from
+
+ConstraintBase.pivotTarget
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L24)
+
+___
+
+### rotationSelf
+
+• **rotationSelf**: `Quaternion`
+
+The rotation for the self body
+`FrameInA Rotation`
+
+#### Inherited from
+
+ConstraintBase.rotationSelf
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L29)
+
+___
+
+### rotationTarget
+
+• **rotationTarget**: `Quaternion`
+
+The rotation for the target body
+`FrameInB Rotation`
+
+#### Inherited from
+
+ConstraintBase.rotationTarget
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:34](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L34)
+
+___
+
+### disableCollisionsBetweenLinkedBodies
+
+• **disableCollisionsBetweenLinkedBodies**: `boolean` = `true`
+
+#### Inherited from
+
+ConstraintBase.disableCollisionsBetweenLinkedBodies
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:36](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L36)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+ConstraintBase.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+ConstraintBase.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### twistSpan
+
+• `get` **twistSpan**(): `number`
+
+扭转角度限制,绕 X 轴的扭转范围。
+默认值 `Math.PI`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/constraint/ConeTwistConstraint.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConeTwistConstraint.ts#L17)
+
+• `set` **twistSpan**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/ConeTwistConstraint.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConeTwistConstraint.ts#L20)
+
+___
+
+### swingSpan1
+
+• `get` **swingSpan1**(): `number`
+
+摆动角度限制1,绕 Y 轴的摆动范围。
+默认值 `Math.PI`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/constraint/ConeTwistConstraint.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConeTwistConstraint.ts#L29)
+
+• `set` **swingSpan1**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/ConeTwistConstraint.ts:32](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConeTwistConstraint.ts#L32)
+
+___
+
+### swingSpan2
+
+• `get` **swingSpan2**(): `number`
+
+摆动角度限制2,绕 Z 轴的摆动范围。
+默认值 `Math.PI`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/constraint/ConeTwistConstraint.ts:41](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConeTwistConstraint.ts#L41)
+
+• `set` **swingSpan2**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/ConeTwistConstraint.ts:44](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConeTwistConstraint.ts#L44)
+
+___
+
+### breakingThreshold
+
+• `get` **breakingThreshold**(): `number`
+
+断裂脉冲阈值,值越大,约束越不易断裂。
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+ConstraintBase.breakingThreshold
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L41)
+
+• `set` **breakingThreshold**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.breakingThreshold
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L45)
+
+___
+
+### constraint
+
+• `get` **constraint**(): `T`
+
+获取约束实例
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+ConstraintBase.constraint
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L87)
+
+___
+
+### targetRigidbody
+
+• `get` **targetRigidbody**(): [`Rigidbody`](Rigidbody.md)
+
+目标刚体组件
+
+#### Returns
+
+[`Rigidbody`](Rigidbody.md)
+
+#### Inherited from
+
+ConstraintBase.targetRigidbody
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L119)
+
+• `set` **targetRigidbody**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Rigidbody`](Rigidbody.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.targetRigidbody
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L123)
+
+___
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+ConstraintBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ConstraintBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+ConstraintBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ConstraintBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### start
+
+▸ **start**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Inherited from
+
+ConstraintBase.start
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:50](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L50)
+
+___
+
+### wait
+
+▸ **wait**(): `Promise`\<[`btConeTwistConstraint`](Ammo.btConeTwistConstraint.md)\>
+
+异步获取完成初始化的约束实例
+
+#### Returns
+
+`Promise`\<[`btConeTwistConstraint`](Ammo.btConeTwistConstraint.md)\>
+
+#### Inherited from
+
+ConstraintBase.wait
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:97](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L97)
+
+___
+
+### resetConstraint
+
+▸ **resetConstraint**(): `Promise`\<[`btConeTwistConstraint`](Ammo.btConeTwistConstraint.md)\>
+
+重置约束,销毁当前约束实例后重新创建并返回新的约束实例
+
+#### Returns
+
+`Promise`\<[`btConeTwistConstraint`](Ammo.btConeTwistConstraint.md)\>
+
+#### Inherited from
+
+ConstraintBase.resetConstraint
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:105](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L105)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.destroy
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:127](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L127)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.init
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onEnable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onDisable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `Object3D` | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+ConstraintBase.copyComponent
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.beforeDestroy
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
diff --git a/docs/physics/classes/ContactProcessedUtil.md b/docs/physics/classes/ContactProcessedUtil.md
new file mode 100644
index 00000000..16fe438c
--- /dev/null
+++ b/docs/physics/classes/ContactProcessedUtil.md
@@ -0,0 +1,223 @@
+# Class: ContactProcessedUtil
+
+碰撞处理工具
+
+### Constructors
+
+- [constructor](ContactProcessedUtil.md#constructor)
+
+### Methods
+
+- [registerCollisionCallback](ContactProcessedUtil.md#registercollisioncallback)
+- [unregisterCollisionCallback](ContactProcessedUtil.md#unregistercollisioncallback)
+- [addIgnoredPointer](ContactProcessedUtil.md#addignoredpointer)
+- [removeIgnoredPointer](ContactProcessedUtil.md#removeignoredpointer)
+- [isIgnored](ContactProcessedUtil.md#isignored)
+- [isCollision](ContactProcessedUtil.md#iscollision)
+- [performCollisionTest](ContactProcessedUtil.md#performcollisiontest)
+- [checkCollision](ContactProcessedUtil.md#checkcollision)
+
+## Constructors
+
+### constructor
+
+• **new ContactProcessedUtil**(): [`ContactProcessedUtil`](ContactProcessedUtil.md)
+
+#### Returns
+
+[`ContactProcessedUtil`](ContactProcessedUtil.md)
+
+## Methods
+
+### registerCollisionCallback
+
+▸ **registerCollisionCallback**(`pointer`, `callback`): `void`
+
+注册碰撞事件
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pointer` | `number` | 物理对象指针 |
+| `callback` | `Callback` | 事件回调 |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/ContactProcessedUtil.ts:18](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/ContactProcessedUtil.ts#L18)
+
+___
+
+### unregisterCollisionCallback
+
+▸ **unregisterCollisionCallback**(`pointer`): `void`
+
+注销碰撞事件
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pointer` | `number` | 物理对象指针 |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/ContactProcessedUtil.ts:32](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/ContactProcessedUtil.ts#L32)
+
+___
+
+### addIgnoredPointer
+
+▸ **addIgnoredPointer**(`pointer`): `void`
+
+将指针添加到忽略集合中,添加后,任何物体与该指针对象碰撞时都无法触发碰撞事件
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pointer` | `number` | 物理对象指针 |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/ContactProcessedUtil.ts:64](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/ContactProcessedUtil.ts#L64)
+
+___
+
+### removeIgnoredPointer
+
+▸ **removeIgnoredPointer**(`pointer`): `void`
+
+从忽略集合中移除指针
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pointer` | `number` | 物理对象指针 |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/ContactProcessedUtil.ts:74](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/ContactProcessedUtil.ts#L74)
+
+___
+
+### isIgnored
+
+▸ **isIgnored**(`pointer`): `boolean`
+
+检查指针是否在忽略集合中
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pointer` | `number` | 物理对象指针 |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/physics/utils/ContactProcessedUtil.ts:82](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/ContactProcessedUtil.ts#L82)
+
+___
+
+### isCollision
+
+▸ **isCollision**(`pointer`): `boolean`
+
+检查指针是否注册了碰撞事件
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `pointer` | `number` | 物理对象指针 |
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/physics/utils/ContactProcessedUtil.ts:90](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/ContactProcessedUtil.ts#L90)
+
+___
+
+### performCollisionTest
+
+▸ **performCollisionTest**(`bodyA`, `bodyB?`): `Object`
+
+执行一次性的碰撞测试。
+如果提供了 bodyB,则检测 bodyA 与 bodyB 是否碰撞。
+否则,检测 bodyA 是否与其他所有刚体碰撞。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `bodyA` | [`btRigidBody`](Ammo.btRigidBody.md) | 第一个刚体。 |
+| `bodyB?` | [`btRigidBody`](Ammo.btRigidBody.md) | (可选)第二个刚体。 |
+
+#### Returns
+
+`Object`
+
+如果发生碰撞,返回包含碰撞信息的对象;否则返回 null。
+
+| Name | Type |
+| :------ | :------ |
+| `cpPtr` | `number` |
+| `colObj0Wrap` | [`btCollisionObjectWrapper`](Ammo.btCollisionObjectWrapper.md) |
+| `colObj1Wrap` | [`btCollisionObjectWrapper`](Ammo.btCollisionObjectWrapper.md) |
+| `partId0` | `number` |
+| `index0` | `number` |
+| `partId1` | `number` |
+| `index1` | `number` |
+
+#### Defined in
+
+[packages/physics/utils/ContactProcessedUtil.ts:129](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/ContactProcessedUtil.ts#L129)
+
+___
+
+### checkCollision
+
+▸ **checkCollision**(`bodyA`, `bodyB`): `boolean`
+
+碰撞检测,判断两个刚体是否正在发生碰撞
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bodyA` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `bodyB` | [`btRigidBody`](Ammo.btRigidBody.md) |
+
+#### Returns
+
+`boolean`
+
+boolean
+
+#### Defined in
+
+[packages/physics/utils/ContactProcessedUtil.ts:174](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/ContactProcessedUtil.ts#L174)
diff --git a/docs/physics/classes/FixedConstraint.md b/docs/physics/classes/FixedConstraint.md
new file mode 100644
index 00000000..dc59dc21
--- /dev/null
+++ b/docs/physics/classes/FixedConstraint.md
@@ -0,0 +1,841 @@
+# Class: FixedConstraint
+
+固定约束
+
+## Hierarchy
+
+- `ConstraintBase`\<[`btFixedConstraint`](Ammo.btFixedConstraint.md)\>
+
+ ↳ **`FixedConstraint`**
+
+### Constructors
+
+- [constructor](FixedConstraint.md#constructor)
+
+### Properties
+
+- [pivotSelf](FixedConstraint.md#pivotself)
+- [pivotTarget](FixedConstraint.md#pivottarget)
+- [rotationSelf](FixedConstraint.md#rotationself)
+- [rotationTarget](FixedConstraint.md#rotationtarget)
+- [disableCollisionsBetweenLinkedBodies](FixedConstraint.md#disablecollisionsbetweenlinkedbodies)
+- [object3D](FixedConstraint.md#object3d)
+- [isDestroyed](FixedConstraint.md#isdestroyed)
+
+### Accessors
+
+- [breakingThreshold](FixedConstraint.md#breakingthreshold)
+- [constraint](FixedConstraint.md#constraint)
+- [targetRigidbody](FixedConstraint.md#targetrigidbody)
+- [eventDispatcher](FixedConstraint.md#eventdispatcher)
+- [isStart](FixedConstraint.md#isstart)
+- [transform](FixedConstraint.md#transform)
+- [enable](FixedConstraint.md#enable)
+
+### Methods
+
+- [start](FixedConstraint.md#start)
+- [wait](FixedConstraint.md#wait)
+- [resetConstraint](FixedConstraint.md#resetconstraint)
+- [destroy](FixedConstraint.md#destroy)
+- [init](FixedConstraint.md#init)
+- [stop](FixedConstraint.md#stop)
+- [onEnable](FixedConstraint.md#onenable)
+- [onDisable](FixedConstraint.md#ondisable)
+- [onUpdate](FixedConstraint.md#onupdate)
+- [onLateUpdate](FixedConstraint.md#onlateupdate)
+- [onBeforeUpdate](FixedConstraint.md#onbeforeupdate)
+- [onCompute](FixedConstraint.md#oncompute)
+- [onGraphic](FixedConstraint.md#ongraphic)
+- [onParentChange](FixedConstraint.md#onparentchange)
+- [onAddChild](FixedConstraint.md#onaddchild)
+- [onRemoveChild](FixedConstraint.md#onremovechild)
+- [cloneTo](FixedConstraint.md#cloneto)
+- [copyComponent](FixedConstraint.md#copycomponent)
+- [beforeDestroy](FixedConstraint.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new FixedConstraint**(): [`FixedConstraint`](FixedConstraint.md)
+
+#### Returns
+
+[`FixedConstraint`](FixedConstraint.md)
+
+#### Inherited from
+
+ConstraintBase\.constructor
+
+## Properties
+
+### pivotSelf
+
+• **pivotSelf**: `Vector3`
+
+The pivot point for the self body
+`FrameInA Origin`
+
+#### Inherited from
+
+ConstraintBase.pivotSelf
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L19)
+
+___
+
+### pivotTarget
+
+• **pivotTarget**: `Vector3`
+
+The pivot point for the target body
+`FrameInB Origin`
+
+#### Inherited from
+
+ConstraintBase.pivotTarget
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L24)
+
+___
+
+### rotationSelf
+
+• **rotationSelf**: `Quaternion`
+
+The rotation for the self body
+`FrameInA Rotation`
+
+#### Inherited from
+
+ConstraintBase.rotationSelf
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L29)
+
+___
+
+### rotationTarget
+
+• **rotationTarget**: `Quaternion`
+
+The rotation for the target body
+`FrameInB Rotation`
+
+#### Inherited from
+
+ConstraintBase.rotationTarget
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:34](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L34)
+
+___
+
+### disableCollisionsBetweenLinkedBodies
+
+• **disableCollisionsBetweenLinkedBodies**: `boolean` = `true`
+
+#### Inherited from
+
+ConstraintBase.disableCollisionsBetweenLinkedBodies
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:36](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L36)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+ConstraintBase.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+ConstraintBase.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### breakingThreshold
+
+• `get` **breakingThreshold**(): `number`
+
+断裂脉冲阈值,值越大,约束越不易断裂。
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+ConstraintBase.breakingThreshold
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L41)
+
+• `set` **breakingThreshold**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.breakingThreshold
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L45)
+
+___
+
+### constraint
+
+• `get` **constraint**(): `T`
+
+获取约束实例
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+ConstraintBase.constraint
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L87)
+
+___
+
+### targetRigidbody
+
+• `get` **targetRigidbody**(): [`Rigidbody`](Rigidbody.md)
+
+目标刚体组件
+
+#### Returns
+
+[`Rigidbody`](Rigidbody.md)
+
+#### Inherited from
+
+ConstraintBase.targetRigidbody
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L119)
+
+• `set` **targetRigidbody**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Rigidbody`](Rigidbody.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.targetRigidbody
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L123)
+
+___
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+ConstraintBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ConstraintBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+ConstraintBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ConstraintBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### start
+
+▸ **start**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Inherited from
+
+ConstraintBase.start
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:50](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L50)
+
+___
+
+### wait
+
+▸ **wait**(): `Promise`\<[`btFixedConstraint`](Ammo.btFixedConstraint.md)\>
+
+异步获取完成初始化的约束实例
+
+#### Returns
+
+`Promise`\<[`btFixedConstraint`](Ammo.btFixedConstraint.md)\>
+
+#### Inherited from
+
+ConstraintBase.wait
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:97](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L97)
+
+___
+
+### resetConstraint
+
+▸ **resetConstraint**(): `Promise`\<[`btFixedConstraint`](Ammo.btFixedConstraint.md)\>
+
+重置约束,销毁当前约束实例后重新创建并返回新的约束实例
+
+#### Returns
+
+`Promise`\<[`btFixedConstraint`](Ammo.btFixedConstraint.md)\>
+
+#### Inherited from
+
+ConstraintBase.resetConstraint
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:105](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L105)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.destroy
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:127](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L127)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.init
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onEnable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onDisable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `Object3D` | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+ConstraintBase.copyComponent
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.beforeDestroy
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
diff --git a/docs/physics/classes/Generic6DofConstraint.md b/docs/physics/classes/Generic6DofConstraint.md
new file mode 100644
index 00000000..baa27fe7
--- /dev/null
+++ b/docs/physics/classes/Generic6DofConstraint.md
@@ -0,0 +1,987 @@
+# Class: Generic6DofConstraint
+
+通用六自由度约束
+
+## Hierarchy
+
+- `ConstraintBase`\<[`btGeneric6DofConstraint`](Ammo.btGeneric6DofConstraint.md)\>
+
+ ↳ **`Generic6DofConstraint`**
+
+### Constructors
+
+- [constructor](Generic6DofConstraint.md#constructor)
+
+### Properties
+
+- [pivotSelf](Generic6DofConstraint.md#pivotself)
+- [pivotTarget](Generic6DofConstraint.md#pivottarget)
+- [rotationSelf](Generic6DofConstraint.md#rotationself)
+- [rotationTarget](Generic6DofConstraint.md#rotationtarget)
+- [disableCollisionsBetweenLinkedBodies](Generic6DofConstraint.md#disablecollisionsbetweenlinkedbodies)
+- [useLinearFrameReferenceFrame](Generic6DofConstraint.md#uselinearframereferenceframe)
+- [object3D](Generic6DofConstraint.md#object3d)
+- [isDestroyed](Generic6DofConstraint.md#isdestroyed)
+
+### Accessors
+
+- [breakingThreshold](Generic6DofConstraint.md#breakingthreshold)
+- [constraint](Generic6DofConstraint.md#constraint)
+- [targetRigidbody](Generic6DofConstraint.md#targetrigidbody)
+- [linearLowerLimit](Generic6DofConstraint.md#linearlowerlimit)
+- [linearUpperLimit](Generic6DofConstraint.md#linearupperlimit)
+- [angularLowerLimit](Generic6DofConstraint.md#angularlowerlimit)
+- [angularUpperLimit](Generic6DofConstraint.md#angularupperlimit)
+- [eventDispatcher](Generic6DofConstraint.md#eventdispatcher)
+- [isStart](Generic6DofConstraint.md#isstart)
+- [transform](Generic6DofConstraint.md#transform)
+- [enable](Generic6DofConstraint.md#enable)
+
+### Methods
+
+- [start](Generic6DofConstraint.md#start)
+- [wait](Generic6DofConstraint.md#wait)
+- [resetConstraint](Generic6DofConstraint.md#resetconstraint)
+- [destroy](Generic6DofConstraint.md#destroy)
+- [init](Generic6DofConstraint.md#init)
+- [stop](Generic6DofConstraint.md#stop)
+- [onEnable](Generic6DofConstraint.md#onenable)
+- [onDisable](Generic6DofConstraint.md#ondisable)
+- [onUpdate](Generic6DofConstraint.md#onupdate)
+- [onLateUpdate](Generic6DofConstraint.md#onlateupdate)
+- [onBeforeUpdate](Generic6DofConstraint.md#onbeforeupdate)
+- [onCompute](Generic6DofConstraint.md#oncompute)
+- [onGraphic](Generic6DofConstraint.md#ongraphic)
+- [onParentChange](Generic6DofConstraint.md#onparentchange)
+- [onAddChild](Generic6DofConstraint.md#onaddchild)
+- [onRemoveChild](Generic6DofConstraint.md#onremovechild)
+- [cloneTo](Generic6DofConstraint.md#cloneto)
+- [copyComponent](Generic6DofConstraint.md#copycomponent)
+- [beforeDestroy](Generic6DofConstraint.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new Generic6DofConstraint**(): [`Generic6DofConstraint`](Generic6DofConstraint.md)
+
+#### Returns
+
+[`Generic6DofConstraint`](Generic6DofConstraint.md)
+
+#### Inherited from
+
+ConstraintBase\.constructor
+
+## Properties
+
+### pivotSelf
+
+• **pivotSelf**: `Vector3`
+
+The pivot point for the self body
+`FrameInA Origin`
+
+#### Inherited from
+
+ConstraintBase.pivotSelf
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L19)
+
+___
+
+### pivotTarget
+
+• **pivotTarget**: `Vector3`
+
+The pivot point for the target body
+`FrameInB Origin`
+
+#### Inherited from
+
+ConstraintBase.pivotTarget
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L24)
+
+___
+
+### rotationSelf
+
+• **rotationSelf**: `Quaternion`
+
+The rotation for the self body
+`FrameInA Rotation`
+
+#### Inherited from
+
+ConstraintBase.rotationSelf
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L29)
+
+___
+
+### rotationTarget
+
+• **rotationTarget**: `Quaternion`
+
+The rotation for the target body
+`FrameInB Rotation`
+
+#### Inherited from
+
+ConstraintBase.rotationTarget
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:34](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L34)
+
+___
+
+### disableCollisionsBetweenLinkedBodies
+
+• **disableCollisionsBetweenLinkedBodies**: `boolean` = `true`
+
+#### Inherited from
+
+ConstraintBase.disableCollisionsBetweenLinkedBodies
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:36](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L36)
+
+___
+
+### useLinearFrameReferenceFrame
+
+• **useLinearFrameReferenceFrame**: `boolean` = `true`
+
+是否使用线性参考坐标系。
+默认值: `true`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofConstraint.ts:63](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofConstraint.ts#L63)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+ConstraintBase.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+ConstraintBase.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### breakingThreshold
+
+• `get` **breakingThreshold**(): `number`
+
+断裂脉冲阈值,值越大,约束越不易断裂。
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+ConstraintBase.breakingThreshold
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L41)
+
+• `set` **breakingThreshold**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.breakingThreshold
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L45)
+
+___
+
+### constraint
+
+• `get` **constraint**(): `T`
+
+获取约束实例
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+ConstraintBase.constraint
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L87)
+
+___
+
+### targetRigidbody
+
+• `get` **targetRigidbody**(): [`Rigidbody`](Rigidbody.md)
+
+目标刚体组件
+
+#### Returns
+
+[`Rigidbody`](Rigidbody.md)
+
+#### Inherited from
+
+ConstraintBase.targetRigidbody
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L119)
+
+• `set` **targetRigidbody**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Rigidbody`](Rigidbody.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.targetRigidbody
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L123)
+
+___
+
+### linearLowerLimit
+
+• `get` **linearLowerLimit**(): `Vector3`
+
+default: `-1e30, -1e30, -1e30`
+
+#### Returns
+
+`Vector3`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofConstraint.ts:18](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofConstraint.ts#L18)
+
+• `set` **linearLowerLimit**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofConstraint.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofConstraint.ts#L21)
+
+___
+
+### linearUpperLimit
+
+• `get` **linearUpperLimit**(): `Vector3`
+
+default: `1e30, 1e30, 1e30`
+
+#### Returns
+
+`Vector3`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofConstraint.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofConstraint.ts#L29)
+
+• `set` **linearUpperLimit**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofConstraint.ts:32](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofConstraint.ts#L32)
+
+___
+
+### angularLowerLimit
+
+• `get` **angularLowerLimit**(): `Vector3`
+
+default: `-Math.PI, -Math.PI, -Math.PI`
+
+#### Returns
+
+`Vector3`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofConstraint.ts:40](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofConstraint.ts#L40)
+
+• `set` **angularLowerLimit**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofConstraint.ts:43](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofConstraint.ts#L43)
+
+___
+
+### angularUpperLimit
+
+• `get` **angularUpperLimit**(): `Vector3`
+
+default: `Math.PI, Math.PI, Math.PI`
+
+#### Returns
+
+`Vector3`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofConstraint.ts:51](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofConstraint.ts#L51)
+
+• `set` **angularUpperLimit**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofConstraint.ts:54](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofConstraint.ts#L54)
+
+___
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+ConstraintBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ConstraintBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+ConstraintBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ConstraintBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### start
+
+▸ **start**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Inherited from
+
+ConstraintBase.start
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:50](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L50)
+
+___
+
+### wait
+
+▸ **wait**(): `Promise`\<[`btGeneric6DofConstraint`](Ammo.btGeneric6DofConstraint.md)\>
+
+异步获取完成初始化的约束实例
+
+#### Returns
+
+`Promise`\<[`btGeneric6DofConstraint`](Ammo.btGeneric6DofConstraint.md)\>
+
+#### Inherited from
+
+ConstraintBase.wait
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:97](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L97)
+
+___
+
+### resetConstraint
+
+▸ **resetConstraint**(): `Promise`\<[`btGeneric6DofConstraint`](Ammo.btGeneric6DofConstraint.md)\>
+
+重置约束,销毁当前约束实例后重新创建并返回新的约束实例
+
+#### Returns
+
+`Promise`\<[`btGeneric6DofConstraint`](Ammo.btGeneric6DofConstraint.md)\>
+
+#### Inherited from
+
+ConstraintBase.resetConstraint
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:105](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L105)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.destroy
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:127](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L127)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.init
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onEnable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onDisable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `Object3D` | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+ConstraintBase.copyComponent
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.beforeDestroy
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
diff --git a/docs/physics/classes/Generic6DofSpringConstraint.md b/docs/physics/classes/Generic6DofSpringConstraint.md
new file mode 100644
index 00000000..0fbce11a
--- /dev/null
+++ b/docs/physics/classes/Generic6DofSpringConstraint.md
@@ -0,0 +1,1083 @@
+# Class: Generic6DofSpringConstraint
+
+弹簧特性六自由度约束
+
+## Hierarchy
+
+- `ConstraintBase`\<[`btGeneric6DofSpringConstraint`](Ammo.btGeneric6DofSpringConstraint.md)\>
+
+ ↳ **`Generic6DofSpringConstraint`**
+
+### Constructors
+
+- [constructor](Generic6DofSpringConstraint.md#constructor)
+
+### Properties
+
+- [pivotSelf](Generic6DofSpringConstraint.md#pivotself)
+- [pivotTarget](Generic6DofSpringConstraint.md#pivottarget)
+- [rotationSelf](Generic6DofSpringConstraint.md#rotationself)
+- [rotationTarget](Generic6DofSpringConstraint.md#rotationtarget)
+- [disableCollisionsBetweenLinkedBodies](Generic6DofSpringConstraint.md#disablecollisionsbetweenlinkedbodies)
+- [useLinearFrameReferenceFrame](Generic6DofSpringConstraint.md#uselinearframereferenceframe)
+- [object3D](Generic6DofSpringConstraint.md#object3d)
+- [isDestroyed](Generic6DofSpringConstraint.md#isdestroyed)
+
+### Accessors
+
+- [breakingThreshold](Generic6DofSpringConstraint.md#breakingthreshold)
+- [constraint](Generic6DofSpringConstraint.md#constraint)
+- [targetRigidbody](Generic6DofSpringConstraint.md#targetrigidbody)
+- [linearLowerLimit](Generic6DofSpringConstraint.md#linearlowerlimit)
+- [linearUpperLimit](Generic6DofSpringConstraint.md#linearupperlimit)
+- [angularLowerLimit](Generic6DofSpringConstraint.md#angularlowerlimit)
+- [angularUpperLimit](Generic6DofSpringConstraint.md#angularupperlimit)
+- [eventDispatcher](Generic6DofSpringConstraint.md#eventdispatcher)
+- [isStart](Generic6DofSpringConstraint.md#isstart)
+- [transform](Generic6DofSpringConstraint.md#transform)
+- [enable](Generic6DofSpringConstraint.md#enable)
+
+### Methods
+
+- [start](Generic6DofSpringConstraint.md#start)
+- [wait](Generic6DofSpringConstraint.md#wait)
+- [resetConstraint](Generic6DofSpringConstraint.md#resetconstraint)
+- [destroy](Generic6DofSpringConstraint.md#destroy)
+- [enableSpring](Generic6DofSpringConstraint.md#enablespring)
+- [setStiffness](Generic6DofSpringConstraint.md#setstiffness)
+- [setDamping](Generic6DofSpringConstraint.md#setdamping)
+- [setEquilibriumPoint](Generic6DofSpringConstraint.md#setequilibriumpoint)
+- [init](Generic6DofSpringConstraint.md#init)
+- [stop](Generic6DofSpringConstraint.md#stop)
+- [onEnable](Generic6DofSpringConstraint.md#onenable)
+- [onDisable](Generic6DofSpringConstraint.md#ondisable)
+- [onUpdate](Generic6DofSpringConstraint.md#onupdate)
+- [onLateUpdate](Generic6DofSpringConstraint.md#onlateupdate)
+- [onBeforeUpdate](Generic6DofSpringConstraint.md#onbeforeupdate)
+- [onCompute](Generic6DofSpringConstraint.md#oncompute)
+- [onGraphic](Generic6DofSpringConstraint.md#ongraphic)
+- [onParentChange](Generic6DofSpringConstraint.md#onparentchange)
+- [onAddChild](Generic6DofSpringConstraint.md#onaddchild)
+- [onRemoveChild](Generic6DofSpringConstraint.md#onremovechild)
+- [cloneTo](Generic6DofSpringConstraint.md#cloneto)
+- [copyComponent](Generic6DofSpringConstraint.md#copycomponent)
+- [beforeDestroy](Generic6DofSpringConstraint.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new Generic6DofSpringConstraint**(): [`Generic6DofSpringConstraint`](Generic6DofSpringConstraint.md)
+
+#### Returns
+
+[`Generic6DofSpringConstraint`](Generic6DofSpringConstraint.md)
+
+#### Inherited from
+
+ConstraintBase\.constructor
+
+## Properties
+
+### pivotSelf
+
+• **pivotSelf**: `Vector3`
+
+The pivot point for the self body
+`FrameInA Origin`
+
+#### Inherited from
+
+ConstraintBase.pivotSelf
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L19)
+
+___
+
+### pivotTarget
+
+• **pivotTarget**: `Vector3`
+
+The pivot point for the target body
+`FrameInB Origin`
+
+#### Inherited from
+
+ConstraintBase.pivotTarget
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L24)
+
+___
+
+### rotationSelf
+
+• **rotationSelf**: `Quaternion`
+
+The rotation for the self body
+`FrameInA Rotation`
+
+#### Inherited from
+
+ConstraintBase.rotationSelf
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L29)
+
+___
+
+### rotationTarget
+
+• **rotationTarget**: `Quaternion`
+
+The rotation for the target body
+`FrameInB Rotation`
+
+#### Inherited from
+
+ConstraintBase.rotationTarget
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:34](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L34)
+
+___
+
+### disableCollisionsBetweenLinkedBodies
+
+• **disableCollisionsBetweenLinkedBodies**: `boolean` = `true`
+
+#### Inherited from
+
+ConstraintBase.disableCollisionsBetweenLinkedBodies
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:36](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L36)
+
+___
+
+### useLinearFrameReferenceFrame
+
+• **useLinearFrameReferenceFrame**: `boolean` = `true`
+
+是否使用线性参考坐标系。
+默认值 `true`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofSpringConstraint.ts:132](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofSpringConstraint.ts#L132)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+ConstraintBase.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+ConstraintBase.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### breakingThreshold
+
+• `get` **breakingThreshold**(): `number`
+
+断裂脉冲阈值,值越大,约束越不易断裂。
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+ConstraintBase.breakingThreshold
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L41)
+
+• `set` **breakingThreshold**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.breakingThreshold
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L45)
+
+___
+
+### constraint
+
+• `get` **constraint**(): `T`
+
+获取约束实例
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+ConstraintBase.constraint
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L87)
+
+___
+
+### targetRigidbody
+
+• `get` **targetRigidbody**(): [`Rigidbody`](Rigidbody.md)
+
+目标刚体组件
+
+#### Returns
+
+[`Rigidbody`](Rigidbody.md)
+
+#### Inherited from
+
+ConstraintBase.targetRigidbody
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L119)
+
+• `set` **targetRigidbody**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Rigidbody`](Rigidbody.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.targetRigidbody
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L123)
+
+___
+
+### linearLowerLimit
+
+• `get` **linearLowerLimit**(): `Vector3`
+
+default: `-1e30, -1e30, -1e30`
+
+#### Returns
+
+`Vector3`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofSpringConstraint.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofSpringConstraint.ts#L24)
+
+• `set` **linearLowerLimit**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofSpringConstraint.ts:27](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofSpringConstraint.ts#L27)
+
+___
+
+### linearUpperLimit
+
+• `get` **linearUpperLimit**(): `Vector3`
+
+default: `1e30, 1e30, 1e30`
+
+#### Returns
+
+`Vector3`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofSpringConstraint.ts:35](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofSpringConstraint.ts#L35)
+
+• `set` **linearUpperLimit**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofSpringConstraint.ts:38](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofSpringConstraint.ts#L38)
+
+___
+
+### angularLowerLimit
+
+• `get` **angularLowerLimit**(): `Vector3`
+
+default: `-Math.PI, -Math.PI, -Math.PI`
+
+#### Returns
+
+`Vector3`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofSpringConstraint.ts:46](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofSpringConstraint.ts#L46)
+
+• `set` **angularLowerLimit**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofSpringConstraint.ts:49](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofSpringConstraint.ts#L49)
+
+___
+
+### angularUpperLimit
+
+• `get` **angularUpperLimit**(): `Vector3`
+
+default: `Math.PI, Math.PI, Math.PI`
+
+#### Returns
+
+`Vector3`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofSpringConstraint.ts:57](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofSpringConstraint.ts#L57)
+
+• `set` **angularUpperLimit**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofSpringConstraint.ts:60](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofSpringConstraint.ts#L60)
+
+___
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+ConstraintBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ConstraintBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+ConstraintBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ConstraintBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### start
+
+▸ **start**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Inherited from
+
+ConstraintBase.start
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:50](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L50)
+
+___
+
+### wait
+
+▸ **wait**(): `Promise`\<[`btGeneric6DofSpringConstraint`](Ammo.btGeneric6DofSpringConstraint.md)\>
+
+异步获取完成初始化的约束实例
+
+#### Returns
+
+`Promise`\<[`btGeneric6DofSpringConstraint`](Ammo.btGeneric6DofSpringConstraint.md)\>
+
+#### Inherited from
+
+ConstraintBase.wait
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:97](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L97)
+
+___
+
+### resetConstraint
+
+▸ **resetConstraint**(): `Promise`\<[`btGeneric6DofSpringConstraint`](Ammo.btGeneric6DofSpringConstraint.md)\>
+
+重置约束,销毁当前约束实例后重新创建并返回新的约束实例
+
+#### Returns
+
+`Promise`\<[`btGeneric6DofSpringConstraint`](Ammo.btGeneric6DofSpringConstraint.md)\>
+
+#### Inherited from
+
+ConstraintBase.resetConstraint
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:105](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L105)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.destroy
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:127](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L127)
+
+___
+
+### enableSpring
+
+▸ **enableSpring**(`index`, `onOff`): `void`
+
+启用或禁用弹簧功能。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index` | `number` | 弹簧的索引 |
+| `onOff` | `boolean` | 是否启用 |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofSpringConstraint.ts:70](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofSpringConstraint.ts#L70)
+
+___
+
+### setStiffness
+
+▸ **setStiffness**(`index`, `stiffness`): `void`
+
+设置弹簧的刚度。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index` | `number` | 弹簧的索引 |
+| `stiffness` | `number` | 刚度值 |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofSpringConstraint.ts:83](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofSpringConstraint.ts#L83)
+
+___
+
+### setDamping
+
+▸ **setDamping**(`index`, `damping`): `void`
+
+设置弹簧的阻尼。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index` | `number` | 弹簧的索引 |
+| `damping` | `number` | 阻尼值 |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofSpringConstraint.ts:96](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofSpringConstraint.ts#L96)
+
+___
+
+### setEquilibriumPoint
+
+▸ **setEquilibriumPoint**(`index?`, `val?`): `void`
+
+设置弹簧的平衡点。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index?` | `number` | 弹簧的索引(可选)。如果不提供,则重置所有弹簧的平衡点。 |
+| `val?` | `number` | 平衡点值(可选)。如果提供,则设置指定弹簧的平衡点为该值。 - 不带参数时,重置所有弹簧的平衡点。 - 只带 `index` 参数时,设置指定弹簧的平衡点(值由系统内部处理)。 - 带 `index` 和 `val` 参数时,设置指定弹簧的平衡点为 `val`。 |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/Generic6DofSpringConstraint.ts:114](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/Generic6DofSpringConstraint.ts#L114)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.init
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onEnable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onDisable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `Object3D` | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+ConstraintBase.copyComponent
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.beforeDestroy
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
diff --git a/docs/physics/classes/GhostTrigger.md b/docs/physics/classes/GhostTrigger.md
new file mode 100644
index 00000000..f82a3465
--- /dev/null
+++ b/docs/physics/classes/GhostTrigger.md
@@ -0,0 +1,878 @@
+# Class: GhostTrigger
+
+The GhostTrigger Component represents a non-physical trigger in the physics world.
+It uses a ghost object to detect overlapping collisions without producing physical responses.
+
+## Hierarchy
+
+- `ComponentBase`
+
+ ↳ **`GhostTrigger`**
+
+### Constructors
+
+- [constructor](GhostTrigger.md#constructor)
+
+### Properties
+
+- [object3D](GhostTrigger.md#object3d)
+- [isDestroyed](GhostTrigger.md#isdestroyed)
+
+### Accessors
+
+- [shape](GhostTrigger.md#shape)
+- [userIndex](GhostTrigger.md#userindex)
+- [collisionFlags](GhostTrigger.md#collisionflags)
+- [ghostObject](GhostTrigger.md#ghostobject)
+- [enableCollisionEvent](GhostTrigger.md#enablecollisionevent)
+- [collisionEvent](GhostTrigger.md#collisionevent)
+- [eventDispatcher](GhostTrigger.md#eventdispatcher)
+- [isStart](GhostTrigger.md#isstart)
+- [transform](GhostTrigger.md#transform)
+- [enable](GhostTrigger.md#enable)
+
+### Methods
+
+- [createAndAddGhostObject](GhostTrigger.md#createandaddghostobject)
+- [addCollisionFlag](GhostTrigger.md#addcollisionflag)
+- [removeCollisionFlag](GhostTrigger.md#removecollisionflag)
+- [start](GhostTrigger.md#start)
+- [wait](GhostTrigger.md#wait)
+- [destroy](GhostTrigger.md#destroy)
+- [init](GhostTrigger.md#init)
+- [stop](GhostTrigger.md#stop)
+- [onEnable](GhostTrigger.md#onenable)
+- [onDisable](GhostTrigger.md#ondisable)
+- [onUpdate](GhostTrigger.md#onupdate)
+- [onLateUpdate](GhostTrigger.md#onlateupdate)
+- [onBeforeUpdate](GhostTrigger.md#onbeforeupdate)
+- [onCompute](GhostTrigger.md#oncompute)
+- [onGraphic](GhostTrigger.md#ongraphic)
+- [onParentChange](GhostTrigger.md#onparentchange)
+- [onAddChild](GhostTrigger.md#onaddchild)
+- [onRemoveChild](GhostTrigger.md#onremovechild)
+- [cloneTo](GhostTrigger.md#cloneto)
+- [copyComponent](GhostTrigger.md#copycomponent)
+- [beforeDestroy](GhostTrigger.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new GhostTrigger**(): [`GhostTrigger`](GhostTrigger.md)
+
+#### Returns
+
+[`GhostTrigger`](GhostTrigger.md)
+
+#### Inherited from
+
+ComponentBase.constructor
+
+## Properties
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+ComponentBase.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+ComponentBase.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### shape
+
+• `get` **shape**(): [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Returns
+
+[`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Defined in
+
+[packages/physics/rigidbody/GhostTrigger.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/GhostTrigger.ts#L19)
+
+• `set` **shape**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`btCollisionShape`](Ammo.btCollisionShape.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/GhostTrigger.ts:22](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/GhostTrigger.ts#L22)
+
+___
+
+### userIndex
+
+• `get` **userIndex**(): `number`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/rigidbody/GhostTrigger.ts:31](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/GhostTrigger.ts#L31)
+
+• `set` **userIndex**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/GhostTrigger.ts:35](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/GhostTrigger.ts#L35)
+
+___
+
+### collisionFlags
+
+• `get` **collisionFlags**(): `number`
+
+获取碰撞标志
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/rigidbody/GhostTrigger.ts:45](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/GhostTrigger.ts#L45)
+
+___
+
+### ghostObject
+
+• `get` **ghostObject**(): [`btPairCachingGhostObject`](Ammo.btPairCachingGhostObject.md)
+
+获取幽灵对象
+
+#### Returns
+
+[`btPairCachingGhostObject`](Ammo.btPairCachingGhostObject.md)
+
+#### Defined in
+
+[packages/physics/rigidbody/GhostTrigger.ts:129](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/GhostTrigger.ts#L129)
+
+___
+
+### enableCollisionEvent
+
+• `get` **enableCollisionEvent**(): `boolean`
+
+启用/禁用碰撞回调
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/physics/rigidbody/GhostTrigger.ts:144](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/GhostTrigger.ts#L144)
+
+• `set` **enableCollisionEvent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/GhostTrigger.ts:147](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/GhostTrigger.ts#L147)
+
+___
+
+### collisionEvent
+
+• `get` **collisionEvent**(): (`contactPoint`: [`btManifoldPoint`](Ammo.btManifoldPoint.md), `selfBody`: [`btRigidBody`](Ammo.btRigidBody.md), `otherBody`: [`btRigidBody`](Ammo.btRigidBody.md)) => `void`
+
+碰撞事件回调
+
+#### Returns
+
+`fn`
+
+▸ (`contactPoint`, `selfBody`, `otherBody`): `void`
+
+##### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `contactPoint` | [`btManifoldPoint`](Ammo.btManifoldPoint.md) |
+| `selfBody` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `otherBody` | [`btRigidBody`](Ammo.btRigidBody.md) |
+
+##### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/GhostTrigger.ts:155](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/GhostTrigger.ts#L155)
+
+• `set` **collisionEvent**(`callback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `callback` | (`contactPoint`: [`btManifoldPoint`](Ammo.btManifoldPoint.md), `selfBody`: [`btRigidBody`](Ammo.btRigidBody.md), `otherBody`: [`btRigidBody`](Ammo.btRigidBody.md)) => `void` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/GhostTrigger.ts:158](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/GhostTrigger.ts#L158)
+
+___
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### createAndAddGhostObject
+
+▸ **createAndAddGhostObject**(`shape`, `position`, `rotation`, `collisionFlags?`, `userIndex?`): [`btPairCachingGhostObject`](Ammo.btPairCachingGhostObject.md)
+
+创建幽灵对象并添加到物理世界。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `shape` | [`btCollisionShape`](Ammo.btCollisionShape.md) | 碰撞形状。 |
+| `position` | `Vector3` | 幽灵对象的位置。 |
+| `rotation` | `Vector3` | 幽灵对象的旋转。 |
+| `collisionFlags?` | `number` | 可选参数,碰撞标志,默认值为 4 `NO_CONTACT_RESPONSE` 表示对象不参与碰撞响应,但仍会触发碰撞事件。 |
+| `userIndex?` | `number` | 可选参数,用户索引,可作为物理对象标识。 |
+
+#### Returns
+
+[`btPairCachingGhostObject`](Ammo.btPairCachingGhostObject.md)
+
+新创建的 Ammo.btPairCachingGhostObject 对象。
+
+#### Defined in
+
+[packages/physics/rigidbody/GhostTrigger.ts:103](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/GhostTrigger.ts#L103)
+
+___
+
+### addCollisionFlag
+
+▸ **addCollisionFlag**(`value`): `void`
+
+添加单个碰撞标志
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CollisionFlags`](../enums/CollisionFlags.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/GhostTrigger.ts:52](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/GhostTrigger.ts#L52)
+
+___
+
+### removeCollisionFlag
+
+▸ **removeCollisionFlag**(`value`): `void`
+
+删除单个碰撞标志
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CollisionFlags`](../enums/CollisionFlags.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/GhostTrigger.ts:59](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/GhostTrigger.ts#L59)
+
+___
+
+### start
+
+▸ **start**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Overrides
+
+ComponentBase.start
+
+#### Defined in
+
+[packages/physics/rigidbody/GhostTrigger.ts:64](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/GhostTrigger.ts#L64)
+
+___
+
+### wait
+
+▸ **wait**(): `Promise`\<[`btPairCachingGhostObject`](Ammo.btPairCachingGhostObject.md)\>
+
+异步获取完成初始化的幽灵对象
+
+#### Returns
+
+`Promise`\<[`btPairCachingGhostObject`](Ammo.btPairCachingGhostObject.md)\>
+
+#### Defined in
+
+[packages/physics/rigidbody/GhostTrigger.ts:136](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/GhostTrigger.ts#L136)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+ComponentBase.destroy
+
+#### Defined in
+
+[packages/physics/rigidbody/GhostTrigger.ts:162](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/GhostTrigger.ts#L162)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.init
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onEnable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onDisable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `Object3D` | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+ComponentBase.copyComponent
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.beforeDestroy
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
diff --git a/docs/physics/classes/HingeConstraint.md b/docs/physics/classes/HingeConstraint.md
new file mode 100644
index 00000000..5a23b4ff
--- /dev/null
+++ b/docs/physics/classes/HingeConstraint.md
@@ -0,0 +1,984 @@
+# Class: HingeConstraint
+
+铰链约束
+
+## Hierarchy
+
+- `ConstraintBase`\<[`btHingeConstraint`](Ammo.btHingeConstraint.md)\>
+
+ ↳ **`HingeConstraint`**
+
+### Constructors
+
+- [constructor](HingeConstraint.md#constructor)
+
+### Properties
+
+- [pivotSelf](HingeConstraint.md#pivotself)
+- [pivotTarget](HingeConstraint.md#pivottarget)
+- [rotationSelf](HingeConstraint.md#rotationself)
+- [rotationTarget](HingeConstraint.md#rotationtarget)
+- [disableCollisionsBetweenLinkedBodies](HingeConstraint.md#disablecollisionsbetweenlinkedbodies)
+- [axisSelf](HingeConstraint.md#axisself)
+- [axisTarget](HingeConstraint.md#axistarget)
+- [useReferenceFrameA](HingeConstraint.md#usereferenceframea)
+- [useTwoBodiesTransformOverload](HingeConstraint.md#usetwobodiestransformoverload)
+- [object3D](HingeConstraint.md#object3d)
+- [isDestroyed](HingeConstraint.md#isdestroyed)
+
+### Accessors
+
+- [breakingThreshold](HingeConstraint.md#breakingthreshold)
+- [constraint](HingeConstraint.md#constraint)
+- [targetRigidbody](HingeConstraint.md#targetrigidbody)
+- [limitInfo](HingeConstraint.md#limitinfo)
+- [motorConfigInfo](HingeConstraint.md#motorconfiginfo)
+- [eventDispatcher](HingeConstraint.md#eventdispatcher)
+- [isStart](HingeConstraint.md#isstart)
+- [transform](HingeConstraint.md#transform)
+- [enable](HingeConstraint.md#enable)
+
+### Methods
+
+- [start](HingeConstraint.md#start)
+- [wait](HingeConstraint.md#wait)
+- [resetConstraint](HingeConstraint.md#resetconstraint)
+- [destroy](HingeConstraint.md#destroy)
+- [setLimit](HingeConstraint.md#setlimit)
+- [enableAngularMotor](HingeConstraint.md#enableangularmotor)
+- [init](HingeConstraint.md#init)
+- [stop](HingeConstraint.md#stop)
+- [onEnable](HingeConstraint.md#onenable)
+- [onDisable](HingeConstraint.md#ondisable)
+- [onUpdate](HingeConstraint.md#onupdate)
+- [onLateUpdate](HingeConstraint.md#onlateupdate)
+- [onBeforeUpdate](HingeConstraint.md#onbeforeupdate)
+- [onCompute](HingeConstraint.md#oncompute)
+- [onGraphic](HingeConstraint.md#ongraphic)
+- [onParentChange](HingeConstraint.md#onparentchange)
+- [onAddChild](HingeConstraint.md#onaddchild)
+- [onRemoveChild](HingeConstraint.md#onremovechild)
+- [cloneTo](HingeConstraint.md#cloneto)
+- [copyComponent](HingeConstraint.md#copycomponent)
+- [beforeDestroy](HingeConstraint.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new HingeConstraint**(): [`HingeConstraint`](HingeConstraint.md)
+
+#### Returns
+
+[`HingeConstraint`](HingeConstraint.md)
+
+#### Inherited from
+
+ConstraintBase\.constructor
+
+## Properties
+
+### pivotSelf
+
+• **pivotSelf**: `Vector3`
+
+The pivot point for the self body
+`FrameInA Origin`
+
+#### Inherited from
+
+ConstraintBase.pivotSelf
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L19)
+
+___
+
+### pivotTarget
+
+• **pivotTarget**: `Vector3`
+
+The pivot point for the target body
+`FrameInB Origin`
+
+#### Inherited from
+
+ConstraintBase.pivotTarget
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L24)
+
+___
+
+### rotationSelf
+
+• **rotationSelf**: `Quaternion`
+
+The rotation for the self body
+`FrameInA Rotation`
+
+#### Inherited from
+
+ConstraintBase.rotationSelf
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L29)
+
+___
+
+### rotationTarget
+
+• **rotationTarget**: `Quaternion`
+
+The rotation for the target body
+`FrameInB Rotation`
+
+#### Inherited from
+
+ConstraintBase.rotationTarget
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:34](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L34)
+
+___
+
+### disableCollisionsBetweenLinkedBodies
+
+• **disableCollisionsBetweenLinkedBodies**: `boolean` = `true`
+
+#### Inherited from
+
+ConstraintBase.disableCollisionsBetweenLinkedBodies
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:36](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L36)
+
+___
+
+### axisSelf
+
+• **axisSelf**: `Vector3` = `Vector3.UP`
+
+自身刚体上的铰链轴方向。
+默认值 `Vector3.UP`
+
+#### Defined in
+
+[packages/physics/constraint/HingeConstraint.ts:14](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/HingeConstraint.ts#L14)
+
+___
+
+### axisTarget
+
+• **axisTarget**: `Vector3` = `Vector3.UP`
+
+目标刚体上的铰链轴方向。
+默认值 `Vector3.UP`
+
+#### Defined in
+
+[packages/physics/constraint/HingeConstraint.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/HingeConstraint.ts#L19)
+
+___
+
+### useReferenceFrameA
+
+• **useReferenceFrameA**: `boolean` = `true`
+
+是否使用自身刚体的参考框架。
+默认值 `true`
+
+#### Defined in
+
+[packages/physics/constraint/HingeConstraint.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/HingeConstraint.ts#L24)
+
+___
+
+### useTwoBodiesTransformOverload
+
+• **useTwoBodiesTransformOverload**: `boolean` = `false`
+
+是否使用两个刚体的变换重载方式。
+如果为 true,则使用两个刚体的变换作为约束的参考框架。
+默认值 `false`
+
+#### Defined in
+
+[packages/physics/constraint/HingeConstraint.ts:30](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/HingeConstraint.ts#L30)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+ConstraintBase.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+ConstraintBase.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### breakingThreshold
+
+• `get` **breakingThreshold**(): `number`
+
+断裂脉冲阈值,值越大,约束越不易断裂。
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+ConstraintBase.breakingThreshold
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L41)
+
+• `set` **breakingThreshold**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.breakingThreshold
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L45)
+
+___
+
+### constraint
+
+• `get` **constraint**(): `T`
+
+获取约束实例
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+ConstraintBase.constraint
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L87)
+
+___
+
+### targetRigidbody
+
+• `get` **targetRigidbody**(): [`Rigidbody`](Rigidbody.md)
+
+目标刚体组件
+
+#### Returns
+
+[`Rigidbody`](Rigidbody.md)
+
+#### Inherited from
+
+ConstraintBase.targetRigidbody
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L119)
+
+• `set` **targetRigidbody**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Rigidbody`](Rigidbody.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.targetRigidbody
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L123)
+
+___
+
+### limitInfo
+
+• `get` **limitInfo**(): [`number`, `number`, `number`, `number`, number?]
+
+获取当前的限制参数。
+
+#### Returns
+
+[`number`, `number`, `number`, `number`, number?]
+
+#### Defined in
+
+[packages/physics/constraint/HingeConstraint.ts:38](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/HingeConstraint.ts#L38)
+
+___
+
+### motorConfigInfo
+
+• `get` **motorConfigInfo**(): [`boolean`, `number`, `number`]
+
+获取当前的马达配置参数。
+
+#### Returns
+
+[`boolean`, `number`, `number`]
+
+#### Defined in
+
+[packages/physics/constraint/HingeConstraint.ts:42](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/HingeConstraint.ts#L42)
+
+___
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+ConstraintBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ConstraintBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+ConstraintBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ConstraintBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### start
+
+▸ **start**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Inherited from
+
+ConstraintBase.start
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:50](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L50)
+
+___
+
+### wait
+
+▸ **wait**(): `Promise`\<[`btHingeConstraint`](Ammo.btHingeConstraint.md)\>
+
+异步获取完成初始化的约束实例
+
+#### Returns
+
+`Promise`\<[`btHingeConstraint`](Ammo.btHingeConstraint.md)\>
+
+#### Inherited from
+
+ConstraintBase.wait
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:97](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L97)
+
+___
+
+### resetConstraint
+
+▸ **resetConstraint**(): `Promise`\<[`btHingeConstraint`](Ammo.btHingeConstraint.md)\>
+
+重置约束,销毁当前约束实例后重新创建并返回新的约束实例
+
+#### Returns
+
+`Promise`\<[`btHingeConstraint`](Ammo.btHingeConstraint.md)\>
+
+#### Inherited from
+
+ConstraintBase.resetConstraint
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:105](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L105)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.destroy
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:127](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L127)
+
+___
+
+### setLimit
+
+▸ **setLimit**(`low`, `high`, `softness`, `biasFactor`, `relaxationFactor?`): `void`
+
+设置铰链约束的旋转限制。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `low` | `number` | 铰链旋转的最小角度(下限)。 |
+| `high` | `number` | 铰链旋转的最大角度(上限)。 |
+| `softness` | `number` | 软限制系数,表示限制的柔软程度。值在0到1之间,1表示完全刚性。 |
+| `biasFactor` | `number` | 偏置因子,用于控制限制恢复力的力度。值通常在0到1之间。 |
+| `relaxationFactor?` | `number` | (可选)松弛因子,控制限制恢复的速度。值越大,恢复越快。 |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/HingeConstraint.ts:52](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/HingeConstraint.ts#L52)
+
+___
+
+### enableAngularMotor
+
+▸ **enableAngularMotor**(`enableMotor`, `targetVelocity`, `maxMotorImpulse`): `void`
+
+启用或禁用角度马达。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `enableMotor` | `boolean` | 是否启用马达。 |
+| `targetVelocity` | `number` | 马达的目标速度。 |
+| `maxMotorImpulse` | `number` | 马达的最大推力。 |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/HingeConstraint.ts:63](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/HingeConstraint.ts#L63)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.init
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onEnable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onDisable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `Object3D` | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+ConstraintBase.copyComponent
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.beforeDestroy
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
diff --git a/docs/physics/classes/PhysicsDragger.md b/docs/physics/classes/PhysicsDragger.md
new file mode 100644
index 00000000..687d7b58
--- /dev/null
+++ b/docs/physics/classes/PhysicsDragger.md
@@ -0,0 +1,120 @@
+# Class: PhysicsDragger
+
+PhysicsDragger 类用于通过鼠标操作拖拽3D物体。
+利用物理引擎中的射线检测与刚体交互,实现物体的实时拖拽效果。
+
+### Constructors
+
+- [constructor](PhysicsDragger.md#constructor)
+
+### Properties
+
+- [filterStatic](PhysicsDragger.md#filterstatic)
+
+### Accessors
+
+- [enable](PhysicsDragger.md#enable)
+- [collisionFilterGroup](PhysicsDragger.md#collisionfiltergroup)
+- [collisionFilterMask](PhysicsDragger.md#collisionfiltermask)
+
+## Constructors
+
+### constructor
+
+• **new PhysicsDragger**(): [`PhysicsDragger`](PhysicsDragger.md)
+
+#### Returns
+
+[`PhysicsDragger`](PhysicsDragger.md)
+
+#### Defined in
+
+[packages/physics/utils/PhysicsDragger.ts:54](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/PhysicsDragger.ts#L54)
+
+## Properties
+
+### filterStatic
+
+• **filterStatic**: `boolean` = `true`
+
+是否过滤静态刚体对象,默认值为 `true`
+
+#### Defined in
+
+[packages/physics/utils/PhysicsDragger.ts:38](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/PhysicsDragger.ts#L38)
+
+## Accessors
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/physics/utils/PhysicsDragger.ts:22](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/PhysicsDragger.ts#L22)
+
+• `set` **enable**(`value`): `void`
+
+是否启用拖拽功能
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/PhysicsDragger.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/PhysicsDragger.ts#L29)
+
+___
+
+### collisionFilterGroup
+
+• `set` **collisionFilterGroup**(`value`): `void`
+
+设置射线过滤组
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/PhysicsDragger.ts:43](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/PhysicsDragger.ts#L43)
+
+___
+
+### collisionFilterMask
+
+• `set` **collisionFilterMask**(`value`): `void`
+
+设置射线过滤掩码
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/PhysicsDragger.ts:50](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/PhysicsDragger.ts#L50)
\ No newline at end of file
diff --git a/docs/physics/classes/PointToPointConstraint.md b/docs/physics/classes/PointToPointConstraint.md
new file mode 100644
index 00000000..22626179
--- /dev/null
+++ b/docs/physics/classes/PointToPointConstraint.md
@@ -0,0 +1,841 @@
+# Class: PointToPointConstraint
+
+点到点约束
+
+## Hierarchy
+
+- `ConstraintBase`\<[`btPoint2PointConstraint`](Ammo.btPoint2PointConstraint.md)\>
+
+ ↳ **`PointToPointConstraint`**
+
+### Constructors
+
+- [constructor](PointToPointConstraint.md#constructor)
+
+### Properties
+
+- [pivotSelf](PointToPointConstraint.md#pivotself)
+- [pivotTarget](PointToPointConstraint.md#pivottarget)
+- [rotationSelf](PointToPointConstraint.md#rotationself)
+- [rotationTarget](PointToPointConstraint.md#rotationtarget)
+- [disableCollisionsBetweenLinkedBodies](PointToPointConstraint.md#disablecollisionsbetweenlinkedbodies)
+- [object3D](PointToPointConstraint.md#object3d)
+- [isDestroyed](PointToPointConstraint.md#isdestroyed)
+
+### Accessors
+
+- [breakingThreshold](PointToPointConstraint.md#breakingthreshold)
+- [constraint](PointToPointConstraint.md#constraint)
+- [targetRigidbody](PointToPointConstraint.md#targetrigidbody)
+- [eventDispatcher](PointToPointConstraint.md#eventdispatcher)
+- [isStart](PointToPointConstraint.md#isstart)
+- [transform](PointToPointConstraint.md#transform)
+- [enable](PointToPointConstraint.md#enable)
+
+### Methods
+
+- [start](PointToPointConstraint.md#start)
+- [wait](PointToPointConstraint.md#wait)
+- [resetConstraint](PointToPointConstraint.md#resetconstraint)
+- [destroy](PointToPointConstraint.md#destroy)
+- [init](PointToPointConstraint.md#init)
+- [stop](PointToPointConstraint.md#stop)
+- [onEnable](PointToPointConstraint.md#onenable)
+- [onDisable](PointToPointConstraint.md#ondisable)
+- [onUpdate](PointToPointConstraint.md#onupdate)
+- [onLateUpdate](PointToPointConstraint.md#onlateupdate)
+- [onBeforeUpdate](PointToPointConstraint.md#onbeforeupdate)
+- [onCompute](PointToPointConstraint.md#oncompute)
+- [onGraphic](PointToPointConstraint.md#ongraphic)
+- [onParentChange](PointToPointConstraint.md#onparentchange)
+- [onAddChild](PointToPointConstraint.md#onaddchild)
+- [onRemoveChild](PointToPointConstraint.md#onremovechild)
+- [cloneTo](PointToPointConstraint.md#cloneto)
+- [copyComponent](PointToPointConstraint.md#copycomponent)
+- [beforeDestroy](PointToPointConstraint.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new PointToPointConstraint**(): [`PointToPointConstraint`](PointToPointConstraint.md)
+
+#### Returns
+
+[`PointToPointConstraint`](PointToPointConstraint.md)
+
+#### Inherited from
+
+ConstraintBase\.constructor
+
+## Properties
+
+### pivotSelf
+
+• **pivotSelf**: `Vector3`
+
+The pivot point for the self body
+`FrameInA Origin`
+
+#### Inherited from
+
+ConstraintBase.pivotSelf
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L19)
+
+___
+
+### pivotTarget
+
+• **pivotTarget**: `Vector3`
+
+The pivot point for the target body
+`FrameInB Origin`
+
+#### Inherited from
+
+ConstraintBase.pivotTarget
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L24)
+
+___
+
+### rotationSelf
+
+• **rotationSelf**: `Quaternion`
+
+The rotation for the self body
+`FrameInA Rotation`
+
+#### Inherited from
+
+ConstraintBase.rotationSelf
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L29)
+
+___
+
+### rotationTarget
+
+• **rotationTarget**: `Quaternion`
+
+The rotation for the target body
+`FrameInB Rotation`
+
+#### Inherited from
+
+ConstraintBase.rotationTarget
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:34](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L34)
+
+___
+
+### disableCollisionsBetweenLinkedBodies
+
+• **disableCollisionsBetweenLinkedBodies**: `boolean` = `true`
+
+#### Inherited from
+
+ConstraintBase.disableCollisionsBetweenLinkedBodies
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:36](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L36)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+ConstraintBase.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+ConstraintBase.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### breakingThreshold
+
+• `get` **breakingThreshold**(): `number`
+
+断裂脉冲阈值,值越大,约束越不易断裂。
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+ConstraintBase.breakingThreshold
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L41)
+
+• `set` **breakingThreshold**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.breakingThreshold
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L45)
+
+___
+
+### constraint
+
+• `get` **constraint**(): `T`
+
+获取约束实例
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+ConstraintBase.constraint
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L87)
+
+___
+
+### targetRigidbody
+
+• `get` **targetRigidbody**(): [`Rigidbody`](Rigidbody.md)
+
+目标刚体组件
+
+#### Returns
+
+[`Rigidbody`](Rigidbody.md)
+
+#### Inherited from
+
+ConstraintBase.targetRigidbody
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L119)
+
+• `set` **targetRigidbody**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Rigidbody`](Rigidbody.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.targetRigidbody
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L123)
+
+___
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+ConstraintBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ConstraintBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+ConstraintBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ConstraintBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### start
+
+▸ **start**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Inherited from
+
+ConstraintBase.start
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:50](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L50)
+
+___
+
+### wait
+
+▸ **wait**(): `Promise`\<[`btPoint2PointConstraint`](Ammo.btPoint2PointConstraint.md)\>
+
+异步获取完成初始化的约束实例
+
+#### Returns
+
+`Promise`\<[`btPoint2PointConstraint`](Ammo.btPoint2PointConstraint.md)\>
+
+#### Inherited from
+
+ConstraintBase.wait
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:97](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L97)
+
+___
+
+### resetConstraint
+
+▸ **resetConstraint**(): `Promise`\<[`btPoint2PointConstraint`](Ammo.btPoint2PointConstraint.md)\>
+
+重置约束,销毁当前约束实例后重新创建并返回新的约束实例
+
+#### Returns
+
+`Promise`\<[`btPoint2PointConstraint`](Ammo.btPoint2PointConstraint.md)\>
+
+#### Inherited from
+
+ConstraintBase.resetConstraint
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:105](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L105)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.destroy
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:127](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L127)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.init
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onEnable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onDisable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `Object3D` | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+ConstraintBase.copyComponent
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.beforeDestroy
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
diff --git a/docs/physics/classes/RigidBodyMapping.md b/docs/physics/classes/RigidBodyMapping.md
new file mode 100644
index 00000000..ec82c2eb
--- /dev/null
+++ b/docs/physics/classes/RigidBodyMapping.md
@@ -0,0 +1,181 @@
+# Class: RigidBodyMapping
+
+A bidirectional mapping between RigidBody objects and 3D objects.
+
+### Constructors
+
+- [constructor](RigidBodyMapping.md#constructor)
+
+### Accessors
+
+- [getAllPhysicsObjectMap](RigidBodyMapping.md#getallphysicsobjectmap)
+- [getAllGraphicObjectMap](RigidBodyMapping.md#getallgraphicobjectmap)
+
+### Methods
+
+- [addMapping](RigidBodyMapping.md#addmapping)
+- [getPhysicsObject](RigidBodyMapping.md#getphysicsobject)
+- [getGraphicObject](RigidBodyMapping.md#getgraphicobject)
+- [removeMappingByGraphic](RigidBodyMapping.md#removemappingbygraphic)
+- [removeMappingByPhysics](RigidBodyMapping.md#removemappingbyphysics)
+
+## Constructors
+
+### constructor
+
+• **new RigidBodyMapping**(): [`RigidBodyMapping`](RigidBodyMapping.md)
+
+#### Returns
+
+[`RigidBodyMapping`](RigidBodyMapping.md)
+
+## Accessors
+
+### getAllPhysicsObjectMap
+
+• `get` **getAllPhysicsObjectMap**(): `Map`\<[`btRigidBody`](Ammo.btRigidBody.md), `Object3D`\>
+
+Retrieves the entire mapping of all RigidBody objects.
+
+#### Returns
+
+`Map`\<[`btRigidBody`](Ammo.btRigidBody.md), `Object3D`\>
+
+A map of RigidBody objects to 3D objects.
+
+#### Defined in
+
+[packages/physics/utils/RigidBodyMapping.ts:14](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/RigidBodyMapping.ts#L14)
+
+___
+
+### getAllGraphicObjectMap
+
+• `get` **getAllGraphicObjectMap**(): `Map`\<`Object3D`, [`btRigidBody`](Ammo.btRigidBody.md)\>
+
+Retrieves the entire mapping of all 3D objects.
+
+#### Returns
+
+`Map`\<`Object3D`, [`btRigidBody`](Ammo.btRigidBody.md)\>
+
+A map of 3D objects to RigidBody objects.
+
+#### Defined in
+
+[packages/physics/utils/RigidBodyMapping.ts:22](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/RigidBodyMapping.ts#L22)
+
+## Methods
+
+### addMapping
+
+▸ **addMapping**(`object3D`, `physics`): `void`
+
+Adds a mapping between a 3D object and a RigidBody object.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `object3D` | `Object3D` | The 3D object. |
+| `physics` | [`btRigidBody`](Ammo.btRigidBody.md) | The RigidBody object. |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/RigidBodyMapping.ts:31](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/RigidBodyMapping.ts#L31)
+
+___
+
+### getPhysicsObject
+
+▸ **getPhysicsObject**(`object3D`): [`btRigidBody`](Ammo.btRigidBody.md)
+
+Retrieves the RigidBody object associated with a given 3D object.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `object3D` | `Object3D` | The 3D object. |
+
+#### Returns
+
+[`btRigidBody`](Ammo.btRigidBody.md)
+
+The associated RigidBody object, or undefined if not found.
+
+#### Defined in
+
+[packages/physics/utils/RigidBodyMapping.ts:40](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/RigidBodyMapping.ts#L40)
+
+___
+
+### getGraphicObject
+
+▸ **getGraphicObject**(`physics`): `Object3D`
+
+Retrieves the 3D object associated with a given RigidBody object.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `physics` | [`btRigidBody`](Ammo.btRigidBody.md) | The RigidBody object. |
+
+#### Returns
+
+`Object3D`
+
+The associated 3D object, or undefined if not found.
+
+#### Defined in
+
+[packages/physics/utils/RigidBodyMapping.ts:49](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/RigidBodyMapping.ts#L49)
+
+___
+
+### removeMappingByGraphic
+
+▸ **removeMappingByGraphic**(`object3D`): `void`
+
+Removes the mapping associated with a given 3D object.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `object3D` | `Object3D` | The 3D object. |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/RigidBodyMapping.ts:57](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/RigidBodyMapping.ts#L57)
+
+___
+
+### removeMappingByPhysics
+
+▸ **removeMappingByPhysics**(`physics`): `void`
+
+Removes the mapping associated with a given RigidBody object.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `physics` | [`btRigidBody`](Ammo.btRigidBody.md) | The RigidBody object. |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/RigidBodyMapping.ts:65](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/RigidBodyMapping.ts#L65)
diff --git a/docs/physics/classes/RigidBodyUtil.md b/docs/physics/classes/RigidBodyUtil.md
new file mode 100644
index 00000000..31a3a736
--- /dev/null
+++ b/docs/physics/classes/RigidBodyUtil.md
@@ -0,0 +1,235 @@
+# Class: RigidBodyUtil
+
+提供一系列AMMO刚体相关的方法
+
+### Constructors
+
+- [constructor](RigidBodyUtil.md#constructor)
+
+### Methods
+
+- [createRigidBody](RigidBodyUtil.md#createrigidbody)
+- [updateTransform](RigidBodyUtil.md#updatetransform)
+- [updatePosition](RigidBodyUtil.md#updateposition)
+- [updateRotation](RigidBodyUtil.md#updaterotation)
+- [updateScale](RigidBodyUtil.md#updatescale)
+- [clearForcesAndVelocities](RigidBodyUtil.md#clearforcesandvelocities)
+- [activateCollisionBodies](RigidBodyUtil.md#activatecollisionbodies)
+- [destroyRigidBody](RigidBodyUtil.md#destroyrigidbody)
+- [destroyConstraint](RigidBodyUtil.md#destroyconstraint)
+
+## Constructors
+
+### constructor
+
+• **new RigidBodyUtil**(): [`RigidBodyUtil`](RigidBodyUtil.md)
+
+#### Returns
+
+[`RigidBodyUtil`](RigidBodyUtil.md)
+
+## Methods
+
+### createRigidBody
+
+▸ **createRigidBody**(`object3D`, `shape`, `mass`, `position?`, `rotation?`): [`btRigidBody`](Ammo.btRigidBody.md)
+
+创建 Ammo 刚体。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `object3D` | `Object3D` | 三维对象。 |
+| `shape` | [`btCollisionShape`](Ammo.btCollisionShape.md) | 碰撞形状。 |
+| `mass` | `number` | 碰撞体的质量。 |
+| `position?` | `Vector3` | 可选参数,刚体的位置,默认使用三维对象的 `localPosition` |
+| `rotation?` | `Vector3` \| `Quaternion` | 可选参数,刚体的旋转,默认使用三维对象的 `localRotation` |
+
+#### Returns
+
+[`btRigidBody`](Ammo.btRigidBody.md)
+
+新创建的 Ammo.btRigidBody 对象。
+
+#### Defined in
+
+[packages/physics/utils/RigidBodyUtil.ts:18](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/RigidBodyUtil.ts#L18)
+
+___
+
+### updateTransform
+
+▸ **updateTransform**(`bodyRb`, `position`, `rotation`, `clearFV?`): `void`
+
+更新刚体的位置和旋转。
+此函数将新的位置和旋转应用到刚体上。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `bodyRb` | [`btRigidBody`](Ammo.btRigidBody.md) | 刚体对象。 |
+| `position` | `Vector3` | 刚体的新位置,以 Vector3 形式表示。 |
+| `rotation` | `Vector3` \| `Quaternion` | 刚体的新旋转,可选,可以是 Vector3 形式表示的欧拉角(将自动转换为四元数),默认为四元数零值。 |
+| `clearFV?` | `boolean` | 清除力和速度,可选,默认为 false 。 |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/RigidBodyUtil.ts:46](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/RigidBodyUtil.ts#L46)
+
+___
+
+### updatePosition
+
+▸ **updatePosition**(`bodyRb`, `value`): `void`
+
+更新刚体位置
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bodyRb` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/RigidBodyUtil.ts:68](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/RigidBodyUtil.ts#L68)
+
+___
+
+### updateRotation
+
+▸ **updateRotation**(`bodyRb`, `value`): `void`
+
+更新刚体旋转
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bodyRb` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/RigidBodyUtil.ts:84](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/RigidBodyUtil.ts#L84)
+
+___
+
+### updateScale
+
+▸ **updateScale**(`bodyRb`, `value`, `mass`): `void`
+
+更新刚体缩放
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bodyRb` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `value` | `Vector3` |
+| `mass` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/RigidBodyUtil.ts:101](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/RigidBodyUtil.ts#L101)
+
+___
+
+### clearForcesAndVelocities
+
+▸ **clearForcesAndVelocities**(`bodyRb`): `void`
+
+清除力和速度
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bodyRb` | [`btRigidBody`](Ammo.btRigidBody.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/RigidBodyUtil.ts:116](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/RigidBodyUtil.ts#L116)
+
+___
+
+### activateCollisionBodies
+
+▸ **activateCollisionBodies**(): `void`
+
+激活物理世界中的全部碰撞对
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/RigidBodyUtil.ts:125](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/RigidBodyUtil.ts#L125)
+
+___
+
+### destroyRigidBody
+
+▸ **destroyRigidBody**(`bodyRb`): `void`
+
+销毁刚体及其状态和形状
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `bodyRb` | [`btRigidBody`](Ammo.btRigidBody.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/RigidBodyUtil.ts:149](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/RigidBodyUtil.ts#L149)
+
+___
+
+### destroyConstraint
+
+▸ **destroyConstraint**(`constraint`): `void`
+
+销毁约束
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `constraint` | [`btTypedConstraint`](Ammo.btTypedConstraint.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/RigidBodyUtil.ts:162](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/RigidBodyUtil.ts#L162)
diff --git a/docs/physics/classes/Rigidbody.md b/docs/physics/classes/Rigidbody.md
new file mode 100644
index 00000000..ac549203
--- /dev/null
+++ b/docs/physics/classes/Rigidbody.md
@@ -0,0 +1,1573 @@
+# Class: Rigidbody
+
+Rigidbody Component
+Rigid bodies can endow game objects with physical properties, allowing them to be controlled by the physics system and subjected to forces and torques, thus achieving realistic motion effects.
+
+## Hierarchy
+
+- `ComponentBase`
+
+ ↳ **`Rigidbody`**
+
+### Constructors
+
+- [constructor](Rigidbody.md#constructor)
+
+### Properties
+
+- [collisionShape](Rigidbody.md#collisionshape)
+- [group](Rigidbody.md#group)
+- [mask](Rigidbody.md#mask)
+- [object3D](Rigidbody.md#object3d)
+- [isDestroyed](Rigidbody.md#isdestroyed)
+
+### Accessors
+
+- [btBodyInited](Rigidbody.md#btbodyinited)
+- [btRigidbody](Rigidbody.md#btrigidbody)
+- [shape](Rigidbody.md#shape)
+- [userIndex](Rigidbody.md#userindex)
+- [activationState](Rigidbody.md#activationstate)
+- [collisionFlags](Rigidbody.md#collisionflags)
+- [isKinematic](Rigidbody.md#iskinematic)
+- [isTrigger](Rigidbody.md#istrigger)
+- [isDisableDebugVisible](Rigidbody.md#isdisabledebugvisible)
+- [margin](Rigidbody.md#margin)
+- [damping](Rigidbody.md#damping)
+- [contactProcessingThreshold](Rigidbody.md#contactprocessingthreshold)
+- [gravity](Rigidbody.md#gravity)
+- [friction](Rigidbody.md#friction)
+- [rollingFriction](Rigidbody.md#rollingfriction)
+- [restitution](Rigidbody.md#restitution)
+- [velocity](Rigidbody.md#velocity)
+- [angularVelocity](Rigidbody.md#angularvelocity)
+- [linearVelocity](Rigidbody.md#linearvelocity)
+- [mass](Rigidbody.md#mass)
+- [isSilent](Rigidbody.md#issilent)
+- [ccdSettings](Rigidbody.md#ccdsettings)
+- [enableCollisionEvent](Rigidbody.md#enablecollisionevent)
+- [collisionEvent](Rigidbody.md#collisionevent)
+- [enablePhysicsTransformSync](Rigidbody.md#enablephysicstransformsync)
+- [eventDispatcher](Rigidbody.md#eventdispatcher)
+- [isStart](Rigidbody.md#isstart)
+- [transform](Rigidbody.md#transform)
+- [enable](Rigidbody.md#enable)
+
+### Methods
+
+- [init](Rigidbody.md#init)
+- [start](Rigidbody.md#start)
+- [onUpdate](Rigidbody.md#onupdate)
+- [updateTransform](Rigidbody.md#updatetransform)
+- [clearForcesAndVelocities](Rigidbody.md#clearforcesandvelocities)
+- [wait](Rigidbody.md#wait)
+- [addCollisionFlag](Rigidbody.md#addcollisionflag)
+- [removeCollisionFlag](Rigidbody.md#removecollisionflag)
+- [destroy](Rigidbody.md#destroy)
+- [stop](Rigidbody.md#stop)
+- [onEnable](Rigidbody.md#onenable)
+- [onDisable](Rigidbody.md#ondisable)
+- [onLateUpdate](Rigidbody.md#onlateupdate)
+- [onBeforeUpdate](Rigidbody.md#onbeforeupdate)
+- [onCompute](Rigidbody.md#oncompute)
+- [onGraphic](Rigidbody.md#ongraphic)
+- [onParentChange](Rigidbody.md#onparentchange)
+- [onAddChild](Rigidbody.md#onaddchild)
+- [onRemoveChild](Rigidbody.md#onremovechild)
+- [cloneTo](Rigidbody.md#cloneto)
+- [copyComponent](Rigidbody.md#copycomponent)
+- [beforeDestroy](Rigidbody.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new Rigidbody**(): [`Rigidbody`](Rigidbody.md)
+
+#### Returns
+
+[`Rigidbody`](Rigidbody.md)
+
+#### Inherited from
+
+ComponentBase.constructor
+
+## Properties
+
+### collisionShape
+
+▪ `Static` `Readonly` **collisionShape**: typeof [`CollisionShapeUtil`](CollisionShapeUtil.md) = `CollisionShapeUtil`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:40](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L40)
+
+___
+
+### group
+
+• **group**: `number`
+
+The collision group of the rigid body.
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:233](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L233)
+
+___
+
+### mask
+
+• **mask**: `number`
+
+The collision mask of the rigid body.
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:238](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L238)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+ComponentBase.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+ComponentBase.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### btBodyInited
+
+• `get` **btBodyInited**(): `boolean`
+
+Check if rigidbody inited
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:193](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L193)
+
+___
+
+### btRigidbody
+
+• `get` **btRigidbody**(): [`btRigidBody`](Ammo.btRigidBody.md)
+
+Return internal Ammo.btRigidBody
+
+#### Returns
+
+[`btRigidBody`](Ammo.btRigidBody.md)
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:200](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L200)
+
+___
+
+### shape
+
+• `get` **shape**(): [`btCollisionShape`](Ammo.btCollisionShape.md)
+
+The collision shape of the rigid body.
+
+#### Returns
+
+[`btCollisionShape`](Ammo.btCollisionShape.md)
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:214](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L214)
+
+• `set` **shape**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`btCollisionShape`](Ammo.btCollisionShape.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:217](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L217)
+
+___
+
+### userIndex
+
+• `get` **userIndex**(): `number`
+
+User index, which can be used as an identifier for the rigid body.
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:243](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L243)
+
+• `set` **userIndex**(`value`): `void`
+
+Sets the user index for the rigid body.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:250](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L250)
+
+___
+
+### activationState
+
+• `get` **activationState**(): [`ActivationState`](../enums/ActivationState.md)
+
+Activation state of the rigid body.
+
+#### Returns
+
+[`ActivationState`](../enums/ActivationState.md)
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:258](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L258)
+
+• `set` **activationState**(`value`): `void`
+
+Sets the activation state of the rigid body.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`ActivationState`](../enums/ActivationState.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:265](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L265)
+
+___
+
+### collisionFlags
+
+• `get` **collisionFlags**(): `number`
+
+Collision flags of the rigid body.
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:273](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L273)
+
+___
+
+### isKinematic
+
+• `get` **isKinematic**(): `boolean`
+
+Check if the rigidbody affect physics system
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:295](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L295)
+
+• `set` **isKinematic**(`value`): `void`
+
+Set the rigid body to a kinematic object
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:301](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L301)
+
+___
+
+### isTrigger
+
+• `get` **isTrigger**(): `boolean`
+
+Check if the rigid body is a trigger
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:327](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L327)
+
+• `set` **isTrigger**(`value`): `void`
+
+Set the rigid body as a trigger
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:333](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L333)
+
+___
+
+### isDisableDebugVisible
+
+• `get` **isDisableDebugVisible**(): `boolean`
+
+Check if the rigid body is visible in debug mode
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:340](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L340)
+
+• `set` **isDisableDebugVisible**(`value`): `void`
+
+Set the rigid body to be visible in debug mode
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:346](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L346)
+
+___
+
+### margin
+
+• `get` **margin**(): `number`
+
+Margin of the collision shape.
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:353](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L353)
+
+• `set` **margin**(`value`): `void`
+
+Sets the margin of the collision shape.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+**`Default`**
+
+```ts
+0.02
+```
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:360](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L360)
+
+___
+
+### damping
+
+• `get` **damping**(): [`number`, `number`]
+
+Damping of the rigid body.
+
+Sets the damping parameters. The first value is the linear damping, the second is the angular damping.
+
+#### Returns
+
+[`number`, `number`]
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:371](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L371)
+
+• `set` **damping**(`params`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `params` | [`number`, `number`] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:375](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L375)
+
+___
+
+### contactProcessingThreshold
+
+• `get` **contactProcessingThreshold**(): `number`
+
+Contact processing threshold of the rigid body.
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:382](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L382)
+
+• `set` **contactProcessingThreshold**(`value`): `void`
+
+Sets the contact processing threshold of the rigid body.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:388](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L388)
+
+___
+
+### gravity
+
+• `get` **gravity**(): `Vector3`
+
+Gravity vector applied to the rigid body.
+
+#### Returns
+
+`Vector3`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:395](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L395)
+
+• `set` **gravity**(`value`): `void`
+
+Sets the gravity vector applied to the rigid body.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:401](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L401)
+
+___
+
+### friction
+
+• `get` **friction**(): `number`
+
+Get friction value
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:408](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L408)
+
+• `set` **friction**(`value`): `void`
+
+Set friction value. default `0.5`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:414](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L414)
+
+___
+
+### rollingFriction
+
+• `get` **rollingFriction**(): `number`
+
+Get rolling friction value
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:421](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L421)
+
+• `set` **rollingFriction**(`value`): `void`
+
+Set rolling friction value
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:427](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L427)
+
+___
+
+### restitution
+
+• `get` **restitution**(): `number`
+
+Get restitution value
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:434](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L434)
+
+• `set` **restitution**(`value`): `void`
+
+Set restitution value default `0.5`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:440](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L440)
+
+___
+
+### velocity
+
+• `get` **velocity**(): `Vector3`
+
+Get velocity value of current object
+
+#### Returns
+
+`Vector3`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:447](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L447)
+
+• `set` **velocity**(`value`): `void`
+
+Set velocity value of current object
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:453](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L453)
+
+___
+
+### angularVelocity
+
+• `get` **angularVelocity**(): `Vector3`
+
+Get the angular velocity value of current object
+
+#### Returns
+
+`Vector3`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:461](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L461)
+
+• `set` **angularVelocity**(`value`): `void`
+
+Set the angular velocity value of current object
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:470](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L470)
+
+___
+
+### linearVelocity
+
+• `get` **linearVelocity**(): `Vector3`
+
+Get the linear velocity value of current object
+
+#### Returns
+
+`Vector3`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:477](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L477)
+
+• `set` **linearVelocity**(`value`): `void`
+
+Set the linear velocity value of current object
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `Vector3` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:486](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L486)
+
+___
+
+### mass
+
+• `get` **mass**(): `number`
+
+Get mass value
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:493](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L493)
+
+• `set` **mass**(`value`): `void`
+
+Set mass value. default `0.01`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:499](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L499)
+
+___
+
+### isSilent
+
+• `get` **isSilent**(): `boolean`
+
+刚体的静默状态。
+如果为 true 则任何物理对象与静默状态的对象发生碰撞时都不会触发双方的碰撞回调。
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:526](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L526)
+
+• `set` **isSilent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:529](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L529)
+
+___
+
+### ccdSettings
+
+• `get` **ccdSettings**(): [`number`, `number`]
+
+#### Returns
+
+[`number`, `number`]
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:550](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L550)
+
+• `set` **ccdSettings**(`params`): `void`
+
+CCD (Continuous Collision Detection)
+
+Sets the CCD parameters. The first value is the motion threshold, the second is the swept sphere radius.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `params` | [`number`, `number`] | [motion threshold, swept sphere radius] |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:544](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L544)
+
+___
+
+### enableCollisionEvent
+
+• `get` **enableCollisionEvent**(): `boolean`
+
+Enable/disable collision callbacks
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:557](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L557)
+
+• `set` **enableCollisionEvent**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:560](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L560)
+
+___
+
+### collisionEvent
+
+• `get` **collisionEvent**(): (`contactPoint`: [`btManifoldPoint`](Ammo.btManifoldPoint.md), `selfBody`: [`btRigidBody`](Ammo.btRigidBody.md), `otherBody`: [`btRigidBody`](Ammo.btRigidBody.md)) => `void`
+
+Collision callbacks
+
+#### Returns
+
+`fn`
+
+▸ (`contactPoint`, `selfBody`, `otherBody`): `void`
+
+##### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `contactPoint` | [`btManifoldPoint`](Ammo.btManifoldPoint.md) |
+| `selfBody` | [`btRigidBody`](Ammo.btRigidBody.md) |
+| `otherBody` | [`btRigidBody`](Ammo.btRigidBody.md) |
+
+##### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:568](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L568)
+
+• `set` **collisionEvent**(`callback`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `callback` | (`contactPoint`: [`btManifoldPoint`](Ammo.btManifoldPoint.md), `selfBody`: [`btRigidBody`](Ammo.btRigidBody.md), `otherBody`: [`btRigidBody`](Ammo.btRigidBody.md)) => `void` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:571](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L571)
+
+___
+
+### enablePhysicsTransformSync
+
+• `get` **enablePhysicsTransformSync**(): `boolean`
+
+Enables or disables the transform sync with physics.
+If enabled, changes to the transform will automatically update the physics body.
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:579](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L579)
+
+• `set` **enablePhysicsTransformSync**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:582](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L582)
+
+___
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+ComponentBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### init
+
+▸ **init**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+ComponentBase.init
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:42](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L42)
+
+___
+
+### start
+
+▸ **start**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+ComponentBase.start
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:47](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L47)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+ComponentBase.onUpdate
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:123](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L123)
+
+___
+
+### updateTransform
+
+▸ **updateTransform**(`position?`, `rotation?`, `clearFV?`): `void`
+
+更新刚体的位置和旋转,并同步三维对象
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `position?` | `Vector3` | 可选,默认为三维对象的位置 |
+| `rotation?` | `Vector3` \| `Quaternion` | 可选,默认为三维对象的欧拉角旋转 |
+| `clearFV?` | `boolean` | 可选,清除刚体的力和速度,默认为 false |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:173](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L173)
+
+___
+
+### clearForcesAndVelocities
+
+▸ **clearForcesAndVelocities**(): `void`
+
+Remove the force and velocity of the rigid body
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:184](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L184)
+
+___
+
+### wait
+
+▸ **wait**(): `Promise`\<[`btRigidBody`](Ammo.btRigidBody.md)\>
+
+Asynchronously retrieves the fully initialized rigid body instance.
+
+#### Returns
+
+`Promise`\<[`btRigidBody`](Ammo.btRigidBody.md)\>
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:206](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L206)
+
+___
+
+### addCollisionFlag
+
+▸ **addCollisionFlag**(`value`): `void`
+
+Adds a collision flag to the rigid body.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CollisionFlags`](../enums/CollisionFlags.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:280](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L280)
+
+___
+
+### removeCollisionFlag
+
+▸ **removeCollisionFlag**(`value`): `void`
+
+Removes a collision flag from the rigid body.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`CollisionFlags`](../enums/CollisionFlags.md) |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:287](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L287)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+ComponentBase.destroy
+
+#### Defined in
+
+[packages/physics/rigidbody/Rigidbody.ts:587](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/Rigidbody.ts#L587)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onEnable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onDisable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ComponentBase.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `Object3D` | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+ComponentBase.copyComponent
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ComponentBase.beforeDestroy
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
diff --git a/docs/physics/classes/RopeSoftbody.md b/docs/physics/classes/RopeSoftbody.md
new file mode 100644
index 00000000..18924c44
--- /dev/null
+++ b/docs/physics/classes/RopeSoftbody.md
@@ -0,0 +1,1033 @@
+# Class: RopeSoftbody
+
+## Hierarchy
+
+- `SoftbodyBase`
+
+ ↳ **`RopeSoftbody`**
+
+### Constructors
+
+- [constructor](RopeSoftbody.md#constructor)
+
+### Properties
+
+- [fixeds](RopeSoftbody.md#fixeds)
+- [fixNodeIndices](RopeSoftbody.md#fixnodeindices)
+- [elasticity](RopeSoftbody.md#elasticity)
+- [anchorRigidbodyHead](RopeSoftbody.md#anchorrigidbodyhead)
+- [anchorRigidbodyTail](RopeSoftbody.md#anchorrigidbodytail)
+- [anchorOffsetHead](RopeSoftbody.md#anchoroffsethead)
+- [anchorOffsetTail](RopeSoftbody.md#anchoroffsettail)
+- [mass](RopeSoftbody.md#mass)
+- [margin](RopeSoftbody.md#margin)
+- [group](RopeSoftbody.md#group)
+- [mask](RopeSoftbody.md#mask)
+- [influence](RopeSoftbody.md#influence)
+- [disableCollision](RopeSoftbody.md#disablecollision)
+- [object3D](RopeSoftbody.md#object3d)
+- [isDestroyed](RopeSoftbody.md#isdestroyed)
+
+### Accessors
+
+- [activationState](RopeSoftbody.md#activationstate)
+- [btBodyInited](RopeSoftbody.md#btbodyinited)
+- [btSoftBody](RopeSoftbody.md#btsoftbody)
+- [eventDispatcher](RopeSoftbody.md#eventdispatcher)
+- [isStart](RopeSoftbody.md#isstart)
+- [transform](RopeSoftbody.md#transform)
+- [enable](RopeSoftbody.md#enable)
+
+### Methods
+
+- [buildRopeGeometry](RopeSoftbody.md#buildropegeometry)
+- [start](RopeSoftbody.md#start)
+- [setElasticity](RopeSoftbody.md#setelasticity)
+- [clearAnchors](RopeSoftbody.md#clearanchors)
+- [onUpdate](RopeSoftbody.md#onupdate)
+- [destroy](RopeSoftbody.md#destroy)
+- [init](RopeSoftbody.md#init)
+- [wait](RopeSoftbody.md#wait)
+- [appendAnchor](RopeSoftbody.md#appendanchor)
+- [applyFixedNodes](RopeSoftbody.md#applyfixednodes)
+- [clearFixedNodes](RopeSoftbody.md#clearfixednodes)
+- [stop](RopeSoftbody.md#stop)
+- [onEnable](RopeSoftbody.md#onenable)
+- [onDisable](RopeSoftbody.md#ondisable)
+- [onLateUpdate](RopeSoftbody.md#onlateupdate)
+- [onBeforeUpdate](RopeSoftbody.md#onbeforeupdate)
+- [onCompute](RopeSoftbody.md#oncompute)
+- [onGraphic](RopeSoftbody.md#ongraphic)
+- [onParentChange](RopeSoftbody.md#onparentchange)
+- [onAddChild](RopeSoftbody.md#onaddchild)
+- [onRemoveChild](RopeSoftbody.md#onremovechild)
+- [cloneTo](RopeSoftbody.md#cloneto)
+- [copyComponent](RopeSoftbody.md#copycomponent)
+- [beforeDestroy](RopeSoftbody.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new RopeSoftbody**(): [`RopeSoftbody`](RopeSoftbody.md)
+
+#### Returns
+
+[`RopeSoftbody`](RopeSoftbody.md)
+
+#### Inherited from
+
+SoftbodyBase.constructor
+
+## Properties
+
+### fixeds
+
+• **fixeds**: `number` = `0`
+
+绳索两端的固定选项,默认值为 `0`
+
+`0`:两端不固定,`1`:起点固定,`2`:终点固定,`3`:两端固定
+
+#### Defined in
+
+[packages/physics/softbody/RopeSoftbody.ts:13](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/RopeSoftbody.ts#L13)
+
+___
+
+### fixNodeIndices
+
+• **fixNodeIndices**: `number`[] = `[]`
+
+固定节点索引,与 `fixeds` 属性作用相同,但可以更自由的控制任意节点。
+
+#### Defined in
+
+[packages/physics/softbody/RopeSoftbody.ts:18](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/RopeSoftbody.ts#L18)
+
+___
+
+### elasticity
+
+• **elasticity**: `number` = `0.5`
+
+绳索弹性,值越大弹性越低,通常设置为 0 到 1 之间,默认值为 `0.5`。
+
+#### Defined in
+
+[packages/physics/softbody/RopeSoftbody.ts:23](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/RopeSoftbody.ts#L23)
+
+___
+
+### anchorRigidbodyHead
+
+• **anchorRigidbodyHead**: [`Rigidbody`](Rigidbody.md)
+
+绳索起点处锚定的刚体,设置此项后绳索的起点将与该刚体的位置相同。
+
+#### Defined in
+
+[packages/physics/softbody/RopeSoftbody.ts:28](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/RopeSoftbody.ts#L28)
+
+___
+
+### anchorRigidbodyTail
+
+• **anchorRigidbodyTail**: [`Rigidbody`](Rigidbody.md)
+
+绳索终点处锚定的刚体,设置此项后绳索的终点将与该刚体的位置相同。
+
+#### Defined in
+
+[packages/physics/softbody/RopeSoftbody.ts:33](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/RopeSoftbody.ts#L33)
+
+___
+
+### anchorOffsetHead
+
+• **anchorOffsetHead**: `Vector3`
+
+锚点的起点偏移量,表示起点与锚定的刚体之间的相对位置。
+
+#### Defined in
+
+[packages/physics/softbody/RopeSoftbody.ts:38](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/RopeSoftbody.ts#L38)
+
+___
+
+### anchorOffsetTail
+
+• **anchorOffsetTail**: `Vector3`
+
+锚点的终点偏移量,表示终点与锚定的刚体之间的相对位置。
+
+#### Defined in
+
+[packages/physics/softbody/RopeSoftbody.ts:43](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/RopeSoftbody.ts#L43)
+
+___
+
+### mass
+
+• **mass**: `number` = `1`
+
+软体的总质量,默认值为 `1`
+
+#### Inherited from
+
+SoftbodyBase.mass
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L17)
+
+___
+
+### margin
+
+• **margin**: `number` = `0.15`
+
+碰撞边距,默认值为 `0.15`
+
+#### Inherited from
+
+SoftbodyBase.margin
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:22](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L22)
+
+___
+
+### group
+
+• **group**: `number` = `1`
+
+碰撞组,默认值为 `1`
+
+#### Inherited from
+
+SoftbodyBase.group
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:27](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L27)
+
+___
+
+### mask
+
+• **mask**: `number` = `-1`
+
+碰撞掩码,默认值为 `-1`
+
+#### Inherited from
+
+SoftbodyBase.mask
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:32](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L32)
+
+___
+
+### influence
+
+• **influence**: `number` = `1`
+
+锚点的影响力。影响力值越大,软体节点越紧密地跟随刚体的运动。通常,这个值在0到1之间。默认值为 `1`。
+
+#### Inherited from
+
+SoftbodyBase.influence
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:37](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L37)
+
+___
+
+### disableCollision
+
+• **disableCollision**: `boolean` = `false`
+
+是否禁用与锚定刚体之间的碰撞,默认值为 `false`。
+
+#### Inherited from
+
+SoftbodyBase.disableCollision
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:42](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L42)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+SoftbodyBase.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+SoftbodyBase.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### activationState
+
+• `set` **activationState**(`value`): `void`
+
+设置软体激活状态。
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`ActivationState`](../enums/ActivationState.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.activationState
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L47)
+
+___
+
+### btBodyInited
+
+• `get` **btBodyInited**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+SoftbodyBase.btBodyInited
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:51](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L51)
+
+___
+
+### btSoftBody
+
+• `get` **btSoftBody**(): [`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Returns
+
+[`btSoftBody`](Ammo.btSoftBody.md)
+
+#### Inherited from
+
+SoftbodyBase.btSoftBody
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:55](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L55)
+
+___
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+SoftbodyBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+SoftbodyBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+SoftbodyBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+SoftbodyBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### buildRopeGeometry
+
+▸ **buildRopeGeometry**(`segmentCount`, `startPos`, `endPos`): `GeometryBase`
+
+构建绳索(线条)几何体,注意添加材质时需要将拓扑结构 `topology` 设置为 `'line-list'`。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `segmentCount` | `number` | 分段数 |
+| `startPos` | `Vector3` | 起点 |
+| `endPos` | `Vector3` | 终点 |
+
+#### Returns
+
+`GeometryBase`
+
+GeometryBase
+
+#### Defined in
+
+[packages/physics/softbody/RopeSoftbody.ts:163](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/RopeSoftbody.ts#L163)
+
+___
+
+### start
+
+▸ **start**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Overrides
+
+SoftbodyBase.start
+
+#### Defined in
+
+[packages/physics/softbody/RopeSoftbody.ts:48](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/RopeSoftbody.ts#L48)
+
+___
+
+### setElasticity
+
+▸ **setElasticity**(`value`): `void`
+
+set rope elasticity to 0~1
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/softbody/RopeSoftbody.ts:110](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/RopeSoftbody.ts#L110)
+
+___
+
+### clearAnchors
+
+▸ **clearAnchors**(`isPopBack?`): `void`
+
+清除锚点,软体将会从附加的刚体上脱落
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `isPopBack?` | `boolean` | 是否只删除一个锚点,当存在首尾两个锚点时,删除终点的锚点。 |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/softbody/RopeSoftbody.ts:123](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/RopeSoftbody.ts#L123)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(): `void`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+SoftbodyBase.onUpdate
+
+#### Defined in
+
+[packages/physics/softbody/RopeSoftbody.ts:131](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/RopeSoftbody.ts#L131)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+SoftbodyBase.destroy
+
+#### Defined in
+
+[packages/physics/softbody/RopeSoftbody.ts:150](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/RopeSoftbody.ts#L150)
+
+___
+
+### init
+
+▸ **init**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.init
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:59](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L59)
+
+___
+
+### wait
+
+▸ **wait**(): `Promise`\<[`btSoftBody`](Ammo.btSoftBody.md)\>
+
+Asynchronously retrieves the fully initialized soft body instance.
+
+#### Returns
+
+`Promise`\<[`btSoftBody`](Ammo.btSoftBody.md)\>
+
+#### Inherited from
+
+SoftbodyBase.wait
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:95](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L95)
+
+___
+
+### appendAnchor
+
+▸ **appendAnchor**(`nodeIndex`, `targetRigidbody`, `disCollision?`, `influence?`): `void`
+
+Wraps the native soft body's `appendAnchor` method to anchor a node to a rigid body.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `nodeIndex` | `number` | Index of the node to anchor. |
+| `targetRigidbody` | [`Rigidbody`](Rigidbody.md) | The rigid body to anchor to. |
+| `disCollision?` | `boolean` | Optional. Disable collisions if true. |
+| `influence?` | `number` | Optional. Anchor's influence. |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.appendAnchor
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:107](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L107)
+
+___
+
+### applyFixedNodes
+
+▸ **applyFixedNodes**(`fixedNodeIndices`): `void`
+
+固定软体节点。
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `fixedNodeIndices` | `number`[] | 需要固定的节点索引。 |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.applyFixedNodes
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L121)
+
+___
+
+### clearFixedNodes
+
+▸ **clearFixedNodes**(`index?`): `void`
+
+清除固定节点
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `index?` | `number` | 需要清除的节点索引,如果未提供,则清除所有节点。 |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.clearFixedNodes
+
+#### Defined in
+
+[packages/physics/softbody/SoftbodyBase.ts:140](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/SoftbodyBase.ts#L140)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onEnable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onDisable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+SoftbodyBase.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `Object3D` | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+SoftbodyBase.copyComponent
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+SoftbodyBase.beforeDestroy
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
diff --git a/docs/physics/classes/SliderConstraint.md b/docs/physics/classes/SliderConstraint.md
new file mode 100644
index 00000000..eee6c745
--- /dev/null
+++ b/docs/physics/classes/SliderConstraint.md
@@ -0,0 +1,1093 @@
+# Class: SliderConstraint
+
+滑动关节约束
+
+## Hierarchy
+
+- `ConstraintBase`\<[`btSliderConstraint`](Ammo.btSliderConstraint.md)\>
+
+ ↳ **`SliderConstraint`**
+
+### Constructors
+
+- [constructor](SliderConstraint.md#constructor)
+
+### Properties
+
+- [pivotSelf](SliderConstraint.md#pivotself)
+- [pivotTarget](SliderConstraint.md#pivottarget)
+- [rotationSelf](SliderConstraint.md#rotationself)
+- [rotationTarget](SliderConstraint.md#rotationtarget)
+- [disableCollisionsBetweenLinkedBodies](SliderConstraint.md#disablecollisionsbetweenlinkedbodies)
+- [useLinearReferenceFrame](SliderConstraint.md#uselinearreferenceframe)
+- [object3D](SliderConstraint.md#object3d)
+- [isDestroyed](SliderConstraint.md#isdestroyed)
+
+### Accessors
+
+- [breakingThreshold](SliderConstraint.md#breakingthreshold)
+- [constraint](SliderConstraint.md#constraint)
+- [targetRigidbody](SliderConstraint.md#targetrigidbody)
+- [lowerLinLimit](SliderConstraint.md#lowerlinlimit)
+- [upperLinLimit](SliderConstraint.md#upperlinlimit)
+- [lowerAngLimit](SliderConstraint.md#loweranglimit)
+- [upperAngLimit](SliderConstraint.md#upperanglimit)
+- [poweredLinMotor](SliderConstraint.md#poweredlinmotor)
+- [maxLinMotorForce](SliderConstraint.md#maxlinmotorforce)
+- [targetLinMotorVelocity](SliderConstraint.md#targetlinmotorvelocity)
+- [eventDispatcher](SliderConstraint.md#eventdispatcher)
+- [isStart](SliderConstraint.md#isstart)
+- [transform](SliderConstraint.md#transform)
+- [enable](SliderConstraint.md#enable)
+
+### Methods
+
+- [start](SliderConstraint.md#start)
+- [wait](SliderConstraint.md#wait)
+- [resetConstraint](SliderConstraint.md#resetconstraint)
+- [destroy](SliderConstraint.md#destroy)
+- [init](SliderConstraint.md#init)
+- [stop](SliderConstraint.md#stop)
+- [onEnable](SliderConstraint.md#onenable)
+- [onDisable](SliderConstraint.md#ondisable)
+- [onUpdate](SliderConstraint.md#onupdate)
+- [onLateUpdate](SliderConstraint.md#onlateupdate)
+- [onBeforeUpdate](SliderConstraint.md#onbeforeupdate)
+- [onCompute](SliderConstraint.md#oncompute)
+- [onGraphic](SliderConstraint.md#ongraphic)
+- [onParentChange](SliderConstraint.md#onparentchange)
+- [onAddChild](SliderConstraint.md#onaddchild)
+- [onRemoveChild](SliderConstraint.md#onremovechild)
+- [cloneTo](SliderConstraint.md#cloneto)
+- [copyComponent](SliderConstraint.md#copycomponent)
+- [beforeDestroy](SliderConstraint.md#beforedestroy)
+
+## Constructors
+
+### constructor
+
+• **new SliderConstraint**(): [`SliderConstraint`](SliderConstraint.md)
+
+#### Returns
+
+[`SliderConstraint`](SliderConstraint.md)
+
+#### Inherited from
+
+ConstraintBase\.constructor
+
+## Properties
+
+### pivotSelf
+
+• **pivotSelf**: `Vector3`
+
+The pivot point for the self body
+`FrameInA Origin`
+
+#### Inherited from
+
+ConstraintBase.pivotSelf
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L19)
+
+___
+
+### pivotTarget
+
+• **pivotTarget**: `Vector3`
+
+The pivot point for the target body
+`FrameInB Origin`
+
+#### Inherited from
+
+ConstraintBase.pivotTarget
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L24)
+
+___
+
+### rotationSelf
+
+• **rotationSelf**: `Quaternion`
+
+The rotation for the self body
+`FrameInA Rotation`
+
+#### Inherited from
+
+ConstraintBase.rotationSelf
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L29)
+
+___
+
+### rotationTarget
+
+• **rotationTarget**: `Quaternion`
+
+The rotation for the target body
+`FrameInB Rotation`
+
+#### Inherited from
+
+ConstraintBase.rotationTarget
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:34](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L34)
+
+___
+
+### disableCollisionsBetweenLinkedBodies
+
+• **disableCollisionsBetweenLinkedBodies**: `boolean` = `true`
+
+#### Inherited from
+
+ConstraintBase.disableCollisionsBetweenLinkedBodies
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:36](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L36)
+
+___
+
+### useLinearReferenceFrame
+
+• **useLinearReferenceFrame**: `boolean` = `true`
+
+是否使用线性参考框架。
+默认值 `true`
+
+#### Defined in
+
+[packages/physics/constraint/SliderConstraint.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/SliderConstraint.ts#L21)
+
+___
+
+### object3D
+
+• **object3D**: `Object3D` = `null`
+
+owner object3D
+
+#### Inherited from
+
+ConstraintBase.object3D
+
+#### Defined in
+
+[src/components/ComponentBase.ts:17](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L17)
+
+___
+
+### isDestroyed
+
+• `Optional` **isDestroyed**: `boolean`
+
+#### Inherited from
+
+ConstraintBase.isDestroyed
+
+#### Defined in
+
+[src/components/ComponentBase.ts:38](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L38)
+
+## Accessors
+
+### breakingThreshold
+
+• `get` **breakingThreshold**(): `number`
+
+断裂脉冲阈值,值越大,约束越不易断裂。
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+ConstraintBase.breakingThreshold
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:41](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L41)
+
+• `set` **breakingThreshold**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.breakingThreshold
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:45](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L45)
+
+___
+
+### constraint
+
+• `get` **constraint**(): `T`
+
+获取约束实例
+
+#### Returns
+
+`T`
+
+#### Inherited from
+
+ConstraintBase.constraint
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:87](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L87)
+
+___
+
+### targetRigidbody
+
+• `get` **targetRigidbody**(): [`Rigidbody`](Rigidbody.md)
+
+目标刚体组件
+
+#### Returns
+
+[`Rigidbody`](Rigidbody.md)
+
+#### Inherited from
+
+ConstraintBase.targetRigidbody
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L119)
+
+• `set` **targetRigidbody**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | [`Rigidbody`](Rigidbody.md) |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.targetRigidbody
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L123)
+
+___
+
+### lowerLinLimit
+
+• `get` **lowerLinLimit**(): `number`
+
+线性运动的下限限制。
+默认值 `-1e30` 表示无限制
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/constraint/SliderConstraint.ts:59](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/SliderConstraint.ts#L59)
+
+• `set` **lowerLinLimit**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/SliderConstraint.ts:62](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/SliderConstraint.ts#L62)
+
+___
+
+### upperLinLimit
+
+• `get` **upperLinLimit**(): `number`
+
+线性运动的上限限制。
+默认值 `1e30` 表示无限制
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/constraint/SliderConstraint.ts:71](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/SliderConstraint.ts#L71)
+
+• `set` **upperLinLimit**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/SliderConstraint.ts:74](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/SliderConstraint.ts#L74)
+
+___
+
+### lowerAngLimit
+
+• `get` **lowerAngLimit**(): `number`
+
+角度运动的下限限制。
+默认值 `-Math.PI`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/constraint/SliderConstraint.ts:83](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/SliderConstraint.ts#L83)
+
+• `set` **lowerAngLimit**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/SliderConstraint.ts:86](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/SliderConstraint.ts#L86)
+
+___
+
+### upperAngLimit
+
+• `get` **upperAngLimit**(): `number`
+
+角度运动的上限限制。
+默认值 `Math.PI`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/constraint/SliderConstraint.ts:95](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/SliderConstraint.ts#L95)
+
+• `set` **upperAngLimit**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/SliderConstraint.ts:98](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/SliderConstraint.ts#L98)
+
+___
+
+### poweredLinMotor
+
+• `get` **poweredLinMotor**(): `boolean`
+
+是否启用线性马达。
+默认值 `false`
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[packages/physics/constraint/SliderConstraint.ts:107](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/SliderConstraint.ts#L107)
+
+• `set` **poweredLinMotor**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/SliderConstraint.ts:110](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/SliderConstraint.ts#L110)
+
+___
+
+### maxLinMotorForce
+
+• `get` **maxLinMotorForce**(): `number`
+
+线性马达的最大推力。
+默认值 `0`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/constraint/SliderConstraint.ts:119](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/SliderConstraint.ts#L119)
+
+• `set` **maxLinMotorForce**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/SliderConstraint.ts:122](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/SliderConstraint.ts#L122)
+
+___
+
+### targetLinMotorVelocity
+
+• `get` **targetLinMotorVelocity**(): `number`
+
+线性马达的目标速度。
+默认值 `0`
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/physics/constraint/SliderConstraint.ts:131](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/SliderConstraint.ts#L131)
+
+• `set` **targetLinMotorVelocity**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/constraint/SliderConstraint.ts:134](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/SliderConstraint.ts#L134)
+
+___
+
+### eventDispatcher
+
+• `get` **eventDispatcher**(): `CEventDispatcher`
+
+#### Returns
+
+`CEventDispatcher`
+
+#### Inherited from
+
+ConstraintBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:23](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L23)
+
+• `set` **eventDispatcher**(`value`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `CEventDispatcher` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.eventDispatcher
+
+#### Defined in
+
+[src/components/ComponentBase.ts:28](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L28)
+
+___
+
+### isStart
+
+• `get` **isStart**(): `boolean`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ConstraintBase.isStart
+
+#### Defined in
+
+[src/components/ComponentBase.ts:40](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L40)
+
+___
+
+### transform
+
+• `get` **transform**(): `Transform`
+
+Return the Transform component attached to the Object3D.
+
+#### Returns
+
+`Transform`
+
+#### Inherited from
+
+ConstraintBase.transform
+
+#### Defined in
+
+[src/components/ComponentBase.ts:47](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L47)
+
+___
+
+### enable
+
+• `get` **enable**(): `boolean`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+ConstraintBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:68](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L68)
+
+• `set` **enable**(`value`): `void`
+
+Enable/disable components. The enabled components can be updated, while the disabled components cannot be updated.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `value` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.enable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:54](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L54)
+
+## Methods
+
+### start
+
+▸ **start**(): `Promise`\<`void`\>
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Inherited from
+
+ConstraintBase.start
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:50](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L50)
+
+___
+
+### wait
+
+▸ **wait**(): `Promise`\<[`btSliderConstraint`](Ammo.btSliderConstraint.md)\>
+
+异步获取完成初始化的约束实例
+
+#### Returns
+
+`Promise`\<[`btSliderConstraint`](Ammo.btSliderConstraint.md)\>
+
+#### Inherited from
+
+ConstraintBase.wait
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:97](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L97)
+
+___
+
+### resetConstraint
+
+▸ **resetConstraint**(): `Promise`\<[`btSliderConstraint`](Ammo.btSliderConstraint.md)\>
+
+重置约束,销毁当前约束实例后重新创建并返回新的约束实例
+
+#### Returns
+
+`Promise`\<[`btSliderConstraint`](Ammo.btSliderConstraint.md)\>
+
+#### Inherited from
+
+ConstraintBase.resetConstraint
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:105](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L105)
+
+___
+
+### destroy
+
+▸ **destroy**(`force?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.destroy
+
+#### Defined in
+
+[packages/physics/constraint/ConstraintBase.ts:127](https://github.com/Orillusion/orillusion/blob/main/packages/physics/constraint/ConstraintBase.ts#L127)
+
+___
+
+### init
+
+▸ **init**(`param?`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `param?` | `any` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.init
+
+#### Defined in
+
+[src/components/ComponentBase.ts:112](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L112)
+
+___
+
+### stop
+
+▸ **stop**(): `void`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.stop
+
+#### Defined in
+
+[src/components/ComponentBase.ts:114](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L114)
+
+___
+
+### onEnable
+
+▸ **onEnable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onEnable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:115](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L115)
+
+___
+
+### onDisable
+
+▸ **onDisable**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onDisable
+
+#### Defined in
+
+[src/components/ComponentBase.ts:116](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L116)
+
+___
+
+### onUpdate
+
+▸ **onUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:117](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L117)
+
+___
+
+### onLateUpdate
+
+▸ **onLateUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onLateUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:118](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L118)
+
+___
+
+### onBeforeUpdate
+
+▸ **onBeforeUpdate**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onBeforeUpdate
+
+#### Defined in
+
+[src/components/ComponentBase.ts:119](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L119)
+
+___
+
+### onCompute
+
+▸ **onCompute**(`view?`, `command?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+| `command?` | `GPUCommandEncoder` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onCompute
+
+#### Defined in
+
+[src/components/ComponentBase.ts:120](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L120)
+
+___
+
+### onGraphic
+
+▸ **onGraphic**(`view?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `view?` | `View3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onGraphic
+
+#### Defined in
+
+[src/components/ComponentBase.ts:121](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L121)
+
+___
+
+### onParentChange
+
+▸ **onParentChange**(`lastParent?`, `currentParent?`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `lastParent?` | `Object3D` |
+| `currentParent?` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onParentChange
+
+#### Defined in
+
+[src/components/ComponentBase.ts:122](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L122)
+
+___
+
+### onAddChild
+
+▸ **onAddChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onAddChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:123](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L123)
+
+___
+
+### onRemoveChild
+
+▸ **onRemoveChild**(`child`): `any`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `child` | `Object3D` |
+
+#### Returns
+
+`any`
+
+#### Inherited from
+
+ConstraintBase.onRemoveChild
+
+#### Defined in
+
+[src/components/ComponentBase.ts:124](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L124)
+
+___
+
+### cloneTo
+
+▸ **cloneTo**(`obj`): `void`
+
+clone component data to target object3D
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `obj` | `Object3D` | target object3D |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.cloneTo
+
+#### Defined in
+
+[src/components/ComponentBase.ts:131](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L131)
+
+___
+
+### copyComponent
+
+▸ **copyComponent**(`from`): `this`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `from` | `this` |
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+ConstraintBase.copyComponent
+
+#### Defined in
+
+[src/components/ComponentBase.ts:133](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L133)
+
+___
+
+### beforeDestroy
+
+▸ **beforeDestroy**(`force?`): `void`
+
+before release this component, object refrences are not be set null now.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `force?` | `boolean` |
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+ConstraintBase.beforeDestroy
+
+#### Defined in
+
+[src/components/ComponentBase.ts:200](https://github.com/Orillusion/orillusion/blob/main/src/components/ComponentBase.ts#L200)
diff --git a/docs/physics/classes/TempPhyMath.md b/docs/physics/classes/TempPhyMath.md
new file mode 100644
index 00000000..0ccfc8d0
--- /dev/null
+++ b/docs/physics/classes/TempPhyMath.md
@@ -0,0 +1,327 @@
+# Class: TempPhyMath
+
+Temporary Physics Math Utility
+
+提供临时的 Ammo btVector3 和 btQuaternion 实例,并支持与引擎数据相互转换
+
+### Constructors
+
+- [constructor](TempPhyMath.md#constructor)
+
+### Properties
+
+- [tmpVecA](TempPhyMath.md#tmpveca)
+- [tmpVecB](TempPhyMath.md#tmpvecb)
+- [tmpVecC](TempPhyMath.md#tmpvecc)
+- [tmpVecD](TempPhyMath.md#tmpvecd)
+- [tmpQuaA](TempPhyMath.md#tmpquaa)
+- [tmpQuaB](TempPhyMath.md#tmpquab)
+
+### Methods
+
+- [init](TempPhyMath.md#init)
+- [toBtQua](TempPhyMath.md#tobtqua)
+- [toBtVec](TempPhyMath.md#tobtvec)
+- [setBtVec](TempPhyMath.md#setbtvec)
+- [setBtQua](TempPhyMath.md#setbtqua)
+- [fromBtVec](TempPhyMath.md#frombtvec)
+- [fromBtQua](TempPhyMath.md#frombtqua)
+- [eulerToBtQua](TempPhyMath.md#eulertobtqua)
+- [zeroBtVec](TempPhyMath.md#zerobtvec)
+- [resetBtQua](TempPhyMath.md#resetbtqua)
+
+## Constructors
+
+### constructor
+
+• **new TempPhyMath**(): [`TempPhyMath`](TempPhyMath.md)
+
+#### Returns
+
+[`TempPhyMath`](TempPhyMath.md)
+
+## Properties
+
+### tmpVecA
+
+▪ `Static` `Readonly` **tmpVecA**: [`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/physics/utils/TempPhyMath.ts:10](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/TempPhyMath.ts#L10)
+
+___
+
+### tmpVecB
+
+▪ `Static` `Readonly` **tmpVecB**: [`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/physics/utils/TempPhyMath.ts:11](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/TempPhyMath.ts#L11)
+
+___
+
+### tmpVecC
+
+▪ `Static` `Readonly` **tmpVecC**: [`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/physics/utils/TempPhyMath.ts:12](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/TempPhyMath.ts#L12)
+
+___
+
+### tmpVecD
+
+▪ `Static` `Readonly` **tmpVecD**: [`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/physics/utils/TempPhyMath.ts:13](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/TempPhyMath.ts#L13)
+
+___
+
+### tmpQuaA
+
+▪ `Static` `Readonly` **tmpQuaA**: [`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Defined in
+
+[packages/physics/utils/TempPhyMath.ts:14](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/TempPhyMath.ts#L14)
+
+___
+
+### tmpQuaB
+
+▪ `Static` `Readonly` **tmpQuaB**: [`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Defined in
+
+[packages/physics/utils/TempPhyMath.ts:15](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/TempPhyMath.ts#L15)
+
+## Methods
+
+### init
+
+▸ **init**(): `void`
+
+初始化 Ammo 后创建预定义的 btVector3 和 btQuaternion 实例,以便复用
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/physics/utils/TempPhyMath.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/TempPhyMath.ts#L20)
+
+___
+
+### toBtQua
+
+▸ **toBtQua**(`qua`, `btQua?`): [`btQuaternion`](Ammo.btQuaternion.md)
+
+Quaternion to Ammo.btQuaternion
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `qua` | `Quaternion` |
+| `btQua?` | [`btQuaternion`](Ammo.btQuaternion.md) |
+
+#### Returns
+
+[`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Defined in
+
+[packages/physics/utils/TempPhyMath.ts:32](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/TempPhyMath.ts#L32)
+
+___
+
+### toBtVec
+
+▸ **toBtVec**(`vec`, `btVec?`): [`btVector3`](Ammo.btVector3.md)
+
+Vector3 to Ammo.btVector3
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `vec` | `Vector3` |
+| `btVec?` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/physics/utils/TempPhyMath.ts:41](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/TempPhyMath.ts#L41)
+
+___
+
+### setBtVec
+
+▸ **setBtVec**(`x`, `y`, `z`, `btVec?`): [`btVector3`](Ammo.btVector3.md)
+
+Set Ammo.btVector3 using x, y, z
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `z` | `number` |
+| `btVec?` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/physics/utils/TempPhyMath.ts:50](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/TempPhyMath.ts#L50)
+
+___
+
+### setBtQua
+
+▸ **setBtQua**(`x`, `y`, `z`, `w`, `btQua?`): [`btQuaternion`](Ammo.btQuaternion.md)
+
+Set Ammo.btQuaternion using x, y, z, w
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `x` | `number` |
+| `y` | `number` |
+| `z` | `number` |
+| `w` | `number` |
+| `btQua?` | [`btQuaternion`](Ammo.btQuaternion.md) |
+
+#### Returns
+
+[`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Defined in
+
+[packages/physics/utils/TempPhyMath.ts:59](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/TempPhyMath.ts#L59)
+
+___
+
+### fromBtVec
+
+▸ **fromBtVec**(`btVec`, `vec?`): `Vector3`
+
+Ammo.btVector3 to Vector3
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `btVec` | [`btVector3`](Ammo.btVector3.md) |
+| `vec?` | `Vector3` |
+
+#### Returns
+
+`Vector3`
+
+#### Defined in
+
+[packages/physics/utils/TempPhyMath.ts:68](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/TempPhyMath.ts#L68)
+
+___
+
+### fromBtQua
+
+▸ **fromBtQua**(`btQua`, `qua?`): `Quaternion`
+
+Ammo.btQuaternion to Quaternion
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `btQua` | [`btQuaternion`](Ammo.btQuaternion.md) |
+| `qua?` | `Quaternion` |
+
+#### Returns
+
+`Quaternion`
+
+#### Defined in
+
+[packages/physics/utils/TempPhyMath.ts:77](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/TempPhyMath.ts#L77)
+
+___
+
+### eulerToBtQua
+
+▸ **eulerToBtQua**(`vec`, `qua?`): [`btQuaternion`](Ammo.btQuaternion.md)
+
+Euler Vector3 to Ammo.Quaternion
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `vec` | `Vector3` |
+| `qua?` | [`btQuaternion`](Ammo.btQuaternion.md) |
+
+#### Returns
+
+[`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Defined in
+
+[packages/physics/utils/TempPhyMath.ts:86](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/TempPhyMath.ts#L86)
+
+___
+
+### zeroBtVec
+
+▸ **zeroBtVec**(`btVec?`): [`btVector3`](Ammo.btVector3.md)
+
+Sets the given Ammo.btVector3 to (0, 0, 0)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `btVec?` | [`btVector3`](Ammo.btVector3.md) |
+
+#### Returns
+
+[`btVector3`](Ammo.btVector3.md)
+
+#### Defined in
+
+[packages/physics/utils/TempPhyMath.ts:95](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/TempPhyMath.ts#L95)
+
+___
+
+### resetBtQua
+
+▸ **resetBtQua**(`btQua?`): [`btQuaternion`](Ammo.btQuaternion.md)
+
+Sets the given Ammo.btQuaternion to (0, 0, 0, 1)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `btQua?` | [`btQuaternion`](Ammo.btQuaternion.md) |
+
+#### Returns
+
+[`btQuaternion`](Ammo.btQuaternion.md)
+
+#### Defined in
+
+[packages/physics/utils/TempPhyMath.ts:102](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/TempPhyMath.ts#L102)
diff --git a/docs/physics/enums/ActivationState.md b/docs/physics/enums/ActivationState.md
new file mode 100644
index 00000000..1c9e1dae
--- /dev/null
+++ b/docs/physics/enums/ActivationState.md
@@ -0,0 +1,71 @@
+# Enumeration: ActivationState
+
+Activation states
+
+### Enumeration Members
+
+- [ACTIVE\_TAG](ActivationState.md#active_tag)
+- [ISLAND\_SLEEPING](ActivationState.md#island_sleeping)
+- [WANTS\_DEACTIVATION](ActivationState.md#wants_deactivation)
+- [DISABLE\_DEACTIVATION](ActivationState.md#disable_deactivation)
+- [DISABLE\_SIMULATION](ActivationState.md#disable_simulation)
+
+## Enumeration Members
+
+### ACTIVE\_TAG
+
+• **ACTIVE\_TAG** = ``1``
+
+The object is active and will be processed by the simulation.
+
+#### Defined in
+
+[packages/physics/rigidbody/RigidbodyEnum.ts:62](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/RigidbodyEnum.ts#L62)
+
+___
+
+### ISLAND\_SLEEPING
+
+• **ISLAND\_SLEEPING** = ``2``
+
+The object is inactive but may be activated if other active objects collide with it.
+
+#### Defined in
+
+[packages/physics/rigidbody/RigidbodyEnum.ts:66](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/RigidbodyEnum.ts#L66)
+
+___
+
+### WANTS\_DEACTIVATION
+
+• **WANTS\_DEACTIVATION** = ``3``
+
+The object is requesting to be deactivated in the next simulation step. If there is no further interaction, the object will enter a sleeping state.
+
+#### Defined in
+
+[packages/physics/rigidbody/RigidbodyEnum.ts:70](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/RigidbodyEnum.ts#L70)
+
+___
+
+### DISABLE\_DEACTIVATION
+
+• **DISABLE\_DEACTIVATION** = ``4``
+
+Disables automatic sleeping. The object will continue to be simulated even if it is stationary.
+
+#### Defined in
+
+[packages/physics/rigidbody/RigidbodyEnum.ts:74](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/RigidbodyEnum.ts#L74)
+
+___
+
+### DISABLE\_SIMULATION
+
+• **DISABLE\_SIMULATION** = ``5``
+
+The object will not be simulated by the physics engine, whether dynamic or colliding, but can be moved or manipulated programmatically.
+
+#### Defined in
+
+[packages/physics/rigidbody/RigidbodyEnum.ts:78](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/RigidbodyEnum.ts#L78)
diff --git a/docs/physics/enums/CollisionFlags.md b/docs/physics/enums/CollisionFlags.md
new file mode 100644
index 00000000..78487921
--- /dev/null
+++ b/docs/physics/enums/CollisionFlags.md
@@ -0,0 +1,162 @@
+# Enumeration: CollisionFlags
+
+Collision flags
+
+### Enumeration Members
+
+- [DEFAULT](CollisionFlags.md#default)
+- [STATIC\_OBJECT](CollisionFlags.md#static_object)
+- [KINEMATIC\_OBJECT](CollisionFlags.md#kinematic_object)
+- [NO\_CONTACT\_RESPONSE](CollisionFlags.md#no_contact_response)
+- [CUSTOM\_MATERIAL\_CALLBACK](CollisionFlags.md#custom_material_callback)
+- [CHARACTER\_OBJECT](CollisionFlags.md#character_object)
+- [DISABLE\_VISUALIZE\_OBJECT](CollisionFlags.md#disable_visualize_object)
+- [DISABLE\_SPU\_COLLISION\_PROCESSING](CollisionFlags.md#disable_spu_collision_processing)
+- [HAS\_CONTACT\_STIFFNESS\_DAMPING](CollisionFlags.md#has_contact_stiffness_damping)
+- [HAS\_CUSTOM\_DEBUG\_RENDERING\_COLOR](CollisionFlags.md#has_custom_debug_rendering_color)
+- [HAS\_FRICTION\_ANCHOR](CollisionFlags.md#has_friction_anchor)
+- [HAS\_COLLISION\_SOUND\_TRIGGER](CollisionFlags.md#has_collision_sound_trigger)
+
+## Enumeration Members
+
+### DEFAULT
+
+• **DEFAULT** = ``0``
+
+Default flag for dynamic rigid bodies.
+
+#### Defined in
+
+[packages/physics/rigidbody/RigidbodyEnum.ts:8](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/RigidbodyEnum.ts#L8)
+
+___
+
+### STATIC\_OBJECT
+
+• **STATIC\_OBJECT** = ``1``
+
+Used for static objects. These objects do not move but can be collided with by other objects.
+
+#### Defined in
+
+[packages/physics/rigidbody/RigidbodyEnum.ts:12](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/RigidbodyEnum.ts#L12)
+
+___
+
+### KINEMATIC\_OBJECT
+
+• **KINEMATIC\_OBJECT** = ``2``
+
+Used for kinematic objects. These objects are not affected by physical forces (like gravity or collisions) but can be moved programmatically and affect dynamic objects they collide with.
+
+#### Defined in
+
+[packages/physics/rigidbody/RigidbodyEnum.ts:16](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/RigidbodyEnum.ts#L16)
+
+___
+
+### NO\_CONTACT\_RESPONSE
+
+• **NO\_CONTACT\_RESPONSE** = ``4``
+
+Objects with this flag do not participate in collision response but still trigger collision events.
+
+#### Defined in
+
+[packages/physics/rigidbody/RigidbodyEnum.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/RigidbodyEnum.ts#L20)
+
+___
+
+### CUSTOM\_MATERIAL\_CALLBACK
+
+• **CUSTOM\_MATERIAL\_CALLBACK** = ``8``
+
+This flag indicates that the object will use a custom material interaction callback.
+
+#### Defined in
+
+[packages/physics/rigidbody/RigidbodyEnum.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/RigidbodyEnum.ts#L24)
+
+___
+
+### CHARACTER\_OBJECT
+
+• **CHARACTER\_OBJECT** = ``16``
+
+Special flag for collision objects used by character controllers. This is typically used to optimize character collision handling in games.
+
+#### Defined in
+
+[packages/physics/rigidbody/RigidbodyEnum.ts:28](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/RigidbodyEnum.ts#L28)
+
+___
+
+### DISABLE\_VISUALIZE\_OBJECT
+
+• **DISABLE\_VISUALIZE\_OBJECT** = ``32``
+
+Prevents this object from being displayed in the physical debug view.
+
+#### Defined in
+
+[packages/physics/rigidbody/RigidbodyEnum.ts:32](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/RigidbodyEnum.ts#L32)
+
+___
+
+### DISABLE\_SPU\_COLLISION\_PROCESSING
+
+• **DISABLE\_SPU\_COLLISION\_PROCESSING** = ``64``
+
+Prevents this object’s collision from being processed on the auxiliary processing unit, optimizing performance on specific hardware platforms.
+
+#### Defined in
+
+[packages/physics/rigidbody/RigidbodyEnum.ts:36](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/RigidbodyEnum.ts#L36)
+
+___
+
+### HAS\_CONTACT\_STIFFNESS\_DAMPING
+
+• **HAS\_CONTACT\_STIFFNESS\_DAMPING** = ``128``
+
+Enables custom contact stiffness and damping settings for this object. This allows adjusting the physical response's stiffness and damping when handling collisions, used to simulate more complex physical interactions.
+
+#### Defined in
+
+[packages/physics/rigidbody/RigidbodyEnum.ts:40](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/RigidbodyEnum.ts#L40)
+
+___
+
+### HAS\_CUSTOM\_DEBUG\_RENDERING\_COLOR
+
+• **HAS\_CUSTOM\_DEBUG\_RENDERING\_COLOR** = ``256``
+
+Allows specifying a custom rendering color for this object in the physical debug view. This helps differentiate and identify specific physical objects during debugging.
+
+#### Defined in
+
+[packages/physics/rigidbody/RigidbodyEnum.ts:44](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/RigidbodyEnum.ts#L44)
+
+___
+
+### HAS\_FRICTION\_ANCHOR
+
+• **HAS\_FRICTION\_ANCHOR** = ``512``
+
+Enables friction anchors for this object. Friction anchors improve the friction effect on contact surfaces, typically used for vehicle tires to enhance grip on the ground and reduce sliding.
+
+#### Defined in
+
+[packages/physics/rigidbody/RigidbodyEnum.ts:48](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/RigidbodyEnum.ts#L48)
+
+___
+
+### HAS\_COLLISION\_SOUND\_TRIGGER
+
+• **HAS\_COLLISION\_SOUND\_TRIGGER** = ``1024``
+
+Triggers sound effects when this object collides. This flag can be used to configure sound feedback for specific collisions, enhancing the realism and immersion of the game or simulation environment.
+
+#### Defined in
+
+[packages/physics/rigidbody/RigidbodyEnum.ts:52](https://github.com/Orillusion/orillusion/blob/main/packages/physics/rigidbody/RigidbodyEnum.ts#L52)
diff --git a/docs/physics/enums/DebugDrawMode.md b/docs/physics/enums/DebugDrawMode.md
new file mode 100644
index 00000000..27f6ece0
--- /dev/null
+++ b/docs/physics/enums/DebugDrawMode.md
@@ -0,0 +1,225 @@
+# Enumeration: DebugDrawMode
+
+### Enumeration Members
+
+- [NoDebug](DebugDrawMode.md#nodebug)
+- [DrawWireframe](DebugDrawMode.md#drawwireframe)
+- [DrawAabb](DebugDrawMode.md#drawaabb)
+- [DrawFeaturesText](DebugDrawMode.md#drawfeaturestext)
+- [DrawContactPoints](DebugDrawMode.md#drawcontactpoints)
+- [NoDeactivation](DebugDrawMode.md#nodeactivation)
+- [NoHelpText](DebugDrawMode.md#nohelptext)
+- [DrawText](DebugDrawMode.md#drawtext)
+- [ProfileTimings](DebugDrawMode.md#profiletimings)
+- [EnableSatComparison](DebugDrawMode.md#enablesatcomparison)
+- [DisableBulletLCP](DebugDrawMode.md#disablebulletlcp)
+- [EnableCCD](DebugDrawMode.md#enableccd)
+- [DrawConstraints](DebugDrawMode.md#drawconstraints)
+- [DrawConstraintLimits](DebugDrawMode.md#drawconstraintlimits)
+- [FastWireframe](DebugDrawMode.md#fastwireframe)
+- [DrawAabbDynamic](DebugDrawMode.md#drawaabbdynamic)
+- [DrawSoftBodies](DebugDrawMode.md#drawsoftbodies)
+
+## Enumeration Members
+
+### NoDebug
+
+• **NoDebug** = ``0``
+
+不显示调试信息
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:25](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L25)
+
+___
+
+### DrawWireframe
+
+• **DrawWireframe** = ``1``
+
+绘制物理对象的线框
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:29](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L29)
+
+___
+
+### DrawAabb
+
+• **DrawAabb** = ``2``
+
+绘制物理对象的包围盒(AABB)
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:33](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L33)
+
+___
+
+### DrawFeaturesText
+
+• **DrawFeaturesText** = ``4``
+
+绘制特征点文本
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:37](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L37)
+
+___
+
+### DrawContactPoints
+
+• **DrawContactPoints** = ``8``
+
+绘制接触点
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:41](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L41)
+
+___
+
+### NoDeactivation
+
+• **NoDeactivation** = ``16``
+
+禁用去激活
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:45](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L45)
+
+___
+
+### NoHelpText
+
+• **NoHelpText** = ``32``
+
+不显示帮助文本
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:49](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L49)
+
+___
+
+### DrawText
+
+• **DrawText** = ``64``
+
+绘制文本信息
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:53](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L53)
+
+___
+
+### ProfileTimings
+
+• **ProfileTimings** = ``128``
+
+显示性能计时信息
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:57](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L57)
+
+___
+
+### EnableSatComparison
+
+• **EnableSatComparison** = ``256``
+
+启用 SAT 比较
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:61](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L61)
+
+___
+
+### DisableBulletLCP
+
+• **DisableBulletLCP** = ``512``
+
+禁用 Bullet 的 LCP 算法
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:65](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L65)
+
+___
+
+### EnableCCD
+
+• **EnableCCD** = ``1024``
+
+启用连续碰撞检测
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:69](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L69)
+
+___
+
+### DrawConstraints
+
+• **DrawConstraints** = ``2048``
+
+绘制约束
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:73](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L73)
+
+___
+
+### DrawConstraintLimits
+
+• **DrawConstraintLimits** = ``4096``
+
+绘制约束限制
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:77](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L77)
+
+___
+
+### FastWireframe
+
+• **FastWireframe** = ``8192``
+
+绘制快速剔除代理的 AABB
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:81](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L81)
+
+___
+
+### DrawAabbDynamic
+
+• **DrawAabbDynamic** = ``16384``
+
+绘制动态 AABB 树
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:85](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L85)
+
+___
+
+### DrawSoftBodies
+
+• **DrawSoftBodies** = ``32768``
+
+绘制软体物理
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:89](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L89)
diff --git a/docs/physics/functions/Ammo.UTF8ToString.md b/docs/physics/functions/Ammo.UTF8ToString.md
new file mode 100644
index 00000000..91661fe6
--- /dev/null
+++ b/docs/physics/functions/Ammo.UTF8ToString.md
@@ -0,0 +1,19 @@
+# Function: UTF8ToString
+
+[Ammo](../modules/Ammo.md).UTF8ToString
+
+▸ **UTF8ToString**(`warningString`): `string`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `warningString` | `number` |
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:13](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L13)
diff --git a/docs/physics/functions/Ammo._free.md b/docs/physics/functions/Ammo._free.md
new file mode 100644
index 00000000..19152272
--- /dev/null
+++ b/docs/physics/functions/Ammo._free.md
@@ -0,0 +1,19 @@
+# Function: \_free
+
+[Ammo](../modules/Ammo.md)._free
+
+▸ **_free**(`ptr`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ptr` | `number` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:17](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L17)
diff --git a/docs/physics/functions/Ammo._malloc.md b/docs/physics/functions/Ammo._malloc.md
new file mode 100644
index 00000000..27109175
--- /dev/null
+++ b/docs/physics/functions/Ammo._malloc.md
@@ -0,0 +1,19 @@
+# Function: \_malloc
+
+[Ammo](../modules/Ammo.md)._malloc
+
+▸ **_malloc**(`size`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `size` | `number` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:16](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L16)
diff --git a/docs/physics/functions/Ammo.addFunction.md b/docs/physics/functions/Ammo.addFunction.md
new file mode 100644
index 00000000..9d5db861
--- /dev/null
+++ b/docs/physics/functions/Ammo.addFunction.md
@@ -0,0 +1,19 @@
+# Function: addFunction
+
+[Ammo](../modules/Ammo.md).addFunction
+
+▸ **addFunction**(`func`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `func` | `Function` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:11](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L11)
diff --git a/docs/physics/functions/Ammo.castObject.md b/docs/physics/functions/Ammo.castObject.md
new file mode 100644
index 00000000..7803db66
--- /dev/null
+++ b/docs/physics/functions/Ammo.castObject.md
@@ -0,0 +1,27 @@
+# Function: castObject
+
+[Ammo](../modules/Ammo.md).castObject
+
+▸ **castObject**\<`T`, `C`\>(`object`, `type`): `InstanceType`\<`C`\>
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | `T` |
+| `C` | extends (...`args`: `any`[]) => `T` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `object` | `any` |
+| `type` | `C` |
+
+#### Returns
+
+`InstanceType`\<`C`\>
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:14](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L14)
diff --git a/docs/physics/functions/Ammo.destroy.md b/docs/physics/functions/Ammo.destroy.md
new file mode 100644
index 00000000..7419a140
--- /dev/null
+++ b/docs/physics/functions/Ammo.destroy.md
@@ -0,0 +1,19 @@
+# Function: destroy
+
+[Ammo](../modules/Ammo.md).destroy
+
+▸ **destroy**(`obj`): `void`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `obj` | `any` |
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:15](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L15)
diff --git a/docs/physics/functions/Ammo.getPointer.md b/docs/physics/functions/Ammo.getPointer.md
new file mode 100644
index 00000000..54cb0cfb
--- /dev/null
+++ b/docs/physics/functions/Ammo.getPointer.md
@@ -0,0 +1,19 @@
+# Function: getPointer
+
+[Ammo](../modules/Ammo.md).getPointer
+
+▸ **getPointer**(`object`): `number`
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `object` | `any` |
+
+#### Returns
+
+`number`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:12](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L12)
diff --git a/docs/physics/functions/Ammo.wrapPointer.md b/docs/physics/functions/Ammo.wrapPointer.md
new file mode 100644
index 00000000..6e473e79
--- /dev/null
+++ b/docs/physics/functions/Ammo.wrapPointer.md
@@ -0,0 +1,26 @@
+# Function: wrapPointer
+
+[Ammo](../modules/Ammo.md).wrapPointer
+
+▸ **wrapPointer**\<`T`\>(`ptr`, `type`): `T`
+
+#### Type parameters
+
+| Name |
+| :------ |
+| `T` |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `ptr` | `number` |
+| `type` | (...`args`: `any`[]) => `T` |
+
+#### Returns
+
+`T`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:10](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L10)
diff --git a/docs/physics/index.md b/docs/physics/index.md
new file mode 100644
index 00000000..da2596ce
--- /dev/null
+++ b/docs/physics/index.md
@@ -0,0 +1,43 @@
+# @orillusion/physics
+
+## Namespaces
+
+- [Ammo](modules/Ammo.md)
+
+## Enumerations
+
+- [CollisionFlags](enums/CollisionFlags.md)
+- [ActivationState](enums/ActivationState.md)
+- [DebugDrawMode](enums/DebugDrawMode.md)
+
+## Classes
+
+- [ConeTwistConstraint](classes/ConeTwistConstraint.md)
+- [FixedConstraint](classes/FixedConstraint.md)
+- [Generic6DofConstraint](classes/Generic6DofConstraint.md)
+- [Generic6DofSpringConstraint](classes/Generic6DofSpringConstraint.md)
+- [HingeConstraint](classes/HingeConstraint.md)
+- [PointToPointConstraint](classes/PointToPointConstraint.md)
+- [SliderConstraint](classes/SliderConstraint.md)
+- [GhostTrigger](classes/GhostTrigger.md)
+- [ClothSoftbody](classes/ClothSoftbody.md)
+- [RopeSoftbody](classes/RopeSoftbody.md)
+- [CollisionShapeUtil](classes/CollisionShapeUtil.md)
+- [ContactProcessedUtil](classes/ContactProcessedUtil.md)
+- [PhysicsDragger](classes/PhysicsDragger.md)
+- [RigidBodyMapping](classes/RigidBodyMapping.md)
+- [RigidBodyUtil](classes/RigidBodyUtil.md)
+- [TempPhyMath](classes/TempPhyMath.md)
+
+## Interfaces
+
+- [ChildShape](interfaces/ChildShape.md)
+
+## Type Aliases
+
+- [CornerType](types/CornerType.md)
+- [DebugDrawerOptions](types/DebugDrawerOptions.md)
+
+## Components
+
+- [Rigidbody](classes/Rigidbody.md)
diff --git a/docs/physics/interfaces/ChildShape.md b/docs/physics/interfaces/ChildShape.md
new file mode 100644
index 00000000..ebb37f23
--- /dev/null
+++ b/docs/physics/interfaces/ChildShape.md
@@ -0,0 +1,37 @@
+# Interface: ChildShape
+
+### Properties
+
+- [shape](ChildShape.md#shape)
+- [position](ChildShape.md#position)
+- [rotation](ChildShape.md#rotation)
+
+## Properties
+
+### shape
+
+• **shape**: [`btCollisionShape`](../classes/Ammo.btCollisionShape.md)
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:6](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L6)
+
+___
+
+### position
+
+• **position**: `Vector3`
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:7](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L7)
+
+___
+
+### rotation
+
+• **rotation**: `Quaternion`
+
+#### Defined in
+
+[packages/physics/utils/CollisionShapeUtil.ts:8](https://github.com/Orillusion/orillusion/blob/main/packages/physics/utils/CollisionShapeUtil.ts#L8)
diff --git a/docs/physics/modules/Ammo.md b/docs/physics/modules/Ammo.md
new file mode 100644
index 00000000..37cdf833
--- /dev/null
+++ b/docs/physics/modules/Ammo.md
@@ -0,0 +1,152 @@
+# Namespace: Ammo
+
+Ammo.js by Bullet2
+
+### Classes
+
+- [btIDebugDraw](../classes/Ammo.btIDebugDraw.md)
+- [DebugDrawer](../classes/Ammo.DebugDrawer.md)
+- [btVector3](../classes/Ammo.btVector3.md)
+- [btVector4](../classes/Ammo.btVector4.md)
+- [btQuadWord](../classes/Ammo.btQuadWord.md)
+- [btQuaternion](../classes/Ammo.btQuaternion.md)
+- [btMatrix3x3](../classes/Ammo.btMatrix3x3.md)
+- [btTransform](../classes/Ammo.btTransform.md)
+- [btMotionState](../classes/Ammo.btMotionState.md)
+- [btDefaultMotionState](../classes/Ammo.btDefaultMotionState.md)
+- [btCollisionObject](../classes/Ammo.btCollisionObject.md)
+- [btCollisionObjectWrapper](../classes/Ammo.btCollisionObjectWrapper.md)
+- [RayResultCallback](../classes/Ammo.RayResultCallback.md)
+- [ClosestRayResultCallback](../classes/Ammo.ClosestRayResultCallback.md)
+- [btConstCollisionObjectArray](../classes/Ammo.btConstCollisionObjectArray.md)
+- [btScalarArray](../classes/Ammo.btScalarArray.md)
+- [AllHitsRayResultCallback](../classes/Ammo.AllHitsRayResultCallback.md)
+- [btManifoldPoint](../classes/Ammo.btManifoldPoint.md)
+- [ContactResultCallback](../classes/Ammo.ContactResultCallback.md)
+- [ConcreteContactResultCallback](../classes/Ammo.ConcreteContactResultCallback.md)
+- [LocalShapeInfo](../classes/Ammo.LocalShapeInfo.md)
+- [LocalConvexResult](../classes/Ammo.LocalConvexResult.md)
+- [ConvexResultCallback](../classes/Ammo.ConvexResultCallback.md)
+- [ClosestConvexResultCallback](../classes/Ammo.ClosestConvexResultCallback.md)
+- [btCollisionShape](../classes/Ammo.btCollisionShape.md)
+- [btConvexShape](../classes/Ammo.btConvexShape.md)
+- [btConvexTriangleMeshShape](../classes/Ammo.btConvexTriangleMeshShape.md)
+- [btBoxShape](../classes/Ammo.btBoxShape.md)
+- [btCapsuleShape](../classes/Ammo.btCapsuleShape.md)
+- [btCapsuleShapeX](../classes/Ammo.btCapsuleShapeX.md)
+- [btCapsuleShapeZ](../classes/Ammo.btCapsuleShapeZ.md)
+- [btCylinderShape](../classes/Ammo.btCylinderShape.md)
+- [btCylinderShapeX](../classes/Ammo.btCylinderShapeX.md)
+- [btCylinderShapeZ](../classes/Ammo.btCylinderShapeZ.md)
+- [btSphereShape](../classes/Ammo.btSphereShape.md)
+- [btMultiSphereShape](../classes/Ammo.btMultiSphereShape.md)
+- [btConeShape](../classes/Ammo.btConeShape.md)
+- [btConeShapeX](../classes/Ammo.btConeShapeX.md)
+- [btConeShapeZ](../classes/Ammo.btConeShapeZ.md)
+- [btIntArray](../classes/Ammo.btIntArray.md)
+- [btFace](../classes/Ammo.btFace.md)
+- [btVector3Array](../classes/Ammo.btVector3Array.md)
+- [btFaceArray](../classes/Ammo.btFaceArray.md)
+- [btConvexPolyhedron](../classes/Ammo.btConvexPolyhedron.md)
+- [btConvexHullShape](../classes/Ammo.btConvexHullShape.md)
+- [btShapeHull](../classes/Ammo.btShapeHull.md)
+- [btCompoundShape](../classes/Ammo.btCompoundShape.md)
+- [btStridingMeshInterface](../classes/Ammo.btStridingMeshInterface.md)
+- [btIndexedMesh](../classes/Ammo.btIndexedMesh.md)
+- [btIndexedMeshArray](../classes/Ammo.btIndexedMeshArray.md)
+- [btTriangleMesh](../classes/Ammo.btTriangleMesh.md)
+- [btConcaveShape](../classes/Ammo.btConcaveShape.md)
+- [btEmptyShape](../classes/Ammo.btEmptyShape.md)
+- [btStaticPlaneShape](../classes/Ammo.btStaticPlaneShape.md)
+- [btTriangleMeshShape](../classes/Ammo.btTriangleMeshShape.md)
+- [btBvhTriangleMeshShape](../classes/Ammo.btBvhTriangleMeshShape.md)
+- [btGImpactMeshShape](../classes/Ammo.btGImpactMeshShape.md)
+- [btHeightfieldTerrainShape](../classes/Ammo.btHeightfieldTerrainShape.md)
+- [btDefaultCollisionConstructionInfo](../classes/Ammo.btDefaultCollisionConstructionInfo.md)
+- [btDefaultCollisionConfiguration](../classes/Ammo.btDefaultCollisionConfiguration.md)
+- [btPersistentManifold](../classes/Ammo.btPersistentManifold.md)
+- [btDispatcher](../classes/Ammo.btDispatcher.md)
+- [btCollisionDispatcher](../classes/Ammo.btCollisionDispatcher.md)
+- [btOverlappingPairCallback](../classes/Ammo.btOverlappingPairCallback.md)
+- [btOverlappingPairCache](../classes/Ammo.btOverlappingPairCache.md)
+- [btAxisSweep3](../classes/Ammo.btAxisSweep3.md)
+- [btBroadphaseInterface](../classes/Ammo.btBroadphaseInterface.md)
+- [btCollisionConfiguration](../classes/Ammo.btCollisionConfiguration.md)
+- [btDbvtBroadphase](../classes/Ammo.btDbvtBroadphase.md)
+- [btBroadphaseProxy](../classes/Ammo.btBroadphaseProxy.md)
+- [btRigidBodyConstructionInfo](../classes/Ammo.btRigidBodyConstructionInfo.md)
+- [btRigidBody](../classes/Ammo.btRigidBody.md)
+- [btConstraintSetting](../classes/Ammo.btConstraintSetting.md)
+- [btTypedConstraint](../classes/Ammo.btTypedConstraint.md)
+- [btPoint2PointConstraint](../classes/Ammo.btPoint2PointConstraint.md)
+- [btGeneric6DofConstraint](../classes/Ammo.btGeneric6DofConstraint.md)
+- [btGeneric6DofSpringConstraint](../classes/Ammo.btGeneric6DofSpringConstraint.md)
+- [btSequentialImpulseConstraintSolver](../classes/Ammo.btSequentialImpulseConstraintSolver.md)
+- [btConeTwistConstraint](../classes/Ammo.btConeTwistConstraint.md)
+- [btHingeConstraint](../classes/Ammo.btHingeConstraint.md)
+- [btSliderConstraint](../classes/Ammo.btSliderConstraint.md)
+- [btFixedConstraint](../classes/Ammo.btFixedConstraint.md)
+- [btConstraintSolver](../classes/Ammo.btConstraintSolver.md)
+- [btDispatcherInfo](../classes/Ammo.btDispatcherInfo.md)
+- [btCollisionWorld](../classes/Ammo.btCollisionWorld.md)
+- [btContactSolverInfo](../classes/Ammo.btContactSolverInfo.md)
+- [btDynamicsWorld](../classes/Ammo.btDynamicsWorld.md)
+- [btDiscreteDynamicsWorld](../classes/Ammo.btDiscreteDynamicsWorld.md)
+- [btVehicleTuning](../classes/Ammo.btVehicleTuning.md)
+- [btVehicleRaycasterResult](../classes/Ammo.btVehicleRaycasterResult.md)
+- [btVehicleRaycaster](../classes/Ammo.btVehicleRaycaster.md)
+- [btDefaultVehicleRaycaster](../classes/Ammo.btDefaultVehicleRaycaster.md)
+- [RaycastInfo](../classes/Ammo.RaycastInfo.md)
+- [btWheelInfoConstructionInfo](../classes/Ammo.btWheelInfoConstructionInfo.md)
+- [btWheelInfo](../classes/Ammo.btWheelInfo.md)
+- [btActionInterface](../classes/Ammo.btActionInterface.md)
+- [btKinematicCharacterController](../classes/Ammo.btKinematicCharacterController.md)
+- [btRaycastVehicle](../classes/Ammo.btRaycastVehicle.md)
+- [btGhostObject](../classes/Ammo.btGhostObject.md)
+- [btPairCachingGhostObject](../classes/Ammo.btPairCachingGhostObject.md)
+- [btGhostPairCallback](../classes/Ammo.btGhostPairCallback.md)
+- [btSoftBodyWorldInfo](../classes/Ammo.btSoftBodyWorldInfo.md)
+- [Face](../classes/Ammo.Face.md)
+- [tFaceArray](../classes/Ammo.tFaceArray.md)
+- [Node](../classes/Ammo.Node.md)
+- [tNodeArray](../classes/Ammo.tNodeArray.md)
+- [Material](../classes/Ammo.Material.md)
+- [tMaterialArray](../classes/Ammo.tMaterialArray.md)
+- [Anchor](../classes/Ammo.Anchor.md)
+- [tAnchorArray](../classes/Ammo.tAnchorArray.md)
+- [Config](../classes/Ammo.Config.md)
+- [btSoftBody](../classes/Ammo.btSoftBody.md)
+- [btSoftBodyRigidBodyCollisionConfiguration](../classes/Ammo.btSoftBodyRigidBodyCollisionConfiguration.md)
+- [btSoftBodySolver](../classes/Ammo.btSoftBodySolver.md)
+- [btDefaultSoftBodySolver](../classes/Ammo.btDefaultSoftBodySolver.md)
+- [btSoftBodyArray](../classes/Ammo.btSoftBodyArray.md)
+- [btSoftRigidDynamicsWorld](../classes/Ammo.btSoftRigidDynamicsWorld.md)
+- [btSoftBodyHelpers](../classes/Ammo.btSoftBodyHelpers.md)
+
+### Type Aliases
+
+- [PHY\_ScalarType](../types/Ammo.PHY_ScalarType.md)
+- [btConstraintParams](../types/Ammo.btConstraintParams.md)
+- [btInternalTickCallback](../types/Ammo.btInternalTickCallback.md)
+
+### Variables
+
+- [HEAP8](../variables/Ammo.HEAP8.md)
+- [HEAP16](../variables/Ammo.HEAP16.md)
+- [HEAP32](../variables/Ammo.HEAP32.md)
+- [HEAPU8](../variables/Ammo.HEAPU8.md)
+- [HEAPU16](../variables/Ammo.HEAPU16.md)
+- [HEAPU32](../variables/Ammo.HEAPU32.md)
+- [HEAPF32](../variables/Ammo.HEAPF32.md)
+- [HEAPF64](../variables/Ammo.HEAPF64.md)
+
+### Functions
+
+- [wrapPointer](../functions/Ammo.wrapPointer.md)
+- [addFunction](../functions/Ammo.addFunction.md)
+- [getPointer](../functions/Ammo.getPointer.md)
+- [UTF8ToString](../functions/Ammo.UTF8ToString.md)
+- [castObject](../functions/Ammo.castObject.md)
+- [destroy](../functions/Ammo.destroy.md)
+- [\_malloc](../functions/Ammo._malloc.md)
+- [\_free](../functions/Ammo._free.md)
diff --git a/docs/physics/types/Ammo.PHY_ScalarType.md b/docs/physics/types/Ammo.PHY_ScalarType.md
new file mode 100644
index 00000000..14e7d3d4
--- /dev/null
+++ b/docs/physics/types/Ammo.PHY_ScalarType.md
@@ -0,0 +1,9 @@
+# Type alias: PHY\_ScalarType
+
+[Ammo](../modules/Ammo.md).PHY_ScalarType
+
+Ƭ **PHY\_ScalarType**: ``"PHY_FLOAT"`` \| ``"PHY_DOUBLE"`` \| ``"PHY_INTEGER"`` \| ``"PHY_SHORT"`` \| ``"PHY_FIXEDPOINT88"`` \| ``"PHY_UCHAR"``
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:407](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L407)
diff --git a/docs/physics/types/Ammo.btConstraintParams.md b/docs/physics/types/Ammo.btConstraintParams.md
new file mode 100644
index 00000000..dba2dd8e
--- /dev/null
+++ b/docs/physics/types/Ammo.btConstraintParams.md
@@ -0,0 +1,9 @@
+# Type alias: btConstraintParams
+
+[Ammo](../modules/Ammo.md).btConstraintParams
+
+Ƭ **btConstraintParams**: ``"BT_CONSTRAINT_ERP"`` \| ``"BT_CONSTRAINT_STOP_ERP"`` \| ``"BT_CONSTRAINT_CFM"`` \| ``"BT_CONSTRAINT_STOP_CFM"``
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:548](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L548)
diff --git a/docs/physics/types/Ammo.btInternalTickCallback.md b/docs/physics/types/Ammo.btInternalTickCallback.md
new file mode 100644
index 00000000..913ca347
--- /dev/null
+++ b/docs/physics/types/Ammo.btInternalTickCallback.md
@@ -0,0 +1,24 @@
+# Type alias: btInternalTickCallback
+
+[Ammo](../modules/Ammo.md).btInternalTickCallback
+
+Ƭ **btInternalTickCallback**: (`world`: [`btDynamicsWorld`](../classes/Ammo.btDynamicsWorld.md), `timeStep`: `number`) => `void`
+
+#### Type declaration
+
+▸ (`world`, `timeStep`): `void`
+
+##### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `world` | [`btDynamicsWorld`](../classes/Ammo.btDynamicsWorld.md) |
+| `timeStep` | `number` |
+
+##### Returns
+
+`void`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:670](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L670)
diff --git a/docs/physics/types/CornerType.md b/docs/physics/types/CornerType.md
new file mode 100644
index 00000000..d7817326
--- /dev/null
+++ b/docs/physics/types/CornerType.md
@@ -0,0 +1,9 @@
+# Type alias: CornerType
+
+Ƭ **CornerType**: ``"leftTop"`` \| ``"rightTop"`` \| ``"leftBottom"`` \| ``"rightBottom"`` \| ``"left"`` \| ``"right"`` \| ``"top"`` \| ``"bottom"`` \| ``"center"``
+
+软体布料平面的各个角
+
+#### Defined in
+
+[packages/physics/softbody/ClothSoftbody.ts:10](https://github.com/Orillusion/orillusion/blob/main/packages/physics/softbody/ClothSoftbody.ts#L10)
diff --git a/docs/physics/types/DebugDrawerOptions.md b/docs/physics/types/DebugDrawerOptions.md
new file mode 100644
index 00000000..69e55ed5
--- /dev/null
+++ b/docs/physics/types/DebugDrawerOptions.md
@@ -0,0 +1,7 @@
+# Type alias: DebugDrawerOptions
+
+Ƭ **DebugDrawerOptions**: `Partial`\<\{ `enable`: `boolean` ; `debugDrawMode`: [`DebugDrawMode`](../enums/DebugDrawMode.md) ; `updateFreq`: `number` ; `maxLineCount`: `number` }\>
+
+#### Defined in
+
+[packages/physics/visualDebug/DebugDrawModeEnum.ts:1](https://github.com/Orillusion/orillusion/blob/main/packages/physics/visualDebug/DebugDrawModeEnum.ts#L1)
diff --git a/docs/physics/variables/Ammo.HEAP16.md b/docs/physics/variables/Ammo.HEAP16.md
new file mode 100644
index 00000000..a29f60d5
--- /dev/null
+++ b/docs/physics/variables/Ammo.HEAP16.md
@@ -0,0 +1,9 @@
+# Variable: HEAP16
+
+[Ammo](../modules/Ammo.md).HEAP16
+
+• `Const` **HEAP16**: `Int16Array`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:19](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L19)
diff --git a/docs/physics/variables/Ammo.HEAP32.md b/docs/physics/variables/Ammo.HEAP32.md
new file mode 100644
index 00000000..e8d12fc4
--- /dev/null
+++ b/docs/physics/variables/Ammo.HEAP32.md
@@ -0,0 +1,9 @@
+# Variable: HEAP32
+
+[Ammo](../modules/Ammo.md).HEAP32
+
+• `Const` **HEAP32**: `Int32Array`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:20](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L20)
diff --git a/docs/physics/variables/Ammo.HEAP8.md b/docs/physics/variables/Ammo.HEAP8.md
new file mode 100644
index 00000000..54f55e4e
--- /dev/null
+++ b/docs/physics/variables/Ammo.HEAP8.md
@@ -0,0 +1,9 @@
+# Variable: HEAP8
+
+[Ammo](../modules/Ammo.md).HEAP8
+
+• `Const` **HEAP8**: `Int8Array`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:18](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L18)
diff --git a/docs/physics/variables/Ammo.HEAPF32.md b/docs/physics/variables/Ammo.HEAPF32.md
new file mode 100644
index 00000000..db6ba7b5
--- /dev/null
+++ b/docs/physics/variables/Ammo.HEAPF32.md
@@ -0,0 +1,9 @@
+# Variable: HEAPF32
+
+[Ammo](../modules/Ammo.md).HEAPF32
+
+• `Const` **HEAPF32**: `Float32Array`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:24](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L24)
diff --git a/docs/physics/variables/Ammo.HEAPF64.md b/docs/physics/variables/Ammo.HEAPF64.md
new file mode 100644
index 00000000..5a1603fd
--- /dev/null
+++ b/docs/physics/variables/Ammo.HEAPF64.md
@@ -0,0 +1,9 @@
+# Variable: HEAPF64
+
+[Ammo](../modules/Ammo.md).HEAPF64
+
+• `Const` **HEAPF64**: `Float64Array`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:25](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L25)
diff --git a/docs/physics/variables/Ammo.HEAPU16.md b/docs/physics/variables/Ammo.HEAPU16.md
new file mode 100644
index 00000000..a26689a2
--- /dev/null
+++ b/docs/physics/variables/Ammo.HEAPU16.md
@@ -0,0 +1,9 @@
+# Variable: HEAPU16
+
+[Ammo](../modules/Ammo.md).HEAPU16
+
+• `Const` **HEAPU16**: `Uint16Array`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:22](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L22)
diff --git a/docs/physics/variables/Ammo.HEAPU32.md b/docs/physics/variables/Ammo.HEAPU32.md
new file mode 100644
index 00000000..a880905f
--- /dev/null
+++ b/docs/physics/variables/Ammo.HEAPU32.md
@@ -0,0 +1,9 @@
+# Variable: HEAPU32
+
+[Ammo](../modules/Ammo.md).HEAPU32
+
+• `Const` **HEAPU32**: `Uint32Array`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:23](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L23)
diff --git a/docs/physics/variables/Ammo.HEAPU8.md b/docs/physics/variables/Ammo.HEAPU8.md
new file mode 100644
index 00000000..814e8eff
--- /dev/null
+++ b/docs/physics/variables/Ammo.HEAPU8.md
@@ -0,0 +1,9 @@
+# Variable: HEAPU8
+
+[Ammo](../modules/Ammo.md).HEAPU8
+
+• `Const` **HEAPU8**: `Uint8Array`
+
+#### Defined in
+
+[packages/ammo/ammo.d.ts:21](https://github.com/Orillusion/orillusion/blob/main/packages/ammo/ammo.d.ts#L21)
diff --git a/docs/public/demo.html b/docs/public/demo.html
new file mode 100644
index 00000000..eb687960
--- /dev/null
+++ b/docs/public/demo.html
@@ -0,0 +1,89 @@
+
+
+
+
+ Orillusion | Demo
+
+
+
+
+
+
+
+
diff --git a/docs/public/demos/advanced/Sample_GI.ts b/docs/public/demos/advanced/Sample_GI.ts
new file mode 100644
index 00000000..630cc2b3
--- /dev/null
+++ b/docs/public/demos/advanced/Sample_GI.ts
@@ -0,0 +1,137 @@
+import { Object3D, Scene3D, Engine3D, GlobalIlluminationComponent, Vector3, GTAOPost, PostProcessingComponent, BloomPost, AtmosphericComponent, CameraUtil, HoverCameraController, View3D, webGPUContext, DirectLight, KelvinUtil } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_GICornellBox {
+ scene: Scene3D;
+ async run() {
+ Engine3D.setting.gi.enable = true;
+ Engine3D.setting.gi.probeYCount = 6;
+ Engine3D.setting.gi.probeXCount = 6;
+ Engine3D.setting.gi.probeZCount = 6;
+ Engine3D.setting.gi.offsetX = 0;
+ Engine3D.setting.gi.offsetY = 10;
+ Engine3D.setting.gi.offsetZ = 0;
+ Engine3D.setting.gi.indirectIntensity = 1;
+ Engine3D.setting.gi.lerpHysteresis = 0.004; //default value is 0.01
+ Engine3D.setting.gi.maxDistance = 16;
+ Engine3D.setting.gi.probeSpace = 5.8;
+ Engine3D.setting.gi.normalBias = 0;
+ Engine3D.setting.gi.probeSize = 32;
+ Engine3D.setting.gi.octRTSideSize = 16;
+ Engine3D.setting.gi.octRTMaxSize = 2048;
+ Engine3D.setting.gi.ddgiGamma = 2.2;
+ Engine3D.setting.gi.depthSharpness = 1;
+ Engine3D.setting.gi.autoRenderProbe = true;
+
+ Engine3D.setting.shadow.shadowBound = 50;
+ Engine3D.setting.shadow.shadowSize = 2048;
+ Engine3D.setting.shadow.shadowBias = 0.002;
+ Engine3D.setting.shadow.autoUpdate = true;
+ Engine3D.setting.shadow.updateFrameRate = 1;
+
+ await Engine3D.init({
+ canvasConfig: {
+ devicePixelRatio: 1
+ }
+ });
+ this.scene = new Scene3D();
+ this.scene.addComponent(AtmosphericComponent);
+
+ let mainCamera = CameraUtil.createCamera3DObject(this.scene);
+ mainCamera.perspective(60, webGPUContext.aspect, 1, 5000.0);
+ let hoverCameraController = mainCamera.object3D.addComponent(HoverCameraController);
+ hoverCameraController.setCamera(0, 0, 40, new Vector3(0, 10, 0));
+
+ await this.initScene();
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ Engine3D.startRenderView(view);
+
+ let postProcessing = this.scene.addComponent(PostProcessingComponent);
+ postProcessing.addPost(BloomPost);
+ // add GI
+ this.addGIProbes();
+ }
+
+ private addGIProbes() {
+ let probeObj = new Object3D();
+ let GI = probeObj.addComponent(GlobalIlluminationComponent);
+ this.scene.addChild(probeObj);
+ // add a delay to render GUIHelp menu
+ setTimeout(() => {
+ this.renderGUI(GI);
+ }, 1000);
+ }
+
+ private renderGUI(component: GlobalIlluminationComponent): void {
+ let volume = component['_volume'];
+ let giSetting = volume.setting;
+
+ function onProbesChange(): void {
+ component['changeProbesPosition']();
+ }
+ let gui = new dat.GUI();
+ let f = gui.addFolder('GI');
+ f.add(giSetting, `lerpHysteresis`, 0.001, 0.1, 0.0001).onChange(onProbesChange);
+ f.add(giSetting, `depthSharpness`, 1.0, 100.0, 0.001).onChange(onProbesChange);
+ f.add(giSetting, `normalBias`, -100.0, 100.0, 0.001).onChange(onProbesChange);
+ f.add(giSetting, `irradianceChebyshevBias`, -100.0, 100.0, 0.001).onChange(onProbesChange);
+ f.add(giSetting, `rayNumber`, 0, 512, 1).onChange(onProbesChange);
+ f.add(giSetting, `irradianceDistanceBias`, 0.0, 200.0, 0.001).onChange(onProbesChange);
+ f.add(giSetting, `indirectIntensity`, 0.0, 3.0, 0.001).onChange(onProbesChange);
+ f.add(giSetting, `bounceIntensity`, 0.0, 1.0, 0.001).onChange(onProbesChange);
+ f.add(giSetting, `probeRoughness`, 0.0, 1.0, 0.001).onChange(onProbesChange);
+ f.add(giSetting, `ddgiGamma`, 0.0, 4.0, 0.001).onChange(onProbesChange);
+ f.add(giSetting, 'autoRenderProbe');
+ f.close();
+
+ let f2 = gui.addFolder('probe volume');
+ f2.add(volume.setting, 'probeSpace', 0.1, volume.setting.probeSpace * 5, 0.001).onChange(() => {
+ onProbesChange();
+ });
+ f2.add(volume.setting, 'offsetX', -100, 100, 0.001).onChange(onProbesChange);
+ f2.add(volume.setting, 'offsetY', -100, 100, 0.001).onChange(onProbesChange);
+ f2.add(volume.setting, 'offsetZ', -100, 100, 0.001).onChange(onProbesChange);
+ f2.add(
+ {
+ show: () => {
+ component.object3D.transform.enable = true;
+ }
+ },
+ 'show'
+ );
+ f2.add(
+ {
+ hide: () => {
+ component.object3D.transform.enable = false;
+ }
+ },
+ 'hide'
+ );
+ f2.open();
+ }
+
+ async initScene() {
+ let box = await Engine3D.res.loadGltf('https://cdn.orillusion.com/gltfs/cornellBox/cornellBox.gltf');
+ box.localScale = new Vector3(10, 10, 10);
+ this.scene.addChild(box);
+
+ let lightObj = new Object3D();
+ lightObj.x = 0;
+ lightObj.y = 30;
+ lightObj.z = -40;
+ lightObj.rotationX = 30;
+ lightObj.rotationY = 160;
+ lightObj.rotationZ = 0;
+ this.scene.addChild(lightObj);
+
+ let dirLight = lightObj.addComponent(DirectLight);
+ dirLight.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ dirLight.castShadow = true;
+ dirLight.intensity = 2;
+ }
+}
+
+new Sample_GICornellBox().run();
diff --git a/docs/public/demos/advanced/Sample_bloom.ts b/docs/public/demos/advanced/Sample_bloom.ts
new file mode 100644
index 00000000..06a7025d
--- /dev/null
+++ b/docs/public/demos/advanced/Sample_bloom.ts
@@ -0,0 +1,130 @@
+import { View3D, DirectLight, Engine3D, PostProcessingComponent, LitMaterial, HoverCameraController, KelvinUtil, MeshRenderer, Object3D, PlaneGeometry, Scene3D, SphereGeometry, CameraUtil, webGPUContext, BoxGeometry, TAAPost, AtmosphericComponent, GTAOPost, Color, BloomPost } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_Bloom {
+ lightObj: Object3D;
+ scene: Scene3D;
+
+ async run() {
+ Engine3D.setting.shadow.shadowSize = 2048;
+ Engine3D.setting.shadow.shadowBound = 500;
+
+ await Engine3D.init();
+
+ this.scene = new Scene3D();
+ let sky = this.scene.addComponent(AtmosphericComponent);
+ sky.sunY = 0.6;
+
+ let mainCamera = CameraUtil.createCamera3DObject(this.scene, 'camera');
+ mainCamera.perspective(60, webGPUContext.aspect, 1, 5000.0);
+ let ctrl = mainCamera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(0, -15, 500);
+ await this.initScene();
+ sky.relativeTransform = this.lightObj.transform;
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ Engine3D.startRenderView(view);
+
+ let postProcessing = this.scene.addComponent(PostProcessingComponent);
+ let post = postProcessing.addPost(BloomPost);
+ this.renderBloom(post, true);
+ }
+
+ public renderBloom(bloom: BloomPost, open: boolean = true, name?: string) {
+ name ||= 'Bloom';
+ let GUIHelp = new dat.GUI();
+ GUIHelp.addFolder(name);
+ GUIHelp.add(bloom, 'downSampleBlurSize', 3, 15, 1);
+ GUIHelp.add(bloom, 'downSampleBlurSigma', 0.01, 1, 0.001);
+ GUIHelp.add(bloom, 'upSampleBlurSize', 3, 15, 1);
+ GUIHelp.add(bloom, 'upSampleBlurSigma', 0.01, 1, 0.001);
+ GUIHelp.add(bloom, 'luminanceThreshole', 0.001, 10.0, 0.001);
+ GUIHelp.add(bloom, 'bloomIntensity', 0.001, 10.0, 0.001);
+ }
+
+ async initScene() {
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.rotationX = 45;
+ this.lightObj.rotationY = 110;
+ this.lightObj.rotationZ = 0;
+ let lc = this.lightObj.addComponent(DirectLight);
+ lc.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ lc.castShadow = true;
+ lc.intensity = 3;
+ this.scene.addChild(this.lightObj);
+ }
+
+ {
+ let mat = new LitMaterial();
+ let floor = new Object3D();
+ let mr = floor.addComponent(MeshRenderer);
+ mr.geometry = new PlaneGeometry(400, 400);
+ mr.material = mat;
+ this.scene.addChild(floor);
+
+ {
+ let wall = new Object3D();
+ let mr = wall.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(5, 260, 320);
+ mr.material = mat;
+ wall.x = -320 * 0.5;
+ this.scene.addChild(wall);
+ }
+
+ {
+ let wall = new Object3D();
+ let mr = wall.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(5, 260, 320);
+ mr.material = mat;
+ wall.x = 320 * 0.5;
+ this.scene.addChild(wall);
+ }
+
+ {
+ let wall = new Object3D();
+ let mr = wall.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(320, 260, 5);
+ mr.material = mat;
+ wall.z = -320 * 0.5;
+ this.scene.addChild(wall);
+ }
+
+ {
+ {
+ let litMat = new LitMaterial();
+ litMat.emissiveMap = Engine3D.res.whiteTexture;
+ litMat.emissiveColor = new Color(0.0, 0.0, 1.0);
+ litMat.emissiveIntensity = 0.6;
+ let sp = new Object3D();
+ let mr = sp.addComponent(MeshRenderer);
+ mr.geometry = new SphereGeometry(15, 30, 30);
+ mr.material = litMat;
+ sp.x = 68;
+ sp.y = 15;
+ sp.z = -15;
+ this.scene.addChild(sp);
+ }
+
+ {
+ let litMat = new LitMaterial();
+ litMat.emissiveMap = Engine3D.res.whiteTexture;
+ litMat.emissiveColor = new Color(1.0, 1.0, 0.0);
+ litMat.emissiveIntensity = 0.8;
+ let sp = new Object3D();
+ let mr = sp.addComponent(MeshRenderer);
+ mr.geometry = new SphereGeometry(15, 30, 30);
+ mr.material = litMat;
+ sp.x = 1;
+ sp.y = 15;
+ sp.z = -8;
+ this.scene.addChild(sp);
+ }
+ }
+ }
+ }
+}
+
+new Sample_Bloom().run();
diff --git a/docs/public/demos/advanced/Sample_depth.ts b/docs/public/demos/advanced/Sample_depth.ts
new file mode 100644
index 00000000..1ed648ab
--- /dev/null
+++ b/docs/public/demos/advanced/Sample_depth.ts
@@ -0,0 +1,109 @@
+import { DepthOfFieldPost, DirectLight, Engine3D, PostProcessingComponent, View3D, LitMaterial, HoverCameraController, KelvinUtil, MeshRenderer, Object3D, PlaneGeometry, Scene3D, SphereGeometry, SSR_IS_Kernel, CameraUtil, webGPUContext, AtmosphericComponent } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_DepthOfView {
+ lightObj: Object3D;
+ scene: Scene3D;
+ constructor() {}
+
+ async run() {
+ Engine3D.setting.shadow.enable = true;
+ Engine3D.setting.shadow.shadowBound = 100;
+ await Engine3D.init({
+ canvasConfig: {
+ devicePixelRatio: 1
+ }
+ });
+
+ this.scene = new Scene3D();
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ let camera = CameraUtil.createCamera3DObject(this.scene);
+ camera.perspective(60, webGPUContext.aspect, 1, 5000.0);
+ let ctrl = camera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(100, -15, 150);
+
+ await this.initScene(this.scene);
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+
+ let postProcessing = this.scene.addComponent(PostProcessingComponent);
+ let DOFPost = postProcessing.addPost(DepthOfFieldPost);
+ DOFPost.near = 160
+ DOFPost.far = 550
+ DOFPost.pixelOffset = 2
+
+ let GUIHelp = new dat.GUI();
+ GUIHelp.addFolder('Depth of Field');
+ GUIHelp.add(DOFPost, 'near', 0, 400, 1);
+ GUIHelp.add(DOFPost, 'far', 150, 1000, 1);
+ }
+
+ async initScene(scene: Scene3D) {
+ /******** light *******/
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.rotationX = 15;
+ this.lightObj.rotationY = 110;
+ this.lightObj.rotationZ = 0;
+ let lc = this.lightObj.addComponent(DirectLight);
+ lc.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ lc.castShadow = true;
+ lc.intensity = 5;
+ scene.addChild(this.lightObj);
+ }
+
+ // load a test gltf model
+ let minimalObj = await Engine3D.res.loadGltf('https://cdn.orillusion.com/PBR/ToyCar/ToyCar.gltf');
+ minimalObj.scaleX = minimalObj.scaleY = minimalObj.scaleZ = 800;
+ scene.addChild(minimalObj);
+
+ this.createPlane(scene);
+ return true;
+ }
+
+ private createPlane(scene: Scene3D) {
+ let mat = new LitMaterial();
+ {
+ let debugGeo = new PlaneGeometry(2000, 2000);
+ let obj: Object3D = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.material = mat;
+ mr.geometry = debugGeo;
+ scene.addChild(obj);
+ }
+
+ {
+ let sphereGeometry = new SphereGeometry(10, 50, 50);
+ let obj: Object3D = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.material = mat;
+ mr.geometry = sphereGeometry;
+ obj.x = 30;
+ obj.y = 10;
+ scene.addChild(obj);
+ }
+
+ {
+ let seeds = SSR_IS_Kernel.createSeeds();
+ let sphereGeometry = new SphereGeometry(2, 50, 50);
+ for (let i = 0; i < seeds.length; i++) {
+ let pt = seeds[i];
+ let obj: Object3D = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.material = mat;
+ mr.geometry = sphereGeometry;
+
+ obj.y = pt.z;
+ obj.x = pt.x;
+ obj.z = pt.y;
+ scene.addChild(obj);
+ }
+ }
+ }
+}
+
+new Sample_DepthOfView().run();
diff --git a/docs/public/demos/advanced/Sample_fog.ts b/docs/public/demos/advanced/Sample_fog.ts
new file mode 100644
index 00000000..e6250aed
--- /dev/null
+++ b/docs/public/demos/advanced/Sample_fog.ts
@@ -0,0 +1,107 @@
+import { AtmosphericComponent, BoxGeometry, CameraUtil, CylinderGeometry, DirectLight, Engine3D, GlobalFog, HoverCameraController, KelvinUtil, LitMaterial, MeshRenderer, Object3D, PostProcessingComponent, Scene3D, View3D, Color } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_Fog {
+ constructor() {}
+ lightObj: Object3D;
+ scene: Scene3D;
+
+ async run() {
+ Engine3D.setting.shadow.shadowSize = 2048;
+ Engine3D.setting.shadow.shadowBound = 1000;
+
+ await Engine3D.init();
+
+ this.scene = new Scene3D();
+ let sky = this.scene.addComponent(AtmosphericComponent);
+ sky.sunY = 0.6;
+ let mainCamera = CameraUtil.createCamera3DObject(this.scene, 'camera');
+ mainCamera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ let ctrl = mainCamera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(0, -10, 400);
+
+ await this.initScene();
+ sky.relativeTransform = this.lightObj.transform;
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ Engine3D.startRenderView(view);
+
+ let postProcessing = this.scene.addComponent(PostProcessingComponent);
+ let fog = postProcessing.addPost(GlobalFog);
+
+ let gui = new dat.GUI();
+ let f = gui.addFolder('GlobalFog');
+ f.add(fog, 'fogType', {
+ Liner: 0,
+ Exp: 1,
+ Exp2: 2
+ });
+ f.add(fog, 'start', -0.0, 1000.0, 0.0001);
+ f.add(fog, 'end', -0.0, 1000.0, 0.0001);
+ f.add(fog, 'fogHeightScale', 0.0001, 1.0, 0.0001);
+ f.add(fog, 'density', 0.0, 1.0, 0.0001);
+ f.add(fog, 'ins', 0.0, 5.0, 0.0001);
+ f.add(fog, 'skyFactor', 0.0, 1.0, 0.0001);
+ f.add(fog, 'skyRoughness', 0.0, 1.0, 0.0001);
+ f.add(fog, 'overrideSkyFactor', 0.0, 1.0, 0.0001);
+ f.addColor({ color: Object.values(fog.fogColor).map((v) => v * 255) }, 'color').onChange((v) => {
+ fog.fogColor = new Color().copyFromArray(v);
+ });
+ f.open();
+ }
+
+ initScene() {
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.rotationX = 45;
+ this.lightObj.rotationY = 110;
+ this.lightObj.rotationZ = 0;
+ let lc = this.lightObj.addComponent(DirectLight);
+ lc.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ lc.castShadow = true;
+ lc.intensity = 5;
+ this.scene.addChild(this.lightObj);
+ }
+
+ {
+ let mat = new LitMaterial();
+ mat.roughness = 0.5;
+ mat.metallic = 0.5;
+
+ let floor = new Object3D();
+ let mr = floor.addComponent(MeshRenderer);
+ mr.geometry = new CylinderGeometry(10000, 10000, 1, 20, 20, false);
+ mr.materials = [mat, mat, mat];
+ this.scene.addChild(floor);
+ }
+
+ this.createPlane(this.scene);
+ }
+
+ private createPlane(scene: Scene3D) {
+ let mat = new LitMaterial();
+ mat.roughness = 1.0;
+ mat.metallic = 0.0;
+
+ const length = 10;
+ let cubeGeometry = new BoxGeometry(1, 1, 1);
+ for (let i = 0; i < length; i++) {
+ for (let j = 0; j < length; j++) {
+ let building: Object3D = new Object3D();
+ let mr = building.addComponent(MeshRenderer);
+ mr.material = mat;
+ mr.geometry = cubeGeometry;
+ building.localScale = building.localScale;
+ building.x = (i - 5) * (Math.random() * 0.5 + 0.5) * 100;
+ building.z = (j - 5) * (Math.random() * 0.5 + 0.5) * 100;
+ building.scaleX = 10 * (Math.random() * 0.5 + 0.5) * 2;
+ building.scaleZ = 10 * (Math.random() * 0.5 + 0.5) * 2;
+ building.scaleY = 200 * (Math.random() * 0.5 + 0.5);
+ scene.addChild(building);
+ }
+ }
+ }
+}
+
+new Sample_Fog().run();
diff --git a/docs/public/demos/advanced/Sample_godRay.ts b/docs/public/demos/advanced/Sample_godRay.ts
new file mode 100644
index 00000000..f318b692
--- /dev/null
+++ b/docs/public/demos/advanced/Sample_godRay.ts
@@ -0,0 +1,122 @@
+import { View3D, DirectLight, Engine3D, PostProcessingComponent, LitMaterial, HoverCameraController, KelvinUtil, MeshRenderer, Object3D, PlaneGeometry, Scene3D, SphereGeometry, CameraUtil, webGPUContext, BoxGeometry, TAAPost, AtmosphericComponent, GTAOPost, GodRayPost, Time, BloomPost } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_GodRay {
+ lightObj: Object3D;
+ scene: Scene3D;
+
+ async run() {
+ Engine3D.setting.shadow.shadowSize = 2048;
+ Engine3D.setting.shadow.shadowBound = 500;
+ Engine3D.setting.shadow.shadowBias = 0.1;
+
+ await Engine3D.init({
+ renderLoop: () => {
+ this.loop();
+ }
+ });
+
+ this.scene = new Scene3D();
+ let sky = this.scene.addComponent(AtmosphericComponent);
+
+ let mainCamera = CameraUtil.createCamera3DObject(this.scene, 'camera');
+ mainCamera.perspective(60, webGPUContext.aspect, 1, 5000.0);
+ let ctrl = mainCamera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(110, -10, 300);
+ await this.initScene();
+
+ sky.relativeTransform = this.lightObj.transform;
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ mainCamera.enableCSM = true;
+ Engine3D.startRenderView(view);
+
+ let postProcessing = this.scene.addComponent(PostProcessingComponent);
+ let godray = postProcessing.addPost(GodRayPost);
+
+ let GUIHelp = new dat.GUI();
+ let f = GUIHelp.addFolder('Orillusion')
+ f.add(godray, 'blendColor')
+ f.add(godray, 'scatteringExponent', 1, 10, 0.1)
+ f.add(godray, 'rayMarchCount', 10, 20, 1)
+ f.add(godray, 'intensity', 0.1, 1, 0.01)
+ f.open()
+ }
+ async initScene() {
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.rotationX = 15;
+ this.lightObj.rotationY = 134;
+ this.lightObj.rotationZ = 0;
+ let lc = this.lightObj.addComponent(DirectLight);
+ lc.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ lc.castShadow = true;
+ lc.intensity = 10;
+ lc.indirect = 0.3;
+ this.scene.addChild(this.lightObj);
+ }
+
+ {
+ let mat = new LitMaterial();
+ mat.roughness = 0.5;
+ mat.metallic = 0.2;
+ let floor = new Object3D();
+ let mr = floor.addComponent(MeshRenderer);
+ mr.geometry = new PlaneGeometry(2000, 2000);
+ mr.material = mat;
+ this.scene.addChild(floor);
+ }
+
+ this.createPlane(this.scene);
+ }
+
+ private ball: Object3D;
+ private createPlane(scene: Scene3D) {
+ let mat = new LitMaterial();
+ mat.roughness = 0.5;
+ mat.metallic = 0.2;
+ {
+ let sphereGeometry = new SphereGeometry(20, 50, 50);
+ let obj: Object3D = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.material = mat;
+ mr.geometry = sphereGeometry;
+ obj.x = 10;
+ obj.y = 20;
+ scene.addChild(obj);
+ this.ball = obj;
+ }
+
+ const length = 5;
+ for (let i = 0; i < length; i++) {
+ let cubeGeometry = new BoxGeometry(10, 160, 10);
+ for (let j = 0; j < length; j++) {
+ let obj: Object3D = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.material = mat;
+ mr.geometry = cubeGeometry;
+ obj.localScale = obj.localScale;
+ obj.x = (i - 2.5) * 40;
+ obj.z = (j - 2.5) * 40;
+ obj.y = 60;
+ obj.rotationX = (Math.random() - 0.5) * 80;
+ obj.rotationY = (Math.random() - 0.5) * 90;
+ scene.addChild(obj);
+ }
+ }
+ }
+ private loop() {
+ if (this.ball) {
+ let position = this.ball.localPosition;
+ let angle = Time.time * 0.001;
+ position.x = Math.sin(angle) * 40;
+ position.z = Math.cos(angle) * 40;
+ position.y = 80;
+ this.ball.localPosition = position;
+ }
+ }
+}
+
+new Sample_GodRay().run();
diff --git a/docs/public/demos/advanced/Sample_gtao.ts b/docs/public/demos/advanced/Sample_gtao.ts
new file mode 100644
index 00000000..11350946
--- /dev/null
+++ b/docs/public/demos/advanced/Sample_gtao.ts
@@ -0,0 +1,116 @@
+import { View3D, DirectLight, Engine3D, PostProcessingComponent, LitMaterial, HoverCameraController, KelvinUtil, MeshRenderer, Object3D, PlaneGeometry, Scene3D, SphereGeometry, CameraUtil, webGPUContext, BoxGeometry, TAAPost, AtmosphericComponent, GTAOPost } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_GTAO {
+ lightObj: Object3D;
+ scene: Scene3D;
+
+ async run() {
+ Engine3D.setting.shadow.shadowSize = 2048;
+ Engine3D.setting.shadow.shadowBound = 500;
+ Engine3D.setting.shadow.shadowBias = 0.05;
+
+ await Engine3D.init();
+
+ this.scene = new Scene3D();
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ let mainCamera = CameraUtil.createCamera3DObject(this.scene, 'camera');
+ mainCamera.perspective(60, webGPUContext.aspect, 1, 5000.0);
+ let ctrl = mainCamera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(0, -15, 500);
+ await this.initScene();
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ Engine3D.startRenderView(view);
+
+ let postProcessing = this.scene.addComponent(PostProcessingComponent);
+ let post = postProcessing.addPost(GTAOPost);
+ post.maxDistance = 6;
+ post.maxPixel = 15;
+ this.gui();
+ }
+
+ async initScene() {
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.rotationX = 45;
+ this.lightObj.rotationY = 110;
+ this.lightObj.rotationZ = 0;
+ let lc = this.lightObj.addComponent(DirectLight);
+ lc.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ lc.castShadow = true;
+ lc.intensity = 5;
+ lc.indirect = 0.3;
+ this.scene.addChild(this.lightObj);
+ }
+
+ {
+ let mat = new LitMaterial();
+ mat.roughness = 1.0;
+ mat.metallic = 0.0;
+
+ let floor = new Object3D();
+ let mr = floor.addComponent(MeshRenderer);
+ mr.geometry = new PlaneGeometry(400, 400);
+ mr.material = mat;
+ this.scene.addChild(floor);
+
+ {
+ let wall = new Object3D();
+ let mr = wall.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(5, 260, 320);
+ mr.material = mat;
+ wall.x = -320 * 0.5;
+ this.scene.addChild(wall);
+ }
+
+ {
+ let wall = new Object3D();
+ let mr = wall.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(5, 260, 320);
+ mr.material = mat;
+ wall.x = 320 * 0.5;
+ this.scene.addChild(wall);
+ }
+
+ {
+ let wall = new Object3D();
+ let mr = wall.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(320, 260, 5);
+ mr.material = mat;
+ wall.z = -320 * 0.5;
+ this.scene.addChild(wall);
+ }
+
+ {
+ {
+ let sp = new Object3D();
+ let mr = sp.addComponent(MeshRenderer);
+ mr.geometry = new SphereGeometry(50, 30, 30);
+ mr.material = mat;
+ this.scene.addChild(sp);
+ }
+ }
+ }
+ }
+
+ private gui() {
+ let postProcessing = this.scene.getComponent(PostProcessingComponent);
+ let post = postProcessing.getPost(GTAOPost);
+
+ let GUIHelp = new dat.GUI();
+ let f = GUIHelp.addFolder('GTAO');
+ f.add(post, 'maxDistance', 0.0, 50, 1);
+ f.add(post, 'maxPixel', 0.0, 50, 1);
+ f.add(post, 'rayMarchSegment', 4, 10, 0.001);
+ f.add(post, 'darkFactor', 0.0, 5, 0.001);
+ f.add(post, 'blendColor');
+ f.add(post, 'multiBounce');
+ f.open();
+ }
+}
+
+new Sample_GTAO().run();
diff --git a/docs/public/demos/advanced/Sample_outline.ts b/docs/public/demos/advanced/Sample_outline.ts
new file mode 100644
index 00000000..bbcae665
--- /dev/null
+++ b/docs/public/demos/advanced/Sample_outline.ts
@@ -0,0 +1,116 @@
+import { DirectLight, Engine3D, View3D, LitMaterial, HoverCameraController, KelvinUtil, MeshRenderer, Object3D, PlaneGeometry, Scene3D, SphereGeometry, PostProcessingComponent, CameraUtil, webGPUContext, OutlinePost, outlinePostManager, AtmosphericComponent, Color } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_Outline {
+ lightObj: Object3D;
+ scene: Scene3D;
+
+ constructor() {}
+
+ async run() {
+ Engine3D.setting.shadow.enable = false;
+ await Engine3D.init({
+ canvasConfig: {
+ devicePixelRatio: 1
+ }
+ });
+
+ this.scene = new Scene3D();
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ let mainCamera = CameraUtil.createCamera3DObject(this.scene, 'camera');
+ mainCamera.perspective(60, webGPUContext.aspect, 1, 2000.0);
+ let ctrl = mainCamera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(180, -45, 15);
+
+ await this.initScene(this.scene);
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ Engine3D.startRenderView(view);
+
+ let postProcessing = this.scene.addComponent(PostProcessingComponent);
+ let outlinePost = postProcessing.addPost(OutlinePost);
+
+ const GUIHelp = new dat.GUI();
+ GUIHelp.addFolder('Outline');
+ GUIHelp.add(outlinePost, 'outlinePixel', 0, 5);
+ GUIHelp.add(outlinePost, 'fadeOutlinePixel', 0, 5);
+ GUIHelp.add(
+ {
+ Change: () => {
+ this.selectBall();
+ }
+ },
+ 'Change'
+ );
+ this.selectBall();
+ }
+
+ private selectBall(): void {
+ outlinePostManager.setOutlineList([[this.nextSphere()], [this.nextSphere()], [this.nextSphere()]], [new Color(1, 0.2, 0, 1), new Color(0.2, 1, 0), new Color(0.2, 0, 1)]);
+ }
+
+ async initScene(scene: Scene3D) {
+ /******** light *******/
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.x = 0;
+ this.lightObj.y = 30;
+ this.lightObj.z = -40;
+ this.lightObj.rotationX = 45;
+ this.lightObj.rotationY = 0;
+ this.lightObj.rotationZ = 45;
+ let lc = this.lightObj.addComponent(DirectLight);
+ lc.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ lc.intensity = 3;
+ scene.addChild(this.lightObj);
+ }
+ this.createPlane(scene);
+
+ return true;
+ }
+
+ private sphereList: Object3D[] = [];
+ private sphereIndex = 0;
+
+ private nextSphere(): Object3D {
+ this.sphereIndex++;
+ if (this.sphereIndex >= this.sphereList.length) {
+ this.sphereIndex = 1;
+ }
+
+ return this.sphereList[this.sphereIndex];
+ }
+
+ private createPlane(scene: Scene3D) {
+ let mat = new LitMaterial();
+ {
+ let debugGeo = new PlaneGeometry(1000, 1000);
+ let obj: Object3D = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.material = mat;
+ mr.geometry = debugGeo;
+ scene.addChild(obj);
+ }
+
+ let sphereGeometry = new SphereGeometry(1, 50, 50);
+ for (let i = 0; i < 10; i++) {
+ let obj: Object3D = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.material = mat;
+ mr.geometry = sphereGeometry;
+ obj.x = 2;
+ obj.y = 2;
+
+ let angle = (2 * Math.PI * i) / 10;
+ obj.x = Math.sin(angle) * 2;
+ obj.z = Math.cos(angle) * 2;
+ scene.addChild(obj);
+ this.sphereList.push(obj);
+ }
+ }
+}
+
+new Sample_Outline().run();
diff --git a/docs/public/demos/advanced/Sample_ssr.ts b/docs/public/demos/advanced/Sample_ssr.ts
new file mode 100644
index 00000000..95c930e2
--- /dev/null
+++ b/docs/public/demos/advanced/Sample_ssr.ts
@@ -0,0 +1,152 @@
+import { DirectLight, Engine3D, View3D, LitMaterial, HoverCameraController, KelvinUtil, MeshRenderer, Object3D, PlaneGeometry, Scene3D, SphereGeometry, SSRPost, Time, CameraUtil, webGPUContext, PostProcessingComponent, BloomPost, AtmosphericComponent } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_SSR {
+ lightObj: Object3D;
+ scene: Scene3D;
+ mats: any[];
+
+ constructor() {}
+
+ async run() {
+ Engine3D.setting.shadow.enable = true;
+ Engine3D.setting.shadow.shadowSize = 2048
+ Engine3D.setting.shadow.shadowBound = 200;
+ Engine3D.setting.shadow.shadowBias = 0.05;
+
+ await Engine3D.init({
+ canvasConfig: {
+ devicePixelRatio: 1
+ },
+ renderLoop: () => this.loop()
+ });
+
+ this.scene = new Scene3D();
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ let mainCamera = CameraUtil.createCamera3DObject(this.scene, 'camera');
+ mainCamera.perspective(60, webGPUContext.aspect, 1, 2000.0);
+ let ctrl = mainCamera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(-75, -20, 40);
+ await this.initScene(this.scene);
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ Engine3D.startRenderView(view);
+
+ let postProcessing = this.scene.addComponent(PostProcessingComponent);
+ postProcessing.addPost(SSRPost);
+ postProcessing.addPost(BloomPost);
+ }
+
+ async initScene(scene: Scene3D) {
+ /******** light *******/
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.rotationX = 15;
+ this.lightObj.rotationY = 110;
+ this.lightObj.rotationZ = 0;
+ let lc = this.lightObj.addComponent(DirectLight);
+ lc.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ lc.castShadow = true;
+ lc.intensity = 10;
+ scene.addChild(this.lightObj);
+ }
+
+ // load test model
+ let minimalObj = await Engine3D.res.loadGltf('https://cdn.orillusion.com/PBR/ToyCar/ToyCar.gltf');
+ minimalObj.scaleX = minimalObj.scaleY = minimalObj.scaleZ = 1000;
+ minimalObj.y = -1.1
+ scene.addChild(minimalObj);
+
+ minimalObj.forChild((obj: Object3D) => {
+ let mr = obj.getComponent(MeshRenderer)
+ if (mr && mr.material) {
+ if (mr.material.name == 'ToyCar') {
+ let mat = mr.material as LitMaterial;
+ mat.metallic = 0.9;
+ mat.roughness = 0.1;
+ mat.clearcoatFactor = 0.5;
+ }
+ }
+ })
+
+ await this.createPlane(scene);
+ return true;
+ }
+
+ private sphere: Object3D;
+
+ private async createPlane(scene: Scene3D) {
+ const GUIHelp = new dat.GUI();
+ {
+ let floorMaterial = new LitMaterial();
+ floorMaterial.roughness = 0.1;
+ floorMaterial.metallic = 1;
+
+ let planeGeometry = new PlaneGeometry(200, 200);
+ let floor: Object3D = new Object3D();
+ let mr = floor.addComponent(MeshRenderer);
+ mr.material = floorMaterial;
+ mr.geometry = planeGeometry;
+ scene.addChild(floor);
+
+ let f = GUIHelp.addFolder('floor')
+ f.add(floorMaterial, 'roughness', 0.01, 1, 0.01);
+ f.add(floorMaterial, 'metallic', 0.01, 1, 0.01);
+ f.open()
+ }
+
+ {
+ let mat = new LitMaterial();
+ mat.roughness = 0.1;
+ mat.metallic = 0.9;
+
+ let sphereGeometry = new SphereGeometry(10, 50, 50);
+ let obj: Object3D = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.material = mat;
+ mr.geometry = sphereGeometry;
+ obj.x = 30;
+ obj.y = 10;
+ scene.addChild(obj);
+ this.sphere = obj;
+
+ let f = GUIHelp.addFolder('Sphere')
+ f.add(mat, 'roughness', 0.01, 1, 0.01);
+ f.add(mat, 'metallic', 0.01, 1, 0.01);
+ f.open()
+ }
+
+ {
+ let sphereGeometry = new SphereGeometry(2, 50, 50);
+ for (let i = 0; i < 10; i += 2) {
+ for (let j = 0; j < 10; j += 2) {
+ let rmMaterial = new LitMaterial();
+ rmMaterial.roughness = j / 10;
+ rmMaterial.metallic = i / 10;
+
+ let obj: Object3D = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.material = rmMaterial;
+ mr.geometry = sphereGeometry;
+
+ obj.y = j * 5 + 10;
+ obj.x = 50;
+ obj.z = i * 5 - 25;
+ scene.addChild(obj);
+ }
+ }
+ }
+ }
+
+ private loop(): void {
+ if (this.sphere) {
+ this.sphere.x = Math.sin(Time.time * 0.0001) * 30;
+ this.sphere.z = Math.cos(Time.time * 0.0001) * 30;
+ }
+ }
+}
+
+new Sample_SSR().run();
diff --git a/docs/public/demos/advanced/Sample_taa.ts b/docs/public/demos/advanced/Sample_taa.ts
new file mode 100644
index 00000000..044de392
--- /dev/null
+++ b/docs/public/demos/advanced/Sample_taa.ts
@@ -0,0 +1,101 @@
+import { View3D, DirectLight, Engine3D, PostProcessingComponent, LitMaterial, HoverCameraController, KelvinUtil, MeshRenderer, Object3D, PlaneGeometry, Scene3D, SphereGeometry, CameraUtil, webGPUContext, BoxGeometry, TAAPost, AtmosphericComponent } from '@orillusion/core';
+
+class Sample_TAA {
+ lightObj: Object3D;
+ scene: Scene3D;
+
+ async run() {
+ Engine3D.setting.shadow.enable = true;
+ Engine3D.setting.shadow.shadowSize = 2048;
+ Engine3D.setting.shadow.shadowBound = 40;
+ Engine3D.setting.shadow.shadowBias = 0.005;
+
+ await Engine3D.init({
+ canvasConfig: {
+ devicePixelRatio: 1
+ }
+ });
+
+ this.scene = new Scene3D();
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ let mainCamera = CameraUtil.createCamera3DObject(this.scene, 'camera');
+ mainCamera.perspective(60, webGPUContext.aspect, 1, 5000.0);
+ let ctrl = mainCamera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(0, -15, 30);
+ await this.initScene();
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ Engine3D.startRenderView(view);
+
+ let postProcessing = this.scene.addComponent(PostProcessingComponent);
+ postProcessing.addPost(TAAPost);
+ }
+
+ async initScene() {
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.rotationX = 15;
+ this.lightObj.rotationY = 110;
+ this.lightObj.rotationZ = 0;
+ let lc = this.lightObj.addComponent(DirectLight);
+ lc.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ lc.castShadow = true;
+ lc.intensity = 4;
+ this.scene.addChild(this.lightObj);
+ }
+
+ {
+ let mat = new LitMaterial();
+ mat.roughness = 1.0;
+ mat.metallic = 0.0;
+
+ let floor = new Object3D();
+ let mr = floor.addComponent(MeshRenderer);
+ mr.geometry = new PlaneGeometry(2000, 2000);
+ mr.material = mat;
+ this.scene.addChild(floor);
+ }
+
+ this.createPlane(this.scene);
+ }
+
+ private createPlane(scene: Scene3D) {
+ let mat = new LitMaterial();
+ mat.roughness = 0.5;
+ mat.metallic = 0.2;
+ {
+ let sphereGeometry = new SphereGeometry(1, 50, 50);
+ let obj: Object3D = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.material = mat;
+ mr.geometry = sphereGeometry;
+ obj.x = 10;
+ obj.y = 2;
+ scene.addChild(obj);
+ }
+
+ const length = 5;
+ for (let i = 0; i < length; i++) {
+ let cubeGeometry = new BoxGeometry(1, 10, 1);
+ for (let j = 0; j < length; j++) {
+ let obj: Object3D = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.material = mat;
+ mr.geometry = cubeGeometry;
+ obj.localScale = obj.localScale;
+ obj.x = (i - 2.5) * 4;
+ obj.z = (j - 2.5) * 4;
+ obj.y = 5;
+ obj.rotationX = (Math.random() - 0.5) * 90;
+ obj.rotationY = (Math.random() - 0.5) * 90;
+ obj.rotationZ = (Math.random() - 0.5) * 90;
+ scene.addChild(obj);
+ }
+ }
+ }
+}
+
+new Sample_TAA().run();
diff --git a/docs/public/demos/animation/animationGroup.ts b/docs/public/demos/animation/animationGroup.ts
new file mode 100644
index 00000000..d909524e
--- /dev/null
+++ b/docs/public/demos/animation/animationGroup.ts
@@ -0,0 +1,50 @@
+import { Engine3D, Scene3D, CameraUtil, HoverCameraController, Object3D, DirectLight, Color, SkeletonAnimationComponent, AtmosphericComponent, View3D } from '@orillusion/core';
+
+// Init Engine3D
+await Engine3D.init();
+
+// Create Scene3D
+let scene = new Scene3D();
+
+// add a camera object with Camera3D
+let mainCamera = CameraUtil.createCamera3DObject(scene);
+mainCamera.perspective(60, Engine3D.aspect, 0.1, 10000.0);
+mainCamera.object3D.addComponent(HoverCameraController);
+
+// add a dir light
+let ligthObj = new Object3D();
+ligthObj.rotationY = 135;
+ligthObj.rotationX = 45;
+let dl = ligthObj.addComponent(DirectLight);
+dl.lightColor = new Color(1.0, 0.95, 0.84, 1.0);
+scene.addChild(ligthObj);
+dl.castShadow = true;
+dl.intensity = 15;
+
+// load test model
+let cesiumMan = await Engine3D.res.loadGltf('https://cdn.orillusion.com/gltfs/glb/CesiumMan.glb');
+let cesiumMan_skeleton = cesiumMan.getChildByName('Cesium_Man0') as Object3D;
+cesiumMan_skeleton.localScale.set(20, 20, 20);
+cesiumMan_skeleton.localPosition.x = 30;
+cesiumMan_skeleton.rotationX = -90;
+scene.addChild(cesiumMan_skeleton);
+
+// get animation controller
+var cesiumManAnimator = cesiumMan_skeleton.getComponentsInChild(SkeletonAnimationComponent)[0];
+cesiumManAnimator.play('anim_0', 1);
+
+// clone
+for (let i = 0; i < 100; i++) {
+ let cesiumMan_clone = cesiumMan.clone();
+ cesiumMan_clone.localPosition.set(-100 + Math.random() * 200, 0, -100 + Math.random() * 200);
+ scene.addChild(cesiumMan_clone);
+}
+
+// set skybox
+scene.addComponent(AtmosphericComponent).sunY = 0.6;
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene;
+view.camera = mainCamera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/animation/animationSingle.ts b/docs/public/demos/animation/animationSingle.ts
new file mode 100644
index 00000000..e4801bb3
--- /dev/null
+++ b/docs/public/demos/animation/animationSingle.ts
@@ -0,0 +1,52 @@
+import { Engine3D, Scene3D, Object3D, AtmosphericComponent, View3D, DirectLight, HoverCameraController, Color, CameraUtil, SkeletonAnimationComponent, Vector3, AnimatorComponent } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+// Init Engine3D
+await Engine3D.init();
+
+// Create Scene3D
+let scene = new Scene3D();
+
+// add a camera object with Camera3D
+let mainCamera = CameraUtil.createCamera3DObject(scene);
+mainCamera.perspective(60, Engine3D.aspect, 0.1, 10000.0);
+let hc = mainCamera.object3D.addComponent(HoverCameraController);
+hc.setCamera(0, -15, 5, new Vector3(0, 1, 0));
+
+// add a dir light
+{
+ let ligthObj = new Object3D();
+ ligthObj.rotationY = 135;
+ ligthObj.rotationX = 45;
+ let dl = ligthObj.addComponent(DirectLight);
+ dl.lightColor = new Color(1.0, 0.95, 0.84, 1.0);
+ scene.addChild(ligthObj);
+ dl.castShadow = true;
+ dl.intensity = 5.0;
+}
+
+// load test model
+let soldier = await Engine3D.res.loadGltf('https://cdn.orillusion.com/gltfs/glb/Soldier.glb');
+soldier.rotationY = -90;
+soldier.localScale.set(2, 2, 2);
+scene.addChild(soldier);
+
+// get animator component
+let soldierAnimation = soldier.getComponentsInChild(AnimatorComponent)[0];
+soldierAnimation.playAnim('Idle');
+
+const GUIHelp = new dat.GUI();
+GUIHelp.addFolder('Animation');
+GUIHelp.add(soldierAnimation, 'timeScale', -6, 6, 0.01);
+GUIHelp.add({ Idle: () => soldierAnimation.playAnim('Idle') }, 'Idle');
+GUIHelp.add({ Walk: () => soldierAnimation.playAnim('Walk') }, 'Walk');
+GUIHelp.add({ Run: () => soldierAnimation.playAnim('Run') }, 'Run');
+
+// set skybox
+scene.addComponent(AtmosphericComponent).sunY = 0.6;
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene;
+view.camera = mainCamera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/animation/animationSingleEvent.ts b/docs/public/demos/animation/animationSingleEvent.ts
new file mode 100644
index 00000000..51ea7fa0
--- /dev/null
+++ b/docs/public/demos/animation/animationSingleEvent.ts
@@ -0,0 +1,79 @@
+import { Engine3D, Scene3D, Object3D, AtmosphericComponent, View3D, DirectLight, HoverCameraController, Color, CameraUtil, SkeletonAnimationComponent, Vector3, OAnimationEvent, AnimatorComponent } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+// Init Engine3D
+await Engine3D.init();
+
+// Create Scene3D
+let scene = new Scene3D();
+scene.exposure = 0.3;
+
+// add a camera object with Camera3D
+let mainCamera = CameraUtil.createCamera3DObject(scene);
+mainCamera.perspective(60, Engine3D.aspect, 0.1, 10000.0);
+let hc = mainCamera.object3D.addComponent(HoverCameraController);
+hc.setCamera(0, -15, 5, new Vector3(0, 1, 0));
+
+// add a dir light
+{
+ let ligthObj = new Object3D();
+ ligthObj.rotationY = 135;
+ ligthObj.rotationX = 45;
+ let dl = ligthObj.addComponent(DirectLight);
+ dl.lightColor = new Color(1.0, 0.95, 0.84, 1.0);
+ scene.addChild(ligthObj);
+ dl.castShadow = true;
+ dl.intensity = 5.0;
+}
+
+// load test model
+let soldier = await Engine3D.res.loadGltf('https://cdn.orillusion.com/gltfs/glb/Soldier.glb');
+soldier.rotationY = -90;
+soldier.localScale.set(2, 2, 2);
+scene.addChild(soldier);
+
+// get animator component
+let animator = soldier.getComponentsInChild(AnimatorComponent)[0];
+
+// const runClip = animator.getAnimationClip('Run');
+// runClip.addEvent('Begin', 0);
+// runClip.addEvent('Mid', runClip.totalTime / 2);
+// runClip.addEvent('End', runClip.totalTime);
+
+// animator.eventDispatcher.addEventListener(
+// 'Begin',
+// (e: OAnimationEvent) => {
+// console.log('Run-Begin', e.skeletonAnimation.getAnimationClipState('Run').time);
+// },
+// this
+// );
+// animator.eventDispatcher.addEventListener(
+// 'Mid',
+// (e: OAnimationEvent) => {
+// console.log('Run-Mid', e.skeletonAnimation.getAnimationClipState('Run').time);
+// },
+// this
+// );
+// animator.eventDispatcher.addEventListener(
+// 'End',
+// (e: OAnimationEvent) => {
+// console.log('Run-End:', e.skeletonAnimation.getAnimationClipState('Run').time);
+// e.skeletonAnimation.crossFade('Idle', 0.5);
+// },
+// this
+// );
+
+const GUIHelp = new dat.GUI();
+GUIHelp.addFolder('Animation-play').open();
+animator.clipsState.forEach((clipState, _) => {
+ GUIHelp.add({ click: () => animator.playAnim(clipState.clip.clipName) }, 'click').name(clipState.clip.clipName);
+});
+
+// set skybox
+scene.addComponent(AtmosphericComponent).sunY = 0.6;
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene;
+view.camera = mainCamera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/animation/animationSingleMix.ts b/docs/public/demos/animation/animationSingleMix.ts
new file mode 100644
index 00000000..7ac28153
--- /dev/null
+++ b/docs/public/demos/animation/animationSingleMix.ts
@@ -0,0 +1,65 @@
+import { Engine3D, Scene3D, Object3D, AtmosphericComponent, View3D, DirectLight, HoverCameraController, Color, CameraUtil, SkeletonAnimationComponent, Vector3, AnimatorComponent } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+// Init Engine3D
+await Engine3D.init();
+
+// Create Scene3D
+let scene = new Scene3D();
+scene.exposure = 0.3;
+
+// add a camera object with Camera3D
+let mainCamera = CameraUtil.createCamera3DObject(scene);
+mainCamera.perspective(60, Engine3D.aspect, 0.1, 10000.0);
+let hc = mainCamera.object3D.addComponent(HoverCameraController);
+hc.setCamera(0, -15, 5, new Vector3(0, 1, 0));
+
+// set light
+{
+ let ligthObj = new Object3D();
+ ligthObj.rotationY = 135;
+ ligthObj.rotationX = 45;
+ let dl = ligthObj.addComponent(DirectLight);
+ dl.lightColor = new Color(1.0, 0.95, 0.84, 1.0);
+ scene.addChild(ligthObj);
+ dl.castShadow = true;
+ dl.intensity = 5.0;
+}
+
+// load test model
+let soldier = await Engine3D.res.loadGltf('https://cdn.orillusion.com/gltfs/glb/Soldier.glb');
+soldier.rotationY = -90;
+soldier.localScale.set(2, 2, 2);
+scene.addChild(soldier);
+
+// get animator component
+let animator = soldier.getComponentsInChild(AnimatorComponent)[0];
+animator.playAnim('Idle');
+
+const GUIHelp = new dat.GUI();
+let f = GUIHelp.addFolder('Animation-weight');
+animator.clipsState.forEach((clipState, _) => {
+ f.add(clipState, 'weight', 0, 1.0, 0.01).name(clipState.clip.clipName);
+});
+f.open();
+
+f = GUIHelp.addFolder('Animation-play');
+animator.clipsState.forEach((clipState, _) => {
+ f.add({ click: () => animator.playAnim(clipState.clip.clipName) }, 'click').name(clipState.clip.clipName);
+});
+f.open();
+
+f = GUIHelp.addFolder('Animation-crossFade');
+animator.clipsState.forEach((clipState, _) => {
+ f.add({ click: () => animator.crossFade(clipState.clip.clipName, 0.3) }, 'click').name('crossFade(' + clipState.clip.clipName + ')');
+});
+f.open();
+// set skybox
+scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene;
+view.camera = mainCamera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/animation/morphAnim.ts b/docs/public/demos/animation/morphAnim.ts
new file mode 100644
index 00000000..d417cdf8
--- /dev/null
+++ b/docs/public/demos/animation/morphAnim.ts
@@ -0,0 +1,107 @@
+import { Camera3D, Engine3D, DirectLight, AtmosphericComponent, View3D, HoverCameraController, MeshRenderer, Object3D, RendererMask, Scene3D, webGPUContext, Color, MorphTargetBlender } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_morph {
+ scene: Scene3D;
+ hoverCameraController: HoverCameraController;
+
+ async run() {
+ await Engine3D.init();
+
+ this.scene = new Scene3D();
+ let cameraObj = new Object3D();
+ cameraObj.name = `cameraObj`;
+ let mainCamera = cameraObj.addComponent(Camera3D);
+ this.scene.addChild(cameraObj);
+
+ mainCamera.perspective(60, webGPUContext.aspect, 1, 5000.0);
+ this.hoverCameraController = mainCamera.object3D.addComponent(HoverCameraController);
+ this.hoverCameraController.setCamera(0, 0, 110);
+
+ await this.initScene(this.scene);
+ // set skybox
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ // create a view with target scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ // start render
+ Engine3D.startRenderView(view);
+ }
+
+ private influenceData: { [key: string]: number } = {};
+ private targetRenderers: { [key: string]: MeshRenderer } = {};
+
+ async initScene(scene: Scene3D) {
+ {
+ let data = await Engine3D.res.loadGltf('https://cdn.orillusion.com/gltfs/glb/lion.glb');
+ data.addComponent(MorphTargetBlender);
+ data.y = -80.0;
+ data.x = -30.0;
+ scene.addChild(data);
+
+ const GUIHelp = new dat.GUI();
+ GUIHelp.addFolder('morph controller');
+
+ let meshRenders: MeshRenderer[] = this.fetchMorphRenderers(data);
+ for (const renderer of meshRenders) {
+ renderer.setMorphInfluenceIndex(0, 0);
+ for (const key in renderer.geometry.morphTargetDictionary) {
+ this.influenceData[key] = 0;
+ this.targetRenderers[key] = renderer;
+ GUIHelp.add(this.influenceData, key, 0, 1, 0.01).onChange((v) => {
+ this.influenceData[key] = v;
+ this.track(this.influenceData, this.targetRenderers);
+ });
+ }
+ }
+ GUIHelp.add(
+ {
+ random: () => {
+ for (let i in this.influenceData) {
+ this.influenceData[i] = Math.random();
+ }
+ GUIHelp.updateDisplay();
+ this.track(this.influenceData, this.targetRenderers);
+ }
+ },
+ 'random'
+ );
+ }
+ {
+ let ligthObj = new Object3D();
+ ligthObj.rotationY = 135;
+ ligthObj.rotationX = 45;
+ let dl = ligthObj.addComponent(DirectLight);
+ dl.lightColor = new Color(1.0, 0.95, 0.84, 1.0);
+ scene.addChild(ligthObj);
+ dl.intensity = 2;
+ }
+ return true;
+ }
+
+ /**
+ * update morph data to mesh
+ * @param data {leftEye:0, rightEye:0.5, ...}
+ * @param targets {leftEye: MeshRenderer, rightEye: MeshRenderer, ...}
+ * @returns
+ */
+ private track(data: { [key: string]: number }, targets: { [key: string]: MeshRenderer }): void {
+ for (let key in targets) {
+ let renderer = targets[key];
+ let value = data[key];
+ renderer.setMorphInfluence(key, value);
+ }
+ }
+
+ private fetchMorphRenderers(obj: Object3D): MeshRenderer[] {
+ let rendererList: MeshRenderer[] = [];
+ obj.forChild((child) => {
+ let mr = child.getComponent(MeshRenderer);
+ if (mr && mr.hasMask(RendererMask.MorphTarget)) rendererList.push(mr);
+ });
+ return rendererList;
+ }
+}
+new Sample_morph().run();
diff --git a/docs/public/demos/animation/propertyAnim.ts b/docs/public/demos/animation/propertyAnim.ts
new file mode 100644
index 00000000..98eef67e
--- /dev/null
+++ b/docs/public/demos/animation/propertyAnim.ts
@@ -0,0 +1,96 @@
+import { DirectLight, Engine3D, AtmosphericComponent, View3D, HoverCameraController, KelvinUtil, Object3D, Scene3D, CameraUtil, webGPUContext, PropertyAnimation, PropertyAnimClip, WrapMode } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_PropertyAnim {
+ lightObj: Object3D;
+ scene: Scene3D;
+ private animation: PropertyAnimation;
+
+ constructor() {}
+
+ async run() {
+ await Engine3D.init();
+
+ this.scene = new Scene3D();
+ let camera = CameraUtil.createCamera3DObject(this.scene, 'camera');
+ camera.perspective(60, webGPUContext.aspect, 1, 2000.0);
+ let ctrl = camera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(180, -20, 15);
+
+ await this.initScene(this.scene);
+
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ // create a view with target scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = camera;
+ // start render
+ Engine3D.startRenderView(view);
+
+ let guiData = {
+ click: () => this.animation.play('anim_0', true),
+ Seek: 0,
+ Speed: 1
+ };
+ const GUIHelp = new dat.GUI();
+ GUIHelp.add(guiData, 'click').name('Restart');
+ GUIHelp.add(guiData, 'Seek', 0, 4, 0.01).onChange((v) => {
+ this.animation.stop();
+ this.animation.seek(v);
+ });
+ GUIHelp.add(guiData, 'Speed', 0, 1, 0.01).onChange((v) => {
+ this.animation.speed = v;
+ });
+ this.animation.onLateUpdate = () => {
+ guiData.Seek = this.animation.time;
+ GUIHelp.updateDisplay();
+ };
+ }
+
+ private async makePropertyAnim(node: Object3D) {
+ // add PropertyAnimation
+ let animation = node.addComponent(PropertyAnimation);
+ // load clip source
+ let res = await fetch('https://cdn.orillusion.com/json/anim_0.json');
+ let json = await res.json();
+ // init clip
+ let animClip = new PropertyAnimClip();
+ // parse clip
+ animClip.parse(json);
+ animClip.wrapMode = WrapMode.Loop;
+ animation.defaultClip = animClip.name;
+ animation.autoPlay = true;
+ // add clip to animation
+ animation.appendClip(animClip);
+ return animation;
+ }
+
+ async initScene(scene: Scene3D) {
+ /******** light *******/
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.x = 0;
+ this.lightObj.y = 30;
+ this.lightObj.z = -40;
+ this.lightObj.rotationX = 45;
+ this.lightObj.rotationY = 0;
+ this.lightObj.rotationZ = 45;
+ let lc = this.lightObj.addComponent(DirectLight);
+ lc.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ lc.intensity = 2;
+ scene.addChild(this.lightObj);
+ }
+
+ let duck = await Engine3D.res.loadGltf('https://cdn.orillusion.com/PBR/Duck/Duck.gltf');
+ this.scene.addChild(duck);
+ duck.scaleX = duck.scaleY = duck.scaleZ = 0.02;
+
+ this.animation = await this.makePropertyAnim(duck);
+ this.animation.play(this.animation.defaultClip);
+
+ return true;
+ }
+}
+
+new Sample_PropertyAnim().run();
diff --git a/docs/public/demos/compute/gaussianBlur.ts b/docs/public/demos/compute/gaussianBlur.ts
new file mode 100644
index 00000000..bf3f58b2
--- /dev/null
+++ b/docs/public/demos/compute/gaussianBlur.ts
@@ -0,0 +1,138 @@
+import { WebGPUDescriptorCreator, PostProcessingComponent, BoxGeometry, CameraUtil, ComputeShader, Engine3D, GPUContext, GPUTextureFormat, LitMaterial, HoverCameraController, MeshRenderer, Object3D, PostBase, RendererPassState, Scene3D, UniformGPUBuffer, VirtualTexture, webGPUContext, RTFrame, RTDescriptor, AtmosphericComponent, View3D, DirectLight } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Demo_GaussianBlur {
+ async run() {
+ await Engine3D.init({
+ canvasConfig: {
+ devicePixelRatio: 1
+ }
+ });
+
+ let scene = new Scene3D();
+ await this.initScene(scene);
+
+ let mainCamera = CameraUtil.createCamera3DObject(scene);
+ mainCamera.perspective(60, Engine3D.aspect, 0.01, 10000.0);
+
+ let ctl = mainCamera.object3D.addComponent(HoverCameraController);
+ ctl.setCamera(45, -30, 5);
+
+ scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ let light = new Object3D();
+ light.addComponent(DirectLight);
+ scene.addChild(light);
+
+ let view = new View3D();
+ view.scene = scene;
+ view.camera = mainCamera;
+ Engine3D.startRenderView(view);
+
+ let postProcessing = scene.addComponent(PostProcessingComponent);
+ postProcessing.addPost(GaussianBlurPost);
+ }
+
+ async initScene(scene: Scene3D) {
+ var obj = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.material = new LitMaterial();
+ mr.geometry = new BoxGeometry();
+ scene.addChild(obj);
+ }
+}
+
+class GaussianBlurPost extends PostBase {
+ private mGaussianBlurShader: ComputeShader;
+ private mGaussianBlurArgs: UniformGPUBuffer;
+ private mRendererPassState: RendererPassState;
+ private mBlurResultTexture: VirtualTexture;
+ private mRTFrame: RTFrame;
+
+ constructor() {
+ super();
+ }
+
+ private createResource() {
+ let presentationSize = webGPUContext.presentationSize;
+
+ this.mBlurResultTexture = new VirtualTexture(presentationSize[0], presentationSize[1], GPUTextureFormat.rgba16float, false, GPUTextureUsage.COPY_SRC | GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING);
+ this.mBlurResultTexture.name = 'gaussianBlurResultTexture';
+
+ let descript = new RTDescriptor();
+ descript.clearValue = [0, 0, 0, 1];
+ descript.loadOp = `clear`;
+ this.mRTFrame = new RTFrame([this.mBlurResultTexture], [descript]);
+
+ this.mRendererPassState = WebGPUDescriptorCreator.createRendererPassState(this.mRTFrame);
+ this.mRendererPassState.label = 'GaussianBlur';
+ }
+
+ private createComputeShader() {
+ this.mGaussianBlurArgs = new UniformGPUBuffer(28);
+ this.mGaussianBlurArgs.setFloat('radius', 2);
+ this.mGaussianBlurArgs.apply();
+
+ this.mGaussianBlurShader = new ComputeShader(/* wgsl */ `
+ struct GaussianBlurArgs {
+ radius: f32,
+ retain: vec3,
+ };
+
+ @group(0) @binding(0) var args: GaussianBlurArgs;
+ @group(0) @binding(1) var colorMap: texture_2d;
+ @group(0) @binding(2) var resultTex: texture_storage_2d;
+
+ @compute @workgroup_size(8, 8)
+ fn CsMain( @builtin(global_invocation_id) globalInvocation_id: vec3) {
+ var pixelCoord = vec2(globalInvocation_id.xy);
+
+ var value = vec4(0.0);
+ var count = 0.0;
+ let radius = i32(args.radius);
+ for (var i = -radius; i < radius; i += 1) {
+ for (var j = -radius; j < radius; j += 1) {
+ var offset = vec2(i, j);
+ value += textureLoad(colorMap, pixelCoord + offset, 0);
+ count += 1.0;
+ }
+ }
+
+ let result = value / count;
+ textureStore(resultTex, pixelCoord, result);
+ }
+ `);
+ this.mGaussianBlurShader.setUniformBuffer('args', this.mGaussianBlurArgs);
+ this.autoSetColorTexture('colorMap', this.mGaussianBlurShader);
+ this.mGaussianBlurShader.setStorageTexture(`resultTex`, this.mBlurResultTexture);
+
+ this.mGaussianBlurShader.workerSizeX = Math.ceil(this.mBlurResultTexture.width / 8);
+ this.mGaussianBlurShader.workerSizeY = Math.ceil(this.mBlurResultTexture.height / 8);
+ this.mGaussianBlurShader.workerSizeZ = 1;
+
+ this.debug();
+ }
+
+ public debug() {
+ const GUIHelp = new dat.GUI();
+ GUIHelp.addFolder('GaussianBlur');
+ GUIHelp.add(this.mGaussianBlurArgs.memoryNodes.get(`radius`), `x`, 1, 10, 1)
+ .name('Blur Radius')
+ .onChange(() => {
+ this.mGaussianBlurArgs.apply();
+ });
+ }
+
+ render(view: View3D, command: GPUCommandEncoder) {
+ if (!this.mGaussianBlurShader) {
+ this.createResource();
+ this.createComputeShader();
+ }
+
+ this.autoSetColorTexture('colorMap', this.mGaussianBlurShader);
+ GPUContext.computeCommand(command, [this.mGaussianBlurShader]);
+ GPUContext.lastRenderPassState = this.mRendererPassState;
+ }
+}
+
+new Demo_GaussianBlur().run();
diff --git a/docs/public/demos/core/scene.ts b/docs/public/demos/core/scene.ts
new file mode 100644
index 00000000..bac294ea
--- /dev/null
+++ b/docs/public/demos/core/scene.ts
@@ -0,0 +1,39 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, AtmosphericComponent, View3D } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+// initializa engine
+await Engine3D.init();
+// create a Scene3D
+let scene3D = new Scene3D();
+
+// add an Atmospheric sky enviroment
+let sky = scene3D.addComponent(AtmosphericComponent);
+// set sun position
+sky.sunX = 0.8;
+sky.sunY = 0.54;
+// set exposure
+sky.exposure = 1;
+
+// create a camera
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+scene3D.addChild(cameraObj);
+
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+
+// start render
+Engine3D.startRenderView(view);
+
+// debug GUI
+const GUIHelp = new dat.GUI({ name: 'Orillusion' });
+GUIHelp.addFolder('Atmospher');
+GUIHelp.add(sky, 'sunX', 0, 1, 0.01);
+GUIHelp.add(sky, 'sunY', 0, 1, 0.01);
+GUIHelp.add(sky, 'eyePos', 1000, 2000, 10);
+GUIHelp.add(sky, 'sunRadius', 100, 1000, 10);
+GUIHelp.add(sky, 'sunRadiance', 0, 20, 1);
+GUIHelp.add(sky, 'sunBrightness', 0, 1, 0.1);
diff --git a/docs/public/demos/core/script_light.ts b/docs/public/demos/core/script_light.ts
new file mode 100644
index 00000000..922159c5
--- /dev/null
+++ b/docs/public/demos/core/script_light.ts
@@ -0,0 +1,74 @@
+import { ComponentBase, Time, DirectLight, Color, LitMaterial, MeshRenderer, Scene3D, BoxGeometry, Object3D, Engine3D, Camera3D, HoverCameraController, View3D, AtmosphericComponent } from '@orillusion/core';
+
+class LightAnimation extends ComponentBase {
+ private light: DirectLight;
+ private color: Color;
+
+ public start() {
+ this.light = this.object3D.getComponent(DirectLight);
+ this.color = this.light.lightColor;
+ }
+ public onUpdate() {
+ this.color.r = Math.pow(Math.sin(Time.time * 0.001), 10);
+ this.light.lightColor = this.color;
+ }
+}
+
+class UserLogic {
+ private scene: Scene3D;
+ private cube: Object3D;
+ private light: DirectLight;
+
+ init(scene3D: Scene3D) {
+ this.scene = scene3D;
+ this.createCube();
+ this.createLight();
+ this.createComponents();
+ }
+
+ private createCube() {
+ let mat = new LitMaterial();
+ mat.roughness = 1.0;
+ let obj: Object3D = new Object3D();
+ let geometry = new BoxGeometry(3, 3, 3);
+ let mr = obj.addComponent(MeshRenderer);
+ mr.material = mat;
+ mr.geometry = geometry;
+ this.scene.addChild(obj);
+ }
+
+ private createLight() {
+ let light: Object3D = new Object3D();
+ let component = light.addComponent(DirectLight);
+ light.rotationX = -45;
+ light.rotationZ = -45;
+ component.lightColor = new Color(1.0, 0, 0, 1);
+ component.intensity = 10;
+ this.scene.addChild(light);
+ this.light = component;
+ }
+
+ private createComponents() {
+ this.light.object3D.addComponent(LightAnimation);
+ }
+
+ async run() {
+ await Engine3D.init();
+ this.init(new Scene3D());
+ let cameraObj = new Object3D();
+ let camera = cameraObj.addComponent(Camera3D);
+ camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ let controller = camera.object3D.addComponent(HoverCameraController);
+ controller.setCamera(-135, 0, 15);
+ this.scene.addChild(cameraObj);
+ // add an Atmospheric sky enviroment
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+ // create a view with target scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = camera;
+ // start render
+ Engine3D.startRenderView(view);
+ }
+}
+new UserLogic().run();
diff --git a/docs/public/demos/core/script_mat.ts b/docs/public/demos/core/script_mat.ts
new file mode 100644
index 00000000..18fe9220
--- /dev/null
+++ b/docs/public/demos/core/script_mat.ts
@@ -0,0 +1,80 @@
+import { ComponentBase, Time, DirectLight, Color, LitMaterial, MeshRenderer, Scene3D, BoxGeometry, Object3D, Engine3D, Camera3D, HoverCameraController, BloomPost, View3D, AtmosphericComponent, PostProcessingComponent } from '@orillusion/core';
+
+class MaterialAnimation extends ComponentBase {
+ private material: LitMaterial;
+ private time: number = 0;
+
+ start() {
+ let mr = this.object3D.getComponent(MeshRenderer);
+ this.material = mr.material as LitMaterial;
+ }
+
+ public onUpdate() {
+ let delta = Time.time * 0.001;
+ this.material.baseColor = new Color(Math.sin(delta), Math.cos(delta), Math.sin(delta));
+ }
+}
+
+class UserLogic {
+ private scene: Scene3D;
+ private cube: Object3D;
+ private light: DirectLight;
+
+ init(scene3D: Scene3D) {
+ this.scene = scene3D;
+ this.createCube();
+ this.createLight();
+ this.createComponents();
+ }
+
+ private createCube() {
+ let mat = new LitMaterial();
+ let obj: Object3D = new Object3D();
+ let geometry = new BoxGeometry(3, 3, 3);
+ let mr = obj.addComponent(MeshRenderer);
+ mr.material = mat;
+ mr.geometry = geometry;
+ this.cube = obj;
+ this.scene.addChild(obj);
+ }
+
+ private createLight() {
+ let light: Object3D = new Object3D();
+ let component = light.addComponent(DirectLight);
+ light.rotationX = 45;
+ light.rotationY = 30;
+ component.lightColor = new Color(1, 1, 1, 1);
+ component.intensity = 2;
+ this.scene.addChild(light);
+ this.light = component;
+ }
+
+ private createComponents() {
+ this.cube.addComponent(MaterialAnimation);
+ }
+
+ async run() {
+ await Engine3D.init();
+ this.init(new Scene3D());
+ let cameraObj = new Object3D();
+ let camera = cameraObj.addComponent(Camera3D);
+ camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ let controller = camera.object3D.addComponent(HoverCameraController);
+ controller.setCamera(45, 0, 15);
+ this.scene.addChild(cameraObj);
+
+ // add an Atmospheric sky enviroment
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+ // create a view with target scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = camera;
+ // start render
+ Engine3D.startRenderView(view);
+
+ // add a bloom post
+ let postProcessing = this.scene.addComponent(PostProcessingComponent);
+ postProcessing.addPost(BloomPost);
+ }
+}
+new UserLogic().run();
diff --git a/docs/public/demos/core/script_path.ts b/docs/public/demos/core/script_path.ts
new file mode 100644
index 00000000..e5f5918e
--- /dev/null
+++ b/docs/public/demos/core/script_path.ts
@@ -0,0 +1,67 @@
+import { ComponentBase, Time, DirectLight, Color, LitMaterial, MeshRenderer, Scene3D, BoxGeometry, Object3D, Engine3D, Camera3D, HoverCameraController, View3D, AtmosphericComponent } from '@orillusion/core';
+
+class PathAnimation extends ComponentBase {
+ onUpdate() {
+ this.object3D.x = Math.sin(Time.time * 0.001) * 2;
+ this.object3D.y = Math.cos(Time.time * 0.001) * 2;
+ }
+}
+
+class UserLogic {
+ private scene: Scene3D;
+ private cube: Object3D;
+ private light: DirectLight;
+
+ init(scene3D: Scene3D) {
+ this.scene = scene3D;
+ this.createCube();
+ this.createLight();
+ this.createComponents();
+ }
+
+ private createCube() {
+ let mat = new LitMaterial();
+ let obj: Object3D = new Object3D();
+ let geometry = new BoxGeometry(3, 3, 3);
+ let mr = obj.addComponent(MeshRenderer);
+ mr.material = mat;
+ mr.geometry = geometry;
+ this.scene.addChild(obj);
+ this.cube = obj;
+ }
+
+ private createLight() {
+ let light: Object3D = new Object3D();
+ let component = light.addComponent(DirectLight);
+ light.rotationX = 45;
+ light.rotationY = 30;
+ component.lightColor = new Color(1.0, 1.0, 0, 1);
+ component.intensity = 2;
+ this.scene.addChild(light);
+ this.light = component;
+ }
+
+ private createComponents() {
+ this.cube.addComponent(PathAnimation);
+ }
+
+ async run() {
+ await Engine3D.init();
+ this.init(new Scene3D());
+ let cameraObj = new Object3D();
+ let camera = cameraObj.addComponent(Camera3D);
+ camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ let controller = camera.object3D.addComponent(HoverCameraController);
+ controller.setCamera(45, 0, 15);
+ this.scene.addChild(cameraObj);
+ // add an Atmospheric sky enviroment
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+ // create a view with target scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = camera;
+ // start render
+ Engine3D.startRenderView(view);
+ }
+}
+new UserLogic().run();
diff --git a/docs/public/demos/core/transform.ts b/docs/public/demos/core/transform.ts
new file mode 100644
index 00000000..3e1c3e2a
--- /dev/null
+++ b/docs/public/demos/core/transform.ts
@@ -0,0 +1,67 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, AtmosphericComponent, LitMaterial, BoxGeometry, MeshRenderer, DirectLight, HoverCameraController, RGBEParser, Color, Vector3, View3D } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+// init Engine3D
+await Engine3D.init();
+
+// create a root Scene3D
+let scene3D: Scene3D = new Scene3D();
+// add an Atmospheric sky enviroment
+let sky = scene3D.addComponent(AtmosphericComponent);
+sky.sunY = 0.6;
+// create cmaera object
+let cameraObj: Object3D = new Object3D();
+// add Camera3D
+let camera = cameraObj.addComponent(Camera3D);
+// use a perspective view
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+// set camera controller
+let controller = camera.object3D.addComponent(HoverCameraController);
+controller.setCamera(0, 0, 15);
+// add camera to scene
+scene3D.addChild(cameraObj);
+// add a light object
+let light: Object3D = new Object3D();
+// add a dir light component
+let component: DirectLight = light.addComponent(DirectLight);
+// change light direction & color
+light.rotationX = 45;
+light.rotationY = 30;
+component.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+component.intensity = 10;
+// add light to scene
+scene3D.addChild(light);
+// create a object
+const obj: Object3D = new Object3D();
+// add MeshRenderer
+let mr: MeshRenderer = obj.addComponent(MeshRenderer);
+// set geometry
+mr.geometry = new BoxGeometry(5, 5, 5);
+// set material
+mr.material = new LitMaterial();
+// set poisiton and rotation
+obj.localPosition = new Vector3(0, 0, 0);
+obj.localRotation = new Vector3(0, 45, 0);
+// add to scene
+scene3D.addChild(obj);
+
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
+
+const GUIHelp = new dat.GUI();
+let f = GUIHelp.addFolder('Box Transform');
+f.add(obj.transform, 'enable');
+f.add(obj.transform, 'x', -10.0, 10.0, 0.01);
+f.add(obj.transform, 'y', -10.0, 10.0, 0.01);
+f.add(obj.transform, 'z', -10.0, 10.0, 0.01);
+f.add(obj.transform, 'rotationX', 0.0, 360.0, 0.01);
+f.add(obj.transform, 'rotationY', 0.0, 360.0, 0.01);
+f.add(obj.transform, 'rotationZ', 0.0, 360.0, 0.01);
+f.add(obj.transform, 'scaleX', 0.0, 2.0, 0.01);
+f.add(obj.transform, 'scaleY', 0.0, 2.0, 0.01);
+f.add(obj.transform, 'scaleZ', 0.0, 2.0, 0.01);
+f.open();
diff --git a/docs/public/demos/getting_start/cube.ts b/docs/public/demos/getting_start/cube.ts
new file mode 100644
index 00000000..b27b6cc6
--- /dev/null
+++ b/docs/public/demos/getting_start/cube.ts
@@ -0,0 +1,47 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, LitMaterial, BoxGeometry, MeshRenderer, DirectLight, HoverCameraController, View3D, AtmosphericComponent } from '@orillusion/core';
+
+// initializa engine
+await Engine3D.init();
+// create new scene as root node
+let scene3D: Scene3D = new Scene3D();
+// add an Atmospheric sky enviroment
+let sky = scene3D.addComponent(AtmosphericComponent);
+sky.sunY = 0.6;
+// create camera
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+// adjust camera view
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+// set camera controller
+let controller = cameraObj.addComponent(HoverCameraController);
+controller.setCamera(0, -15, 15);
+// add camera node
+scene3D.addChild(cameraObj);
+// create light
+let light: Object3D = new Object3D();
+// add direct light component
+let component: DirectLight = light.addComponent(DirectLight);
+// adjust lighting
+light.rotationX = 45;
+light.rotationY = 30;
+component.intensity = 2;
+// add light object
+scene3D.addChild(light);
+// create new object
+const obj: Object3D = new Object3D();
+// add MeshRenderer
+let mr: MeshRenderer = obj.addComponent(MeshRenderer);
+// set geometry
+mr.geometry = new BoxGeometry(5, 5, 5);
+// set material
+mr.material = new LitMaterial();
+// set rotation
+obj.rotationY = 45;
+// add object
+scene3D.addChild(obj);
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/getting_start/load_model.ts b/docs/public/demos/getting_start/load_model.ts
new file mode 100644
index 00000000..a39283d6
--- /dev/null
+++ b/docs/public/demos/getting_start/load_model.ts
@@ -0,0 +1,41 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, DirectLight, HoverCameraController, Color, View3D, AtmosphericComponent } from '@orillusion/core';
+
+// initializa engine
+await Engine3D.init();
+// create new scene as root node
+let scene3D: Scene3D = new Scene3D();
+// add an Atmospheric sky enviroment
+let sky = scene3D.addComponent(AtmosphericComponent);
+sky.sunY = 0.6;
+// create camera
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+// adjust camera view
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+// set camera controller
+let controller = cameraObj.addComponent(HoverCameraController);
+controller.setCamera(0, -20, 15);
+// add camera node
+scene3D.addChild(cameraObj);
+// create light
+let light: Object3D = new Object3D();
+// add direct light component
+let component: DirectLight = light.addComponent(DirectLight);
+// adjust lighting
+light.rotationX = 45;
+light.rotationY = 30;
+component.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+component.intensity = 1;
+// add light object
+scene3D.addChild(light);
+
+// load gltf model
+let dragon = await Engine3D.res.loadGltf('https://cdn.orillusion.com/PBR/DragonAttenuation/DragonAttenuation.gltf');
+scene3D.addChild(dragon);
+
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/getting_start/script.ts b/docs/public/demos/getting_start/script.ts
new file mode 100644
index 00000000..76ec88eb
--- /dev/null
+++ b/docs/public/demos/getting_start/script.ts
@@ -0,0 +1,55 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, LitMaterial, BoxGeometry, MeshRenderer, DirectLight, HoverCameraController, Color, ComponentBase, View3D, AtmosphericComponent } from '@orillusion/core';
+
+class RotateScript extends ComponentBase {
+ public onUpdate() {
+ // update lifecycle codes
+ this.object3D.rotationY += 1;
+ }
+}
+
+// initializa engine
+await Engine3D.init();
+// create new scene as root node
+let scene3D = new Scene3D();
+// add an Atmospheric sky enviroment
+let sky = scene3D.addComponent(AtmosphericComponent);
+sky.sunY = 0.6;
+// create camera
+let cameraObj = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+// adjust camera view
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+// set camera controller
+cameraObj.addComponent(HoverCameraController);
+// add camera node
+scene3D.addChild(cameraObj);
+
+// create light
+let light: Object3D = new Object3D();
+// add direct light component
+let component = light.addComponent(DirectLight);
+// adjust lighting
+component.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+component.intensity = 1;
+// add light object
+scene3D.addChild(light);
+
+// create new object
+const obj = new Object3D();
+// add MeshRenderer
+let mr = obj.addComponent(MeshRenderer);
+// set geometry
+mr.geometry = new BoxGeometry(5, 5, 5);
+// set material
+mr.material = new LitMaterial();
+// add script
+obj.addComponent(RotateScript);
+// add object
+scene3D.addChild(obj);
+
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/graphics/camera_fly.ts b/docs/public/demos/graphics/camera_fly.ts
new file mode 100644
index 00000000..c3b610cc
--- /dev/null
+++ b/docs/public/demos/graphics/camera_fly.ts
@@ -0,0 +1,55 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, Vector3, PlaneGeometry, DirectLight, Color, KelvinUtil, FlyCameraController, AtmosphericComponent, LitMaterial, BoxGeometry, MeshRenderer, View3D } from '@orillusion/core';
+
+await Engine3D.init();
+let scene: Scene3D = new Scene3D();
+let cameraObj = new Object3D();
+cameraObj.y = 0;
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 0.1, 5000.0);
+
+// add Camera Controller
+let flyController = cameraObj.addComponent(FlyCameraController);
+flyController.setCamera(new Vector3(0, 15, 15), new Vector3(0, 10, 0));
+flyController.moveSpeed = 10;
+scene.addChild(cameraObj);
+
+const boxObj: Object3D = new Object3D();
+boxObj.localPosition = new Vector3(0, 10, 0);
+let boxMr: MeshRenderer = boxObj.addComponent(MeshRenderer);
+boxMr.geometry = new BoxGeometry(2, 2, 2);
+boxMr.material = new LitMaterial();
+boxMr.material.baseColor = new Color(1.0, 1.0, 1.0, 1.0);
+scene.addChild(boxObj);
+
+let groundObj = new Object3D();
+groundObj.localPosition = new Vector3(0, 9, 0);
+
+let planeMr = groundObj.addComponent(MeshRenderer);
+planeMr.geometry = new PlaneGeometry(10, 10);
+
+planeMr.material = new LitMaterial();
+scene.addChild(groundObj);
+
+{
+ let lightObj = new Object3D();
+ lightObj.x = 0;
+ lightObj.y = 0;
+ lightObj.z = 0;
+ lightObj.rotationX = 0;
+ lightObj.rotationY = 0;
+ lightObj.rotationZ = 0;
+ let lc = lightObj.addComponent(DirectLight);
+ lc.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ lc.castShadow = true;
+ lc.intensity = 1.7;
+ scene.addChild(lightObj);
+}
+
+// add an Atmospheric sky enviroment
+scene.addComponent(AtmosphericComponent).sunY = 0.6;
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/graphics/camera_hover.ts b/docs/public/demos/graphics/camera_hover.ts
new file mode 100644
index 00000000..86e6a3c0
--- /dev/null
+++ b/docs/public/demos/graphics/camera_hover.ts
@@ -0,0 +1,36 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, Vector3, HoverCameraController, AtmosphericComponent, LitMaterial, BoxGeometry, MeshRenderer, View3D, DirectLight } from '@orillusion/core';
+
+await Engine3D.init();
+let scene: Scene3D = new Scene3D();
+
+let cameraObj = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 0.1, 5000.0);
+
+// add camera controller
+let hoverController = cameraObj.addComponent(HoverCameraController);
+hoverController.setCamera(15, -15, 15, new Vector3(0, 0, 0));
+scene.addChild(cameraObj);
+
+// add a base light
+let lightObj = new Object3D();
+lightObj.addComponent(DirectLight);
+scene.addChild(lightObj);
+
+const boxObj: Object3D = new Object3D();
+boxObj.localPosition = new Vector3(0, 0, 0);
+
+let mr: MeshRenderer = boxObj.addComponent(MeshRenderer);
+mr.geometry = new BoxGeometry(5, 5, 5);
+mr.material = new LitMaterial();
+
+scene.addChild(boxObj);
+
+// add an Atmospheric sky enviroment
+scene.addComponent(AtmosphericComponent).sunY = 0.6;
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/graphics/camera_orbit.ts b/docs/public/demos/graphics/camera_orbit.ts
new file mode 100644
index 00000000..62a35456
--- /dev/null
+++ b/docs/public/demos/graphics/camera_orbit.ts
@@ -0,0 +1,38 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, Vector3, OrbitController, AtmosphericComponent, LitMaterial, BoxGeometry, MeshRenderer, View3D, DirectLight } from '@orillusion/core';
+
+await Engine3D.init();
+let scene: Scene3D = new Scene3D();
+
+let cameraObj = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 0.1, 5000.0);
+cameraObj.localPosition.set(0, 10, 20);
+
+// add camera controller
+let orbit = cameraObj.addComponent(OrbitController);
+// auto rotation
+orbit.autoRotateSpeed = 0.5;
+orbit.autoRotate = true;
+scene.addChild(cameraObj);
+
+// add a base light
+let lightObj = new Object3D();
+lightObj.addComponent(DirectLight);
+scene.addChild(lightObj);
+
+const boxObj: Object3D = new Object3D();
+boxObj.localPosition = new Vector3(0, 0, 0);
+let mr: MeshRenderer = boxObj.addComponent(MeshRenderer);
+mr.geometry = new BoxGeometry(5, 5, 5);
+mr.material = new LitMaterial();
+
+scene.addChild(boxObj);
+
+// add an Atmospheric sky enviroment
+scene.addComponent(AtmosphericComponent).sunY = 0.6;
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/graphics/camera_type.ts b/docs/public/demos/graphics/camera_type.ts
new file mode 100644
index 00000000..83e304a1
--- /dev/null
+++ b/docs/public/demos/graphics/camera_type.ts
@@ -0,0 +1,93 @@
+import { Engine3D, Vector3, Scene3D, Object3D, Camera3D, AtmosphericComponent, LitMaterial, BoxGeometry, MeshRenderer, HoverCameraController, View3D, CameraType, DirectLight } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+export default class CameraDemo {
+ cameraObj: Object3D;
+ camera: Camera3D;
+ scene: Scene3D;
+
+ constructor() {}
+
+ async run() {
+ await Engine3D.init({
+ canvasConfig: {
+ alpha: true
+ }
+ });
+ await this.initScene();
+ await this.initCamera();
+ await this.createBoxes();
+
+ let sky = this.scene.addComponent(AtmosphericComponent);
+ sky.sunY = 0.6;
+ sky.enable = false;
+
+ // add a base light
+ let lightObj = new Object3D();
+ lightObj.addComponent(DirectLight);
+ this.scene.addChild(lightObj);
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = this.camera;
+ Engine3D.startRenderView(view);
+
+ this.addGui();
+ }
+
+ async initScene() {
+ this.scene = new Scene3D();
+ }
+
+ async initCamera() {
+ this.cameraObj = new Object3D();
+ this.camera = this.cameraObj.addComponent(Camera3D);
+ this.camera.lookAt(new Vector3(0, 0, -350), new Vector3(0, 0, 0));
+ let hc = this.cameraObj.addComponent(HoverCameraController);
+ hc.setCamera(-90, 0, 500);
+ this.scene.addChild(this.cameraObj);
+ this.perspective();
+ }
+
+ async orthoOffCenter() {
+ this.camera.orthoOffCenter(-window.innerWidth / 4, window.innerWidth / 4, -window.innerHeight / 4, window.innerHeight / 4, 1, 5000.0);
+ }
+
+ async perspective() {
+ this.camera.perspective(60, Engine3D.aspect, 1, 10000.0);
+ }
+
+ async createBox(name: string) {
+ let obj: Object3D = new Object3D();
+ obj.name = name;
+ let mr: MeshRenderer = obj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(50, 50, 50);
+ mr.material = new LitMaterial();
+ return obj;
+ }
+
+ async createBoxes() {
+ for (let i = -1; i < 2; ++i) {
+ let obj = await this.createBox('cube_' + i);
+
+ obj.x = 0;
+ obj.y = i * -60;
+ obj.z = i * -60;
+
+ this.scene.addChild(obj);
+ }
+ }
+
+ async addGui() {
+ const GUIHelp = new dat.GUI();
+ GUIHelp.addFolder('Camera Type');
+ GUIHelp.add({ Perspective: () => this.perspective() }, 'Perspective');
+ GUIHelp.add({ Orthographic: () => this.orthoOffCenter() }, 'Orthographic');
+
+ window.addEventListener('resize', () => {
+ if (this.camera.type === CameraType.ortho) this.orthoOffCenter();
+ });
+ }
+}
+new CameraDemo().run();
+document.body.style.background = '#aaa';
diff --git a/docs/public/demos/graphics/graphic_mesh3d.ts b/docs/public/demos/graphics/graphic_mesh3d.ts
new file mode 100644
index 00000000..30029b37
--- /dev/null
+++ b/docs/public/demos/graphics/graphic_mesh3d.ts
@@ -0,0 +1,102 @@
+import { Object3D, Scene3D, Engine3D, AtmosphericComponent, CameraUtil, HoverCameraController, View3D, UnLitTexArrayMaterial, BitmapTexture2DArray, BitmapTexture2D, PlaneGeometry, Vector3, Matrix4, Time, BlendMode, Color } from '@orillusion/core';
+import { Stats } from '@orillusion/stats';
+import { Graphic3DMesh, Graphic3DMeshRenderer } from '@orillusion/graphic';
+
+class Sample_GraphicMesh {
+ private scene: Scene3D;
+ private parts: Object3D[];
+ private width: number;
+ private height: number;
+ private cafe: number = 47;
+ private view: View3D;
+
+ graphicMeshRenderer: Graphic3DMeshRenderer;
+
+ constructor() {}
+
+ async run() {
+ Matrix4.maxCount = 500000;
+ Matrix4.allocCount = 500000;
+
+ await Engine3D.init({beforeRender: ()=> this.update()});
+
+ Engine3D.setting.render.debug = true;
+ Engine3D.setting.shadow.shadowBound = 5;
+
+ this.scene = new Scene3D();
+ this.scene.addComponent(Stats);
+ let sky = this.scene.addComponent(AtmosphericComponent);
+ sky.enable = false;
+ let camera = CameraUtil.createCamera3DObject(this.scene);
+ camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+
+ camera.object3D.addComponent(HoverCameraController).setCamera(30, 0, 120);
+
+ this.view = new View3D();
+ this.view.scene = this.scene;
+ this.view.camera = camera;
+
+ Engine3D.startRenderView(this.view);
+ await this.initScene();
+ }
+
+ async initScene() {
+ let texts:any[] = [];
+ texts.push((await Engine3D.res.loadTexture('https://cdn.orillusion.com/textures/128/star_0008.png')) as BitmapTexture2D);
+
+ let bitmapTexture2DArray = new BitmapTexture2DArray(texts[0].width, texts[0].height, texts.length);
+ bitmapTexture2DArray.setTextures(texts);
+
+ let mat = new UnLitTexArrayMaterial();
+ mat.baseMap = bitmapTexture2DArray;
+ mat.name = 'LitMaterial';
+
+ {
+ this.width = 15;
+ this.height = 15;
+ let geometry = new PlaneGeometry(1, 1, 1, 1, Vector3.Z_AXIS);
+ this.graphicMeshRenderer = Graphic3DMesh.draw(this.scene, geometry, bitmapTexture2DArray, this.width * this.height);
+ this.parts = this.graphicMeshRenderer.object3Ds;
+
+ this.graphicMeshRenderer.material.blendMode = BlendMode.ADD;
+ this.graphicMeshRenderer.material.transparent = true;
+ this.graphicMeshRenderer.material.depthWriteEnabled = false;
+ this.graphicMeshRenderer.material.useBillboard = true;
+
+ for (let i = 0; i < this.width * this.height; i++) {
+ const element = this.parts[i];
+ this.graphicMeshRenderer.setTextureID(i, 0);
+ element.transform.scaleX = 5.5;
+ element.transform.scaleY = 5.5;
+ element.transform.scaleZ = 5.5;
+ }
+ }
+ }
+
+ update(){
+ if (this.parts) {
+ let len = this.parts.length;
+ for (let i = 0; i < len; i++) {
+ const element = this.parts[i];
+ let tmp = this.sphericalFibonacci(i, len);
+ tmp.scaleBy(Math.sin(i + Time.frame * 0.01) * this.cafe);
+ element.transform.localPosition = tmp;
+ }
+ }
+ }
+
+ public madfrac(A: number, B: number): number {
+ return A * B - Math.floor(A * B);
+ }
+
+ public sphericalFibonacci(i: number, n: number): Vector3 {
+ const PHI = Math.sqrt(5.0) * 0.5 + 0.5;
+ let phi = 2.0 * Math.PI * this.madfrac(i, PHI - 1);
+ let cosTheta = 1.0 - (2.0 * i + 1.0) * (1.0 / n);
+ let sinTheta = Math.sqrt(Math.max(Math.min(1.0 - cosTheta * cosTheta, 1.0), 0.0));
+
+ return new Vector3(Math.cos(phi) * sinTheta, Math.sin(phi) * sinTheta, cosTheta);
+ }
+}
+
+new Sample_GraphicMesh().run();
diff --git a/docs/public/demos/graphics/graphic_shape3d.ts b/docs/public/demos/graphics/graphic_shape3d.ts
new file mode 100644
index 00000000..b06f718d
--- /dev/null
+++ b/docs/public/demos/graphics/graphic_shape3d.ts
@@ -0,0 +1,154 @@
+import { Object3D, Scene3D, Engine3D, AtmosphericComponent, CameraUtil, HoverCameraController, View3D, DirectLight, KelvinUtil, BitmapTexture2DArray, BitmapTexture2D, Matrix4, Color, LineJoin, Vector4, Object3DUtil, AxisObject } from '@orillusion/core';
+import { Stats } from '@orillusion/stats';
+import { Shape3DMaker, Shape3D, CircleArcType, CircleShape3D } from '@orillusion/graphic';
+import * as dat from 'dat.gui';
+
+/**
+ * This example shows how to use Shape2D to draw various different paths on xz plane.
+ *
+ * @export
+ * @class Sample_Shape3DPath2D
+ */
+class Sample_Shape3DPath2D {
+ lightObj3D: Object3D;
+ scene: Scene3D;
+ view: View3D;
+
+ async run() {
+ Matrix4.maxCount = 10000;
+ Matrix4.allocCount = 10000;
+
+ await Engine3D.init({ beforeRender: () => this.update() });
+
+ Engine3D.setting.render.debug = true;
+ Engine3D.setting.shadow.shadowBound = 5;
+
+ this.scene = new Scene3D();
+ this.scene.addComponent(Stats);
+ let sky = this.scene.addComponent(AtmosphericComponent);
+ let camera = CameraUtil.createCamera3DObject(this.scene);
+ camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+
+ camera.object3D.addComponent(HoverCameraController).setCamera(0, -60, 60);
+
+ this.view = new View3D();
+ this.view.scene = this.scene;
+ this.view.camera = camera;
+
+ Engine3D.startRenderView(this.view);
+
+ await this.initScene();
+
+ this.scene.addChild(new AxisObject(10, 0.1));
+
+ sky.relativeTransform = this.lightObj3D.transform;
+ }
+
+ async initScene() {
+ {
+ /******** light *******/
+ this.lightObj3D = new Object3D();
+ this.lightObj3D.rotationX = 21;
+ this.lightObj3D.rotationY = 108;
+ this.lightObj3D.rotationZ = 10;
+ let directLight = this.lightObj3D.addComponent(DirectLight);
+ directLight.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ directLight.castShadow = false;
+ directLight.intensity = 20;
+ this.scene.addChild(this.lightObj3D);
+ await this.addNode();
+ }
+ {
+ let floor = Object3DUtil.GetSingleCube(100, 0.1, 100, 0.2, 0.2, 0.2);
+ floor.y = -0.2;
+ this.scene.addChild(floor);
+ }
+ }
+
+ private maker: Shape3DMaker;
+ private async addNode() {
+ let textureArray:any[] = [];
+ textureArray.push((await Engine3D.res.loadTexture('https://cdn.orillusion.com/textures/128/vein_0013.png')) as BitmapTexture2D);
+ textureArray.push((await Engine3D.res.loadTexture('https://cdn.orillusion.com/textures/128/vein_0014.png')) as BitmapTexture2D);
+
+ let bitmapTexture2DArray = new BitmapTexture2DArray(textureArray[0].width, textureArray[0].height, textureArray.length);
+ bitmapTexture2DArray.setTextures(textureArray);
+
+ this.maker = Shape3DMaker.makeRenderer(`path`, bitmapTexture2DArray, this.scene);
+ this.maker.renderer.material.doubleSide = true;
+
+ this.createPath();
+ }
+
+ private createPath(): Shape3D {
+ let circle = this.maker.arc(20, 0, 360, undefined);
+ circle.lineWidth = 2;
+ circle.segment = 40;
+ circle.fill = true;
+ circle.line = true;
+ circle.isClosed = false;
+ circle.lineUVRect.z = 0.5;
+ circle.lineUVRect.w = 0.5;
+ circle.fillUVRect.z = 0.1;
+ circle.fillUVRect.w = 0.1;
+
+ circle.fillTextureID = 0;
+ circle.lineTextureID = 1;
+
+ circle.lineColor = Color.random();
+ circle.uvSpeed = new Vector4(0, 0, 0, Math.random() - 0.5).multiplyScalar(0.005);
+
+ const GUIHelp = new dat.GUI();
+ this.renderCircle(GUIHelp, circle, 5, false);
+ return circle;
+ }
+
+ update() {}
+
+ renderCircle(GUIHelp: dat.GUI, shape: CircleShape3D, maxSize: number, open: boolean = true, name?: string) {
+ name ||= 'Circle3D_' + shape.shapeIndex;
+ GUIHelp.addFolder(name);
+ GUIHelp.add(shape, 'radius', 0, maxSize, 0.1);
+ GUIHelp.add(shape, 'segment', 0, 100, 1);
+ GUIHelp.add(shape, 'startAngle', 0, 360, 1);
+ GUIHelp.add(shape, 'endAngle', 0, 360, 1);
+ let arcType = {};
+ arcType['sector'] = CircleArcType.Sector;
+ arcType['moon'] = CircleArcType.Moon;
+ GUIHelp.add({ arcType: shape.arcType }, 'arcType', arcType).onChange((v) => {
+ shape.arcType = Number.parseInt(v);
+ });
+
+ this.renderCommonShape3D(GUIHelp, shape, maxSize);
+ }
+
+ renderCommonShape3D(GUIHelp: dat.GUI, shape: Shape3D, maxSize: number, uvMin: number = 0.01, uvMax: number = 1.0) {
+ GUIHelp.add(shape, 'line');
+ GUIHelp.add(shape, 'fill');
+ GUIHelp.add(shape, 'isClosed');
+ GUIHelp.add(shape, 'lineWidth', 0, maxSize, 0.01);
+ GUIHelp.add(shape, 'fillRotation', -Math.PI, Math.PI, 0.01);
+
+ this.renderVec4(GUIHelp, 'FillUVRect.', shape, 'fillUVRect', 0, 10, 0.01);
+ this.renderVec4(GUIHelp, 'LineUVRect.', shape, 'lineUVRect', 0, 10, 0.01);
+ this.renderVec4(GUIHelp, 'UVSpeed.', shape, 'uvSpeed', -0.01, 0.01, 0.0001);
+
+ GUIHelp.add(shape, 'lineTextureID', 0, 1, 1);
+ GUIHelp.add(shape, 'fillTextureID', 0, 1, 1);
+ }
+
+ renderVec4(GUIHelp: dat.GUI, label: string, target: Object, key: string, min: number, max: number, step: number = 0.01) {
+ let components = ['x', 'y', 'z', 'w'];
+ let data = {} as any;
+ let vec4: Vector4 = target[key];
+ for (let component of components) {
+ data[label + component] = vec4[component];
+ GUIHelp.add(data, label + component, min, max, step).onChange((v) => {
+ vec4[component] = v;
+ target[key] = vec4;
+ });
+ }
+ }
+}
+
+new Sample_Shape3DPath2D().run();
diff --git a/docs/public/demos/graphics/lighting_dir.ts b/docs/public/demos/graphics/lighting_dir.ts
new file mode 100644
index 00000000..c4f96ee0
--- /dev/null
+++ b/docs/public/demos/graphics/lighting_dir.ts
@@ -0,0 +1,96 @@
+import { BoxGeometry, Camera3D, Engine3D, AtmosphericComponent, LitMaterial, HoverCameraController, MeshRenderer, Object3D, Scene3D, DirectLight, Vector3, webGPUContext, View3D } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_Light {
+ scene: Scene3D;
+ hoverCameraController: HoverCameraController;
+ lightObj: any;
+ constructor() {}
+
+ async run() {
+ await Engine3D.init({
+ canvasConfig: { devicePixelRatio: 1 }
+ });
+ this.scene = new Scene3D();
+ let cameraObj = new Object3D();
+ let mainCamera = cameraObj.addComponent(Camera3D);
+ mainCamera.perspective(37, webGPUContext.aspect, 1, 10000.0);
+
+ this.hoverCameraController = mainCamera.object3D.addComponent(HoverCameraController);
+ this.scene.addChild(cameraObj);
+
+ //set camera data
+ this.hoverCameraController.setCamera(0, -45, 2000);
+ this.initScene(this.scene);
+
+ // add an Atmospheric sky enviroment
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+ // create a view with target scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ // start render
+ Engine3D.startRenderView(view);
+ }
+
+ initScene(scene: Scene3D) {
+ {
+ let dirLight = new Object3D();
+ dirLight.rotationX = 30;
+ dirLight.rotationZ = 30;
+ let light = dirLight.addComponent(DirectLight);
+ light.intensity = 20;
+ light.lightColor.r = 255 / 255;
+ light.lightColor.g = 157 / 255;
+ light.lightColor.b = 5 / 255;
+ scene.addChild(dirLight);
+
+ let GUIHelp = new dat.GUI();
+ GUIHelp.addFolder('Direct Light');
+ GUIHelp.add(dirLight, 'rotationX', -180, 180, 1);
+ GUIHelp.add(dirLight, 'rotationY', -180, 180, 1);
+ GUIHelp.add(dirLight, 'rotationZ', -180, 180, 1);
+ GUIHelp.addColor({ color: Object.values(light.lightColor).map((v) => v * 255) }, 'color').onChange((v) => {
+ light.lightColor.copyFromArray(v);
+ });
+ GUIHelp.add(light, 'intensity', 0, 100, 1);
+ }
+
+ let mat = new LitMaterial();
+ mat.baseMap = Engine3D.res.grayTexture;
+
+ let floor = new Object3D();
+ let mr = floor.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(2000, 1, 2000);
+ mr.material = mat;
+ this.scene.addChild(floor);
+
+ let box = new BoxGeometry(1, 1, 1);
+
+ let wall_w = new Object3D();
+ wall_w.localScale = new Vector3(500, 100, 10);
+ wall_w.localPosition = new Vector3(0, 50, 0);
+ let mrw = wall_w.addComponent(MeshRenderer);
+ mrw.geometry = box;
+ mrw.material = mat;
+ this.scene.addChild(wall_w);
+
+ let wall_a = new Object3D();
+ wall_a.localScale = new Vector3(10, 100, 500);
+ wall_a.localPosition = new Vector3(250, 50, 0);
+ let mra = wall_a.addComponent(MeshRenderer);
+ mra.geometry = box;
+ mra.material = mat;
+ this.scene.addChild(wall_a);
+
+ let wall_d = new Object3D();
+ wall_d.localScale = new Vector3(10, 100, 500);
+ wall_d.localPosition = new Vector3(-250, 50, 0);
+ let mrd = wall_d.addComponent(MeshRenderer);
+ mrd.geometry = box;
+ mrd.material = mat;
+ this.scene.addChild(wall_d);
+ }
+}
+
+new Sample_Light().run();
diff --git a/docs/public/demos/graphics/lighting_point.ts b/docs/public/demos/graphics/lighting_point.ts
new file mode 100644
index 00000000..693d83ef
--- /dev/null
+++ b/docs/public/demos/graphics/lighting_point.ts
@@ -0,0 +1,102 @@
+import { BoxGeometry, Camera3D, Engine3D, AtmosphericComponent, LitMaterial, HoverCameraController, MeshRenderer, Object3D, Scene3D, SphereGeometry, PointLight, Vector3, webGPUContext, View3D } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_Light {
+ scene: Scene3D;
+ hoverCameraController: HoverCameraController;
+ lightObj: any;
+ constructor() {}
+
+ async run() {
+ await Engine3D.init({
+ canvasConfig: { devicePixelRatio: 1 }
+ });
+
+ this.scene = new Scene3D();
+ let cameraObj = new Object3D();
+ let mainCamera = cameraObj.addComponent(Camera3D);
+ mainCamera.perspective(37, webGPUContext.aspect, 1, 5000.0);
+
+ this.hoverCameraController = mainCamera.object3D.addComponent(HoverCameraController);
+ this.scene.addChild(cameraObj);
+
+ //set camera data
+ this.hoverCameraController.setCamera(0, -45, 1200);
+ await this.initScene(this.scene);
+
+ // add an Atmospheric sky enviroment
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+ // create a view with target scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ // start render
+ Engine3D.startRenderView(view);
+ }
+
+ initScene(scene: Scene3D) {
+ {
+ let sp = new SphereGeometry(5, 30, 30);
+ let pointLight = new Object3D();
+ pointLight.y = 200;
+ let mr = pointLight.addComponent(MeshRenderer);
+ mr.geometry = sp;
+ mr.material = new LitMaterial();
+
+ let light = pointLight.addComponent(PointLight);
+ light.intensity = 100;
+ light.range = 300;
+ light.lightColor.r = 255 / 255;
+ light.lightColor.g = 157 / 255;
+ light.lightColor.b = 5 / 255;
+ scene.addChild(pointLight);
+
+ let GUIHelp = new dat.GUI();
+ GUIHelp.addFolder('Direct Light');
+ GUIHelp.add(pointLight, 'x', -180, 180, 1);
+ GUIHelp.add(pointLight, 'y', -180, 180, 1);
+ GUIHelp.add(pointLight, 'z', -180, 180, 1);
+ GUIHelp.addColor({ color: Object.values(light.lightColor).map((v) => v * 255) }, 'color').onChange((v) => {
+ light.lightColor.copyFromArray(v);
+ });
+ GUIHelp.add(light, 'intensity', 0, 200, 1);
+ GUIHelp.add(light, 'range', 100, 500, 1);
+ }
+
+ let mat = new LitMaterial();
+ mat.baseMap = Engine3D.res.grayTexture;
+
+ let floor = new Object3D();
+ let mr = floor.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(2000, 1, 2000);
+ mr.material = mat;
+ this.scene.addChild(floor);
+
+ let box = new BoxGeometry(1, 1, 1);
+ let wall_w = new Object3D();
+ wall_w.localScale = new Vector3(500, 100, 10);
+ wall_w.localPosition = new Vector3(0, 50, 0);
+ let mrw = wall_w.addComponent(MeshRenderer);
+ mrw.geometry = box;
+ mrw.material = mat;
+ this.scene.addChild(wall_w);
+
+ let wall_a = new Object3D();
+ wall_a.localScale = new Vector3(10, 100, 500);
+ wall_a.localPosition = new Vector3(250, 50, 0);
+ let mra = wall_a.addComponent(MeshRenderer);
+ mra.geometry = box;
+ mra.material = mat;
+ this.scene.addChild(wall_a);
+
+ let wall_d = new Object3D();
+ wall_d.localScale = new Vector3(10, 100, 500);
+ wall_d.localPosition = new Vector3(-250, 50, 0);
+ let mrd = wall_d.addComponent(MeshRenderer);
+ mrd.geometry = box;
+ mrd.material = mat;
+ this.scene.addChild(wall_d);
+ }
+}
+
+new Sample_Light().run();
diff --git a/docs/public/demos/graphics/lighting_pointIes.ts b/docs/public/demos/graphics/lighting_pointIes.ts
new file mode 100644
index 00000000..c81ddf3a
--- /dev/null
+++ b/docs/public/demos/graphics/lighting_pointIes.ts
@@ -0,0 +1,84 @@
+import { BoxGeometry, Camera3D, Engine3D, View3D, LitMaterial, HoverCameraController, BitmapTexture2D, MeshRenderer, Object3D, Scene3D, SphereGeometry, PointLight, Vector3, webGPUContext, IESProfiles, AtmosphericComponent } from '@orillusion/core';
+
+class Sample_LightIES {
+ scene: Scene3D;
+ hoverCameraController: HoverCameraController;
+ lightObj: any;
+ constructor() {}
+
+ async run() {
+ Engine3D.setting.shadow.pointShadowBias = 0.0001;
+ Engine3D.setting.shadow.type = `HARD`;
+
+ await Engine3D.init({
+ canvasConfig: { devicePixelRatio: 1 }
+ });
+
+ this.scene = new Scene3D();
+ let cameraObj = new Object3D();
+ let mainCamera = cameraObj.addComponent(Camera3D);
+ mainCamera.perspective(37, webGPUContext.aspect, 1, 5000.0);
+
+ this.hoverCameraController = mainCamera.object3D.addComponent(HoverCameraController);
+ this.scene.addChild(cameraObj);
+
+ //set camera data
+ this.hoverCameraController.setCamera(0, -45, 200);
+ await this.initScene(this.scene);
+
+ // add an Atmospheric sky enviroment
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+ // create a view with target scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ // start render
+ Engine3D.startRenderView(view);
+ }
+
+ async initScene(scene: Scene3D) {
+ // load ies texture
+ let iesTexture = await Engine3D.res.loadTexture('https://cdn.orillusion.com/ies/ies_2.png');
+ var iesPofiles = new IESProfiles();
+ iesPofiles.IESTexture = iesTexture;
+
+ {
+ let po = new Object3D();
+ let pl = po.addComponent(PointLight);
+ pl.intensity = 10;
+ pl.range = 100;
+ pl.castShadow = true;
+ pl.realTimeShadow = true;
+ pl.iesProfiles = iesPofiles;
+ po.x = 0;
+ po.y = 22;
+ po.z = 15;
+ this.scene.addChild(po);
+ }
+
+ let ball: Object3D;
+ {
+ let mat = new LitMaterial();
+ mat.roughness = 0.5;
+ mat.metallic = 0.2;
+
+ ball = new Object3D();
+ let mr = ball.addComponent(MeshRenderer);
+ mr.geometry = new SphereGeometry(6, 20, 20);
+ mr.material = mat;
+ this.scene.addChild(ball);
+ ball.transform.x = -17;
+ ball.transform.y = 10;
+ ball.transform.z = 10;
+
+ //wall
+ let back_wall = new Object3D();
+ let mr2 = back_wall.addComponent(MeshRenderer);
+ mr2.geometry = new BoxGeometry(500, 500, 10);
+ mr2.material = mat;
+ this.scene.addChild(back_wall);
+ }
+ }
+}
+
+new Sample_LightIES().run();
diff --git a/docs/public/demos/graphics/lighting_spot.ts b/docs/public/demos/graphics/lighting_spot.ts
new file mode 100644
index 00000000..eb60ba16
--- /dev/null
+++ b/docs/public/demos/graphics/lighting_spot.ts
@@ -0,0 +1,111 @@
+import { BoxGeometry, Camera3D, Engine3D, AtmosphericComponent, LitMaterial, HoverCameraController, MeshRenderer, Object3D, Scene3D, SphereGeometry, SpotLight, Vector3, webGPUContext, View3D } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_Light {
+ scene: Scene3D;
+ hoverCameraController: HoverCameraController;
+ lightObj: any;
+ constructor() {}
+
+ async run() {
+ await Engine3D.init({
+ canvasConfig: { devicePixelRatio: 1 }
+ });
+
+ this.scene = new Scene3D();
+ let cameraObj = new Object3D();
+ let mainCamera = cameraObj.addComponent(Camera3D);
+ mainCamera.perspective(37, webGPUContext.aspect, 1, 5000.0);
+
+ this.hoverCameraController = mainCamera.object3D.addComponent(HoverCameraController);
+ this.scene.addChild(cameraObj);
+
+ //set camera data
+ this.hoverCameraController.setCamera(0, -45, 1000);
+ this.initScene(this.scene);
+
+ // add an Atmospheric sky enviroment
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+ // create a view with target scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ // start render
+ Engine3D.startRenderView(view);
+ }
+
+ initScene(scene: Scene3D) {
+ {
+ let sp = new SphereGeometry(5, 30, 30);
+ let spotLight = new Object3D();
+ let mr = spotLight.addComponent(MeshRenderer);
+ mr.geometry = sp;
+ mr.material = new LitMaterial();
+
+ let light = spotLight.addComponent(SpotLight);
+ spotLight.y = 200;
+ spotLight.z = 50;
+ spotLight.rotationX = 120;
+ light.lightColor.r = 255 / 255;
+ light.lightColor.g = 157 / 255;
+ light.lightColor.b = 5 / 255;
+ light.intensity = 100;
+ light.range = 500;
+ light.outerAngle = 110;
+ light.innerAngle = 30;
+ scene.addChild(spotLight);
+
+ let GUIHelp = new dat.GUI();
+ GUIHelp.addFolder('Direct Light');
+ GUIHelp.add(spotLight, 'x', -180, 180, 1);
+ GUIHelp.add(spotLight, 'y', -180, 180, 1);
+ GUIHelp.add(spotLight, 'z', -180, 180, 1);
+ GUIHelp.add(spotLight, 'rotationX', -180, 180, 1);
+ GUIHelp.add(spotLight, 'rotationY', -180, 180, 1);
+ GUIHelp.add(spotLight, 'rotationZ', -180, 180, 1);
+ GUIHelp.addColor({ color: Object.values(light.lightColor).map((v) => v * 255) }, 'color').onChange((v) => {
+ light.lightColor.copyFromArray(v);
+ });
+ GUIHelp.add(light, 'intensity', 0, 200, 1);
+ GUIHelp.add(light, 'range', 100, 1000, 1);
+ GUIHelp.add(light, 'outerAngle', 0, 180, 1);
+ GUIHelp.add(light, 'innerAngle', 0, 100, 1);
+ }
+
+ let mat = new LitMaterial();
+ mat.baseMap = Engine3D.res.grayTexture;
+
+ let floor = new Object3D();
+ let mr = floor.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(2000, 1, 2000);
+ mr.material = mat;
+ this.scene.addChild(floor);
+
+ let box = new BoxGeometry(1, 1, 1);
+ let wall_w = new Object3D();
+ wall_w.localScale = new Vector3(500, 100, 10);
+ wall_w.localPosition = new Vector3(0, 50, 0);
+ let mrw = wall_w.addComponent(MeshRenderer);
+ mrw.geometry = box;
+ mrw.material = mat;
+ this.scene.addChild(wall_w);
+
+ let wall_a = new Object3D();
+ wall_a.localScale = new Vector3(10, 100, 500);
+ wall_a.localPosition = new Vector3(250, 50, 0);
+ let mra = wall_a.addComponent(MeshRenderer);
+ mra.geometry = box;
+ mra.material = mat;
+ this.scene.addChild(wall_a);
+
+ let wall_d = new Object3D();
+ wall_d.localScale = new Vector3(10, 100, 500);
+ wall_d.localPosition = new Vector3(-250, 50, 0);
+ let mrd = wall_d.addComponent(MeshRenderer);
+ mrd.geometry = box;
+ mrd.material = mat;
+ this.scene.addChild(wall_d);
+ }
+}
+
+new Sample_Light().run();
diff --git a/docs/public/demos/graphics/shadow_bias.ts b/docs/public/demos/graphics/shadow_bias.ts
new file mode 100644
index 00000000..64388d24
--- /dev/null
+++ b/docs/public/demos/graphics/shadow_bias.ts
@@ -0,0 +1,59 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, Vector3, AtmosphericComponent, View3D, LitMaterial, BoxGeometry, MeshRenderer, UnLitMaterial, SphereGeometry, DirectLight, PointLight, SpotLight, HoverCameraController, PlaneGeometry, Color } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+// shadow setting
+Engine3D.setting.shadow.autoUpdate = true;
+Engine3D.setting.shadow.debug = false;
+Engine3D.setting.shadow.shadowBound = 100;
+Engine3D.setting.shadow.shadowBias = 0.01;
+
+await Engine3D.init({
+ canvasConfig: { devicePixelRatio: 1 }
+});
+let scene3D: Scene3D = new Scene3D();
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+let controller = cameraObj.addComponent(HoverCameraController);
+controller.setCamera(0, -45, 100, new Vector3(0, 0, 0));
+scene3D.addChild(cameraObj);
+
+{
+ let obj = new Object3D();
+ let light = obj.addComponent(DirectLight);
+ scene3D.addChild(obj);
+ obj.rotationX = 200;
+ obj.rotationY = 135;
+ obj.rotationZ = 170;
+ light.intensity = 10;
+ // enable light shadow
+ light.castShadow = true;
+}
+// create a box as shadow source
+{
+ let castShadowObj = new Object3D();
+ castShadowObj.y = 5;
+ let mr = castShadowObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(10, 10, 10);
+ mr.material = new LitMaterial();
+ mr.material.baseColor = new Color(1, 0, 0);
+ mr.castShadow = true;
+ scene3D.addChild(castShadowObj);
+}
+// create a plane to receive shadow
+{
+ let receiveShadowObj = new Object3D();
+ let mr = receiveShadowObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(2000, 1, 2000);
+ mr.material = new LitMaterial();
+ scene3D.addChild(receiveShadowObj);
+}
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
+
+const GUIHelp = new dat.GUI();
+GUIHelp.add(Engine3D.setting.shadow, 'shadowBias', 0, 0.1, 0.0001);
diff --git a/docs/public/demos/graphics/shadow_csm.ts b/docs/public/demos/graphics/shadow_csm.ts
new file mode 100644
index 00000000..57c9e1be
--- /dev/null
+++ b/docs/public/demos/graphics/shadow_csm.ts
@@ -0,0 +1,158 @@
+import { Scene3D, HoverCameraController, Engine3D, AtmosphericComponent, Object3D, Camera3D, Vector3, View3D, DirectLight, KelvinUtil, LitMaterial, MeshRenderer, BoxGeometry, CameraUtil, SphereGeometry, Color, Object3DUtil, BlendMode } from '@orillusion/core';
+import * as dat from 'dat.gui';
+import { Graphic3D } from '@orillusion/graphic';
+
+//sample of csm
+class Sample_CSM {
+ scene: Scene3D;
+ view: View3D;
+ light: DirectLight;
+ boxRenderer: MeshRenderer;
+ viewCamera: Camera3D;
+ GUIHelp: dat.GUI;
+ graphic3D: Graphic3D;
+ async run() {
+ Engine3D.setting.shadow.autoUpdate = true;
+ Engine3D.setting.shadow.shadowSize = 2048;
+ Engine3D.setting.shadow.shadowBound = 512;
+ Engine3D.setting.shadow.shadowBias = 0.01;
+
+ await Engine3D.init({
+ renderLoop: () => {
+ this.loop();
+ }
+ });
+ this.GUIHelp = new dat.GUI();
+
+ this.scene = new Scene3D();
+ let sky = this.scene.addComponent(AtmosphericComponent);
+
+ // init camera3D
+ let mainCamera = CameraUtil.createCamera3D(undefined, this.scene);
+ mainCamera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ //set camera data
+ mainCamera.object3D.z = -15;
+ mainCamera.object3D.addComponent(HoverCameraController).setCamera(-15, -35, 200);
+
+ sky.relativeTransform = this.initLight('mainLight', 3, 45);
+ this.initLight('subLight', 2, 10);
+ this.initScene();
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ this.view = view;
+ this.viewCamera = mainCamera;
+
+ this.graphic3D = new Graphic3D();
+ this.scene.addChild(this.graphic3D);
+
+ mainCamera.enableCSM = true;
+
+ let f = this.GUIHelp.addFolder('CSM');
+ f.add(mainCamera, 'enableCSM');
+ f.add(Engine3D.setting.shadow, 'csmScatteringExp', 0.5, 1.0, 0.01);
+ f.add(Engine3D.setting.shadow, 'csmMargin', 0.01, 0.5, 0.01);
+ f.add(Engine3D.setting.shadow, 'csmAreaScale', 0.1, 1, 0.01);
+ f.open();
+ Engine3D.startRenderView(view);
+ }
+
+ // create direction light
+ private initLight(name: string, intensity: number, rotY: number) {
+ let lightObj3D = new Object3D();
+ lightObj3D.name = name;
+ lightObj3D.rotationX = 46;
+ lightObj3D.rotationY = 62 + rotY;
+ lightObj3D.rotationZ = 0;
+ let sunLight = lightObj3D.addComponent(DirectLight);
+ sunLight.intensity = intensity;
+ sunLight.lightColor = KelvinUtil.color_temperature_to_rgb(6553);
+ sunLight.castShadow = true;
+
+ this.renderDirLight(sunLight, true, name);
+ this.scene.addChild(lightObj3D);
+ this.light = sunLight;
+ return sunLight.transform;
+ }
+
+ public renderDirLight(light: DirectLight, open: boolean = true, name?: string) {
+ name ||= 'DirectLight';
+ let f = this.GUIHelp.addFolder(name);
+ f.add(light, 'enable');
+ f.open();
+ }
+
+ initScene() {
+ {
+ let obj = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(20, 100, 20);
+ mr.material = new LitMaterial();
+ this.scene.addChild(obj);
+ }
+
+ this.createBox();
+ {
+ let mat = new LitMaterial();
+ mat.baseMap = Engine3D.res.grayTexture;
+ let floor = new Object3D();
+ let mr = floor.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(10000, 1, 10000);
+ mr.material = mat;
+ this.scene.addChild(floor);
+ }
+
+ for (let i = 0; i < 1000; i++) {
+ let item = Object3DUtil.GetSingleSphere(4, 0.6, 0.4, 0.2);
+ let angle = (Math.PI * 4 * i) / 50;
+ item.x = Math.sin(angle) * (50 + i ** 1.4);
+ item.z = Math.cos(angle) * (50 + i ** 1.4);
+ item.y = 4;
+ let scale = (i ** 1.4 * 5 + 1000) / 1000;
+ item.scaleX = item.scaleZ = scale;
+ item.scaleY = scale * 5;
+ this.scene.addChild(item);
+ }
+ }
+
+ createBox() {
+ let box = new Object3D();
+ let geom = new BoxGeometry(1, 1, 1);
+ let material = new LitMaterial();
+ material.blendMode = BlendMode.NORMAL;
+ material.cullMode = 'front';
+ material.baseColor = new Color(0.2, 0.2, 0, 0.1);
+ let renderer = box.addComponent(MeshRenderer);
+ renderer.material = material;
+ renderer.geometry = geom;
+ this.boxRenderer = renderer;
+ }
+
+ private _shadowPos: Vector3 = new Vector3();
+ private _shadowCameraTarget: Vector3 = new Vector3();
+ loop() {
+ let viewCamera = this.viewCamera;
+ let light = this.light;
+ let view = this.view;
+ if (!this.boxRenderer || !this.viewCamera.csm) return;
+
+ let csmBound = this.viewCamera.csm.children[0].bound;
+ //update box
+ let size = this.viewCamera.getCSMShadowWorldExtents(0) * 2;
+ this.boxRenderer.object3D.scaleX = size;
+ this.boxRenderer.object3D.scaleY = size;
+ this.boxRenderer.object3D.scaleZ = this.viewCamera.csm.children[0].shadowCamera.far;
+
+ this.boxRenderer.object3D.localRotation = light.transform.localRotation;
+ this.boxRenderer.object3D.localPosition = csmBound.center;
+
+ // light direction
+ this._shadowPos.copy(light.direction).normalize(viewCamera.far);
+ csmBound.center.add(this._shadowPos, this._shadowCameraTarget);
+ csmBound.center.subtract(this._shadowPos, this._shadowPos);
+ this.graphic3D.drawLines('shadowLine', [this._shadowPos, this._shadowCameraTarget], new Color(1, 1, 0, 1));
+ }
+}
+
+new Sample_CSM().run();
diff --git a/docs/public/demos/graphics/shadow_dir.ts b/docs/public/demos/graphics/shadow_dir.ts
new file mode 100644
index 00000000..7bfae5e6
--- /dev/null
+++ b/docs/public/demos/graphics/shadow_dir.ts
@@ -0,0 +1,61 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, Vector3, AtmosphericComponent, View3D, LitMaterial, BoxGeometry, MeshRenderer, UnLitMaterial, SphereGeometry, DirectLight, PointLight, SpotLight, HoverCameraController, PlaneGeometry, Color } from '@orillusion/core';
+
+// shadow setting
+Engine3D.setting.shadow.autoUpdate = true;
+Engine3D.setting.shadow.shadowBound = 50;
+Engine3D.setting.shadow.shadowBias = 0.01;
+Engine3D.setting.shadow.type = 'HARD';
+
+await Engine3D.init({
+ canvasConfig: { devicePixelRatio: 1 }
+});
+let scene3D: Scene3D = new Scene3D();
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+let controller = cameraObj.addComponent(HoverCameraController);
+controller.setCamera(-45, -45, 100, new Vector3(0, 0, 0));
+scene3D.addChild(cameraObj);
+
+//DirectLight
+{
+ let obj = new Object3D();
+ obj.rotationX = 45;
+ obj.rotationY = 0;
+ obj.rotationZ = 0;
+ let light = obj.addComponent(DirectLight);
+ scene3D.addChild(obj);
+ // enable light shadow
+ light.castShadow = true;
+ light.intensity = 30;
+ scene3D.addChild(obj);
+}
+
+// create a box as shadow source
+{
+ let castShadowObj = new Object3D();
+ castShadowObj.y = 5;
+ castShadowObj.rotationY = 45;
+ let mr = castShadowObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(10, 10, 10);
+ mr.material = new LitMaterial();
+ mr.material.baseColor = new Color(1, 0, 0);
+ mr.castShadow = true;
+ scene3D.addChild(castShadowObj);
+}
+
+// create a plane to receive shadow
+{
+ let receiveShadowObj = new Object3D();
+ let mr = receiveShadowObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(2000, 1, 2000);
+ mr.material = new LitMaterial();
+ mr.receiveShadow = true;
+ scene3D.addChild(receiveShadowObj);
+}
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/graphics/shadow_point.ts b/docs/public/demos/graphics/shadow_point.ts
new file mode 100644
index 00000000..bfb267c3
--- /dev/null
+++ b/docs/public/demos/graphics/shadow_point.ts
@@ -0,0 +1,65 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, Vector3, AtmosphericComponent, View3D, LitMaterial, BoxGeometry, MeshRenderer, UnLitMaterial, SphereGeometry, DirectLight, PointLight, SpotLight, HoverCameraController, PlaneGeometry, Color } from '@orillusion/core';
+
+// shadow setting
+Engine3D.setting.shadow.autoUpdate = true;
+Engine3D.setting.shadow.shadowBound = 50;
+Engine3D.setting.shadow.pointShadowBias = 0.0001;
+Engine3D.setting.shadow.type = 'HARD';
+
+await Engine3D.init({
+ canvasConfig: { devicePixelRatio: 1 }
+});
+let scene3D: Scene3D = new Scene3D();
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+let controller = cameraObj.addComponent(HoverCameraController);
+controller.setCamera(0, -45, 150, new Vector3(0, 0, 0));
+scene3D.addChild(cameraObj);
+
+//PointLight
+{
+ let obj = new Object3D();
+ let light = obj.addComponent(PointLight);
+ scene3D.addChild(obj);
+ obj.x = -15;
+ obj.y = 30;
+ obj.z = -20;
+ obj.rotationX = 0;
+ obj.rotationY = 0;
+ obj.rotationZ = 0;
+ light.intensity = 15;
+ light.range = 100;
+ // enable light shadow
+ light.castShadow = true;
+ light.debug();
+ light.debugDraw(true);
+}
+
+// create a box as shadow source
+{
+ let castShadowObj = new Object3D();
+ castShadowObj.y = 5;
+ let mr = castShadowObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(10, 10, 10);
+ mr.material = new LitMaterial();
+ mr.material.baseColor = new Color(1, 0, 0);
+ mr.castShadow = true;
+ scene3D.addChild(castShadowObj);
+}
+
+// create a plane to receive shadow
+{
+ let receiveShadowObj = new Object3D();
+ let mr = receiveShadowObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(2000, 1, 2000);
+ mr.material = new LitMaterial();
+ mr.receiveShadow = true;
+ scene3D.addChild(receiveShadowObj);
+}
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/graphics/shadow_size.ts b/docs/public/demos/graphics/shadow_size.ts
new file mode 100644
index 00000000..4469a0d9
--- /dev/null
+++ b/docs/public/demos/graphics/shadow_size.ts
@@ -0,0 +1,87 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, Vector3, AtmosphericComponent, View3D, LitMaterial, BoxGeometry, MeshRenderer, UnLitMaterial, SphereGeometry, DirectLight, PointLight, SpotLight, HoverCameraController, PlaneGeometry, Color } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+// shadow setting
+Engine3D.setting.shadow.shadowBias = 0.01;
+Engine3D.setting.shadow.autoUpdate = true;
+Engine3D.setting.shadow.shadowBound = sessionStorage._shadowBound || 100;
+Engine3D.setting.shadow.type = 'HARD';
+Engine3D.setting.shadow.shadowSize = sessionStorage._shadowSize || 512;
+
+await Engine3D.init({
+ canvasConfig: { devicePixelRatio: 1 }
+});
+let scene3D: Scene3D = new Scene3D();
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+let controller = cameraObj.addComponent(HoverCameraController);
+controller.setCamera(-45, -45, 50, new Vector3(0, 0, 0));
+scene3D.addChild(cameraObj);
+
+//DirectLight
+{
+ let obj = new Object3D();
+ obj.rotationX = 45;
+ obj.rotationY = 0;
+ obj.rotationZ = 0;
+ let light = obj.addComponent(DirectLight);
+ scene3D.addChild(obj);
+ // enable light shadow
+ light.castShadow = true;
+ light.intensity = 30;
+ scene3D.addChild(obj);
+}
+
+// create a box as shadow source
+{
+ let castShadowObj = new Object3D();
+ castShadowObj.y = 5;
+ castShadowObj.rotationY = 45;
+ let mr = castShadowObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(10, 10, 10);
+ mr.material = new LitMaterial();
+ mr.material.baseColor = new Color(1, 0, 0);
+ mr.castShadow = true;
+ scene3D.addChild(castShadowObj);
+}
+
+// create a box as shadow source
+{
+ let castShadowObj = new Object3D();
+ castShadowObj.y = 5;
+ castShadowObj.rotationY = 45;
+ castShadowObj.x = 30;
+ let mr = castShadowObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(10, 10, 10);
+ mr.material = new LitMaterial();
+ mr.material.baseColor = new Color(0, 1, 0);
+ mr.castShadow = true;
+ scene3D.addChild(castShadowObj);
+}
+
+// create a plane to receive shadow
+{
+ let receiveShadowObj = new Object3D();
+ let mr = receiveShadowObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(2000, 1, 2000);
+ mr.material = new LitMaterial();
+ mr.receiveShadow = true;
+ scene3D.addChild(receiveShadowObj);
+}
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
+
+let gui = new dat.GUI();
+gui.add(Engine3D.setting.shadow, 'shadowBound', [30, 50, 100, 500]).onChange((v) => {
+ sessionStorage._shadowBound = v;
+ location.reload();
+});
+gui.add(Engine3D.setting.shadow, 'shadowSize', [128, 256, 512, 1024, 2048]).onChange((v) => {
+ sessionStorage._shadowSize = v;
+ location.reload();
+});
diff --git a/docs/public/demos/graphics/shadow_size_point.ts b/docs/public/demos/graphics/shadow_size_point.ts
new file mode 100644
index 00000000..eda14aa7
--- /dev/null
+++ b/docs/public/demos/graphics/shadow_size_point.ts
@@ -0,0 +1,89 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, Vector3, AtmosphericComponent, View3D, LitMaterial, BoxGeometry, MeshRenderer, UnLitMaterial, SphereGeometry, DirectLight, PointLight, SpotLight, HoverCameraController, PlaneGeometry, Color } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+// shadow setting
+Engine3D.setting.shadow.autoUpdate = true;
+Engine3D.setting.shadow.shadowBound = sessionStorage._shadowBound || 100;
+Engine3D.setting.shadow.type = 'HARD';
+Engine3D.setting.shadow.pointShadowSize = sessionStorage._pointShadowSize || 512;
+Engine3D.setting.shadow.pointShadowBias = 0.0001;
+
+await Engine3D.init({
+ canvasConfig: { devicePixelRatio: 1 }
+});
+let scene3D: Scene3D = new Scene3D();
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+let controller = cameraObj.addComponent(HoverCameraController);
+controller.setCamera(-45, -45, 50, new Vector3(0, 0, 0));
+scene3D.addChild(cameraObj);
+
+//PointLight
+{
+ let obj = new Object3D();
+ obj.y = 50;
+ obj.z = -30;
+ obj.rotationX = 45;
+ obj.rotationY = 0;
+ obj.rotationZ = 0;
+ let light = obj.addComponent(PointLight);
+ scene3D.addChild(obj);
+ // enable light shadow
+ light.castShadow = true;
+ light.intensity = 30;
+ scene3D.addChild(obj);
+}
+
+// create a box as shadow source
+{
+ let castShadowObj = new Object3D();
+ castShadowObj.y = 5;
+ castShadowObj.rotationY = 45;
+ let mr = castShadowObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(10, 10, 10);
+ mr.material = new LitMaterial();
+ mr.material.baseColor = new Color(1, 0, 0);
+ mr.castShadow = true;
+ scene3D.addChild(castShadowObj);
+}
+
+// create a box as shadow source
+{
+ let castShadowObj = new Object3D();
+ castShadowObj.y = 5;
+ castShadowObj.rotationY = 45;
+ castShadowObj.x = 30;
+ let mr = castShadowObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(10, 10, 10);
+ mr.material = new LitMaterial();
+ mr.material.baseColor = new Color(0, 1, 0);
+ mr.castShadow = true;
+ scene3D.addChild(castShadowObj);
+}
+
+// create a plane to receive shadow
+{
+ let receiveShadowObj = new Object3D();
+ let mr = receiveShadowObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(2000, 1, 2000);
+ mr.material = new LitMaterial();
+ mr.receiveShadow = true;
+ scene3D.addChild(receiveShadowObj);
+}
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
+
+let gui = new dat.GUI();
+gui.add(Engine3D.setting.shadow, 'shadowBound', [20, 50, 100, 500]).onChange((v) => {
+ sessionStorage._shadowBound = v;
+ location.reload();
+});
+gui.add(Engine3D.setting.shadow, 'pointShadowSize', [128, 256, 512, 1024, 2048]).onChange((v) => {
+ sessionStorage._pointShadowSize = v;
+ location.reload();
+});
diff --git a/docs/public/demos/graphics/shadow_spot.ts b/docs/public/demos/graphics/shadow_spot.ts
new file mode 100644
index 00000000..3609ba98
--- /dev/null
+++ b/docs/public/demos/graphics/shadow_spot.ts
@@ -0,0 +1,65 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, Vector3, AtmosphericComponent, View3D, LitMaterial, BoxGeometry, MeshRenderer, UnLitMaterial, SphereGeometry, DirectLight, PointLight, SpotLight, HoverCameraController, PlaneGeometry, Color } from '@orillusion/core';
+
+// shadow setting
+Engine3D.setting.shadow.autoUpdate = true;
+Engine3D.setting.shadow.shadowBound = 50;
+Engine3D.setting.shadow.pointShadowBias = 0.0001;
+Engine3D.setting.shadow.type = 'HARD';
+
+await Engine3D.init({
+ canvasConfig: { devicePixelRatio: 1 }
+});
+let scene3D: Scene3D = new Scene3D();
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+let controller = cameraObj.addComponent(HoverCameraController);
+controller.setCamera(0, -45, 150, new Vector3(0, 0, 0));
+scene3D.addChild(cameraObj);
+
+//SpotLight
+{
+ let obj = new Object3D();
+ let light = obj.addComponent(SpotLight);
+ scene3D.addChild(obj);
+ obj.x = -30;
+ obj.y = 15;
+ obj.z = 40;
+ obj.rotationX = 0;
+ obj.rotationY = 145;
+ obj.rotationZ = 0;
+ light.intensity = 50;
+ light.range = 150;
+ light.outerAngle = 110;
+ light.innerAngle = 30;
+ // enable light shadow
+ light.castShadow = true;
+}
+
+// create a box as shadow source
+{
+ let castShadowObj = new Object3D();
+ castShadowObj.y = 5;
+ let mr = castShadowObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(10, 10, 10);
+ mr.material = new LitMaterial();
+ mr.material.baseColor = new Color(1, 0, 0);
+ mr.castShadow = true;
+ scene3D.addChild(castShadowObj);
+}
+
+// create a plane to receive shadow
+{
+ let receiveShadowObj = new Object3D();
+ let mr = receiveShadowObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(2000, 1, 2000);
+ mr.material = new LitMaterial();
+ mr.receiveShadow = true;
+ scene3D.addChild(receiveShadowObj);
+}
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/graphics/shadow_type.ts b/docs/public/demos/graphics/shadow_type.ts
new file mode 100644
index 00000000..54587ca1
--- /dev/null
+++ b/docs/public/demos/graphics/shadow_type.ts
@@ -0,0 +1,70 @@
+import { Color } from '@orillusion/core';
+import { Engine3D, Scene3D, Object3D, Camera3D, Vector3, AtmosphericComponent, View3D, LitMaterial, BoxGeometry, MeshRenderer, UnLitMaterial, SphereGeometry, DirectLight, PointLight, SpotLight, HoverCameraController, PlaneGeometry } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+// shadow setting
+Engine3D.setting.shadow.autoUpdate = true;
+Engine3D.setting.shadow.shadowBound = 20;
+Engine3D.setting.shadow.pointShadowBias = 0.0001;
+Engine3D.setting.shadow.type = sessionStorage._shadow_type || 'HARD';
+
+await Engine3D.init({
+ canvasConfig: { devicePixelRatio: 1 }
+});
+let scene3D: Scene3D = new Scene3D();
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+let controller = cameraObj.addComponent(HoverCameraController);
+controller.setCamera(0, -45, 50, new Vector3(0, 0, 0));
+scene3D.addChild(cameraObj);
+
+//PointLight
+{
+ let obj = new Object3D();
+ let light = obj.addComponent(PointLight);
+ scene3D.addChild(obj);
+ obj.x = -30;
+ obj.y = 30;
+ obj.z = -30;
+ obj.rotationX = 0;
+ obj.rotationY = 0;
+ obj.rotationZ = 0;
+ light.intensity = 15;
+ light.range = 100;
+ light.castShadow = true;
+}
+
+// create a box as shadow source
+{
+ let castShadowObj = new Object3D();
+ castShadowObj.y = 5;
+ let mr = castShadowObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(10, 10, 10);
+ mr.material = new LitMaterial();
+ mr.material.baseColor = new Color(1, 0, 0);
+ mr.castShadow = true;
+ scene3D.addChild(castShadowObj);
+}
+
+// create a plane to receive shadow
+{
+ let receiveShadowObj = new Object3D();
+ let mr = receiveShadowObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(2000, 1, 2000);
+ mr.material = new LitMaterial();
+ mr.receiveShadow = true;
+ scene3D.addChild(receiveShadowObj);
+}
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
+
+let gui = new dat.GUI();
+gui.add(Engine3D.setting.shadow, 'type', ['PCF', 'SOFT', 'HARD']).onChange((v) => {
+ sessionStorage._shadow_type = v;
+ location.reload();
+});
diff --git a/docs/public/demos/gui/button.ts b/docs/public/demos/gui/button.ts
new file mode 100644
index 00000000..70f08ce4
--- /dev/null
+++ b/docs/public/demos/gui/button.ts
@@ -0,0 +1,76 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, ViewPanel, UIButton, HoverCameraController, PointerEvent3D, View3D, AtmosphericComponent, UITextField, Color, TextAnchor, WorldPanel, UIPanel, GPUCullMode } from '@orillusion/core';
+
+class Sample_button {
+ async run() {
+ // initializa engine
+ await Engine3D.init();
+ // create new scene as root node
+ let scene3D: Scene3D = new Scene3D();
+ scene3D.addComponent(AtmosphericComponent);
+ // create camera
+ let cameraObj: Object3D = new Object3D();
+ let camera = cameraObj.addComponent(Camera3D);
+ // adjust camera view
+ camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ // set camera controller
+ let controller = cameraObj.addComponent(HoverCameraController);
+ controller.setCamera(0, -20, 30);
+ // add camera node
+ scene3D.addChild(cameraObj);
+
+ let view = new View3D();
+ view.scene = scene3D;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+
+ // create panel root
+ let panelRoot: Object3D = new Object3D();
+ let panel: UIPanel = panelRoot.addComponent(WorldPanel);
+ panel.cullMode = GPUCullMode.none;
+ panelRoot.localScale.set(0.1, 0.1, 0.1);
+ let canvas = view.enableUICanvas();
+ canvas.addChild(panelRoot);
+
+ // create button node
+ let buttonQuad = new Object3D();
+ panelRoot.addChild(buttonQuad);
+ // create button component
+ let button: UIButton = buttonQuad.addComponent(UIButton);
+ // set button size
+ button.uiTransform.resize(180, 60);
+
+ // set button status
+ // load sprite resource
+ await Engine3D.res.loadAtlas('https://cdn.orillusion.com/atlas/UI_atlas.json');
+ button.normalSprite = Engine3D.res.getGUISprite('button-up');
+ button.downSprite = Engine3D.res.getGUISprite('button-down');
+ button.overSprite = Engine3D.res.getGUISprite('button-over');
+ button.disableSprite = Engine3D.res.getGUISprite('button-disable');
+
+ // add button text
+ // load font resource
+ await Engine3D.res.loadFont('https://cdn.orillusion.com/fnt/0.fnt');
+ let buttonLabel = buttonQuad.addComponent(UITextField);
+ buttonLabel.text = 'Click me';
+ buttonLabel.fontSize = 24;
+ buttonLabel.color = new Color(1, 0.8, 0.4);
+ buttonLabel.alignment = TextAnchor.MiddleCenter;
+
+ // add listener
+ buttonQuad.addEventListener(PointerEvent3D.PICK_CLICK_GUI, this.onClick, this);
+ buttonQuad.addEventListener(PointerEvent3D.PICK_OUT_GUI, this.onOut, this);
+ buttonQuad.addEventListener(PointerEvent3D.PICK_OVER_GUI, this.onOver, this);
+ buttonQuad.addEventListener(PointerEvent3D.PICK_DOWN_GUI, this.onDown, this);
+ }
+
+ private onClick() {}
+
+ private onOut() {}
+
+ private onOver() {}
+
+ private onDown() {
+ alert('clicked me!');
+ }
+}
+new Sample_button().run();
diff --git a/docs/public/demos/gui/canvas.ts b/docs/public/demos/gui/canvas.ts
new file mode 100644
index 00000000..e868cf11
--- /dev/null
+++ b/docs/public/demos/gui/canvas.ts
@@ -0,0 +1,66 @@
+import { Engine3D, Object3D, UIImage, ImageType, Color, UIPanel, ViewPanel, Scene3D, Vector2, UITextField, UIShadow, AtmosphericComponent, Camera3D, HoverCameraController, View3D } from '@orillusion/core';
+
+class Sample_UIMultiCanvas {
+ async run() {
+ Engine3D.setting.shadow.autoUpdate = true;
+
+ // initializa engine
+ await Engine3D.init();
+ // load fnt
+ await Engine3D.res.loadFont('https://cdn.orillusion.com/fnt/0.fnt');
+ // create new scene as root node
+ let scene3D: Scene3D = new Scene3D();
+ scene3D.addComponent(AtmosphericComponent);
+ // create camera
+ let cameraObj: Object3D = new Object3D();
+ let camera = cameraObj.addComponent(Camera3D);
+ // adjust camera view
+ camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ // set camera controller
+ let controller = cameraObj.addComponent(HoverCameraController);
+ controller.setCamera(0, -20, 50);
+ // add camera node
+ scene3D.addChild(cameraObj);
+
+ let view = new View3D();
+ view.scene = scene3D;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+
+ let total: number = 4;
+ for (let i = 0; i < total; i++) {
+ let size: Vector2 = new Vector2();
+ size.x = 500 - i * 100;
+ size.y = 400 - i * 100;
+ this.createPanel(scene3D, i, size);
+ }
+ }
+
+ private createPanel(scene: Scene3D, index: number, size: Vector2): UIPanel {
+ let panelRoot: Object3D = new Object3D();
+ // enable ui canvas at index
+ let canvas = scene.view.enableUICanvas(index);
+ let panel = panelRoot.addComponent(ViewPanel);
+ canvas.addChild(panel.object3D);
+ // create image
+ let obj3D = new Object3D();
+ panelRoot.addChild(obj3D);
+ let image = obj3D.addComponent(UIImage);
+ image.isShadowless = true;
+ image.imageType = ImageType.Sliced;
+ image.uiTransform.resize(size.x, size.y);
+ image.color = Color.random();
+
+ //text
+ let text = obj3D.addComponent(UITextField);
+ text.text = 'Canvas index: ' + index;
+ text.fontSize = 24;
+
+ //shadow
+ let shadow = obj3D.addComponent(UIShadow);
+ shadow.shadowOffset.multiplyScaler(0.4);
+ return panel;
+ }
+}
+
+new Sample_UIMultiCanvas().run();
diff --git a/docs/public/demos/gui/demo.ts b/docs/public/demos/gui/demo.ts
new file mode 100644
index 00000000..97410ad1
--- /dev/null
+++ b/docs/public/demos/gui/demo.ts
@@ -0,0 +1,281 @@
+import { AtmosphericComponent, BillboardType, CEvent, CEventDispatcher, Camera3D, Color, DirectLight, Engine3D, HoverCameraController, ImageType, Object3D, Object3DUtil, PointerEvent3D, Scene3D, TextAnchor, Time, UIImage, UIInteractive, UITextField, Vector3, View3D, WorldPanel, clamp } from '@orillusion/core';
+
+class GUIPanelPOI {
+ private readonly alpha = 0.8;
+ private objUI: Object3D;
+ private index: number;
+ private _originColor: Color = new Color();
+ private _remainTime: number = -1;
+ private _backImage: UIImage;
+ private _outColor = new Color(0, 0.5, 0.75, this.alpha);
+
+ constructor(obj, index: number) {
+ this.objUI = obj;
+ this.index = index;
+ this.displayUIDetail();
+ }
+
+ update(delta: number): void {
+ if (this._remainTime > 0) {
+ this._remainTime -= delta;
+ let progress = clamp(this._remainTime, 0, 500);
+ progress = 1 - progress / 500;
+ let color = this._backImage.color;
+ color.r = this._originColor.r * progress + (1.0 - progress) * 0.2;
+ color.g = this._originColor.g * progress + (1.0 - progress) * 0.2;
+ color.b = this._originColor.b * progress + (1.0 - progress) * 0.2;
+ this._backImage.color = color;
+ }
+ this.updateFrame();
+ }
+
+ private lastIndex: number = -1;
+ private frame: number = Math.floor(Math.random() * 10000);
+ private frameStart = 65; //65~77
+ private frameCount = 13;
+ private _icon: UIImage;
+
+ private _frameSpeed = 0.05 + 0.1 * Math.random();
+
+ updateFrame() {
+ this.frame++;
+ let newIndex = Math.floor(this.frame * this._frameSpeed) % this.frameCount;
+ if (newIndex != this.lastIndex) {
+ this.lastIndex = newIndex;
+ let frameKey = (this.lastIndex + this.frameStart).toString().padStart(5, '0');
+ this._icon.sprite = Engine3D.res.getGUISprite(frameKey);
+ }
+ }
+
+ private displayUIDetail(): void {
+ let uiChild = this.objUI.addChild(new Object3D()) as Object3D;
+
+ let r = Math.random() * 0.25 + 0.2;
+ let b = Math.random() * 0.25 + 0.2;
+ let g = Math.random() * 0.25 + 0.2;
+ this._originColor.setTo(r, g, b, this.alpha);
+ //back
+ this._backImage = this.addImage(uiChild, ' ', 200, 120, r, g, b, this.alpha);
+ this._backImage.uiTransform.x = 100;
+ this._backImage.uiTransform.y = -60;
+
+ uiChild.addEventListener(
+ PointerEvent3D.PICK_CLICK_GUI,
+ () => {
+ this._remainTime = 500;
+ sampleUIPanelClick.data = this.objUI;
+ sampleUIPanelDispatcher.dispatchEvent(sampleUIPanelClick);
+ },
+ this
+ );
+
+ uiChild.addEventListener(
+ PointerEvent3D.PICK_OVER_GUI,
+ () => {
+ this._backImage.color = this._outColor;
+ },
+ this
+ );
+
+ uiChild.addEventListener(
+ PointerEvent3D.PICK_OUT_GUI,
+ () => {
+ this._backImage.color = this._originColor;
+ },
+ this
+ );
+
+ let button = uiChild.addComponent(UIInteractive);
+ button.interactive = true;
+
+ //icon
+ {
+ let iconNode = uiChild.addChild(new Object3D()) as Object3D;
+ let icon = this.addImage(iconNode, '', 100, 100, 1, 1, 1);
+ icon.uiTransform.x = -75;
+ icon.uiTransform.y = 25;
+ this._icon = icon;
+ this.updateFrame();
+ }
+
+ //text
+ {
+ let textChild = this.objUI.addChild(new Object3D()) as Object3D;
+ let text = textChild.addComponent(UITextField);
+ text.uiTransform.resize(120, 60);
+ text.uiTransform.x = 110;
+ text.uiTransform.y = -48;
+ text.alignment = TextAnchor.UpperLeft;
+ text.text = 'Orilussion';
+ text.fontSize = 22;
+ text.color = new Color(0.9, 0.9, 0.9, 1.0);
+ }
+
+ //text
+ {
+ let textChild = this.objUI.addChild(new Object3D()) as Object3D;
+ let text = textChild.addComponent(UITextField);
+ text.uiTransform.resize(140, 60);
+ text.uiTransform.x = 110;
+ text.uiTransform.y = -100;
+ text.alignment = TextAnchor.UpperLeft;
+ text.text = '次时代WebGPU 3D Engine';
+ text.fontSize = 18;
+ text.color = new Color(0.8, 0.8, 0.8, 1.0);
+ }
+ }
+
+ private addImage(obj: Object3D, texture: string, w: number, h: number, r: number, g: number, b: number, a: number = 1): UIImage {
+ let image = obj.addComponent(UIImage);
+ image.sprite = Engine3D.res.getGUISprite(texture);
+ image.uiTransform.resize(w, h);
+ image.imageType = ImageType.Sliced;
+ image.color.setTo(r, g, b, a);
+ return image;
+ }
+}
+class GUIPanelBinder {
+ objUI: Object3D;
+ panel: GUIPanelPOI;
+ ball: Object3D;
+
+ constructor(ball: Object3D, ui: Object3D, index: number) {
+ this.ball = ball;
+ this.objUI = ui;
+ this.objUI.name = 'panel ' + index;
+ this.objUI.scaleX = this.objUI.scaleY = this.objUI.scaleZ = 0.1;
+ this.panel = new GUIPanelPOI(this.objUI, index);
+ }
+
+ update(delta: number) {
+ this.objUI.localPosition = this.ball.transform.worldPosition;
+ this.panel.update(delta);
+ }
+}
+
+let sampleUIPanelClick: CEvent = new CEvent('ClickUIPanel');
+let sampleUIPanelDispatcher: CEventDispatcher = new CEventDispatcher();
+
+class Sample_UIMultiPanel {
+ camera: Camera3D;
+ scene: Scene3D;
+ view: View3D;
+
+ async run() {
+ Engine3D.setting.shadow.autoUpdate = true;
+ Engine3D.setting.shadow.shadowBias = 0.01;
+ Engine3D.setting.shadow.shadowBound = 200;
+
+ await Engine3D.init({
+ renderLoop: () => {
+ this.renderUpdate();
+ }
+ });
+
+ // create new scene as root node
+ let scene3D: Scene3D = new Scene3D();
+ scene3D.addComponent(AtmosphericComponent);
+ // create camera
+ let cameraObj: Object3D = new Object3D();
+ let camera = cameraObj.addComponent(Camera3D);
+ // adjust camera view
+ camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ // set camera controller
+ let controller = cameraObj.addComponent(HoverCameraController);
+ controller.setCamera(0, -10, 150, new Vector3(0, 15, 0));
+ // add camera node
+ scene3D.addChild(cameraObj);
+ // create light
+ let light: Object3D = new Object3D();
+ // add direct light component
+ let component: DirectLight = light.addComponent(DirectLight);
+ // adjust lighting
+ light.rotationX = 21;
+ light.rotationY = 120;
+ component.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+ component.intensity = 5;
+ component.castShadow = true;
+ // add light object
+ scene3D.addChild(light);
+
+ let view = new View3D();
+ view.scene = scene3D;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+ this.scene = scene3D;
+ this.camera = view.camera;
+ this.view = view;
+
+ let model = await Engine3D.res.loadGltf('https://cdn.orillusion.com/gltfs/wukong/wukong.gltf');
+ model.localScale = new Vector3(1, 1, 1).multiplyScalar(50);
+
+ this.scene.addChild(model);
+ this.scene.addChild(Object3DUtil.GetSingleCube(400, 1, 400, 0.2, 0.2, 0.2));
+
+ await Engine3D.res.loadFont('https://cdn.orillusion.com/fnt/0.fnt');
+ await Engine3D.res.loadAtlas('https://cdn.orillusion.com/atlas/Sheet_atlas.json');
+
+ this.makeUIPanelList();
+ }
+
+ private nodeList: GUIPanelBinder[] = [];
+ private bindTarget3DRoot: Object3D;
+
+ private makeUIPanelList(): void {
+ this.bindTarget3DRoot = new Object3D();
+ this.bindTarget3DRoot.y = 50;
+ this.scene.addChild(this.bindTarget3DRoot);
+ let canvas = this.view.enableUICanvas();
+
+ for (let i = 0; i < 50; i++) {
+ //panel
+ let panelRoot: Object3D = new Object3D();
+ let panel = panelRoot.addComponent(WorldPanel);
+ panel.billboard = BillboardType.BillboardXYZ;
+ panel.needSortOnCameraZ = true;
+ canvas.addChild(panel.object3D);
+
+ //random position
+ let angle = Math.PI * 2 * Math.random();
+ let pos = new Vector3();
+ pos.set(Math.sin(angle), Math.cos(angle), (Math.random() - 0.5) * 2);
+ pos.multiplyScalar(50 * Math.sqrt(Math.random() + 0.25));
+
+ let ball = this.bindTarget3DRoot.addChild(new Object3D()) as Object3D;
+ ball.localPosition = pos;
+
+ //binder
+ let node = new GUIPanelBinder(ball, panelRoot, i);
+ this.nodeList.push(node);
+ }
+
+ sampleUIPanelDispatcher.addEventListener(
+ sampleUIPanelClick.type,
+ (e) => {
+ let target = e.data as Object3D;
+ let targetPos = this.view.camera.worldToScreenPoint(target.transform.worldPosition);
+ let orginPos = this.view.camera.worldToScreenPoint(new Vector3());
+ this.isSpeedAdd = targetPos.x > orginPos.x ? 1 : -1;
+ this.speedAngle += 50;
+ console.log(this.isSpeedAdd);
+ },
+ this
+ );
+ }
+ private speedAngle: number = 1;
+ private isSpeedAdd: number = 1;
+
+ renderUpdate() {
+ if (this.bindTarget3DRoot) {
+ this.speedAngle -= 0.2;
+ this.speedAngle = Math.max(this.speedAngle, 1);
+ this.bindTarget3DRoot.rotationY += 0.01 * this.speedAngle * this.isSpeedAdd;
+
+ for (let binder of this.nodeList) {
+ binder.update(Time.delta);
+ }
+ }
+ }
+}
+
+new Sample_UIMultiPanel().run();
diff --git a/docs/public/demos/gui/image.ts b/docs/public/demos/gui/image.ts
new file mode 100644
index 00000000..ec73fb66
--- /dev/null
+++ b/docs/public/demos/gui/image.ts
@@ -0,0 +1,51 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, View3D, ViewPanel, UIImage, HoverCameraController, Color, ImageType, AtmosphericComponent, BitmapTexture2D, makeAloneSprite, WorldPanel, GPUCullMode, UIPanel } from '@orillusion/core';
+
+class Sample_Image {
+ async run() {
+ // initializa engine
+ await Engine3D.init();
+ // create new scene as root node
+ let scene3D: Scene3D = new Scene3D();
+ scene3D.addComponent(AtmosphericComponent);
+ // create camera
+ let cameraObj: Object3D = new Object3D();
+ let camera = cameraObj.addComponent(Camera3D);
+ // adjust camera view
+ camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ // set camera controller
+ let controller = cameraObj.addComponent(HoverCameraController);
+ controller.setCamera(0, -20, 100);
+ // add camera node
+ scene3D.addChild(cameraObj);
+
+ let view = new View3D();
+ view.scene = scene3D;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+
+ // create panel root
+ let panelRoot: Object3D = new Object3D();
+ let panel: UIPanel = panelRoot.addComponent(WorldPanel);
+ panel.cullMode = GPUCullMode.none;
+ panelRoot.localScale.set(0.1, 0.1, 0.1);
+ let canvas = view.enableUICanvas();
+ canvas.addChild(panelRoot);
+
+ // load a BitmapTexture2D
+ let bitmapTexture2D = new BitmapTexture2D();
+ bitmapTexture2D.flipY = true;
+ await bitmapTexture2D.load('https://cdn.orillusion.com/images/webgpu.png');
+
+ // create image node
+ let imageQuad = new Object3D();
+ panelRoot.addChild(imageQuad);
+ // create image component
+ let image: UIImage = imageQuad.addComponent(UIImage);
+ // set image size
+ image.uiTransform.resize(50, 50);
+ // set image source
+ image.sprite = makeAloneSprite('webgpu', bitmapTexture2D);
+ }
+}
+
+new Sample_Image().run();
diff --git a/docs/public/demos/gui/imageGroup.ts b/docs/public/demos/gui/imageGroup.ts
new file mode 100644
index 00000000..bb5e78e1
--- /dev/null
+++ b/docs/public/demos/gui/imageGroup.ts
@@ -0,0 +1,93 @@
+import { AtmosphericComponent, BitmapTexture2D, Camera3D, Engine3D, HoverCameraController, Object3D, Scene3D, Texture, UIImageGroup, View3D, ViewPanel, makeAloneSprite } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_UIImageGroup {
+ scene: Scene3D;
+ imageGroup: UIImageGroup;
+
+ async run() {
+ Engine3D.setting.shadow.autoUpdate = true;
+ // initializa engine
+ await Engine3D.init();
+ // create new scene as root node
+ let scene3D: Scene3D = new Scene3D();
+ scene3D.addComponent(AtmosphericComponent);
+ // create camera
+ let cameraObj: Object3D = new Object3D();
+ let camera = cameraObj.addComponent(Camera3D);
+ // adjust camera view
+ camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ // set camera controller
+ let controller = cameraObj.addComponent(HoverCameraController);
+ controller.setCamera(0, -20, 30);
+ // add camera node
+ scene3D.addChild(cameraObj);
+
+ let view = new View3D();
+ view.scene = scene3D;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+
+ this.scene = scene3D;
+
+ await this.createImageGroup();
+ }
+
+ async createImageGroup() {
+ // enable ui canvas
+ let canvas = this.scene.view.enableUICanvas();
+ //create UI root
+ let panelRoot: Object3D = new Object3D();
+ //create panel
+ let panel = panelRoot.addComponent(ViewPanel);
+ canvas.addChild(panel.object3D);
+
+ let bitmapTexture2D = new BitmapTexture2D();
+ bitmapTexture2D.flipY = true;
+ await bitmapTexture2D.load('https://cdn.orillusion.com/images/webgpu.png');
+
+ let uiNode = new Object3D();
+ panelRoot.addChild(uiNode);
+ //create sprite sheet list
+ this.imageGroup = this.createSpriteSheets(uiNode, bitmapTexture2D);
+ this.createGUI();
+ }
+
+ private halfSize = 0;
+ createGUI() {
+ let GUIHelp = new dat.GUI();
+ let quat = this.imageGroup.getQuad(1);
+ let f = GUIHelp.addFolder('Position');
+ let pos = { x: quat.x, y: quat.y };
+ let action = () => this.imageGroup.setXY(1, pos.x, pos.y);
+ f.add(pos, 'x', -Engine3D.width / 2, Engine3D.width / 2, 1).onChange(action);
+ f.add(pos, 'y', -Engine3D.height / 2, Engine3D.height / 2, 1).onChange(action);
+ f.open();
+
+ f = GUIHelp.addFolder('Size');
+ let size = { width: quat.width, height: quat.height };
+ let action2 = () => this.imageGroup.setSize(1, size.width, size.height);
+ f.add(size, 'width', 0, 256, 1).onChange(action2);
+ f.add(size, 'height', 0, 256, 1).onChange(action2);
+ f.open();
+ }
+
+ private createSpriteSheets(root: Object3D, texture: Texture): UIImageGroup {
+ let sprite = makeAloneSprite('logo', texture);
+ let imgGroup = root.addComponent(UIImageGroup, { count: 2 });
+ let size = 128;
+ this.halfSize = size * 0.5;
+ for (let i = 0; i < 2; i++) {
+ imgGroup.setSprite(i, sprite);
+ imgGroup.setSize(i, size, size);
+ if (i == 1) {
+ imgGroup.setXY(1, -this.halfSize, this.halfSize);
+ } else {
+ imgGroup.setXY(0, -this.halfSize, -this.halfSize);
+ }
+ }
+ return imgGroup;
+ }
+}
+
+new Sample_UIImageGroup().run();
diff --git a/docs/public/demos/gui/imageGroup2.ts b/docs/public/demos/gui/imageGroup2.ts
new file mode 100644
index 00000000..d89df925
--- /dev/null
+++ b/docs/public/demos/gui/imageGroup2.ts
@@ -0,0 +1,197 @@
+import { AtmosphericComponent, BoundingBox, Camera3D, Color, Engine3D, GUIConfig, GUIQuad, HoverCameraController, Object3D, Scene3D, TextAnchor, UIImageGroup, UITextField, Vector2, Vector3, View3D, ViewPanel, clamp } from '@orillusion/core';
+import { Stats } from '@orillusion/stats';
+import * as dat from 'dat.gui';
+
+class SpriteSheet {
+ public static toggleMove: boolean = false;
+ public static toggleAnim: boolean = true;
+
+ private imgGroup: UIImageGroup;
+ private lastIndex: number = -1;
+ private frame: number = 100 * Math.random();
+ private frameSpeed: number = 0.5 + Math.random();
+ private frameCount = 13;
+ private keyFrames: string[];
+ private moveSpeed: Vector2;
+ private bound: BoundingBox;
+ private index: number;
+
+ private quad: GUIQuad;
+ constructor(img: UIImageGroup, index: number, keyFrames: string[], bound: BoundingBox) {
+ this.imgGroup = img;
+ this.index = index;
+ this.bound = bound;
+ this.keyFrames = keyFrames;
+ this.moveSpeed = new Vector2(Math.random() - 0.5, Math.random() - 0.5);
+ this.quad = img.getQuad(index);
+ }
+
+ updateFrame(): void {
+ if (SpriteSheet.toggleAnim) {
+ this.frame += this.frameSpeed;
+ let newIndex = Math.floor(this.frame * 0.1) % this.frameCount;
+ if (newIndex != this.lastIndex) {
+ this.lastIndex = newIndex;
+ this.imgGroup.setSprite(this.index, Engine3D.res.getGUISprite(this.keyFrames[newIndex]));
+ }
+ }
+
+ if (SpriteSheet.toggleMove) {
+ let x = this.quad.x;
+ let y = this.quad.y;
+ x += this.moveSpeed.x;
+ y += this.moveSpeed.y;
+ if (x < this.bound.min.x || x > this.bound.max.x) {
+ this.moveSpeed.x *= -1;
+ }
+ if (y < this.bound.min.y || y > this.bound.max.y) {
+ this.moveSpeed.y *= -1;
+ }
+ this.imgGroup.setXY(this.index, x, y);
+ }
+ }
+}
+
+class Sample_UIPerformance2 {
+ text: UITextField;
+ scene: Scene3D;
+ keyFrames: string[];
+
+ async run() {
+ Engine3D.setting.shadow.autoUpdate = true;
+
+ GUIConfig.quadMaxCountForView = 5001;
+
+ this.spriteSheets = [];
+ this.keyFrames = [];
+ let frameStart = 65; //65~77
+
+ for (let i = 0; i < 13; i++) {
+ this.keyFrames.push((frameStart + i).toString().padStart(5, '0'));
+ }
+
+ await Engine3D.init({
+ renderLoop: () => {
+ this.renderUpdate();
+ }
+ });
+ // initializa engine
+ await Engine3D.init();
+ // create new scene as root node
+ let scene3D: Scene3D = new Scene3D();
+ scene3D.addComponent(AtmosphericComponent);
+ // create camera
+ let cameraObj: Object3D = new Object3D();
+ let camera = cameraObj.addComponent(Camera3D);
+ // adjust camera view
+ camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ // set camera controller
+ let controller = cameraObj.addComponent(HoverCameraController);
+ controller.setCamera(0, -20, 30);
+ // add camera node
+ scene3D.addChild(cameraObj);
+ this.scene = scene3D;
+
+ let view = new View3D();
+ view.scene = scene3D;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+
+ this.scene.addComponent(Stats);
+ Engine3D.startRenderView(view);
+
+ await Engine3D.res.loadAtlas('https://cdn.orillusion.com/atlas/Sheet_atlas.json');
+ await Engine3D.res.loadFont('https://cdn.orillusion.com/fnt/0.fnt');
+
+ this.text = this.createText();
+ let GUIHelp = new dat.GUI();
+
+ GUIHelp.add(SpriteSheet, 'toggleMove');
+ GUIHelp.add(SpriteSheet, 'toggleAnim');
+
+ let addButton = (label: string, fun: Function) => {
+ var controls = new (function () {
+ this[label] = fun;
+ })();
+ GUIHelp.add(controls, label);
+ };
+
+ addButton('Add Sprites', () => {
+ if (this.spriteSheets.length < 99999) {
+ this.addLotOfSprite();
+ }
+ });
+
+ this.addLotOfSprite();
+ }
+
+ addLotOfSprite() {
+ // enable ui canvas at index 0
+ let canvas = this.scene.view.enableUICanvas(0);
+ //create UI root
+ let panelRoot: Object3D = new Object3D();
+ //create panel
+ let panel = panelRoot.addComponent(ViewPanel, { billboard: true });
+ canvas.addChild(panel.object3D);
+ //create sprite sheet list
+ this.createSpriteSheets(panelRoot);
+ }
+
+ createText(): UITextField {
+ let canvas = this.scene.view.enableUICanvas(0);
+ //create UI root
+ let panelRoot: Object3D = new Object3D();
+ //create panel
+ let panel = panelRoot.addComponent(ViewPanel, { billboard: true });
+ panel.panelOrder = 10000;
+ canvas.addChild(panel.object3D);
+ let textQuad = new Object3D();
+ panelRoot.addChild(textQuad);
+ let text = textQuad.addComponent(UITextField);
+ text.uiTransform.resize(400, 60);
+
+ text.fontSize = 24;
+ text.alignment = TextAnchor.MiddleCenter;
+
+ return text;
+ }
+
+ spriteSheets: SpriteSheet[];
+
+ private createSpriteSheets(root: Object3D) {
+ let width = Engine3D.width;
+ let height = Engine3D.height;
+ let bound = new BoundingBox(new Vector3(0, 0, 0), new Vector3(width, height));
+ //color
+ let color: Color = Color.random();
+ color.a = 1;
+
+ color.r = clamp(color.r * 1.5, 0.5, 1);
+ color.g = clamp(color.g * 1.5, 0.5, 1);
+ color.b = clamp(color.b * 1.5, 0.5, 1);
+
+ let sprite = Engine3D.res.getGUISprite('00065');
+
+ let size = 64;
+ let halfSize = size * 0.5;
+ let imgGroup = root.addComponent(UIImageGroup, { count: 5000 });
+ for (let i = 0; i < 5000; i++) {
+ imgGroup.setColor(i, color);
+ imgGroup.setSprite(i, sprite);
+ imgGroup.setSize(i, size, size);
+ imgGroup.setXY(i, (Math.random() - 0.5) * width * 0.7 - halfSize, (Math.random() - 0.5) * height * 0.7 - halfSize);
+ let sheet: SpriteSheet = new SpriteSheet(imgGroup, i, this.keyFrames, bound);
+ this.spriteSheets.push(sheet);
+ }
+
+ this.text.text = this.spriteSheets.length.toString() + ' Sprites';
+ }
+
+ renderUpdate() {
+ for (const item of this.spriteSheets) {
+ item.updateFrame();
+ }
+ }
+}
+
+new Sample_UIPerformance2().run();
diff --git a/docs/public/demos/gui/panel.ts b/docs/public/demos/gui/panel.ts
new file mode 100644
index 00000000..33438cd0
--- /dev/null
+++ b/docs/public/demos/gui/panel.ts
@@ -0,0 +1,69 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, View3D, ViewPanel, TextAnchor, UITextField, HoverCameraController, AtmosphericComponent, BitmapTexture2D, UIImage, makeAloneSprite, WorldPanel, GPUCullMode, UIPanel } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+// initializa engine
+await Engine3D.init();
+// create new scene as root node
+let scene3D: Scene3D = new Scene3D();
+scene3D.addComponent(AtmosphericComponent);
+// create camera
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+// adjust camera view
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+// set camera controller
+let controller = cameraObj.addComponent(HoverCameraController);
+controller.setCamera(0, -20, 100);
+// add camera node
+scene3D.addChild(cameraObj);
+
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+Engine3D.startRenderView(view);
+
+// create a UICanvas
+let canvas = view.enableUICanvas();
+// create view sapce panel
+let viewPanel: Object3D = new Object3D();
+viewPanel.addComponent(ViewPanel);
+// add to UICanvas
+canvas.addChild(viewPanel);
+
+// create world sapce panel
+let worldPanel: Object3D = new Object3D();
+worldPanel.localScale.set(0.15, 0.15, 0.15);
+let panel: UIPanel = worldPanel.addComponent(WorldPanel);
+// render double side
+panel.cullMode = GPUCullMode.none;
+// add to UICanvas
+canvas.addChild(worldPanel);
+
+// load a BitmapTexture2D
+let bitmapTexture2D = new BitmapTexture2D();
+bitmapTexture2D.flipY = true;
+await bitmapTexture2D.load('https://cdn.orillusion.com/images/webgpu.png');
+
+// create image node
+let imageQuad = new Object3D();
+viewPanel.addChild(imageQuad);
+// create UIImage component
+let image: UIImage = imageQuad.addComponent(UIImage);
+// set image size
+image.uiTransform.resize(320, 320);
+// set image source
+image.sprite = makeAloneSprite('webgpu', bitmapTexture2D);
+
+let GUIHelp = new dat.GUI();
+let f = GUIHelp.addFolder('GUI Space');
+let params = {
+ ViewSpace: () => {
+ viewPanel.addChild(imageQuad);
+ },
+ WorldSpace: () => {
+ worldPanel.addChild(imageQuad);
+ }
+};
+f.add(params, 'ViewSpace');
+f.add(params, 'WorldSpace');
+f.open();
diff --git a/docs/public/demos/gui/panelOrder.ts b/docs/public/demos/gui/panelOrder.ts
new file mode 100644
index 00000000..db99421d
--- /dev/null
+++ b/docs/public/demos/gui/panelOrder.ts
@@ -0,0 +1,98 @@
+import { Engine3D, Object3DUtil, Object3D, UIImage, ImageType, Color, WorldPanel, UIPanel, GUICanvas, BillboardType, AtmosphericComponent, Camera3D, HoverCameraController, Scene3D, View3D, GPUCullMode, ViewPanel } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_UIPanelOrder {
+ GUIHelp: dat.GUI;
+ async run() {
+ // initializa engine
+ await Engine3D.init();
+ // create new scene as root node
+ let scene3D: Scene3D = new Scene3D();
+ scene3D.addComponent(AtmosphericComponent);
+ // create camera
+ let cameraObj: Object3D = new Object3D();
+ let camera = cameraObj.addComponent(Camera3D);
+ // adjust camera view
+ camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ // set camera controller
+ let controller = cameraObj.addComponent(HoverCameraController);
+ controller.setCamera(0, -10, 100);
+ // add camera node
+ scene3D.addChild(cameraObj);
+
+ let view = new View3D();
+ view.scene = scene3D;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+
+ // create floor
+ let floor = Object3DUtil.GetSingleCube(100, 2, 50, 0.5, 0.5, 0.5);
+ scene3D.addChild(floor);
+ floor.y = -40;
+
+ // enable ui canvas at index 0
+ let canvas = scene3D.view.enableUICanvas();
+ //create UI root
+ let panelRoot: Object3D = new Object3D();
+ panelRoot.name = 'WorldPanel red';
+ panelRoot.scaleX = panelRoot.scaleY = panelRoot.scaleZ = 0.1;
+
+ let panelRoot2: Object3D = new Object3D();
+ panelRoot2.name = 'WorldPanel blue';
+ panelRoot2.z = 20;
+ panelRoot2.y = -10;
+ panelRoot2.x = -10;
+ panelRoot2.scaleX = panelRoot2.scaleY = panelRoot2.scaleZ = 0.1;
+
+ let panelRoot3: Object3D = new Object3D();
+ panelRoot3.name = 'ViewPanel Green';
+
+ this.GUIHelp = new dat.GUI();
+ this.createPanel(panelRoot, canvas, new Color(1.0, 0, 0.0, 0.8), 'world');
+ this.createPanel(panelRoot2, canvas, new Color(0, 0, 1, 0.8), 'world');
+ this.createPanel(panelRoot3, canvas, new Color(0, 1, 0, 0.5), 'view');
+ }
+
+ private createPanel(panelRoot: Object3D, canvas: GUICanvas, color: Color, type: string) {
+ let f = this.GUIHelp.addFolder(panelRoot.name);
+ if (type === 'world') {
+ let panel = panelRoot.addComponent(WorldPanel);
+ f.add(panel, 'panelOrder', 0, 10, 1);
+ panel.billboard = BillboardType.BillboardXYZ;
+ panel.needSortOnCameraZ = true;
+ f.add(panel, 'needSortOnCameraZ');
+ f.add({ cullMode: GPUCullMode.none }, 'cullMode', {
+ none: GPUCullMode.none,
+ front: GPUCullMode.front,
+ back: GPUCullMode.back
+ }).onChange((v) => {
+ panel.cullMode = v;
+ });
+ f.add({ billboard: panel.billboard }, 'billboard', {
+ None: BillboardType.None,
+ Y: BillboardType.BillboardY,
+ XYZ: BillboardType.BillboardXYZ
+ }).onChange((v) => {
+ panel.billboard = v;
+ });
+ f.add(panel, 'depthTest');
+ } else {
+ let panel = panelRoot.addComponent(ViewPanel);
+ f.add(panel, 'panelOrder', 0, 10, 1);
+ canvas;
+ }
+ f.open();
+
+ // create a UIImage
+ let obj3D = new Object3D();
+ panelRoot.addChild(obj3D);
+ let image = obj3D.addComponent(UIImage);
+ image.imageType = ImageType.Sliced;
+ image.uiTransform.resize(400, 300);
+ image.color = color;
+
+ canvas.addChild(panelRoot);
+ }
+}
+
+new Sample_UIPanelOrder().run();
diff --git a/docs/public/demos/gui/poi.ts b/docs/public/demos/gui/poi.ts
new file mode 100644
index 00000000..6d72dccd
--- /dev/null
+++ b/docs/public/demos/gui/poi.ts
@@ -0,0 +1,203 @@
+import { Scene3D, PropertyAnimation, Engine3D, Object3D, Object3DUtil, PropertyAnimClip, WrapMode, WorldPanel, BillboardType, TextAnchor, UIImage, UIShadow, UITextField, Vector3, Color, Time, AtmosphericComponent, Camera3D, GPUCullMode, HoverCameraController, UIPanel, View3D, DirectLight } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_POI {
+ scene: Scene3D;
+ panel: WorldPanel;
+ position: Vector3;
+ gui: dat.GUI;
+
+ async run() {
+ Engine3D.setting.shadow.autoUpdate = true;
+ Engine3D.setting.shadow.updateFrameRate = 1;
+ Engine3D.setting.shadow.shadowBound = 20;
+ Engine3D.setting.shadow.shadowBias = 0.001;
+
+ // initializa engine
+ await Engine3D.init({ renderLoop: () => this.loop() });
+ // create new scene as root node
+ let scene3D: Scene3D = new Scene3D();
+ scene3D.addComponent(AtmosphericComponent);
+ // create camera
+ let cameraObj: Object3D = new Object3D();
+ let camera = cameraObj.addComponent(Camera3D);
+ // adjust camera view
+ camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ // set camera controller
+ let controller = cameraObj.addComponent(HoverCameraController);
+ controller.setCamera(0, -20, 15);
+ // add camera node
+ scene3D.addChild(cameraObj);
+
+ let lightObj = new Object3D();
+ lightObj.rotationX = 45;
+ let dl = lightObj.addComponent(DirectLight);
+ dl.intensity = 2;
+ dl.castShadow = true;
+ scene3D.addChild(lightObj);
+
+ let view = new View3D();
+ view.scene = scene3D;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+
+ this.scene = scene3D;
+
+ await this.initScene();
+ this.gui = new dat.GUI();
+ this.initDuckPOI();
+ this.initScenePOI();
+ }
+
+ private modelContainer: Object3D;
+
+ async initScene() {
+ // floor
+ let floor: Object3D = Object3DUtil.GetSingleCube(16, 0.1, 16, 1, 1, 1);
+ this.scene.addChild(floor);
+ await Engine3D.res.loadFont('https://cdn.orillusion.com/fnt/0.fnt');
+
+ // load external model
+ let model = (await Engine3D.res.loadGltf('https://cdn.orillusion.com/PBR/Duck/Duck.gltf')) as Object3D;
+ model.rotationY = 180;
+ this.modelContainer = new Object3D();
+ this.modelContainer.addChild(model);
+ this.scene.addChild(this.modelContainer);
+ model.scaleX = model.scaleY = model.scaleZ = 0.01;
+ await this.initPropertyAnim(this.modelContainer);
+
+ let chair = (await Engine3D.res.loadGltf('https://cdn.orillusion.com/PBR/SheenChair/SheenChair.gltf')) as Object3D;
+ chair.scaleX = chair.scaleY = chair.scaleZ = 8;
+ this.scene.addChild(chair);
+ }
+
+ private async initPropertyAnim(owner: Object3D) {
+ // add PropertyAnimation
+ let animation = owner.addComponent(PropertyAnimation);
+
+ //load a animation clip
+ let json: any = await Engine3D.res.loadJSON('https://cdn.orillusion.com/json/anim_0.json');
+ let animClip = new PropertyAnimClip();
+ animClip.parse(json);
+ animClip.wrapMode = WrapMode.Loop;
+ animation.defaultClip = animClip.name;
+ animation.autoPlay = true;
+
+ // register clip to animation
+ animation.appendClip(animClip);
+ animation.play(animation.defaultClip);
+ return animation;
+ }
+
+ private initDuckPOI() {
+ let canvas = this.scene.view.enableUICanvas();
+ //panel
+ this.panel = new Object3D().addComponent(WorldPanel);
+ this.panel.billboard = BillboardType.BillboardXYZ;
+ //add to canvas
+ canvas.addChild(this.panel.object3D);
+ this.panel.object3D.localScale = new Vector3(0.1, 0.1, 0.1);
+
+ //poi
+ let panelRoot = new Object3D();
+
+ this.panel.object3D.addChild(panelRoot);
+
+ let image = panelRoot.addComponent(UIImage);
+ image.uiTransform.resize(32, 6);
+ image.uiTransform.setXY(20, 20);
+
+ image.color = new Color(1, 1, 1, 0.5);
+ image.isShadowless = true;
+ let text = panelRoot.addComponent(UITextField);
+
+ text.text = 'Happy Duck';
+ text.fontSize = 4;
+ text.color = new Color(0, 0, 0, 1);
+ text.alignment = TextAnchor.MiddleCenter;
+ this.renderUIPanel(this.panel, 'Duck Panel');
+ }
+
+ private sceneText: UITextField;
+ private initScenePOI() {
+ let canvas = this.scene.view.enableUICanvas();
+ //panel
+ let panel = new Object3D().addComponent(WorldPanel);
+ panel.cullMode = 'none';
+ //add to canvas
+ canvas.addChild(panel.object3D);
+ panel.object3D.localScale = new Vector3(0.1, 0.1, 0.1);
+
+ //poi
+ let panelRoot = new Object3D();
+ panel.transform.rotationX = -30;
+ panel.transform.y = 3.1;
+ panel.transform.x = 1;
+
+ panel.object3D.addChild(panelRoot);
+ let text = panelRoot.addComponent(UITextField);
+ text.uiTransform.resize(80, 16);
+ text.text = this.title;
+ text.fontSize = 10;
+ text.color = new Color(0.5, 1.0, 0.5, 1.0);
+ text.alignment = TextAnchor.MiddleLeft;
+
+ panelRoot.addComponent(UIShadow).shadowOffset.multiplyScaler(0.2);
+ this.sceneText = text;
+
+ this.renderUIPanel(panel, 'Chair Panel');
+ }
+
+ private charCount = 0;
+ private title: string = 'Hello, Orillusion';
+ private lastTitle = this.title;
+ private loop(): void {
+ if (this.panel) {
+ this.position ||= new Vector3();
+ this.position.copyFrom(this.modelContainer.transform.worldPosition);
+ this.panel.object3D.localPosition = this.position;
+ }
+ if (this.sceneText) {
+ let count = 1 + (Math.floor(Time.frame * 0.1) % 30);
+ if (this.charCount != count) {
+ this.charCount = count;
+ let newTitle = this.title.slice(0, this.charCount);
+ if (newTitle != this.lastTitle) {
+ this.sceneText.text = newTitle;
+ this.lastTitle = newTitle;
+ }
+ }
+ }
+ }
+
+ renderUIPanel(panel: WorldPanel, name: string = 'GUI Panel') {
+ let f = this.gui.addFolder(name);
+ //cull mode
+ let cullMode = {};
+ cullMode[GPUCullMode.none] = GPUCullMode.none;
+ cullMode[GPUCullMode.front] = GPUCullMode.front;
+ cullMode[GPUCullMode.back] = GPUCullMode.back;
+
+ // change cull mode by click dropdown box
+ f.add({ cullMode: GPUCullMode.none }, 'cullMode', cullMode).onChange((v) => {
+ panel.cullMode = v;
+ });
+
+ //billboard
+ let billboard = {};
+ billboard['None'] = BillboardType.None;
+ billboard['Y'] = BillboardType.BillboardY;
+ billboard['XYZ'] = BillboardType.BillboardXYZ;
+
+ // change billboard by click dropdown box
+ f.add({ billboard: panel.billboard }, 'billboard', billboard).onChange((v) => {
+ panel.billboard = v;
+ });
+
+ //depth test
+ f.add(panel, 'depthTest');
+ f.open();
+ }
+}
+
+new Sample_POI().run();
diff --git a/docs/public/demos/gui/shadow.ts b/docs/public/demos/gui/shadow.ts
new file mode 100644
index 00000000..8b3b9878
--- /dev/null
+++ b/docs/public/demos/gui/shadow.ts
@@ -0,0 +1,76 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, View3D, ViewPanel, UIImage, HoverCameraController, Color, AtmosphericComponent, UIShadow, UITextField, TextAnchor, Vector2, Time } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_button {
+ async run() {
+ // initializa engine
+ await Engine3D.init();
+ // create new scene as root node
+ let scene3D: Scene3D = new Scene3D();
+ scene3D.addComponent(AtmosphericComponent);
+ // create camera
+ let cameraObj: Object3D = new Object3D();
+ let camera = cameraObj.addComponent(Camera3D);
+ // adjust camera view
+ camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ // set camera controller
+ let controller = cameraObj.addComponent(HoverCameraController);
+ controller.setCamera(0, 0, 15);
+ // add camera node
+ scene3D.addChild(cameraObj);
+
+ let view = new View3D();
+ view.scene = scene3D;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+
+ // create panel root
+ let panelRoot: Object3D = new Object3D();
+ panelRoot.addComponent(ViewPanel);
+
+ let canvas = view.enableUICanvas();
+ canvas.addChild(panelRoot);
+ await Engine3D.res.loadFont('https://cdn.orillusion.com/fnt/0.fnt');
+
+ // create image node
+ let imageQuad = new Object3D();
+ panelRoot.addChild(imageQuad);
+ // create image component
+ let image: UIImage = imageQuad.addComponent(UIImage);
+ image.color = new Color(0.2, 0.2, 0.2, 0.5);
+ image.isShadowless = true;
+ // set image size
+ image.uiTransform.resize(480, 120);
+
+ let text = imageQuad.addComponent(UITextField);
+ text.fontSize = 42;
+ text.alignment = TextAnchor.MiddleCenter;
+ text.color = new Color(0.8, 0.8, 0.8, 1.0);
+ text.text = 'Orillusion';
+
+ // add shadow
+ let shadow = imageQuad.addComponent(UIShadow);
+ let shadowColor = new Color(1.0, 0.5, 0.5, 0.8);
+ shadow.shadowQuality = 4;
+ shadow.shadowOffset = new Vector2(2, -2);
+ shadow.shadowRadius = 2;
+
+ let GUIHelp = new dat.GUI();
+ let f = GUIHelp.addFolder('GUI Shadow');
+ f.add(shadow, 'shadowQuality', 0, 4, 1);
+ f.add(shadow, 'shadowRadius', 0, 10, 0.01);
+ f.add(shadow.shadowOffset, 'x', -100, 100, 0.1).onChange(() => {
+ shadow.shadowOffset = shadow.shadowOffset;
+ });
+ f.add(shadow.shadowOffset, 'y', -100, 100, 0.1).onChange(() => {
+ shadow.shadowOffset = shadow.shadowOffset;
+ });
+ f.addColor({ color: Object.values(shadowColor).map((v) => v * 255) }, 'color').onChange((v) => {
+ shadowColor.copyFromArray(v);
+ shadow.shadowColor = shadowColor;
+ });
+ f.open();
+ }
+}
+
+new Sample_button().run();
diff --git a/docs/public/demos/gui/textfield.ts b/docs/public/demos/gui/textfield.ts
new file mode 100644
index 00000000..015da5c5
--- /dev/null
+++ b/docs/public/demos/gui/textfield.ts
@@ -0,0 +1,56 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, View3D, ViewPanel, TextAnchor, UITextField, DirectLight, HoverCameraController, Color, AtmosphericComponent, WorldPanel, GPUCullMode, UIPanel } from '@orillusion/core';
+
+// initializa engine
+await Engine3D.init();
+// create new scene as root node
+let scene3D: Scene3D = new Scene3D();
+scene3D.addComponent(AtmosphericComponent);
+// create camera
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+// adjust camera view
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+// set camera controller
+let controller = cameraObj.addComponent(HoverCameraController);
+controller.setCamera(0, -20, 30);
+// add camera node
+scene3D.addChild(cameraObj);
+// create light
+let light: Object3D = new Object3D();
+// add direct light component
+let component: DirectLight = light.addComponent(DirectLight);
+// adjust lighting
+light.rotationX = 45;
+light.rotationY = 30;
+component.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+component.intensity = 1;
+// add light object
+scene3D.addChild(light);
+
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+Engine3D.startRenderView(view);
+
+// create UIpanel root
+let panelRoot: Object3D = new Object3D();
+let panel: UIPanel = panelRoot.addComponent(WorldPanel);
+panel.cullMode = GPUCullMode.none;
+// add to UIcanvas
+let canvas = view.enableUICanvas();
+canvas.addChild(panelRoot);
+
+// load base font
+await Engine3D.res.loadFont('https://cdn.orillusion.com/fnt/0.fnt');
+// create text node
+let textQuad = new Object3D();
+textQuad.localScale.set(0.1, 0.1, 0.1);
+panelRoot.addChild(textQuad);
+// create textfield component
+let text: UITextField = textQuad.addComponent(UITextField);
+// set textfield size
+text.uiTransform.resize(300, 60);
+// set text value
+text.text = 'Hello, Orillusion!';
+text.fontSize = 32;
+text.alignment = TextAnchor.MiddleCenter;
diff --git a/docs/public/demos/interaction/event.ts b/docs/public/demos/interaction/event.ts
new file mode 100644
index 00000000..a9b2ccb1
--- /dev/null
+++ b/docs/public/demos/interaction/event.ts
@@ -0,0 +1,86 @@
+import { Engine3D, Scene3D, Vector3, Object3D, Camera3D, View3D, AtmosphericComponent, LitMaterial, MeshRenderer, ComponentBase, CEvent, BoxGeometry, DirectLight } from '@orillusion/core';
+import dat from 'dat.gui';
+
+class UserEventScriptLeft extends ComponentBase {
+ private rotation: number = 0;
+
+ private OnRunEvent(e: CEvent) {
+ console.log(e.type, e.data);
+ let params = e.data;
+ console.log(params);
+ if (params.direction == 'left') {
+ this.rotation = -5;
+ } else if (params.direction == 'right') {
+ this.rotation = 5;
+ }
+ }
+
+ private OnStopEvent(e: CEvent) {
+ console.log(e.type, e.data);
+ this.rotation = 0;
+ }
+
+ public start() {
+ Engine3D.inputSystem.addEventListener('RunEvent', this.OnRunEvent, this);
+ Engine3D.inputSystem.addEventListener('StopEvent', this.OnStopEvent, this);
+ }
+
+ public onUpdate() {
+ this.object3D.transform.rotationY += this.rotation;
+ }
+}
+
+let scene: Scene3D;
+let cameraObj: Object3D;
+let camera: Camera3D;
+let boxObj: Object3D;
+
+await Engine3D.init();
+scene = new Scene3D();
+scene.addComponent(AtmosphericComponent);
+cameraObj = new Object3D();
+camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+camera.lookAt(new Vector3(0, 5, 15), new Vector3(0, 0, 0));
+scene.addChild(cameraObj);
+
+// add a base light
+let lightObj = new Object3D();
+lightObj.addComponent(DirectLight);
+scene.addChild(lightObj);
+
+boxObj = new Object3D();
+boxObj.addComponent(UserEventScriptLeft);
+let mr: MeshRenderer = boxObj.addComponent(MeshRenderer);
+mr.geometry = new BoxGeometry(3, 3, 3);
+mr.material = new LitMaterial();
+boxObj.localPosition = new Vector3(0, 0, 0);
+scene.addChild(boxObj);
+
+let view = new View3D();
+view.scene = scene;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
+
+const gui = new dat.GUI();
+// Debug
+const debugInfo = {
+ leftEvent: () => {
+ let params = { direction: 'left' };
+ let e = new CEvent('RunEvent', params);
+ Engine3D.inputSystem.dispatchEvent(e);
+ },
+ rightEvent: () => {
+ let params = { direction: 'right' };
+ let e = new CEvent('RunEvent', params);
+ Engine3D.inputSystem.dispatchEvent(e);
+ },
+ stopEvent: () => {
+ let e = new CEvent('StopEvent');
+ Engine3D.inputSystem.dispatchEvent(e);
+ }
+};
+gui.add(debugInfo, 'leftEvent');
+gui.add(debugInfo, 'rightEvent');
+gui.add(debugInfo, 'stopEvent');
diff --git a/docs/public/demos/interaction/keyboard.ts b/docs/public/demos/interaction/keyboard.ts
new file mode 100644
index 00000000..3dac5ba3
--- /dev/null
+++ b/docs/public/demos/interaction/keyboard.ts
@@ -0,0 +1,102 @@
+import { Engine3D, Scene3D, Vector3, Object3D, AtmosphericComponent, Camera3D, View3D, LitMaterial, BoxGeometry, MeshRenderer, ComponentBase, KeyEvent, KeyCode, DirectLight } from '@orillusion/core';
+
+class KeyboardScript extends ComponentBase {
+ private front: boolean = false;
+ private back: boolean = false;
+ private left: boolean = false;
+ private right: boolean = false;
+ private q: boolean = false;
+ private e: boolean = false;
+
+ public start() {
+ Engine3D.inputSystem.addEventListener(KeyEvent.KEY_UP, this.keyUp, this);
+ Engine3D.inputSystem.addEventListener(KeyEvent.KEY_DOWN, this.keyDown, this);
+ }
+ private keyDown(e: KeyEvent) {
+ // console.log('keyDown:', e.keyCode);
+ if (e.keyCode == KeyCode.Key_W) {
+ this.front = true;
+ } else if (e.keyCode == KeyCode.Key_S) {
+ this.back = true;
+ } else if (e.keyCode == KeyCode.Key_A) {
+ this.left = true;
+ } else if (e.keyCode == KeyCode.Key_D) {
+ this.right = true;
+ } else if (e.keyCode == KeyCode.Key_Q) {
+ this.q = true;
+ } else if (e.keyCode == KeyCode.Key_E) {
+ this.e = true;
+ }
+ }
+ private keyUp(e: KeyEvent) {
+ // console.log('keyUp:', e.keyCode);
+ let transform = this.object3D.transform;
+ console.log(transform.x, transform.y, transform.z, transform.rotationX);
+ if (e.keyCode == KeyCode.Key_W) {
+ this.front = false;
+ } else if (e.keyCode == KeyCode.Key_S) {
+ this.back = false;
+ } else if (e.keyCode == KeyCode.Key_A) {
+ this.left = false;
+ } else if (e.keyCode == KeyCode.Key_D) {
+ this.right = false;
+ } else if (e.keyCode == KeyCode.Key_Q) {
+ this.q = false;
+ } else if (e.keyCode == KeyCode.Key_E) {
+ this.e = false;
+ } else {
+ transform.x = 0;
+ transform.y = 0;
+ transform.z = 0;
+ transform.rotationX = 0;
+ console.log(transform.x, transform.y, transform.z, transform.rotationX);
+ }
+ }
+
+ public onUpdate() {
+ if (!this.enable) return;
+
+ let transform = this.object3D.transform;
+ if (this.front) transform.z -= 1;
+ if (this.back) transform.z += 1;
+ if (this.left) transform.x -= 1;
+ if (this.right) transform.x += 1;
+ if (this.q) transform.rotationX -= 5;
+ if (this.e) transform.rotationX += 5;
+ }
+}
+
+let scene: Scene3D;
+let cameraObj: Object3D;
+let camera: Camera3D;
+let boxObj: Object3D;
+
+await Engine3D.init();
+
+scene = new Scene3D();
+scene.addComponent(AtmosphericComponent);
+
+cameraObj = new Object3D();
+camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+camera.lookAt(new Vector3(0, 5, 15), new Vector3(0, 0, 0));
+scene.addChild(cameraObj);
+
+// add a base light
+let lightObj = new Object3D();
+lightObj.addComponent(DirectLight);
+scene.addChild(lightObj);
+
+boxObj = new Object3D();
+boxObj.addComponent(KeyboardScript);
+let mr: MeshRenderer = boxObj.addComponent(MeshRenderer);
+mr.geometry = new BoxGeometry(3, 3, 3);
+mr.material = new LitMaterial();
+boxObj.localPosition = new Vector3(0, 0, 0);
+scene.addChild(boxObj);
+
+let view = new View3D();
+view.scene = scene;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/interaction/pick_bound.ts b/docs/public/demos/interaction/pick_bound.ts
new file mode 100644
index 00000000..4af0f5ee
--- /dev/null
+++ b/docs/public/demos/interaction/pick_bound.ts
@@ -0,0 +1,89 @@
+import { Engine3D, Scene3D, Vector3, Object3D, AtmosphericComponent, Camera3D, View3D, LitMaterial, MeshRenderer, BoxColliderShape, ColliderComponent, BoxGeometry, Color, PointerEvent3D, SphereGeometry, DirectLight, BoundingBox } from '@orillusion/core';
+import { Graphic3D } from '@orillusion/graphic';
+
+class TouchDemo {
+ scene: Scene3D;
+ cameraObj: Object3D;
+ camera: Camera3D;
+ graphic3D: Graphic3D;
+
+ constructor() {}
+
+ async run() {
+ console.log('start demo');
+ // enable pick and use bound mode
+ Engine3D.setting.pick.enable = true;
+ Engine3D.setting.pick.mode = `bound`;
+
+ await Engine3D.init();
+
+ this.scene = new Scene3D();
+ this.scene.addComponent(AtmosphericComponent);
+ this.cameraObj = new Object3D();
+ this.camera = this.cameraObj.addComponent(Camera3D);
+ this.scene.addChild(this.cameraObj);
+ this.camera.lookAt(new Vector3(0, 0, 10), new Vector3(0, 0, 0));
+ this.camera.perspective(60, Engine3D.aspect, 1, 10000.0);
+
+ // add a base light
+ let lightObj = new Object3D();
+ lightObj.addComponent(DirectLight);
+ this.scene.addChild(lightObj);
+
+ let box = this.createBox(-2, 0, 0);
+ let sphere = this.createSphere(2, 0, 0);
+
+ this.graphic3D = new Graphic3D();
+ this.scene.addChild(this.graphic3D);
+ this.graphic3D.drawBoundingBox(box.instanceID, box.bound as BoundingBox, Color.COLOR_GREEN);
+ this.graphic3D.drawBoundingBox(sphere.instanceID, sphere.bound as BoundingBox, Color.COLOR_GREEN);
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = this.camera;
+ // start render
+ Engine3D.startRenderView(view);
+
+ // listen all pick_click events
+ view.pickFire.addEventListener(PointerEvent3D.PICK_CLICK, this.onPick, this);
+ }
+
+ createBox(x: number, y: number, z: number) {
+ let boxObj = new Object3D();
+ boxObj.transform.localPosition = new Vector3(x, y, z);
+
+ let size: number = 2;
+ let shape: BoxColliderShape = new BoxColliderShape().setFromCenterAndSize(new Vector3(0, 0, 0), new Vector3(size, size, size));
+ // add a box collider
+ let collider = boxObj.addComponent(ColliderComponent);
+ collider.shape = shape;
+ let mr: MeshRenderer = boxObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(size, size, size);
+ mr.material = new LitMaterial();
+ this.scene.addChild(boxObj);
+ return boxObj;
+ }
+
+ createSphere(x: number, y: number, z: number) {
+ let sphereObj = new Object3D();
+ sphereObj.transform.localPosition = new Vector3(x, y, z);
+
+ let size: number = 2;
+ let shape: BoxColliderShape = new BoxColliderShape().setFromCenterAndSize(new Vector3(0, 0, 0), new Vector3(size, size, size));
+ // add a box collider
+ let collider = sphereObj.addComponent(ColliderComponent);
+ collider.shape = shape;
+ let mr: MeshRenderer = sphereObj.addComponent(MeshRenderer);
+ mr.geometry = new SphereGeometry(size / 2, 20, 20);
+ mr.material = new LitMaterial();
+ this.scene.addChild(sphereObj);
+ return sphereObj;
+ }
+
+ onPick(e: PointerEvent3D) {
+ console.log('onClick:', e);
+ let mr: MeshRenderer = e.target.getComponent(MeshRenderer);
+ mr.material.baseColor = Color.random();
+ }
+}
+new TouchDemo().run();
diff --git a/docs/public/demos/interaction/pick_pixel.ts b/docs/public/demos/interaction/pick_pixel.ts
new file mode 100644
index 00000000..a59a2c09
--- /dev/null
+++ b/docs/public/demos/interaction/pick_pixel.ts
@@ -0,0 +1,100 @@
+import { AtmosphericComponent, BoxColliderShape, Camera3D, CameraUtil, ColliderComponent, Color, View3D, DirectLight, Engine3D, LitMaterial, HoverCameraController, KelvinUtil, MeshRenderer, Object3D, PointerEvent3D, Scene3D, SphereGeometry, Vector3 } from '@orillusion/core';
+
+class Sample_MousePick {
+ lightObj: Object3D;
+ cameraObj: Camera3D;
+ scene: Scene3D;
+ hover: HoverCameraController;
+
+ constructor() {}
+
+ async run() {
+ // enable pick and use pixel mode
+ Engine3D.setting.pick.enable = true;
+ Engine3D.setting.pick.mode = `pixel`;
+
+ await Engine3D.init({});
+
+ this.scene = new Scene3D();
+ this.scene.addComponent(AtmosphericComponent);
+ let camera = CameraUtil.createCamera3DObject(this.scene);
+ camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+
+ this.hover = camera.object3D.addComponent(HoverCameraController);
+ this.hover.setCamera(-30, -15, 120);
+
+ let wukong = await Engine3D.res.loadGltf('https://cdn.orillusion.com/gltfs/wukong/wukong.gltf');
+ wukong.transform.y = 30;
+ wukong.transform.scaleX = 20;
+ wukong.transform.scaleY = 20;
+ wukong.transform.scaleZ = 20;
+ wukong.forChild((node) => {
+ if (node.hasComponent(MeshRenderer)) {
+ node.addComponent(ColliderComponent);
+ }
+ });
+ this.scene.addChild(wukong);
+
+ this.initPickObject(this.scene);
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = camera;
+ // start render
+ Engine3D.startRenderView(view);
+
+ // listen all mouse events
+ view.pickFire.addEventListener(PointerEvent3D.PICK_UP, this.onPick, this);
+ view.pickFire.addEventListener(PointerEvent3D.PICK_DOWN, this.onPick, this);
+ view.pickFire.addEventListener(PointerEvent3D.PICK_CLICK, this.onPick, this);
+ view.pickFire.addEventListener(PointerEvent3D.PICK_OVER, this.onPick, this);
+ view.pickFire.addEventListener(PointerEvent3D.PICK_OUT, this.onPick, this);
+ view.pickFire.addEventListener(PointerEvent3D.PICK_MOVE, this.onPick, this);
+ }
+
+ private initPickObject(scene: Scene3D): void {
+ /******** light *******/
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.rotationX = 125;
+ this.lightObj.rotationY = 0;
+ this.lightObj.rotationZ = 40;
+ let lc = this.lightObj.addComponent(DirectLight);
+ lc.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ lc.castShadow = true;
+ lc.intensity = 5;
+ scene.addChild(this.lightObj);
+ }
+
+ let size: number = 9;
+ let shape = new BoxColliderShape();
+ shape.setFromCenterAndSize(new Vector3(), new Vector3(size, size, size));
+
+ let geometry = new SphereGeometry(size / 2, 20, 20);
+ for (let i = 0; i < 10; i++) {
+ let obj = new Object3D();
+ obj.name = 'sphere ' + i;
+ scene.addChild(obj);
+ obj.x = (i - 5) * 10;
+
+ let mat = new LitMaterial();
+ mat.emissiveMap = Engine3D.res.grayTexture;
+ mat.emissiveIntensity = 0.0;
+
+ let renderer = obj.addComponent(MeshRenderer);
+ renderer.geometry = geometry;
+ renderer.material = mat;
+ obj.addComponent(ColliderComponent);
+ }
+ }
+
+ private onPick(e: PointerEvent3D) {
+ console.log(e.type, e.target.name, e.data);
+ if(e.type !== 'onPickMove'){
+ let obj = e.target as Object3D;
+ let mr = obj.getComponent(MeshRenderer);
+ mr.material.baseColor = Color.random();
+ }
+ }
+}
+new Sample_MousePick().run();
diff --git a/docs/public/demos/interaction/pointEvent.ts b/docs/public/demos/interaction/pointEvent.ts
new file mode 100644
index 00000000..092b4edf
--- /dev/null
+++ b/docs/public/demos/interaction/pointEvent.ts
@@ -0,0 +1,54 @@
+import { Engine3D, Scene3D, Vector3, AtmosphericComponent, Object3D, Camera3D, View3D, LitMaterial, MeshRenderer, BoxGeometry, MouseCode, PointerEvent3D, DirectLight } from '@orillusion/core';
+
+let scene: Scene3D;
+let cameraObj: Object3D;
+let camera: Camera3D;
+let boxObj: Object3D;
+await Engine3D.init();
+
+scene = new Scene3D();
+scene.addComponent(AtmosphericComponent);
+
+cameraObj = new Object3D();
+camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+camera.lookAt(new Vector3(0, 5, 15), new Vector3(0, 0, 0));
+scene.addChild(cameraObj);
+
+// add a base light
+let lightObj = new Object3D();
+lightObj.addComponent(DirectLight);
+scene.addChild(lightObj);
+
+boxObj = new Object3D();
+let mr: MeshRenderer = boxObj.addComponent(MeshRenderer);
+mr.geometry = new BoxGeometry(3, 3, 3);
+mr.material = new LitMaterial();
+boxObj.localPosition = new Vector3(0, 0, 0);
+scene.addChild(boxObj);
+
+let view = new View3D();
+view.scene = scene;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
+
+Engine3D.inputSystem.addEventListener(
+ PointerEvent3D.POINTER_DOWN,
+ (e: PointerEvent3D) => {
+ if (e.mouseCode == MouseCode.MOUSE_LEFT) {
+ boxObj.rotationY -= 20;
+ } else if (e.mouseCode == MouseCode.MOUSE_RIGHT) {
+ boxObj.rotationY += 20;
+ }
+ },
+ this
+);
+
+Engine3D.inputSystem.addEventListener(
+ PointerEvent3D.POINTER_WHEEL,
+ (e: PointerEvent3D) => {
+ boxObj.z += Engine3D.inputSystem.wheelDelta / 120;
+ },
+ this
+);
diff --git a/docs/public/demos/materials/LambertMaterial.ts b/docs/public/demos/materials/LambertMaterial.ts
new file mode 100644
index 00000000..0feaeddd
--- /dev/null
+++ b/docs/public/demos/materials/LambertMaterial.ts
@@ -0,0 +1,61 @@
+import { Camera3D, DirectLight, Engine3D, AtmosphericComponent, View3D, HoverCameraController, KelvinUtil, MeshRenderer, Object3D, Scene3D, SphereGeometry, LambertMaterial, Color } from '@orillusion/core';
+
+class Sample_Materials {
+ scene: Scene3D;
+ lightObj: Object3D;
+
+ constructor() {}
+
+ async run() {
+ await Engine3D.init();
+
+ this.scene = new Scene3D();
+ let cameraObj = new Object3D();
+ cameraObj.name = `cameraObj`;
+ let mainCamera = cameraObj.addComponent(Camera3D);
+ this.scene.addChild(cameraObj);
+ mainCamera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ cameraObj.addComponent(HoverCameraController);
+
+ await this.initScene();
+
+ // add an Atmospheric sky enviroment
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+ // create a view with target scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ // start render
+ Engine3D.startRenderView(view);
+ }
+
+ async initScene() {
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.x = 0;
+ this.lightObj.y = 0;
+ this.lightObj.z = 0;
+ this.lightObj.rotationX = 0;
+ this.lightObj.rotationY = 0;
+ this.lightObj.rotationZ = 0;
+ let lc = this.lightObj.addComponent(DirectLight);
+ lc.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ lc.intensity = 1.7;
+ this.scene.addChild(this.lightObj);
+ }
+
+ {
+ // Lambert
+ let sphere = new Object3D();
+ let mr = sphere.addComponent(MeshRenderer);
+ mr.geometry = new SphereGeometry(2.5, 30, 30);
+ let mat = new LambertMaterial();
+ mat.baseColor = new Color(1, 1, 1, 1);
+ mr.material = mat;
+ this.scene.addChild(sphere);
+ sphere.localPosition.set(0, 0, 0);
+ }
+ }
+}
+
+new Sample_Materials().run();
diff --git a/docs/public/demos/materials/PBR.ts b/docs/public/demos/materials/PBR.ts
new file mode 100644
index 00000000..e8926130
--- /dev/null
+++ b/docs/public/demos/materials/PBR.ts
@@ -0,0 +1,56 @@
+import { Camera3D, DirectLight, Engine3D, AtmosphericComponent, View3D, HoverCameraController, MeshRenderer, Object3D, Scene3D, SphereGeometry, LitMaterial } from '@orillusion/core';
+
+class Sample_Materials {
+ scene: Scene3D;
+ lightObj: Object3D;
+
+ constructor() {}
+
+ async run() {
+ await Engine3D.init();
+ this.scene = new Scene3D();
+ let cameraObj = new Object3D();
+ let mainCamera = cameraObj.addComponent(Camera3D);
+ this.scene.addChild(cameraObj);
+ mainCamera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ mainCamera.object3D.addComponent(HoverCameraController);
+
+ await this.initScene();
+
+ // add an Atmospheric sky enviroment
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+ // create a view with target scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ // start render
+ Engine3D.startRenderView(view);
+ }
+
+ async initScene() {
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.x = -20;
+ this.lightObj.y = 20;
+ this.lightObj.z = -20;
+ this.lightObj.rotationX = 45;
+ this.lightObj.rotationY = 45;
+ this.lightObj.rotationZ = 0;
+ let lc = this.lightObj.addComponent(DirectLight);
+ lc.intensity = 0.2;
+ this.scene.addChild(this.lightObj);
+ }
+ {
+ // PRB
+ let sphere = new Object3D();
+ let mr = sphere.addComponent(MeshRenderer);
+ mr.geometry = new SphereGeometry(2.5, 30, 30);
+ let mat = new LitMaterial();
+ mr.material = mat;
+ this.scene.addChild(sphere);
+ sphere.localPosition.set(0, 0, 0);
+ }
+ }
+}
+
+new Sample_Materials().run();
diff --git a/docs/public/demos/materials/UnLitMaterial.ts b/docs/public/demos/materials/UnLitMaterial.ts
new file mode 100644
index 00000000..7bee2b11
--- /dev/null
+++ b/docs/public/demos/materials/UnLitMaterial.ts
@@ -0,0 +1,60 @@
+import { Camera3D, DirectLight, Engine3D, AtmosphericComponent, View3D, HoverCameraController, KelvinUtil, MeshRenderer, Object3D, Scene3D, SphereGeometry, UnLitMaterial, Color } from '@orillusion/core';
+
+class Sample_Materials {
+ scene: Scene3D;
+ lightObj: Object3D;
+
+ constructor() {}
+
+ async run() {
+ await Engine3D.init();
+ this.scene = new Scene3D();
+
+ let cameraObj = new Object3D();
+ let mainCamera = cameraObj.addComponent(Camera3D);
+ this.scene.addChild(cameraObj);
+ mainCamera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ mainCamera.object3D.addComponent(HoverCameraController);
+
+ await this.initScene();
+
+ // add an Atmospheric sky enviroment
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+ // create a view with target scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ // start render
+ Engine3D.startRenderView(view);
+ }
+
+ async initScene() {
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.x = 0;
+ this.lightObj.y = 0;
+ this.lightObj.z = 0;
+ this.lightObj.rotationX = 0;
+ this.lightObj.rotationY = 0;
+ this.lightObj.rotationZ = 0;
+ let lc = this.lightObj.addComponent(DirectLight);
+ lc.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ lc.intensity = 1.7;
+ this.scene.addChild(this.lightObj);
+ }
+
+ {
+ // UnLitMaterial
+ let sphere = new Object3D();
+ let mr = sphere.addComponent(MeshRenderer);
+ mr.geometry = new SphereGeometry(2.5, 30, 30);
+ let mat = new UnLitMaterial();
+ mat.baseColor = new Color(1, 1, 1, 1);
+ mr.material = mat;
+ this.scene.addChild(sphere);
+ sphere.localPosition.set(0, 0, 0);
+ }
+ }
+}
+
+new Sample_Materials().run();
diff --git a/docs/public/demos/materials/blendMode.ts b/docs/public/demos/materials/blendMode.ts
new file mode 100644
index 00000000..44017181
--- /dev/null
+++ b/docs/public/demos/materials/blendMode.ts
@@ -0,0 +1,109 @@
+import { BlendMode, Camera3D, CameraUtil, Color, BloomPost, DirectLight, Engine3D, GPUCullMode, HoverCameraController, KelvinUtil, MeshRenderer, Object3D, PlaneGeometry, Scene3D, UnLitMaterial, webGPUContext, AtmosphericComponent, View3D, PostProcessingComponent } from '@orillusion/core';
+
+class Sample_BlendMode {
+ lightObj: Object3D;
+ cameraObj: Camera3D;
+ scene: Scene3D;
+ hover: HoverCameraController;
+
+ constructor() {}
+
+ async run() {
+ await Engine3D.init({ canvasConfig: { alpha: false, zIndex: 0 } });
+
+ Engine3D.setting.shadow.shadowBound = 5;
+
+ this.scene = new Scene3D();
+ // add an Atmospheric sky enviroment
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ let camera = CameraUtil.createCamera3DObject(this.scene);
+ camera.perspective(60, webGPUContext.aspect, 0.01, 5000.0);
+
+ this.hover = camera.object3D.addComponent(HoverCameraController);
+ this.hover.setCamera(0, 0, 100);
+
+ // create a view with target scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = camera;
+ // start render
+ Engine3D.startRenderView(view);
+
+ let postProcessing = this.scene.addComponent(PostProcessingComponent);
+ let bloom = postProcessing.addPost(BloomPost);
+
+ await this.initScene();
+ }
+
+ async initScene() {
+ /******** sky *******/
+ {
+ this.scene.exposure = 1;
+ this.scene.roughness = 0.56;
+ }
+ /******** light *******/
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.rotationX = 57;
+ this.lightObj.rotationY = 347;
+ this.lightObj.rotationZ = 10;
+ let lc = this.lightObj.addComponent(DirectLight);
+ lc.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ lc.castShadow = true;
+ lc.intensity = 6;
+ this.scene.addChild(this.lightObj);
+ }
+
+ {
+ let tex = await Engine3D.res.loadTexture('https://cdn.orillusion.com/images/T_Fx_Object_229.webp');
+ let mat = new UnLitMaterial();
+ mat.baseMap = tex;
+ mat.cullMode = GPUCullMode.none;
+ mat.blendMode = BlendMode.ALPHA;
+
+ let plane = new Object3D();
+ plane.rotationX = 90;
+ let mr = plane.addComponent(MeshRenderer);
+ mr.material = mat;
+ mr.geometry = new PlaneGeometry(100, 100, 1, 1);
+ this.scene.addChild(plane);
+
+ let select = document.createElement('select');
+ select.innerHTML = `
+ ALPHA
+ NORMAL
+ ABOVE
+ NONE
+ ADD
+ BELOW
+ ERASE
+ MUL
+ SCREEN
+ DIVD
+ SOFT_ADD
+ `;
+ select.setAttribute('style', 'position:fixed;right:5px;top:5px');
+ document.body.appendChild(select);
+
+ select.addEventListener('change', (v) => {
+ mat.blendMode = BlendMode[select.value];
+ });
+ }
+
+ {
+ let mat2 = new UnLitMaterial();
+ mat2.doubleSide = true;
+ mat2.baseColor = new Color(0.6, 0.3, 0.3, 1);
+ let plane2 = new Object3D();
+ plane2.rotationX = 90;
+ let mr2 = plane2.addComponent(MeshRenderer);
+ mr2.material = mat2;
+ mr2.geometry = new PlaneGeometry(100, 100, 1, 1);
+ plane2.z = -10;
+ this.scene.addChild(plane2);
+ }
+ }
+}
+
+new Sample_BlendMode().run();
diff --git a/docs/public/demos/materials/color.ts b/docs/public/demos/materials/color.ts
new file mode 100644
index 00000000..33e4bd0f
--- /dev/null
+++ b/docs/public/demos/materials/color.ts
@@ -0,0 +1,65 @@
+import { Camera3D, DirectLight, Engine3D, AtmosphericComponent, View3D, HoverCameraController, KelvinUtil, MeshRenderer, Object3D, Scene3D, SphereGeometry, UnLitMaterial, Color } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_Materials {
+ scene: Scene3D;
+ lightObj: Object3D;
+
+ constructor() {}
+
+ async run() {
+ await Engine3D.init();
+ this.scene = new Scene3D();
+ let cameraObj = new Object3D();
+ cameraObj.name = `cameraObj`;
+ let mainCamera = cameraObj.addComponent(Camera3D);
+ this.scene.addChild(cameraObj);
+ mainCamera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ cameraObj.addComponent(HoverCameraController);
+
+ await this.initScene();
+
+ // add an Atmospheric sky enviroment
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+ // create a view with target scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+ // start render
+ Engine3D.startRenderView(view);
+ }
+
+ async initScene() {
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.x = 0;
+ this.lightObj.y = 0;
+ this.lightObj.z = 0;
+ this.lightObj.rotationX = 0;
+ this.lightObj.rotationY = 0;
+ this.lightObj.rotationZ = 0;
+ let lc = this.lightObj.addComponent(DirectLight);
+ lc.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ lc.intensity = 1.7;
+ this.scene.addChild(this.lightObj);
+ }
+
+ {
+ // Lambert
+ let sphere = new Object3D();
+ let mr = sphere.addComponent(MeshRenderer);
+ mr.geometry = new SphereGeometry(2.5, 30, 30);
+ let mat = new UnLitMaterial();
+ mat.baseColor = new Color(1, 1, 1);
+ mr.material = mat;
+ this.scene.addChild(sphere);
+ sphere.localPosition.set(0, 0, 0);
+ const GUIHelp = new dat.GUI();
+ GUIHelp.addColor({ color: [255, 255, 255] }, 'color').onChange((v) => {
+ mat.baseColor = new Color(...v.map((c) => c / 255));
+ });
+ }
+ }
+}
+
+new Sample_Materials().run();
diff --git a/docs/public/demos/materials/cullMode.ts b/docs/public/demos/materials/cullMode.ts
new file mode 100644
index 00000000..16ea30ec
--- /dev/null
+++ b/docs/public/demos/materials/cullMode.ts
@@ -0,0 +1,54 @@
+import { Engine3D, Vector3, Scene3D, Object3D, Camera3D, AtmosphericComponent, View3D, UnLitMaterial, MeshRenderer, OrbitController, PlaneGeometry, BitmapTexture2D, DirectLight, Color, GPUCullMode } from '@orillusion/core';
+
+await Engine3D.init();
+let scene = new Scene3D();
+let camera = new Object3D();
+camera.z = 3;
+scene.addChild(camera);
+let mainCamera = camera.addComponent(Camera3D);
+mainCamera.perspective(60, Engine3D.aspect, 0.1, 10000.0);
+let oribit = camera.addComponent(OrbitController);
+oribit.autoRotate = true;
+oribit.autoRotateSpeed = 1;
+
+// add a dir light
+let lightObj = new Object3D();
+lightObj.rotationX = -45;
+let light = lightObj.addComponent(DirectLight);
+light.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+light.intensity = 10;
+scene.addChild(lightObj);
+
+// add an Atmospheric sky enviroment
+scene.addComponent(AtmosphericComponent).sunY = 0.6;
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene;
+view.camera = mainCamera;
+// start render
+Engine3D.startRenderView(view);
+
+let texture = new BitmapTexture2D();
+await texture.load('https://cdn.orillusion.com/gltfs/cube/material_02.png');
+
+let mat = new UnLitMaterial();
+mat.baseMap = texture;
+mat.cullMode = GPUCullMode.none;
+let planeObj = new Object3D();
+let mr = planeObj.addComponent(MeshRenderer);
+mr.geometry = new PlaneGeometry(2, 2, 10, 10, Vector3.Z_AXIS);
+mr.material = mat;
+scene.addChild(planeObj);
+
+let select = document.createElement('select');
+select.innerHTML = `
+ Double
+ Front
+ Back
+ `;
+select.setAttribute('style', 'position:fixed;right:5px;top:5px');
+document.body.appendChild(select);
+
+select.addEventListener('change', () => {
+ mat.cullMode = GPUCullMode[select.value];
+});
diff --git a/docs/public/demos/materials/uv.ts b/docs/public/demos/materials/uv.ts
new file mode 100644
index 00000000..de647ab6
--- /dev/null
+++ b/docs/public/demos/materials/uv.ts
@@ -0,0 +1,86 @@
+import { Camera3D, CameraUtil, DirectLight, Engine3D, AtmosphericComponent, View3D, HoverCameraController, KelvinUtil, MeshRenderer, Object3D, PlaneGeometry, Scene3D, UnLitMaterial, webGPUContext, Vector4 } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+class Sample_UV {
+ lightObj: Object3D;
+ cameraObj: Camera3D;
+ scene: Scene3D;
+ hover: HoverCameraController;
+
+ constructor() {}
+
+ async run() {
+ await Engine3D.init({ canvasConfig: { alpha: false, zIndex: 0 } });
+ Engine3D.setting.shadow.debug = false;
+ Engine3D.setting.shadow.shadowBound = 5;
+
+ this.scene = new Scene3D();
+ // add an Atmospheric sky enviroment
+ this.scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ let camera = CameraUtil.createCamera3DObject(this.scene);
+ camera.perspective(60, webGPUContext.aspect, 0.01, 5000.0);
+
+ this.hover = camera.object3D.addComponent(HoverCameraController);
+ this.hover.setCamera(0, 0, 100);
+
+ // create a view with target scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = camera;
+ // start render
+ Engine3D.startRenderView(view);
+
+ await this.initScene();
+ }
+
+ async initScene() {
+ /******** sky *******/
+ {
+ this.scene.exposure = 1;
+ this.scene.roughness = 0.56;
+ }
+ /******** light *******/
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.rotationX = 57;
+ this.lightObj.rotationY = 347;
+ this.lightObj.rotationZ = 10;
+ let lc = this.lightObj.addComponent(DirectLight);
+ lc.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ lc.castShadow = true;
+ lc.intensity = 6;
+ this.scene.addChild(this.lightObj);
+ }
+
+ {
+ let tex = await Engine3D.res.loadTexture('https://cdn.orillusion.com/images/T_Fx_Object_229.webp');
+ let mat = new UnLitMaterial();
+ mat.baseMap = tex;
+
+ let uv = new Vector4(0, 0, 1, 1);
+ const GUIHelp = new dat.GUI();
+ GUIHelp.add(uv, 'x', -1, 1, 0.001).onChange(() => {
+ mat.setUniformVector4(`transformUV1`, uv);
+ });
+ GUIHelp.add(uv, 'y', -1, 1, 0.001).onChange(() => {
+ mat.setUniformVector4(`transformUV1`, uv);
+ });
+ GUIHelp.add(uv, 'z', -5, 5, 0.01).onChange(() => {
+ mat.setUniformVector4(`transformUV1`, uv);
+ });
+ GUIHelp.add(uv, 'w', -5, 5, 0.01).onChange(() => {
+ mat.setUniformVector4(`transformUV1`, uv);
+ });
+
+ let plane = new Object3D();
+ plane.rotationX = 90;
+ let mr = plane.addComponent(MeshRenderer);
+ mr.material = mat;
+ mr.geometry = new PlaneGeometry(100, 100, 1, 1);
+ this.scene.addChild(plane);
+ }
+ }
+}
+
+new Sample_UV().run();
diff --git a/docs/public/demos/media/chroma.ts b/docs/public/demos/media/chroma.ts
new file mode 100644
index 00000000..4eca645d
--- /dev/null
+++ b/docs/public/demos/media/chroma.ts
@@ -0,0 +1,50 @@
+import { Engine3D, Vector3, Scene3D, Object3D, Camera3D, View3D, MeshRenderer, HoverCameraController, PlaneGeometry, Color } from '@orillusion/core';
+import { VideoTexture, ChromaKeyMaterial } from '@orillusion/media-extention';
+import * as dat from 'dat.gui';
+
+await Engine3D.init();
+let scene = new Scene3D();
+let camera = new Object3D();
+scene.addChild(camera);
+let mainCamera = camera.addComponent(Camera3D);
+mainCamera.perspective(60, Engine3D.aspect, 0.1, 10000.0);
+let hc = camera.addComponent(HoverCameraController);
+hc.setCamera(0, 0, 2);
+
+// create a video texture
+let videoTexture = new VideoTexture();
+await videoTexture.load('https://cdn.orillusion.com/videos/chromakey.webm');
+// create a chromakey material
+let mat = new ChromaKeyMaterial();
+mat.baseMap = videoTexture;
+
+// set target color to filter the background
+mat.keyColor = new Color(0, 1, 0, 0);
+mat.colorCutoff = 0.06;
+mat.colorFeathering = 0.25;
+
+// create a 2D plane to play the video
+let planeObj = new Object3D();
+let mr = planeObj.addComponent(MeshRenderer);
+mr.geometry = new PlaneGeometry(2, 2, 10, 10, Vector3.Z_AXIS);
+mr.material = mat;
+scene.addChild(planeObj);
+
+let view = new View3D();
+view.scene = scene;
+view.camera = mainCamera;
+// start render
+Engine3D.startRenderView(view);
+
+let gui = new dat.GUI();
+let f = gui.addFolder('ChromaKey');
+f.addColor({ keyColor: [0, 255, 0] }, 'keyColor').onChange((v) => {
+ mat.keyColor = new Color(v[0] / 255, v[1] / 255, v[2] / 255);
+});
+f.add(mat, 'colorCutoff', 0, 1, 0.01);
+f.add(mat, 'colorFeathering', 0, 1, 0.01);
+f.add(mat, 'maskFeathering', 0, 1, 0.01);
+f.add(mat, 'sharpening', 0, 1, 0.01);
+f.add(mat, 'despoil', 0, 1, 0.01);
+f.add(mat, 'despoilLuminanceAdd', 0, 1, 0.01);
+f.open();
diff --git a/docs/public/demos/media/dynamic_audio.ts b/docs/public/demos/media/dynamic_audio.ts
new file mode 100644
index 00000000..656b04a8
--- /dev/null
+++ b/docs/public/demos/media/dynamic_audio.ts
@@ -0,0 +1,146 @@
+import { BoxGeometry, Camera3D, DirectLight, Engine3D, LitMaterial, KelvinUtil, MeshRenderer, Object3D, Scene3D, Vector3, Color, OrbitController, View3D, AtmosphericComponent } from '@orillusion/core';
+import { PositionAudio, AudioListener } from '@orillusion/media-extention';
+import * as dat from 'dat.gui';
+
+class Position_Audio {
+ lightObj: Object3D;
+ scene: Scene3D;
+ camera: Object3D;
+ mats: any[];
+ audio: PositionAudio;
+ private a = 40;
+ private b = 80;
+ private angle = 0;
+ constructor() {}
+
+ async run() {
+ Engine3D.setting.shadow.autoUpdate = true;
+ Engine3D.setting.shadow.updateFrameRate = 1;
+ Engine3D.setting.shadow.type = 'HARD';
+ Engine3D.setting.shadow.shadowSize = 2048;
+ Engine3D.setting.shadow.shadowBound = 250;
+ Engine3D.setting.shadow.shadowBias = 0.002;
+
+ await Engine3D.init({
+ renderLoop: this.loop.bind(this)
+ });
+ this.scene = new Scene3D();
+ this.scene.addComponent(AtmosphericComponent);
+
+ this.camera = new Object3D();
+ this.camera.localPosition = new Vector3(0, 20, 50);
+ let mainCamera = this.camera.addComponent(Camera3D);
+ this.scene.addChild(this.camera);
+
+ mainCamera.perspective(60, Engine3D.aspect, 0.1, 20000.0);
+ let orbit = this.camera.addComponent(OrbitController);
+ orbit.target = new Vector3(0, 4, 0);
+ orbit.minDistance = 10;
+ orbit.maxDistance = 200;
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+
+ Engine3D.startRenderView(view);
+ await this.initScene();
+ }
+
+ async initScene() {
+ {
+ let wall = new Object3D();
+ let mr = wall.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(40, 30, 1);
+ let mat = new LitMaterial();
+ mat.baseColor = new Color(1, 0, 0);
+ mr.material = mat;
+ this.scene.addChild(wall);
+ wall.z = -5;
+ }
+ {
+ let floor = new Object3D();
+ let mr = floor.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(3000, 1, 3000);
+ let mat = new LitMaterial();
+ mr.material = mat;
+ this.scene.addChild(floor);
+ }
+
+ /******** light *******/
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.rotationX = 35;
+ this.lightObj.rotationY = 110;
+ this.lightObj.rotationZ = 0;
+ let directLight = this.lightObj.addComponent(DirectLight);
+ directLight.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ directLight.castShadow = true;
+ directLight.intensity = 3;
+ this.scene.addChild(this.lightObj);
+ }
+ {
+ let [speaker, man, music] = await Promise.all([Engine3D.res.loadGltf('https://cdn.orillusion.com/gltfs/speaker/scene.gltf'), Engine3D.res.loadGltf('https://cdn.orillusion.com/gltfs/glb/CesiumMan.glb'), fetch('https://cdn.orillusion.com/audio.ogg').then((res) => res.arrayBuffer())]);
+ speaker.localScale.set(4, 4, 4);
+ speaker.rotationX = -120;
+ speaker.y = 0.5;
+ let group = new Object3D();
+ group.addChild(speaker);
+ group.y = 2;
+ this.scene.addChild(group);
+
+ man.name = 'man';
+ man.scaleX = 10;
+ man.scaleY = 10;
+ man.scaleZ = 10;
+ man.rotationX = -90;
+ man.rotationY = -90;
+ man.localPosition.set(0, 0.5, 30);
+ this.scene.addChild(man);
+
+ let listener = man.addComponent(AudioListener);
+ let audio = group.addComponent(PositionAudio);
+ audio.setLisenter(listener);
+ await audio.loadBuffer(music);
+ audio.refDistance = 10;
+ audio.maxDistance = 100;
+ audio.setDirectionalCone(180, 230, 0.1);
+ audio.showHelper();
+
+ let buttons = {
+ play: () => {
+ audio.play();
+ },
+ pause: () => {
+ audio.pause();
+ },
+ stop: () => {
+ audio.stop();
+ },
+ volume: 1,
+ 'Toggle Helper': () => {
+ audio.toggleHelper();
+ }
+ };
+ let gui = new dat.GUI();
+ gui.addFolder('Orillusion');
+ gui.add(buttons, 'play');
+ gui.add(buttons, 'pause');
+ gui.add(buttons, 'stop');
+ gui.add(buttons, 'volume', 0, 1, 0.01).onChange((v) => {
+ audio.setVolume(v);
+ });
+ gui.add(buttons, 'Toggle Helper');
+ }
+ }
+ loop() {
+ let man = this.scene.getChildByName('man') as Object3D;
+ if (man) {
+ this.angle += 0.005;
+ man.x = this.a * Math.cos(this.angle);
+ man.z = this.b * Math.sin(this.angle) + 30;
+ man.rotationY -= (0.005 * 180) / Math.PI;
+ }
+ }
+}
+
+new Position_Audio().run();
diff --git a/docs/public/demos/media/image.ts b/docs/public/demos/media/image.ts
new file mode 100644
index 00000000..28bec425
--- /dev/null
+++ b/docs/public/demos/media/image.ts
@@ -0,0 +1,51 @@
+import { Engine3D, Vector3, Scene3D, Object3D, Camera3D, MeshRenderer, HoverCameraController, PlaneGeometry, View3D, Color, Vector4 } from '@orillusion/core';
+import { ImageMaterial } from '@orillusion/media-extention';
+import * as dat from 'dat.gui';
+
+await Engine3D.init();
+let scene = new Scene3D();
+let camera = new Object3D();
+scene.addChild(camera);
+let mainCamera = camera.addComponent(Camera3D);
+mainCamera.perspective(60, Engine3D.aspect, 0.1, 10000.0);
+let hc = camera.addComponent(HoverCameraController);
+hc.setCamera(0, 0, 2);
+
+// create a 2D image texture
+let texture = await Engine3D.res.loadTexture('https://cdn.orillusion.com/gltfs/cube/material_02.png');
+// create a image material
+let mat = new ImageMaterial();
+mat.baseMap = texture;
+
+let gui = new dat.GUI();
+let f = gui.addFolder('Image');
+f.addColor({ baseColor: [255, 255, 255] }, 'baseColor').onChange((v) => {
+ mat.baseColor = new Color(v[0] / 255, v[1] / 255, v[2] / 255, 1);
+});
+let clip = new Vector4(0, 0, 0, 0);
+f.add(clip, 'x', 0, 1, 0.01)
+ .name('left')
+ .onChange(() => (mat.rectClip = clip));
+f.add(clip, 'y', 0, 1, 0.01)
+ .name('top')
+ .onChange(() => (mat.rectClip = clip));
+f.add(clip, 'z', 0, 1, 0.01)
+ .name('right')
+ .onChange(() => (mat.rectClip = clip));
+f.add(clip, 'w', 0, 1, 0.01)
+ .name('bottom')
+ .onChange(() => (mat.rectClip = clip));
+f.open();
+
+// create a 2D plane to show the image
+let planeObj = new Object3D();
+let mr = planeObj.addComponent(MeshRenderer);
+mr.geometry = new PlaneGeometry(2, 2, 10, 10, Vector3.Z_AXIS);
+mr.material = mat;
+scene.addChild(planeObj);
+
+let view = new View3D();
+view.scene = scene;
+view.camera = mainCamera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/media/static_audio.ts b/docs/public/demos/media/static_audio.ts
new file mode 100644
index 00000000..60da7baa
--- /dev/null
+++ b/docs/public/demos/media/static_audio.ts
@@ -0,0 +1,116 @@
+import { BoxGeometry, Camera3D, DirectLight, Engine3D, LitMaterial, KelvinUtil, MeshRenderer, Object3D, Scene3D, Vector3, Color, OrbitController, View3D, AtmosphericComponent } from '@orillusion/core';
+import { StaticAudio, AudioListener } from '@orillusion/media-extention';
+import * as dat from 'dat.gui';
+
+class Static_Audio {
+ lightObj: Object3D;
+ scene: Scene3D;
+ camera: Object3D;
+ mats: any[];
+ audio: StaticAudio;
+ constructor() {}
+
+ async run() {
+ Engine3D.setting.shadow.autoUpdate = true;
+ Engine3D.setting.shadow.updateFrameRate = 1;
+ Engine3D.setting.shadow.type = 'HARD';
+ Engine3D.setting.shadow.shadowSize = 2048;
+ Engine3D.setting.shadow.shadowBound = 200;
+ Engine3D.setting.shadow.shadowBias = 0.002;
+
+ await Engine3D.init();
+ this.scene = new Scene3D();
+ this.scene.addComponent(AtmosphericComponent);
+
+ this.camera = new Object3D();
+ this.camera.localPosition = new Vector3(0, 20, 50);
+ let mainCamera = this.camera.addComponent(Camera3D);
+ this.scene.addChild(this.camera);
+
+ mainCamera.perspective(60, Engine3D.aspect, 0.1, 20000.0);
+ let orbit = this.camera.addComponent(OrbitController);
+ orbit.target = new Vector3(0, 4, 0);
+ orbit.minDistance = 10;
+ orbit.maxDistance = 200;
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+
+ Engine3D.startRenderView(view);
+ await this.initScene();
+ }
+
+ async initScene() {
+ {
+ let wall = new Object3D();
+ let mr = wall.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(40, 30, 1);
+ let mat = new LitMaterial();
+ mat.baseColor = new Color(1, 0, 0);
+ mr.material = mat;
+ this.scene.addChild(wall);
+ wall.z = -5;
+ }
+ {
+ let floor = new Object3D();
+ let mr = floor.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(3000, 1, 3000);
+ let mat = new LitMaterial();
+ mr.material = mat;
+ this.scene.addChild(floor);
+ }
+
+ /******** light *******/
+ {
+ this.lightObj = new Object3D();
+ this.lightObj.rotationX = 35;
+ this.lightObj.rotationY = 110;
+ this.lightObj.rotationZ = 0;
+ let directLight = this.lightObj.addComponent(DirectLight);
+ directLight.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ directLight.castShadow = true;
+ directLight.intensity = 3;
+ this.scene.addChild(this.lightObj);
+ }
+ {
+ let group = new Object3D();
+ let speaker = await Engine3D.res.loadGltf('https://cdn.orillusion.com/gltfs/speaker/scene.gltf');
+ speaker.localScale.set(4, 4, 4);
+ speaker.rotationX = -120;
+ //speaker.y = 1.5
+ group.addChild(speaker);
+ group.y = 2;
+ this.scene.addChild(group);
+
+ let listener = this.camera.addComponent(AudioListener);
+ let audio = group.addComponent(StaticAudio);
+ audio.setLisenter(listener);
+
+ await audio.load('https://cdn.orillusion.com/audio.ogg');
+
+ let buttons = {
+ play: () => {
+ audio.play();
+ },
+ pause: () => {
+ audio.pause();
+ },
+ stop: () => {
+ audio.stop();
+ },
+ volume: 1
+ };
+ let gui = new dat.GUI();
+ gui.addFolder('Orillusion');
+ gui.add(buttons, 'play');
+ gui.add(buttons, 'pause');
+ gui.add(buttons, 'stop');
+ gui.add(buttons, 'volume', 0, 1, 0.01).onChange((v) => {
+ audio.setVolume(v);
+ });
+ }
+ }
+}
+
+new Static_Audio().run();
diff --git a/docs/public/demos/media/video.ts b/docs/public/demos/media/video.ts
new file mode 100644
index 00000000..5efaf1a9
--- /dev/null
+++ b/docs/public/demos/media/video.ts
@@ -0,0 +1,52 @@
+import { Engine3D, Vector3, Scene3D, Object3D, Camera3D, View3D, MeshRenderer, HoverCameraController, PlaneGeometry, Color, Vector4 } from '@orillusion/core';
+import { VideoTexture, VideoMaterial } from '@orillusion/media-extention';
+import * as dat from 'dat.gui';
+
+await Engine3D.init();
+let scene = new Scene3D();
+let camera = new Object3D();
+scene.addChild(camera);
+let mainCamera = camera.addComponent(Camera3D);
+mainCamera.perspective(60, Engine3D.aspect, 0.1, 10000.0);
+let hc = camera.addComponent(HoverCameraController);
+hc.setCamera(0, 0, 2);
+
+// create a video texture
+let videoTexture = new VideoTexture();
+await videoTexture.load('https://cdn.orillusion.com/videos/bunny.mp4');
+// create a video material
+let mat = new VideoMaterial();
+mat.baseMap = videoTexture;
+
+// create a 2D plane to play the video
+let planeObj = new Object3D();
+let mr = planeObj.addComponent(MeshRenderer);
+mr.geometry = new PlaneGeometry(2, (2 * 9) / 16, 1, 1, Vector3.Z_AXIS);
+mr.material = mat;
+scene.addChild(planeObj);
+
+let view = new View3D();
+view.scene = scene;
+view.camera = mainCamera;
+// start render
+Engine3D.startRenderView(view);
+
+let gui = new dat.GUI();
+let f = gui.addFolder('Video');
+f.addColor({ baseColor: [255, 255, 255] }, 'baseColor').onChange((v) => {
+ mat.baseColor = new Color(v[0] / 255, v[1] / 255, v[2] / 255, 1);
+});
+let clip = new Vector4(0, 0, 0, 0);
+f.add(clip, 'x', 0, 1, 0.01)
+ .name('left')
+ .onChange(() => (mat.rectClip = clip));
+f.add(clip, 'y', 0, 1, 0.01)
+ .name('top')
+ .onChange(() => (mat.rectClip = clip));
+f.add(clip, 'z', 0, 1, 0.01)
+ .name('right')
+ .onChange(() => (mat.rectClip = clip));
+f.add(clip, 'w', 0, 1, 0.01)
+ .name('bottom')
+ .onChange(() => (mat.rectClip = clip));
+f.open();
diff --git a/docs/public/demos/mesh/box.ts b/docs/public/demos/mesh/box.ts
new file mode 100644
index 00000000..7b392902
--- /dev/null
+++ b/docs/public/demos/mesh/box.ts
@@ -0,0 +1,39 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, LitMaterial, BoxGeometry, MeshRenderer, DirectLight, HoverCameraController, Color, Vector3, AtmosphericComponent, View3D } from '@orillusion/core';
+await Engine3D.init();
+let scene3D: Scene3D = new Scene3D();
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+let controller = camera.object3D.addComponent(HoverCameraController);
+controller.setCamera(0, 0, 15);
+scene3D.addChild(cameraObj);
+
+let light: Object3D = new Object3D();
+let component: DirectLight = light.addComponent(DirectLight);
+light.rotationX = 45;
+light.rotationY = 30;
+component.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+component.intensity = 1;
+scene3D.addChild(light);
+
+// create a object
+const obj: Object3D = new Object3D();
+// add MeshRenderer to the object
+let mr: MeshRenderer = obj.addComponent(MeshRenderer);
+// set a box geometry
+mr.geometry = new BoxGeometry(5, 2, 3);
+// set a pbr lit material
+mr.material = new LitMaterial();
+// set location and rotation
+obj.localPosition = new Vector3(0, 0, 0);
+obj.localRotation = new Vector3(0, 45, 0);
+scene3D.addChild(obj);
+
+// add an Atmospheric sky enviroment
+scene3D.addComponent(AtmosphericComponent).sunY = 0.6;
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/mesh/custom.ts b/docs/public/demos/mesh/custom.ts
new file mode 100644
index 00000000..757df796
--- /dev/null
+++ b/docs/public/demos/mesh/custom.ts
@@ -0,0 +1,64 @@
+import { View3D, PlaneGeometry, Engine3D, Scene3D, AtmosphericComponent, CameraUtil, HoverCameraController, Object3D, DirectLight, KelvinUtil, MeshRenderer, LitMaterial, VertexAttributeName, Time } from '@orillusion/core';
+
+// An sample of dynamically updating a geometry vertex attribute
+class Smaple_VertexAnimation {
+ // This geometry will dynamically update its vertex data over time
+ floorGeometry: PlaneGeometry;
+ scene: Scene3D;
+ async run() {
+ await Engine3D.init({ beforeRender: () => this.update() });
+
+ let view = new View3D();
+ view.scene = new Scene3D();
+ view.scene.addComponent(AtmosphericComponent);
+
+ this.scene = view.scene;
+ view.camera = CameraUtil.createCamera3DObject(view.scene, 'camera');
+ view.camera.perspective(60, Engine3D.aspect, 1, 2000);
+ view.camera.object3D.addComponent(HoverCameraController).setCamera(35, -20, 150);
+
+ Engine3D.startRenderView(view);
+
+ this.createScene();
+ }
+
+ private createScene() {
+ // add light
+ let lightObj3D = new Object3D();
+ let directLight = lightObj3D.addComponent(DirectLight);
+ directLight.intensity = 25;
+ directLight.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ directLight.castShadow = true;
+ lightObj3D.rotationX = 53.2;
+ lightObj3D.rotationY = 220;
+ lightObj3D.rotationZ = 5.58;
+ this.scene.addChild(lightObj3D);
+
+ // add floor
+ this.floorGeometry = new PlaneGeometry(100, 100, 199, 199);
+ let floor = new Object3D();
+ let renderer = floor.addComponent(MeshRenderer);
+ renderer.geometry = this.floorGeometry;
+ renderer.material = new LitMaterial();
+ renderer.castShadow = true;
+ renderer.receiveShadow = true;
+ this.scene.addChild(floor);
+ }
+
+ private update() {
+ if (this.floorGeometry) {
+ let posAttrData = this.floorGeometry.getAttribute(VertexAttributeName.position);
+ // update its vertex data over time
+ let timeOffset = Time.time;
+ for (let i = 0, count = posAttrData.data.length / 3; i < count; i++) {
+ posAttrData.data[i * 3 + 1] = Math.sin(timeOffset * 0.01 + i * 0.25);
+ }
+ // position attr need to be upload
+ this.floorGeometry.vertexBuffer.upload(VertexAttributeName.position, posAttrData);
+ //update normals
+ this.floorGeometry.computeNormals();
+ }
+ }
+}
+
+new Smaple_VertexAnimation().run();
diff --git a/docs/public/demos/mesh/cylinder.ts b/docs/public/demos/mesh/cylinder.ts
new file mode 100644
index 00000000..4d95e671
--- /dev/null
+++ b/docs/public/demos/mesh/cylinder.ts
@@ -0,0 +1,39 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, AtmosphericComponent, View3D, LitMaterial, CylinderGeometry, MeshRenderer, DirectLight, HoverCameraController, Color, Vector3 } from '@orillusion/core';
+await Engine3D.init();
+let scene3D: Scene3D = new Scene3D();
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+let controller = camera.object3D.addComponent(HoverCameraController);
+controller.setCamera(0, -15, 10);
+scene3D.addChild(cameraObj);
+
+let light: Object3D = new Object3D();
+let component: DirectLight = light.addComponent(DirectLight);
+light.rotationX = 45;
+light.rotationY = 30;
+component.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+component.intensity = 1;
+scene3D.addChild(light);
+
+// create a object
+const obj: Object3D = new Object3D();
+// add MeshRenderer to the object
+let mr: MeshRenderer = obj.addComponent(MeshRenderer);
+// set a cylinder geometry
+mr.geometry = new CylinderGeometry(1, 1, 1, 8, 8, false, 0, 2 * Math.PI);
+// set a pbr lit material for 3 sub-geometries
+let material = new LitMaterial();
+mr.materials = [material, material, material];
+// set location and rotation
+obj.localPosition = new Vector3(0, 0, 0);
+scene3D.addChild(obj);
+
+// add an Atmospheric sky enviroment
+scene3D.addComponent(AtmosphericComponent).sunY = 0.6;
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/mesh/extrude.ts b/docs/public/demos/mesh/extrude.ts
new file mode 100644
index 00000000..e39c6c38
--- /dev/null
+++ b/docs/public/demos/mesh/extrude.ts
@@ -0,0 +1,66 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, LitMaterial, MeshRenderer, DirectLight, HoverCameraController, Color, Vector3, AtmosphericComponent, View3D, ExtrudeGeometry, BitmapTexture2D, GPUCullMode } from '@orillusion/core';
+
+await Engine3D.init();
+let scene3D: Scene3D = new Scene3D();
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+let controller = camera.object3D.addComponent(HoverCameraController);
+controller.setCamera(0, 0, 40);
+scene3D.addChild(cameraObj);
+
+let light: Object3D = new Object3D();
+let component: DirectLight = light.addComponent(DirectLight);
+light.rotationX = 45;
+light.rotationY = 30;
+component.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+component.intensity = 1;
+scene3D.addChild(light);
+
+// create a object
+const obj: Object3D = new Object3D();
+// add MeshRenderer to the object
+let mr: MeshRenderer = obj.addComponent(MeshRenderer);
+
+// build shape
+let shape: Vector3[] = [],
+ vertexCount = 8,
+ shapeRadius = 1;
+for (let i = 0; i < vertexCount; i++) {
+ let angle = (Math.PI * 2 * i) / vertexCount;
+ let point = new Vector3(Math.sin(angle), 0, Math.cos(angle)).multiplyScalar(shapeRadius);
+ shape.push(point);
+}
+// build curve path
+let curve: Vector3[] = [],
+ sectionCount = 60,
+ modelRadius = 4;
+for (let i = 0; i < sectionCount; i++) {
+ let angle = (Math.PI * 2 * i) / 20;
+ modelRadius += (0.1 * i) / sectionCount;
+ let offsetY = 0.6 - Math.sqrt(i / sectionCount);
+ let point = new Vector3(Math.sin(angle), offsetY * 6, Math.cos(angle)).multiplyScalar(modelRadius);
+ curve.push(point);
+}
+
+// build ExtrudeGeometry from shape & curve
+mr.geometry = new ExtrudeGeometry().build(shape, true, curve, 0.2);
+// set a pbr lit material
+mr.material = new LitMaterial();
+let texture = new BitmapTexture2D();
+texture.addressModeU = 'repeat';
+texture.addressModeV = 'repeat';
+await texture.load('https://cdn.orillusion.com/textures/grid.webp');
+mr.material.baseMap = texture;
+mr.material.cullMode = GPUCullMode.none;
+
+scene3D.addChild(obj);
+
+// add an Atmospheric sky enviroment
+scene3D.addComponent(AtmosphericComponent).sunY = 0.6;
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/mesh/plane.ts b/docs/public/demos/mesh/plane.ts
new file mode 100644
index 00000000..faa8d3fc
--- /dev/null
+++ b/docs/public/demos/mesh/plane.ts
@@ -0,0 +1,41 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, AtmosphericComponent, View3D, LitMaterial, PlaneGeometry, MeshRenderer, DirectLight, HoverCameraController, Color, Vector3, GPUCullMode } from '@orillusion/core';
+await Engine3D.init();
+let scene3D: Scene3D = new Scene3D();
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+let controller = camera.object3D.addComponent(HoverCameraController);
+controller.setCamera(0, -15, 80);
+scene3D.addChild(cameraObj);
+
+let light: Object3D = new Object3D();
+let component: DirectLight = light.addComponent(DirectLight);
+light.rotationX = 45;
+light.rotationY = 30;
+component.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+component.intensity = 1;
+scene3D.addChild(light);
+
+// create a object
+const obj: Object3D = new Object3D();
+// add MeshRenderer to the object
+let mr: MeshRenderer = obj.addComponent(MeshRenderer);
+// set a plane geometry
+mr.geometry = new PlaneGeometry(20, 20);
+// set a pbr lit material
+mr.material = new LitMaterial();
+// render double side
+mr.material.cullMode = GPUCullMode.none;
+// set location and rotation
+obj.localPosition = new Vector3(0, 0, 0);
+obj.localRotation = new Vector3(0, 45, 0);
+scene3D.addChild(obj);
+
+// add an Atmospheric sky enviroment
+scene3D.addComponent(AtmosphericComponent).sunY = 0.6;
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/mesh/sphere.ts b/docs/public/demos/mesh/sphere.ts
new file mode 100644
index 00000000..ca8ecdd5
--- /dev/null
+++ b/docs/public/demos/mesh/sphere.ts
@@ -0,0 +1,38 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, AtmosphericComponent, View3D, LitMaterial, SphereGeometry, MeshRenderer, DirectLight, HoverCameraController, Color, Vector3 } from '@orillusion/core';
+await Engine3D.init();
+let scene3D: Scene3D = new Scene3D();
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+let controller = camera.object3D.addComponent(HoverCameraController);
+controller.setCamera(0, 0, 15);
+scene3D.addChild(cameraObj);
+
+let light: Object3D = new Object3D();
+let component: DirectLight = light.addComponent(DirectLight);
+light.rotationX = 45;
+light.rotationY = 30;
+component.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+component.intensity = 1;
+scene3D.addChild(light);
+
+// create a object
+const obj: Object3D = new Object3D();
+// add MeshRenderer to the object
+let mr: MeshRenderer = obj.addComponent(MeshRenderer);
+// set a box geometry
+mr.geometry = new SphereGeometry(2, 50, 50);
+// set a pbr lit material
+mr.material = new LitMaterial();
+// set location
+obj.localPosition = new Vector3(0, 0, 0);
+scene3D.addChild(obj);
+
+// add an Atmospheric sky enviroment
+scene3D.addComponent(AtmosphericComponent).sunY = 0.6;
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/mesh/torus.ts b/docs/public/demos/mesh/torus.ts
new file mode 100644
index 00000000..08b96af9
--- /dev/null
+++ b/docs/public/demos/mesh/torus.ts
@@ -0,0 +1,39 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, LitMaterial, BoxGeometry, MeshRenderer, DirectLight, HoverCameraController, Color, Vector3, AtmosphericComponent, View3D, TorusGeometry } from '@orillusion/core';
+await Engine3D.init();
+let scene3D: Scene3D = new Scene3D();
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+let controller = camera.object3D.addComponent(HoverCameraController);
+controller.setCamera(0, 0, 15);
+scene3D.addChild(cameraObj);
+
+let light: Object3D = new Object3D();
+let component: DirectLight = light.addComponent(DirectLight);
+light.rotationX = 45;
+light.rotationY = 30;
+component.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+component.intensity = 1;
+scene3D.addChild(light);
+
+// create a object
+const obj: Object3D = new Object3D();
+// add MeshRenderer to the object
+let mr: MeshRenderer = obj.addComponent(MeshRenderer);
+// set a box geometry
+mr.geometry = new TorusGeometry(3, 1, 32, 32);
+// set a pbr lit material
+mr.material = new LitMaterial();
+// set location and rotation
+obj.localPosition = new Vector3(0, 0, 0);
+obj.localRotation = new Vector3(90, 0, 0);
+scene3D.addChild(obj);
+
+// add an Atmospheric sky enviroment
+scene3D.addComponent(AtmosphericComponent).sunY = 0.6;
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/particle/GravityModifierModule.ts b/docs/public/demos/particle/GravityModifierModule.ts
new file mode 100644
index 00000000..542cede9
--- /dev/null
+++ b/docs/public/demos/particle/GravityModifierModule.ts
@@ -0,0 +1,65 @@
+import { Engine3D, AtmosphericComponent, Vector3, View3D, HoverCameraController, Object3D, PlaneGeometry, Scene3D, CameraUtil, webGPUContext, BoxGeometry, DEGREES_TO_RADIANS } from '@orillusion/core';
+
+import { ParticleSystem, ParticleMaterial, ParticleStandardSimulator, ParticleEmitterModule, ShapeType, EmitLocation, ParticleGravityModifierModule } from '@orillusion/particle';
+
+class Sample_OverLifeRotationModule {
+ async run() {
+ await Engine3D.init();
+
+ let scene = new Scene3D();
+ scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ let camera = CameraUtil.createCamera3DObject(scene);
+ camera.perspective(60, webGPUContext.aspect, 0.1, 5000.0);
+
+ let ctrl = camera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(45, -30, 80);
+
+ await this.initScene(scene);
+
+ let view = new View3D();
+ view.scene = scene;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+ }
+
+ async initScene(scene: Scene3D) {
+ // 创建实体对象
+ let obj = new Object3D();
+ obj.y = 10;
+ scene.addChild(obj);
+
+ // 添加粒子系统组件
+ let particleSystem = obj.addComponent(ParticleSystem);
+
+ // 设置粒子材质
+ let material = new ParticleMaterial();
+ material.baseMap = await Engine3D.res.loadTexture('https://cdn.orillusion.com/particle/fx_a_fragment_003.png');
+
+ // 设置粒子形状
+ particleSystem.geometry = new PlaneGeometry(1, 8, 1, 1, Vector3.Z_AXIS);
+ particleSystem.material = material;
+
+ // 使用指定仿真器
+ let simulator = particleSystem.useSimulator(ParticleStandardSimulator);
+
+ // 添加发射器模块
+ let emitter = simulator.addModule(ParticleEmitterModule);
+ emitter.maxParticle = 10000;
+ emitter.duration = 10;
+ emitter.emissionRate = 1000;
+ emitter.startLifecycle.setScalar(1);
+ emitter.shapeType = ShapeType.Circle;
+ emitter.radius = 60;
+ emitter.emitLocation = EmitLocation.Shell;
+
+ // 添加重力修改模块
+ let gravityModifier = simulator.addModule(ParticleGravityModifierModule);
+ gravityModifier.gravity = new Vector3(0, -9.8, 0);
+
+ // 开始播放
+ particleSystem.play();
+ }
+}
+
+new Sample_OverLifeRotationModule().run();
diff --git a/docs/public/demos/particle/OverLifeColorModule.ts b/docs/public/demos/particle/OverLifeColorModule.ts
new file mode 100644
index 00000000..ed4eb73a
--- /dev/null
+++ b/docs/public/demos/particle/OverLifeColorModule.ts
@@ -0,0 +1,71 @@
+import { Engine3D, AtmosphericComponent, Vector3, Vector4, View3D, Color, HoverCameraController, Object3D, PlaneGeometry, Scene3D, CameraUtil, webGPUContext, BoxGeometry, DEGREES_TO_RADIANS } from '@orillusion/core';
+
+import { ParticleSystem, ParticleMaterial, ParticleStandardSimulator, ParticleEmitterModule, ShapeType, EmitLocation, ParticleOverLifeColorModule } from '@orillusion/particle';
+
+class Sample_OverLifeRotationModule {
+ async run() {
+ await Engine3D.init();
+
+ let scene = new Scene3D();
+ scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ let camera = CameraUtil.createCamera3DObject(scene);
+ camera.perspective(60, webGPUContext.aspect, 0.1, 5000.0);
+
+ let ctrl = camera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(45, -15, 30);
+
+ await this.initScene(scene);
+
+ let view = new View3D();
+ view.scene = scene;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+ }
+
+ async initScene(scene: Scene3D) {
+ // 创建实体对象
+ let obj = new Object3D();
+ scene.addChild(obj);
+
+ // 添加粒子系统组件
+ let particleSystem = obj.addComponent(ParticleSystem);
+
+ // 设置粒子材质
+ let material = new ParticleMaterial();
+ material.baseMap = await Engine3D.res.loadTexture('https://cdn.orillusion.com/particle/fx_a_glow_003.png');
+
+ // 设置粒子形状
+ particleSystem.geometry = new PlaneGeometry(1, 1, 1, 1, Vector3.Z_AXIS);
+ particleSystem.material = material;
+
+ // 使用指定仿真器
+ let simulator = particleSystem.useSimulator(ParticleStandardSimulator);
+
+ // 添加发射器模块
+ let emitter = simulator.addModule(ParticleEmitterModule);
+ emitter.maxParticle = 1000;
+ emitter.duration = 10;
+ emitter.emissionRate = 100;
+ emitter.startLifecycle.setScalar(1);
+ emitter.shapeType = ShapeType.Circle;
+ emitter.radius = 10;
+ emitter.emitLocation = EmitLocation.Shell;
+
+ // 添加生命周期内颜色变换模块
+ let overLifeColorModule = simulator.addModule(ParticleOverLifeColorModule);
+ // 设置起始时颜色
+ overLifeColorModule.startColor = new Color(1, 1, 0);
+ // 设置起始时透明度
+ overLifeColorModule.startAlpha = 0.0;
+ // 设置结束时颜色
+ overLifeColorModule.endColor = new Color(0.1, 0.6, 1);
+ // 设置结束时透明度
+ overLifeColorModule.endAlpha = 1.0;
+
+ // 开始播放
+ particleSystem.play();
+ }
+}
+
+new Sample_OverLifeRotationModule().run();
diff --git a/docs/public/demos/particle/OverLifeRotationModule.ts b/docs/public/demos/particle/OverLifeRotationModule.ts
new file mode 100644
index 00000000..b97d4815
--- /dev/null
+++ b/docs/public/demos/particle/OverLifeRotationModule.ts
@@ -0,0 +1,63 @@
+import { Engine3D, AtmosphericComponent, Vector3, Vector4, View3D, HoverCameraController, Object3D, PlaneGeometry, Scene3D, CameraUtil, webGPUContext, BoxGeometry, DEGREES_TO_RADIANS } from '@orillusion/core';
+
+import { ParticleSystem, ParticleMaterial, ParticleStandardSimulator, ParticleEmitterModule, ShapeType, EmitLocation, ParticleOverLifeRotationModule } from '@orillusion/particle';
+
+class Sample_OverLifeRotationModule {
+ async run() {
+ await Engine3D.init();
+
+ let scene = new Scene3D();
+ scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ let camera = CameraUtil.createCamera3DObject(scene);
+ camera.perspective(60, webGPUContext.aspect, 0.1, 5000.0);
+
+ let ctrl = camera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(45, -15, 30);
+
+ await this.initScene(scene);
+
+ let view = new View3D();
+ view.scene = scene;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+ }
+
+ async initScene(scene: Scene3D) {
+ // 创建实体对象
+ let obj = new Object3D();
+ scene.addChild(obj);
+
+ // 添加粒子系统组件
+ let particleSystem = obj.addComponent(ParticleSystem);
+
+ // 设置粒子材质
+ let material = new ParticleMaterial();
+
+ // 设置粒子形状
+ particleSystem.geometry = new PlaneGeometry(1, 1, 1, 1, Vector3.Z_AXIS);
+ particleSystem.material = material;
+
+ // 使用指定仿真器
+ let simulator = particleSystem.useSimulator(ParticleStandardSimulator);
+
+ // 添加发射器模块
+ let emitter = simulator.addModule(ParticleEmitterModule);
+ emitter.maxParticle = 1000;
+ emitter.duration = 10;
+ emitter.emissionRate = 100;
+ emitter.startLifecycle.setScalar(1);
+ emitter.shapeType = ShapeType.Circle;
+ emitter.radius = 10;
+ emitter.emitLocation = EmitLocation.Shell;
+
+ // 添加生命周期内大小变换模块
+ let overLifeRotationModule = simulator.addModule(ParticleOverLifeRotationModule);
+ overLifeRotationModule.rotationSegments = [new Vector4(0, 0, 0), new Vector4(0, 0, 360 * DEGREES_TO_RADIANS)];
+
+ // 开始播放
+ particleSystem.play();
+ }
+}
+
+new Sample_OverLifeRotationModule().run();
diff --git a/docs/public/demos/particle/OverLifeScaleModule.ts b/docs/public/demos/particle/OverLifeScaleModule.ts
new file mode 100644
index 00000000..de5a8b32
--- /dev/null
+++ b/docs/public/demos/particle/OverLifeScaleModule.ts
@@ -0,0 +1,64 @@
+import { Engine3D, AtmosphericComponent, Vector3, Vector4, View3D, HoverCameraController, Object3D, PlaneGeometry, Scene3D, CameraUtil, webGPUContext } from '@orillusion/core';
+
+import { ParticleSystem, ParticleMaterial, ParticleStandardSimulator, ParticleEmitterModule, ShapeType, EmitLocation, ParticleOverLifeScaleModule } from '@orillusion/particle';
+
+class Sample_OverLifeScaleModule {
+ async run() {
+ await Engine3D.init();
+
+ let scene = new Scene3D();
+ scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ let camera = CameraUtil.createCamera3DObject(scene);
+ camera.perspective(60, webGPUContext.aspect, 0.1, 5000.0);
+
+ let ctrl = camera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(45, -15, 30);
+
+ await this.initScene(scene);
+
+ let view = new View3D();
+ view.scene = scene;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+ }
+
+ async initScene(scene: Scene3D) {
+ // 创建实体对象
+ let obj = new Object3D();
+ scene.addChild(obj);
+
+ // 添加粒子系统组件
+ let particleSystem = obj.addComponent(ParticleSystem);
+
+ // 设置粒子材质
+ let material = new ParticleMaterial();
+ material.baseMap = await Engine3D.res.loadTexture('https://cdn.orillusion.com/particle/fx_a_glow_003.png');
+
+ // 设置粒子形状
+ particleSystem.geometry = new PlaneGeometry(1, 1, 1, 1, Vector3.Z_AXIS);
+ particleSystem.material = material;
+
+ // 使用指定仿真器
+ let simulator = particleSystem.useSimulator(ParticleStandardSimulator);
+
+ // 添加发射器模块
+ let emitter = simulator.addModule(ParticleEmitterModule);
+ emitter.maxParticle = 1000;
+ emitter.duration = 10;
+ emitter.emissionRate = 100;
+ emitter.startLifecycle.setScalar(1);
+ emitter.shapeType = ShapeType.Circle;
+ emitter.radius = 10;
+ emitter.emitLocation = EmitLocation.Shell;
+
+ // 添加生命周期内大小变换模块
+ let overLifeScaleModule = simulator.addModule(ParticleOverLifeScaleModule);
+ overLifeScaleModule.scaleSegments = [new Vector4(1, 1, 1), new Vector4(3, 3, 3)];
+
+ // 开始播放
+ particleSystem.play();
+ }
+}
+
+new Sample_OverLifeScaleModule().run();
diff --git a/docs/public/demos/particle/ParticleEmitter.ts b/docs/public/demos/particle/ParticleEmitter.ts
new file mode 100644
index 00000000..f5bdc4a1
--- /dev/null
+++ b/docs/public/demos/particle/ParticleEmitter.ts
@@ -0,0 +1,59 @@
+import { Engine3D, AtmosphericComponent, Vector3, View3D, HoverCameraController, Object3D, PlaneGeometry, Scene3D, CameraUtil, webGPUContext } from '@orillusion/core';
+import { ParticleSystem, ParticleMaterial, ParticleStandardSimulator, ParticleEmitterModule, ShapeType, EmitLocation } from '@orillusion/particle';
+
+class Sample_ParticleEmitter {
+ async run() {
+ await Engine3D.init();
+
+ let scene = new Scene3D();
+ scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ let camera = CameraUtil.createCamera3DObject(scene);
+ camera.perspective(60, webGPUContext.aspect, 0.1, 5000.0);
+
+ let ctrl = camera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(45, -15, 30);
+
+ await this.initScene(scene);
+
+ let view = new View3D();
+ view.scene = scene;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+ }
+
+ async initScene(scene: Scene3D) {
+ // 创建实体对象
+ let obj = new Object3D();
+ scene.addChild(obj);
+
+ // 添加粒子系统组件
+ let particleSystem = obj.addComponent(ParticleSystem);
+
+ // 设置粒子材质
+ let material = new ParticleMaterial();
+ material.baseMap = await Engine3D.res.loadTexture('https://cdn.orillusion.com/particle/fx_a_glow_003.png');
+
+ // 设置粒子形状
+ particleSystem.geometry = new PlaneGeometry(1, 1, 1, 1, Vector3.Z_AXIS);
+ particleSystem.material = material;
+
+ // 使用指定仿真器
+ let simulator = particleSystem.useSimulator(ParticleStandardSimulator);
+
+ // 添加发射器模块
+ let emitter = simulator.addModule(ParticleEmitterModule);
+ emitter.maxParticle = 1 * 10000;
+ emitter.duration = 10;
+ emitter.emissionRate = 1000;
+ emitter.startLifecycle.setScalar(1);
+ emitter.shapeType = ShapeType.Box;
+ emitter.boxSize = new Vector3(10, 10, 10);
+ emitter.emitLocation = EmitLocation.Edge;
+
+ // 开始播放
+ particleSystem.play();
+ }
+}
+
+new Sample_ParticleEmitter().run();
diff --git a/docs/public/demos/particle/ParticleSystem.ts b/docs/public/demos/particle/ParticleSystem.ts
new file mode 100644
index 00000000..e4df491d
--- /dev/null
+++ b/docs/public/demos/particle/ParticleSystem.ts
@@ -0,0 +1,60 @@
+import { Engine3D, AtmosphericComponent, Vector3, View3D, HoverCameraController, Object3D, PlaneGeometry, Scene3D, CameraUtil, webGPUContext } from '@orillusion/core';
+
+import { ParticleSystem, ParticleMaterial, ParticleStandardSimulator, ParticleEmitterModule, ShapeType, EmitLocation } from '@orillusion/particle';
+
+class Sample_ParticleSystem {
+ async run() {
+ await Engine3D.init();
+
+ let scene = new Scene3D();
+ scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ let camera = CameraUtil.createCamera3DObject(scene);
+ camera.perspective(60, webGPUContext.aspect, 0.1, 5000.0);
+
+ let ctrl = camera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(45, -15, 30);
+
+ await this.initScene(scene);
+
+ let view = new View3D();
+ view.scene = scene;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+ }
+
+ async initScene(scene: Scene3D) {
+ // 创建实体对象
+ let obj = new Object3D();
+ scene.addChild(obj);
+
+ // 添加粒子系统组件
+ let particleSystem = obj.addComponent(ParticleSystem);
+
+ // 设置粒子材质
+ let material = new ParticleMaterial();
+ material.baseMap = await Engine3D.res.loadTexture('https://cdn.orillusion.com/particle/fx_a_glow_003.png');
+
+ // 设置粒子形状
+ particleSystem.geometry = new PlaneGeometry(1, 1, 1, 1, Vector3.Z_AXIS);
+ particleSystem.material = material;
+
+ // 使用指定仿真器
+ let simulator = particleSystem.useSimulator(ParticleStandardSimulator);
+
+ // 添加发射器模块
+ let emitter = simulator.addModule(ParticleEmitterModule);
+ emitter.maxParticle = 1 * 10000;
+ emitter.duration = 10;
+ emitter.emissionRate = 1000;
+ emitter.startLifecycle.setScalar(1);
+ emitter.shapeType = ShapeType.Sphere;
+ emitter.radius = 10;
+ emitter.emitLocation = EmitLocation.Shell;
+
+ // 开始播放
+ particleSystem.play();
+ }
+}
+
+new Sample_ParticleSystem().run();
diff --git a/docs/public/demos/particle/TextureSheetModule.ts b/docs/public/demos/particle/TextureSheetModule.ts
new file mode 100644
index 00000000..1ec3f064
--- /dev/null
+++ b/docs/public/demos/particle/TextureSheetModule.ts
@@ -0,0 +1,73 @@
+import { Engine3D, AtmosphericComponent, Vector3, View3D, HoverCameraController, Object3D, PlaneGeometry, Scene3D, CameraUtil, webGPUContext } from '@orillusion/core';
+
+import { ParticleSystem, ParticleMaterial, ParticleStandardSimulator, ParticleEmitterModule, ShapeType, EmitLocation, ParticleTextureSheetModule } from '@orillusion/particle';
+
+class Sample_OverLifeRotationModule {
+ async run() {
+ await Engine3D.init();
+
+ let scene = new Scene3D();
+ scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ let camera = CameraUtil.createCamera3DObject(scene);
+ camera.perspective(60, webGPUContext.aspect, 0.1, 5000.0);
+
+ let ctrl = camera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(45, -15, 5);
+
+ await this.initScene(scene);
+
+ let view = new View3D();
+ view.scene = scene;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+ }
+
+ async initScene(scene: Scene3D) {
+ // 创建实体对象
+ let obj = new Object3D();
+ scene.addChild(obj);
+
+ // 添加粒子系统组件
+ let particleSystem = obj.addComponent(ParticleSystem);
+
+ // 设置粒子材质
+ let material = new ParticleMaterial();
+ material.baseMap = await Engine3D.res.loadTexture('https://cdn.orillusion.com/particle/crystal_debug.png');
+
+ // 设置粒子形状
+ particleSystem.geometry = new PlaneGeometry(1, 1, 1, 1, Vector3.Z_AXIS);
+ particleSystem.material = material;
+
+ // 使用指定仿真器
+ let simulator = particleSystem.useSimulator(ParticleStandardSimulator);
+
+ // 添加发射器模块
+ let emitter = simulator.addModule(ParticleEmitterModule);
+ emitter.maxParticle = 1000;
+ emitter.duration = 10;
+ emitter.emissionRate = 10;
+ emitter.startLifecycle.setScalar(1);
+ emitter.shapeType = ShapeType.Circle;
+ emitter.radius = 2.0;
+ emitter.emitLocation = EmitLocation.Shell;
+
+ // 添加纹理图集模块
+ let sheetModule = simulator.addModule(ParticleTextureSheetModule);
+ // 设置每列包含多少个子块
+ sheetModule.clipCol = 4;
+ // 设置整张纹理总共包含多少个子块
+ sheetModule.totalClip = 4 * 4;
+ // 设置整张纹理的宽度
+ sheetModule.textureWidth = material.baseMap.width;
+ // 设置整张纹理的高度
+ sheetModule.textureHeight = material.baseMap.height;
+ // 设置纹理动画播放速率
+ sheetModule.playRate = 10.0;
+
+ // 开始播放
+ particleSystem.play();
+ }
+}
+
+new Sample_OverLifeRotationModule().run();
diff --git a/docs/public/demos/particle/particleAnim.ts b/docs/public/demos/particle/particleAnim.ts
new file mode 100644
index 00000000..326ac9b1
--- /dev/null
+++ b/docs/public/demos/particle/particleAnim.ts
@@ -0,0 +1,74 @@
+// import {
+// Engine3D, PostProcessingComponent, AtmosphericComponent, Vector3, View3D, HoverCameraController, Object3D, PlaneGeometry, Scene3D, CameraUtil, webGPUContext, ParticleSystem, ParticleMaterial, ParticleStandSimulator, ParticleEmitModule, ShapeType, EmitLocation, ParticleGravityModifierModule, ParticleOverLifeColorModule, Vector4, BlendMode,
+// } from '@orillusion/core';
+
+// class Sample_ParticleAnim {
+// async run() {
+// await Engine3D.init();
+
+// let scene = new Scene3D();
+// scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+// let mainCamera = CameraUtil.createCamera3DObject(scene);
+// mainCamera.perspective(60, webGPUContext.aspect, 0.1, 5000.0);
+
+// let ctrl = mainCamera.object3D.addComponent(HoverCameraController);
+// ctrl.setCamera(45, -20, 30, new Vector3(0, 15, 51));
+
+// await this.initScene(scene);
+
+// let view = new View3D();
+// view.scene = scene;
+// view.camera = mainCamera;
+// Engine3D.startRenderView(view);
+
+// let postProcessing = scene.addComponent(PostProcessingComponent);
+// }
+
+// async initScene(scene: Scene3D) {
+// // 创建实体对象
+// let obj = new Object3D();
+// obj.x = 0;
+// obj.y = 15;
+// obj.z = 51;
+// scene.addChild(obj);
+
+// // 添加粒子系统组件
+// let particleSystem = obj.addComponent(ParticleSystem);
+
+// // 设置粒子材质
+// let material = new ParticleMaterial();
+// material.baseMap = await Engine3D.res.loadTexture('https://cdn.orillusion.com/particle/fx_a_glow_003.png');
+
+// // 设置粒子形状
+// particleSystem.geometry = new PlaneGeometry(5, 5, 1, 1, Vector3.Z_AXIS);
+// particleSystem.material = material;
+
+// // 使用指定仿真器
+// let simulator = particleSystem.useSimulator(ParticleStandSimulator);
+
+// // 添加发射器模块
+// let emitter = simulator.addModule(ParticleEmitModule);
+// emitter.maxParticle = 1 * 10000;
+// emitter.duration = 10;
+// emitter.emissionRate = 50;
+// emitter.startLifecycle.setScalar(1);
+// emitter.shapeType = ShapeType.Box;
+// emitter.radius = 10;
+// emitter.emitLocation = EmitLocation.Shell;
+// emitter.boxSize = new Vector3(1, 0, 1);
+
+// // 添加重力修改模块
+// simulator.addModule(ParticleGravityModifierModule).gravity = new Vector3(0, 0.2, 0);
+
+// // 添加生命周期色彩模块
+// simulator.addModule(ParticleOverLifeColorModule).colorSegments = [
+// new Vector4(1, 0.3, 0, 1), new Vector4(0, 0.6, 1, 0)
+// ];
+
+// // 开始播放
+// particleSystem.play();
+// }
+// }
+
+// new Sample_ParticleAnim().run();
diff --git a/docs/public/demos/performance/stats.ts b/docs/public/demos/performance/stats.ts
new file mode 100644
index 00000000..626a25ac
--- /dev/null
+++ b/docs/public/demos/performance/stats.ts
@@ -0,0 +1,40 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, View3D, LitMaterial, AtmosphericComponent, BoxGeometry, MeshRenderer, DirectLight, HoverCameraController, Color, ComponentBase } from '@orillusion/core';
+import { Stats } from '@orillusion/stats';
+
+class RotateScript extends ComponentBase {
+ protected update() {
+ this.object3D.rotationY += 1;
+ }
+}
+
+await Engine3D.init();
+let scene3D = new Scene3D();
+// add a default skybox
+scene3D.addComponent(AtmosphericComponent);
+// add the performance stats panel
+scene3D.addComponent(Stats);
+
+let cameraObj = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+cameraObj.addComponent(HoverCameraController);
+scene3D.addChild(cameraObj);
+
+let light: Object3D = new Object3D();
+let component = light.addComponent(DirectLight);
+component.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+component.intensity = 1;
+scene3D.addChild(light);
+
+const obj = new Object3D();
+let mr = obj.addComponent(MeshRenderer);
+mr.geometry = new BoxGeometry(5, 5, 5);
+mr.material = new LitMaterial();
+
+obj.addComponent(RotateScript);
+scene3D.addChild(obj);
+
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/physics/areaDetection.ts b/docs/public/demos/physics/areaDetection.ts
new file mode 100644
index 00000000..d4916895
--- /dev/null
+++ b/docs/public/demos/physics/areaDetection.ts
@@ -0,0 +1,104 @@
+import { Engine3D, Object3D, Scene3D, View3D, Vector3, AtmosphericComponent, DirectLight, CameraUtil, HoverCameraController, MeshRenderer, LitMaterial, Color, BoxGeometry, BitmapTexture2D, BlendMode, SphereGeometry, GridObject } from "@orillusion/core";
+import { Physics, Rigidbody, CollisionShapeUtil, ActivationState, GhostTrigger } from "@orillusion/physics";
+
+class Sample_AreaDetection {
+ async run() {
+ // Initialize physics and engine
+ await Physics.init();
+ await Engine3D.init({ renderLoop: () => Physics.update() });
+
+ let scene = new Scene3D();
+
+ let camera = CameraUtil.createCamera3DObject(scene);
+ camera.perspective(60, Engine3D.aspect, 0.1, 800.0);
+ camera.object3D.addComponent(HoverCameraController).setCamera(0, -25, 50);
+
+ // Create directional light
+ let lightObj3D = new Object3D();
+ lightObj3D.localRotation = new Vector3(151, -39, -35);
+ lightObj3D.addComponent(DirectLight).castShadow = true;
+ scene.addChild(lightObj3D);
+
+ // Initialize sky
+ scene.addComponent(AtmosphericComponent).sunY = 0.6;
+
+ let view = new View3D();
+ view.camera = camera;
+ view.scene = scene;
+
+ Engine3D.startRenderView(view);
+
+ this.createGround(scene);
+ this.createBall(scene);
+ await this.createGhostTrigger(scene);
+ }
+
+ createGround(scene: Scene3D) {
+ let obj = new GridObject(50, 5);
+ scene.addChild(obj);
+
+ // add rigidbody to ground
+ let rb = obj.addComponent(Rigidbody);
+ rb.shape = CollisionShapeUtil.createBoxShape(obj);
+ rb.mass = 0;
+ }
+
+ createBall(scene: Scene3D) {
+ const ball = new Object3D();
+ let mr = ball.addComponent(MeshRenderer);
+ mr.geometry = new SphereGeometry(0.7, 32, 32);
+ mr.material = new LitMaterial();
+
+ ball.y = 20;
+ scene.addChild(ball);
+
+ // add rigidbody to ball
+ let rigidbody = ball.addComponent(Rigidbody);
+ rigidbody.shape = CollisionShapeUtil.createSphereShape(ball);
+ rigidbody.mass = 1;
+ rigidbody.restitution = 1.98; // set high elasticity
+ rigidbody.activationState = ActivationState.DISABLE_DEACTIVATION;
+ }
+
+ async createGhostTrigger(scene: Scene3D) {
+ const obj = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(10, 5, 10);
+ let material = new LitMaterial();
+
+ const baseColor = new Color(0, 1, 0.5, 1.0);
+ material.baseColor = baseColor;
+ material.transparent = true;
+ material.cullMode = 'none';
+ // material.depthCompare = 'always';
+ material.blendMode = BlendMode.ADD;
+
+ let texture = new BitmapTexture2D();
+ await texture.load('https://cdn.orillusion.com/textures/grid.webp');
+
+ material.baseMap = texture;
+ mr.material = material;
+
+ obj.y = 10;
+ scene.addChild(obj);
+
+ let ghostTrigger = obj.addComponent(GhostTrigger);
+ ghostTrigger.shape = CollisionShapeUtil.createBoxShape(obj);
+
+ // ghost collision event to change color
+ let timer: number | null = null;
+ ghostTrigger.collisionEvent = (contactPoint, selfBody, otherBody) => {
+ if (timer !== null) clearTimeout(timer);
+ else material.baseColor = new Color(Color.SALMON);
+
+ timer = setTimeout(() => {
+ material.baseColor = baseColor;
+ timer = null;
+ }, 100);
+ }
+
+ }
+
+}
+
+new Sample_AreaDetection().run();
diff --git a/docs/public/demos/physics/demo1.ts b/docs/public/demos/physics/demo1.ts
new file mode 100644
index 00000000..b139e72b
--- /dev/null
+++ b/docs/public/demos/physics/demo1.ts
@@ -0,0 +1,75 @@
+import { BoxColliderShape, BoxGeometry, Camera3D, AtmosphericComponent, ColliderComponent, Color, DirectLight, Engine3D, View3D, LitMaterial, HoverCameraController, MeshRenderer, Object3D, PlaneGeometry, Scene3D, Vector2, Vector3 } from '@orillusion/core';
+import { Physics, Rigidbody } from '@orillusion/physics';
+
+class Sample_box {
+ async run() {
+ await Physics.init();
+ // Init Engine3D
+ await Engine3D.init({
+ canvasConfig: { devicePixelRatio: 1 },
+ renderLoop: () => {
+ if (Physics.isInited) {
+ Physics.update();
+ }
+ }
+ });
+ let scene3D = new Scene3D();
+ scene3D.addComponent(AtmosphericComponent);
+ let cameraObj = new Object3D();
+ let mainCamera = cameraObj.addComponent(Camera3D);
+ mainCamera.perspective(60, Engine3D.aspect, 1, 5000.0);
+ let controller = mainCamera.object3D.addComponent(HoverCameraController);
+ controller.setCamera(45, -15, 200, new Vector3(0, 50, 0));
+ scene3D.addChild(cameraObj);
+
+ let light: Object3D = new Object3D();
+ let component = light.addComponent(DirectLight);
+ light.rotationX = 45;
+ light.rotationY = 30;
+ component.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+ component.intensity = 5;
+ scene3D.addChild(light);
+
+ this.addPlane(scene3D, new Vector2(100, 100), new Vector3(0, 0, 0), new Vector3(0, 0, 0));
+ const obj = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(5, 5, 5);
+ mr.material = new LitMaterial();
+ mr.material.baseColor = new Color(Math.random(), Math.random(), Math.random(), 1.0);
+ obj.y = 100;
+ obj.rotationX = Math.random() * 360;
+ // add a Rigidbody with mass to the box
+ let rigidbody = obj.addComponent(Rigidbody);
+ rigidbody.mass = 10;
+ // add a box collider shape to the box
+ let collider = obj.addComponent(ColliderComponent);
+ collider.shape = new BoxColliderShape();
+ collider.shape.size = new Vector3(5, 5, 5);
+ scene3D.addChild(obj);
+
+ let view = new View3D();
+ view.scene = scene3D;
+ view.camera = mainCamera;
+ // start render
+ Engine3D.startRenderView(view);
+ }
+ addPlane(scene: Scene3D, size: Vector2, pos: Vector3, rot: Vector3) {
+ const obj = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.geometry = new PlaneGeometry(size.x, size.y);
+ mr.material = new LitMaterial();
+ mr.material.baseColor = new Color(0.04, 0.42, 0.45, 1);
+ obj.localPosition = pos;
+ obj.localRotation = rot;
+ // add a Rigidbody with no mass, static body
+ let rigidbody = obj.addComponent(Rigidbody);
+ rigidbody.mass = 0;
+ // add a box collider shape with small y value
+ let collider = obj.addComponent(ColliderComponent);
+ collider.shape = new BoxColliderShape();
+ collider.shape.size = new Vector3(size.x, 0.1, size.y);
+ scene.addChild(obj);
+ }
+}
+
+new Sample_box().run();
diff --git a/docs/public/demos/physics/shapes.ts b/docs/public/demos/physics/shapes.ts
new file mode 100644
index 00000000..4252f710
--- /dev/null
+++ b/docs/public/demos/physics/shapes.ts
@@ -0,0 +1,230 @@
+import { Engine3D, LitMaterial, MeshRenderer, BoxGeometry, Object3D, Scene3D, View3D, Object3DUtil, Vector3, AtmosphericComponent, DirectLight, SphereGeometry, CameraUtil, HoverCameraController, BitmapTexture2D, Color, CylinderGeometry, TorusGeometry, ComponentBase } from "@orillusion/core";
+import { TerrainGeometry } from "@orillusion/geometry";
+import { Ammo, CollisionShapeUtil, Physics, Rigidbody } from "@orillusion/physics";
+
+class Sample_MultipleShapes {
+ scene: Scene3D;
+ terrain: Object3D;
+ gui: dat.GUI;
+
+ async run() {
+ // init physics and engine
+ await Physics.init({ useDrag: true });
+ await Engine3D.init({
+ renderLoop: () => Physics.update()
+ });
+
+ // shadow settings
+ Engine3D.setting.shadow.shadowBias = 0.01;
+ Engine3D.setting.shadow.shadowSize = 1024 * 4;
+ Engine3D.setting.shadow.csmMargin = 0.1;
+ Engine3D.setting.shadow.csmScatteringExp = 0.8;
+ Engine3D.setting.shadow.csmAreaScale = 0.1;
+ Engine3D.setting.shadow.updateFrameRate = 1;
+
+ this.scene = new Scene3D();
+
+ // Setup camera
+ let camera = CameraUtil.createCamera3DObject(this.scene);
+ camera.perspective(60, Engine3D.aspect, 0.1, 800.0);
+ camera.enableCSM = true;
+
+ let hoverCtrl = camera.object3D.addComponent(HoverCameraController);
+ hoverCtrl.setCamera(0, -25, 100);
+ hoverCtrl.dragSmooth = 4;
+
+ // Create directional light
+ let lightObj3D = new Object3D();
+ lightObj3D.localRotation = new Vector3(-35, -143, 92);
+
+ let light = lightObj3D.addComponent(DirectLight);
+ light.lightColor = Color.COLOR_WHITE;
+ light.castShadow = true;
+ light.intensity = 2.2;
+ this.scene.addChild(light.object3D);
+
+ // init sky
+ let atmosphericSky = this.scene.addComponent(AtmosphericComponent);
+ atmosphericSky.sunY = 0.6;
+
+ // Setup view
+ let view = new View3D();
+ view.camera = camera;
+ view.scene = this.scene;
+
+ Engine3D.startRenderView(view);
+
+ // init terrain and create static planes
+ await this.initTerrain();
+ this.createStaticPlanes();
+
+ this.scene.addComponent(BoxGenerator);
+ }
+
+ async initTerrain() {
+ // Load textures
+ let bitmapTexture = await Engine3D.res.loadTexture('https://cdn.orillusion.com/terrain/test01/bitmap.png');
+ let heightTexture = await Engine3D.res.loadTexture('https://cdn.orillusion.com/terrain/test01/height.png');
+
+ const width = 100;
+ const height = 100;
+ const terrainMaxHeight = 60;
+ const segment = 60
+
+ // Create terrain geometry
+ let terrainGeometry = new TerrainGeometry(width, height, segment, segment);
+ terrainGeometry.setHeight(heightTexture as BitmapTexture2D, terrainMaxHeight);
+
+ let terrain = new Object3D();
+ let mr = terrain.addComponent(MeshRenderer);
+ mr.geometry = terrainGeometry;
+
+ let mat = new LitMaterial();
+ mat.baseMap = bitmapTexture;
+ mat.metallic = 0;
+ mat.roughness = 1.3;
+ mr.material = mat;
+
+ this.terrain = terrain;
+ this.scene.addChild(terrain);
+
+ // Add rigidbody to terrain
+ let terrainRb = terrain.addComponent(Rigidbody);
+ terrainRb.shape = Rigidbody.collisionShape.createHeightfieldTerrainShape(terrain);
+ terrainRb.mass = 0; // Static rigidbody
+ terrainRb.margin = 0.05;
+ terrainRb.isDisableDebugVisible = true;
+ terrainRb.friction = 1;
+ }
+
+ // Create static planes for boundaries
+ createStaticPlanes() {
+ // Create bottom static plane
+ let staticFloorBottom = Object3DUtil.GetPlane(Engine3D.res.whiteTexture);
+ staticFloorBottom.y = -500;
+ staticFloorBottom.transform.enable = false;
+ this.scene.addChild(staticFloorBottom);
+
+ let bottomRb = staticFloorBottom.addComponent(Rigidbody);
+ bottomRb.shape = CollisionShapeUtil.createStaticPlaneShape();
+ bottomRb.mass = 0;
+
+ // Create top static plane
+ let staticFloorTop = Object3DUtil.GetPlane(Engine3D.res.whiteTexture);
+ staticFloorTop.y = 100;
+ staticFloorTop.transform.enable = false;
+ this.scene.addChild(staticFloorTop);
+
+ let topRb = staticFloorTop.addComponent(Rigidbody);
+ topRb.shape = CollisionShapeUtil.createStaticPlaneShape(Vector3.DOWN);
+ topRb.mass = 0;
+ }
+}
+
+class BoxGenerator extends ComponentBase {
+ private lastTime: number = performance.now(); // Save last time
+
+ public container: Object3D;
+ public interval: number = 1000; // Interval for adding shapes
+ public totalShapes: number = 30; // Maximum number of shapes
+
+ async start() {
+ this.container = new Object3D();
+ this.object3D.addChild(this.container);
+ }
+
+ // Update loop
+ public onUpdate(): void {
+ let now: number = performance.now();
+ if (now - this.lastTime > this.interval) {
+ if (this.container.numChildren >= this.totalShapes) {
+ let index = Math.floor(now / this.interval) % this.totalShapes;
+ let shapeObject = this.container.getChildByIndex(index) as Object3D;
+ shapeObject.localPosition.set(Math.random() * 60 - 60 / 2, 40, Math.random() * 60 - 60 / 2);
+ shapeObject.getComponent(Rigidbody).updateTransform(shapeObject.localPosition, null, true);
+ } else {
+ this.addRandomShape();
+ }
+ this.lastTime = now; // Save current time
+ }
+ }
+
+ private addRandomShape(): void {
+ const shapeObject = new Object3D();
+ let mr = shapeObject.addComponent(MeshRenderer);
+ let mat = new LitMaterial();
+ mat.baseColor = Color.random();
+
+ let size = 1 + Math.random() / 2;
+ let height = 1 + Math.random() * (3 - 1);
+ let radius = 0.5 + Math.random() / 2;
+ const segments = 32;
+
+ let shape: Ammo.btCollisionShape;
+ let shapeType = Math.floor(Math.random() * 6); // Six basic shapes
+ switch (shapeType) {
+ case 0: // Box shape
+ mr.geometry = new BoxGeometry(size, size, size);
+ mr.material = mat;
+ shape = CollisionShapeUtil.createBoxShape(shapeObject);
+ break;
+ case 1: // Sphere shape
+ mr.geometry = new SphereGeometry(radius, segments, segments);
+ mr.material = mat;
+ shape = CollisionShapeUtil.createSphereShape(shapeObject);
+ break;
+ case 2: // Cylinder shape
+ mr.geometry = new CylinderGeometry(radius, radius, height, segments, segments);
+ mr.materials = [mat, mat, mat];
+ shape = CollisionShapeUtil.createCylinderShape(shapeObject);
+ break;
+ case 3: // Cone shape
+ mr.geometry = new CylinderGeometry(0.01, radius, height, segments, segments);
+ mr.materials = [mat, mat, mat];
+ shape = CollisionShapeUtil.createConeShape(shapeObject);
+ break;
+ case 4: // Capsule shape
+ mr.geometry = new CylinderGeometry(radius, radius, height, segments, segments);
+ mr.material = mat;
+ const { r, g, b } = mat.baseColor;
+ let topSphere = Object3DUtil.GetSingleSphere(radius, r, g, b);
+ topSphere.y = height / 2;
+ let bottomSphere = topSphere.clone();
+ bottomSphere.y = -height / 2;
+ shapeObject.addChild(topSphere);
+ shapeObject.addChild(bottomSphere);
+ shape = CollisionShapeUtil.createCapsuleShape(shapeObject);
+ break;
+ case 5: // Torus shape (convex hull shape)
+ mr.geometry = new TorusGeometry(radius, size / 5, segments / 2, segments / 2);
+ mr.material = mat;
+ shape = CollisionShapeUtil.createConvexHullShape(shapeObject);
+ break;
+ default:
+ break;
+ }
+
+ const posRange = 60;
+ shapeObject.x = Math.random() * posRange - posRange / 2;
+ shapeObject.y = 40;
+ shapeObject.z = Math.random() * posRange - posRange / 2;
+
+ shapeObject.localRotation = new Vector3(Math.random() * 360, Math.random() * 360, Math.random() * 360);
+ this.container.addChild(shapeObject);
+
+ // Add rigidbody to shape
+ let rigidbody = shapeObject.addComponent(Rigidbody);
+ rigidbody.shape = shape;
+ rigidbody.mass = Math.random() * 10 + 0.1;
+ rigidbody.rollingFriction = 0.5;
+ rigidbody.damping = [0.1, 0.1];
+
+ // Enable continuous collision detection (CCD)
+ const maxDimension = Math.max(size, height, radius);
+ const ccdMotionThreshold = maxDimension * 0.1; // Set motion threshold to 10% of max dimension
+ const ccdSweptSphereRadius = maxDimension * 0.05; // Set swept sphere radius to 5% of max dimension
+ rigidbody.ccdSettings = [ccdMotionThreshold, ccdSweptSphereRadius];
+ }
+}
+
+new Sample_MultipleShapes().run();
diff --git a/docs/public/demos/resource/resource.ts b/docs/public/demos/resource/resource.ts
new file mode 100644
index 00000000..40b44545
--- /dev/null
+++ b/docs/public/demos/resource/resource.ts
@@ -0,0 +1,58 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, View3D, DirectLight, HoverCameraController, Color, AtmosphericComponent } from '@orillusion/core';
+
+// initializa engine
+await Engine3D.init();
+// create new scene as root node
+let scene3D: Scene3D = new Scene3D();
+scene3D.addComponent(AtmosphericComponent);
+// create camera
+let cameraObj: Object3D = new Object3D();
+let camera = cameraObj.addComponent(Camera3D);
+// adjust camera view
+camera.perspective(60, Engine3D.aspect, 1, 5000.0);
+// set camera controller
+let controller = cameraObj.addComponent(HoverCameraController);
+controller.setCamera(0, -20, 15);
+// add camera node
+scene3D.addChild(cameraObj);
+// create light
+let light: Object3D = new Object3D();
+// add direct light component
+let component: DirectLight = light.addComponent(DirectLight);
+// adjust lighting
+light.rotationX = 45;
+light.rotationY = 30;
+component.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+component.intensity = 1;
+// add light object
+scene3D.addChild(light);
+
+let button = document.createElement('button');
+button.setAttribute('style', 'position:fixed;top:calc(50% - 20px);left:0;right:0;width:150px;padding:10px;font-size:16px;margin:auto;');
+button.innerHTML = 'Load Model';
+document.body.appendChild(button);
+
+button.onclick = async () => {
+ button.onclick = null;
+ // load model
+ let dragon = await Engine3D.res.loadGltf('https://cdn.orillusion.com/PBR/DragonAttenuation/DragonAttenuation.gltf', {
+ onProgress: (receivedLength: number, contentLength: number, url: string) => {
+ if (!url.match(/\.bin$/)) return;
+ button.innerHTML = 'Loading ' + ((receivedLength / contentLength) * 100).toFixed(0) + '%';
+ },
+ onComplete: (url: string) => {
+ if (!url.match(/\.bin$/)) return;
+ button.innerHTML = 'Model Loaded!';
+ setTimeout(() => {
+ button.remove();
+ }, 1000);
+ }
+ });
+ scene3D.addChild(dragon);
+};
+
+let view = new View3D();
+view.scene = scene3D;
+view.camera = camera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/texture/hdrBox.ts b/docs/public/demos/texture/hdrBox.ts
new file mode 100644
index 00000000..c497d6c7
--- /dev/null
+++ b/docs/public/demos/texture/hdrBox.ts
@@ -0,0 +1,21 @@
+import { Camera3D, Engine3D, View3D, HoverCameraController, Object3D, Scene3D, SkyRenderer } from '@orillusion/core';
+
+await Engine3D.init();
+
+let scene = new Scene3D();
+let sky = scene.addComponent(SkyRenderer);
+let hdrTextureCube = await Engine3D.res.loadHDRTextureCube('https://cdn.orillusion.com/hdri/T_Panorama05_HDRI.HDR');
+sky.map = hdrTextureCube;
+
+let camera = new Object3D();
+scene.addChild(camera);
+
+let mainCamera = camera.addComponent(Camera3D);
+mainCamera.perspective(60, Engine3D.aspect, 1, 2000.0);
+let ctrl = camera.addComponent(HoverCameraController);
+ctrl.setCamera(180, 0, 10);
+
+let view = new View3D();
+view.scene = scene;
+view.camera = mainCamera;
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/texture/texture2D.ts b/docs/public/demos/texture/texture2D.ts
new file mode 100644
index 00000000..a6ade221
--- /dev/null
+++ b/docs/public/demos/texture/texture2D.ts
@@ -0,0 +1,39 @@
+import { Engine3D, Vector3, Scene3D, Object3D, Camera3D, AtmosphericComponent, View3D, UnLitMaterial, MeshRenderer, HoverCameraController, PlaneGeometry, DirectLight, Color } from '@orillusion/core';
+
+await Engine3D.init();
+let scene = new Scene3D();
+let camera = new Object3D();
+scene.addChild(camera);
+let mainCamera = camera.addComponent(Camera3D);
+mainCamera.perspective(60, Engine3D.aspect, 0.1, 10000.0);
+let hc = camera.addComponent(HoverCameraController);
+hc.setCamera(0, 0, 2);
+
+// create a unlit material
+let mat = new UnLitMaterial();
+let texture = await Engine3D.res.loadTexture('https://cdn.orillusion.com/gltfs/cube/material_02.png');
+mat.baseMap = texture;
+
+// add a plane to display the image
+let planeObj = new Object3D();
+let mr = planeObj.addComponent(MeshRenderer);
+mr.geometry = new PlaneGeometry(2, 2, 10, 10, Vector3.Z_AXIS);
+mr.material = mat;
+scene.addChild(planeObj);
+
+// add a light
+let lightObj = new Object3D();
+lightObj.rotationX = -45;
+let light = lightObj.addComponent(DirectLight);
+light.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+light.intensity = 10;
+scene.addChild(lightObj);
+
+// add an Atmospheric sky enviroment
+scene.addComponent(AtmosphericComponent).sunY = 0.6;
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene;
+view.camera = mainCamera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/texture/textureBox.ts b/docs/public/demos/texture/textureBox.ts
new file mode 100644
index 00000000..49e3c8d6
--- /dev/null
+++ b/docs/public/demos/texture/textureBox.ts
@@ -0,0 +1,32 @@
+import { Camera3D, Engine3D, View3D, HoverCameraController, Object3D, Scene3D, BitmapTextureCube, SkyRenderer } from '@orillusion/core';
+
+await Engine3D.init();
+
+let scene = new Scene3D();
+let camera = new Object3D();
+scene.addChild(camera);
+
+let mainCamera = camera.addComponent(Camera3D);
+mainCamera.perspective(60, Engine3D.aspect, 1, 2000.0);
+let ctrl = camera.addComponent(HoverCameraController);
+ctrl.setCamera(180, 0, 10);
+
+let evnMap = new BitmapTextureCube();
+let urls: string[] = [];
+urls.push('https://cdn.orillusion.com/textures/cubemap/skybox_nx.png');
+urls.push('https://cdn.orillusion.com/textures/cubemap/skybox_px.png');
+urls.push('https://cdn.orillusion.com/textures/cubemap/skybox_py.png');
+urls.push('https://cdn.orillusion.com/textures/cubemap/skybox_ny.png');
+urls.push('https://cdn.orillusion.com/textures/cubemap/skybox_nz.png');
+urls.push('https://cdn.orillusion.com/textures/cubemap/skybox_pz.png');
+await evnMap.load(urls);
+
+let sky = scene.addComponent(SkyRenderer);
+sky.map = evnMap;
+
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene;
+view.camera = mainCamera;
+// start render
+Engine3D.startRenderView(view);
diff --git a/docs/public/demos/texture/texture_address.ts b/docs/public/demos/texture/texture_address.ts
new file mode 100644
index 00000000..5eb5df30
--- /dev/null
+++ b/docs/public/demos/texture/texture_address.ts
@@ -0,0 +1,54 @@
+import { Engine3D, Vector3, Scene3D, Object3D, Camera3D, AtmosphericComponent, View3D, UnLitMaterial, MeshRenderer, HoverCameraController, PlaneGeometry, Vector4, GPUAddressMode, DirectLight, Color } from '@orillusion/core';
+
+await Engine3D.init();
+let scene = new Scene3D();
+let camera = new Object3D();
+scene.addChild(camera);
+let mainCamera = camera.addComponent(Camera3D);
+mainCamera.perspective(60, Engine3D.aspect, 0.1, 10000.0);
+let hc = camera.addComponent(HoverCameraController);
+hc.setCamera(0, 0, 2);
+
+// add a dir light
+let lightObj = new Object3D();
+lightObj.rotationX = -45;
+let light = lightObj.addComponent(DirectLight);
+light.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+light.intensity = 10;
+scene.addChild(lightObj);
+
+// add an Atmospheric sky enviroment
+scene.addComponent(AtmosphericComponent).sunY = 0.6;
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene;
+view.camera = mainCamera;
+// start render
+Engine3D.startRenderView(view);
+
+let texture = await Engine3D.res.loadTexture('https://cdn.orillusion.com/images/webgpu.webp');
+// texture.addressModeU = GPUAddressMode.repeat;
+// texture.addressModeV = GPUAddressMode.repeat;
+let mat = new UnLitMaterial();
+mat.setUniformVector4('transformUV1', new Vector4(0, 0, 2, 2));
+mat.baseMap = texture;
+
+let planeObj = new Object3D();
+let mr = planeObj.addComponent(MeshRenderer);
+mr.geometry = new PlaneGeometry(2, 2, 10, 10, Vector3.Z_AXIS);
+mr.material = mat;
+scene.addChild(planeObj);
+
+let select = document.createElement('select');
+select.innerHTML = `
+ Repeat
+ Mirror-Repeat
+ Clamp-to-Edge
+ `;
+select.setAttribute('style', 'position:fixed;right:5px;top:5px');
+document.body.appendChild(select);
+
+select.addEventListener('change', () => {
+ texture.addressModeU = GPUAddressMode[select.value];
+ texture.addressModeV = GPUAddressMode[select.value];
+});
diff --git a/docs/public/demos/texture/texture_filter.ts b/docs/public/demos/texture/texture_filter.ts
new file mode 100644
index 00000000..cf785aa5
--- /dev/null
+++ b/docs/public/demos/texture/texture_filter.ts
@@ -0,0 +1,53 @@
+import { Engine3D, Vector3, Scene3D, Object3D, Camera3D, AtmosphericComponent, View3D, UnLitMaterial, MeshRenderer, HoverCameraController, PlaneGeometry, BitmapTexture2D, DirectLight, Color } from '@orillusion/core';
+
+await Engine3D.init();
+let scene = new Scene3D();
+let camera = new Object3D();
+scene.addChild(camera);
+let mainCamera = camera.addComponent(Camera3D);
+mainCamera.perspective(60, Engine3D.aspect, 0.1, 10000.0);
+let hc = camera.addComponent(HoverCameraController);
+hc.setCamera(0, 0, 0.2);
+
+// add a dir light
+let lightObj = new Object3D();
+lightObj.rotationX = -45;
+let light = lightObj.addComponent(DirectLight);
+light.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+light.intensity = 10;
+scene.addChild(lightObj);
+
+// add an Atmospheric sky enviroment
+scene.addComponent(AtmosphericComponent).sunY = 0.6;
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene;
+view.camera = mainCamera;
+// start render
+Engine3D.startRenderView(view);
+
+let texture = new BitmapTexture2D();
+await texture.load('https://cdn.orillusion.com/gltfs/cube/material_02.png');
+texture.magFilter = 'linear';
+texture.minFilter = 'linear';
+
+let mat = new UnLitMaterial();
+mat.baseMap = texture;
+let planeObj = new Object3D();
+let mr = planeObj.addComponent(MeshRenderer);
+mr.geometry = new PlaneGeometry(2, 2, 10, 10, Vector3.Z_AXIS);
+mr.material = mat;
+scene.addChild(planeObj);
+
+let select = document.createElement('select');
+select.innerHTML = `
+ Linear
+ Nearest
+ `;
+select.setAttribute('style', 'position:fixed;right:5px;top:5px');
+document.body.appendChild(select);
+
+select.addEventListener('change', () => {
+ texture.magFilter = select.value;
+ texture.minFilter = select.value;
+});
diff --git a/docs/public/demos/texture/texture_mipmap.ts b/docs/public/demos/texture/texture_mipmap.ts
new file mode 100644
index 00000000..a3d970b5
--- /dev/null
+++ b/docs/public/demos/texture/texture_mipmap.ts
@@ -0,0 +1,66 @@
+import { Engine3D, Scene3D, Object3D, Camera3D, AtmosphericComponent, View3D, UnLitMaterial, MeshRenderer, PlaneGeometry, BitmapTexture2D, Vector4, OrbitController, DirectLight, Color } from '@orillusion/core';
+
+await Engine3D.init();
+let scene = new Scene3D();
+let camera = new Object3D();
+camera.y = 10;
+camera.z = 30;
+scene.addChild(camera);
+let mainCamera = camera.addComponent(Camera3D);
+mainCamera.perspective(60, Engine3D.aspect, 0.1, 10000.0);
+let oribit = camera.addComponent(OrbitController);
+oribit.autoRotate = true;
+
+// add a dir light
+let lightObj = new Object3D();
+lightObj.rotationX = -45;
+let light = lightObj.addComponent(DirectLight);
+light.lightColor = new Color(1.0, 1.0, 1.0, 1.0);
+light.intensity = 1;
+scene.addChild(lightObj);
+
+// add an Atmospheric sky enviroment
+scene.addComponent(AtmosphericComponent).sunY = 0.6;
+// create a view with target scene and camera
+let view = new View3D();
+view.scene = scene;
+view.camera = mainCamera;
+// start render
+Engine3D.startRenderView(view);
+
+const imageCanvas = document.createElement('canvas');
+const context = imageCanvas.getContext('2d') as CanvasRenderingContext2D;
+{
+ imageCanvas.width = imageCanvas.height = 128;
+ context.fillStyle = '#444';
+ context.fillRect(0, 0, 128, 128);
+ context.fillStyle = '#fff';
+ context.fillRect(0, 0, 64, 64);
+ context.fillRect(64, 64, 64, 64);
+}
+const image = imageCanvas.toDataURL('image/png');
+let texture = new BitmapTexture2D();
+texture.useMipmap = true;
+await texture.load(image);
+let mat = new UnLitMaterial();
+mat.baseMap = texture;
+mat.setUniformVector4('transformUV1', new Vector4(0, 0, 100, 100));
+
+let plane = new PlaneGeometry(1000, 1000, 10, 10);
+let planeObj = new Object3D();
+let mr = planeObj.addComponent(MeshRenderer);
+mr.geometry = plane;
+mr.material = mat;
+scene.addChild(planeObj);
+
+let select = document.createElement('select');
+select.innerHTML = `
+ Use MipMap
+ No MipMap
+ `;
+select.setAttribute('style', 'position:fixed;right:5px;top:5px');
+document.body.appendChild(select);
+
+select.addEventListener('change', () => {
+ texture.useMipmap = select.value === 'true';
+});
diff --git a/docs/public/examples/animation/CurveAnimation.ts b/docs/public/examples/animation/CurveAnimation.ts
new file mode 100644
index 00000000..463f4f57
--- /dev/null
+++ b/docs/public/examples/animation/CurveAnimation.ts
@@ -0,0 +1,101 @@
+import { Object3D, Scene3D, AnimationCurve, Engine3D, AtmosphericComponent, CameraUtil, HoverCameraController, View3D, DirectLight, KelvinUtil, Keyframe, Object3DUtil, Time } from '@orillusion/core';
+import { Stats } from '@orillusion/stats';
+
+class Sample_AnimCurve {
+ lightObj3D: Object3D;
+ scene: Scene3D;
+ Duck: Object3D;
+ curve1: AnimationCurve;
+ curve2: AnimationCurve;
+ curve3: AnimationCurve;
+ curve4: AnimationCurve;
+
+ async run() {
+ Engine3D.setting.shadow.autoUpdate = true;
+ Engine3D.setting.shadow.updateFrameRate = 1;
+ Engine3D.setting.shadow.shadowBound = 150;
+
+ await Engine3D.init({ beforeRender: () => this.renderUpdate() });
+ this.scene = new Scene3D();
+ this.scene.addComponent(Stats);
+ let sky = this.scene.addComponent(AtmosphericComponent);
+
+ let camera = CameraUtil.createCamera3DObject(this.scene);
+ camera.perspective(60, Engine3D.aspect, 0.01, 5000.0);
+ camera.object3D.addComponent(HoverCameraController).setCamera(-30, -45, 200);
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = camera;
+
+ Engine3D.startRenderView(view);
+
+ await this.initScene();
+ sky.relativeTransform = this.lightObj3D.transform;
+ }
+
+ async initScene() {
+ /******** light *******/
+ {
+ this.lightObj3D = new Object3D();
+ this.lightObj3D.rotationX = 35;
+ this.lightObj3D.rotationY = 110;
+ this.lightObj3D.rotationZ = 0;
+ let directLight = this.lightObj3D.addComponent(DirectLight);
+ directLight.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ directLight.castShadow = true;
+ directLight.intensity = 3;
+ this.scene.addChild(this.lightObj3D);
+
+ //create animation curve 1
+ this.curve1 = new AnimationCurve();
+ this.curve1.addKeyFrame(new Keyframe(0, 1));
+ this.curve1.addKeyFrame(new Keyframe(0.5, 2));
+ this.curve1.addKeyFrame(new Keyframe(0.7, 2));
+ this.curve1.addKeyFrame(new Keyframe(1.0, 1));
+
+ //create animation curve 2
+
+ this.curve2 = new AnimationCurve();
+ this.curve2.addKeyFrame(new Keyframe(0, 0));
+ this.curve2.addKeyFrame(new Keyframe(1, 360));
+
+ //create animation curve 3
+ this.curve3 = new AnimationCurve();
+ this.curve3.addKeyFrame(new Keyframe(0, -5));
+ this.curve3.addKeyFrame(new Keyframe(0.3, 3));
+ this.curve3.addKeyFrame(new Keyframe(0.6, 8));
+ this.curve3.addKeyFrame(new Keyframe(0.9, -2));
+ this.curve3.addKeyFrame(new Keyframe(1.0, -5));
+
+ //create animation curve 4
+ this.curve4 = new AnimationCurve();
+ this.curve4.addKeyFrame(new Keyframe(0, 1));
+ this.curve4.addKeyFrame(new Keyframe(0.3, -9));
+ this.curve4.addKeyFrame(new Keyframe(0.6, -2));
+ this.curve4.addKeyFrame(new Keyframe(0.9, 2));
+ this.curve4.addKeyFrame(new Keyframe(1.0, 1));
+ }
+
+ this.scene.addChild(Object3DUtil.GetSingleCube(300, 5, 300, 1, 1, 1));
+
+ // load a gltf model
+ this.Duck = (await Engine3D.res.loadGltf('https://cdn.orillusion.com/PBR/Duck/Duck.gltf')) as Object3D;
+ this.Duck.scaleX = this.Duck.scaleY = this.Duck.scaleZ = 0.3;
+ this.Duck.name = 'Duck';
+ this.scene.addChild(this.Duck);
+ }
+
+ renderUpdate() {
+ //modify animation attribute values to the model
+ if (this.Duck) {
+ let time = ((Time.time * 0.4) % 1000) / 1000;
+ this.Duck.y = this.curve1.getValue(time) * 5;
+ this.Duck.x = this.curve3.getValue(time) * 5 - 2.5;
+ this.Duck.z = this.curve4.getValue(time) * 5 - 2.5;
+ this.Duck.rotationY = this.curve2.getValue(time);
+ }
+ }
+}
+
+new Sample_AnimCurve().run();
diff --git a/docs/public/examples/animation/MorphTarget.ts b/docs/public/examples/animation/MorphTarget.ts
new file mode 100644
index 00000000..ca4cdff1
--- /dev/null
+++ b/docs/public/examples/animation/MorphTarget.ts
@@ -0,0 +1,183 @@
+import { SkinnedMeshRenderer2, AtmosphericComponent, CameraUtil, DirectLight, Engine3D, HoverCameraController, KelvinUtil, Matrix4, MeshRenderer, MorphTargetBlender, Object3D, PlaneGeometry, Quaternion, Scene3D, Vector3, View3D, webGPUContext } from '@orillusion/core';
+import { Stats } from '@orillusion/stats';
+import dat from 'dat.gui';
+// @ts-ignore, import es from url
+import { FaceLandmarker, FilesetResolver } from 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest';
+
+// Sample of control morph target animation
+class Sample_MorphTarget {
+ lightObj3D: Object3D;
+ scene: Scene3D;
+ influenceData: { [key: string]: number } = {};
+ htmlVideo: HTMLVideoElement;
+ blendShapeComponent: MorphTargetBlender;
+ targetRenderers: { [p: string]: SkinnedMeshRenderer2[] };
+ faceLandmarker: FaceLandmarker;
+ filesetResolver: FilesetResolver;
+ gui: dat.GUI;
+ model: Object3D;
+ // temp values
+ _mat4: Matrix4;
+ _quat: Quaternion;
+ _quat2: Quaternion;
+ async run() {
+ Engine3D.setting.shadow.shadowBound = 100;
+ Engine3D.setting.shadow.autoUpdate = true;
+ Engine3D.setting.shadow.updateFrameRate = 1;
+
+ await Engine3D.init({
+ renderLoop: () => this.detectFace()
+ });
+
+ this.scene = new Scene3D();
+ this.scene.addComponent(Stats);
+ let sky = this.scene.addComponent(AtmosphericComponent);
+
+ let camera = CameraUtil.createCamera3DObject(this.scene);
+ camera.perspective(60, webGPUContext.aspect, 1, 5000.0);
+ camera.object3D.addComponent(HoverCameraController).setCamera(0, 0, 150);
+
+ this.initDirectLight();
+ sky.relativeTransform = this.lightObj3D.transform;
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = camera;
+
+ await this.initMorphModel();
+ Engine3D.startRenderView(view);
+ }
+
+ /******** light *******/
+ initDirectLight() {
+ this.lightObj3D = new Object3D();
+ this.lightObj3D.rotationX = 21;
+ this.lightObj3D.rotationY = 108;
+ this.lightObj3D.rotationZ = 10;
+
+ let directLight = this.lightObj3D.addComponent(DirectLight);
+ directLight.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ directLight.castShadow = true;
+ directLight.intensity = 3;
+ this.scene.addChild(this.lightObj3D);
+ }
+
+ private async initMorphModel() {
+ const gui = new dat.GUI();
+
+ // load lion model
+ let model = (this.model = await Engine3D.res.loadGltf('https://cdn.orillusion.com/gltfs/glb/lion.glb'));
+ model.y = -80.0;
+ model.x = -30.0;
+ this.scene.addChild(model);
+
+ let folder = (this.gui = gui.addFolder('morph controller'));
+ // register MorphTargetBlender component
+ this.blendShapeComponent = model.addComponent(MorphTargetBlender);
+ this.targetRenderers = this.blendShapeComponent.cloneMorphRenderers();
+
+ // bind influenceData to gui
+
+ for (let key in this.targetRenderers) {
+ this.influenceData[key] = 0.0;
+ folder.add(this.influenceData, key, 0, 1, 0.01).onChange((v) => {
+ this.influenceData[key] = v;
+ let list = this.blendShapeComponent.getMorphRenderersByKey(key);
+ for (let renderer of list) {
+ renderer.setMorphInfluence(key, v);
+ }
+ console.log(this.targetRenderers);
+ });
+ }
+ // add capture camera button
+ this.gui
+ .add(
+ {
+ capture: async () => {
+ await this.setupCapture();
+ await this.setupPredict();
+ await this.detectFace();
+ }
+ },
+ 'capture'
+ )
+ .name('Capture from Camera');
+ folder.open();
+ }
+ // create a video stream from camera
+ async setupCapture() {
+ try {
+ this.htmlVideo = document.createElement('video');
+ this.htmlVideo.height = 200;
+ this.htmlVideo.setAttribute('style', 'position:fixed;left:0;bottom:0;z-index:10');
+ document.body.appendChild(this.htmlVideo);
+
+ let stream = await navigator.mediaDevices.getUserMedia({ video: true });
+ this.htmlVideo.srcObject = stream;
+ this.htmlVideo.play();
+ } catch (error) {
+ console.error('Error accessing the camera:', error);
+ }
+ }
+ // load mediapipe model
+ async setupPredict() {
+ this.filesetResolver = await FilesetResolver.forVisionTasks('https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm');
+ this.faceLandmarker = await FaceLandmarker.createFromOptions(this.filesetResolver, {
+ baseOptions: {
+ modelAssetPath: 'https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/1/face_landmarker.task',
+ delegate: 'GPU'
+ },
+ outputFaceBlendshapes: true,
+ outputFacialTransformationMatrixes: true,
+ runningMode: 'VIDEO',
+ numFaces: 1
+ });
+
+ // temp vals
+ this._mat4 = new Matrix4();
+ this._quat = new Quaternion();
+ this._quat2 = new Quaternion();
+ }
+ // detect face
+ async detectFace() {
+ if (!this.faceLandmarker) return;
+ const results = await this.faceLandmarker.detectForVideo(this.htmlVideo, Date.now());
+ this.face2Transform(results.facialTransformationMatrixes);
+ this.face2Morph(results.faceBlendshapes);
+ }
+ // morph target
+ async face2Morph(faceBlendshapes: any[]) {
+ if (faceBlendshapes.length > 0) {
+ faceBlendshapes = faceBlendshapes[0].categories;
+ let Lefteye = faceBlendshapes[9].score; // eyeBlinkLeft
+ let Righteye = faceBlendshapes[10].score; // eyeBlinkRight
+ let Mouth = faceBlendshapes[25].score; // jawOpen
+
+ // multiply scale to make it more visible
+ this.influenceData['mouth'] = Mouth * 2;
+ this.influenceData['leftEye'] = Lefteye * 2;
+ this.influenceData['rightEye'] = Righteye * 2;
+ this.influenceData['tongue'] = Mouth * 2;
+ // set morph
+ for (let key in this.targetRenderers) {
+ let list = this.blendShapeComponent.getMorphRenderersByKey(key);
+ list[0].setMorphInfluence(key, this.influenceData[key]);
+ }
+ // update gui
+ this.gui.updateDisplay();
+ }
+ }
+ // apply transform
+ async face2Transform(facialTransformationMatrixes: [{ data: Float32Array }]) {
+ if (facialTransformationMatrixes[0]) {
+ this._mat4.rawData.set(facialTransformationMatrixes[0].data);
+ this._quat.fromMatrix(this._mat4);
+ // Interpolate between quat1 and quat2, make movment smoother
+ this._quat2.lerp(this._quat2, this._quat, 0.45);
+ // then update model quaternion
+ this.model.localQuaternion = this._quat2;
+ }
+ }
+}
+
+new Sample_MorphTarget().run();
diff --git a/docs/public/examples/animation/PropertyAnimation.ts b/docs/public/examples/animation/PropertyAnimation.ts
new file mode 100644
index 00000000..5a2bd2cd
--- /dev/null
+++ b/docs/public/examples/animation/PropertyAnimation.ts
@@ -0,0 +1,122 @@
+import { Scene3D, AtmosphericComponent, KelvinUtil, CameraUtil, DirectLight, View3D, HoverCameraController, PropertyAnimation, Engine3D, Object3D, Object3DUtil, PropertyAnimClip, WrapMode } from '@orillusion/core';
+import dat from 'dat.gui';
+import { Stats } from '@orillusion/stats';
+
+class Sample_PropertyAnimation {
+ scene: Scene3D;
+ animation: PropertyAnimation;
+ private Ori: dat.GUI | undefined;
+
+ async run() {
+ Engine3D.setting.shadow.autoUpdate = true;
+ Engine3D.setting.shadow.updateFrameRate = 1;
+ Engine3D.setting.shadow.shadowBound = 50;
+ Engine3D.setting.shadow.shadowSize = 2048;
+ Engine3D.setting.shadow.shadowBias = 0.01;
+
+ await Engine3D.init();
+ let scene = (this.scene = new Scene3D());
+ scene.addComponent(Stats);
+
+ // init sky
+ let atmosphericSky: AtmosphericComponent;
+ atmosphericSky = scene.addComponent(AtmosphericComponent);
+
+ // init Camera3D
+ let camera = CameraUtil.createCamera3DObject(scene);
+ camera.perspective(60, Engine3D.aspect, 1, 5000);
+ // init Camera Controller
+ let hoverCtrl = camera.object3D.addComponent(HoverCameraController);
+ hoverCtrl.setCamera(-30, -15, 20);
+
+ // init View3D
+ let view = new View3D();
+ view.scene = scene;
+ view.camera = camera;
+
+ // create direction light
+ let lightObj3D = new Object3D();
+ lightObj3D.x = 0;
+ lightObj3D.y = 30;
+ lightObj3D.z = -40;
+ lightObj3D.rotationX = 20;
+ lightObj3D.rotationY = 160;
+ lightObj3D.rotationZ = 0;
+
+ let light = lightObj3D.addComponent(DirectLight);
+ light.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ light.castShadow = true;
+ light.intensity = 3;
+ scene.addChild(light.object3D);
+ // relative light to sky
+ atmosphericSky.relativeTransform = light.transform;
+
+ await this.initScene(this.scene);
+ Engine3D.startRenderView(view);
+
+ this.displayGUI();
+ }
+
+ async initScene(scene: Scene3D) {
+ // floor
+ let floor: Object3D = Object3DUtil.GetSingleCube(16, 0.1, 16, 1, 1, 1);
+ scene.addChild(floor);
+
+ // load external model
+ let model = (await Engine3D.res.loadGltf('https://cdn.orillusion.com/PBR/Duck/Duck.gltf')) as Object3D;
+ let container = new Object3D();
+ container.addChild(model);
+ model.rotationY = 180;
+ this.scene.addChild(container);
+ model.scaleX = model.scaleY = model.scaleZ = 0.01;
+
+ this.animation = await this.initPropertyAnim(container);
+ this.animation.play(this.animation.defaultClip);
+
+ return true;
+ }
+
+ private async initPropertyAnim(owner: Object3D) {
+ // add PropertyAnimation
+ let animation = owner.addComponent(PropertyAnimation);
+
+ //load a animation clip
+ let json: any = await Engine3D.res.loadJSON('https://cdn.orillusion.com/json/anim_0.json');
+ let animClip = new PropertyAnimClip();
+ animClip.parse(json);
+ animClip.wrapMode = WrapMode.Loop;
+ animation.defaultClip = animClip.name;
+ animation.autoPlay = true;
+
+ // register clip to animation
+ animation.appendClip(animClip);
+ return animation;
+ }
+
+ private displayGUI() {
+ // restart the animation clip
+ let gui = new dat.GUI();
+ var button_add = {
+ Restart: () => {
+ this.animation.play(this.animation.defaultClip, true);
+ }
+ };
+
+ gui.add(button_add, 'Restart');
+ let data = { Seek: 0, Speed: 1 };
+
+ // seek the animation to the specified time
+ let totalTime = this.animation.getClip(this.animation.defaultClip).totalTime;
+ gui.add(data, 'Seek', 0, totalTime, 0.01).onChange((v) => {
+ this.animation.stop();
+ this.animation.seek(v);
+ });
+
+ // change animation speed
+ gui.add(data, 'Speed', 0, 1, 0.01).onChange((v) => {
+ this.animation.speed = v;
+ });
+ }
+}
+
+new Sample_PropertyAnimation().run();
diff --git a/docs/public/examples/animation/Skeleton.ts b/docs/public/examples/animation/Skeleton.ts
new file mode 100644
index 00000000..c205d810
--- /dev/null
+++ b/docs/public/examples/animation/Skeleton.ts
@@ -0,0 +1,71 @@
+import { Object3D, Scene3D, Engine3D, AtmosphericComponent, CameraUtil, webGPUContext, HoverCameraController, View3D, LitMaterial, MeshRenderer, BoxGeometry, DirectLight, KelvinUtil, Object3DUtil, AnimatorComponent } from '@orillusion/core';
+import { Stats } from '@orillusion/stats';
+
+class Sample_Skeleton {
+ lightObj3D: Object3D;
+ scene: Scene3D;
+ private Ori: dat.GUI | undefined;
+ async run() {
+ Engine3D.setting.shadow.autoUpdate = true;
+ Engine3D.setting.shadow.updateFrameRate = 1;
+ Engine3D.setting.shadow.shadowBound = 100;
+
+ await Engine3D.init();
+
+ this.scene = new Scene3D();
+ this.scene.addComponent(Stats);
+ let sky = this.scene.addComponent(AtmosphericComponent);
+
+ let camera = CameraUtil.createCamera3DObject(this.scene);
+ camera.perspective(60, Engine3D.aspect, 0.01, 5000.0);
+
+ let ctrl = camera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(-30, -45, 100);
+ ctrl.maxDistance = 1000;
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = camera;
+
+ Engine3D.startRenderView(view);
+
+ await this.initScene(this.scene);
+ sky.relativeTransform = this.lightObj3D.transform;
+ }
+
+ async initScene(scene: Scene3D) {
+ {
+ // load model with skeleton animation
+ let man = await Engine3D.res.loadGltf('https://cdn.orillusion.com/gltfs/CesiumMan/CesiumMan_compress.gltf');
+ man.scaleX = 30;
+ man.scaleY = 30;
+ man.scaleZ = 30;
+ man.rotationZ = 90;
+ scene.addChild(man);
+
+ let animator = man.getComponentsInChild(AnimatorComponent)[0];
+ animator.playAnim(animator.clips[0].clipName);
+ }
+
+ /******** floor *******/
+ this.scene.addChild(Object3DUtil.GetSingleCube(3000, 1, 3000, 0.5, 0.5, 0.5));
+
+ /******** light *******/
+ {
+ this.lightObj3D = new Object3D();
+ this.lightObj3D.x = 0;
+ this.lightObj3D.y = 30;
+ this.lightObj3D.z = -40;
+ this.lightObj3D.rotationX = 144;
+ this.lightObj3D.rotationY = 0;
+ this.lightObj3D.rotationZ = 0;
+ let directLight = this.lightObj3D.addComponent(DirectLight);
+ directLight.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ directLight.castShadow = true;
+ directLight.intensity = 3;
+ scene.addChild(this.lightObj3D);
+ }
+ }
+}
+
+new Sample_Skeleton().run();
diff --git a/docs/public/examples/animation/Skeleton2.ts b/docs/public/examples/animation/Skeleton2.ts
new file mode 100644
index 00000000..b0313809
--- /dev/null
+++ b/docs/public/examples/animation/Skeleton2.ts
@@ -0,0 +1,105 @@
+import { Object3D, Scene3D, Engine3D, AtmosphericComponent, CameraUtil, webGPUContext, HoverCameraController, View3D, LitMaterial, MeshRenderer, BoxGeometry, DirectLight, KelvinUtil, Object3DUtil, SkeletonAnimationComponent, AnimatorComponent } from '@orillusion/core';
+import { Stats } from '@orillusion/stats';
+
+class Sample_Skeleton2 {
+ lightObj3D: Object3D;
+ scene: Scene3D;
+
+ async run() {
+ Engine3D.setting.shadow.autoUpdate = true;
+ Engine3D.setting.shadow.updateFrameRate = 1;
+ Engine3D.setting.shadow.shadowSize = 2048;
+
+ await Engine3D.init();
+
+ this.scene = new Scene3D();
+ this.scene.addComponent(Stats);
+ let sky = this.scene.addComponent(AtmosphericComponent);
+ this.scene.exposure = 1;
+
+ let mainCamera = CameraUtil.createCamera3DObject(this.scene);
+ mainCamera.enableCSM = true;
+ mainCamera.perspective(60, webGPUContext.aspect, 1, 3000.0);
+
+ let hoverCameraController = mainCamera.object3D.addComponent(HoverCameraController);
+ hoverCameraController.setCamera(45, -30, 300);
+ hoverCameraController.maxDistance = 500.0;
+
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+
+ Engine3D.startRenderView(view);
+
+ await this.initScene(this.scene);
+ sky.relativeTransform = this.lightObj3D.transform;
+ }
+
+ async initScene(scene: Scene3D) {
+ /******** floor *******/
+ this.scene.addChild(Object3DUtil.GetSingleCube(3000, 1, 3000, 0.5, 0.5, 0.5));
+
+ /******** light *******/
+ {
+ this.lightObj3D = new Object3D();
+ this.lightObj3D.x = 0;
+ this.lightObj3D.y = 30;
+ this.lightObj3D.z = -40;
+ this.lightObj3D.rotationX = 144;
+ this.lightObj3D.rotationY = 0;
+ this.lightObj3D.rotationZ = 0;
+ let directLight = this.lightObj3D.addComponent(DirectLight);
+ directLight.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ directLight.castShadow = true;
+ directLight.intensity = 3;
+ scene.addChild(this.lightObj3D);
+ }
+
+ {
+ // load model with skeletion animation
+ let rootNode = await Engine3D.res.loadGltf('https://cdn.orillusion.com/gltfs/glb/Soldier.glb');
+ let character = rootNode.getObjectByName('Character') as Object3D;
+ character.scaleX = 0.3;
+ character.scaleY = 0.3;
+ character.scaleZ = 0.3;
+ character.rotationY = 180;
+
+ // enum animation names
+ var animName = ['Idel', 'Walk', 'Run', 'TPose'];
+ let maxCount = 100;
+ let maxCol = 10;
+ let maxRow = Math.floor(maxCount / maxCol);
+ // Clone 100 players to play different animations
+ for (var i = 0; i < maxCount; i++) {
+ let cloneObj = character.clone();
+
+ let row = Math.floor(i / maxCol);
+ let col = Math.floor(i % maxCol);
+
+ cloneObj.x = (maxCol * -0.5 + col) * 30;
+ cloneObj.z = (maxRow * -0.5 + row) * 30;
+ cloneObj.rotationX = -90;
+ scene.addChild(cloneObj);
+
+ let animation = cloneObj.getComponentsInChild(AnimatorComponent)[0];
+
+ if (i < animName.length) {
+ animation.playAnim(animName[i]);
+ } else {
+ let animIndex = Math.floor((Math.random() * 100) % 3);
+ animation.playAnim(animName[animIndex], -5 + Math.random() * 10);
+ }
+ await this.sleep(10);
+ }
+ }
+ return true;
+ }
+
+ sleep(time: number) {
+ return new Promise((res) => {
+ setTimeout(res, time || 200);
+ });
+ }
+}
+
+new Sample_Skeleton2().run();
diff --git a/docs/public/examples/animation/Skeleton3.ts b/docs/public/examples/animation/Skeleton3.ts
new file mode 100644
index 00000000..ca55dcbb
--- /dev/null
+++ b/docs/public/examples/animation/Skeleton3.ts
@@ -0,0 +1,112 @@
+import { Object3D, Scene3D, Engine3D, AtmosphericComponent, CameraUtil, webGPUContext, HoverCameraController, View3D, SkeletonAnimationComponent, LitMaterial, MeshRenderer, BoxGeometry, DirectLight, KelvinUtil, Time, Object3DUtil, BoundingBox, SkinnedMeshRenderer, AnimatorComponent } from '@orillusion/core';
+import dat from 'dat.gui';
+import { Stats } from '@orillusion/stats';
+
+// Sample to use SkeletonAnimationComponent
+class Sample_Skeleton3 {
+ lightObj3D: Object3D;
+ scene: Scene3D;
+ character: Object3D;
+ view: View3D;
+ private Ori: dat.GUI | undefined;
+
+ async run() {
+ Engine3D.setting.shadow.autoUpdate = true;
+ Engine3D.setting.shadow.updateFrameRate = 1;
+ Engine3D.setting.shadow.shadowBound = 100;
+ await Engine3D.init({
+ renderLoop: () => this.onRenderLoop()
+ });
+
+ this.scene = new Scene3D();
+ this.scene.addComponent(Stats);
+ let sky = this.scene.addComponent(AtmosphericComponent);
+
+ let mainCamera = CameraUtil.createCamera3DObject(this.scene);
+ mainCamera.perspective(60, webGPUContext.aspect, 1, 3000.0);
+
+ let ctrl = mainCamera.object3D.addComponent(HoverCameraController);
+ ctrl.setCamera(45, -30, 150);
+ ctrl.maxDistance = 500.0;
+
+ await this.initScene(this.scene);
+
+ this.view = new View3D();
+ this.view.scene = this.scene;
+ this.view.camera = mainCamera;
+
+ Engine3D.startRenderView(this.view);
+ }
+
+ async initScene(scene: Scene3D) {
+ {
+ let rootNode = await Engine3D.res.loadGltf('https://cdn.orillusion.com/gltfs/glb/Soldier_draco.glb');
+ this.character = rootNode.getObjectByName('Character') as Object3D;
+ this.character.scaleX = 0.3;
+ this.character.scaleY = 0.3;
+ this.character.scaleZ = 0.3;
+ this.character.rotationY = 180;
+ scene.addChild(this.character);
+
+ let animation = this.character.getComponentsInChild(AnimatorComponent)[0];
+ animation.playAnim(animation.clips[1].clipName);
+
+ // gui
+ let gui = new dat.GUI();
+ // change speed
+ let folder = gui.addFolder('Animation-speed');
+ folder.open();
+ folder.add(animation, 'timeScale', -6, 6, 0.01);
+
+ // change animation weight
+ folder = gui.addFolder('Animation-weight');
+ folder.open();
+ animation.clipsState.forEach((clipState, _) => {
+ folder.add(clipState, 'weight', 0, 1.0, 0.01).name(clipState.clip.clipName);
+ });
+
+ // toggle play/stop
+ folder = gui.addFolder('Animation-play');
+ folder.open();
+ animation.clipsState.forEach((clipState, _) => {
+ folder.add({ [clipState.clip.clipName]: () => animation.playAnim(clipState.clip.clipName) }, clipState.clip.clipName);
+ });
+
+ // cross fade animation
+ folder = gui.addFolder('Animation-crossFade');
+ folder.open();
+ animation.clipsState.forEach((clipState, _) => {
+ folder.add({ [clipState.clip.clipName]: () => animation.crossFade(clipState.clip.clipName, 0.3) }, clipState.clip.clipName);
+ });
+ }
+
+ /******** floor *******/
+ this.scene.addChild(Object3DUtil.GetSingleCube(3000, 1, 3000, 0.5, 0.5, 0.5));
+
+ /******** light *******/
+ {
+ this.lightObj3D = new Object3D();
+ this.lightObj3D.x = 0;
+ this.lightObj3D.y = 30;
+ this.lightObj3D.z = -40;
+ this.lightObj3D.rotationX = 45;
+ this.lightObj3D.rotationY = 0;
+ this.lightObj3D.rotationZ = 0;
+ let directLight = this.lightObj3D.addComponent(DirectLight);
+ directLight.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ directLight.castShadow = true;
+ directLight.intensity = 3;
+ scene.addChild(this.lightObj3D);
+ }
+
+ return true;
+ }
+
+ public onRenderLoop() {
+ if (this.lightObj3D) {
+ this.lightObj3D.rotationY += Time.delta * 0.01 * 2;
+ }
+ }
+}
+
+new Sample_Skeleton3().run();
diff --git a/docs/public/examples/base/AddRemove.ts b/docs/public/examples/base/AddRemove.ts
new file mode 100644
index 00000000..17ba797c
--- /dev/null
+++ b/docs/public/examples/base/AddRemove.ts
@@ -0,0 +1,86 @@
+import { Engine3D, Scene3D, CameraUtil, View3D, AtmosphericComponent, ComponentBase, Time, AxisObject, Object3DUtil, KelvinUtil, DirectLight, Object3D, HoverCameraController, MeshRenderer, LitMaterial, BoxGeometry, UnLit, UnLitMaterial, Interpolator, Camera3D } from '@orillusion/core';
+import { Stats } from '@orillusion/stats';
+import dat from 'dat.gui';
+
+// sample add and remove object
+class Sample_AddRemove {
+ view: View3D;
+ async run() {
+ // init engine
+ await Engine3D.init();
+ // create new Scene
+ let scene = new Scene3D();
+ scene.addComponent(Stats);
+ // add atmospheric sky
+ let sky = scene.addComponent(AtmosphericComponent);
+ sky.sunY = 0.6;
+
+ // create camera
+ let cameraObj = new Object3D();
+ let mainCamera = cameraObj.addComponent(Camera3D);
+ // adjust camera view
+ mainCamera.perspective(60, Engine3D.aspect, 0.1, 5000.0);
+ // add camera node
+ scene.addChild(cameraObj);
+ // set camera controller
+ let controller = cameraObj.addComponent(HoverCameraController);
+ controller.setCamera(15, -30, 300);
+
+ // add a basic direct light
+ let lightObj = new Object3D();
+ lightObj.rotationX = 45;
+ lightObj.rotationY = 60;
+ lightObj.rotationZ = 150;
+ let dirLight = lightObj.addComponent(DirectLight);
+ dirLight.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ dirLight.intensity = 5;
+ scene.addChild(lightObj);
+ sky.relativeTransform = dirLight.transform;
+
+ // create a view with target scene and camera
+ this.view = new View3D();
+ this.view.scene = scene;
+ this.view.camera = mainCamera;
+
+ // start render
+ Engine3D.startRenderView(this.view);
+ await this.initScene();
+ }
+
+ private async initScene() {
+ let list: Object3D[] = [];
+ let player = await Engine3D.res.loadGltf('https://cdn.orillusion.com/PBR/Duck/Duck.gltf');
+ let buttons = {
+ add: async () => {
+ /******** player1 *******/
+ let clone = player.clone();
+ clone.transform.x = Math.random() * 200 - 100;
+ clone.transform.y = Math.random() * 200 - 100;
+ clone.transform.z = Math.random() * 200 - 100;
+ clone.scaleX = clone.scaleY = clone.scaleZ = 0.25;
+
+ this.view.scene.addChild(clone);
+ list.push(clone);
+ },
+ remove: async () => {
+ let index = Math.floor(list.length * Math.random());
+ let obj = list[index];
+ if (obj) {
+ list.splice(index, 1);
+ this.view.scene.removeChild(obj);
+ obj.destroy(true);
+ }
+ }
+ };
+ // add first one
+ await buttons.add();
+ // gui
+ const gui = new dat.GUI();
+ let folder = gui.addFolder('Orillusion');
+ folder.add(buttons, 'add');
+ folder.add(buttons, 'remove');
+ folder.open();
+ }
+}
+
+new Sample_AddRemove().run();
diff --git a/docs/public/examples/base/BoundingBox.ts b/docs/public/examples/base/BoundingBox.ts
new file mode 100644
index 00000000..88165bec
--- /dev/null
+++ b/docs/public/examples/base/BoundingBox.ts
@@ -0,0 +1,130 @@
+import dat from 'dat.gui';
+import { Stats } from '@orillusion/stats';
+import { AtmosphericComponent, CameraUtil, Color, DirectLight, Engine3D, HoverCameraController, KelvinUtil, Object3D, Object3DUtil, Scene3D, Transform, View3D } from '@orillusion/core';
+import { Graphic3D } from '@orillusion/graphic';
+
+// A sample to show boundingbox
+class Sample_BoundingBox {
+ scene: Scene3D;
+ view: View3D;
+ box: Object3D;
+ container: Object3D;
+ graphic3D: Graphic3D;
+
+ async run() {
+ // init engine
+ await Engine3D.init({
+ renderLoop: () => {
+ this.loop();
+ }
+ });
+
+ this.scene = new Scene3D();
+ this.scene.addComponent(Stats);
+
+ // init sky
+ let atmosphericSky: AtmosphericComponent;
+ atmosphericSky = this.scene.addComponent(AtmosphericComponent);
+
+ // init Camera3D
+ let camera = CameraUtil.createCamera3DObject(this.scene);
+ camera.perspective(60, Engine3D.aspect, 0.01, 1000);
+
+ // init Camera Controller
+ let hoverCtrl = camera.object3D.addComponent(HoverCameraController);
+ hoverCtrl.setCamera(-30, -15, 20);
+
+ // init View3D
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = camera;
+ this.view = view;
+
+ this.graphic3D = new Graphic3D();
+ this.scene.addChild(this.graphic3D);
+
+ // create direction light
+ let lightObj3D = new Object3D();
+ lightObj3D.x = 0;
+ lightObj3D.y = 30;
+ lightObj3D.z = -40;
+ lightObj3D.rotationX = 20;
+ lightObj3D.rotationY = 160;
+ lightObj3D.rotationZ = 0;
+
+ let light = lightObj3D.addComponent(DirectLight);
+ light.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ light.castShadow = true;
+ light.intensity = 5;
+
+ this.scene.addChild(light.object3D);
+
+ // relative light to sky
+ atmosphericSky.relativeTransform = light.transform;
+
+ // Engine3D.startRenderViews([this.view])
+ Engine3D.startRenderView(this.view);
+
+ Engine3D.getRenderJob(this.view);
+
+ this.box = Object3DUtil.GetSingleCube(5, 3, 8, 1, 1, 1);
+ this.box.transform.eventDispatcher.addEventListener(Transform.LOCAL_ONCHANGE, this.logChange, this);
+
+ let parent = (this.container = new Object3D());
+ parent.addChild(this.box);
+ this.scene.addChild(parent);
+
+ let button_remove = {
+ Remove_Box: () => {
+ this.box.transform.parent && this.box.removeFromParent();
+ }
+ };
+ let button_add = {
+ Add_Box: () => {
+ !this.box.transform.parent && parent.addChild(this.box);
+ }
+ };
+ let gui = new dat.GUI();
+ let folder = gui.addFolder('Orillusion');
+ folder.add(button_remove, 'Remove_Box');
+ folder.add(button_add, 'Add_Box');
+
+ let Container = gui.addFolder('Container');
+ Container.add(parent.transform, 'x', -100.0, 100.0, 0.01);
+ Container.add(parent.transform, 'y', -100.0, 100.0, 0.01);
+ Container.add(parent.transform, 'z', -100.0, 100.0, 0.01);
+ Container.add(parent.transform, 'rotationX', 0.0, 360.0, 0.01);
+ Container.add(parent.transform, 'rotationY', 0.0, 360.0, 0.01);
+ Container.add(parent.transform, 'rotationZ', 0.0, 360.0, 0.01);
+ Container.add(parent.transform, 'scaleX', 0.0, 2.0, 0.01);
+ Container.add(parent.transform, 'scaleY', 0.0, 2.0, 0.01);
+ Container.add(parent.transform, 'scaleZ', 0.0, 2.0, 0.01);
+ Container.open();
+
+ let Box = gui.addFolder('Box');
+ Box.add(this.box.transform, 'x', -100.0, 100.0, 0.01);
+ Box.add(this.box.transform, 'y', -100.0, 100.0, 0.01);
+ Box.add(this.box.transform, 'z', -100.0, 100.0, 0.01);
+ Box.add(this.box.transform, 'rotationX', 0.0, 360.0, 0.01);
+ Box.add(this.box.transform, 'rotationY', 0.0, 360.0, 0.01);
+ Box.add(this.box.transform, 'rotationZ', 0.0, 360.0, 0.01);
+ Box.add(this.box.transform, 'scaleX', 0.0, 2.0, 0.01);
+ Box.add(this.box.transform, 'scaleY', 0.0, 2.0, 0.01);
+ Box.add(this.box.transform, 'scaleZ', 0.0, 2.0, 0.01);
+ Box.open();
+ }
+
+ logChange() {
+ console.log('BoudingBox changed');
+ }
+
+ red = new Color(1, 0, 0, 1);
+ green = new Color(0, 1, 0, 1);
+
+ loop() {
+ this.graphic3D.drawBoundingBox(this.box.instanceID, this.box.bound as any, this.green);
+ this.graphic3D.drawBoundingBox(this.container.instanceID, this.container.bound as any, this.red);
+ }
+}
+
+new Sample_BoundingBox().run();
diff --git a/docs/public/examples/base/ComponentLifeCycle.ts b/docs/public/examples/base/ComponentLifeCycle.ts
new file mode 100644
index 00000000..520c5f4c
--- /dev/null
+++ b/docs/public/examples/base/ComponentLifeCycle.ts
@@ -0,0 +1,91 @@
+import { Engine3D, ComponentBase, Object3DUtil, Scene3D, AtmosphericComponent, CameraUtil, HoverCameraController, View3D, Object3D, DirectLight, KelvinUtil } from '@orillusion/core';
+import { Stats } from '@orillusion/stats';
+
+class TestComponent1 extends ComponentBase {
+ i = 0;
+ start(): void {
+ console.log('TestComponent1 start');
+ }
+ onUpdate() {
+ this.i += 1;
+ console.log('TestComponent1 onUpdate');
+ }
+ onLateUpdate() {
+ console.log('TestComponent1 onLateUpdate', this.i);
+ }
+}
+
+class TestComponent2 extends ComponentBase {
+ i = 0;
+ start() {
+ console.log('TestComponent2 start');
+ this.transform.rotationY = 0.0;
+ this.object3D.addComponent(TestComponent1);
+ }
+ onUpdate() {
+ this.i += 1;
+ this.transform.rotationY += 1.0;
+ console.log('TestComponent2 onUpdate');
+ }
+ onLateUpdate() {
+ console.log('TestComponent2 onLateUpdate', this.i);
+ }
+}
+
+class Sample {
+ async run() {
+ Engine3D.setting.shadow.type = 'HARD';
+ Engine3D.setting.shadow.shadowBound = 100;
+ await Engine3D.init();
+
+ let scene = new Scene3D();
+ scene.addComponent(Stats);
+
+ // init sky
+ let atmosphericSky: AtmosphericComponent;
+ atmosphericSky = scene.addComponent(AtmosphericComponent);
+
+ // init Camera3D
+ let camera = CameraUtil.createCamera3DObject(scene);
+ camera.perspective(60, Engine3D.aspect, 1, 5000);
+
+ // init Camera Controller
+ let hoverCtrl = camera.object3D.addComponent(HoverCameraController);
+ hoverCtrl.setCamera(-30, -15, 100);
+
+ // init View3D
+ let view = new View3D();
+ view.scene = scene;
+ view.camera = camera;
+
+ // create direction light
+ let lightObj3D = new Object3D();
+ lightObj3D.x = 0;
+ lightObj3D.y = 30;
+ lightObj3D.z = -40;
+ lightObj3D.rotationX = 20;
+ lightObj3D.rotationY = 160;
+ lightObj3D.rotationZ = 0;
+
+ let light = lightObj3D.addComponent(DirectLight);
+ light.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ light.castShadow = true;
+ light.intensity = 3;
+
+ scene.addChild(light.object3D);
+
+ // relative light to sky
+ atmosphericSky.relativeTransform = light.transform;
+ // floor
+ const floor = Object3DUtil.GetSingleCube(100, 1, 100, 0.5, 0.5, 0.5);
+ floor.y = -5;
+ scene.addChild(floor);
+ // box
+ const obj = Object3DUtil.GetSingleCube(10, 10, 10, 1, 1, 1);
+ obj.addComponent(TestComponent2);
+ scene.addChild(obj);
+ Engine3D.startRenderView(view);
+ }
+}
+
+new Sample().run();
diff --git a/docs/public/examples/base/Transform.ts b/docs/public/examples/base/Transform.ts
new file mode 100644
index 00000000..b96695a8
--- /dev/null
+++ b/docs/public/examples/base/Transform.ts
@@ -0,0 +1,73 @@
+import { Stats } from '@orillusion/stats';
+import { Engine3D, Scene3D, AtmosphericComponent, CameraUtil, HoverCameraController, Object3D, MeshRenderer, BoxGeometry, LitMaterial, DirectLight, KelvinUtil, View3D } from '@orillusion/core';
+import dat from 'dat.gui';
+
+// simple base demo
+class Sample_Transform {
+ async run() {
+ // init engine
+ await Engine3D.init();
+ // create new Scene
+ let scene = new Scene3D();
+
+ // add performance stats
+ scene.addComponent(Stats);
+
+ // add an Atmospheric sky enviroment
+ let sky = scene.addComponent(AtmosphericComponent);
+ sky.sunY = 0.6;
+
+ // init camera3D
+ let mainCamera = CameraUtil.createCamera3D(null, scene);
+ mainCamera.perspective(60, Engine3D.aspect, 1, 2000.0);
+
+ // add a basic camera controller
+ let hoverCameraController = mainCamera.object3D.addComponent(HoverCameraController);
+ hoverCameraController.setCamera(15, -15, 10);
+
+ // create a basic cube
+ let cubeObj = new Object3D();
+ let mr = cubeObj.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry();
+ let mat = new LitMaterial();
+ mr.material = mat;
+ scene.addChild(cubeObj);
+
+ // add a basic direct light
+ let lightObj = new Object3D();
+ lightObj.rotationX = 45;
+ lightObj.rotationY = 60;
+ lightObj.rotationZ = 150;
+ let dirLight = lightObj.addComponent(DirectLight);
+ dirLight.lightColor = KelvinUtil.color_temperature_to_rgb(5355);
+ dirLight.intensity = 10;
+ scene.addChild(lightObj);
+
+ sky.relativeTransform = dirLight.transform;
+
+ // create a view with target scene and camera
+ let view = new View3D();
+ view.scene = scene;
+ view.camera = mainCamera;
+
+ // start render
+ Engine3D.startRenderView(view);
+
+ let transform = cubeObj.transform;
+ // debug GUI
+ let gui = new dat.GUI();
+ let Trans = gui.addFolder('Transform');
+ Trans.add(transform, 'x', -100.0, 100.0, 0.01);
+ Trans.add(transform, 'y', -100.0, 100.0, 0.01);
+ Trans.add(transform, 'z', -100.0, 100.0, 0.01);
+ Trans.add(transform, 'rotationX', 0.0, 360.0, 0.01);
+ Trans.add(transform, 'rotationY', 0.0, 360.0, 0.01);
+ Trans.add(transform, 'rotationZ', 0.0, 360.0, 0.01);
+ Trans.add(transform, 'scaleX', 0.0, 2.0, 0.01);
+ Trans.add(transform, 'scaleY', 0.0, 2.0, 0.01);
+ Trans.add(transform, 'scaleZ', 0.0, 2.0, 0.01);
+ Trans.open();
+ }
+}
+
+new Sample_Transform().run();
diff --git a/docs/public/examples/benchmark/DrawCall.ts b/docs/public/examples/benchmark/DrawCall.ts
new file mode 100644
index 00000000..8c1b04ce
--- /dev/null
+++ b/docs/public/examples/benchmark/DrawCall.ts
@@ -0,0 +1,119 @@
+import { Engine3D, Scene3D, AtmosphericComponent, CameraUtil, HoverCameraController, Object3D, BoxGeometry, DirectLight, KelvinUtil, View3D, LambertMaterial, OcclusionSystem, BoundingBox, Color, MeshRenderer, Vector3, Vector3Ex } from '@orillusion/core';
+import { Stats } from '@orillusion/stats';
+import dat from 'dat.gui';
+
+// simple base demo
+export class Sample_drawCallShareGeometry {
+ scene: Scene3D;
+ public anim: boolean = false;
+ private Ori: dat.GUI | undefined;
+
+ async run() {
+ Engine3D.setting.pick.enable = false;
+ // init engine
+ await Engine3D.init({ renderLoop: () => this.renderLoop() });
+
+ OcclusionSystem.enable = false;
+ // create new Scene
+ this.scene = new Scene3D();
+
+ // add performance stats
+ this.scene.addComponent(Stats);
+
+ // add an Atmospheric sky enviroment
+ let sky = this.scene.addComponent(AtmosphericComponent);
+ sky.sunY = 0.6;
+
+ // init camera3D
+ let mainCamera = CameraUtil.createCamera3D(null, this.scene);
+ mainCamera.perspective(60, Engine3D.aspect, 1, 2000.0);
+
+ // add a basic camera controller
+ let hoverCameraController = mainCamera.object3D.addComponent(HoverCameraController);
+ hoverCameraController.setCamera(15, -15, 300);
+
+ // add a basic direct light
+ let lightObj = new Object3D();
+ lightObj.rotationX = 45;
+ lightObj.rotationY = 60;
+ lightObj.rotationZ = 150;
+ let dirLight = lightObj.addComponent(DirectLight);
+ dirLight.lightColor = KelvinUtil.color_temperature_to_rgb(5500);
+ dirLight.intensity = 10;
+ dirLight.indirect = 1;
+ this.scene.addChild(lightObj);
+
+ sky.relativeTransform = dirLight.transform;
+
+ // create a view with target this.scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+
+ // start render
+ Engine3D.startRenderView(view);
+
+ let gui = new dat.GUI();
+ let f = gui.addFolder('Orillusion');
+ f.add({ count: '50000' }, 'count');
+ f.add(this, 'anim').onChange(() => this.anim != this.anim);
+ f.open();
+
+ this.initScene();
+ }
+
+ private _list: Object3D[] = [];
+ private _rotList: number[] = [];
+ initScene() {
+ let shareGeometry = new BoxGeometry();
+ const mat = new LambertMaterial();
+ mat.baseColor = new Color(Math.random() / 2 + 0.5, Math.random() / 2 + 0.5, Math.random() / 2 + 0.5);
+
+ let group = new Object3D();
+ let count = 5 * 10000;
+ let ii = 0;
+ for (let i = 0; i < count; i++) {
+ let pos = Vector3Ex.sphereXYZ(ii * 60 + 20, ii * 60 + 100, 100, i * 0.001 + 10, 100);
+ let obj = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.geometry = shareGeometry;
+ mr.material = mat;
+ obj.localPosition = pos;
+ group.addChild(obj);
+ this._list.push(obj);
+
+ obj.transform.scaleX = Math.random() * 2 + 0.2;
+ obj.transform.scaleY = Math.random() * 2 + 0.2;
+ obj.transform.scaleZ = Math.random() * 2 + 0.2;
+
+ obj.transform.rotationX = Math.random() * 360;
+ obj.transform.rotationY = Math.random() * 360;
+ obj.transform.rotationZ = Math.random() * 360;
+
+ this._rotList.push((Math.random() * 1 - 1 * 0.5) * 2.0 * Math.random() * 100);
+
+ obj.transform.localDetailRot = new Vector3((Math.random() * 1 - 1 * 0.5) * 2.0 * Math.random() * 50 * 0.001 * 0.5, (Math.random() * 1 - 1 * 0.5) * 2.0 * Math.random() * 50 * 0.001 * 0.5, (Math.random() * 1 - 1 * 0.5) * 2.0 * Math.random() * 50 * 0.001 * 0.5);
+ if (i % 10000 == 0) {
+ ii++;
+ }
+ }
+ group.transform.localDetailRot = new Vector3(0, 0.001, 0);
+ this._rotList.push(1.0 * 0.35);
+
+ group.bound = new BoundingBox(Vector3.SAFE_MIN, Vector3.SAFE_MAX);
+ this._list.push(group);
+ this.scene.addChild(group);
+ }
+
+ renderLoop() {
+ if (this.anim) {
+ let i = 0;
+ for (let i = 0; i < this._list.length; i++) {
+ const element = this._list[i];
+ element.transform.localChange = true;
+ }
+ }
+ }
+}
+
+new Sample_drawCallShareGeometry().run();
diff --git a/docs/public/examples/benchmark/InstanceDraw.ts b/docs/public/examples/benchmark/InstanceDraw.ts
new file mode 100644
index 00000000..ff37b30e
--- /dev/null
+++ b/docs/public/examples/benchmark/InstanceDraw.ts
@@ -0,0 +1,116 @@
+import { Stats } from '@orillusion/stats';
+import { AtmosphericComponent, BoundingBox, BoxGeometry, CameraUtil, Color, DirectLight, Engine3D, HoverCameraController, InstanceDrawComponent, KelvinUtil, LambertMaterial, MeshRenderer, Object3D, OcclusionSystem, Scene3D, Time, Vector3, Vector3Ex, View3D } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+// simple base demo
+class DrawCallInstance {
+ scene: Scene3D;
+ public anim: boolean = false;
+
+ async run() {
+ Engine3D.setting.pick.enable = false;
+ // init engine
+ await Engine3D.init({ renderLoop: () => this.renderLoop() });
+
+ OcclusionSystem.enable = false;
+ // create new Scene
+ this.scene = new Scene3D();
+
+ // add performance stats
+ this.scene.addComponent(Stats);
+
+ // add an Atmospheric sky enviroment
+ let sky = this.scene.addComponent(AtmosphericComponent);
+ sky.sunY = 0.6;
+
+ // init camera3D
+ let mainCamera = CameraUtil.createCamera3D(null, this.scene);
+ mainCamera.perspective(60, Engine3D.aspect, 1, 2000.0);
+
+ // add a basic camera controller
+ let hoverCameraController = mainCamera.object3D.addComponent(HoverCameraController);
+ hoverCameraController.setCamera(15, -15, 300);
+
+ // add a basic direct light
+ let lightObj = new Object3D();
+ lightObj.rotationX = 45;
+ lightObj.rotationY = 60;
+ lightObj.rotationZ = 150;
+ let dirLight = lightObj.addComponent(DirectLight);
+ dirLight.lightColor = KelvinUtil.color_temperature_to_rgb(5500);
+ dirLight.intensity = 10;
+ dirLight.indirect = 1;
+ this.scene.addChild(lightObj);
+
+ sky.relativeTransform = dirLight.transform;
+
+ // create a view with target this.scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+
+ // start render
+ Engine3D.startRenderView(view);
+
+ let gui = new dat.GUI();
+ let f = gui.addFolder('Orillusion');
+ f.add({ count: '100000' }, 'count');
+ f.add(this, 'anim').onChange(() => this.anim != this.anim);
+ f.open();
+
+ this.initScene();
+ }
+
+ private _list: Object3D[] = [];
+
+ initScene() {
+ let shareGeometry = new BoxGeometry();
+ let material = new LambertMaterial();
+ material.baseColor = new Color(Math.random() / 2 + 0.5, Math.random() / 2 + 0.5, Math.random() / 2 + 0.5);
+
+ let group = new Object3D();
+ let count = 100000;
+
+ let ii = 0;
+ for (let i = 0; i < count; i++) {
+ let pos = Vector3Ex.sphereXYZ(ii * 60 + 20, ii * 60 + 100, 100, i * 0.001 + 10, 100);
+ let obj = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.geometry = shareGeometry;
+ mr.material = material;
+ obj.localPosition = pos;
+ group.addChild(obj);
+ this._list.push(obj);
+
+ obj.transform.scaleX = Math.random() * 2 + 1.2;
+ obj.transform.scaleY = Math.random() * 2 + 1.2;
+ obj.transform.scaleZ = Math.random() * 2 + 1.2;
+ obj.transform.rotationX = Math.random() * 360;
+ obj.transform.rotationY = Math.random() * 360;
+ obj.transform.rotationZ = Math.random() * 360;
+ obj.transform.localDetailRot = new Vector3((Math.random() * 1 - 1 * 0.5) * 2.0 * Math.random() * 50 * 0.001, (Math.random() * 1 - 1 * 0.5) * 2.0 * Math.random() * 50 * 0.001, (Math.random() * 1 - 1 * 0.5) * 2.0 * Math.random() * 50 * 0.001);
+
+ if (i % 10000 == 0) {
+ ii++;
+ }
+ }
+
+ group.addComponent(InstanceDrawComponent);
+ group.transform.localDetailRot = new Vector3(0, 1.0 * 0.001, 0);
+
+ group.bound = new BoundingBox(Vector3.SAFE_MIN, Vector3.SAFE_MAX);
+ this._list.push(group);
+ this.scene.addChild(group);
+ }
+
+ renderLoop() {
+ if (this.anim) {
+ for (let i = 0; i < this._list.length; i++) {
+ let element = this._list[i];
+ element.transform.localChange = true;
+ }
+ }
+ }
+}
+
+new DrawCallInstance().run();
diff --git a/docs/public/examples/benchmark/InstanceDraw2.ts b/docs/public/examples/benchmark/InstanceDraw2.ts
new file mode 100644
index 00000000..8ffdccbf
--- /dev/null
+++ b/docs/public/examples/benchmark/InstanceDraw2.ts
@@ -0,0 +1,111 @@
+import { Stats } from '@orillusion/stats';
+import { Engine3D, Scene3D, AtmosphericComponent, CameraUtil, HoverCameraController, Object3D, MeshRenderer, BoxGeometry, LitMaterial, DirectLight, KelvinUtil, View3D, Vector3, Vector3Ex, UnLitMaterial, InstanceDrawComponent, LambertMaterial, Time, BoundingBox, Color } from '@orillusion/core';
+import * as dat from 'dat.gui';
+
+// simple base demo
+class Sample_SphereDraw {
+ scene: Scene3D;
+ public anim: boolean = false;
+ async run() {
+ // init engine
+ Engine3D.setting.pick.enable = false;
+ await Engine3D.init({ renderLoop: () => this.renderLoop() });
+ // create new Scene
+ this.scene = new Scene3D();
+
+ // add performance stats
+ this.scene.addComponent(Stats);
+
+ // add an Atmospheric sky enviroment
+ let sky = this.scene.addComponent(AtmosphericComponent);
+ sky.sunY = 0.6;
+
+ // init camera3D
+ let mainCamera = CameraUtil.createCamera3D(null, this.scene);
+ mainCamera.perspective(60, Engine3D.aspect, 1, 2000.0);
+
+ // add a basic camera controller
+ let hoverCameraController = mainCamera.object3D.addComponent(HoverCameraController);
+ hoverCameraController.setCamera(15, -15, 100);
+
+ // add a basic direct light
+ let lightObj = new Object3D();
+ lightObj.rotationX = 45;
+ lightObj.rotationY = 60;
+ lightObj.rotationZ = 150;
+ let dirLight = lightObj.addComponent(DirectLight);
+ dirLight.lightColor = KelvinUtil.color_temperature_to_rgb(53355);
+ dirLight.intensity = 10;
+ this.scene.addChild(lightObj);
+
+ sky.relativeTransform = dirLight.transform;
+
+ // create a view with target this.scene and camera
+ let view = new View3D();
+ view.scene = this.scene;
+ view.camera = mainCamera;
+
+ // start render
+ Engine3D.startRenderView(view);
+
+ let gui = new dat.GUI();
+ let f = gui.addFolder('Orillusion');
+ f.add({ count: '100000' }, 'count').name('object count');
+ f.add({ count: '1000' }, 'count').name('material count');
+ f.add(this, 'anim').onChange(() => this.anim != this.anim);
+ f.open();
+
+ this.initScene();
+ }
+
+ private _list: Object3D[] = [];
+ initScene() {
+ let shareGeometry = new BoxGeometry();
+ let materials:UnLitMaterial[] = [];
+ for (let i = 0; i < 1000; i++) {
+ let mat = new UnLitMaterial()
+ mat.baseColor = Color.random();
+ materials.push(mat)
+ }
+
+ let group = new Object3D();
+ this.scene.addChild(group);
+ let count = 100000;
+ for (let i = 0; i < count; i++) {
+ let pos = Vector3Ex.sphere(100);
+ let obj = new Object3D();
+ let mr = obj.addComponent(MeshRenderer);
+ mr.geometry = shareGeometry;
+ mr.material = materials[Math.floor(Math.random() * materials.length)];
+ obj.localPosition = pos;
+ group.addChild(obj);
+ this._list.push(obj);
+
+ let d = obj.transform.worldPosition.subtract(group.transform.worldPosition);
+ d.normalize();
+
+ let sc = Math.random() * 0.5 + 0.1;
+ obj.transform.scaleX = sc;
+ obj.transform.scaleY = sc;
+ obj.transform.scaleZ = Math.random() * 5 + 1;
+
+ obj.transform.forward = d;
+ }
+ group.addComponent(InstanceDrawComponent);
+ // use localDetailRot to update rotation by time
+ group.transform.localDetailRot = new Vector3(0, 0.01, 0);
+ group.bound = new BoundingBox(Vector3.SAFE_MIN, Vector3.SAFE_MAX);
+ this._list.push(group);
+ }
+
+ renderLoop() {
+ if (this.anim) {
+ for (let i = 0; i < this._list.length; i++) {
+ let element = this._list[i];
+ element.transform.localChange = true;
+ }
+ }
+ }
+}
+
+new Sample_SphereDraw().run();
diff --git a/docs/public/examples/compute/cloth.ts b/docs/public/examples/compute/cloth.ts
new file mode 100644
index 00000000..33787a67
--- /dev/null
+++ b/docs/public/examples/compute/cloth.ts
@@ -0,0 +1,1155 @@
+import { AtmosphericComponent, BoxGeometry, CameraUtil, ComputeGPUBuffer, ComputeShader, DirectLight, Engine3D, HoverCameraController, KeyCode, KeyEvent, LitMaterial, MeshRenderer, Object3D, PlaneGeometry, Scene3D, SphereGeometry, Time, Vector3, VertexAttributeName, View3D, webGPUContext } from '@orillusion/core';
+
+class Demo_Cloth {
+ async run() {
+ Engine3D.setting.shadow.autoUpdate = true;
+ Engine3D.setting.shadow.updateFrameRate = 1;
+ Engine3D.setting.shadow.shadowBound = 5;
+ Engine3D.setting.shadow.shadowSize = 2048;
+ Engine3D.setting.shadow.shadowBias = 0.0002;
+
+ await Engine3D.init({});
+
+ let scene = new Scene3D();
+ let sky = scene.addComponent(AtmosphericComponent);
+ await this.initScene(scene);
+
+ let camera = CameraUtil.createCamera3DObject(scene);
+
+ camera.perspective(60, webGPUContext.aspect, 0.01, 10000.0);
+ let ctl = camera.object3D.addComponent(HoverCameraController);
+ ctl.setCamera(30, -28, 2);
+
+ let view = new View3D();
+ view.scene = scene;
+ view.camera = camera;
+
+ Engine3D.startRenderView(view);
+ }
+
+ async initScene(scene: Scene3D) {
+ let mat = new LitMaterial();
+ mat.baseMap = Engine3D.res.grayTexture;
+ mat.roughness = 0.8;
+ mat.metallic = 0.1;
+
+ let sphere = new Object3D();
+ sphere.transform.z = 0.5;
+ let mr = sphere.addComponent(MeshRenderer);
+ mr.geometry = new SphereGeometry(0.16, 16, 16);
+ mr.material = mat;//new HDRLitMaterial();
+ mr.castShadow = true;
+ scene.addChild(sphere);
+
+ let cloth = new Object3D();
+ let simulator = cloth.addComponent(ClothSimulator);
+ simulator.castShadow = true;
+ simulator.SetInteractionSphere(sphere);
+ scene.addChild(cloth);
+
+ {
+ let mat = new LitMaterial();
+ mat.baseMap = Engine3D.res.grayTexture;
+ mat.roughness = 0.8;
+ let plane = new Object3D();
+ plane.transform.y = -1;
+ let planeMesh = plane.addComponent(MeshRenderer);
+ planeMesh.geometry = new PlaneGeometry(100, 100);
+ planeMesh.material = mat;
+ planeMesh.receiveShadow = true;
+ scene.addChild(plane);
+ }
+
+ {
+ var lightObj = new Object3D();
+ lightObj.x = 0;
+ lightObj.y = 0;
+ lightObj.z = 0;
+ lightObj.rotationX = 45;
+ lightObj.rotationY = 0;
+ lightObj.rotationZ = 0;
+ let lc = lightObj.addComponent(DirectLight);
+ lc.intensity = 3;
+ lc.castShadow = true;
+ scene.addChild(lightObj);
+ }
+
+ {
+ let poleMat = new LitMaterial();
+
+
+ let pole_L = new Object3D();
+ pole_L.transform.y = -0.25;
+ pole_L.transform.x = -0.59;
+ let mr = pole_L.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(0.02, 1.5, 0.02);
+ mr.material = poleMat
+ mr.castShadow = true;
+ scene.addChild(pole_L);
+
+ let pole_R = new Object3D();
+ pole_R.transform.y = -0.25;
+ pole_R.transform.x = 0.59;
+ mr = pole_R.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(0.02, 1.5, 0.02);
+ mr.material = poleMat
+ mr.castShadow = true;
+ scene.addChild(pole_R);
+
+ let pole_T = new Object3D();
+ pole_T.transform.y = 0.5;
+ mr = pole_T.addComponent(MeshRenderer);
+ mr.geometry = new BoxGeometry(1.2, 0.02, 0.02);
+ mr.material = poleMat
+ mr.castShadow = true;
+ scene.addChild(pole_T);
+ }
+ }
+}
+
+new Demo_Cloth().run();
+
+type ClothSimulatorConfig = {
+ NUMPARTICLES: number,
+ NUMTSURFACES: number,
+ NUMTEDGES: number,
+ NUMTBENDS: number,
+ GRAVITY: number,
+ DELTATIME: number,
+ NUMSUBSTEPS: number,
+ STRETCHCOMPLIANCE: number,
+ BENDCOMPLIANCE: number,
+ SPHERERADIUS: number,
+ SPHERECENTREX: number,
+ SPHERECENTREY: number,
+ SPHERECENTREZ: number,
+ clothVertex: Float32Array | Uint16Array | Uint32Array,
+ clothFaceTriIds: Float32Array | Uint16Array | Uint32Array,
+ clothVertexBuffer: ComputeGPUBuffer,
+};
+
+class ClothSimulator extends MeshRenderer {
+ protected mConfig: ClothSimulatorConfig;
+ protected mClothGeometry: PlaneGeometry;
+ protected mInteractionSphere: Object3D;
+ protected mClothComputePipeline: ClothSimulatorPipeline;
+ protected mKeyState: boolean[] = [false, false, false, false];
+
+ constructor() {
+ super();
+ this.mConfig = {
+ NUMPARTICLES: 0,
+ NUMTSURFACES: 0,
+ NUMTEDGES: 0,
+ NUMTBENDS: 0,
+ GRAVITY: -10,
+ DELTATIME: 1 / 60,
+ NUMSUBSTEPS: 15,
+ STRETCHCOMPLIANCE: 0.0,
+ BENDCOMPLIANCE: 0.0,
+ SPHERERADIUS: 0.2,
+ SPHERECENTREX: 0.0,
+ SPHERECENTREY: 0.5,
+ SPHERECENTREZ: 0.25,
+ clothVertex: null,
+ clothFaceTriIds: null,
+ clothVertexBuffer: null,
+ };
+ this.mClothGeometry = new PlaneGeometry(1, 1, 20, 20, Vector3.Z_AXIS);
+ this.mConfig.clothVertex = this.mClothGeometry.getAttribute(VertexAttributeName.position).data as Float32Array;
+ this.mConfig.clothFaceTriIds = this.mClothGeometry.getAttribute(VertexAttributeName.indices).data as Uint16Array;
+ this.mConfig.NUMPARTICLES = this.mConfig.clothVertex.length / 3;
+ this.mConfig.NUMTSURFACES = this.mConfig.clothFaceTriIds.length / 3;
+ }
+
+ protected updateKeyState(keyCode: number, state: boolean) {
+ switch (keyCode) {
+ case KeyCode.Key_W:
+ this.mKeyState[0] = state;
+ break;
+ case KeyCode.Key_S:
+ this.mKeyState[1] = state;
+ break;
+ case KeyCode.Key_A:
+ this.mKeyState[2] = state;
+ break;
+ case KeyCode.Key_D:
+ this.mKeyState[3] = state;
+ break;
+ }
+ }
+
+ public init(){
+ super.init();
+ this.alwaysRender = true;
+ this.geometry = this.mClothGeometry;
+ var mat = new LitMaterial();
+ mat.roughness = 0.8;
+ mat.baseMap = Engine3D.res.redTexture;
+ mat.cullMode = 'none';
+ this.material = mat;
+ }
+
+ public start() {
+ Engine3D.inputSystem.addEventListener(KeyEvent.KEY_DOWN, (e: KeyEvent) => this.updateKeyState(e.keyCode, true), this);
+ Engine3D.inputSystem.addEventListener(KeyEvent.KEY_UP, (e: KeyEvent) => this.updateKeyState(e.keyCode, false), this);
+ }
+
+ public SetInteractionSphere(sphere: Object3D) {
+ this.mInteractionSphere = sphere;
+ }
+
+ private _tickTime = 0;
+
+ public onCompute(view: View3D, command?: GPUCommandEncoder) {
+ if (!this.mClothComputePipeline) {
+ this.mConfig.clothVertexBuffer = this.mClothGeometry.vertexBuffer.vertexGPUBuffer;
+ this.mClothComputePipeline = new ClothSimulatorPipeline(this.mConfig);
+ }
+
+ this._tickTime += Time.delta / 1000.0;
+ if (this._tickTime >= this.mConfig.DELTATIME) {
+ this._tickTime -= this.mConfig.DELTATIME;
+ var pos = new Vector3();
+ if (this.mInteractionSphere) {
+ var transform = this.mInteractionSphere.transform;
+ let dt = Time.delta / 1000.0;
+ let speed = 0.5 * dt;
+ // W S
+ if (this.mKeyState[0]) {
+ transform.z -= speed
+ } else if (this.mKeyState[1]) {
+ transform.z += speed
+ }
+ // A D
+ if (this.mKeyState[2]) {
+ transform.x -= speed
+ } else if (this.mKeyState[3]) {
+ transform.x += speed
+ }
+ pos.copyFrom(this.mInteractionSphere.transform.worldPosition);
+ }
+
+ this.mClothComputePipeline.compute(command, pos);
+ }
+ }
+}
+
+class ClothSimulatorBuffer {
+ protected mPositionBuffer: ComputeGPUBuffer;
+ protected mNormalBuffer: ComputeGPUBuffer;
+ protected mVertexPositionData: Float32Array;
+ protected mVertexPositionBuffer: ComputeGPUBuffer;
+ protected mNewPositionBuffer: ComputeGPUBuffer;
+ protected mAtomicPositionBuffer: ComputeGPUBuffer;
+ protected mAtomicNormalBuffer: ComputeGPUBuffer;
+ protected mVelocityBuffer: ComputeGPUBuffer;
+ protected mStretchInfosBuffer: ComputeGPUBuffer;
+ protected mBendInfosBuffer: ComputeGPUBuffer;
+ protected mSurfaceInfosBuffer: ComputeGPUBuffer;
+ // protected mInputData: Float32Array;
+ protected mInputBuffer: ComputeGPUBuffer;
+ protected mOutput0Buffer: ComputeGPUBuffer;
+
+ constructor(config: ClothSimulatorConfig) {
+ this.initGPUBuffer(config);
+ }
+
+ protected initGPUBuffer(config: ClothSimulatorConfig) {
+
+ const { NUMPARTICLES, clothVertex } = config;
+
+ let position_v4 = new Float32Array(NUMPARTICLES * 4)
+ for (let i = 0; i < NUMPARTICLES; i++) {
+ position_v4[i * 4] = clothVertex[i * 3]
+ position_v4[i * 4 + 1] = clothVertex[i * 3 + 1]
+ position_v4[i * 4 + 2] = clothVertex[i * 3 + 2]
+ position_v4[i * 4 + 3] = 1
+ }
+ this.mVertexPositionData = position_v4;
+ this.mVertexPositionBuffer = new ComputeGPUBuffer(this.mVertexPositionData.length);
+ this.mVertexPositionBuffer.setFloat32Array("", this.mVertexPositionData);
+ this.mVertexPositionBuffer.apply();
+
+ this.mNewPositionBuffer = new ComputeGPUBuffer(this.mVertexPositionData.length);
+ this.mNewPositionBuffer.setFloat32Array("", this.mVertexPositionData);
+ this.mNewPositionBuffer.apply();
+
+ this.mAtomicPositionBuffer = new ComputeGPUBuffer(this.mVertexPositionData.length);
+
+ this.mAtomicNormalBuffer = new ComputeGPUBuffer(NUMPARTICLES * 4);
+ this.mNormalBuffer = new ComputeGPUBuffer(NUMPARTICLES * 4);
+
+ const { NUMTSURFACES, clothFaceTriIds } = config;
+
+ const invMass = new Float32Array(NUMPARTICLES)
+ for (let i = 0; i < NUMTSURFACES; i++) {
+ var A = this.getTriArea(clothVertex, clothFaceTriIds, i);
+ var pInvMass = A > 0.0 ? 1.0 / A / 3.0 : 0.0;
+ invMass[clothFaceTriIds[3 * i]] += pInvMass;
+ invMass[clothFaceTriIds[3 * i + 1]] += pInvMass;
+ invMass[clothFaceTriIds[3 * i + 2]] += pInvMass;
+ }
+ let minX = Number.MAX_VALUE;
+ let maxX = -Number.MAX_VALUE;
+ let minY = Number.MAX_VALUE;
+ let maxY = -Number.MAX_VALUE;
+ for (let i = 0; i < NUMPARTICLES; i++) {
+ minX = Math.min(minX, clothVertex[3 * i]);
+ maxX = Math.max(maxX, clothVertex[3 * i]);
+ minY = Math.min(minY, clothVertex[3 * i + 1]);
+ maxY = Math.max(maxY, clothVertex[3 * i + 1]);
+ }
+ // console.log(minX, maxX, minY, maxY)
+ var eps = 0.0001;
+ for (let i = 0; i < NUMPARTICLES; i++) {
+ var x = clothVertex[3 * i];
+ var y = clothVertex[3 * i + 1];
+ if ((y > maxY - eps) && (x < minX + eps || x > maxX - eps))
+ invMass[i] = 0.0;
+ }
+
+ const velocity = new Float32Array(4 * NUMPARTICLES)
+ for (let i = 0; i < NUMPARTICLES; ++i) {
+ velocity[i * 4 + 3] = invMass[i]
+ }
+ this.mVelocityBuffer = new ComputeGPUBuffer(velocity.length);
+ this.mVelocityBuffer.setFloat32Array("", velocity);
+ this.mVelocityBuffer.apply();
+
+ const neighbors = this.findTriNeighbors(clothFaceTriIds);
+ var edgeIds = [];
+ var triPairIds = [];
+ for (var i = 0; i < NUMTSURFACES; i++) {
+ for (var j = 0; j < 3; j++) {
+ var id0 = clothFaceTriIds[3 * i + j];
+ var id1 = clothFaceTriIds[3 * i + (j + 1) % 3];
+
+ // each edge only once
+ var n = neighbors[3 * i + j];
+ if (n < 0 || id0 < id1) {
+ edgeIds.push(id0);
+ edgeIds.push(id1);
+ }
+ // tri pair
+ if (n >= 0 && id0 > id1) {
+ // opposite ids
+ var ni = Math.floor(n / 3);
+ var nj = n % 3;
+ var id2 = clothFaceTriIds[3 * i + (j + 2) % 3];
+ var id3 = clothFaceTriIds[3 * ni + (nj + 2) % 3];
+ triPairIds.push(id0);
+ triPairIds.push(id1);
+ triPairIds.push(id2);
+ triPairIds.push(id3);
+ }
+ }
+ }
+ const NUMTEDGES = edgeIds.length / 2
+ config.NUMTEDGES = NUMTEDGES
+ const stretchInfos = new Float32Array(4 * NUMTEDGES)
+ for (var i = 0; i < NUMTEDGES; i++) {
+ stretchInfos[i * 4 + 0] = edgeIds[2 * i];
+ stretchInfos[i * 4 + 1] = edgeIds[2 * i + 1];
+ stretchInfos[i * 4 + 2] = Math.sqrt(this.distance(clothVertex, stretchInfos[i * 4], clothVertex, stretchInfos[i * 4 + 1]));
+ }
+ this.mStretchInfosBuffer = new ComputeGPUBuffer(stretchInfos.length);
+ this.mStretchInfosBuffer.setFloat32Array("", stretchInfos);
+ this.mStretchInfosBuffer.apply();
+
+ const NUMTBENDS = triPairIds.length / 4
+ config.NUMTBENDS = NUMTBENDS
+ const bendInfos = new Float32Array(4 * NUMTBENDS)
+ for (var i = 0; i < NUMTBENDS; i++) {
+ bendInfos[i * 4 + 0] = triPairIds[4 * i + 2];
+ bendInfos[i * 4 + 1] = triPairIds[4 * i + 3];
+ bendInfos[i * 4 + 2] = Math.sqrt(this.distance(clothVertex, bendInfos[i * 4], clothVertex, bendInfos[i * 4 + 1]));
+ }
+ this.mBendInfosBuffer = new ComputeGPUBuffer(bendInfos.length);
+ this.mBendInfosBuffer.setFloat32Array("", bendInfos);
+ this.mBendInfosBuffer.apply();
+
+ let surfaceInfos = new Float32Array(clothFaceTriIds.length / 3 * 4)
+ for (let i = 0; i < clothFaceTriIds.length / 3; i++) {
+ surfaceInfos[i * 4] = clothFaceTriIds[i * 3]
+ surfaceInfos[i * 4 + 1] = clothFaceTriIds[i * 3 + 1]
+ surfaceInfos[i * 4 + 2] = clothFaceTriIds[i * 3 + 2]
+ surfaceInfos[i * 4 + 3] = 1
+ }
+ this.mSurfaceInfosBuffer = new ComputeGPUBuffer(surfaceInfos.length);
+ this.mSurfaceInfosBuffer.setFloat32Array("", surfaceInfos);
+ this.mSurfaceInfosBuffer.apply();
+
+ const { GRAVITY, DELTATIME, NUMSUBSTEPS, STRETCHCOMPLIANCE, BENDCOMPLIANCE, SPHERERADIUS, SPHERECENTREX, SPHERECENTREY, SPHERECENTREZ } = config;
+ this.mInputBuffer = new ComputeGPUBuffer(16);
+ this.mInputBuffer.setFloat("NUMPARTICLES", NUMPARTICLES);
+ this.mInputBuffer.setFloat("NUMTEDGES", NUMTEDGES);
+ this.mInputBuffer.setFloat("NUMTBENDS", NUMTBENDS);
+ this.mInputBuffer.setFloat("NUMTSURFACES", NUMTSURFACES);
+ this.mInputBuffer.setFloat("GRAVITY", GRAVITY);
+ this.mInputBuffer.setFloat("DELTATIME", DELTATIME / NUMSUBSTEPS);
+ this.mInputBuffer.setFloat("STRETCHCOMPLIANCE", STRETCHCOMPLIANCE);
+ this.mInputBuffer.setFloat("BENDCOMPLIANCE", BENDCOMPLIANCE);
+ this.mInputBuffer.setFloat("SPHERERADIUS", SPHERERADIUS);
+ this.mInputBuffer.setFloat("SPHERECENTREX", SPHERECENTREX);
+ this.mInputBuffer.setFloat("SPHERECENTREY", SPHERECENTREY);
+ this.mInputBuffer.setFloat("SPHERECENTREZ", SPHERECENTREZ);
+ this.mInputBuffer.setFloat("ALPA", 0.0);
+ this.mInputBuffer.apply();
+
+ this.mOutput0Buffer = new ComputeGPUBuffer(NUMPARTICLES * 4);
+ }
+
+ public updateInputData(pos: Vector3) {
+ this.mInputBuffer.setFloat("SPHERECENTREX", pos.x);
+ this.mInputBuffer.setFloat("SPHERECENTREY", pos.y);
+ this.mInputBuffer.setFloat("SPHERECENTREZ", pos.z);
+ this.mInputBuffer.apply();
+ }
+
+ protected getTriArea(position: Float32Array | Uint16Array | Uint32Array, triIds: Float32Array | Uint16Array | Uint32Array, i: number) {
+ let id0 = triIds[3 * i];
+ let id1 = triIds[3 * i + 1];
+ let id2 = triIds[3 * i + 2];
+
+ let temp = [0, 0, 0, 0, 0, 0, 0, 0, 0];
+ temp[0] = position[id1 * 3] - position[id0 * 3];
+ temp[1] = position[id1 * 3 + 1] - position[id0 * 3 + 1];
+ temp[2] = position[id1 * 3 + 2] - position[id0 * 3 + 2];
+ temp[3] = position[id2 * 3] - position[id0 * 3];
+ temp[4] = position[id2 * 3 + 1] - position[id0 * 3 + 1];
+ temp[5] = position[id2 * 3 + 2] - position[id0 * 3 + 2];
+
+ this.cross(temp, 2, temp, 0, temp, 1);
+ return this.dot(temp, 2, temp, 2) / 2.0;
+ }
+
+ protected cross(a: number[], indexa: number, b: number[], indexb: number, c: number[], indexc: number) {
+ a[indexa * 3] = b[indexb * 3 + 1] * c[indexc * 3 + 2] - b[indexb * 3 + 2] * c[indexc * 3 + 1];
+ a[indexa * 3 + 1] = b[indexb * 3 + 2] * c[indexc * 3 + 0] - b[indexb * 3 + 0] * c[indexc * 3 + 2];
+ a[indexa * 3 + 2] = b[indexb * 3 + 0] * c[indexc * 3 + 1] - b[indexb * 3 + 1] * c[indexc * 3 + 0];
+ }
+
+ protected dot(a: number[], indexa: number, b: number[], indexb: number) {
+ return a[indexa * 3] * b[indexb * 3] + a[indexa * 3 + 1] * b[indexb * 3 + 1] + a[indexa * 3 + 2] * b[indexb * 3 + 2];
+ }
+
+ protected findTriNeighbors(triIds: Float32Array | Uint16Array | Uint32Array) {
+ // create common edges
+ var edges:any = [];
+ var numTris = triIds.length / 3;
+
+ for (var i = 0; i < numTris; i++) {
+ for (var j = 0; j < 3; j++) {
+ var id0 = triIds[3 * i + j];
+ var id1 = triIds[3 * i + (j + 1) % 3];
+ edges.push({
+ id0: Math.min(id0, id1),
+ id1: Math.max(id0, id1),
+ edgeNr: 3 * i + j
+ });
+ }
+ }
+
+ // sort so common edges are next to each other
+ edges.sort((a, b) => ((a.id0 < b.id0) || (a.id0 == b.id0 && a.id1 < b.id1)) ? -1 : 1);
+
+ // find matchign edges
+ const neighbors = new Float32Array(3 * numTris);
+ neighbors.fill(-1); // open edge
+
+ var nr = 0;
+ while (nr < edges.length) {
+ var e0 = edges[nr];
+ nr++;
+ if (nr < edges.length) {
+ var e1 = edges[nr];
+ if (e0.id0 == e1.id0 && e0.id1 == e1.id1) {
+ neighbors[e0.edgeNr] = e1.edgeNr;
+ neighbors[e1.edgeNr] = e0.edgeNr;
+ }
+ // nr++;
+ }
+ }
+
+ return neighbors;
+ }
+
+ protected distance(a: Float32Array | Uint16Array | Uint32Array, indexa: number, b: Float32Array | Uint16Array | Uint32Array, indexb: number) {
+ let a0 = a[indexa * 3] - b[indexb * 3], a1 = a[indexa * 3 + 1] - b[indexb * 3 + 1], a2 = a[indexa * 3 + 2] - b[indexb * 3 + 2];
+ return a0 * a0 + a1 * a1 + a2 * a2;
+ }
+}
+
+class ClothSimulatorPipeline extends ClothSimulatorBuffer {
+ protected mConfig: ClothSimulatorConfig;
+ protected mPreProcessComputeShader: ComputeShader;
+ protected mStretchingComputeShader: ComputeShader;
+ protected mBendingComputeShader: ComputeShader;
+ protected mPositionUpdateComputeShader: ComputeShader;
+ protected mPostProcessComputeShader: ComputeShader;
+ protected mComputeNormalComputeShader: ComputeShader;
+ protected mNormalUpdateComputeShader: ComputeShader;
+ protected mUpdateVertexBufferComputeShader: ComputeShader;
+
+ constructor(config: ClothSimulatorConfig) {
+ super(config);
+ this.mConfig = config;
+ this.initPipeline(this.mConfig);
+ }
+
+ public compute(command: GPUCommandEncoder, pos: Vector3) {
+ let computePass = command.beginComputePass();
+
+ const { NUMSUBSTEPS } = this.mConfig;
+
+ this.updateInputData(pos);
+
+ for (let i = 0; i < NUMSUBSTEPS; i++) {
+ this.mPreProcessComputeShader.compute(computePass);
+ this.mStretchingComputeShader.compute(computePass);
+ this.mBendingComputeShader.compute(computePass);
+ this.mPositionUpdateComputeShader.compute(computePass);
+ this.mPostProcessComputeShader.compute(computePass);
+ }
+ this.mComputeNormalComputeShader.compute(computePass);
+ this.mNormalUpdateComputeShader.compute(computePass);
+ this.mUpdateVertexBufferComputeShader.compute(computePass);
+
+ computePass.end();
+ }
+
+ protected initPipeline(config: ClothSimulatorConfig) {
+ const { NUMPARTICLES, NUMTSURFACES, NUMTEDGES, NUMTBENDS } = this.mConfig;
+
+ this.mPreProcessComputeShader = new ComputeShader(preprocess.cs);
+ this.mPreProcessComputeShader.setStorageBuffer(`input`, this.mInputBuffer);
+ this.mPreProcessComputeShader.setStorageBuffer(`position`, this.mVertexPositionBuffer);
+ this.mPreProcessComputeShader.setStorageBuffer(`velocity`, this.mVelocityBuffer);
+ this.mPreProcessComputeShader.setStorageBuffer(`newposition`, this.mNewPositionBuffer);
+ this.mPreProcessComputeShader.setStorageBuffer(`output`, this.mOutput0Buffer);
+ this.mPreProcessComputeShader.workerSizeX = Math.ceil(NUMPARTICLES / 128);
+
+ this.mStretchingComputeShader = new ComputeShader(stretching.cs);
+ this.mStretchingComputeShader.setStorageBuffer(`input`, this.mInputBuffer);
+ this.mStretchingComputeShader.setStorageBuffer(`inposition`, this.mNewPositionBuffer);
+ this.mStretchingComputeShader.setStorageBuffer(`velocity`, this.mVelocityBuffer);
+ this.mStretchingComputeShader.setStorageBuffer(`atomicposition`, this.mAtomicPositionBuffer);
+ this.mStretchingComputeShader.setStorageBuffer(`stretchinfo`, this.mStretchInfosBuffer);
+ this.mStretchingComputeShader.setStorageBuffer(`output`, this.mOutput0Buffer);
+ this.mStretchingComputeShader.workerSizeX = Math.ceil(NUMTEDGES / 128);
+
+ this.mBendingComputeShader = new ComputeShader(bending.cs);
+ this.mBendingComputeShader.setStorageBuffer(`input`, this.mInputBuffer);
+ this.mBendingComputeShader.setStorageBuffer(`inposition`, this.mNewPositionBuffer);
+ this.mBendingComputeShader.setStorageBuffer(`velocity`, this.mVelocityBuffer);
+ this.mBendingComputeShader.setStorageBuffer(`atomicposition`, this.mAtomicPositionBuffer);
+ this.mBendingComputeShader.setStorageBuffer(`bendinfo`, this.mBendInfosBuffer);
+ this.mBendingComputeShader.setStorageBuffer(`output`, this.mOutput0Buffer);
+ this.mBendingComputeShader.workerSizeX = Math.ceil(NUMTBENDS / 128);
+
+ this.mPositionUpdateComputeShader = new ComputeShader(positionupdate.cs);
+ this.mPositionUpdateComputeShader.setStorageBuffer(`input`, this.mInputBuffer);
+ this.mPositionUpdateComputeShader.setStorageBuffer(`atomicposition`, this.mAtomicPositionBuffer);
+ this.mPositionUpdateComputeShader.setStorageBuffer(`outposition`, this.mNewPositionBuffer);
+ this.mPositionUpdateComputeShader.setStorageBuffer(`output`, this.mOutput0Buffer);
+ this.mPositionUpdateComputeShader.workerSizeX = Math.ceil(NUMPARTICLES / 128);
+
+ this.mPostProcessComputeShader = new ComputeShader(postprocess.cs);
+ this.mPostProcessComputeShader.setStorageBuffer(`input`, this.mInputBuffer);
+ this.mPostProcessComputeShader.setStorageBuffer(`newposition`, this.mNewPositionBuffer);
+ this.mPostProcessComputeShader.setStorageBuffer(`velocity`, this.mVelocityBuffer);
+ this.mPostProcessComputeShader.setStorageBuffer(`position`, this.mVertexPositionBuffer);
+ this.mPostProcessComputeShader.setStorageBuffer(`output`, this.mOutput0Buffer);
+ this.mPostProcessComputeShader.workerSizeX = Math.ceil(NUMPARTICLES / 128);
+
+ this.mComputeNormalComputeShader = new ComputeShader(computenormal.cs);
+ this.mComputeNormalComputeShader.setStorageBuffer(`input`, this.mInputBuffer);
+ this.mComputeNormalComputeShader.setStorageBuffer(`position`, this.mVertexPositionBuffer);
+ this.mComputeNormalComputeShader.setStorageBuffer(`surfaceinfo`, this.mSurfaceInfosBuffer);
+ this.mComputeNormalComputeShader.setStorageBuffer(`atomicnormal`, this.mAtomicNormalBuffer);
+ this.mComputeNormalComputeShader.setStorageBuffer(`output`, this.mOutput0Buffer);
+ this.mComputeNormalComputeShader.workerSizeX = Math.ceil(NUMTSURFACES / 128);
+
+ this.mNormalUpdateComputeShader = new ComputeShader(normalupdate.cs);
+ this.mNormalUpdateComputeShader.setStorageBuffer(`input`, this.mInputBuffer);
+ this.mNormalUpdateComputeShader.setStorageBuffer(`atomicnormal`, this.mAtomicNormalBuffer);
+ this.mNormalUpdateComputeShader.setStorageBuffer(`normal`, this.mNormalBuffer);
+ this.mNormalUpdateComputeShader.setStorageBuffer(`output`, this.mOutput0Buffer);
+ this.mNormalUpdateComputeShader.workerSizeX = Math.ceil(NUMPARTICLES / 128);
+
+ this.mUpdateVertexBufferComputeShader = new ComputeShader(updatevertexbuffer.cs);
+ this.mUpdateVertexBufferComputeShader.setStorageBuffer(`input`, this.mInputBuffer);
+ this.mUpdateVertexBufferComputeShader.setStorageBuffer(`position`, this.mVertexPositionBuffer);
+ this.mUpdateVertexBufferComputeShader.setStorageBuffer(`normal`, this.mNormalBuffer);
+ this.mUpdateVertexBufferComputeShader.setStorageBuffer(`vertexBuffer`, config.clothVertexBuffer);
+ this.mUpdateVertexBufferComputeShader.workerSizeX = Math.ceil(NUMTSURFACES / 128);
+ }
+}
+
+class bending {
+ public static cs: string = /* wgsl */ `
+ struct InputArgs {
+ NUMPARTICLES: f32,
+ NUMTEDGES: f32,
+ NUMTBENDS: f32,
+ NUMTSURFACES: f32,
+ GRAVITY: f32,
+ DELTATIME: f32,
+ STRETCHCOMPLIANCE: f32,
+ BENDCOMPLIANCE: f32,
+ SPHERERADIUS: f32,
+ SPHERECENTREX: f32,
+ SPHERECENTREY: f32,
+ SPHERECENTREZ: f32,
+ ALPA: f32,
+ rsv0: f32,
+ rsv1: f32,
+ rsv2: f32,
+ };
+
+ @group(0) @binding(0) var input: InputArgs;
+ @group(0) @binding(1) var inposition: array>;
+ @group(0) @binding(2) var velocity: array>;
+ @group(0) @binding(3) var atomicposition: array>;
+ @group(1) @binding(0) var bendinfo: array>;
+ @group(1) @binding(1) var output: array>;
+
+ const size = u32(128);
+ @compute @workgroup_size(size)
+ fn CsMain(
+ @builtin(global_invocation_id) GlobalInvocationID : vec3
+ ) {
+ var index = GlobalInvocationID.x;
+ if(index >= u32(input.NUMTBENDS)){
+ return;
+ }
+ var deltatime = input.DELTATIME;
+ var compliance = input.BENDCOMPLIANCE;
+
+ var alpha = compliance / deltatime / deltatime;
+ // for(var i = 0; i < i32(input[2]); i++){
+ var index0 = u32(bendinfo[index][0]);
+ var index1 = u32(bendinfo[index][1]);
+ var weight0 = velocity[index0][3];
+ var weight1 = velocity[index1][3];
+ var weight = weight0 + weight1;
+
+ if(weight == 0.0){
+ return;
+ }
+ var position0 = vec3(inposition[index0][0], inposition[index0][1], inposition[index0][2]);
+ var position1 = vec3(inposition[index1][0], inposition[index1][1], inposition[index1][2]);
+ var grad = position0 - position1;
+ var length = distance(position0, position1);
+ if(length == 0.0){
+ return;
+ }
+
+ grad = grad / length;
+ var restlength = bendinfo[index][2];
+ var c = length - restlength;
+ var lambda = - c / (weight + alpha);
+
+ var temp0 = grad * lambda * weight0;
+ var temp1 = grad * lambda * weight1;
+ atomicAdd(&atomicposition[index0 * u32(4) + u32(0)], i32(temp0.x * 1000000.0));
+ atomicAdd(&atomicposition[index0 * u32(4) + u32(1)], i32(temp0.y * 1000000.0));
+ atomicAdd(&atomicposition[index0 * u32(4) + u32(2)], i32(temp0.z * 1000000.0));
+ atomicAdd(&atomicposition[index0 * u32(4) + u32(3)], i32(1.0));
+ atomicSub(&atomicposition[index1 * u32(4) + u32(0)], i32(temp1.x * 1000000.0));
+ atomicSub(&atomicposition[index1 * u32(4) + u32(1)], i32(temp1.y * 1000000.0));
+ atomicSub(&atomicposition[index1 * u32(4) + u32(2)], i32(temp1.z * 1000000.0));
+ atomicAdd(&atomicposition[index1 * u32(4) + u32(3)], i32(1.0));
+ // }
+ // for(var i = 0; i < i32(input[0]); i++){
+ // outposition[i][0] = inposition[i][0];
+ // outposition[i][1] = inposition[i][1];
+ // outposition[i][2] = inposition[i][2];
+ // }
+ var debug = output[index];
+ // output[index][0] = position0.x;
+ // output[index][1] = position0.y;
+ // output[index][2] = position[index0][0];
+ // output[index][3] = position[index0][1];
+ }
+ `;
+}
+
+class computenormal {
+ public static cs: string = /* wgsl */ `
+ struct InputArgs {
+ NUMPARTICLES: f32,
+ NUMTEDGES: f32,
+ NUMTBENDS: f32,
+ NUMTSURFACES: f32,
+ GRAVITY: f32,
+ DELTATIME: f32,
+ STRETCHCOMPLIANCE: f32,
+ BENDCOMPLIANCE: f32,
+ SPHERERADIUS: f32,
+ SPHERECENTREX: f32,
+ SPHERECENTREY: f32,
+ SPHERECENTREZ: f32,
+ ALPA: f32,
+ rsv0: f32,
+ rsv1: f32,
+ rsv2: f32,
+ };
+
+ @group(0) @binding(0) var input: InputArgs;
+ @group(0) @binding(1) var position: array>;
+ @group(0) @binding(2) var surfaceinfo: array>;
+ @group(0) @binding(3) var atomicnormal: array>;
+ @group(1) @binding(0) var output: array>;
+
+ const size = u32(128);
+ @compute @workgroup_size(size)
+ fn CsMain(
+ @builtin(global_invocation_id) GlobalInvocationID : vec3
+ ) {
+ var index = GlobalInvocationID.x;
+ if(index >= u32(input.NUMTSURFACES)){
+ return;
+ }
+
+ var index0 = u32(surfaceinfo[index][0]);
+ var index1 = u32(surfaceinfo[index][1]);
+ var index2 = u32(surfaceinfo[index][2]);
+ var vector1 = vec3(position[index1][0] - position[index0][0], position[index1][1] - position[index0][1], position[index1][2] - position[index0][2]);
+ var vector2 = vec3(position[index2][0] - position[index1][0], position[index2][1] - position[index1][1], position[index2][2] - position[index1][2]);
+ var temp = cross(vector1, vector2);
+ temp = temp / length(temp);
+
+ atomicAdd(&atomicnormal[index0 * u32(4) + u32(0)], i32(temp.x * 1000000.0));
+ atomicAdd(&atomicnormal[index0 * u32(4) + u32(1)], i32(temp.y * 1000000.0));
+ atomicAdd(&atomicnormal[index0 * u32(4) + u32(2)], i32(temp.z * 1000000.0));
+ atomicAdd(&atomicnormal[index0 * u32(4) + u32(3)], i32(1.0));
+ atomicAdd(&atomicnormal[index1 * u32(4) + u32(0)], i32(temp.x * 1000000.0));
+ atomicAdd(&atomicnormal[index1 * u32(4) + u32(1)], i32(temp.y * 1000000.0));
+ atomicAdd(&atomicnormal[index1 * u32(4) + u32(2)], i32(temp.z * 1000000.0));
+ atomicAdd(&atomicnormal[index1 * u32(4) + u32(3)], i32(1.0));
+ atomicAdd(&atomicnormal[index2 * u32(4) + u32(0)], i32(temp.x * 1000000.0));
+ atomicAdd(&atomicnormal[index2 * u32(4) + u32(1)], i32(temp.y * 1000000.0));
+ atomicAdd(&atomicnormal[index2 * u32(4) + u32(2)], i32(temp.z * 1000000.0));
+ atomicAdd(&atomicnormal[index2 * u32(4) + u32(3)], i32(1.0));
+
+ var debug = output[index];
+ // output[index][0] = velocity[index][0];
+ // output[index][1] = velocity[index][1];
+ // output[index][2] = currentposition.x;
+ // output[index][3] = oldposition.x;
+ // output[index][2] = tempvelocity.z;
+ // output[index][3] = newposition[index0][1];
+ }
+ `;
+}
+
+class normalupdate {
+ public static cs: string = /* wgsl */ `
+ struct InputArgs {
+ NUMPARTICLES: f32,
+ NUMTEDGES: f32,
+ NUMTBENDS: f32,
+ NUMTSURFACES: f32,
+ GRAVITY: f32,
+ DELTATIME: f32,
+ STRETCHCOMPLIANCE: f32,
+ BENDCOMPLIANCE: f32,
+ SPHERERADIUS: f32,
+ SPHERECENTREX: f32,
+ SPHERECENTREY: f32,
+ SPHERECENTREZ: f32,
+ ALPA: f32,
+ rsv0: f32,
+ rsv1: f32,
+ rsv2: f32,
+ };
+
+ @group(0) @binding(0) var input: InputArgs;
+ @group(0) @binding(1) var atomicnormal: array>;
+ @group(0) @binding(2) var normal: array>;
+ @group(0) @binding(3) var output: array>;
+
+ const size = u32(128);
+ @compute @workgroup_size(size)
+ fn CsMain(
+ @builtin(global_invocation_id) GlobalInvocationID : vec3
+ ) {
+ var index = GlobalInvocationID.x;
+ if(index >= u32(input.NUMPARTICLES)){
+ return;
+ }
+
+ var num = f32(atomicLoad(&atomicnormal[index * u32(4) + u32(3)]));
+ var temp = vec3(f32(atomicLoad(&atomicnormal[index * u32(4) + u32(0)])) / (num) / 1000000.0,
+ f32(atomicLoad(&atomicnormal[index * u32(4) + u32(1)])) / (num) / 1000000.0,
+ f32(atomicLoad(&atomicnormal[index * u32(4) + u32(2)])) / (num) / 1000000.0);
+ // temp = temp / length(temp);
+ normal[index][0] = temp.x;
+ normal[index][1] = temp.y;
+ normal[index][2] = temp.z;
+ atomicStore(&atomicnormal[index * u32(4) + u32(0)], i32(0.0));
+ atomicStore(&atomicnormal[index * u32(4) + u32(1)], i32(0.0));
+ atomicStore(&atomicnormal[index * u32(4) + u32(2)], i32(0.0));
+ atomicStore(&atomicnormal[index * u32(4) + u32(3)], i32(0.0));
+
+ var debug = output[index];
+ // output[index][0] = f32(index);
+ // output[index][1] = normal[index][0];
+ // output[index][2] = normal[index][0];
+ // output[index][3] = normal[index][1];
+ }
+ `;
+}
+
+class positionupdate {
+ public static cs: string = /* wgsl */ `
+ struct InputArgs {
+ NUMPARTICLES: f32,
+ NUMTEDGES: f32,
+ NUMTBENDS: f32,
+ NUMTSURFACES: f32,
+ GRAVITY: f32,
+ DELTATIME: f32,
+ STRETCHCOMPLIANCE: f32,
+ BENDCOMPLIANCE: f32,
+ SPHERERADIUS: f32,
+ SPHERECENTREX: f32,
+ SPHERECENTREY: f32,
+ SPHERECENTREZ: f32,
+ ALPA: f32,
+ rsv0: f32,
+ rsv1: f32,
+ rsv2: f32,
+ };
+
+ @group(0) @binding(0) var input: InputArgs;
+ @group(0) @binding(1) var atomicposition: array>;
+ @group(0) @binding(2) var outposition: array>;
+ @group(0) @binding(3) var output: array>;
+
+ const size = u32(128);
+ @compute @workgroup_size(size)
+ fn CsMain(
+ @builtin(global_invocation_id) GlobalInvocationID : vec3
+ ) {
+ var index = GlobalInvocationID.x;
+ if(index >= u32(input.NUMPARTICLES)){
+ return;
+ }
+ var alpha = input.ALPA;
+ var num = f32(atomicLoad(&atomicposition[index * u32(4) + u32(3)]));
+ outposition[index][0] += f32(atomicLoad(&atomicposition[index * u32(4) + u32(0)])) / (num + alpha) / 1000000.0;
+ outposition[index][1] += f32(atomicLoad(&atomicposition[index * u32(4) + u32(1)])) / (num + alpha) / 1000000.0;
+ outposition[index][2] += f32(atomicLoad(&atomicposition[index * u32(4) + u32(2)])) / (num + alpha) / 1000000.0;
+ atomicStore(&atomicposition[index * u32(4) + u32(0)], i32(0.0));
+ atomicStore(&atomicposition[index * u32(4) + u32(1)], i32(0.0));
+ atomicStore(&atomicposition[index * u32(4) + u32(2)], i32(0.0));
+ atomicStore(&atomicposition[index * u32(4) + u32(3)], i32(0.0));
+
+ var debug = output[index];
+ // output[index][0] = f32(index);
+ // output[index][1] = num;
+ // output[index][2] = position[index0][0];
+ // output[index][3] = position[index0][1];
+ }
+ `;
+}
+
+class postprocess {
+ public static cs: string = /* wgsl */ `
+ struct InputArgs {
+ NUMPARTICLES: f32,
+ NUMTEDGES: f32,
+ NUMTBENDS: f32,
+ NUMTSURFACES: f32,
+ GRAVITY: f32,
+ DELTATIME: f32,
+ STRETCHCOMPLIANCE: f32,
+ BENDCOMPLIANCE: f32,
+ SPHERERADIUS: f32,
+ SPHERECENTREX: f32,
+ SPHERECENTREY: f32,
+ SPHERECENTREZ: f32,
+ ALPA: f32,
+ rsv0: f32,
+ rsv1: f32,
+ rsv2: f32,
+ };
+
+ @group(0) @binding(0) var input: InputArgs;
+ @group(0) @binding(1) var newposition: array>;
+ @group(0) @binding(2) var velocity: array>;
+ @group(0) @binding(3) var position: array>;
+ @group(1) @binding(0) var output: array>;
+
+ fn intersectSphere(origin: vec3, ray: vec3, spherecenter: vec3, sphereradius: f32) -> f32{
+ var tosphere = origin - spherecenter;
+ var a = dot(ray, ray);
+ var b = 2.0 * dot(tosphere, ray);
+ var c = dot(tosphere, tosphere) - sphereradius*sphereradius;
+ var discriminant = b*b - 4.0*a*c;
+ if(discriminant > 0.0) {
+ var t = (-b - sqrt(discriminant)) / (2.0 * a);
+ if(t > 0.0) {
+ return t;
+ }
+ }
+ return 0.0;
+ }
+
+ const size = u32(128);
+ @compute @workgroup_size(size)
+ fn CsMain(
+ @builtin(global_invocation_id) GlobalInvocationID : vec3
+ ) {
+ var index = GlobalInvocationID.x;
+ if(index >= u32(input.NUMPARTICLES)){
+ return;
+ }
+ var deltatime = input.DELTATIME;
+ var spherecentre = vec3(input.SPHERECENTREX, input.SPHERECENTREY, input.SPHERECENTREZ);
+ var sphereradius = input.SPHERERADIUS;
+
+ if(velocity[index][3] == 0.0){
+ return;
+ }
+ var oldposition = vec3(position[index][0], position[index][1], position[index][2]);
+ var currentposition = vec3(newposition[index][0], newposition[index][1], newposition[index][2]);
+
+ var tempvelocity = (currentposition - oldposition) / deltatime;
+ if(distance(spherecentre, currentposition) < sphereradius){
+ var ray = currentposition - spherecentre;
+ // var tsphere = intersectSphere(oldposition, ray, spherecentre, sphereradius);
+ currentposition = currentposition + ray * (sphereradius - distance(spherecentre, currentposition));
+ tempvelocity = (currentposition - oldposition) / deltatime;
+ // output[index][0] = distance(spherecentre, currentposition);
+ // output[index][1] = ray.z;
+ // output[index][2] = ray.x;
+ // output[index][3] = ray.y;
+ }
+
+ velocity[index][0] = tempvelocity.x;
+ velocity[index][1] = tempvelocity.y;
+ velocity[index][2] = tempvelocity.z;
+ position[index][0] = newposition[index][0];
+ position[index][1] = newposition[index][1];
+ position[index][2] = newposition[index][2];
+
+ var debug = output[index];
+ // output[index][0] = velocity[index][0];
+ // output[index][1] = velocity[index][1];
+ // output[index][2] = currentposition.x;
+ // output[index][3] = oldposition.x;
+ // output[index][2] = tempvelocity.z;
+ // output[index][3] = newposition[index0][1];
+ }
+ `;
+}
+
+class preprocess {
+ public static cs:string = /* wgsl */ `
+ struct InputArgs {
+ NUMPARTICLES: f32,
+ NUMTEDGES: f32,
+ NUMTBENDS: f32,
+ NUMTSURFACES: f32,
+ GRAVITY: f32,
+ DELTATIME: f32,
+ STRETCHCOMPLIANCE: f32,
+ BENDCOMPLIANCE: f32,
+ SPHERERADIUS: f32,
+ SPHERECENTREX: f32,
+ SPHERECENTREY: f32,
+ SPHERECENTREZ: f32,
+ ALPA: f32,
+ rsv0: f32,
+ rsv1: f32,
+ rsv2: f32,
+ };
+
+ @group(0) @binding(0) var input: InputArgs;
+ @group(0) @binding(1) var position: array>;
+ @group(0) @binding(2) var velocity: array>;
+ @group(0) @binding(3) var newposition: array>;
+ @group(1) @binding(0) var output: array>;
+
+ const size = u32(128);
+ @compute @workgroup_size(size)
+ fn CsMain(
+ @builtin(global_invocation_id) GlobalInvocationID : vec3
+ ) {
+ var index = GlobalInvocationID.x;
+ if(index >= u32(input.NUMPARTICLES)){
+ return;
+ }
+ var gravity = input.GRAVITY;
+ var deltatime = input.DELTATIME;
+
+ if(velocity[index][3] == 0.0){
+ return;
+ }
+ var oldposition = vec3(position[index][0], position[index][1], position[index][2]);
+ var tempvelocity = vec3(velocity[index][0], velocity[index][1], velocity[index][2])
+ + vec3(0.0, gravity * deltatime, 0.0);
+ var tempposition = oldposition + tempvelocity * deltatime;
+ // if(tempposition.y < 0.0){
+ // tempposition.x = oldposition.x;
+ // tempposition.y = 0.0;
+ // tempposition.z = oldposition.z;
+ // }
+ newposition[index][0] = tempposition.x;
+ newposition[index][1] = tempposition.y;
+ newposition[index][2] = tempposition.z;
+
+ var debug = output[index];
+ // output[index][0] = tempposition.x;
+ // output[index][1] = tempposition.y;
+ // output[index][2] = tempposition.z;
+ // output[index][3] = f32(index);
+ }
+ `;
+}
+
+class stretching {
+ public static cs:string = /* wgsl */ `
+ struct InputArgs {
+ NUMPARTICLES: f32,
+ NUMTEDGES: f32,
+ NUMTBENDS: f32,
+ NUMTSURFACES: f32,
+ GRAVITY: f32,
+ DELTATIME: f32,
+ STRETCHCOMPLIANCE: f32,
+ BENDCOMPLIANCE: f32,
+ SPHERERADIUS: f32,
+ SPHERECENTREX: f32,
+ SPHERECENTREY: f32,
+ SPHERECENTREZ: f32,
+ ALPA: f32,
+ rsv0: f32,
+ rsv1: f32,
+ rsv2: f32,
+ };
+
+ @group(0) @binding(0) var input: InputArgs;
+ @group(0) @binding(1) var inposition: array>;
+ @group(0) @binding(2) var velocity: array>;
+ @group(0) @binding(3) var atomicposition: array>;
+ @group(1) @binding(0) var stretchinfo: array>;
+ @group(1) @binding(1) var output: array>;
+
+ const size = u32(128);
+ @compute @workgroup_size(size)
+ fn CsMain(
+ @builtin(global_invocation_id) GlobalInvocationID : vec3
+ ) {
+ var index = GlobalInvocationID.x;
+ if(index >= u32(input.NUMTEDGES)){
+ return;
+ }
+ var deltatime = input.DELTATIME;
+ var compliance = input.STRETCHCOMPLIANCE;
+
+ var alpha = compliance / deltatime / deltatime;
+ // for(var i = 0; i < i32(input[1]); i++){
+ var index0 = u32(stretchinfo[index][0]);
+ var index1 = u32(stretchinfo[index][1]);
+ var weight0 = velocity[index0][3];
+ var weight1 = velocity[index1][3];
+ var weight = weight0 + weight1;
+
+ if(weight == 0.0){
+ return;
+ }
+ var position0 = vec3(inposition[index0][0], inposition[index0][1], inposition[index0][2]);
+ var position1 = vec3(inposition[index1][0], inposition[index1][1], inposition[index1][2]);
+ var grad = position0 - position1;
+ var length = distance(position0, position1);
+ if(length == 0.0){
+ return;
+ }
+
+ grad = grad / length;
+ var restlength = stretchinfo[index][2];
+ var c = length - restlength;
+ var lambda = - c / (weight + alpha);
+
+ var temp0 = grad * lambda * weight0;
+ var temp1 = grad * lambda * weight1;
+ atomicAdd(&atomicposition[index0 * u32(4) + u32(0)], i32(temp0.x * 1000000.0));
+ atomicAdd(&atomicposition[index0 * u32(4) + u32(1)], i32(temp0.y * 1000000.0));
+ atomicAdd(&atomicposition[index0 * u32(4) + u32(2)], i32(temp0.z * 1000000.0));
+ atomicAdd(&atomicposition[index0 * u32(4) + u32(3)], i32(1.0));
+ atomicSub(&atomicposition[index1 * u32(4) + u32(0)], i32(temp1.x * 1000000.0));
+ atomicSub(&atomicposition[index1 * u32(4) + u32(1)], i32(temp1.y * 1000000.0));
+ atomicSub(&atomicposition[index1 * u32(4) + u32(2)], i32(temp1.z * 1000000.0));
+ atomicAdd(&atomicposition[index1 * u32(4) + u32(3)], i32(1.0));
+ // }
+ // for(var i = 0; i < i32(input[0]); i++){
+ // outposition[i][0] = inposition[i][0];
+ // outposition[i][1] = inposition[i][1];
+ // outposition[i][2] = inposition[i][2];
+ // }
+ var debug = output[index];
+ // output[index][0] = position0.x;
+ // output[index][1] = position0.y;
+ // output[index][2] = position[index0][0];
+ // output[index][3] = position[index0][1];
+ }
+ `;
+}
+
+class updatevertexbuffer {
+ public static cs: string =/* wgsl */ `
+ struct InputArgs {
+ NUMPARTICLES: f32,
+ NUMTEDGES: f32,
+ NUMTBENDS: f32,
+ NUMTSURFACES: f32,
+ GRAVITY: f32,
+ DELTATIME: f32,
+ STRETCHCOMPLIANCE: f32,
+ BENDCOMPLIANCE: f32,
+ SPHERERADIUS: f32,
+ SPHERECENTREX: f32,
+ SPHERECENTREY: f32,
+ SPHERECENTREZ: f32,
+ ALPA: f32,
+ rsv0: f32,
+ rsv1: f32,
+ rsv2: f32,
+ };
+
+ @group(0) @binding(0) var input: InputArgs;
+ @group(0) @binding(1) var position: array>;
+ @group(0) @binding(2) var normal: array>;
+ @group(0) @binding(3) var vertexBuffer: array;
+
+ const size = u32(128);
+ @compute @workgroup_size(size)
+ fn CsMain(
+ @builtin(global_invocation_id) GlobalInvocationID : vec3
+ ) {
+ var index = GlobalInvocationID.x;
+ if(index >= u32(input.NUMTSURFACES)){
+ return;
+ }
+
+ let pos = position[index];
+ let nor = normal[index];
+
+ let stride = u32(3+3+2+2);
+ index *= stride;
+ // update position
+ vertexBuffer[index + 0] = pos[0];
+ vertexBuffer[index + 1] = pos[1];
+ vertexBuffer[index + 2] = pos[2];
+ // // update normal
+ vertexBuffer[index + 3] = nor[0];
+ vertexBuffer[index + 4] = nor[1];
+ vertexBuffer[index + 5] = nor[2];
+ }
+ `;
+}
diff --git a/docs/public/examples/compute/flame.ts b/docs/public/examples/compute/flame.ts
new file mode 100644
index 00000000..bd17b036
--- /dev/null
+++ b/docs/public/examples/compute/flame.ts
@@ -0,0 +1,752 @@
+
+import { AnimatorComponent, AtmosphericComponent, CameraUtil, ClusterLightingBuffer, Color, ComputeGPUBuffer, ComputeShader, DirectLight, Engine3D, GlobalBindGroup, GPUContext, HoverCameraController, Material, MeshRenderer, Object3D, PassType, PlaneGeometry, RendererMask, RendererPassState, RenderShaderPass, Scene3D, Shader, ShaderLib, SkinnedMeshRenderer2, Texture, Time, Vector3, Vector4, VertexAttributeData, VertexAttributeName, View3D, webGPUContext } from "@orillusion/core";
+
+class Demo_Flame {
+ constructor() { }
+
+ protected mLastPoint: Vector3 = new Vector3();
+ protected mVelocity: Vector3 = new Vector3();
+
+ async run() {
+ await Engine3D.init({});
+
+ let scene = new Scene3D();
+ let sky = scene.addComponent(AtmosphericComponent);
+ await this.initScene(scene);
+
+ let camera = CameraUtil.createCamera3DObject(scene);
+
+ camera.perspective(60, webGPUContext.aspect, 0.01, 10000.0);
+ let ctl = camera.object3D.addComponent(HoverCameraController);
+ ctl.setCamera(0, 0, 5);
+
+ let view = new View3D();
+ view.scene = scene;
+ view.camera = camera;
+ Engine3D.startRenderView(view);
+ }
+
+ async initScene(scene: Scene3D) {
+ let cesiumMan = await Engine3D.res.loadGltf('https://cdn.orillusion.com/gltfs/CesiumMan/CesiumMan.gltf');
+ cesiumMan.rotationX = -90;
+ cesiumMan.rotationY = 180;
+ cesiumMan.y = -0.8;
+ scene.addChild(cesiumMan);
+
+ {
+ let obj = new Object3D();
+ obj.rotationX = 120;
+ obj.rotationY = 306;
+ let light = obj.addComponent(DirectLight);
+ light.intensity = 5;
+ light.castShadow = true;
+ light.debug();
+ scene.addChild(obj);
+ }
+
+ let emulation = cesiumMan.addComponent(FlameSimulator);
+ emulation.alwaysRender = true;
+ emulation.geometry = new PlaneGeometry(0.01, 0.01, 1.0, 1.0, Vector3.Z_AXIS);
+ emulation.material = new FlameSimulatorMaterial();
+
+ }
+}
+
+type FlameSimulatorConfig = {
+ GROUP_SIZE: number;
+ NUM: number;
+ SPAWN_RADIUS: number;
+ BASE_LIFETIME: number;
+ MAX_ADDITIONAL_LIFETIME: number;
+ PRESIMULATION_DELTA_TIME: number;
+ INITIAL_SPEED: number;
+ INITIAL_TURBULENCE: number;
+ NOISE_OCTAVES: number;
+ SCALE: number;
+ NUMBER_OF_BONES: number;
+ ANIMATION_FPS: number;
+ ANIMATION_LENGTH: number;
+ MAX_DELTA_TIME: number;
+};
+
+class FlameSimulatorBuffer {
+ protected mPositionBuffer: ComputeGPUBuffer;
+ protected mNewPositionBuffer: ComputeGPUBuffer;
+ protected mBonePositionsBuffer: ComputeGPUBuffer;
+ protected mBoneIndicesBuffer: ComputeGPUBuffer;
+ protected mBoneWeightsBuffer: ComputeGPUBuffer;
+ protected mBoneMatrixBuffer: ComputeGPUBuffer;
+ protected mBoneMatricesBuffer: ComputeGPUBuffer;
+ protected mInputBuffer: ComputeGPUBuffer;
+ // protected mInputData: Float32Array;
+
+ constructor(config: FlameSimulatorConfig) {
+ this.initGPUBuffer(config);
+ }
+
+ protected initGPUBuffer(config: FlameSimulatorConfig) {
+ let device = webGPUContext.device;
+
+ const { NUM, SPAWN_RADIUS, BASE_LIFETIME, MAX_ADDITIONAL_LIFETIME, NUMBER_OF_BONES } = config;
+
+ const position = new Float32Array(4 * NUM);
+ for (let i = 0; i < NUM; ++i) {
+ position[i * 4 + 0] = SPAWN_RADIUS * Math.pow(Math.random(), 1 / 3) * Math.sqrt(1.0 - Math.pow(Math.random() * 2.0 - 1.0, 2)) * Math.cos(Math.random() * 2.0 * Math.PI); // x
+ position[i * 4 + 1] = SPAWN_RADIUS * Math.pow(Math.random(), 1 / 3) * Math.sqrt(1.0 - Math.pow(Math.random() * 2.0 - 1.0, 2)) * Math.sin(Math.random() * 2.0 * Math.PI); // y
+ position[i * 4 + 2] = SPAWN_RADIUS * Math.pow(Math.random(), 1 / 3) * (Math.random() * 2.0 - 1.0); // z
+ position[i * 4 + 3] = BASE_LIFETIME * Math.random(); // w
+ // console.log(position[i * 4 + 0], position[i * 4 + 1], position[i * 4 + 2]);
+ }
+ this.mPositionBuffer = new ComputeGPUBuffer(position.length);
+ this.mPositionBuffer.setFloat32Array("", position);
+ this.mPositionBuffer.apply();
+
+ this.mNewPositionBuffer = new ComputeGPUBuffer(position.length);
+
+ const initbonePositions = new Float32Array(4 * NUM);
+ this.mBonePositionsBuffer = new ComputeGPUBuffer(initbonePositions.length);
+
+ const initboneIndices = new Float32Array(4 * NUM);
+ this.mBoneIndicesBuffer = new ComputeGPUBuffer(initboneIndices.length);
+
+ const initboneWeights = new Float32Array(4 * NUM);
+ this.mBoneWeightsBuffer = new ComputeGPUBuffer(initboneWeights.length);
+
+ const initboneMatrices = new Float32Array(4 * NUMBER_OF_BONES * 3);
+ this.mBoneMatricesBuffer = new ComputeGPUBuffer(initboneMatrices.length);
+
+ const { PRESIMULATION_DELTA_TIME, INITIAL_TURBULENCE, NOISE_OCTAVES, SCALE } = config;
+ this.mInputBuffer = new ComputeGPUBuffer(8);
+ this.mInputBuffer.setFloat("count", NUM);
+ this.mInputBuffer.setFloat("time", PRESIMULATION_DELTA_TIME);
+ this.mInputBuffer.setFloat("deltatime", PRESIMULATION_DELTA_TIME);
+ this.mInputBuffer.setFloat("persistence", INITIAL_TURBULENCE);
+ this.mInputBuffer.setFloat("OCTAVES", NOISE_OCTAVES);
+ this.mInputBuffer.setFloat("SCALE", SCALE);
+ this.mInputBuffer.apply();
+ }
+
+ public updateInput(time: number, deltaTime: number) {
+ this.mInputBuffer.setFloat("time", time);
+ this.mInputBuffer.setFloat("deltatime", deltaTime);
+ }
+
+ public updateInputData() {
+ this.mInputBuffer.apply();
+ }
+}
+
+class FlameSimulatorPipeline extends FlameSimulatorBuffer {
+ protected mConfig: FlameSimulatorConfig;
+ protected mCopyBoneMatrixComputeShader: ComputeShader;
+ protected mSimulationComputeShader: ComputeShader;
+ protected mCopyComputeShader: ComputeShader;
+ protected mFirstFrame: boolean = false;
+ protected mAnimatorComponent: AnimatorComponent;
+ protected mSkinnedMeshRenderer: SkinnedMeshRenderer2;
+ constructor(config: FlameSimulatorConfig, skeletonAnimation: AnimatorComponent, skinnedMeshRenderer: SkinnedMeshRenderer2) {
+ super(config);
+ this.mConfig = config;
+ this.mAnimatorComponent = skeletonAnimation;
+ this.mSkinnedMeshRenderer = skinnedMeshRenderer;
+ }
+
+ public get positionBuffer(): ComputeGPUBuffer {
+ return this.mPositionBuffer;
+ }
+
+ public initParticle(attributeArrays: Map) {
+ const { NUM } = this.mConfig;
+
+ let indicesAttr = attributeArrays.get(VertexAttributeName.indices);
+ let positionAttr = attributeArrays.get(VertexAttributeName.position);
+ let jointsAttr = attributeArrays.get(VertexAttributeName.joints0);
+ let weightAttr = attributeArrays.get(VertexAttributeName.weights0);
+
+ var bonePositions = new Float32Array(NUM * 4);
+ var boneIndices = new Float32Array(NUM * 4);
+ var boneWeights = new Float32Array(NUM * 4);
+
+ for (var i = 0; i < NUM; ++i) {
+ let triangleCount = indicesAttr.data.length / 3;
+ let index = i % triangleCount; // Math.floor(Math.random() * triangleCount);
+
+ let vertexIndexA = indicesAttr.data[index + 0];
+ let vertexIndexB = indicesAttr.data[index + 1];
+ let vertexIndexC = indicesAttr.data[index + 2];
+
+ let vertexPositionA = [positionAttr.data[vertexIndexA * 3 + 0], positionAttr.data[vertexIndexA * 3 + 1], positionAttr.data[vertexIndexA * 3 + 2]];
+ let vertexPositionB = [positionAttr.data[vertexIndexB * 3 + 0], positionAttr.data[vertexIndexB * 3 + 1], positionAttr.data[vertexIndexB * 3 + 2]];
+ let vertexPositionC = [positionAttr.data[vertexIndexC * 3 + 0], positionAttr.data[vertexIndexC * 3 + 1], positionAttr.data[vertexIndexC * 3 + 2]];
+
+ let vertexJointIndexA = [jointsAttr.data[vertexIndexA * 4 + 0], jointsAttr.data[vertexIndexA * 4 + 1], jointsAttr.data[vertexIndexA * 4 + 2], jointsAttr.data[vertexIndexA * 4 + 3]];
+ let vertexJointIndexB = [jointsAttr.data[vertexIndexB * 4 + 0], jointsAttr.data[vertexIndexB * 4 + 1], jointsAttr.data[vertexIndexB * 4 + 2], jointsAttr.data[vertexIndexB * 4 + 3]];
+ let vertexJointIndexC = [jointsAttr.data[vertexIndexC * 4 + 0], jointsAttr.data[vertexIndexC * 4 + 1], jointsAttr.data[vertexIndexC * 4 + 2], jointsAttr.data[vertexIndexC * 4 + 3]];
+
+ let vertexJointWeightA = [weightAttr.data[vertexIndexA * 4 + 0], weightAttr.data[vertexIndexA * 4 + 1], weightAttr.data[vertexIndexA * 4 + 2], weightAttr.data[vertexIndexA * 4 + 3]];
+ let vertexJointWeightB = [weightAttr.data[vertexIndexB * 4 + 0], weightAttr.data[vertexIndexB * 4 + 1], weightAttr.data[vertexIndexB * 4 + 2], weightAttr.data[vertexIndexB * 4 + 3]];
+ let vertexJointWeightC = [weightAttr.data[vertexIndexC * 4 + 0], weightAttr.data[vertexIndexC * 4 + 1], weightAttr.data[vertexIndexC * 4 + 2], weightAttr.data[vertexIndexC * 4 + 3]];
+
+ var u = Math.random(),
+ v = Math.random();
+ var tmp = Math.sqrt(u);
+ var a = 1 - tmp;
+ var b = v * tmp;
+ var c = 1 - a - b;
+
+ var weightsByIndex: { [key: number]: any } = {};
+
+ for (var n = 0; n < 4; ++n) {
+ if (weightsByIndex[vertexJointIndexA[n]] === undefined) {
+ weightsByIndex[vertexJointIndexA[n]] = vertexJointWeightA[n] * a;
+ } else {
+ weightsByIndex[vertexJointIndexA[n]] += vertexJointWeightA[n] * a;
+ }
+ }
+
+ for (var n = 0; n < 4; ++n) {
+ if (weightsByIndex[vertexJointIndexB[n]] === undefined) {
+ weightsByIndex[vertexJointIndexB[n]] = vertexJointWeightB[n] * b;
+ } else {
+ weightsByIndex[vertexJointIndexB[n]] += vertexJointWeightB[n] * b;
+ }
+ }
+
+ for (var n = 0; n < 4; ++n) {
+ if (weightsByIndex[vertexJointIndexC[n]] === undefined) {
+ weightsByIndex[vertexJointIndexC[n]] = vertexJointWeightC[n] * c;
+ } else {
+ weightsByIndex[vertexJointIndexC[n]] += vertexJointWeightC[n] * c;
+ }
+ }
+
+ var j = 0;
+ for (let index in weightsByIndex) {
+ boneIndices[i * 4 + j] = parseInt(index);
+ boneWeights[i * 4 + j] = weightsByIndex[index];
+ j++;
+ }
+
+ var point = this.barycentricToCartesian(vertexPositionA, vertexPositionB, vertexPositionC, a, b, c);
+
+ bonePositions[i * 4] = point[0];
+ bonePositions[i * 4 + 1] = point[1];
+ bonePositions[i * 4 + 2] = point[2];
+ bonePositions[i * 4 + 3] = 0;
+ }
+
+ this.mBonePositionsBuffer = new ComputeGPUBuffer(bonePositions.length);
+ this.mBonePositionsBuffer.setFloat32Array("", bonePositions);
+ this.mBonePositionsBuffer.apply();
+ this.mBoneIndicesBuffer = new ComputeGPUBuffer(boneIndices.length);
+ this.mBoneIndicesBuffer.setFloat32Array("", boneIndices);
+ this.mBoneIndicesBuffer.apply();
+ this.mBoneWeightsBuffer = new ComputeGPUBuffer(boneWeights.length);
+ this.mBoneWeightsBuffer.setFloat32Array("", boneWeights);
+ this.mBoneWeightsBuffer.apply();
+
+ this.initPipeline();
+ }
+
+ public compute(command: GPUCommandEncoder) {
+ const { BASE_LIFETIME, PRESIMULATION_DELTA_TIME, NUM, GROUP_SIZE } = this.mConfig;
+
+ let compute_command = GPUContext.beginCommandEncoder();
+ GPUContext.computeCommand(compute_command, [this.mCopyBoneMatrixComputeShader]);
+
+ for (var i = 0; i < (this.mFirstFrame ? BASE_LIFETIME / PRESIMULATION_DELTA_TIME : 1); ++i) {
+ GPUContext.computeCommand(compute_command, [this.mSimulationComputeShader, this.mCopyComputeShader]);
+ // GPUContext.computeCommand(compute_command, [this.mSimulationComputeShader]);
+ }
+
+ GPUContext.endCommandEncoder(command);
+
+ this.mFirstFrame = false;
+ }
+
+ protected initPipeline() {
+
+ this.mBoneMatrixBuffer = new ComputeGPUBuffer(16 * this.mAnimatorComponent.numJoint);
+
+ this.mCopyBoneMatrixComputeShader = new ComputeShader(CopyBoneMatrix.cs);
+ this.mCopyBoneMatrixComputeShader.setStorageBuffer(`matrixs`, GlobalBindGroup.modelMatrixBindGroup.matrixBufferDst);
+ this.mCopyBoneMatrixComputeShader.setStorageBuffer(`jointsMatrixIndexTable`, this.mAnimatorComponent.jointMatrixIndexTableBuffer);
+ this.mCopyBoneMatrixComputeShader.setStorageBuffer(`bonesTransformMatrix`, this.mBoneMatrixBuffer);
+ this.mCopyBoneMatrixComputeShader.workerSizeX = Math.ceil(this.mAnimatorComponent.numJoint / 16);
+
+ const { NUM, GROUP_SIZE } = this.mConfig;
+ this.mSimulationComputeShader = new ComputeShader(Simulation.cs);
+ this.mSimulationComputeShader.setStorageBuffer(`input`, this.mInputBuffer);
+ this.mSimulationComputeShader.setStorageBuffer(`position`, this.mPositionBuffer);
+ this.mSimulationComputeShader.setStorageBuffer(`newposition`, this.mNewPositionBuffer);
+ this.mSimulationComputeShader.setStorageBuffer(`boneposition`, this.mBonePositionsBuffer);
+ this.mSimulationComputeShader.setStorageBuffer(`boneindices`, this.mBoneIndicesBuffer);
+ this.mSimulationComputeShader.setStorageBuffer(`boneweights`, this.mBoneWeightsBuffer);
+
+ this.mSimulationComputeShader.setStorageBuffer(`bonesTransform`, this.mBoneMatrixBuffer);
+ this.mSimulationComputeShader.setStorageBuffer(`bonesInverseMatrix`, this.mSkinnedMeshRenderer.inverseBindMatrixBuffer);
+
+ this.mSimulationComputeShader.workerSizeX = Math.ceil(NUM / GROUP_SIZE);
+
+ this.mCopyComputeShader = new ComputeShader(Copy.cs);
+ this.mCopyComputeShader.setStorageBuffer(`input`, this.mInputBuffer);
+ this.mCopyComputeShader.setStorageBuffer(`position`, this.mPositionBuffer);
+ this.mCopyComputeShader.setStorageBuffer(`newposition`, this.mNewPositionBuffer);
+ this.mCopyComputeShader.workerSizeX = Math.ceil(NUM / GROUP_SIZE);
+ }
+
+ protected barycentricToCartesian(vertexA: number[], vertexB: number[], vertexC: number[], a: number, b: number, c: number) {
+ var result = [vertexA[0] * a + vertexB[0] * b + vertexC[0] * c, vertexA[1] * a + vertexB[1] * b + vertexC[1] * c, vertexA[2] * a + vertexB[2] * b + vertexC[2] * c];
+ return result;
+ }
+}
+
+class FlameSimulator extends MeshRenderer {
+ protected mConfig: FlameSimulatorConfig;
+ protected mFlameComputePipeline: FlameSimulatorPipeline;
+ protected mGlobalArgs: ComputeGPUBuffer;
+ constructor() {
+ super();
+ this.addRendererMask(RendererMask.Particle)
+ this.mConfig = {
+ GROUP_SIZE: 128,
+ NUM: 60000,
+ SPAWN_RADIUS: 0.1,
+ BASE_LIFETIME: 0.7,
+ MAX_ADDITIONAL_LIFETIME: 5,
+ PRESIMULATION_DELTA_TIME: 0.2,
+ INITIAL_SPEED: 1,
+ INITIAL_TURBULENCE: 0.4,
+ NOISE_OCTAVES: 3,
+ SCALE: 10,
+ NUMBER_OF_BONES: 57,
+ ANIMATION_FPS: 30,
+ ANIMATION_LENGTH: 0.7333,
+ MAX_DELTA_TIME: 2,
+ };
+ }
+ public setConfig(config: FlameSimulatorConfig) {
+ this.mConfig = config;
+ }
+
+ public start() {
+ var globalArgsData = new Float32Array(4);
+ this.mGlobalArgs = new ComputeGPUBuffer(globalArgsData.byteLength);
+ globalArgsData[0] = this.transform.worldMatrix.index;
+ this.mGlobalArgs.setFloat32Array("", globalArgsData);
+ this.mGlobalArgs.apply();
+
+ this.instanceCount = this.mConfig.NUM;
+ }
+
+ public stop() { }
+
+ public onCompute(view: View3D, command?: GPUCommandEncoder) {
+ if (this.mFlameComputePipeline) {
+ this.mFlameComputePipeline.updateInput(Time.time / 1000.0, Time.delta / 1000.0);
+ this.mFlameComputePipeline.updateInputData();
+ this.mFlameComputePipeline.compute(command);
+ }
+ }
+
+ public nodeUpdate(view: View3D, passType: PassType, renderPassState: RendererPassState, clusterLightingBuffer: ClusterLightingBuffer) {
+ if (!this.mFlameComputePipeline) {
+ let animatorComponent = this.object3D.getComponentsInChild(AnimatorComponent)[0];
+ let skinnedMeshRenderer = this.object3D.getComponentsInChild(SkinnedMeshRenderer2)[0];
+ let attributeArrays = skinnedMeshRenderer.geometry.vertexAttributeMap;
+ this.mFlameComputePipeline = new FlameSimulatorPipeline(this.mConfig, animatorComponent, skinnedMeshRenderer);
+ this.mFlameComputePipeline.initParticle(attributeArrays);
+
+ let material = this.materials[0];
+ let passes = material.getPass(passType)
+ if (passes) {
+ for (let i = 0; i < passes.length; i++) {
+ var subs = passes[i];
+ subs.setStorageBuffer(`particlePosition`, this.mFlameComputePipeline.positionBuffer);
+ subs.setStorageBuffer(`particleGlobalData`, this.mGlobalArgs);
+ }
+ }
+ }
+ super.nodeUpdate(view, passType, renderPassState, clusterLightingBuffer);
+ }
+}
+
+class FlameSimulatorMaterial extends Material {
+ doubleSided: any;
+ constructor() {
+ super();
+
+ ShaderLib.register("FlameRenderShader", FlameRenderShader);
+ let shader = new Shader();
+ let pass = new RenderShaderPass('FlameRenderShader', 'FlameRenderShader');
+ pass.setShaderEntry(`VertMain`, `FragMain`)
+
+ shader.addRenderPass(pass);
+ shader.setUniformVector4(`transformUV1`, new Vector4(0, 0, 1, 1));
+ shader.setUniformVector4(`transformUV2`, new Vector4(0, 0, 1, 1));
+ shader.setUniformColor(`baseColor`, new Color());
+ shader.setUniformFloat(`alphaCutoff`, 0.5);
+ shader.setUniformFloat(`shadowBias`, 0.00035);
+
+ let shaderState = pass.shaderState;
+ shaderState.acceptShadow = false;
+ shaderState.receiveEnv = false;
+ shaderState.acceptGI = false;
+ shaderState.useLight = false;
+
+ // default value
+ this.baseMap = Engine3D.res.whiteTexture;
+ this.shader = shader;
+
+ // this.transparent = true ;
+ }
+
+ public set baseMap(value: Texture) {
+ // this.onChange = true;
+ }
+
+ public set envMap(texture: Texture) {
+ //not need env texture
+ }
+
+ public set shadowMap(texture: Texture) {
+ //not need shadowMap texture
+ }
+
+ debug() {}
+}
+
+let FlameRenderShader = /* wgsl */ `
+ #include "Common_vert"
+ #include "Common_frag"
+ #include "UnLit_frag"
+ #include "UnLitMaterialUniform_frag"
+ #include "MathShader"
+
+ struct Particle_global {
+ instance_index : f32,
+ particles_Radius : f32,
+ time : f32,
+ timeDelta : f32,
+ };
+
+ @group(1) @binding(0)
+ var baseMapSampler: sampler;
+
+ @group(1) @binding(1)
+ var baseMap: texture_2d;
+
+ @group(3) @binding(0)
+ var particlePosition : array>;
+
+ @group(3) @binding(1)
+ var particleGlobalData: Particle_global;
+
+ fn calcBillboard( pos : vec3, worldMatrix:mat4x4 ) -> mat4x4{
+ var dir:vec3 = normalize(globalUniform.cameraWorldMatrix[3].xyz - pos.xyz) ;
+ let mat3 = mat3x3(
+ worldMatrix[0].xyz,
+ worldMatrix[1].xyz,
+ worldMatrix[2].xyz
+ );
+ var v3Look:vec3 = normalize( dir * mat3 ) ;
+ var v3Right:vec3 = normalize( cross( vec3( 0.0 , 1.0 , 0.0 ) * mat3 , v3Look ));
+ var v3Up:vec3 = cross( v3Look , v3Right );
+ var matLookAt : mat4x4 = mat4x4(
+ vec4( v3Right.xyz , 0.0 ),
+ vec4( v3Up.xyz , 0.0 ),
+ vec4( v3Look.xyz , 0.0 ),
+ vec4( 0.0,0.0,0.0 , 1.0 )
+ );
+ return matLookAt ;
+ }
+
+ fn vert(vertex:VertexAttributes) -> VertexOutput {
+ var particlePos = particlePosition[vertex.index];
+ var worldMatrix = models.matrix[u32(particleGlobalData.instance_index)];
+
+ var wPosition = vertex.position.xyz;
+
+ // wPosition *= particleGlobalData.particles_Radius;
+
+ var v_mat4:mat4x4 = calcBillboard(particlePos.xyz, worldMatrix);
+ wPosition = ( v_mat4 * vec4(wPosition,1.0) ).xyz;
+
+ wPosition.x += particlePos.x;
+ wPosition.y += particlePos.y;
+ wPosition.z += particlePos.z;
+
+ ORI_VertexOut.varying_UV0 = vertex.uv;
+
+ var worldPos = (worldMatrix * vec4(wPosition.xyz, 1.0));
+ var viewPosition = ((globalUniform.viewMat) * worldPos);
+
+ ORI_VertexOut.varying_WPos = worldPos;
+ ORI_VertexOut.varying_WPos.w = f32(particleGlobalData.instance_index);
+
+ var clipPosition = globalUniform.projMat * viewPosition ;
+
+ //ORI_VertexOut.varying_ViewPos = clipPosition.xyz;
+
+ ORI_VertexOut.member = clipPosition;
+
+ //ORI_VertexOut.fragCoord = normalize(vertex.position.xy) + vec2(0.5, 0.5);
+ let lifetime = clamp(particlePos.w + 0.2, 0.0, 1.0);
+
+ let beginColor = vec3(0.0, 1.0, 0.0);
+ let endColor = vec3(0.0, 0.0, 0.0);
+ let finalColor = beginColor + (endColor - beginColor) * (1.0 - lifetime);
+ ORI_VertexOut.varying_Color = vec4(finalColor, 1.0);
+ return ORI_VertexOut;
+ }
+
+ fn frag() {
+ let color = ORI_VertexVarying.vColor;
+ ORI_ShadingInput.BaseColor = color;
+ UnLit();
+ }`
+
+class Copy {
+ public static cs: string = /* wgsl */ `
+ struct InputArgs {
+ count: f32,
+ time: f32,
+ deltatime: f32,
+ persistence: f32,
+ OCTAVES: f32,
+ SCALE: f32,
+ rsv0: f32,
+ rsv1: f32,
+ };
+
+ @group(0) @binding(0) var input: InputArgs;
+ @group(0) @binding(1) var position: array>;
+ @group(0) @binding(2) var newposition: array>;
+
+ const size = u32(128);
+ @compute @workgroup_size(size)
+ fn CsMain(
+ @builtin(global_invocation_id) GlobalInvocationID : vec3,
+ @builtin(num_workgroups) GroupSize: vec3
+ ) {
+ var index = GlobalInvocationID.x;
+ if(index >= u32(input.count)){
+ return;
+ }
+
+ position[index] = newposition[index];
+ }
+ `;
+}
+
+class CopyBoneMatrix {
+ public static cs: string = /* wgsl */ `
+ @group(0) @binding(0) var matrixs: array>;
+ @group(0) @binding(1) var jointsMatrixIndexTable: array;
+ @group(0) @binding(2) var bonesTransformMatrix: array>;
+
+ @compute @workgroup_size(16)
+ fn CsMain(
+ @builtin(global_invocation_id) GlobalInvocationID : vec3,
+ @builtin(num_workgroups) GroupSize: vec3
+ ) {
+ var index = GlobalInvocationID.x;
+ bonesTransformMatrix[index] = matrixs[u32(jointsMatrixIndexTable[index])];
+ }
+ `;
+}
+
+class Simulation {
+ public static cs: string = /* wgsl */ `
+ struct InputArgs {
+ count: f32,
+ time: f32,
+ deltatime: f32,
+ persistence: f32,
+ OCTAVES: f32,
+ SCALE: f32,
+ rsv0: f32,
+ rsv1: f32,
+ };
+
+ @group(0) @binding(0) var input: InputArgs;
+ @group(0) @binding(1) var position: array>;
+ @group(0) @binding(2) var newposition: array>;
+
+ @group(1) @binding(0) var boneposition: array>;
+ @group(1) @binding(1) var boneindices: array>;
+ @group(1) @binding(2) var boneweights: array>;
+ @group(1) @binding(3) var bonesTransform: array>;
+ @group(1) @binding(4) var bonesInverseMatrix: array>;
+
+ fn mod289v(x: vec4) -> vec4{
+ return x - floor(x * (1.0 / 289.0)) * 289.0;
+ }
+
+ fn mod289(x: f32) -> f32{
+ return x - floor(x * (1.0 / 289.0)) * 289.0;
+ }
+
+ fn permutev(x: vec4) -> vec4{
+ return mod289v(((x*34.0)+1.0)*x);
+ }
+
+ fn permute(x: f32) -> f32{
+ return mod289(((x*34.0)+1.0)*x);
+ }
+
+ fn taylorInvSqrtv(r: vec4) -> vec4