Three.js?粗糙度貼圖與金屬度貼圖使用介紹
正文
在開始介紹貼圖之前,我們先介紹一下粗糙度屬性以及金屬度屬性。
粗糙度屬性
.roughness
表示材質(zhì)的粗糙程度,0 表示平滑的鏡面反射,1 表示完全漫反射,而金屬度屬性 .metalness
表示材質(zhì)與金屬的相似度,非金屬材質(zhì),例如木材、石材,使用0,金屬使用1,通過是沒有中間值的。0.0到1.0之間的值可用于生銹金屬的外觀。
在前面的示例中,我們只添加了環(huán)境光,它是一個基本光源,它沒有方向,且該光源的顏色將會疊加到場景現(xiàn)有物體的顏色上,對于本節(jié)我們要說的粗糙以及金屬度來說,只使用環(huán)境光并不能很好的提現(xiàn)效果。所以在開始之前,我們在原有的基礎(chǔ)上,加上一個平行光,可以將平行光類比成太陽光,被平行光照亮的整個區(qū)域接收到的光強(qiáng)是一樣的。
// 燈光 const light = new THREE.AmbientLight(0xffffff, 0.5); scene.add(light); // 直線光源 const directionalLight = new THREE.DirectionalLight(0xffffff, 0.5); directionalLight.position.set(10, 10, 10); scene.add(directionalLight);
然后我們先看下平滑的鏡面反射效果:
const material = new THREE.MeshStandardMaterial({ map: doorColorTexture, transparent: true, alphaMap: doorAlphaTexture, aoMap: doorAOTexture, side: THREE.DoubleSide, displacementMap: doorHeightTexture, displacementScale: 0.05, roughness: 0 });
可以看到物體表面將平行光直接發(fā)射了。當(dāng)將 roughness
設(shè)置成1后,不管怎么調(diào)節(jié),都不會看到上述鏡面的效果了,因?yàn)?roughness
為 1 時,會進(jìn)行漫反射,感興趣的同學(xué)可以試一下。
金屬度屬性
如果在項(xiàng)目中,整個物體都是光滑的、或者都是粗糙的,那也用不到貼圖,但是在實(shí)際項(xiàng)目中,往往是物體的一部分需要是光滑的,其他部分則是粗糙的,而且粗糙程度也不相同。
所以說,如果希望在一個表面粗糙的物體上指定一些閃亮的局部,則可以為 metalnessMap
屬性設(shè)置一張金屬質(zhì)感貼圖(或者相反的,若希望在一個光滑的物體上指定一些粗糙的局部,則可以在 roughnessMap
屬性上使用紋理貼圖來實(shí)現(xiàn))
const textureLoader = new THREE.TextureLoader(); const roughnessTexture = textureLoader.load(roughness); const material = new THREE.MeshStandardMaterial({ map: doorColorTexture, transparent: true, alphaMap: doorAlphaTexture, aoMap: doorAOTexture, side: THREE.DoubleSide, displacementMap: doorHeightTexture, displacementScale: 0.05, roughness: 1, roughnessMap: roughnessTexture });
在模型的具體位置上,metalness
和 roughness
兩個屬性的實(shí)際值等于屬性值本身與相應(yīng)貼圖中的值的乘積。上述代碼將會生成如下圖所示的效果:
可以看到門的主體部分鏡面發(fā)射,而門的扉頁上可能會因?yàn)樯P導(dǎo)致并沒有完全反射~
metalness
用法與 roughness
完全相同,這里就不再演示了。
以上就是Three.js 粗糙度貼圖與金屬度貼圖使用介紹的詳細(xì)內(nèi)容,更多關(guān)于Three.js 粗糙度金屬度貼圖的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
TypeScript防抖節(jié)流函數(shù)示例詳解
這篇文章主要為大家介紹了TypeScript防抖節(jié)流函數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08type challenge刷題之(middle 部分)示例解析
這篇文章主要為大家介紹了type challenge刷題之(middle 部分)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Typescript?轉(zhuǎn)換類型操作索引映射類型IIMT模式學(xué)習(xí)
這篇文章主要為大家介紹了Typescript?轉(zhuǎn)換類型操作之索引映射類型IIMT模式學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07TypeScript Module Resolution解析過程
這篇文章主要為大家介紹了TypeScript Module Resolution解析過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Manipulation-TypeScript?DOM操作示例解析
這篇文章主要為大家介紹了DOM?Manipulation-TypeScript?DOM操作示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03TypeScript類型編程中的extends和infer示例解析
這篇文章主要為大家介紹了TypeScript類型編程中的extends和infer示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08PureScript與JavaScript中equality設(shè)計(jì)的使用對比分析
這篇文章主要為大家介紹了PureScript中的equality與JavaScript中的equality設(shè)計(jì)對比分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11TypeScript與JavaScript的區(qū)別分析
TypeScript可以使用JavaScript中的所有代碼和編程概念,TypeScript是為了使JavaScript的開發(fā)變得更加容易而創(chuàng)建的。推薦先精通JS的的前提下再學(xué)習(xí)TS,這樣更有利于同時學(xué)習(xí)兩門語言。2022-12-12typescript難學(xué)嗎?前端有必要學(xué)?該怎么學(xué)typescript
TypeScript代碼與?JavaScript?代碼有非常高的兼容性,無門檻,你把?JS?代碼改為?TS?就可以運(yùn)行。TypeScript?應(yīng)該不會脫離?JavaScript?成為獨(dú)立的語言。學(xué)習(xí)?TypeScript?應(yīng)該主要指的是學(xué)習(xí)它的類型系統(tǒng)。2022-12-12與ChatGPT結(jié)對編程實(shí)現(xiàn)代碼詳解
這篇文章主要為大家介紹了與ChatGPT結(jié)對編寫實(shí)現(xiàn)代碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03