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