import type { Texture, Material } from '@galacean/effects'; import { spec } from '@galacean/effects'; import type { MacroInfo } from '../index'; import type { Matrix3 } from './math'; import { Vector3, Vector4, Color } from './math'; import { PMaterialType } from './common'; import { PObject } from './object'; /** * 3D 材质基础类,支持公共的材质功能 */ export declare abstract class PMaterialBase extends PObject { effectMaterial: Material; /** * 材质类型,主要是 pbr 和 unlit 两类 */ materialType: PMaterialType; /** * 顶点着色器代码 */ vertexShaderCode: string; /** * 片段着色器代码 */ fragmentShaderCode: string; /** * 深度是否写入,默认是写入 */ ZWrite: boolean; /** * 是否深度测试提示,默认开启 */ ZTest: boolean; /** * 渲染类型,默认是不透明 */ renderType: spec.RenderType; /** * 是否 Alpha 裁剪,默认关闭 */ alphaClip: boolean; /** * Alpha 测试截断值 */ alphaCutoff: number; /** * 面侧模式,默认是正面 */ renderFace: spec.RenderFace; /** * 获取着色器特性列表,根据材质状态 * @returns 特性列表 */ getShaderFeatures(): string[]; getShaderMacros(): MacroInfo[]; /** * 根据材质状态,更新 GE 材质状态 * @param material - GE 材质 */ updateUniforms(material: Material): void; /** * 生成顶点和片段着色器代码 * 先获取着色器特性,再根据材质和全局状态,生成着色器代码 * @param inFeatureList - 外部特性列表 */ build(inFeatureList?: string[]): void; getFeatureList(inFeatureList?: string[]): string[]; getMacroList(inMacroList?: MacroInfo[]): MacroInfo[]; /** * 设置材质状态,根据 GE 材质状态 * @param material - GE 材质 */ setMaterialStates(material: Material): void; protected setFaceSideStates(material: Material): void; /** * 销毁材质,清除着色器代码 */ dispose(): void; /** * 是否合法,材质类型非 none * @returns */ isValid(): boolean; /** * 是否不透明 * @returns */ isOpaque(): boolean; /** * 是否 Alpha 裁剪 * @returns */ isAlphaClip(): boolean; /** * 是否半透明 * @returns */ isTransparent(): boolean; /** * 是否正面模式 * @returns */ isFrontSide(): boolean; /** * 是否背面模式 * @returns */ isBackSide(): boolean; /** * 是否双面模式 * @returns */ isBothSide(): boolean; } /** * 无光照材质类,负责无关照或者不接受光照情况下的物体材质效果 */ export declare class PMaterialUnlit extends PMaterialBase { /** * 基础颜色纹理 */ baseColorTexture?: Texture; /** * 基础颜色纹理变换 */ baseColorTextureTrans: Matrix3; /** * 基础颜色值,默认是白色 Color(1, 1, 1, 1) */ baseColorFactor: Color; /** * 创建无光照材质,支持基础颜色纹理 * @param material - effect 材质对象 */ create(material: Material): void; /** * 销毁材质 */ dispose(): void; /** * 获取着色器特性列表,根据材质状态 * @returns 着色器特性列表 */ getShaderFeatures(): string[]; getShaderMacros(): MacroInfo[]; /** * 更新对应的 GE 材质中着色器的 Uniform 数据 * @param material - GE 材质 */ updateUniforms(material: Material): void; /** * 是否有基础颜色纹理 * @returns */ hasBaseColorTexture(): boolean; /** * 获取基础颜色纹理 * @returns */ getBaseColorTexture(): Texture; /** * 设置基础颜色纹理 * @param val - 纹理对象 */ setBaseColorTexture(val: Texture): void; /** * 获取基础颜色纹理 * @returns */ getBaseColorFactor(): Color; /** * 设置基础颜色值 * @param val - 颜色值 */ setBaseColorFactor(val: Color | Vector4 | spec.vec4): void; } /** * PBR 材质类,负责基于物理的材质效果,也是渲染中最常用的材质。 * 目前支持金属度/粗糙度工作流,与其他引擎中的 PBR 材质功能一致。 */ export declare class PMaterialPBR extends PMaterialBase { /** * 基础颜色纹理 */ baseColorTexture?: Texture; /** * 基础颜色纹理变换 */ baseColorTextureTrans: Matrix3; /** * 基础颜色值,默认是白色 Color(1, 1, 1, 1) */ baseColorFactor: Color; /** * 金属度粗超度纹理 */ metallicRoughnessTexture?: Texture; /** * 金属度粗超度纹理变换 */ metallicRoughnessTextureTrans: Matrix3; /** * 是否高光抗锯齿,能够明显提升高光表现效果 */ useSpecularAA: boolean; /** * 金属度值 */ metallicFactor: number; /** * 粗超度值 */ roughnessFactor: number; /** * 法线纹理 */ normalTexture?: Texture; /** * 法线纹理变换 */ normalTextureTrans: Matrix3; /** * 法线纹理缩放 */ normalTextureScale: number; /** * AO 纹理 */ occlusionTexture?: Texture; /** * AO 纹理变换 */ occlusionTextureTrans: Matrix3; /** * AO 纹理强度 */ occlusionTextureStrength: number; /** * 自发光纹理 */ emissiveTexture?: Texture; /** * 自发光纹理变换 */ emissiveTextureTrans: Matrix3; /** * 自发光颜色值,默认是黑色 Vector4(0, 0, 0, 0) */ emissiveFactor: Color; /** * 自发光强度 */ emissiveIntensity: number; /** * 创建材质 * @param material - effect 材质对象 */ create(material: Material): void; /** * 销毁材质 */ dispose(): void; /** * 获取材质特性列表 * @returns 材质特性列表 */ getShaderFeatures(): string[]; getShaderMacros(): MacroInfo[]; /** * 更新关联的 GE 材质中着色器的 Uniform 数据 * @param material - GE 材质 */ updateUniforms(material: Material): void; /** * 是否有基础颜色纹理 * @returns */ hasBaseColorTexture(): boolean; /** * 设置基础颜色纹理 * @param val - 纹理 */ setBaseColorTexture(val: Texture): void; /** * 获取基础颜色纹理 * @returns */ getBaseColorFactor(): Color; /** * 设置基础颜色值 * @param val - 颜色值 */ setBaseColorFactor(val: Color | Vector4 | spec.vec4): void; /** * 是否有金属度粗超度纹理 * @returns */ hasMetallicRoughnessTexture(): boolean; /** * 获取金属度粗超度纹理 * @returns */ getMetallicRoughnessTexture(): Texture; /** * 设置金属度粗超度纹理 * @param val - 纹理 */ setMetallicRoughnessTexture(val: Texture): void; /** * 是否有法线纹理 * @returns */ hasNormalTexture(): boolean; /** * 获取法线纹理 * @returns */ getNormalTexture(): Texture; /** * 设置法线纹理 * @param val - 纹理 */ setNormalTexture(val: Texture): void; /** * 是否有遮挡纹理 * @returns */ hasOcclusionTexture(): boolean; /** * 获取遮挡纹理 * @returns */ getOcclusionTexture(): Texture; /** * 设置遮挡纹理 * @param val - 纹理 */ setOcclusionTexture(val: Texture): void; /** * 是否有自发光纹理 * @returns */ hasEmissiveTexture(): boolean; /** * 获取自发光纹理 * @returns */ getEmissiveTexture(): Texture; /** * 设置自发光纹理 * @param val - 纹理 */ setEmissiveTexture(val: Texture): void; /** * 是否有自发光值,包含强度 * @returns */ hasEmissiveValue(): boolean; /** * 获取自发光颜色 * @returns */ getEmissiveFactor(): Color; /** * 设置自发光颜色 * @param val - 颜色 */ setEmissiveFactor(val: Color | Vector3 | spec.vec3): void; /** * 获取自发光强度 * @returns */ getEmissiveIntensity(): number; /** * 设置自发光强度 * @param val - 强度 */ setEmissiveIntensity(val: number): void; } /** * 材质类型,包括无光照材质和 PBR 材质 */ export type PMaterial = PMaterialUnlit | PMaterialPBR; /** * 创建插件材质对象 * @param material - Effects 材质对象 * @returns 材质对象 */ export declare function createPluginMaterial(material: Material): PMaterial;