34935-vm/assets/cesium/packages/engine/Source/Shaders/Builtin/Functions/pbrMetallicRoughnessMaterial.js
Flatlogic Bot 055d24df95 WORKING
2025-10-14 02:37:44 +00:00

40 lines
1.5 KiB
JavaScript

//This file is automatically rebuilt by the Cesium build process.
export default "/**\n\
* Compute parameters for physically based rendering using the\n\
* metallic/roughness workflow. All inputs are linear; sRGB texture values must\n\
* be decoded beforehand\n\
*\n\
* @name czm_pbrMetallicRoughnessMaterial\n\
* @glslFunction\n\
*\n\
* @param {vec3} baseColor For dielectrics, this is the base color. For metals, this is the f0 value (reflectance at normal incidence)\n\
* @param {float} metallic 0.0 indicates dielectric. 1.0 indicates metal. Values in between are allowed (e.g. to model rust or dirt);\n\
* @param {float} roughness A value between 0.0 and 1.0\n\
* @return {czm_pbrParameters} parameters to pass into {@link czm_pbrLighting}\n\
*/\n\
czm_pbrParameters czm_pbrMetallicRoughnessMaterial(\n\
vec3 baseColor,\n\
float metallic,\n\
float roughness\n\
) \n\
{\n\
czm_pbrParameters results;\n\
\n\
// roughness is authored as perceptual roughness\n\
// square it to get material roughness\n\
roughness = clamp(roughness, 0.0, 1.0);\n\
results.roughness = roughness * roughness;\n\
\n\
// dielectrics use f0 = 0.04, metals use albedo as f0\n\
metallic = clamp(metallic, 0.0, 1.0);\n\
const vec3 REFLECTANCE_DIELECTRIC = vec3(0.04);\n\
vec3 f0 = mix(REFLECTANCE_DIELECTRIC, baseColor, metallic);\n\
results.f0 = f0;\n\
\n\
// diffuse only applies to dielectrics.\n\
results.diffuseColor = baseColor * (1.0 - f0) * (1.0 - metallic);\n\
\n\
return results;\n\
}\n\
";