#ifndef __PBR_INC #define __PBR_INC #include "filamented.cginc" #include "globals.cginc" #include "interpolators.cginc" struct Pbr { float4 albedo; float3 normal; float smoothness; float roughness_perceptual; float roughness; float metallic; }; // TODO consider normal filtering like filamented void propagateSmoothness(inout Pbr pbr) { pbr.roughness_perceptual = max(MIN_PERCEPTUAL_ROUGHNESS, 1.0f - pbr.smoothness); pbr.roughness = max(MIN_ROUGHNESS, pbr.roughness_perceptual * pbr.roughness_perceptual); } Pbr getPbr(v2f i) { Pbr pbr = (Pbr) 0; pbr.normal = normalize(i.normal); pbr.albedo = _Color; pbr.smoothness = _Smoothness; propagateSmoothness(pbr); pbr.metallic = _Metallic; return pbr; } #endif // __PBR_INC