/* SPDX-License-Identifier: Apache-2.0 * Copyright 2011-2022 Blender Foundation */ #include "node_fresnel.h" #include "stdcycles.h" shader node_glass_bsdf(color Color = 0.8, string distribution = "sharp", float Roughness = 0.2, float IOR = 1.45, normal Normal = N, output closure color BSDF = 0) { float f = max(IOR, 1e-5); float eta = backfacing() ? 1.0 / f : f; float cosi = dot(I, Normal); float Fr = fresnel_dielectric_cos(cosi, eta); float roughness = Roughness * Roughness; if (distribution == "sharp") BSDF = Color * (Fr * reflection(Normal) + (1.0 - Fr) * refraction(Normal, eta)); else if (distribution == "beckmann") BSDF = Color * (Fr * microfacet_beckmann(Normal, roughness) + (1.0 - Fr) * microfacet_beckmann_refraction(Normal, roughness, eta)); else if (distribution == "Multiscatter GGX") BSDF = Color * microfacet_multi_ggx_glass(Normal, roughness, eta, Color); else if (distribution == "GGX") BSDF = Color * (Fr * microfacet_ggx(Normal, roughness) + (1.0 - Fr) * microfacet_ggx_refraction(Normal, roughness, eta)); }