diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-09-04 02:39:17 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-09-04 02:39:17 +0400 |
commit | b314209356288c3768faa1d7fbd7b1bf9d179a7a (patch) | |
tree | 2fafde8bdccff99e294acb34dbca90605e2e5327 /intern/cycles/kernel/osl/osl_bssrdf.cpp | |
parent | 9467d9940583d6c3a2e1b83f854453da9e64fdd7 (diff) |
Cycles: add a sharpness input to the Cubic SSS falloff. When set to 1 this will
give a result more similar to the Compatible falloff option. The scale is x2
though to keep the perceived scatter radius roughly the same while changing the
sharpness. Difference with compatible will be mainly on non-flat geometry.
Diffstat (limited to 'intern/cycles/kernel/osl/osl_bssrdf.cpp')
-rw-r--r-- | intern/cycles/kernel/osl/osl_bssrdf.cpp | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/intern/cycles/kernel/osl/osl_bssrdf.cpp b/intern/cycles/kernel/osl/osl_bssrdf.cpp index 7405b0be567..975967c0bbb 100644 --- a/intern/cycles/kernel/osl/osl_bssrdf.cpp +++ b/intern/cycles/kernel/osl/osl_bssrdf.cpp @@ -56,10 +56,8 @@ public: void setup() { - sc.type = CLOSURE_BSSRDF_COMPATIBLE_ID; - sc.prim = NULL; + sc.type = CLOSURE_BSSRDF_CUBIC_ID; sc.data0 = fabsf(average(radius)); - sc.data1 = 0.0f; // XXX texture blur } bool mergeable(const ClosurePrimitive *other) const @@ -85,6 +83,19 @@ ClosureParam *closure_bssrdf_cubic_params() return params; } +ClosureParam *closure_bssrdf_cubic_extended_params() +{ + static ClosureParam params[] = { + CLOSURE_FLOAT3_PARAM(CubicBSSRDFClosure, sc.N), + CLOSURE_FLOAT3_PARAM(CubicBSSRDFClosure, radius), + CLOSURE_FLOAT_PARAM(CubicBSSRDFClosure, sc.data1), + CLOSURE_FLOAT_PARAM(CubicBSSRDFClosure, sc.T.x), + CLOSURE_STRING_KEYPARAM("label"), + CLOSURE_FINISH_PARAM(CubicBSSRDFClosure) + }; + return params; +} + CLOSURE_PREPARE(closure_bssrdf_cubic_prepare, CubicBSSRDFClosure) /* Gaussian */ @@ -97,9 +108,7 @@ public: void setup() { sc.type = CLOSURE_BSSRDF_GAUSSIAN_ID; - sc.prim = NULL; sc.data0 = fabsf(average(radius)); - sc.data1 = 0.0f; // XXX texture blurring! } bool mergeable(const ClosurePrimitive *other) const @@ -125,6 +134,18 @@ ClosureParam *closure_bssrdf_gaussian_params() return params; } +ClosureParam *closure_bssrdf_gaussian_extended_params() +{ + static ClosureParam params[] = { + CLOSURE_FLOAT3_PARAM(GaussianBSSRDFClosure, sc.N), + CLOSURE_FLOAT3_PARAM(GaussianBSSRDFClosure, radius), + CLOSURE_FLOAT_PARAM(GaussianBSSRDFClosure, sc.data1), + CLOSURE_STRING_KEYPARAM("label"), + CLOSURE_FINISH_PARAM(GaussianBSSRDFClosure) + }; + return params; +} + CLOSURE_PREPARE(closure_bssrdf_gaussian_prepare, GaussianBSSRDFClosure) CCL_NAMESPACE_END |