以下是 Three.js Material(材質(zhì)基類) 的完整中文說明:
概述
Material 是所有材質(zhì)的抽象基類,定義了物體外觀的渲染方式。其屬性與方法具有渲染器無關(guān)性,可在不同渲染器之間復(fù)用。
構(gòu)造函數(shù)
Material()
創(chuàng)建一個(gè)通用材質(zhì)基類(通常不直接實(shí)例化)。
核心屬性(所有材質(zhì)繼承的通用屬性)
- 透明度與混合
| 屬性 |
類型 |
描述 |
| .alphaHash |
Boolean |
啟用哈希透明(替代 .transparent 或 .alphaTest),通過隨機(jī)閾值實(shí)現(xiàn)無排序問題的透明近似。會(huì)引入噪點(diǎn),可用 TAARenderPass 降噪。默認(rèn) false。 |
| .alphaTest |
Float |
透明度測試閾值(范圍 0-1),低于此值的像素不渲染。默認(rèn) 0。 |
| .alphaToCoverage |
Boolean |
啟用 Alpha to Coverage(需開啟 MSAA 抗鋸齒)。優(yōu)化裁剪邊緣和 alphaTest 鋸齒。默認(rèn) false。 |
| .transparent |
Boolean |
是否啟用透明度(需配合 .opacity 使用)。透明物體在非透明物體之后渲染。默認(rèn) false。 |
| .opacity |
Float |
不透明度(0 全透明,1 不透明)。若未啟用 .transparent,僅影響顏色不透明度。默認(rèn) 1。 |
- 混合模式
| 屬性 |
類型 |
描述 |
| .blending |
Integer |
混合模式(如 THREE.NormalBlending)。需設(shè)為 CustomBlending 才能使用自定義混合參數(shù)。默認(rèn) NormalBlending。 |
| .blendSrc |
Integer |
源混合因子(如 THREE.SrcAlphaFactor)。默認(rèn) SrcAlphaFactor。 |
| .blendDst |
Integer |
目標(biāo)混合因子(如 THREE.OneMinusSrcAlphaFactor)。默認(rèn) OneMinusSrcAlphaFactor。 |
| .blendEquation |
Integer |
混合方程(如 THREE.AddEquation)。默認(rèn) AddEquation。 |
| .blendColor |
Color |
常量混合顏色(僅用于 ConstantColor 混合模式)。默認(rèn) 0x000000。 |
| .blendAlpha |
Float |
常量混合 Alpha(僅用于 ConstantAlpha 混合模式)。默認(rèn) 0。 |
- 深度與模板測試
| 屬性 |
類型 |
描述 |
| .depthTest |
Boolean |
是否啟用深度測試。禁用時(shí)同時(shí)禁用深度寫入。默認(rèn) true。 |
| .depthWrite |
Boolean |
是否寫入深度緩沖(禁用可用于 2D 疊加層)。默認(rèn) true。 |
| .depthFunc |
Integer |
深度比較函數(shù)(如 THREE.LessEqualDepth)。默認(rèn) LessEqualDepth。 |
| .stencilWrite |
Boolean |
是否啟用模板測試/寫入。默認(rèn) false。 |
| .stencilFunc |
Integer |
模板比較函數(shù)(如 THREE.AlwaysStencilFunc)。默認(rèn) AlwaysStencilFunc。 |
| .stencilRef |
Integer |
模板參考值。默認(rèn) 0。 |
- 多邊形偏移
| 屬性 |
類型 |
描述 |
| .polygonOffset |
Boolean |
是否啟用多邊形偏移(解決深度沖突)。默認(rèn) false。 |
| .polygonOffsetFactor |
Float |
偏移因子。默認(rèn) 0。 |
| .polygonOffsetUnits |
Float |
偏移單位。默認(rèn) 0。 |
- 渲染控制
| 屬性 |
類型 |
描述 |
| .side |
Integer |
面渲染模式:THREE.FrontSide(默認(rèn))、THREE.BackSide、THREE.DoubleSide。 |
| .shadowSide |
Integer |
陰影投射面(覆蓋 .side 設(shè)置)。默認(rèn) null。 |
| .colorWrite |
Boolean |
是否寫入顏色緩沖(可用于創(chuàng)建遮擋物)。默認(rèn) true。 |
| .dithering |
Boolean |
啟用顏色抖動(dòng)減少色帶。默認(rèn) false。 |
| .toneMapped |
Boolean |
是否受渲染器色調(diào)映射影響。默認(rèn) true。 |
| .visible |
Boolean |
是否可見。默認(rèn) true。 |
- 高級配置
| 屬性 |
類型 |
描述 |
| .defines |
Object |
自定義著色器宏定義(如 { MY_DEFINE: 1 })。 |
| .precision |
String |
覆蓋渲染器精度("highp"/"mediump"/"lowp")。默認(rèn) null。 |
| .forceSinglePass |
Boolean |
強(qiáng)制雙面透明物體單通道渲染(解決植被等性能問題)。默認(rèn) false。 |
- 標(biāo)識與元數(shù)據(jù)
| 屬性 |
類型 |
描述 |
| .name |
String |
材質(zhì)名稱(非唯一)。默認(rèn)空字符串。 |
| .uuid |
String |
唯一標(biāo)識符(自動(dòng)生成)。 |
| .userData |
Object |
用戶自定義數(shù)據(jù)存儲(chǔ)對象。默認(rèn) {}。 |
| .version |
Integer |
材質(zhì)更新計(jì)數(shù)器(.needsUpdate 觸發(fā)時(shí)遞增)。 |
核心方法
- 生命周期管理
| 方法 |
描述 |
| .clone() |
返回材質(zhì)副本(淺拷貝紋理)。 |
| .copy(material) |
復(fù)制其他材質(zhì)的屬性到當(dāng)前材質(zhì)。 |
| .dispose() |
釋放 GPU 資源(需手動(dòng)調(diào)用)。 |
- 著色器擴(kuò)展
| 方法 |
描述 |
| .onBeforeCompile(shader, renderer) |
著色器編譯前回調(diào)(可修改著色器代碼)。 |
| .customProgramCacheKey() |
返回著色器緩存標(biāo)識(需配合 onBeforeCompile 使用)。 |
- 渲染鉤子
| 方法 |
描述 |
| .onBeforeRender(renderer, scene, camera, geometry, object, group) |
材質(zhì)渲染前回調(diào)(每幀執(zhí)行)。 |
- 序列化
| 方法 |
描述 |
| .toJSON(meta) |
將材質(zhì)轉(zhuǎn)換為 JSON 格式(含紋理等元數(shù)據(jù))。 |
代碼示例
// 創(chuàng)建自定義材質(zhì)(禁用深度寫入,啟用混合)
const material = new THREE.MeshBasicMaterial({
color: 0xff0000,
transparent: true,
opacity: 0.5,
depthWrite: false,
blending: THREE.CustomBlending,
blendSrc: THREE.SrcAlphaFactor,
blendDst: THREE.OneMinusSrcAlphaFactor
});
// 克隆材質(zhì)
const clonedMaterial = material.clone();
// 釋放資源
material.dispose();
注意事項(xiàng)
- 性能優(yōu)化:禁用
.depthWrite 和 .colorWrite 可優(yōu)化 2D 疊加層渲染。
- 透明排序:透明物體按渲染順序(
renderOrder)排序,可能產(chǎn)生視覺問題。
- 模板測試:需開啟
WebGLRenderer.localClippingEnabled 才能使用自定義裁剪平面。
- 著色器擴(kuò)展:
onBeforeCompile 是高級功能,建議優(yōu)先使用 NodeMaterial 系統(tǒng)(WebGPU 方向)。
源碼位置:src/materials/Material.js
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。