Cycles: Update Velvet BSDF to Sheen BSDF with new Microfiber sheen model #108869

Merged
Lukas Stockner merged 1 commits from LukasStockner/blender:sheen into main 2023-07-24 15:36:45 +02:00
31 changed files with 454 additions and 91 deletions

View File

@ -661,8 +661,18 @@ static ShaderNode *add_node(Scene *scene,
else if (b_node.is_a(&RNA_ShaderNodeBsdfTransparent)) {
node = graph->create_node<TransparentBsdfNode>();
}
else if (b_node.is_a(&RNA_ShaderNodeBsdfVelvet)) {
node = graph->create_node<VelvetBsdfNode>();
else if (b_node.is_a(&RNA_ShaderNodeBsdfSheen)) {
BL::ShaderNodeBsdfSheen b_sheen_node(b_node);
SheenBsdfNode *sheen = graph->create_node<SheenBsdfNode>();
switch (b_sheen_node.distribution()) {
case BL::ShaderNodeBsdfSheen::distribution_ASHIKHMIN:
sheen->set_distribution(CLOSURE_BSDF_ASHIKHMIN_VELVET_ID);
break;
case BL::ShaderNodeBsdfSheen::distribution_MICROFIBER:
sheen->set_distribution(CLOSURE_BSDF_SHEEN_ID);
break;
}
node = sheen;
}
else if (b_node.is_a(&RNA_ShaderNodeEmission)) {
node = graph->create_node<EmissionNode>();

View File

@ -126,6 +126,7 @@ set(SRC_KERNEL_CLOSURE_HEADERS
closure/bsdf_microfacet.h
closure/bsdf_oren_nayar.h
closure/bsdf_phong_ramp.h
closure/bsdf_sheen.h
closure/bsdf_toon.h
closure/bsdf_transparent.h
closure/bsdf_util.h

View File

@ -11,6 +11,7 @@
#include "kernel/closure/bsdf_phong_ramp.h"
#include "kernel/closure/bsdf_diffuse_ramp.h"
#include "kernel/closure/bsdf_microfacet.h"
#include "kernel/closure/bsdf_sheen.h"
#include "kernel/closure/bsdf_transparent.h"
#include "kernel/closure/bsdf_ashikhmin_shirley.h"
#include "kernel/closure/bsdf_toon.h"
@ -214,6 +215,11 @@ ccl_device_inline int bsdf_sample(KernelGlobals kg,
*sampled_roughness = one_float2();
*eta = 1.0f;
break;
case CLOSURE_BSDF_SHEEN_ID:
label = bsdf_sheen_sample(sc, Ng, sd->wi, rand_xy, eval, wo, pdf);
*sampled_roughness = one_float2();
*eta = 1.0f;
break;
#endif
default:
label = LABEL_NONE;
@ -349,6 +355,11 @@ ccl_device_inline void bsdf_roughness_eta(const KernelGlobals kg,
*roughness = one_float2();
*eta = 1.0f;
break;
case CLOSURE_BSDF_SHEEN_ID:
alpha = ((ccl_private SheenBsdf *)sc)->roughness;
*roughness = make_float2(alpha, alpha);
*eta = 1.0f;
break;
#endif
default:
*roughness = one_float2();
LukasStockner marked this conversation as resolved Outdated

This is used for path guiding. Checking on what the roughness does, I think it makes sense to return it here, it seems similar enough to microfacet roughness.

This is used for path guiding. Checking on what the roughness does, I think it makes sense to return it here, it seems similar enough to microfacet roughness.

Yes, I was hesitant to set it since this is retro-reflection, not regular reflection, so if the guiding was e.g. using GGX to sample directions it'd give horrible results. I don't think it does, though.

Yes, I was hesitant to set it since this is retro-reflection, not regular reflection, so if the guiding was e.g. using GGX to sample directions it'd give horrible results. I don't think it does, though.
@ -429,6 +440,7 @@ ccl_device_inline int bsdf_label(const KernelGlobals kg,
label = LABEL_REFLECT | LABEL_DIFFUSE;
break;
case CLOSURE_BSDF_PRINCIPLED_SHEEN_ID:
case CLOSURE_BSDF_SHEEN_ID:
label = LABEL_REFLECT | LABEL_DIFFUSE;
break;
#endif
@ -525,6 +537,9 @@ ccl_device_inline
case CLOSURE_BSDF_PRINCIPLED_SHEEN_ID:
eval = bsdf_principled_sheen_eval(sc, sd->wi, wo, pdf);
break;
case CLOSURE_BSDF_SHEEN_ID:
eval = bsdf_sheen_eval(sc, sd->wi, wo, pdf);
break;
#endif
default:
break;

View File

@ -0,0 +1,104 @@
/* SPDX-License-Identifier: Apache-2.0
* Copyright 2011-2022 Blender Foundation */
#pragma once
/* Shading model by Tizian Zeltner, Brent Burley, Matt Jen-Yuan Chiang:
* "Practical Multiple-Scattering Sheen Using Linearly Transformed Cosines" (2022)
* https://tizianzeltner.com/projects/Zeltner2022Practical/
*/
#include "kernel/closure/bsdf_util.h"
CCL_NAMESPACE_BEGIN
typedef struct SheenBsdf {
SHADER_CLOSURE_BASE;
float roughness;
float transformA, transformB;
float3 T, B;
} SheenBsdf;
static_assert(sizeof(ShaderClosure) >= sizeof(SheenBsdf), "SheenBsdf is too large!");
ccl_device int bsdf_sheen_setup(KernelGlobals kg,
ccl_private const ShaderData *sd,
ccl_private SheenBsdf *bsdf)
{
bsdf->type = CLOSURE_BSDF_SHEEN_ID;
bsdf->roughness = clamp(bsdf->roughness, 1e-3f, 1.0f);
make_orthonormals_tangent(bsdf->N, sd->wi, &bsdf->T, &bsdf->B);
float cosNI = dot(bsdf->N, sd->wi);
int offset = kernel_data.tables.sheen_ltc;
bsdf->transformA = lookup_table_read_2D(kg, cosNI, bsdf->roughness, offset, 32, 32);
bsdf->transformB = lookup_table_read_2D(kg, cosNI, bsdf->roughness, offset + 32 * 32, 32, 32);
float albedo = lookup_table_read_2D(kg, cosNI, bsdf->roughness, offset + 2 * 32 * 32, 32, 32);
bsdf->weight *= albedo;
bsdf->sample_weight *= albedo;
return SD_BSDF | SD_BSDF_HAS_EVAL;
}
ccl_device Spectrum bsdf_sheen_eval(ccl_private const ShaderClosure *sc,
const float3 wi,
const float3 wo,
ccl_private float *pdf)
{
ccl_private const SheenBsdf *bsdf = (ccl_private const SheenBsdf *)sc;
const float3 N = bsdf->N, T = bsdf->T, B = bsdf->B;
float a = bsdf->transformA, b = bsdf->transformB;
if (dot(N, wo) <= 0.0f) {
*pdf = 0.0f;
return zero_spectrum();
}
float3 localO = make_float3(dot(T, wo), dot(B, wo), dot(N, wo));
if (localO.z <= 0.0f) {
*pdf = 0.0f;
return zero_spectrum();
}
float lenSqr = sqr(a * localO.x + b * localO.z) + sqr(a * localO.y) + sqr(localO.z);
float val = M_1_PI_F * localO.z * sqr(a / lenSqr);
*pdf = val;
return make_spectrum(val);
}
ccl_device int bsdf_sheen_sample(ccl_private const ShaderClosure *sc,
float3 Ng,
float3 wi,
float2 rand,
ccl_private Spectrum *eval,
ccl_private float3 *wo,
ccl_private float *pdf)
{
ccl_private const SheenBsdf *bsdf = (ccl_private const SheenBsdf *)sc;
const float3 N = bsdf->N, T = bsdf->T, B = bsdf->B;
float a = bsdf->transformA, b = bsdf->transformB;
float2 disk = concentric_sample_disk(rand);
float diskZ = safe_sqrtf(1.0f - dot(disk, disk));
float3 localO = normalize(make_float3((disk.x - diskZ * b) / a, disk.y / a, diskZ));
*wo = localO.x * T + localO.y * B + localO.z * N;
if (dot(Ng, *wo) <= 0) {
*eval = zero_spectrum();
*pdf = 0.0f;
return LABEL_REFLECT | LABEL_DIFFUSE;
}
float lenSqr = sqr(a * localO.x + b * localO.z) + sqr(a * localO.y) + sqr(localO.z);
float val = M_1_PI_F * localO.z * sqr(a / lenSqr);
*pdf = val;
*eval = make_spectrum(val);
return LABEL_REFLECT | LABEL_DIFFUSE;
}
CCL_NAMESPACE_END

View File

@ -14,6 +14,7 @@
#include "kernel/closure/bsdf_diffuse.h"
#include "kernel/closure/bsdf_microfacet.h"
#include "kernel/closure/bsdf_oren_nayar.h"
#include "kernel/closure/bsdf_sheen.h"
#include "kernel/closure/bsdf_transparent.h"
#include "kernel/closure/bsdf_ashikhmin_shirley.h"
#include "kernel/closure/bsdf_toon.h"
@ -555,6 +556,30 @@ ccl_device void osl_closure_ashikhmin_velvet_setup(
sd->flag |= bsdf_ashikhmin_velvet_setup(bsdf);
}
/* Sheen */
ccl_device void osl_closure_sheen_setup(KernelGlobals kg,
ccl_private ShaderData *sd,
uint32_t path_flag,
float3 weight,
ccl_private const SheenClosure *closure)
{
if (osl_closure_skip(kg, sd, path_flag, LABEL_DIFFUSE)) {
return;
}
ccl_private SheenBsdf *bsdf = (ccl_private SheenBsdf *)bsdf_alloc(
sd, sizeof(SheenBsdf), rgb_to_spectrum(weight));
if (!bsdf) {
return;
}
bsdf->N = ensure_valid_specular_reflection(sd->Ng, sd->wi, closure->N);
bsdf->roughness = closure->roughness;
sd->flag |= bsdf_sheen_setup(kg, sd, bsdf);
}
ccl_device void osl_closure_diffuse_toon_setup(KernelGlobals kg,
ccl_private ShaderData *sd,
uint32_t path_flag,

View File

@ -115,6 +115,11 @@ OSL_CLOSURE_STRUCT_BEGIN(AshikhminVelvet, ashikhmin_velvet)
OSL_CLOSURE_STRUCT_MEMBER(AshikhminVelvet, FLOAT, float, sigma, NULL)
OSL_CLOSURE_STRUCT_END(AshikhminVelvet, ashikhmin_velvet)
OSL_CLOSURE_STRUCT_BEGIN(Sheen, sheen)
OSL_CLOSURE_STRUCT_MEMBER(Sheen, VECTOR, packed_float3, N, NULL)
OSL_CLOSURE_STRUCT_MEMBER(Sheen, FLOAT, float, roughness, NULL)
OSL_CLOSURE_STRUCT_END(Sheen, sheen)
OSL_CLOSURE_STRUCT_BEGIN(DiffuseToon, diffuse_toon)
OSL_CLOSURE_STRUCT_MEMBER(DiffuseToon, VECTOR, packed_float3, N, NULL)
OSL_CLOSURE_STRUCT_MEMBER(DiffuseToon, FLOAT, float, size, NULL)

View File

@ -78,6 +78,7 @@ set(SRC_OSL
node_separate_hsv.osl
node_separate_xyz.osl
node_set_normal.osl
node_sheen_bsdf.osl
node_sky_texture.osl
node_subsurface_scattering.osl
node_tangent.osl
@ -91,7 +92,6 @@ set(SRC_OSL
node_vector_map_range.osl
node_vector_rotate.osl
node_vector_transform.osl
node_velvet_bsdf.osl
node_vertex_color.osl
node_voronoi_texture.osl
node_voxel_texture.osl

View File

@ -0,0 +1,19 @@
/* SPDX-License-Identifier: Apache-2.0
* Copyright 2011-2022 Blender Foundation */
#include "node_fresnel.h"
#include "stdcycles.h"
shader node_sheen_bsdf(color Color = 0.8,
string distribution = "microfiber",
float Roughness = 0.0,
normal Normal = N,
output closure color BSDF = 0)
{
float roughness = clamp(Roughness, 0.0, 1.0);
if (distribution == "ashikhmin")
BSDF = Color * ashikhmin_velvet(Normal, roughness);
else if (distribution == "microfiber")
BSDF = Color * sheen(Normal, roughness);
}

View File

@ -1,15 +0,0 @@
/* SPDX-License-Identifier: Apache-2.0
* Copyright 2011-2022 Blender Foundation */
#include "node_fresnel.h"
#include "stdcycles.h"
shader node_velvet_bsdf(color Color = 0.8,
float Sigma = 0.0,
normal Normal = N,
output closure color BSDF = 0)
{
float sigma = clamp(Sigma, 0.0, 1.0);
BSDF = Color * ashikhmin_velvet(Normal, sigma);
}

View File

@ -23,6 +23,7 @@ closure color phong_ramp(normal N, float exponent, color colors[8]) BUILTIN;
closure color diffuse_toon(normal N, float size, float smooth) BUILTIN;
closure color glossy_toon(normal N, float size, float smooth) BUILTIN;
closure color ashikhmin_velvet(normal N, float sigma) BUILTIN;
closure color sheen(normal N, float roughness) BUILTIN;
closure color ambient_occlusion() BUILTIN;
closure color principled_diffuse(normal N, float roughness) BUILTIN;
closure color principled_sheen(normal N) BUILTIN;

View File

@ -540,6 +540,19 @@ ccl_device_noinline int svm_node_closure_bsdf(KernelGlobals kg,
}
break;
}
case CLOSURE_BSDF_SHEEN_ID: {
Spectrum weight = sd->svm_closure_weight * mix_weight;
ccl_private SheenBsdf *bsdf = (ccl_private SheenBsdf *)bsdf_alloc(
sd, sizeof(SheenBsdf), weight);
if (bsdf) {
bsdf->N = N;
bsdf->roughness = param1;
sd->flag |= bsdf_sheen_setup(kg, sd, bsdf);
}
break;
}
case CLOSURE_BSDF_GLOSSY_TOON_ID:
#ifdef __CAUSTICS_TRICKS__
if (!kernel_data.integrator.caustics_reflective && (path_flag & PATH_RAY_DIFFUSE))

View File

@ -416,6 +416,7 @@ typedef enum ClosureType {
CLOSURE_BSDF_DIFFUSE_RAMP_ID,
CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID,
CLOSURE_BSDF_PRINCIPLED_SHEEN_ID,
CLOSURE_BSDF_SHEEN_ID,
CLOSURE_BSDF_DIFFUSE_TOON_ID,
CLOSURE_BSDF_TRANSLUCENT_ID,

View File

@ -1233,7 +1233,7 @@ typedef struct KernelTables {
int ggx_glass_Eavg;
int ggx_glass_inv_E;
int ggx_glass_inv_Eavg;
int pad1;
int sheen_ltc;
} KernelTables;
static_assert_align(KernelTables, 16);

View File

@ -574,6 +574,7 @@ void ShaderManager::device_update_common(Device * /*device*/,
ktables->ggx_glass_Eavg = ensure_bsdf_table(dscene, scene, table_ggx_glass_Eavg);
ktables->ggx_glass_inv_E = ensure_bsdf_table(dscene, scene, table_ggx_glass_inv_E);
ktables->ggx_glass_inv_Eavg = ensure_bsdf_table(dscene, scene, table_ggx_glass_inv_Eavg);
ktables->sheen_ltc = ensure_bsdf_table(dscene, scene, table_sheen_ltc);
/* integrator */
KernelIntegrator *kintegrator = &dscene->data.integrator;

View File

@ -632,4 +632,105 @@ static const float table_ggx_glass_inv_Eavg[256] = {
1.000000f, 0.999883f, 0.998572f, 0.994065f, 0.984146f, 0.966784f, 0.940421f, 0.904186f, 0.858056f, 0.802932f, 0.740578f, 0.673420f, 0.604211f, 0.535654f, 0.470057f, 0.409136f
};
static const float table_sheen_ltc[3072] = {
0.01415f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f,
0.01941f, 0.01741f, 0.04610f, 0.10367f, 0.06244f, 0.23927f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f,
0.01927f, 0.01895f, 0.03002f, 0.03912f, 0.04938f, 0.05239f, 0.06018f, 0.06520f, 0.08253f, 0.21093f, 0.12785f, 0.19030f, 0.15254f, 0.16585f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f,
0.03084f, 0.03764f, 0.03952f, 0.04092f, 0.04433f, 0.05014f, 0.05570f, 0.06215f, 0.06660f, 0.07902f, 0.10099f, 0.10794f, 0.10632f, 0.12623f, 0.13931f, 0.15353f, 0.16109f, 0.14583f, 0.27891f, 0.22622f, 0.18932f, 0.20219f, 0.30269f, 0.38379f, 0.39038f, 0.46310f, 0.44663f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f,
0.04118f, 0.05152f, 0.05724f, 0.05863f, 0.05952f, 0.06149f, 0.06448f, 0.07004f, 0.07774f, 0.08632f, 0.09629f, 0.10592f, 0.10718f, 0.12207f, 0.13413f, 0.13702f, 0.15294f, 0.15121f, 0.17652f, 0.19532f, 0.20831f, 0.19762f, 0.24202f, 0.32995f, 0.30857f, 0.39596f, 0.38346f, 0.42503f, 0.41592f, 0.42512f, 0.36714f, 0.46502f,
0.05088f, 0.06485f, 0.07697f, 0.08334f, 0.08654f, 0.08950f, 0.09263f, 0.09711f, 0.10113f, 0.10913f, 0.11586f, 0.12425f, 0.12986f, 0.13530f, 0.15037f, 0.15165f, 0.15858f, 0.16660f, 0.18051f, 0.18022f, 0.19896f, 0.21095f, 0.21862f, 0.23861f, 0.25384f, 0.27394f, 0.28563f, 0.29160f, 0.29300f, 0.33458f, 0.36514f, 0.38746f,
0.06054f, 0.07710f, 0.09569f, 0.10917f, 0.11813f, 0.12469f, 0.12958f, 0.13406f, 0.13801f, 0.14324f, 0.14801f, 0.15359f, 0.15945f, 0.16688f, 0.17552f, 0.17956f, 0.18275f, 0.19293f, 0.20081f, 0.20817f, 0.21658f, 0.22866f, 0.23912f, 0.24736f, 0.26573f, 0.26821f, 0.28767f, 0.30592f, 0.31228f, 0.35297f, 0.35570f, 0.37077f,
0.07075f, 0.08974f, 0.11306f, 0.13241f, 0.14704f, 0.15763f, 0.16591f, 0.17258f, 0.17781f, 0.18234f, 0.18700f, 0.19101f, 0.19657f, 0.20165f, 0.20731f, 0.21150f, 0.21692f, 0.22536f, 0.23235f, 0.23720f, 0.24295f, 0.25154f, 0.26200f, 0.26907f, 0.28040f, 0.28922f, 0.30452f, 0.31567f, 0.33294f, 0.35084f, 0.37226f, 0.37956f,
0.08222f, 0.10394f, 0.13034f, 0.15361f, 0.17244f, 0.18620f, 0.19671f, 0.20509f, 0.21199f, 0.21726f, 0.22245f, 0.22702f, 0.23174f, 0.23571f, 0.23966f, 0.24384f, 0.24877f, 0.25548f, 0.26047f, 0.26863f, 0.27404f, 0.28088f, 0.29010f, 0.29704f, 0.30559f, 0.31519f, 0.32721f, 0.33828f, 0.35424f, 0.36868f, 0.38570f, 0.39707f,
0.09597f, 0.11972f, 0.14796f, 0.17350f, 0.19481f, 0.21136f, 0.22369f, 0.23330f, 0.24109f, 0.24787f, 0.25359f, 0.25878f, 0.26320f, 0.26831f, 0.27305f, 0.27810f, 0.28206f, 0.28734f, 0.29228f, 0.29719f, 0.30256f, 0.30857f, 0.31652f, 0.32438f, 0.33291f, 0.34012f, 0.35087f, 0.36243f, 0.37467f, 0.38986f, 0.40394f, 0.41719f,
0.11173f, 0.13694f, 0.16797f, 0.19358f, 0.21571f, 0.23427f, 0.24900f, 0.26011f, 0.26884f, 0.27668f, 0.28326f, 0.28928f, 0.29445f, 0.29932f, 0.30454f, 0.30943f, 0.31431f, 0.31861f, 0.32326f, 0.32881f, 0.33479f, 0.34094f, 0.34705f, 0.35341f, 0.36079f, 0.36863f, 0.37512f, 0.38607f, 0.39611f, 0.41085f, 0.42341f, 0.43959f,
0.12869f, 0.15653f, 0.18847f, 0.21397f, 0.23632f, 0.25652f, 0.27273f, 0.28564f, 0.29568f, 0.30413f, 0.31142f, 0.31801f, 0.32424f, 0.32941f, 0.33479f, 0.33933f, 0.34444f, 0.34892f, 0.35415f, 0.35873f, 0.36457f, 0.36975f, 0.37684f, 0.38258f, 0.39038f, 0.39755f, 0.40428f, 0.41192f, 0.42141f, 0.43074f, 0.44659f, 0.46013f,
0.14693f, 0.17828f, 0.20991f, 0.23513f, 0.25809f, 0.27850f, 0.29576f, 0.30999f, 0.32128f, 0.33053f, 0.33854f, 0.34549f, 0.35212f, 0.35806f, 0.36371f, 0.36901f, 0.37416f, 0.37907f, 0.38378f, 0.38887f, 0.39366f, 0.39953f, 0.40534f, 0.41134f, 0.41832f, 0.42583f, 0.43323f, 0.44084f, 0.44897f, 0.45832f, 0.47095f, 0.48340f,
0.16755f, 0.20139f, 0.23191f, 0.25781f, 0.28103f, 0.30124f, 0.31874f, 0.33379f, 0.34648f, 0.35662f, 0.36536f, 0.37289f, 0.37956f, 0.38585f, 0.39167f, 0.39736f, 0.40272f, 0.40787f, 0.41311f, 0.41811f, 0.42324f, 0.42871f, 0.43459f, 0.44015f, 0.44634f, 0.45322f, 0.46073f, 0.46815f, 0.47699f, 0.48579f, 0.49728f, 0.50776f,
0.19101f, 0.22471f, 0.25559f, 0.28173f, 0.30495f, 0.32541f, 0.34337f, 0.35848f, 0.37152f, 0.38267f, 0.39205f, 0.40013f, 0.40731f, 0.41385f, 0.41996f, 0.42572f, 0.43136f, 0.43675f, 0.44210f, 0.44729f, 0.45254f, 0.45786f, 0.46336f, 0.46904f, 0.47514f, 0.48162f, 0.48829f, 0.49548f, 0.50339f, 0.51184f, 0.52150f, 0.53151f,
0.21608f, 0.24910f, 0.28069f, 0.30724f, 0.33032f, 0.35096f, 0.36879f, 0.38457f, 0.39755f, 0.40917f, 0.41915f, 0.42790f, 0.43555f, 0.44253f, 0.44886f, 0.45491f, 0.46058f, 0.46590f, 0.47137f, 0.47670f, 0.48207f, 0.48730f, 0.49275f, 0.49832f, 0.50411f, 0.51004f, 0.51646f, 0.52320f, 0.53028f, 0.53801f, 0.54612f, 0.55540f,
0.24162f, 0.27454f, 0.30746f, 0.33408f, 0.35697f, 0.37775f, 0.39587f, 0.41165f, 0.42539f, 0.43716f, 0.44735f, 0.45639f, 0.46453f, 0.47188f, 0.47840f, 0.48473f, 0.49060f, 0.49627f, 0.50156f, 0.50672f, 0.51205f, 0.51720f, 0.52258f, 0.52812f, 0.53331f, 0.53939f, 0.54508f, 0.55110f, 0.55773f, 0.56432f, 0.57204f, 0.58012f,
0.26781f, 0.30184f, 0.33546f, 0.36236f, 0.38543f, 0.40587f, 0.42394f, 0.43980f, 0.45355f, 0.46600f, 0.47658f, 0.48605f, 0.49437f, 0.50188f, 0.50886f, 0.51521f, 0.52114f, 0.52686f, 0.53234f, 0.53760f, 0.54305f, 0.54802f, 0.55334f, 0.55850f, 0.56350f, 0.56858f, 0.57426f, 0.57961f, 0.58579f, 0.59207f, 0.59839f, 0.60588f,
0.29552f, 0.33034f, 0.36464f, 0.39162f, 0.41468f, 0.43479f, 0.45273f, 0.46884f, 0.48278f, 0.49535f, 0.50635f, 0.51611f, 0.52482f, 0.53261f, 0.53981f, 0.54631f, 0.55239f, 0.55818f, 0.56348f, 0.56875f, 0.57406f, 0.57898f, 0.58395f, 0.58890f, 0.59356f, 0.59866f, 0.60366f, 0.60857f, 0.61392f, 0.61896f, 0.62446f, 0.63114f,
0.32493f, 0.36044f, 0.39500f, 0.42214f, 0.44504f, 0.46513f, 0.48260f, 0.49819f, 0.51220f, 0.52491f, 0.53607f, 0.54604f, 0.55497f, 0.56304f, 0.57042f, 0.57716f, 0.58338f, 0.58922f, 0.59463f, 0.59983f, 0.60510f, 0.60997f, 0.61473f, 0.61957f, 0.62409f, 0.62852f, 0.63251f, 0.63750f, 0.64231f, 0.64613f, 0.65086f, 0.65651f,
0.35603f, 0.39159f, 0.42682f, 0.45440f, 0.47706f, 0.49652f, 0.51370f, 0.52869f, 0.54234f, 0.55442f, 0.56541f, 0.57520f, 0.58426f, 0.59238f, 0.59985f, 0.60666f, 0.61307f, 0.61890f, 0.62438f, 0.62953f, 0.63458f, 0.63958f, 0.64422f, 0.64882f, 0.65331f, 0.65733f, 0.66150f, 0.66582f, 0.66990f, 0.67332f, 0.67675f, 0.68186f,
0.38874f, 0.42458f, 0.46012f, 0.48761f, 0.51008f, 0.52938f, 0.54611f, 0.56050f, 0.57333f, 0.58470f, 0.59503f, 0.60417f, 0.61278f, 0.62064f, 0.62794f, 0.63473f, 0.64102f, 0.64684f, 0.65232f, 0.65750f, 0.66247f, 0.66730f, 0.67176f, 0.67590f, 0.68040f, 0.68408f, 0.68813f, 0.69178f, 0.69592f, 0.69962f, 0.70287f, 0.70573f,
0.42286f, 0.45893f, 0.49450f, 0.52171f, 0.54404f, 0.56282f, 0.57891f, 0.59290f, 0.60505f, 0.61587f, 0.62546f, 0.63399f, 0.64186f, 0.64911f, 0.65567f, 0.66186f, 0.66775f, 0.67323f, 0.67844f, 0.68333f, 0.68809f, 0.69262f, 0.69697f, 0.70127f, 0.70529f, 0.70896f, 0.71278f, 0.71635f, 0.71997f, 0.72323f, 0.72673f, 0.72944f,
0.45873f, 0.49433f, 0.52949f, 0.55633f, 0.57809f, 0.59634f, 0.61180f, 0.62517f, 0.63669f, 0.64685f, 0.65584f, 0.66376f, 0.67113f, 0.67765f, 0.68370f, 0.68930f, 0.69443f, 0.69947f, 0.70415f, 0.70855f, 0.71287f, 0.71661f, 0.72066f, 0.72451f, 0.72821f, 0.73152f, 0.73501f, 0.73849f, 0.74160f, 0.74481f, 0.74776f, 0.75105f,
0.49554f, 0.53027f, 0.56475f, 0.59075f, 0.61170f, 0.62919f, 0.64398f, 0.65664f, 0.66758f, 0.67700f, 0.68535f, 0.69283f, 0.69943f, 0.70556f, 0.71100f, 0.71624f, 0.72083f, 0.72523f, 0.72925f, 0.73339f, 0.73715f, 0.74070f, 0.74402f, 0.74744f, 0.75049f, 0.75399f, 0.75685f, 0.75973f, 0.76249f, 0.76538f, 0.76785f, 0.77115f,
0.53272f, 0.56610f, 0.59929f, 0.62423f, 0.64430f, 0.66087f, 0.67490f, 0.68693f, 0.69725f, 0.70612f, 0.71373f, 0.72045f, 0.72654f, 0.73215f, 0.73731f, 0.74188f, 0.74597f, 0.74997f, 0.75337f, 0.75709f, 0.76060f, 0.76378f, 0.76659f, 0.76955f, 0.77230f, 0.77514f, 0.77793f, 0.78043f, 0.78282f, 0.78468f, 0.78754f, 0.78995f,
0.56932f, 0.60103f, 0.63267f, 0.65651f, 0.67543f, 0.69104f, 0.70419f, 0.71550f, 0.72506f, 0.73326f, 0.74047f, 0.74675f, 0.75230f, 0.75728f, 0.76209f, 0.76616f, 0.76990f, 0.77334f, 0.77650f, 0.77934f, 0.78214f, 0.78495f, 0.78732f, 0.78980f, 0.79245f, 0.79502f, 0.79706f, 0.79938f, 0.80116f, 0.80364f, 0.80529f, 0.80743f,
0.60446f, 0.63433f, 0.66433f, 0.68668f, 0.70457f, 0.71943f, 0.73164f, 0.74200f, 0.75088f, 0.75865f, 0.76531f, 0.77096f, 0.77604f, 0.78047f, 0.78462f, 0.78846f, 0.79171f, 0.79502f, 0.79763f, 0.80039f, 0.80272f, 0.80522f, 0.80755f, 0.80954f, 0.81129f, 0.81256f, 0.81479f, 0.81667f, 0.81865f, 0.82066f, 0.82209f, 0.82367f,
0.63783f, 0.66580f, 0.69379f, 0.71493f, 0.73184f, 0.74566f, 0.75715f, 0.76684f, 0.77502f, 0.78192f, 0.78802f, 0.79346f, 0.79805f, 0.80183f, 0.80557f, 0.80900f, 0.81218f, 0.81485f, 0.81744f, 0.81962f, 0.82179f, 0.82385f, 0.82598f, 0.82778f, 0.82910f, 0.83055f, 0.83184f, 0.83322f, 0.83509f, 0.83626f, 0.83803f, 0.83936f,
0.66881f, 0.69495f, 0.72127f, 0.74089f, 0.75676f, 0.76971f, 0.78031f, 0.78909f, 0.79688f, 0.80339f, 0.80909f, 0.81375f, 0.81807f, 0.82174f, 0.82535f, 0.82861f, 0.83083f, 0.83320f, 0.83559f, 0.83745f, 0.84005f, 0.84070f, 0.84245f, 0.84401f, 0.84503f, 0.84665f, 0.84777f, 0.84905f, 0.84999f, 0.85072f, 0.85236f, 0.85341f,
0.69740f, 0.72178f, 0.74630f, 0.76475f, 0.77931f, 0.79173f, 0.80171f, 0.81003f, 0.81725f, 0.82283f, 0.82781f, 0.83251f, 0.83628f, 0.83983f, 0.84284f, 0.84559f, 0.84790f, 0.85013f, 0.85214f, 0.85384f, 0.85537f, 0.85665f, 0.85860f, 0.85961f, 0.86039f, 0.86098f, 0.86192f, 0.86278f, 0.86425f, 0.86491f, 0.86581f, 0.86677f,
0.72363f, 0.74617f, 0.76908f, 0.78618f, 0.79981f, 0.81110f, 0.82060f, 0.82853f, 0.83504f, 0.84058f, 0.84521f, 0.84932f, 0.85275f, 0.85605f, 0.85877f, 0.86129f, 0.86320f, 0.86521f, 0.86654f, 0.86846f, 0.86997f, 0.87153f, 0.87288f, 0.87352f, 0.87465f, 0.87549f, 0.87626f, 0.87676f, 0.87714f, 0.87859f, 0.87952f, 0.87958f,
0.00060f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f,
-0.00232f, -0.00581f, -0.00769f, -0.00740f, -0.02445f, -0.00242f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f,
-0.01424f, -0.00218f, -0.00194f, -0.00384f, -0.00668f, -0.01107f, -0.00746f, -0.01591f, -0.01052f, -0.01495f, -0.01530f, -0.01428f, -0.01276f, -0.02071f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f,
-0.04909f, -0.00710f, -0.00236f, -0.00201f, -0.00298f, -0.00546f, -0.00834f, -0.01121f, -0.01294f, -0.01692f, -0.01639f, -0.01738f, -0.02032f, -0.01947f, -0.02354f, -0.02910f, -0.02565f, -0.02903f, -0.03066f, -0.03044f, -0.04045f, -0.03226f, -0.03443f, -0.03023f, -0.03610f, -0.02022f, -0.02590f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f,
-0.10668f, -0.02772f, -0.00717f, -0.00421f, -0.00351f, -0.00399f, -0.00522f, -0.00676f, -0.00866f, -0.01099f, -0.01332f, -0.01590f, -0.01724f, -0.02041f, -0.02237f, -0.02503f, -0.02664f, -0.02803f, -0.03188f, -0.03147f, -0.03346f, -0.03476f, -0.03464f, -0.03125f, -0.03303f, -0.03009f, -0.03198f, -0.02518f, -0.03195f, -0.01668f, -0.02978f, -0.00394f,
-0.16006f, -0.05552f, -0.01274f, -0.00932f, -0.00582f, -0.00507f, -0.00531f, -0.00616f, -0.00792f, -0.00949f, -0.01167f, -0.01421f, -0.01635f, -0.01858f, -0.02237f, -0.02450f, -0.02714f, -0.03145f, -0.03321f, -0.03295f, -0.03492f, -0.03365f, -0.03733f, -0.03930f, -0.03879f, -0.03580f, -0.04089f, -0.03604f, -0.03863f, -0.03575f, -0.02621f, 0.00124f,
-0.18133f, -0.08871f, -0.02800f, -0.01456f, -0.01052f, -0.00904f, -0.00864f, -0.00898f, -0.01019f, -0.01110f, -0.01354f, -0.01614f, -0.01922f, -0.02116f, -0.02363f, -0.02606f, -0.02887f, -0.03270f, -0.03492f, -0.03607f, -0.03714f, -0.03827f, -0.03832f, -0.03918f, -0.04071f, -0.04382f, -0.03860f, -0.03690f, -0.04032f, -0.03136f, -0.02365f, -0.00281f,
-0.18042f, -0.10806f, -0.04959f, -0.02418f, -0.01632f, -0.01333f, -0.01204f, -0.01177f, -0.01198f, -0.01284f, -0.01408f, -0.01571f, -0.01794f, -0.02041f, -0.02235f, -0.02516f, -0.02822f, -0.03168f, -0.03631f, -0.03840f, -0.04024f, -0.04645f, -0.04435f, -0.04644f, -0.04369f, -0.05007f, -0.04809f, -0.04719f, -0.04179f, -0.03537f, -0.02633f, 0.00196f,
-0.17531f, -0.13135f, -0.08092f, -0.04065f, -0.02431f, -0.01864f, -0.01620f, -0.01498f, -0.01460f, -0.01487f, -0.01549f, -0.01665f, -0.01802f, -0.01985f, -0.02185f, -0.02424f, -0.02636f, -0.02871f, -0.03133f, -0.03455f, -0.03705f, -0.03931f, -0.04546f, -0.04797f, -0.04990f, -0.04903f, -0.04842f, -0.04495f, -0.04310f, -0.03925f, -0.02709f, 0.00103f,
-0.17397f, -0.15003f, -0.10394f, -0.06278f, -0.03698f, -0.02667f, -0.02186f, -0.01962f, -0.01854f, -0.01810f, -0.01829f, -0.01882f, -0.01990f, -0.02103f, -0.02243f, -0.02425f, -0.02611f, -0.02809f, -0.03045f, -0.03211f, -0.03413f, -0.03666f, -0.03882f, -0.04150f, -0.04323f, -0.04376f, -0.04590f, -0.04591f, -0.04202f, -0.03859f, -0.03046f, 0.00025f,
-0.17686f, -0.16229f, -0.12071f, -0.08778f, -0.05746f, -0.03882f, -0.03044f, -0.02620f, -0.02412f, -0.02290f, -0.02247f, -0.02235f, -0.02283f, -0.02349f, -0.02444f, -0.02562f, -0.02725f, -0.02859f, -0.03047f, -0.03199f, -0.03417f, -0.03618f, -0.03771f, -0.03920f, -0.04070f, -0.04138f, -0.04066f, -0.04125f, -0.03916f, -0.03764f, -0.02956f, 0.00020f,
-0.17952f, -0.16921f, -0.13634f, -0.10854f, -0.08164f, -0.05663f, -0.04256f, -0.03522f, -0.03124f, -0.02895f, -0.02760f, -0.02688f, -0.02653f, -0.02669f, -0.02714f, -0.02784f, -0.02878f, -0.02988f, -0.03136f, -0.03261f, -0.03429f, -0.03567f, -0.03742f, -0.03792f, -0.03954f, -0.04002f, -0.04014f, -0.03889f, -0.03739f, -0.03386f, -0.02810f, 0.00013f,
-0.17953f, -0.17294f, -0.14837f, -0.12458f, -0.10127f, -0.07912f, -0.05884f, -0.04715f, -0.04041f, -0.03637f, -0.03401f, -0.03244f, -0.03165f, -0.03113f, -0.03104f, -0.03134f, -0.03173f, -0.03225f, -0.03304f, -0.03406f, -0.03515f, -0.03594f, -0.03728f, -0.03825f, -0.03910f, -0.03960f, -0.03950f, -0.03877f, -0.03647f, -0.03283f, -0.02659f, -0.00002f,
-0.17802f, -0.17499f, -0.15708f, -0.13619f, -0.11601f, -0.09763f, -0.07926f, -0.06262f, -0.05277f, -0.04616f, -0.04217f, -0.03952f, -0.03771f, -0.03664f, -0.03576f, -0.03561f, -0.03531f, -0.03537f, -0.03577f, -0.03606f, -0.03657f, -0.03725f, -0.03790f, -0.03830f, -0.03850f, -0.03897f, -0.03886f, -0.03764f, -0.03576f, -0.03199f, -0.02678f, -0.00003f,
-0.17570f, -0.17630f, -0.16233f, -0.14459f, -0.12739f, -0.11162f, -0.09667f, -0.08188f, -0.06821f, -0.05887f, -0.05240f, -0.04793f, -0.04499f, -0.04300f, -0.04151f, -0.04033f, -0.03975f, -0.03947f, -0.03943f, -0.03917f, -0.03889f, -0.03887f, -0.03909f, -0.03903f, -0.03922f, -0.03917f, -0.03827f, -0.03702f, -0.03465f, -0.03118f, -0.02485f, -0.00021f,
-0.17314f, -0.17599f, -0.16514f, -0.15021f, -0.13557f, -0.12161f, -0.10876f, -0.09665f, -0.08454f, -0.07412f, -0.06463f, -0.05848f, -0.05371f, -0.05046f, -0.04821f, -0.04588f, -0.04438f, -0.04412f, -0.04304f, -0.04215f, -0.04161f, -0.04144f, -0.04059f, -0.04032f, -0.03974f, -0.03905f, -0.03800f, -0.03639f, -0.03436f, -0.03031f, -0.02493f, 0.00004f,
-0.17052f, -0.17439f, -0.16579f, -0.15358f, -0.14112f, -0.12867f, -0.11735f, -0.10700f, -0.09729f, -0.08817f, -0.07945f, -0.07137f, -0.06390f, -0.05902f, -0.05627f, -0.05274f, -0.05014f, -0.04809f, -0.04704f, -0.04617f, -0.04471f, -0.04402f, -0.04284f, -0.04140f, -0.04084f, -0.03922f, -0.03852f, -0.03648f, -0.03362f, -0.02977f, -0.02257f, 0.00013f,
-0.16726f, -0.17130f, -0.16494f, -0.15479f, -0.14389f, -0.13313f, -0.12315f, -0.11396f, -0.10555f, -0.09751f, -0.08994f, -0.08303f, -0.07661f, -0.07012f, -0.06435f, -0.06079f, -0.05751f, -0.05490f, -0.05237f, -0.05016f, -0.04763f, -0.04636f, -0.04452f, -0.04311f, -0.04186f, -0.04059f, -0.03828f, -0.03642f, -0.03293f, -0.02837f, -0.02183f, 0.00014f,
-0.16307f, -0.16735f, -0.16269f, -0.15439f, -0.14491f, -0.13568f, -0.12677f, -0.11827f, -0.11077f, -0.10366f, -0.09707f, -0.09088f, -0.08505f, -0.07920f, -0.07391f, -0.06982f, -0.06584f, -0.06111f, -0.05885f, -0.05560f, -0.05216f, -0.04974f, -0.04738f, -0.04525f, -0.04361f, -0.04122f, -0.03869f, -0.03626f, -0.03267f, -0.02853f, -0.02146f, 0.00013f,
-0.15800f, -0.16239f, -0.15918f, -0.15229f, -0.14422f, -0.13589f, -0.12801f, -0.12058f, -0.11368f, -0.10715f, -0.10121f, -0.09561f, -0.09044f, -0.08553f, -0.08073f, -0.07643f, -0.07244f, -0.06816f, -0.06506f, -0.06156f, -0.05721f, -0.05394f, -0.05071f, -0.04764f, -0.04512f, -0.04243f, -0.04049f, -0.03634f, -0.03217f, -0.02798f, -0.02084f, -0.00002f,
-0.15221f, -0.15659f, -0.15414f, -0.14815f, -0.14135f, -0.13430f, -0.12720f, -0.12066f, -0.11418f, -0.10835f, -0.10297f, -0.09810f, -0.09325f, -0.08885f, -0.08462f, -0.08047f, -0.07647f, -0.07278f, -0.06918f, -0.06581f, -0.06234f, -0.05873f, -0.05531f, -0.05182f, -0.04822f, -0.04527f, -0.04160f, -0.03748f, -0.03270f, -0.02788f, -0.02071f, 0.00002f,
-0.14547f, -0.14938f, -0.14757f, -0.14257f, -0.13671f, -0.13046f, -0.12415f, -0.11845f, -0.11284f, -0.10773f, -0.10264f, -0.09831f, -0.09386f, -0.08976f, -0.08593f, -0.08203f, -0.07852f, -0.07474f, -0.07134f, -0.06788f, -0.06462f, -0.06134f, -0.05808f, -0.05475f, -0.05106f, -0.04764f, -0.04367f, -0.03955f, -0.03412f, -0.02813f, -0.02016f, 0.00006f,
-0.13764f, -0.14091f, -0.13944f, -0.13527f, -0.13016f, -0.12479f, -0.11949f, -0.11426f, -0.10951f, -0.10470f, -0.10029f, -0.09638f, -0.09229f, -0.08880f, -0.08519f, -0.08157f, -0.07846f, -0.07504f, -0.07174f, -0.06833f, -0.06521f, -0.06204f, -0.05878f, -0.05553f, -0.05205f, -0.04825f, -0.04429f, -0.03988f, -0.03495f, -0.02900f, -0.02079f, 0.00004f,
-0.12835f, -0.13100f, -0.12981f, -0.12616f, -0.12174f, -0.11714f, -0.11273f, -0.10827f, -0.10407f, -0.09994f, -0.09624f, -0.09244f, -0.08921f, -0.08575f, -0.08256f, -0.07941f, -0.07619f, -0.07326f, -0.07019f, -0.06708f, -0.06409f, -0.06080f, -0.05775f, -0.05456f, -0.05117f, -0.04735f, -0.04351f, -0.03929f, -0.03433f, -0.02845f, -0.02023f, 0.00006f,
-0.11754f, -0.11957f, -0.11844f, -0.11545f, -0.11182f, -0.10788f, -0.10410f, -0.10044f, -0.09697f, -0.09338f, -0.09011f, -0.08701f, -0.08398f, -0.08119f, -0.07822f, -0.07555f, -0.07263f, -0.06975f, -0.06691f, -0.06419f, -0.06130f, -0.05852f, -0.05539f, -0.05231f, -0.04891f, -0.04558f, -0.04169f, -0.03736f, -0.03256f, -0.02662f, -0.01865f, 0.00005f,
-0.10493f, -0.10643f, -0.10534f, -0.10298f, -0.10006f, -0.09686f, -0.09377f, -0.09079f, -0.08792f, -0.08524f, -0.08232f, -0.07970f, -0.07708f, -0.07461f, -0.07219f, -0.06976f, -0.06728f, -0.06490f, -0.06230f, -0.05978f, -0.05720f, -0.05462f, -0.05180f, -0.04891f, -0.04571f, -0.04252f, -0.03908f, -0.03509f, -0.03041f, -0.02457f, -0.01737f, 0.00006f,
-0.09075f, -0.09168f, -0.09087f, -0.08897f, -0.08664f, -0.08420f, -0.08174f, -0.07948f, -0.07710f, -0.07491f, -0.07278f, -0.07074f, -0.06867f, -0.06656f, -0.06453f, -0.06249f, -0.06046f, -0.05835f, -0.05612f, -0.05390f, -0.05159f, -0.04919f, -0.04660f, -0.04409f, -0.04133f, -0.03835f, -0.03500f, -0.03151f, -0.02721f, -0.02228f, -0.01553f, 0.00008f,
-0.07481f, -0.07540f, -0.07476f, -0.07333f, -0.07166f, -0.06986f, -0.06808f, -0.06634f, -0.06465f, -0.06301f, -0.06140f, -0.05975f, -0.05817f, -0.05654f, -0.05499f, -0.05337f, -0.05168f, -0.04998f, -0.04815f, -0.04639f, -0.04448f, -0.04252f, -0.04044f, -0.03811f, -0.03571f, -0.03305f, -0.03031f, -0.02709f, -0.02350f, -0.01932f, -0.01368f, 0.00002f,
-0.05754f, -0.05784f, -0.05736f, -0.05642f, -0.05529f, -0.05410f, -0.05290f, -0.05171f, -0.05055f, -0.04938f, -0.04824f, -0.04716f, -0.04606f, -0.04480f, -0.04364f, -0.04245f, -0.04128f, -0.03999f, -0.03873f, -0.03727f, -0.03580f, -0.03429f, -0.03268f, -0.03089f, -0.02898f, -0.02688f, -0.02463f, -0.02206f, -0.01925f, -0.01574f, -0.01128f, -0.00001f,
-0.03902f, -0.03917f, -0.03890f, -0.03836f, -0.03768f, -0.03701f, -0.03631f, -0.03559f, -0.03488f, -0.03421f, -0.03354f, -0.03284f, -0.03212f, -0.03140f, -0.03066f, -0.02992f, -0.02915f, -0.02828f, -0.02745f, -0.02649f, -0.02553f, -0.02440f, -0.02332f, -0.02210f, -0.02076f, -0.01940f, -0.01782f, -0.01601f, -0.01390f, -0.01143f, -0.00812f, 0.00002f,
-0.01972f, -0.01980f, -0.01969f, -0.01946f, -0.01916f, -0.01888f, -0.01860f, -0.01833f, -0.01802f, -0.01768f, -0.01737f, -0.01712f, -0.01681f, -0.01645f, -0.01610f, -0.01577f, -0.01538f, -0.01498f, -0.01455f, -0.01407f, -0.01356f, -0.01304f, -0.01251f, -0.01189f, -0.01119f, -0.01040f, -0.00953f, -0.00857f, -0.00751f, -0.00614f, -0.00433f, 0.00002f,
0.00000f, -0.00002f, 0.00000f, -0.00002f, -0.00003f, -0.00001f, -0.00001f, -0.00004f, -0.00002f, -0.00003f, -0.00005f, -0.00002f, -0.00000f, -0.00001f, -0.00001f, -0.00001f, -0.00005f, -0.00004f, -0.00002f, -0.00002f, -0.00001f, 0.00003f, 0.00002f, 0.00003f, 0.00004f, 0.00003f, 0.00006f, 0.00004f, 0.00006f, 0.00006f, 0.00009f, 0.00003f,
0.00001f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f,
0.05839f, 0.00071f, 0.00007f, 0.00002f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f,
0.38834f, 0.09768f, 0.01072f, 0.00150f, 0.00039f, 0.00012f, 0.00006f, 0.00003f, 0.00002f, 0.00002f, 0.00001f, 0.00001f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f,
0.55348f, 0.29827f, 0.11755f, 0.03677f, 0.00983f, 0.00288f, 0.00101f, 0.00046f, 0.00023f, 0.00014f, 0.00010f, 0.00006f, 0.00004f, 0.00003f, 0.00002f, 0.00002f, 0.00001f, 0.00001f, 0.00001f, 0.00001f, 0.00001f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f, 0.00000f,
0.63273f, 0.42999f, 0.24931f, 0.13040f, 0.05910f, 0.02430f, 0.00981f, 0.00433f, 0.00200f, 0.00105f, 0.00062f, 0.00039f, 0.00024f, 0.00018f, 0.00013f, 0.00009f, 0.00008f, 0.00006f, 0.00005f, 0.00004f, 0.00003f, 0.00002f, 0.00002f, 0.00002f, 0.00002f, 0.00002f, 0.00001f, 0.00001f, 0.00001f, 0.00001f, 0.00001f, 0.00001f,
0.67021f, 0.50797f, 0.34475f, 0.22264f, 0.13300f, 0.07375f, 0.03867f, 0.02006f, 0.01032f, 0.00570f, 0.00324f, 0.00197f, 0.00122f, 0.00080f, 0.00059f, 0.00040f, 0.00030f, 0.00022f, 0.00018f, 0.00013f, 0.00012f, 0.00009f, 0.00008f, 0.00007f, 0.00006f, 0.00005f, 0.00004f, 0.00003f, 0.00003f, 0.00002f, 0.00002f, 0.00002f,
0.68765f, 0.55387f, 0.41042f, 0.29613f, 0.20481f, 0.13463f, 0.08432f, 0.05135f, 0.03073f, 0.01861f, 0.01132f, 0.00706f, 0.00454f, 0.00304f, 0.00212f, 0.00145f, 0.00102f, 0.00078f, 0.00059f, 0.00046f, 0.00036f, 0.00030f, 0.00025f, 0.00020f, 0.00017f, 0.00013f, 0.00012f, 0.00010f, 0.00008f, 0.00008f, 0.00006f, 0.00006f,
0.69478f, 0.58263f, 0.45689f, 0.35318f, 0.26617f, 0.19342f, 0.13650f, 0.09391f, 0.06299f, 0.04183f, 0.02782f, 0.01845f, 0.01259f, 0.00864f, 0.00604f, 0.00421f, 0.00303f, 0.00228f, 0.00172f, 0.00129f, 0.00099f, 0.00079f, 0.00066f, 0.00052f, 0.00044f, 0.00034f, 0.00029f, 0.00024f, 0.00021f, 0.00019f, 0.00017f, 0.00013f,
0.69794f, 0.60100f, 0.49085f, 0.39802f, 0.31773f, 0.24683f, 0.18787f, 0.13964f, 0.10220f, 0.07319f, 0.05252f, 0.03747f, 0.02685f, 0.01915f, 0.01375f, 0.00996f, 0.00733f, 0.00552f, 0.00415f, 0.00322f, 0.00247f, 0.00194f, 0.00157f, 0.00126f, 0.00102f, 0.00082f, 0.00069f, 0.00059f, 0.00048f, 0.00042f, 0.00037f, 0.00030f,
0.69862f, 0.61474f, 0.51662f, 0.43321f, 0.35989f, 0.29352f, 0.23483f, 0.18491f, 0.14298f, 0.10960f, 0.08309f, 0.06268f, 0.04689f, 0.03539f, 0.02666f, 0.02015f, 0.01519f, 0.01160f, 0.00888f, 0.00683f, 0.00531f, 0.00417f, 0.00334f, 0.00270f, 0.00220f, 0.00178f, 0.00148f, 0.00123f, 0.00101f, 0.00087f, 0.00073f, 0.00061f,
0.69840f, 0.62456f, 0.53780f, 0.46227f, 0.39486f, 0.33234f, 0.27724f, 0.22722f, 0.18345f, 0.14737f, 0.11687f, 0.09223f, 0.07219f, 0.05639f, 0.04424f, 0.03460f, 0.02709f, 0.02113f, 0.01656f, 0.01309f, 0.01041f, 0.00831f, 0.00665f, 0.00534f, 0.00434f, 0.00355f, 0.00288f, 0.00241f, 0.00200f, 0.00170f, 0.00142f, 0.00123f,
0.69766f, 0.63215f, 0.55391f, 0.48615f, 0.42355f, 0.36707f, 0.31348f, 0.26549f, 0.22185f, 0.18403f, 0.15141f, 0.12380f, 0.10104f, 0.08149f, 0.06598f, 0.05291f, 0.04275f, 0.03428f, 0.02771f, 0.02222f, 0.01807f, 0.01456f, 0.01195f, 0.00969f, 0.00798f, 0.00653f, 0.00534f, 0.00441f, 0.00368f, 0.00307f, 0.00264f, 0.00224f,
0.69641f, 0.63746f, 0.56861f, 0.50592f, 0.44888f, 0.39646f, 0.34628f, 0.30001f, 0.25727f, 0.21872f, 0.18530f, 0.15569f, 0.13073f, 0.10901f, 0.09059f, 0.07509f, 0.06205f, 0.05112f, 0.04199f, 0.03458f, 0.02839f, 0.02356f, 0.01946f, 0.01604f, 0.01337f, 0.01115f, 0.00925f, 0.00766f, 0.00639f, 0.00536f, 0.00456f, 0.00390f,
0.69548f, 0.64297f, 0.57917f, 0.52314f, 0.47074f, 0.42115f, 0.37424f, 0.33015f, 0.29017f, 0.25188f, 0.21825f, 0.18762f, 0.16043f, 0.13705f, 0.11638f, 0.09898f, 0.08360f, 0.07050f, 0.05948f, 0.04991f, 0.04182f, 0.03523f, 0.02974f, 0.02485f, 0.02085f, 0.01764f, 0.01489f, 0.01243f, 0.01052f, 0.00882f, 0.00762f, 0.00638f,
0.69518f, 0.64677f, 0.58896f, 0.53726f, 0.48924f, 0.44375f, 0.40045f, 0.35844f, 0.31901f, 0.28296f, 0.24905f, 0.21813f, 0.19041f, 0.16557f, 0.14360f, 0.12396f, 0.10719f, 0.09240f, 0.07951f, 0.06811f, 0.05809f, 0.04960f, 0.04242f, 0.03607f, 0.03098f, 0.02650f, 0.02249f, 0.01911f, 0.01630f, 0.01385f, 0.01187f, 0.01004f,
0.69404f, 0.65077f, 0.59738f, 0.55038f, 0.50616f, 0.46415f, 0.42260f, 0.38393f, 0.34548f, 0.31090f, 0.27757f, 0.24745f, 0.21932f, 0.19400f, 0.17119f, 0.15001f, 0.13153f, 0.11577f, 0.10099f, 0.08803f, 0.07655f, 0.06667f, 0.05763f, 0.05000f, 0.04326f, 0.03745f, 0.03233f, 0.02793f, 0.02410f, 0.02070f, 0.01799f, 0.01521f,
0.69373f, 0.65370f, 0.60556f, 0.56229f, 0.52099f, 0.48220f, 0.44396f, 0.40686f, 0.37145f, 0.33754f, 0.30538f, 0.27528f, 0.24688f, 0.22137f, 0.19867f, 0.17677f, 0.15718f, 0.13948f, 0.12389f, 0.10988f, 0.09688f, 0.08560f, 0.07528f, 0.06603f, 0.05819f, 0.05082f, 0.04467f, 0.03901f, 0.03404f, 0.02969f, 0.02565f, 0.02208f,
0.69374f, 0.65782f, 0.61300f, 0.57350f, 0.53560f, 0.49892f, 0.46321f, 0.42810f, 0.39357f, 0.36179f, 0.33055f, 0.30167f, 0.27438f, 0.24851f, 0.22461f, 0.20331f, 0.18338f, 0.16512f, 0.14824f, 0.13281f, 0.11850f, 0.10604f, 0.09447f, 0.08417f, 0.07499f, 0.06675f, 0.05906f, 0.05240f, 0.04618f, 0.04061f, 0.03571f, 0.03099f,
0.69478f, 0.66097f, 0.62010f, 0.58318f, 0.54812f, 0.51374f, 0.48033f, 0.44784f, 0.41543f, 0.38456f, 0.35481f, 0.32656f, 0.29983f, 0.27402f, 0.25049f, 0.22916f, 0.20899f, 0.18974f, 0.17283f, 0.15672f, 0.14161f, 0.12804f, 0.11552f, 0.10412f, 0.09392f, 0.08435f, 0.07566f, 0.06785f, 0.06058f, 0.05418f, 0.04812f, 0.04224f,
0.69636f, 0.66479f, 0.62662f, 0.59208f, 0.55948f, 0.52832f, 0.49686f, 0.46577f, 0.43550f, 0.40640f, 0.37791f, 0.35063f, 0.32440f, 0.29963f, 0.27592f, 0.25430f, 0.23411f, 0.21474f, 0.19748f, 0.18085f, 0.16496f, 0.15071f, 0.13745f, 0.12513f, 0.11401f, 0.10365f, 0.09444f, 0.08526f, 0.07697f, 0.06969f, 0.06274f, 0.05589f,
0.69769f, 0.66832f, 0.63306f, 0.60175f, 0.57114f, 0.54130f, 0.51227f, 0.48316f, 0.45520f, 0.42705f, 0.39979f, 0.37306f, 0.34799f, 0.32368f, 0.30051f, 0.27914f, 0.25902f, 0.24017f, 0.22242f, 0.20569f, 0.18950f, 0.17436f, 0.16053f, 0.14758f, 0.13555f, 0.12469f, 0.11431f, 0.10458f, 0.09545f, 0.08731f, 0.07957f, 0.07179f,
0.69990f, 0.67322f, 0.63986f, 0.61072f, 0.58210f, 0.55452f, 0.52757f, 0.49993f, 0.47308f, 0.44623f, 0.42075f, 0.39479f, 0.37078f, 0.34736f, 0.32486f, 0.30393f, 0.28339f, 0.26497f, 0.24680f, 0.23017f, 0.21383f, 0.19836f, 0.18437f, 0.17126f, 0.15847f, 0.14730f, 0.13611f, 0.12594f, 0.11582f, 0.10669f, 0.09818f, 0.09005f,
0.70253f, 0.67808f, 0.64711f, 0.61953f, 0.59306f, 0.56710f, 0.54128f, 0.51588f, 0.48993f, 0.46536f, 0.44072f, 0.41598f, 0.39289f, 0.36972f, 0.34812f, 0.32779f, 0.30734f, 0.28886f, 0.27113f, 0.25452f, 0.23828f, 0.22301f, 0.20869f, 0.19491f, 0.18216f, 0.17048f, 0.15888f, 0.14822f, 0.13785f, 0.12826f, 0.11891f, 0.11016f,
0.70614f, 0.68304f, 0.65400f, 0.62850f, 0.60424f, 0.57985f, 0.55495f, 0.53092f, 0.50671f, 0.48305f, 0.45902f, 0.43645f, 0.41315f, 0.39173f, 0.37068f, 0.35059f, 0.33162f, 0.31286f, 0.29534f, 0.27878f, 0.26263f, 0.24796f, 0.23332f, 0.21962f, 0.20663f, 0.19465f, 0.18279f, 0.17160f, 0.16118f, 0.15104f, 0.14164f, 0.13208f,
0.70978f, 0.68862f, 0.66139f, 0.63717f, 0.61414f, 0.59143f, 0.56846f, 0.54542f, 0.52211f, 0.49989f, 0.47731f, 0.45504f, 0.43352f, 0.41218f, 0.39227f, 0.37245f, 0.35421f, 0.33639f, 0.31941f, 0.30275f, 0.28712f, 0.27199f, 0.25799f, 0.24427f, 0.23147f, 0.21879f, 0.20716f, 0.19611f, 0.18534f, 0.17518f, 0.16553f, 0.15588f,
0.71478f, 0.69461f, 0.66938f, 0.64618f, 0.62412f, 0.60285f, 0.58132f, 0.55910f, 0.53711f, 0.51494f, 0.49425f, 0.47333f, 0.45290f, 0.43265f, 0.41291f, 0.39410f, 0.37624f, 0.35873f, 0.34249f, 0.32632f, 0.31088f, 0.29607f, 0.28230f, 0.26889f, 0.25622f, 0.24377f, 0.23184f, 0.22064f, 0.21005f, 0.20018f, 0.19021f, 0.18089f,
0.71955f, 0.70070f, 0.67652f, 0.65469f, 0.63411f, 0.61379f, 0.59365f, 0.57227f, 0.55184f, 0.53105f, 0.51035f, 0.49002f, 0.47031f, 0.45135f, 0.43250f, 0.41451f, 0.39705f, 0.38038f, 0.36453f, 0.34929f, 0.33447f, 0.32031f, 0.30694f, 0.29376f, 0.28119f, 0.26903f, 0.25765f, 0.24642f, 0.23605f, 0.22580f, 0.21630f, 0.20694f,
0.72541f, 0.70789f, 0.68481f, 0.66418f, 0.64427f, 0.62480f, 0.60530f, 0.58563f, 0.56577f, 0.54574f, 0.52594f, 0.50704f, 0.48812f, 0.46984f, 0.45179f, 0.43440f, 0.41775f, 0.40149f, 0.38649f, 0.37146f, 0.35737f, 0.34354f, 0.33020f, 0.31798f, 0.30606f, 0.29475f, 0.28330f, 0.27265f, 0.26226f, 0.25205f, 0.24262f, 0.23366f,
0.73110f, 0.71450f, 0.69314f, 0.67318f, 0.65409f, 0.63543f, 0.61665f, 0.59776f, 0.57875f, 0.56005f, 0.54142f, 0.52249f, 0.50438f, 0.48754f, 0.47040f, 0.45369f, 0.43725f, 0.42211f, 0.40702f, 0.39305f, 0.37945f, 0.36620f, 0.35338f, 0.34141f, 0.33004f, 0.31907f, 0.30846f, 0.29842f, 0.28818f, 0.27866f, 0.26919f, 0.26038f,
0.73750f, 0.72144f, 0.70116f, 0.68204f, 0.66379f, 0.64562f, 0.62792f, 0.61014f, 0.59193f, 0.57344f, 0.55536f, 0.53793f, 0.52063f, 0.50374f, 0.48732f, 0.47141f, 0.45633f, 0.44181f, 0.42730f, 0.41385f, 0.40059f, 0.38881f, 0.37643f, 0.36506f, 0.35431f, 0.34339f, 0.33324f, 0.32345f, 0.31425f, 0.30523f, 0.29632f, 0.28782f,
0.74339f, 0.72804f, 0.70892f, 0.69082f, 0.67367f, 0.65573f, 0.63826f, 0.62090f, 0.60355f, 0.58677f, 0.56971f, 0.55229f, 0.53567f, 0.51970f, 0.50407f, 0.48879f, 0.47446f, 0.46044f, 0.44710f, 0.43403f, 0.42174f, 0.41005f, 0.39844f, 0.38755f, 0.37756f, 0.36805f, 0.35846f, 0.34911f, 0.33962f, 0.33144f, 0.32300f, 0.31508f,
0.74973f, 0.73527f, 0.71668f, 0.69953f, 0.68291f, 0.66623f, 0.64940f, 0.63212f, 0.61545f, 0.59849f, 0.58226f, 0.56605f, 0.55034f, 0.53461f, 0.51974f, 0.50561f, 0.49191f, 0.47875f, 0.46632f, 0.45401f, 0.44209f, 0.43044f, 0.42005f, 0.40990f, 0.39997f, 0.39069f, 0.38171f, 0.37342f, 0.36523f, 0.35675f, 0.34897f, 0.34187f
};
CCL_NAMESPACE_END

View File

@ -2559,35 +2559,42 @@ void ToonBsdfNode::compile(OSLCompiler &compiler)
compiler.add(this, "node_toon_bsdf");
}
/* Velvet BSDF Closure */
/* Sheen BSDF Closure */
NODE_DEFINE(VelvetBsdfNode)
NODE_DEFINE(SheenBsdfNode)
{
NodeType *type = NodeType::add("velvet_bsdf", create, NodeType::SHADER);
NodeType *type = NodeType::add("sheen_bsdf", create, NodeType::SHADER);
SOCKET_IN_COLOR(color, "Color", make_float3(0.8f, 0.8f, 0.8f));
SOCKET_IN_NORMAL(normal, "Normal", zero_float3(), SocketType::LINK_NORMAL);
SOCKET_IN_FLOAT(surface_mix_weight, "SurfaceMixWeight", 0.0f, SocketType::SVM_INTERNAL);
SOCKET_IN_FLOAT(sigma, "Sigma", 1.0f);
SOCKET_IN_FLOAT(roughness, "Roughness", 1.0f);
static NodeEnum distribution_enum;
distribution_enum.insert("ashikhmin", CLOSURE_BSDF_ASHIKHMIN_VELVET_ID);
distribution_enum.insert("microfiber", CLOSURE_BSDF_SHEEN_ID);
SOCKET_ENUM(distribution, "Distribution", distribution_enum, CLOSURE_BSDF_SHEEN_ID);
SOCKET_OUT_CLOSURE(BSDF, "BSDF");
return type;
}
VelvetBsdfNode::VelvetBsdfNode() : BsdfNode(get_node_type())
SheenBsdfNode::SheenBsdfNode() : BsdfNode(get_node_type())
{
closure = CLOSURE_BSDF_ASHIKHMIN_VELVET_ID;
closure = CLOSURE_BSDF_SHEEN_ID;
}
void VelvetBsdfNode::compile(SVMCompiler &compiler)
void SheenBsdfNode::compile(SVMCompiler &compiler)
{
BsdfNode::compile(compiler, input("Sigma"), NULL);
closure = distribution;
BsdfNode::compile(compiler, input("Roughness"), NULL);
}
void VelvetBsdfNode::compile(OSLCompiler &compiler)
void SheenBsdfNode::compile(OSLCompiler &compiler)
{
compiler.add(this, "node_velvet_bsdf");
compiler.parameter(this, "distribution");
compiler.add(this, "node_sheen_bsdf");
}
/* Diffuse BSDF Closure */

View File

@ -584,11 +584,17 @@ class TransparentBsdfNode : public BsdfNode {
}
};
class VelvetBsdfNode : public BsdfNode {
class SheenBsdfNode : public BsdfNode {
public:
SHADER_NODE_CLASS(VelvetBsdfNode)
SHADER_NODE_CLASS(SheenBsdfNode)
NODE_SOCKET_API(float, sigma)
NODE_SOCKET_API(float, roughness)
NODE_SOCKET_API(ClosureType, distribution)
ClosureType get_closure_type()
{
return distribution;
}
};
class GlossyBsdfNode : public BsdfNode {

View File

@ -194,7 +194,7 @@ shader_node_categories = [
NodeItem("ShaderNodeBsdfRefraction", poll=object_eevee_cycles_shader_nodes_poll),
NodeItem("ShaderNodeBsdfGlass", poll=object_eevee_cycles_shader_nodes_poll),
NodeItem("ShaderNodeBsdfTranslucent", poll=object_eevee_cycles_shader_nodes_poll),
NodeItem("ShaderNodeBsdfVelvet", poll=object_cycles_shader_nodes_poll),
NodeItem("ShaderNodeBsdfSheen", poll=object_cycles_shader_nodes_poll),
NodeItem("ShaderNodeBsdfToon", poll=object_cycles_shader_nodes_poll),
NodeItem("ShaderNodeSubsurfaceScattering", poll=object_eevee_cycles_shader_nodes_poll),
NodeItem("ShaderNodeEmission", poll=eevee_cycles_shader_nodes_poll),

View File

@ -952,7 +952,7 @@ void BKE_nodetree_remove_layer_n(struct bNodeTree *ntree, struct Scene *scene, i
#define SH_NODE_BSDF_GLASS 134
#define SH_NODE_BSDF_TRANSLUCENT 137
#define SH_NODE_BSDF_TRANSPARENT 138
#define SH_NODE_BSDF_VELVET 139
#define SH_NODE_BSDF_SHEEN 139
#define SH_NODE_EMISSION 140
#define SH_NODE_NEW_GEOMETRY 141
#define SH_NODE_LIGHT_PATH 142

View File

@ -279,6 +279,23 @@ static void version_principled_transmission_roughness(bNodeTree *ntree)
}
}
/* Convert legacy Velvet BSDF nodes into the new Sheen BSDF node. */
static void version_replace_velvet_sheen_node(bNodeTree *ntree)
{
LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
if (node->type == SH_NODE_BSDF_SHEEN) {
STRNCPY(node->idname, "ShaderNodeBsdfSheen");
bNodeSocket *sigmaInput = nodeFindSocket(node, SOCK_IN, "Sigma");
if (sigmaInput != NULL) {
node->custom1 = SHD_SHEEN_ASHIKHMIN;
STRNCPY(sigmaInput->identifier, "Roughness");
STRNCPY(sigmaInput->name, "Roughness");
}
}
}
}
void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain)
{
if (!MAIN_VERSION_FILE_ATLEAST(bmain, 400, 1)) {
@ -387,6 +404,12 @@ void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain)
* \note Keep this message at the bottom of the function.
*/
{
FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
if (ntree->type == NTREE_SHADER) {
}
}
FOREACH_NODETREE_END;
/* Keep this block, even when empty. */
if (!DNA_struct_elem_find(fd->filesdna, "LightProbe", "int", "grid_bake_samples")) {
@ -427,10 +450,12 @@ void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain)
}
}
/* Remove Transmission Roughness from Principled BSDF. */
FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
if (ntree->type == NTREE_SHADER) {
/* Remove Transmission Roughness from Principled BSDF. */
version_principled_transmission_roughness(ntree);
/* Convert legacy Velvet BSDF nodes into the new Sheen BSDF node. */
version_replace_velvet_sheen_node(ntree);
}
}
FOREACH_NODETREE_END;

View File

@ -514,6 +514,7 @@ set(GLSL_SRC
shaders/material/gpu_shader_material_separate_xyz.glsl
shaders/material/gpu_shader_material_set.glsl
shaders/material/gpu_shader_material_shader_to_rgba.glsl
shaders/material/gpu_shader_material_sheen.glsl
shaders/material/gpu_shader_material_squeeze.glsl
shaders/material/gpu_shader_material_subsurface_scattering.glsl
shaders/material/gpu_shader_material_tangent.glsl
@ -538,7 +539,6 @@ set(GLSL_SRC
shaders/material/gpu_shader_material_vector_displacement.glsl
shaders/material/gpu_shader_material_vector_math.glsl
shaders/material/gpu_shader_material_vector_rotate.glsl
shaders/material/gpu_shader_material_velvet.glsl
shaders/material/gpu_shader_material_vertex_color.glsl
shaders/material/gpu_shader_material_volume_absorption.glsl
shaders/material/gpu_shader_material_volume_principled.glsl

View File

@ -1,5 +1,5 @@
void node_bsdf_velvet(vec4 color, float roughness, vec3 N, float weight, out Closure result)
void node_bsdf_sheen(vec4 color, float roughness, vec3 N, float weight, out Closure result)
{
N = safe_normalize(N);

View File

@ -1873,6 +1873,10 @@ enum {
SHD_GLOSSY_MULTI_GGX = 4,
};
/* sheen distributions */
#define SHD_SHEEN_ASHIKHMIN 0
#define SHD_SHEEN_MICROFIBER 1
/* vector transform */
enum {
SHD_VECT_TRANSFORM_TYPE_VECTOR = 0,

View File

@ -4512,6 +4512,16 @@ static const EnumPropertyItem node_refraction_items[] = {
{0, nullptr, 0, nullptr, nullptr},
};
static const EnumPropertyItem node_sheen_items[] = {
{SHD_SHEEN_ASHIKHMIN, "ASHIKHMIN", 0, "Ashikhmin", "Classic Ashikhmin velvet (legacy model)"},
{SHD_SHEEN_MICROFIBER,
"MICROFIBER",
0,
"Microfiber",
"Microflake-based model of multiple scattering between normal-oriented fibers"},
{0, NULL, 0, NULL, NULL},
};
static const EnumPropertyItem node_toon_items[] = {
{SHD_TOON_DIFFUSE, "DIFFUSE", 0, "Diffuse", "Use diffuse BSDF"},
{SHD_TOON_GLOSSY, "GLOSSY", 0, "Glossy", "Use glossy BSDF"},
@ -5985,6 +5995,17 @@ static void def_glass(StructRNA *srna)
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
}
static void def_sheen(StructRNA *srna)
{
PropertyRNA *prop;
prop = RNA_def_property(srna, "distribution", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "custom1");
RNA_def_property_enum_items(prop, node_sheen_items);
RNA_def_property_ui_text(prop, "Distribution", "Sheen shading model");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
}
static void def_principled(StructRNA *srna)
{
PropertyRNA *prop;

View File

@ -68,7 +68,7 @@ DefNode(ShaderNode, SH_NODE_BSDF_GLASS, def_glass, "BSD
DefNode(ShaderNode, SH_NODE_BSDF_REFRACTION, def_refraction, "BSDF_REFRACTION", BsdfRefraction, "Refraction BSDF", "Glossy refraction with sharp or microfacet distribution, typically used for materials that transmit light")
DefNode(ShaderNode, SH_NODE_BSDF_TRANSLUCENT, 0, "BSDF_TRANSLUCENT", BsdfTranslucent, "Translucent BSDF", "Lambertian diffuse transmission")
DefNode(ShaderNode, SH_NODE_BSDF_TRANSPARENT, 0, "BSDF_TRANSPARENT", BsdfTransparent, "Transparent BSDF", "Transparency without refraction, passing straight through the surface as if there were no geometry")
DefNode(ShaderNode, SH_NODE_BSDF_VELVET, 0, "BSDF_VELVET", BsdfVelvet, "Velvet BSDF", "Reflection for materials such as cloth.\nTypically mixed with other shaders (such as a Diffuse Shader) and is not particularly useful on its own")
DefNode(ShaderNode, SH_NODE_BSDF_SHEEN, def_sheen, "BSDF_SHEEN", BsdfSheen, "Sheen BSDF", "Reflection for materials such as cloth.\nTypically mixed with other shaders (such as a Diffuse Shader) and is not particularly useful on its own")
DefNode(ShaderNode, SH_NODE_BSDF_TOON, def_toon, "BSDF_TOON", BsdfToon, "Toon BSDF", "Diffuse and Glossy shaders with cartoon light effects")
DefNode(ShaderNode, SH_NODE_BSDF_HAIR, def_hair, "BSDF_HAIR", BsdfHair, "Hair BSDF", "Reflection and transmission shaders optimized for hair rendering")
DefNode(ShaderNode, SH_NODE_BSDF_HAIR_PRINCIPLED, def_hair_principled, "BSDF_HAIR_PRINCIPLED", BsdfHairPrincipled, "Principled Hair BSDF", "Physically-based, easy-to-use shader for rendering hair and fur")

View File

@ -33,10 +33,10 @@ set(SRC
nodes/node_shader_bsdf_hair_principled.cc
nodes/node_shader_bsdf_principled.cc
nodes/node_shader_bsdf_refraction.cc
nodes/node_shader_bsdf_sheen.cc
nodes/node_shader_bsdf_toon.cc
nodes/node_shader_bsdf_translucent.cc
nodes/node_shader_bsdf_transparent.cc
nodes/node_shader_bsdf_velvet.cc
nodes/node_shader_bump.cc
nodes/node_shader_camera.cc
nodes/node_shader_clamp.cc

View File

@ -29,7 +29,7 @@ void register_shader_nodes()
register_node_type_sh_bsdf_toon();
register_node_type_sh_bsdf_translucent();
register_node_type_sh_bsdf_transparent();
register_node_type_sh_bsdf_velvet();
register_node_type_sh_bsdf_sheen();
register_node_type_sh_bump();
register_node_type_sh_camera();
register_node_type_sh_clamp();

View File

@ -25,7 +25,7 @@ void register_node_type_sh_bsdf_refraction();
void register_node_type_sh_bsdf_toon();
void register_node_type_sh_bsdf_translucent();
void register_node_type_sh_bsdf_transparent();
void register_node_type_sh_bsdf_velvet();
void register_node_type_sh_bsdf_sheen();
void register_node_type_sh_bump();
void register_node_type_sh_camera();
void register_node_type_sh_clamp();

View File

@ -893,7 +893,7 @@ static void ntree_shader_weight_tree_invert(bNodeTree *ntree, bNode *output_node
case SH_NODE_BSDF_TOON:
case SH_NODE_BSDF_TRANSLUCENT:
case SH_NODE_BSDF_TRANSPARENT:
case SH_NODE_BSDF_VELVET:
case SH_NODE_BSDF_SHEEN:
case SH_NODE_EEVEE_SPECULAR:
case SH_NODE_EMISSION:
case SH_NODE_HOLDOUT:
@ -950,7 +950,7 @@ static bool closure_node_filter(const bNode *node)
case SH_NODE_BSDF_TOON:
case SH_NODE_BSDF_TRANSLUCENT:
case SH_NODE_BSDF_TRANSPARENT:
case SH_NODE_BSDF_VELVET:
case SH_NODE_BSDF_SHEEN:
case SH_NODE_EEVEE_SPECULAR:
case SH_NODE_EMISSION:
case SH_NODE_HOLDOUT:

View File

@ -0,0 +1,67 @@
/* SPDX-FileCopyrightText: 2005 Blender Foundation
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#include "node_shader_util.hh"
LukasStockner marked this conversation as resolved Outdated

Add this to fix build error when WITH_UNITY_BUILD=OFF.

#include "UI_interface.h"
#include "UI_resources.h"
Add this to fix build error when WITH_UNITY_BUILD=OFF. ``` #include "UI_interface.h" #include "UI_resources.h" ```
#include "UI_interface.h"
#include "UI_resources.h"
namespace blender::nodes::node_shader_bsdf_sheen_cc {
static void node_declare(NodeDeclarationBuilder &b)
{
b.add_input<decl::Color>("Color").default_value({0.8f, 0.8f, 0.8f, 1.0f});
b.add_input<decl::Float>("Roughness")
.default_value(0.5f)
.min(0.0f)
.max(1.0f)
.subtype(PROP_FACTOR);
b.add_input<decl::Vector>("Normal").hide_value();
b.add_input<decl::Float>("Weight").unavailable();
b.add_output<decl::Shader>("BSDF");
}
static void node_shader_buts_sheen(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr)
{
uiItemR(layout, ptr, "distribution", UI_ITEM_R_SPLIT_EMPTY_NAME, "", ICON_NONE);
}
static void node_shader_init_sheen(bNodeTree * /*ntree*/, bNode *node)
{
node->custom1 = SHD_SHEEN_MICROFIBER;
}
static int node_shader_gpu_bsdf_sheen(GPUMaterial *mat,
bNode *node,
bNodeExecData * /*execdata*/,
GPUNodeStack *in,
GPUNodeStack *out)
{
if (!in[2].link) {
GPU_link(mat, "world_normals_get", &in[2].link);
}
GPU_material_flag_set(mat, GPU_MATFLAG_DIFFUSE);
return GPU_stack_link(mat, node, "node_bsdf_sheen", in, out);
}
} // namespace blender::nodes::node_shader_bsdf_sheen_cc
/* node type definition */
void register_node_type_sh_bsdf_sheen()
{
namespace file_ns = blender::nodes::node_shader_bsdf_sheen_cc;
static bNodeType ntype;
sh_node_type_base(&ntype, SH_NODE_BSDF_SHEEN, "Sheen BSDF", NODE_CLASS_SHADER);
ntype.add_ui_poll = object_cycles_shader_nodes_poll;
ntype.declare = file_ns::node_declare;
ntype.initfunc = file_ns::node_shader_init_sheen;
ntype.gpu_fn = file_ns::node_shader_gpu_bsdf_sheen;
ntype.draw_buttons = file_ns::node_shader_buts_sheen;
nodeRegisterType(&ntype);
}

View File

@ -1,48 +0,0 @@
/* SPDX-FileCopyrightText: 2005 Blender Foundation
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#include "node_shader_util.hh"
namespace blender::nodes::node_shader_bsdf_velvet_cc {
static void node_declare(NodeDeclarationBuilder &b)
{
b.add_input<decl::Color>("Color").default_value({0.8f, 0.8f, 0.8f, 1.0f});
b.add_input<decl::Float>("Sigma").default_value(1.0f).min(0.0f).max(1.0f).subtype(PROP_FACTOR);
b.add_input<decl::Vector>("Normal").hide_value();
b.add_input<decl::Float>("Weight").unavailable();
b.add_output<decl::Shader>("BSDF");
}
static int node_shader_gpu_bsdf_velvet(GPUMaterial *mat,
bNode *node,
bNodeExecData * /*execdata*/,
GPUNodeStack *in,
GPUNodeStack *out)
{
if (!in[2].link) {
GPU_link(mat, "world_normals_get", &in[2].link);
}
GPU_material_flag_set(mat, GPU_MATFLAG_DIFFUSE);
return GPU_stack_link(mat, node, "node_bsdf_velvet", in, out);
}
} // namespace blender::nodes::node_shader_bsdf_velvet_cc
/* node type definition */
void register_node_type_sh_bsdf_velvet()
{
namespace file_ns = blender::nodes::node_shader_bsdf_velvet_cc;
static bNodeType ntype;
sh_node_type_base(&ntype, SH_NODE_BSDF_VELVET, "Velvet BSDF", NODE_CLASS_SHADER);
ntype.add_ui_poll = object_cycles_shader_nodes_poll;
ntype.declare = file_ns::node_declare;
ntype.gpu_fn = file_ns::node_shader_gpu_bsdf_velvet;
nodeRegisterType(&ntype);
}