PBR Metal Rough - Shader API

Allegorithmic Metal/Rough PBR shader

Import from libraries.


import lib-sss.glsl

import lib-pbr.glsl

import lib-emissive.glsl

import lib-pom.glsl

import lib-utils.glsl

Declare the iray mdl material to use with this shader.


//: metadata {

//:   "mdl":"mdl::alg::materials::skin_metallic_roughness::skin_metallic_roughness"

//: }

Channels needed for metal/rough workflow are bound here.


//: param auto channel_basecolor

uniform SamplerSparse basecolor_tex;

//: param auto channel_roughness

uniform SamplerSparse roughness_tex;

//: param auto channel_metallic

uniform SamplerSparse metallic_tex;

//: param auto channel_specularlevel

uniform SamplerSparse specularlevel_tex;

Shader entry point.


void shade(V2F inputs)

{

  // Apply parallax occlusion mapping if possible

  vec3 viewTS = worldSpaceToTangentSpace(getEyeVec(inputs.position), inputs);

  applyParallaxOffset(inputs, viewTS);



  // Fetch material parameters, and conversion to the specular/roughness model

  float roughness = getRoughness(roughness_tex, inputs.sparse_coord);

  vec3 baseColor = getBaseColor(basecolor_tex, inputs.sparse_coord);

  float metallic = getMetallic(metallic_tex, inputs.sparse_coord);

  float specularLevel = getSpecularLevel(specularlevel_tex, inputs.sparse_coord);

  vec3 diffColor = generateDiffuseColor(baseColor, metallic);

  vec3 specColor = generateSpecularColor(specularLevel, baseColor, metallic);

  // Get detail (ambient occlusion) and global (shadow) occlusion factors

  float occlusion = getAO(inputs.sparse_coord) * getShadowFactor();

  float specOcclusion = specularOcclusionCorrection(occlusion, metallic, roughness);



  LocalVectors vectors = computeLocalFrame(inputs);



  // Feed parameters for a physically based BRDF integration

  emissiveColorOutput(pbrComputeEmissive(emissive_tex, inputs.sparse_coord));

  albedoOutput(diffColor);

  diffuseShadingOutput(occlusion * envIrradiance(vectors.normal));

  specularShadingOutput(specOcclusion * pbrComputeSpecular(vectors, specColor, roughness));

  sssCoefficientsOutput(getSSSCoefficients(inputs.sparse_coord));

}
recommendation-more-help
4517c71e-0531-47f5-b14d-d3b9de4d0104