Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
158 commits
Select commit Hold shift + click to select a range
9f51994
feat(physics): support MeshColliderShape
luzhuang Jan 26, 2026
3414e69
Merge pull request #2884 from galacean/main
cptbtptpbcptdtptp Jan 26, 2026
5e5c616
fix(animation): allow anyState transitions to interrupt crossFade & f…
luzhuang Jan 27, 2026
78b06f9
chore: release v2.0.0-alpha.0
cptbtptpbcptdtptp Jan 27, 2026
4bf1668
feat: export baseVertexUniformVectorCount (#2886)
cptbtptpbcptdtptp Jan 27, 2026
6a8058b
chore: release v2.0.0-alpha.1
cptbtptpbcptdtptp Jan 27, 2026
362c06b
AudioManager add `suspend` (#2887)
GuoLei1990 Jan 28, 2026
d68166b
chore: release v2.0.0-alpha.2
cptbtptpbcptdtptp Jan 28, 2026
ff88e8d
Revert "fix(animation): allow anyState transitions to interrupt cross…
GuoLei1990 Feb 22, 2026
67ce4ee
Fix WKWebview AudioContext "zombie" state in visibility change (#2888)
GuoLei1990 Feb 24, 2026
5f77293
Optimize TrailRenderer texture scale and remove widthMultiplier (#2889)
GuoLei1990 Feb 24, 2026
f3e5752
Allow anyState transitions to interrupt crossFade & fix transition bu…
GuoLei1990 Feb 25, 2026
9526036
Refine MeshColliderShape and add WebAssembly SIMD runtime (#2892)
GuoLei1990 Feb 25, 2026
c420cf0
Deferred destruction for EngineObject during frame processing (#2894)
GuoLei1990 Feb 25, 2026
76fdf70
fix: two transforms coexist during cloning (#2895)
cptbtptpbcptdtptp Feb 25, 2026
232db66
fix: incorrect `isRoot` when setting parent (#2896)
GuoLei1990 Feb 25, 2026
b86e265
Wrap raw assets as EngineObject to enable type-safe ResourceManager.l…
GuoLei1990 Feb 26, 2026
f5b1d67
Use Alpha8 texture for font atlas (#2899)
GuoLei1990 Feb 26, 2026
42df0af
Add multi-scattering energy compensation for specular (#2901)
GuoLei1990 Feb 27, 2026
0c91c29
Migrate ssao to shaderlab (#2903)
zhuxudong Feb 28, 2026
90ee338
feat: ouput bundled file in esm (#2766)
MrKou47 Feb 28, 2026
e42150a
Configure CDN default entry for bundled ESM (#2904)
GuoLei1990 Feb 28, 2026
8e84ff8
Add camera-based event filtering for WorldSpace UICanvas (#2870)
ym2050 Feb 28, 2026
fab8031
Fix ColorWriteMask enum parsing in ShaderLab with bitwise OR support …
GuoLei1990 Feb 28, 2026
c588279
chore: update PhysX WASM binaries and CDN URLs (#2909)
GuoLei1990 Mar 1, 2026
2ba4e1a
Add characterSpacing and change spacing units to em (#2280)
singlecoder Mar 1, 2026
70453db
Add characterSpacing and change spacing units to em (#2908)
GuoLei1990 Mar 1, 2026
8882bca
chore: release v2.0.0-alpha.3
GuoLei1990 Mar 2, 2026
5619f77
chore: release v2.0.0-alpha.4
GuoLei1990 Mar 2, 2026
1491cfc
feat: update release editor kit
cptbtptpbcptdtptp Mar 3, 2026
ea2f925
Add RenderingStatistics for GPU memory tracking and RenderTargetPool …
GuoLei1990 Mar 3, 2026
e237cdc
chore: release v2.0.0-alpha.5
cptbtptpbcptdtptp Mar 3, 2026
fdbd495
Replace refId with url for asset reference resolution (#2913)
zhuxudong Mar 6, 2026
8bb9a13
Merge HDRLoader into TextureCubeLoader and extract HDRDecoder (#2914)
GuoLei1990 Mar 9, 2026
6dbef4a
chore: release v2.0.0-alpha.6
GuoLei1990 Mar 10, 2026
3c1103c
migrate ambient env from RGBM to half-float (#2916)
hhhhkrx Mar 10, 2026
76aacb5
chore: release v2.0.0-alpha.7
cptbtptpbcptdtptp Mar 10, 2026
8167140
fix: clamp pixel values to prevent Infinity in R16G16B16A16 format
GuoLei1990 Mar 10, 2026
3c86179
chore: release v2.0.0-alpha.8
GuoLei1990 Mar 10, 2026
a498843
Fix setting the font to null will trigger an error (#2917)
cptbtptpbcptdtptp Mar 11, 2026
744deee
chore: release v2.0.0-alpha.9
cptbtptpbcptdtptp Mar 11, 2026
c751f38
Move pixelStorei calls to non-compressed branch in GLTextureCube (#2918)
zhuxudong Mar 12, 2026
a36d652
chore: release v2.0.0-alpha.10
GuoLei1990 Mar 12, 2026
2a242ef
refactor: rename Env to AmbientLight, .env to .ambLight (#2919)
GuoLei1990 Mar 12, 2026
9bd6253
chore: release v2.0.0-alpha.11
GuoLei1990 Mar 12, 2026
bac44ca
refactor: align header length calculation to 4 bytes for TypedArray a…
GuoLei1990 Mar 12, 2026
0674811
chore: release v2.0.0-alpha.12
GuoLei1990 Mar 12, 2026
f2f7c77
refactor: update AmbientLight asset URL to new format
GuoLei1990 Mar 12, 2026
9084a59
refactor: update image assets with new SHA and size values
GuoLei1990 Mar 12, 2026
953b0de
refactor: update diffPercentage value for PhysX Mesh Collider Data
GuoLei1990 Mar 12, 2026
5a57842
refactor: update AmbientLight asset URLs to new format
GuoLei1990 Mar 12, 2026
cbc17b2
refactor: remove project-loader tests and fix ambientLight test data
GuoLei1990 Mar 12, 2026
a3ab15d
test: skip SceneParser test that depends on outdated project.json
GuoLei1990 Mar 12, 2026
58a775c
particle mesh mode rotation curve not working (#2920)
hhhhkrx Mar 13, 2026
5073881
chore: release v2.0.0-alpha.13
GuoLei1990 Mar 13, 2026
85364f2
Remove useless code (#2922)
cptbtptpbcptdtptp Mar 16, 2026
ce413eb
feat: add RenderTarget asset loader and colorTextures getter (#2923)
GuoLei1990 Mar 16, 2026
fbc79fe
chore: release v2.0.0-alpha.14
cptbtptpbcptdtptp Mar 16, 2026
57fdddb
Unify Signal event mechanism with structured binding support (#2921)
cptbtptpbcptdtptp Mar 16, 2026
1efbfe2
fix: fix ray and plane when ray origin is on the plane and parallel (…
singlecoder Mar 16, 2026
26f35ab
chore: release v2.0.0-alpha.15
cptbtptpbcptdtptp Mar 17, 2026
886dda6
Fix compont props clone bug (#2926)
cptbtptpbcptdtptp Mar 18, 2026
1afdfaa
Support path-based cross-prefab entity/component refs (#2927)
luzhuang Mar 18, 2026
e590f0e
chore: release v2.0.0-alpha.16
cptbtptpbcptdtptp Mar 18, 2026
3c796e6
particle support limit velocity over lifetime (#2925)
hhhhkrx Mar 18, 2026
d61eb76
chore: release v2.0.0-alpha.17
cptbtptpbcptdtptp Mar 19, 2026
68a0d57
rename limit/limitX/Y/Z to speed/speedX/Y/Z in LimitVelocit… (#2928)
hhhhkrx Mar 19, 2026
9d308ee
chore: release v2.0.0-alpha.18
cptbtptpbcptdtptp Mar 19, 2026
b71041c
fix: defer physics contact event dispatch to after transform writebac…
GuoLei1990 Mar 20, 2026
31089dc
Merge remote-tracking branch 'origin/main' into feat/MCode
cptbtptpbcptdtptp Mar 20, 2026
efda137
Feat/m code (#2933)
cptbtptpbcptdtptp Mar 20, 2026
4213f7a
chore: release v2.0.0-alpha.19
cptbtptpbcptdtptp Mar 20, 2026
ec924d5
chore: release v2.0.0-alpha.20
GuoLei1990 Mar 20, 2026
396bbc0
Merge branch 'main' into dev/2.0
GuoLei1990 Mar 20, 2026
ba69480
chore: release v2.0.0-alpha.21
GuoLei1990 Mar 20, 2026
026b8fb
chore: release v2.0.0-alpha.22
GuoLei1990 Mar 20, 2026
1ff3635
chore: release v2.0.0-alpha.23
GuoLei1990 Mar 20, 2026
4676132
Merge branch 'main' into dev/2.0
GuoLei1990 Mar 20, 2026
73415e6
implement HorizontalBillboard render mode (#2938)
hhhhkrx Mar 23, 2026
2f88c2f
chore: release v2.0.0-alpha.24
cptbtptpbcptdtptp Mar 23, 2026
c3e2077
Unify Texture2D and TextureCube into single TextureLoader (#2937)
GuoLei1990 Mar 23, 2026
b8b34ed
chore: release v2.0.0-alpha.25
cptbtptpbcptdtptp Mar 23, 2026
0597e61
fix(particle): fix flipRotation logic and renderMode default value (#…
GuoLei1990 Mar 24, 2026
c3d2160
fix(loader): always create GLTF_ROOT container for consistent animati…
luzhuang Mar 26, 2026
b561467
fix(camera): invViewProjMat should ignore scale like viewMatrix (#2949)
cptbtptpbcptdtptp Mar 28, 2026
e9bea5b
refactor: unify shader file extension from .gs/.gsl to .shader (#2951)
GuoLei1990 Apr 1, 2026
c127ba2
fix(rhi-webgl): complete sRGB format support for compressed textures …
zhuxudong Apr 1, 2026
6c82a45
feat(shader-lab): unify macro system with flat instruction bytecode …
zhuxudong Apr 2, 2026
d1edf0d
fix: use deepClone for Skin._skinMatrices to prevent shared reference…
cptbtptpbcptdtptp Apr 7, 2026
931f254
fix(core): fix crash when removeChild during deactivation callbacks (…
GuoLei1990 Apr 7, 2026
3189475
feat(particle): add NoiseModule for simplex noise turbulence (#2953)
hhhhkrx Apr 9, 2026
a54642f
chore: release v2.0.0-alpha.26
cptbtptpbcptdtptp Apr 10, 2026
1c41263
feat(particle): implement curl noise for particle noise module (#2960)
GuoLei1990 Apr 13, 2026
fbd9f6f
chore: release v2.0.0-alpha.27
cptbtptpbcptdtptp Apr 13, 2026
8557031
fix(audio): guard suspend/resume against uninitialized AudioContext (…
GuoLei1990 Apr 14, 2026
708e95b
fix(physics): unify scene query filtering to use collisionLayer (#2964)
GuoLei1990 Apr 15, 2026
7c5d468
feat(particle): add transform to shape module (#2965)
hhhhkrx Apr 16, 2026
79b0698
chore: release v2.0.0-alpha.28
cptbtptpbcptdtptp Apr 16, 2026
00942cc
refactor(particle): rename ParticleScaleMode enums for clarity (#2970)
GuoLei1990 Apr 17, 2026
35bc258
fix(shader): add missing camera_VPMat declaration in Transform.glsl (…
zhuxudong Apr 17, 2026
3f24a7d
fix(shader-lab): add missing semicolon in GLES100 fragment return con…
zhuxudong Apr 17, 2026
f9064e7
chore: release v2.0.0-alpha.29
GuoLei1990 Apr 17, 2026
284cce8
feat(loader): v2 scene/prefab format parsing (#2959)
luzhuang Apr 20, 2026
4c6ddfa
feat(particle): add cycles and repeatInterval to Burst (#2972)
hhhhkrx Apr 21, 2026
ebd57ae
chore: release v2.0.0-alpha.30
GuoLei1990 Apr 21, 2026
e37c928
fix(shader-lab): resolve generic return type for texture/builtin func…
zhuxudong Apr 21, 2026
a6f0504
feat(shader-lab): make #define values first-class AST nodes (#2974)
GuoLei1990 Apr 28, 2026
e19b764
fix(text): propagate WorldPosition dirty in _onRootCanvasModify when …
cptbtptpbcptdtptp May 7, 2026
1bc2b10
refactor(shader): migrate GLSL shaders to ShaderLab and clean up shad…
zhuxudong May 11, 2026
6732c76
feat(loader): support $class refs and numeric SpecularMode in v2 scen…
luzhuang May 12, 2026
71efdd8
chore: release v2.0.0-alpha.31
cptbtptpbcptdtptp May 12, 2026
56bfd1b
refactor(loader): rename v2 scene.entities to scene.rootEntities (#2997)
luzhuang May 12, 2026
25ba6eb
chore: release v2.0.0-alpha.32
luzhuang May 12, 2026
5fe4e64
fix(shader-compiler): move bundler output out of dist/ (#3000)
zhuxudong May 13, 2026
373f559
fix(physics-physx): skip initial overlap in raycast/sweep + reuse que…
luzhuang May 13, 2026
bba09be
fix(shader-compiler): track every identifier in `#define` value (#2996)
zhuxudong May 13, 2026
66ea595
fix(shader-compiler): preserve args for builtin-alias and user-fn-ali…
zhuxudong May 14, 2026
8a24469
fix(shader-compiler): silence spurious form-param warnings + createGS…
zhuxudong May 14, 2026
9246f5e
chore: release v2.0.0-alpha.33
cptbtptpbcptdtptp May 14, 2026
f728209
fix(animation, loader): 从 #2983 抽离动画与 GLTF 加载器修复 (#2999)
luzhuang May 18, 2026
2563fc5
fix(shader-compiler, loader): silence verbose-mode noise + drop Shade…
zhuxudong May 18, 2026
cc78efd
feat(loader): recognize .m4a extension for audioClip loader (#3008)
GuoLei1990 May 19, 2026
17e88c8
feat(loader): recognize .aac and .flac extensions for audioClip loade…
GuoLei1990 May 19, 2026
956b5c2
feat(particle): implement rateOverDistance emission (#3011)
hhhhkrx May 24, 2026
0d29d9a
fix(particle): only accumulate rotation-over-lifetime onto Z axis (#3…
hhhhkrx May 27, 2026
1472913
feat(core): GPU instancing auto-batching (#2957)
GuoLei1990 May 28, 2026
dbc693e
feat(particle): support custom particle shaders with custom data (#3004)
hhhhkrx Jun 2, 2026
97d8d61
chore: release v2.0.0-alpha.34
luzhuang Jun 2, 2026
de75496
fix(particle): stop CustomDataModule from false-rejecting names by pr…
hhhhkrx Jun 3, 2026
2419929
fix(loader): compute glTF skin bounds in rootBone space (#3027)
luzhuang Jun 15, 2026
0237809
fix(particle): mesh not applied via setter when cloning ParticleRende…
hhhhkrx Jun 15, 2026
76d06e3
feat(particle): support curve modes for emission rateOverTime and rat…
hhhhkrx Jun 15, 2026
efcca09
`refactor(enum):` introduce EngineEventType enum. `chore:` clean comp…
luo2430 Jun 15, 2026
5d74c1d
chore: release v2.0.0-alpha.35
GuoLei1990 Jun 15, 2026
c8f00c0
chore: release v2.0.0-alpha.36
GuoLei1990 Jun 18, 2026
78664f0
feat(particle): add SubEmittersModule (#2982)
hhhhkrx Jun 18, 2026
5153244
chore: release v2.0.0-alpha.37
GuoLei1990 Jun 18, 2026
7635972
fix(entity): traverse front-to-back in getComponentsInChildren (#3030)
cptbtptpbcptdtptp Jun 20, 2026
3950676
fix(core): add @ignoreClone to Transform._parentTransformCache (#3036)
cptbtptpbcptdtptp Jun 20, 2026
950c7f6
fix(2d): fix typo in SpriteAtlas.getSprites warning message (#3032)
cptbtptpbcptdtptp Jun 20, 2026
4967220
fix(loader): prefer virtualPathResourceMap type over URL extension in…
cptbtptpbcptdtptp Jun 22, 2026
39b4b08
fix(audio): harden playback lifecycle (#3026)
luzhuang Jun 23, 2026
dd71455
feat(spine): build Spine in as a 2D skeletal animation solution
cptbtptpbcptdtptp Jun 24, 2026
447705d
test(spine): add e2e + unit tests, fix material cache miss
cptbtptpbcptdtptp Jun 24, 2026
9083457
feat: add dynamic collider force at position (#3039)
luzhuang Jun 25, 2026
50ac5bf
refactor(physics): remove physics-lite backend (#3053)
luzhuang Jun 26, 2026
39c27a6
perf(pipeline): share internal RT across cameras via per-frame pool l…
cptbtptpbcptdtptp Jun 27, 2026
c7f89db
chore: modernize ESLint setup (flat config, ESLint 10, Prettier split…
luo2430 Jun 27, 2026
721b42a
fix(core): invoke structured Signal listeners with runtime args befor…
cptbtptpbcptdtptp Jul 1, 2026
71bb198
Merge remote-tracking branch 'upstream/dev/2.0' into feat/builtin-spine
Jul 1, 2026
7a4784e
chore: remove stale spine-core-3.8 importer entry from pnpm-lock.yaml
Jul 1, 2026
369102e
fix(core): restore type-safety of ResourceManager.load's overload impl
Jul 1, 2026
b53a03e
chore: release v0.0.0-experimental-2.0-spine.0
Jul 2, 2026
d59c639
fix(loader): support runtime value mutations
luzhuang Jul 1, 2026
59c0cc2
feat(spine): add spine-core-3.8 runtime backend
Jul 2, 2026
72d440f
fix(spine): read texture via getImage() instead of a nonexistent .tex…
Jul 2, 2026
6951880
Merge remote-tracking branch 'origin/feat/builtin-spine' into fix/bui…
Jul 2, 2026
30991d2
chore: release v0.0.0-experimental-2.0-spine.1
Jul 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
16 changes: 0 additions & 16 deletions .eslintrc.js

This file was deleted.

10 changes: 5 additions & 5 deletions .github/HOW_TO_CONTRIBUTE.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ The following is a set of guidelines for contributing to Galacean. Please spend

<br />To set up for contributing code, you will take a few steps:<br />

1. Ensure you have node.js installed. You can download Node.js from [nodejs.org](https://nodejs.org/en/) and make sure your Node.js is later than `12`. Use `node -v` to check your Node.js version.
1. Ensure you have node.js installed. You can download Node.js from [nodejs.org](https://nodejs.org/en/) and make sure your Node.js is later than `20.19`. Use `node -v` to check your Node.js version.
1. Fork the Galacean repository.
1. Run `npm run bootstrap` in your cloned folder to install all the dependencies for Galacean.
1. Run `pnpm install` and `pnpm build` in your cloned folder to install all the dependencies for Galacean.



Expand All @@ -46,9 +46,9 @@ The following is a set of guidelines for contributing to Galacean. Please spend
<br />You can test your change by the following ways:<br />

- Clone the Galacean playground repository and write a demo for your change.
- Write an uint test in the Galacean repository and run `npm run test` to execute the uint test.
- Write an unit test in the Galacean repository and run `pnpm test` to execute the unit test.

- [Write an e2e test](https://github.com/galacean/runtime/wiki/How-to-write-an-e2e-Test-for-runtime) in the Galacean repository and run `npm run e2e` to execute the e2e test.
- [Write an e2e test](https://github.com/galacean/engine/wiki/How-to-write-an-e2e-Test-for-runtime) in the Galacean repository and run `pnpm e2e` to execute the e2e test.



Expand Down Expand Up @@ -137,7 +137,7 @@ git pull --ff upstream master

- All features or bug fixes **must be tested** by one or more specs (unit-tests).
- All public API methods **must be documented**.
- We use Prettier as an automatic code formatter. Run `npm run prettier` after making any changes to the code.
- We use Prettier as an automatic code formatter. Run `pnpm format` to format your code, and `pnpm lint` to check code quality, after making any changes to the code.



Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ jobs:
- name: Lint
run: pnpm run lint

- name: Format check
run: pnpm run format:check

build:
runs-on: ${{ matrix.os }}

Expand Down
5 changes: 5 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@ jobs:
if: ${{ github.event.inputs.build_official_preload == '' || github.event.inputs.build_official_preload == 'true' }}
run: ./scripts/build-official-preload.js

- name: Verify npm auth
run: npm whoami
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

- name: Release engine packages and Sync to CDN
uses: galacean/publish@main
if: success() || failure()
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ stats.html
tsconfig.tsbuildinfo
api
docs/api
docs/plans
yarn.lock
e2e/videos/*
e2e/screenshots/*
Expand All @@ -47,3 +48,6 @@ CLAUDE.md
# For bison generated files used by ShaderLab
*.tab.c
*.output

# Local-only test assets (third-party game art, not for redistribution)
examples/public/spine/
15 changes: 8 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Galacean Engine

<a href="https://www.npmjs.com/package/@galacean/engine"><img src="https://img.shields.io/npm/v/@galacean/engine"/></a>
[![npm-version](https://img.shields.io/npm/v/@galacean/engine)](https://www.npmjs.com/package/@galacean/engine)
![npm-size](https://img.shields.io/bundlephobia/minzip/@galacean/engine)
![npm-download](https://img.shields.io/npm/dm/@galacean/engine)
[![codecov](https://codecov.io/gh/galacean/engine/branch/main/graph/badge.svg?token=KR2UBKE3OX)](https://codecov.io/gh/galacean/engine)
Expand All @@ -22,12 +22,13 @@
## Usage

### Using Editor
We recommend using [**Editor**](https://galacean.antgroup.com/editor) for a streamlined workflow that enables seamless integration between artists and developers. Its intuitive visual tools allow artists to quickly create scenes and enable developers to write custom logic, with convenient platform export. You can even create projects based on pre-built case templates.

![image](https://github.com/user-attachments/assets/18f63fef-696c-4f9f-b44a-d8b7af481a3e)
We recommend using [**Editor**](https://galacean.antgroup.com/editor) for a streamlined workflow that enables seamless integration between artists and developers. Its intuitive visual tools allow artists to quickly create scenes and enable developers to write custom logic, with convenient platform export. You can even create projects based on pre-built case templates.

![image](https://github.com/user-attachments/assets/18f63fef-696c-4f9f-b44a-d8b7af481a3e)

### Using Pure Code

If you want to build your project using pure code via runtime, install the engine from npm:

```sh
Expand Down Expand Up @@ -73,7 +74,7 @@ engine.run();

This repository contains the runtime's source code and documentation. Everyone is welcome to contribute—whether you find a bug, have a feature request, or want to tackle a task from our roadmap, please get in touch.

Make sure to read the [Contributing Guide](.github/HOW_TO_CONTRIBUTE.md) / [贡献指南](https://github.com/galacean/engine/wiki/%E5%A6%82%E4%BD%95%E4%B8%8E%E6%88%91%E4%BB%AC%E5%85%B1%E5%BB%BA-Oasis-%E5%BC%80%E6%BA%90%E4%BA%92%E5%8A%A8%E5%BC%95%E6%93%8E) before submitting changes.
Make sure to read the [Contributing Guide](.github/HOW_TO_CONTRIBUTE.md) before submitting changes.

## Clone

Expand All @@ -91,7 +92,7 @@ git clone git@github.com:galacean/engine.git

Prerequisites:

- [Node.js v15.0.0+](https://nodejs.org/en/) and NPM (Install by official website)
- [Node.js v20.19.0+](https://nodejs.org/en/) (Install by official website)
- [PNPM](https://pnpm.io/) (Install globally by `npm install -g pnpm`)

In the folder where you have cloned the repository, install the build dependencies using pnpm:
Expand All @@ -100,10 +101,10 @@ In the folder where you have cloned the repository, install the build dependenci
pnpm install
```

Then, to build the source, using npm:
Then, to build the source, using pnpm:

```sh
npm run b:all
pnpm run b:all
```

## Links
Expand Down
39 changes: 28 additions & 11 deletions docs/en/animation/animator.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -113,11 +113,20 @@ animator.speed = 0;
animator.speed = 1;
```

If you only want to pause a specific `AnimatorState` , you can do so by setting its speed to 0.
If you only want to pause a specific `AnimatorState` on this Animator instance, set the per-instance speed to 0.

```typescript
const state = animator.findAnimatorState("xxx");
if (!state) {
// State not found in any layer
return;
}

// Pause only this Animator instance's playback of the state.
state.speed = 0;

// To resume later, write any non-zero value:
// state.speed = 1;
```

### Transition to Specified Animation State
Expand All @@ -130,26 +139,34 @@ animator.crossFade("OtherStateName", 0.3);

### Get Current Playing Animation State

You can use the [getCurrentAnimatorState](/apis/core/#Animator-getCurrentAnimatorState) method to get the currently playing `AnimatorState` . The parameter is the index `layerIndex` of the `AnimatorControllerLayer` where the `AnimatorState` is located. For details, see the [API documentation](/apis/core/#Animator-getCurrentAnimatorState). After obtaining it, you can set the properties of the `AnimatorState` , such as changing the default loop playback to play once.
[getCurrentAnimatorState](/apis/core/#Animator-getCurrentAnimatorState) returns the playing `AnimatorStateInstance` on a given layer, or `null` when the layer is missing or nothing is playing.

```typescript
const currentState = animator.getCurrentAnimatorState(0);
// Play once
currentState.wrapMode = WrapMode.Once;
// Loop playback
currentState.wrapMode = WrapMode.Loop;
const current = animator.getCurrentAnimatorState(0);
if (current) {
current.speed = 0.5;
}
```

### Get Animation State

You can use the [findAnimatorState](/apis/core/#Animator-findAnimatorState) method to get the specified `AnimatorState` . After obtaining it, you can set the properties of the `AnimatorState` , such as changing the default loop playback to play once.
[findAnimatorState](/apis/core/#Animator-findAnimatorState) returns the per-Animator `AnimatorStateInstance` (`AnimatorStateInstance | null`). Writes only affect this Animator; the shared `AnimatorState` on the controller is untouched. Same pattern as `Renderer.getInstanceMaterial`.

- `speed`, `wrapMode` are per-instance overrideable; unwritten reads return the shared default.
- `name`, `clip`, `clipStartTime`, `clipEndTime` read through to the shared asset.

To mutate the shared asset (broadcasts to every Animator), go through the controller path:

```typescript
const state = animator.findAnimatorState("xxx");
// Play once
if (!state) return;

// Per-instance overrides.
state.speed = 0.5;
state.wrapMode = WrapMode.Once;
// Loop playback
state.wrapMode = WrapMode.Loop;

// Broadcast to every Animator using this controller.
animator.animatorController.layers[0].stateMachine.findStateByName("xxx").clip = otherClip;
```

### Animation Culling
Expand Down
2 changes: 1 addition & 1 deletion docs/en/assets/load.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ this.engine.resourceManager.load("https://a.png");
// 加载 base64
this.engine.resourceManager.load<GLTFResource>({
url: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==",
type: AssetType.Texture2D,
type: AssetType.Texture,
});

// 加载编辑器虚拟路径下的资源
Expand Down
7 changes: 2 additions & 5 deletions docs/en/basics/overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,12 @@ Includes the following sub-packages:
| Package | Description | Related Documentation |
| :-- | :-- | --- |
| [@galacean/engine](https://www.npmjs.com/package/@galacean/engine) | Core architecture logic and core functionalities | [API](/apis/galacean) |
| [@galacean/engine-physics-lite](https://www.npmjs.com/package/@galacean/engine-physics-lite) | Lightweight physics engine | [Doc](/en/docs/physics/overall) |
| [@galacean/engine-physics-physx](https://www.npmjs.com/package/@galacean/engine-physics-physx) | Full-featured physics engine | [Doc](/en/docs/physics/overall) |
| [@galacean/engine-shaderlab](https://www.npmjs.com/package/@galacean/engine-shaderlab) | Galacean Shader compiler | [Doc](/en/docs/graphics/material/shader) |
| [@galacean/engine-shader-compiler](https://www.npmjs.com/package/@galacean/engine-shader-compiler) | Galacean Shader compiler | [Doc](/en/docs/graphics/material/shader) |
| [@galacean/engine-xr](https://www.npmjs.com/package/@galacean/engine-xr) | XR logic package | [Doc](/en/docs/xr/overall) |
| [@galacean/engine-xr-webxr](https://www.npmjs.com/package/@galacean/engine-xr-webxr) | WebXR backend | [Doc](/en/docs/xr/overall) |
| [@galacean/engine-ui](https://www.npmjs.com/package/@galacean/engine-ui) | UI | [Doc](/en/docs/UI/overall) |


You can install it via [NPM](https://docs.npmjs.com/):

```bash
Expand Down Expand Up @@ -88,9 +86,8 @@ For some functional modules that require additional compatibility considerations
| Module | Compatibility Considerations | Specific Documentation |
| :-- | :-- | :-- |
| [Mouse and Touch](/en/docs/input) | [PointerEvent](https://caniuse.com/?search=PointerEvent) | For compatibility, please refer to [polyfill-pointer-event](https://github.com/galacean/polyfill-pointer-event) |
| [PhysX](/en/docs/physics/overall) | [WebAssembly](https://caniuse.com/?search=wasm) | In environments that do not support WebAssembly, it will degrade to the JS version, with slightly lower performance and performance compared to the WebAssembly version |
| [PhysX](/en/docs/physics/overall) | [WebAssembly](https://caniuse.com/?search=wasm) | PhysX requires WebAssembly; `Auto` runtime mode only selects between SIMD and non-SIMD WebAssembly builds |

## Open Source Collaboration

**Galacean** is eager to collaborate with you to build an interactive engine. All development processes, including [planning](https://github.com/galacean/engine/projects?query=is%3Aopen), [milestones](https://github.com/galacean/engine/milestones), and [architecture design](https://github.com/galacean/engine/wiki/Physical-system-design), are publicly available in GitHub's project management. You can participate in the construction of the engine by [creating an issue](https://docs.github.com/zh/issues/tracking-your-work-with-issues/creating-an-issue) and [submitting a PR](https://docs.github.com/zh/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork). If you have any questions or need help, you can join the DingTalk group or seek help in the [discussion area](https://github.com/orgs/galacean/discussions).
```
4 changes: 2 additions & 2 deletions docs/en/core/color.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,10 @@ When uploading textures in the editor, the sRGB toggle is enabled by default. If
[Loading textures](/en/docs/assets/load) uses the sRGB color space by default. If linear space is required, you can disable the sRGB setting via parameters:

```ts showLineNumbers {7}
// Load textures using Texture2DLoader
// Load textures using TextureLoader
engine.resourceManager
.load<Texture2D>({
type: AssetType.Texture2D,
type: AssetType.Texture,
url: "https://***.png",
params: {
isSRGBColorSpace: false // Disable sRGB, use linear space, e.g., for normal maps
Expand Down
25 changes: 0 additions & 25 deletions docs/en/graphics/background/sky.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -34,31 +34,6 @@ Finally, follow the path **[Hierarchy Panel](/en/docs/interface/hierarchy)** ->

<Image src="https://mdn.alipayobjects.com/huamei_yo47yq/afts/img/A*rqvsSpkGJ6UAAAAAAAAAAAAADhuCAQ/original" />

### Code to Set Skybox

```typescript
// 创建天空盒纹理
const textureCube = await engine.resourceManager.load<TextureCube>({
urls: [
"px - right 图片 url",
"nx - left 图片 url",
"py - top 图片 url",
"ny - bottom 图片 url",
"pz - front 图片 url",
"nz - back 图片 url",
],
type: AssetType.TextureCube,
});
// 创建天空盒材质
const skyMaterial = new SkyBoxMaterial(engine);
skyMaterial.texture = textureCube;
// 设置天空盒
const background = scene.background;
background.mode = BackgroundMode.Sky;
background.sky.material = skyMaterial;
background.sky.mesh = PrimitiveMesh.createCuboid(engine, 2, 2, 2);
```

## Setting Procedural Sky

Procedural sky is the default background in 3D projects in the editor. You can also follow the path **[Hierarchy Panel](/en/docs/interface/hierarchy)** -> **Select Scene** -> **[Inspector Panel](/en/docs/interface/inspector)** -> **Background section** -> **Set Mode to Sky** -> **Select the built-in SkyMat material** -> **Set Mesh to the built-in Sphere**
Expand Down
2 changes: 1 addition & 1 deletion docs/en/graphics/background/texture.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ background.mode = BackgroundMode.Texture;
// 将一张 2D 纹理设置为背景纹理
background.texture = await engine.resourceManager.load<Texture2D>({
url: "XXX.jpg",
type: AssetType.Texture2D,
type: AssetType.Texture,
});
// 设置填充模式为铺满
background.textureFillMode = BackgroundTextureFillMode.Fill;
Expand Down
6 changes: 2 additions & 4 deletions docs/en/graphics/light/ambient.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@ In addition to real-time computed direct light sources, we generally need to pre

## Script Usage

After obtaining the URL of the baked product through the [baking tutorial](/en/docs/graphics/light/bake/), load and parse it through the engine's EnvLoader:
After obtaining the URL of the baked product through the [baking tutorial](/en/docs/graphics/light/bake/), load and parse it through the engine's AmbientLightLoader:

```typescript
engine.resourceManager
.load<AmbientLight>({
type: AssetType.Env,
type: AssetType.AmbientLight,
url: "https://gw.alipayobjects.com/os/bmw-prod/89c54544-1184-45a1-b0f5-c0b17e5c3e68.bin"
})
.then((ambientLight) => {
Expand All @@ -49,7 +49,5 @@ engine.resourceManager

// 预滤波环境贴图(ambientLight.specularTexture)还可以作为场景的背景
// skyMaterial.texture = ambientLight.specularTexture;
// 由于烘焙产物的颜色编码方式是 RGBM,因此作为背景时需要将解码设置为 textureDecodeRGBM
// skyMaterial.textureDecodeRGBM = true;
});
```
8 changes: 4 additions & 4 deletions docs/en/graphics/material/baseUse.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ You can select materials in the editor and switch shaders to observe real-time r

<Image src="https://gw.alipayobjects.com/zos/OasisHub/cd87c11a-7a68-4cde-a19a-40cff943e878/2025-02-10%25252017.05.33.gif" />

Each shader has different rendering effects and application scenarios. For more details, refer to [Built-in Shader Tutorial](/en/docs/graphics/material/builtinShaders/pbr/) and [Custom Shader Tutorial](/en/docs/graphics/material/examples/shaderlab-01-basic-shader).
Each shader has different rendering effects and application scenarios. For more details, refer to [Built-in Shader Tutorial](/en/docs/graphics/material/builtinShaders/pbr/) and [Custom Shader Tutorial](/en/docs/graphics/material/examples/shader-01-basic-shader).

## Creating Custom Shaders
If built-in shaders cannot meet your needs, we can create a custom shader. In the editor asset panel, create a new Shader and choose PBR template or Unlit template:
Expand All @@ -54,7 +54,7 @@ The editor will automatically help us create the Shader file and [UIScript](/en/
/>

<Callout type="info">
For specific shader content writing, you can quickly get started with [Custom Shader Tutorial](/en/docs/graphics/material/examples/shaderlab-01-basic-shader).
For specific shader content writing, you can quickly get started with [Custom Shader Tutorial](/en/docs/graphics/material/examples/shader-01-basic-shader).
</Callout>

## Shader Data Transfer
Expand All @@ -72,13 +72,13 @@ Pass "Forward" {
mat4 renderer_MVPMat;

// Through including code fragments
#include "Transform.glsl"
#include "Common/Transform.glsl"
}
...
```

## Next Steps
- [Custom Shader](/en/docs/graphics/material/examples/shaderlab-01-basic-shader) - Start your shader creation journey from scratch
- [Custom Shader](/en/docs/graphics/material/examples/shader-01-basic-shader) - Start your shader creation journey from scratch
- [Shader Syntax Deep Learning](/en/docs/graphics/material/shader) - Complete syntax reference
- [Shader Built-in Variables Reference](/en/docs/graphics/material/variables) - All built-in variables provided by the engine
- [Shader Built-in API Reference](/en/docs/graphics/material/shaderAPI) - All Shader APIs provided by the engine
Expand Down
10 changes: 5 additions & 5 deletions docs/en/graphics/material/examples/_meta.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"shaderlab-01-basic-shader": "Basic Shader Syntax",
"shaderlab-02-render-state": "Render State Control",
"shaderlab-03-ui-script": "UIScript System",
"shaderlab-04-multi-pass": "Multi-Pass Rendering",
"shaderlab-05-advance": "Advanced Features & Code Reuse"
"shader-01-basic-shader": "Basic Shader Syntax",
"shader-02-render-state": "Render State Control",
"shader-03-ui-script": "UIScript System",
"shader-04-multi-pass": "Multi-Pass Rendering",
"shader-05-advance": "Advanced Features & Code Reuse"
}

Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
title: Basic Shader Syntax
---

This tutorial will introduce the basic syntax of ShaderLab using a simple texture rendering shader. Through this basic example, you will learn:
- The basic structure of ShaderLab
This tutorial will introduce the basic syntax of Galacean Shader using a simple texture rendering shader. Through this basic example, you will learn:
- The basic structure of Galacean Shader
- How to declare variables and structures
- Basic vertex shader transformations
- Texture sampling in fragment shaders
Expand All @@ -15,7 +15,7 @@ src="https://mdn.alipayobjects.com/huamei_dmxymu/afts/img/A*Ykx2T7IuiAIAAAAAT0AA

## Shader Structure

ShaderLab uses a three-level nested structure: `Shader` → `SubShader` → `Pass`
Galacean Shader uses a three-level nested structure: `Shader` → `SubShader` → `Pass`

```glsl
Shader "Tutorial/01-BasicShader" {
Expand Down Expand Up @@ -205,4 +205,4 @@ This shader will:
4. Multiply the texture color with the base color to get the final color


Go to [Playground](/examples/shaderlab-01-basic-shader)
Go to [Playground](/examples/shader-01-basic-shader)
Loading
Loading