diff --git a/cocos/asset/assets/effect-asset.ts b/cocos/asset/assets/effect-asset.ts index 06d4fac7039..217bf410824 100644 --- a/cocos/asset/assets/effect-asset.ts +++ b/cocos/asset/assets/effect-asset.ts @@ -34,6 +34,7 @@ import { Asset } from './asset'; import { cclegacy, warnID } from '../../core'; import { ProgramLibrary } from '../../rendering/custom/private'; import { addEffectDefaultProperties, getCombinationDefines } from '../../render-scene/core/program-utils'; +import { MaterialPropertyFull } from './material'; export declare namespace EffectAsset { export interface IPropertyInfo { @@ -324,6 +325,9 @@ export class EffectAsset extends Asset { @editorOnly public hideInEditor = false; + @serializable + public props: Record[] = []; + /** * @en The loaded callback which should be invoked by the [[AssetManager]], will automatically register the effect. * @zh 通过 [[AssetManager]] 加载完成时的回调,将自动注册 effect 资源。 diff --git a/cocos/asset/assets/material.ts b/cocos/asset/assets/material.ts index 8bdd53715ba..a878158f4b7 100644 --- a/cocos/asset/assets/material.ts +++ b/cocos/asset/assets/material.ts @@ -454,6 +454,7 @@ export class Material extends Asset { for (const p in props) { this._uploadProperty(pass, p, props[p]); } + this._uploadPropertyFromEffectAsset(pass); }); } else { for (let i = 0; i < this._props.length; i++) { this._props[i] = {}; } @@ -462,6 +463,20 @@ export class Material extends Asset { this._hash = Material.getHash(this); } + /** + * @engineInternal + */ + protected _uploadPropertyFromEffectAsset (pass: Pass): void { + if (this._effectAsset) { + for (let i = 0; i < this._effectAsset.props.length; i++) { + const props = this._effectAsset.props[i]; + for (const p in props) { + this._uploadProperty(pass, p, props[p]); + } + } + } + } + /** * @engineInternal */