From 4f1357f9f45e8d7bc58896b0ae053604aec51c58 Mon Sep 17 00:00:00 2001 From: est77 Date: Thu, 12 Nov 2015 22:25:30 +0100 Subject: [PATCH] Reverted remove ashikmin closure. stdosl.h formatting changes. --- .../renderer/kernel/shading/closures.cpp | 44 ++++++++++ .../renderer/kernel/shading/closures.h | 3 + .../renderer/kernel/shading/stdosl.h.in | 81 ++++++++++++------- .../renderer/modeling/bsdf/ashikhminbrdf.cpp | 12 +-- .../renderer/modeling/bsdf/ashikhminbrdf.h | 17 ++++ .../renderer/modeling/bsdf/osl/oslbsdf.cpp | 8 ++ 6 files changed, 126 insertions(+), 39 deletions(-) diff --git a/src/appleseed/renderer/kernel/shading/closures.cpp b/src/appleseed/renderer/kernel/shading/closures.cpp index 32c5568fd3..648e53efde 100644 --- a/src/appleseed/renderer/kernel/shading/closures.cpp +++ b/src/appleseed/renderer/kernel/shading/closures.cpp @@ -67,6 +67,17 @@ namespace struct EmptyClosureParams {}; + struct AshikhminShirleyBRDFClosureParams + { + OSL::Vec3 N; + OSL::Vec3 T; + OSL::Color3 rd; + OSL::Color3 rg; + float nu; + float nv; + float fr; + }; + struct DebugClosureParams { OSL::ustring tag; @@ -273,6 +284,30 @@ void CompositeSurfaceClosure::process_closure_tree( switch (c->id) { + case AshikhminShirleyID: + { + const AshikhminShirleyBRDFClosureParams* p = + reinterpret_cast(c->data()); + + AshikhminBRDFInputValues values; + values.m_rd = Color3f(p->rd); + values.m_rd_multiplier = 1.0; + values.m_rg = Color3f(p->rg); + values.m_rg_multiplier = 1.0; + values.m_nu = max(p->nu, 0.01f); + values.m_nv = max(p->nv, 0.01f); + values.m_fr_multiplier = p->fr; + + add_closure( + static_cast(c->id), + original_shading_basis, + w, + Vector3d(p->N), + Vector3d(p->T), + values); + } + break; + case DisneyID: { const DisneyBRDFClosureParams* p = @@ -890,6 +925,15 @@ void register_appleseed_closures(OSL::ShadingSystem& shading_system) static const BuiltinClosures builtins[] = { + { "as_ashikhmin_shirley", AshikhminShirleyID, { CLOSURE_VECTOR_PARAM(AshikhminShirleyBRDFClosureParams, N), + CLOSURE_VECTOR_PARAM(AshikhminShirleyBRDFClosureParams, T), + CLOSURE_COLOR_PARAM(AshikhminShirleyBRDFClosureParams, rd), + CLOSURE_COLOR_PARAM(AshikhminShirleyBRDFClosureParams, rg), + CLOSURE_FLOAT_PARAM(AshikhminShirleyBRDFClosureParams, nu), + CLOSURE_FLOAT_PARAM(AshikhminShirleyBRDFClosureParams, nv), + CLOSURE_FLOAT_PARAM(AshikhminShirleyBRDFClosureParams, fr), + CLOSURE_FINISH_PARAM(AshikhminShirleyBRDFClosureParams) } }, + { "as_disney", DisneyID, { CLOSURE_VECTOR_PARAM(DisneyBRDFClosureParams, N), CLOSURE_VECTOR_PARAM(DisneyBRDFClosureParams, T), CLOSURE_COLOR_PARAM(DisneyBRDFClosureParams, base_color), diff --git a/src/appleseed/renderer/kernel/shading/closures.h b/src/appleseed/renderer/kernel/shading/closures.h index 3129142880..f18ea859d6 100644 --- a/src/appleseed/renderer/kernel/shading/closures.h +++ b/src/appleseed/renderer/kernel/shading/closures.h @@ -32,6 +32,7 @@ // appleseed.renderer headers. #include "renderer/modeling/bsdf/osl/oslmicrofacetbrdf.h" #include "renderer/modeling/bsdf/osl/oslmicrofacetbtdf.h" +#include "renderer/modeling/bsdf/ashikhminbrdf.h" #include "renderer/modeling/bsdf/diffusebtdf.h" #include "renderer/modeling/bsdf/disneybrdf.h" #include "renderer/modeling/bsdf/orennayarbrdf.h" @@ -88,6 +89,7 @@ namespace renderer enum ClosureID { // BSDF closures. + AshikhminShirleyID, DisneyID, OrenNayarID, ReflectionID, @@ -138,6 +140,7 @@ class APPLESEED_ALIGN(16) CompositeClosure protected: typedef boost::mpl::vector< + AshikhminBRDFInputValues, DiffuseBTDFInputValues, DipoleBSSRDFInputValues, DisneyBRDFInputValues, diff --git a/src/appleseed/renderer/kernel/shading/stdosl.h.in b/src/appleseed/renderer/kernel/shading/stdosl.h.in index 698b5b7070..7ab5c50940 100644 --- a/src/appleseed/renderer/kernel/shading/stdosl.h.in +++ b/src/appleseed/renderer/kernel/shading/stdosl.h.in @@ -482,9 +482,9 @@ string concat (string a, string b, string c, string d, string e, string f) { // Closures /*************************************************************/ -/******************/ +/***************************************/ // diffuse -/******************/ +/***************************************/ closure color oren_nayar(normal N, float roughness) BUILTIN; @@ -492,24 +492,18 @@ closure color translucent(normal N) BUILTIN; closure color as_sheen(normal N) BUILTIN; -// for compat with the spec. -closure color diffuse(normal N) -{ - return oren_nayar(N, 0); -} - -/******************/ +/***************************************/ // specular -/******************/ +/***************************************/ closure color reflection(normal N) BUILTIN; closure color refraction(normal N, float eta) BUILTIN; -/******************/ +/***************************************/ // glossy -/******************/ +/***************************************/ closure color microfacet( string distribution, @@ -531,9 +525,9 @@ closure color microfacet( } -/******************/ +/***************************************/ // subsurface -/******************/ +/***************************************/ closure color as_subsurface( string profile, @@ -553,16 +547,20 @@ closure color as_subsurface( return as_subsurface(profile, N, rd, dmfp, eta, 0.0); } -// for compat with the spec. -closure color subsurface(float eta, float g, color mfp, color albedo) -{ - return as_subsurface("better_dipole", N, albedo, mfp, eta, g); -} +/***************************************/ +// composite closures +/***************************************/ -/******************/ -// uber-closures -/******************/ +closure color as_ashikhmin_shirley( + normal N, // normal + vector T, // tangent + color rd, // diffuse reflectance of the substrate + color rg, // glossy reflectance at normal incidence + float nu, // Phong-like exponent in first tangent direction + float nv, // Phong-like exponent in second tangent direction + float fr // Fresnel multiplier + ) BUILTIN; closure color as_disney( normal N, @@ -580,24 +578,51 @@ closure color as_disney( float clearcoat_gloss) BUILTIN; -/******************/ +/***************************************/ // emission -/******************/ +/***************************************/ closure color emission() BUILTIN; -/******************/ +/***************************************/ +// compatibility with the OSL spec +/***************************************/ + +closure color diffuse(normal N) +{ + return oren_nayar(N, 0); +} + +closure color phong(normal N, float exponent) +{ + return as_ashikhmin_shirley( + N, + vector(0), + color(0), + color(1), + exponent, + exponent, + 1.0); +} + +closure color subsurface(float eta, float g, color mfp, color albedo) +{ + return as_subsurface("better_dipole", N, albedo, mfp, eta, g); +} + + +/***************************************/ // misc -/******************/ +/***************************************/ closure color background() BUILTIN; closure color transparent() BUILTIN; -/******************/ +/***************************************/ // unsupported -/******************/ +/***************************************/ closure color debug(string tag) BUILTIN; closure color holdout() BUILTIN; diff --git a/src/appleseed/renderer/modeling/bsdf/ashikhminbrdf.cpp b/src/appleseed/renderer/modeling/bsdf/ashikhminbrdf.cpp index b20df0d087..3e532793bf 100644 --- a/src/appleseed/renderer/modeling/bsdf/ashikhminbrdf.cpp +++ b/src/appleseed/renderer/modeling/bsdf/ashikhminbrdf.cpp @@ -34,7 +34,6 @@ #include "renderer/kernel/lighting/scatteringmode.h" #include "renderer/modeling/bsdf/bsdf.h" #include "renderer/modeling/bsdf/bsdfwrapper.h" -#include "renderer/modeling/input/inputarray.h" // appleseed.foundation headers. #include "foundation/math/sampling/mappings.h" @@ -379,16 +378,7 @@ namespace } private: - APPLESEED_DECLARE_INPUT_VALUES(InputValues) - { - Spectrum m_rd; // diffuse reflectance of the substrate - double m_rd_multiplier; // diffuse reflectance multiplier - Spectrum m_rg; // glossy reflectance at normal incidence - double m_rg_multiplier; // glossy reflectance multiplier - double m_fr_multiplier; // Fresnel multiplier - double m_nu; // Phong-like exponent in first tangent direction - double m_nv; // Phong-like exponent in second tangent direction - }; + typedef AshikhminBRDFInputValues InputValues; // Precomputed reflectance-related values. struct RVal diff --git a/src/appleseed/renderer/modeling/bsdf/ashikhminbrdf.h b/src/appleseed/renderer/modeling/bsdf/ashikhminbrdf.h index 35f1ea60c1..d40c73c606 100644 --- a/src/appleseed/renderer/modeling/bsdf/ashikhminbrdf.h +++ b/src/appleseed/renderer/modeling/bsdf/ashikhminbrdf.h @@ -33,6 +33,7 @@ // appleseed.renderer headers. #include "renderer/global/globaltypes.h" #include "renderer/modeling/bsdf/ibsdffactory.h" +#include "renderer/modeling/input/inputarray.h" // appleseed.foundation headers. #include "foundation/platform/compiler.h" @@ -50,6 +51,22 @@ namespace renderer { class ParamArray; } namespace renderer { +// +// Ashikhmin-Shirley BRDF input values. +// + +APPLESEED_DECLARE_INPUT_VALUES(AshikhminBRDFInputValues) +{ + Spectrum m_rd; // diffuse reflectance of the substrate + double m_rd_multiplier; // diffuse reflectance multiplier + Spectrum m_rg; // glossy reflectance at normal incidence + double m_rg_multiplier; // glossy reflectance multiplier + double m_fr_multiplier; // Fresnel multiplier + double m_nu; // Phong-like exponent in first tangent direction + double m_nv; // Phong-like exponent in second tangent direction +}; + + // // Ashikhmin-Shirley BRDF factory. // diff --git a/src/appleseed/renderer/modeling/bsdf/osl/oslbsdf.cpp b/src/appleseed/renderer/modeling/bsdf/osl/oslbsdf.cpp index be800a8c77..a98d858a4c 100644 --- a/src/appleseed/renderer/modeling/bsdf/osl/oslbsdf.cpp +++ b/src/appleseed/renderer/modeling/bsdf/osl/oslbsdf.cpp @@ -83,6 +83,13 @@ namespace { memset(m_all_bsdfs, 0, sizeof(BSDF*) * NumClosuresIDs); + m_ashikhmin_shirley_brdf = + AshikhminBRDFFactory().create( + "ashikhmin_brdf", + ParamArray()); + + m_all_bsdfs[AshikhminShirleyID] = m_ashikhmin_shirley_brdf.get(); + m_diffuse_btdf = create_and_register_bsdf( TranslucentID, @@ -319,6 +326,7 @@ namespace } private: + auto_release_ptr m_ashikhmin_shirley_brdf; auto_release_ptr m_diffuse_btdf; auto_release_ptr m_disney_brdf; auto_release_ptr m_microfacet_beckmann_brdf;