60. PBR材质金属度和粗糙度

本节课给大家介绍PBR材质MeshStandardMaterial金属度metalness粗糙度roughness,再加上下节课讲解的环境贴图.envMap,给大家呈现一个金属渲染效果

金属度metalness

金属度属性.metalness表示材质像金属的程度, 非金属材料,如木材或石材,使用0.0,金属使用1.0。

threejs的PBR材质,.metalness默认是0.5,0.0到1.0之间的值可用于生锈的金属外观

new THREE.MeshStandardMaterial({
    metalness: 1.0,//金属度属性
})
mesh.material.metalness = 1.0;//金属度

粗糙度roughness

生活中不同物体表面的粗糙程度不同,比如地面比较粗糙,比如镜子表面就非常非常光滑。

粗糙度roughness表示模型表面的光滑或者说粗糙程度,越光滑镜面反射能力越强,越粗糙,表面镜面反射能力越弱,更多地表现为漫反射。

粗糙度roughness,0.0表示平滑的镜面反射,1.0表示完全漫反射,默认0.5。

new THREE.MeshStandardMaterial({
    roughness: 0.5,//表面粗糙度
})
mesh.material.roughness = 0.5;//表面粗糙度
当涉及到手写 PBR(Physically Based Rendering,基于物理的渲染)材质着色器时,以下是一个简单的示例,用于实现标准的 PBR 材质模型: ```c // 着色器属性 uniform vec3 uAlbedo; // 反射率颜色 uniform float uRoughness; // 粗糙度 uniform float uMetallic; // 金属 // 表面法线和视图方向 in vec3 vNormal; // 顶点法线 in vec3 vViewDir; // 视图方向 // 光源属性 uniform vec3 uLightDir; // 光源方向 uniform vec3 uLightColor; // 光源颜色 void main() { // 计算使用 Cook-Torrance BRDF 模型的光照 vec3 N = normalize(vNormal); vec3 V = normalize(vViewDir); vec3 L = normalize(uLightDir); vec3 H = normalize(V + L); // 半向量 // 计算漫反射项 float NdotL = max(dot(N, L), 0.0); vec3 diffuse = uAlbedo * NdotL; // 计算镜面反射项(使用 Cook-Torrance BRDF) float NdotH = max(dot(N, H), 0.0); float roughnessSquared = uRoughness * uRoughness; float F0 = mix(0.04, 1.0, uMetallic); vec3 specular = vec3(0.0); if (NdotL > 0.0) { float NdotV = max(dot(N, V), 0.001); float NdotH2 = NdotH * NdotH; float alpha = roughnessSquared; float D = exp((NdotH2 - 1.0) / (alpha * NdotH2)); float F = F0 + (1.0 - F0) * pow(1.0 - NdotV, 5.0); vec3 F_specular = vec3(F); float G = min(1.0, min(2.0 * NdotH * NdotV / NdotL, 2.0 * NdotH * NdotL / NdotV)); vec3 G_specular = vec3(G); specular = D * F_specular * G_specular / (4.0 * NdotL * NdotV); } // 最终颜色 = 漫反射 + 镜面反射 vec3 finalColor = diffuse + specular; // 输出颜色 gl_FragColor = vec4(finalColor, 1.0); } ``` 这只是一个简单的 PBR 材质着色器示例,实际中可能还包含其他的贴图、光照模型或者其他参数。这段代码可以作为一个起点,你可以根据需要进行修改和扩展。请记住,PBR 材质着色器通常需要更多的计算和参数,以便更真实地模拟光照和材质的物理特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值