forked from bartvdbraak/blender
Revert "Cycles: Remove the Preetham Sky model."
This reverts commit d91316dc672dc1ee69fbd24d2f00124a24b75c6b.
This commit is contained in:
parent
46aaa53998
commit
b8ca4819b2
@ -470,7 +470,8 @@ static void xml_read_shader_graph(const XMLReadState& state, Shader *shader, pug
|
||||
}
|
||||
else if(string_iequals(node.name(), "sky_texture")) {
|
||||
SkyTextureNode *sky = new SkyTextureNode();
|
||||
|
||||
|
||||
xml_read_enum(&sky->type, SkyTextureNode::type_enum, node, "type");
|
||||
xml_read_float3(&sky->sun_direction, node, "sun_direction");
|
||||
xml_read_float(&sky->turbidity, node, "turbidity");
|
||||
xml_read_float(&sky->ground_albedo, node, "ground_albedo");
|
||||
|
@ -833,6 +833,7 @@ static ShaderNode *add_node(Scene *scene,
|
||||
else if(b_node.is_a(&RNA_ShaderNodeTexSky)) {
|
||||
BL::ShaderNodeTexSky b_sky_node(b_node);
|
||||
SkyTextureNode *sky = new SkyTextureNode();
|
||||
sky->type = SkyTextureNode::type_enum[(int)b_sky_node.sky_type()];
|
||||
sky->sun_direction = normalize(get_float3(b_sky_node.sun_direction()));
|
||||
sky->turbidity = b_sky_node.turbidity();
|
||||
sky->ground_albedo = b_sky_node.ground_albedo();
|
||||
|
@ -34,6 +34,40 @@ vector sky_spherical_coordinates(vector dir)
|
||||
return vector(acos(dir[2]), atan2(dir[0], dir[1]), 0);
|
||||
}
|
||||
|
||||
/* Preetham */
|
||||
float sky_perez_function(float lam[9], float theta, float gamma)
|
||||
{
|
||||
float ctheta = cos(theta);
|
||||
float cgamma = cos(gamma);
|
||||
|
||||
return (1.0 + lam[0] * exp(lam[1] / ctheta)) * (1.0 + lam[2] * exp(lam[3] * gamma) + lam[4] * cgamma * cgamma);
|
||||
}
|
||||
|
||||
color sky_radiance_old(normal dir,
|
||||
float sunphi, float suntheta, color radiance,
|
||||
float config_x[9], float config_y[9], float config_z[9])
|
||||
{
|
||||
/* convert vector to spherical coordinates */
|
||||
vector spherical = sky_spherical_coordinates(dir);
|
||||
float theta = spherical[0];
|
||||
float phi = spherical[1];
|
||||
|
||||
/* angle between sun direction and dir */
|
||||
float gamma = sky_angle_between(theta, phi, suntheta, sunphi);
|
||||
|
||||
/* clamp theta to horizon */
|
||||
theta = min(theta, M_PI_2 - 0.001);
|
||||
|
||||
/* compute xyY color space values */
|
||||
float x = radiance[1] * sky_perez_function(config_y, theta, gamma);
|
||||
float y = radiance[2] * sky_perez_function(config_z, theta, gamma);
|
||||
float Y = radiance[0] * sky_perez_function(config_x, theta, gamma);
|
||||
|
||||
/* convert to RGB */
|
||||
color xyz = xyY_to_xyz(x, y, Y);
|
||||
return xyz_to_rgb(xyz[0], xyz[1], xyz[2]);
|
||||
}
|
||||
|
||||
/* Hosek / Wilkie */
|
||||
float sky_radiance_internal(float config[9], float theta, float gamma)
|
||||
{
|
||||
@ -49,9 +83,9 @@ float sky_radiance_internal(float config[9], float theta, float gamma)
|
||||
(config[2] + config[3] * expM + config[5] * rayM + config[6] * mieM + config[7] * zenith);
|
||||
}
|
||||
|
||||
color sky_radiance(normal dir,
|
||||
float sunphi, float suntheta, color radiance,
|
||||
float config_x[9], float config_y[9], float config_z[9])
|
||||
color sky_radiance_new(normal dir,
|
||||
float sunphi, float suntheta, color radiance,
|
||||
float config_x[9], float config_y[9], float config_z[9])
|
||||
{
|
||||
/* convert vector to spherical coordinates */
|
||||
vector spherical = sky_spherical_coordinates(dir);
|
||||
@ -77,6 +111,7 @@ shader node_sky_texture(
|
||||
int use_mapping = 0,
|
||||
matrix mapping = matrix(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||
vector Vector = P,
|
||||
string sky_model = "Hosek / Wilkie",
|
||||
float theta = 0.0,
|
||||
float phi = 0.0,
|
||||
color radiance = color(0.0, 0.0, 0.0),
|
||||
@ -89,7 +124,10 @@ shader node_sky_texture(
|
||||
|
||||
if (use_mapping)
|
||||
p = transform(mapping, p);
|
||||
|
||||
Color = sky_radiance(p, phi, theta, radiance, config_x, config_y, config_z);
|
||||
|
||||
if (sky_model == "Hosek / Wilkie")
|
||||
Color = sky_radiance_new(p, phi, theta, radiance, config_x, config_y, config_z);
|
||||
else
|
||||
Color = sky_radiance_old(p, phi, theta, radiance, config_x, config_y, config_z);
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,44 @@ ccl_device float sky_angle_between(float thetav, float phiv, float theta, float
|
||||
return safe_acosf(cospsi);
|
||||
}
|
||||
|
||||
/*
|
||||
* "A Practical Analytic Model for Daylight"
|
||||
* A. J. Preetham, Peter Shirley, Brian Smits
|
||||
*/
|
||||
ccl_device float sky_perez_function(float *lam, float theta, float gamma)
|
||||
{
|
||||
float ctheta = cosf(theta);
|
||||
float cgamma = cosf(gamma);
|
||||
|
||||
return (1.0f + lam[0]*expf(lam[1]/ctheta)) * (1.0f + lam[2]*expf(lam[3]*gamma) + lam[4]*cgamma*cgamma);
|
||||
}
|
||||
|
||||
ccl_device float3 sky_radiance_old(KernelGlobals *kg, float3 dir,
|
||||
float sunphi, float suntheta,
|
||||
float radiance_x, float radiance_y, float radiance_z,
|
||||
float *config_x, float *config_y, float *config_z)
|
||||
{
|
||||
/* convert vector to spherical coordinates */
|
||||
float2 spherical = direction_to_spherical(dir);
|
||||
float theta = spherical.x;
|
||||
float phi = spherical.y;
|
||||
|
||||
/* angle between sun direction and dir */
|
||||
float gamma = sky_angle_between(theta, phi, suntheta, sunphi);
|
||||
|
||||
/* clamp theta to horizon */
|
||||
theta = min(theta, M_PI_2_F - 0.001f);
|
||||
|
||||
/* compute xyY color space values */
|
||||
float x = radiance_y * sky_perez_function(config_y, theta, gamma);
|
||||
float y = radiance_z * sky_perez_function(config_z, theta, gamma);
|
||||
float Y = radiance_x * sky_perez_function(config_x, theta, gamma);
|
||||
|
||||
/* convert to RGB */
|
||||
float3 xyz = xyY_to_xyz(x, y, Y);
|
||||
return xyz_to_rgb(xyz.x, xyz.y, xyz.z);
|
||||
}
|
||||
|
||||
/*
|
||||
* "An Analytic Model for Full Spectral Sky-Dome Radiance"
|
||||
* Lukas Hosek, Alexander Wilkie
|
||||
@ -42,10 +80,10 @@ ccl_device float sky_radiance_internal(float *configuration, float theta, float
|
||||
(configuration[2] + configuration[3] * expM + configuration[5] * rayM + configuration[6] * mieM + configuration[7] * zenith);
|
||||
}
|
||||
|
||||
ccl_device float3 sky_radiance(KernelGlobals *kg, float3 dir,
|
||||
float sunphi, float suntheta,
|
||||
float radiance_x, float radiance_y, float radiance_z,
|
||||
float *config_x, float *config_y, float *config_z)
|
||||
ccl_device float3 sky_radiance_new(KernelGlobals *kg, float3 dir,
|
||||
float sunphi, float suntheta,
|
||||
float radiance_x, float radiance_y, float radiance_z,
|
||||
float *config_x, float *config_y, float *config_z)
|
||||
{
|
||||
/* convert vector to spherical coordinates */
|
||||
float2 spherical = direction_to_spherical(dir);
|
||||
@ -76,6 +114,7 @@ ccl_device void svm_node_tex_sky(KernelGlobals *kg, ShaderData *sd, float *stack
|
||||
/* Load data */
|
||||
uint dir_offset = node.y;
|
||||
uint out_offset = node.z;
|
||||
int sky_model = node.w;
|
||||
|
||||
float4 data = read_node_float(kg, offset);
|
||||
sunphi = data.x;
|
||||
@ -129,9 +168,16 @@ ccl_device void svm_node_tex_sky(KernelGlobals *kg, ShaderData *sd, float *stack
|
||||
float3 f;
|
||||
|
||||
/* Compute Sky */
|
||||
f = sky_radiance(kg, dir, sunphi, suntheta,
|
||||
radiance_x, radiance_y, radiance_z,
|
||||
config_x, config_y, config_z);
|
||||
if(sky_model == 0) {
|
||||
f = sky_radiance_old(kg, dir, sunphi, suntheta,
|
||||
radiance_x, radiance_y, radiance_z,
|
||||
config_x, config_y, config_z);
|
||||
}
|
||||
else {
|
||||
f = sky_radiance_new(kg, dir, sunphi, suntheta,
|
||||
radiance_x, radiance_y, radiance_z,
|
||||
config_x, config_y, config_z);
|
||||
}
|
||||
|
||||
stack_store_float3(stack, out_offset, f);
|
||||
}
|
||||
|
@ -299,6 +299,11 @@ typedef enum NodeWaveProfiles {
|
||||
NODE_WAVE_PROFILE_SAW,
|
||||
} NodeWaveProfile;
|
||||
|
||||
typedef enum NodeSkyType {
|
||||
NODE_SKY_OLD,
|
||||
NODE_SKY_NEW
|
||||
} NodeSkyType;
|
||||
|
||||
typedef enum NodeGradientType {
|
||||
NODE_BLEND_LINEAR,
|
||||
NODE_BLEND_QUADRATIC,
|
||||
|
@ -591,8 +591,78 @@ typedef struct SunSky {
|
||||
float config_x[9], config_y[9], config_z[9];
|
||||
} SunSky;
|
||||
|
||||
/* Preetham model */
|
||||
static float sky_perez_function(float lam[6], float theta, float gamma)
|
||||
{
|
||||
return (1.0f + lam[0]*expf(lam[1]/cosf(theta))) * (1.0f + lam[2]*expf(lam[3]*gamma) + lam[4]*cosf(gamma)*cosf(gamma));
|
||||
}
|
||||
|
||||
static void sky_texture_precompute_old(SunSky *sunsky, float3 dir, float turbidity)
|
||||
{
|
||||
/*
|
||||
* We re-use the SunSky struct of the new model, to avoid extra variables
|
||||
* zenith_Y/x/y is now radiance_x/y/z
|
||||
* perez_Y/x/y is now config_x/y/z
|
||||
*/
|
||||
|
||||
float2 spherical = sky_spherical_coordinates(dir);
|
||||
float theta = spherical.x;
|
||||
float phi = spherical.y;
|
||||
|
||||
sunsky->theta = theta;
|
||||
sunsky->phi = phi;
|
||||
|
||||
float theta2 = theta*theta;
|
||||
float theta3 = theta2*theta;
|
||||
float T = turbidity;
|
||||
float T2 = T * T;
|
||||
|
||||
float chi = (4.0f / 9.0f - T / 120.0f) * (M_PI_F - 2.0f * theta);
|
||||
sunsky->radiance_x = (4.0453f * T - 4.9710f) * tanf(chi) - 0.2155f * T + 2.4192f;
|
||||
sunsky->radiance_x *= 0.06f;
|
||||
|
||||
sunsky->radiance_y =
|
||||
(0.00166f * theta3 - 0.00375f * theta2 + 0.00209f * theta) * T2 +
|
||||
(-0.02903f * theta3 + 0.06377f * theta2 - 0.03202f * theta + 0.00394f) * T +
|
||||
(0.11693f * theta3 - 0.21196f * theta2 + 0.06052f * theta + 0.25886f);
|
||||
|
||||
sunsky->radiance_z =
|
||||
(0.00275f * theta3 - 0.00610f * theta2 + 0.00317f * theta) * T2 +
|
||||
(-0.04214f * theta3 + 0.08970f * theta2 - 0.04153f * theta + 0.00516f) * T +
|
||||
(0.15346f * theta3 - 0.26756f * theta2 + 0.06670f * theta + 0.26688f);
|
||||
|
||||
sunsky->config_x[0] = (0.1787f * T - 1.4630f);
|
||||
sunsky->config_x[1] = (-0.3554f * T + 0.4275f);
|
||||
sunsky->config_x[2] = (-0.0227f * T + 5.3251f);
|
||||
sunsky->config_x[3] = (0.1206f * T - 2.5771f);
|
||||
sunsky->config_x[4] = (-0.0670f * T + 0.3703f);
|
||||
|
||||
sunsky->config_y[0] = (-0.0193f * T - 0.2592f);
|
||||
sunsky->config_y[1] = (-0.0665f * T + 0.0008f);
|
||||
sunsky->config_y[2] = (-0.0004f * T + 0.2125f);
|
||||
sunsky->config_y[3] = (-0.0641f * T - 0.8989f);
|
||||
sunsky->config_y[4] = (-0.0033f * T + 0.0452f);
|
||||
|
||||
sunsky->config_z[0] = (-0.0167f * T - 0.2608f);
|
||||
sunsky->config_z[1] = (-0.0950f * T + 0.0092f);
|
||||
sunsky->config_z[2] = (-0.0079f * T + 0.2102f);
|
||||
sunsky->config_z[3] = (-0.0441f * T - 1.6537f);
|
||||
sunsky->config_z[4] = (-0.0109f * T + 0.0529f);
|
||||
|
||||
/* unused for old sky model */
|
||||
for(int i = 5; i < 9; i++) {
|
||||
sunsky->config_x[i] = 0.0f;
|
||||
sunsky->config_y[i] = 0.0f;
|
||||
sunsky->config_z[i] = 0.0f;
|
||||
}
|
||||
|
||||
sunsky->radiance_x /= sky_perez_function(sunsky->config_x, 0, theta);
|
||||
sunsky->radiance_y /= sky_perez_function(sunsky->config_y, 0, theta);
|
||||
sunsky->radiance_z /= sky_perez_function(sunsky->config_z, 0, theta);
|
||||
}
|
||||
|
||||
/* Hosek / Wilkie */
|
||||
static void sky_texture_precompute(SunSky *sunsky, float3 dir, float turbidity, float ground_albedo)
|
||||
static void sky_texture_precompute_new(SunSky *sunsky, float3 dir, float turbidity, float ground_albedo)
|
||||
{
|
||||
/* Calculate Sun Direction and save coordinates */
|
||||
float2 spherical = sky_spherical_coordinates(dir);
|
||||
@ -628,9 +698,23 @@ static void sky_texture_precompute(SunSky *sunsky, float3 dir, float turbidity,
|
||||
arhosekskymodelstate_free(sky_state);
|
||||
}
|
||||
|
||||
static ShaderEnum sky_type_init()
|
||||
{
|
||||
ShaderEnum enm;
|
||||
|
||||
enm.insert("Preetham", NODE_SKY_OLD);
|
||||
enm.insert("Hosek / Wilkie", NODE_SKY_NEW);
|
||||
|
||||
return enm;
|
||||
}
|
||||
|
||||
ShaderEnum SkyTextureNode::type_enum = sky_type_init();
|
||||
|
||||
SkyTextureNode::SkyTextureNode()
|
||||
: TextureNode("sky_texture")
|
||||
{
|
||||
type = ustring("Hosek / Wilkie");
|
||||
|
||||
sun_direction = make_float3(0.0f, 0.0f, 1.0f);
|
||||
turbidity = 2.2f;
|
||||
ground_albedo = 0.3f;
|
||||
@ -645,12 +729,18 @@ void SkyTextureNode::compile(SVMCompiler& compiler)
|
||||
ShaderOutput *color_out = output("Color");
|
||||
|
||||
SunSky sunsky;
|
||||
sky_texture_precompute(&sunsky, sun_direction, turbidity, ground_albedo);
|
||||
if(type_enum[type] == NODE_SKY_OLD)
|
||||
sky_texture_precompute_old(&sunsky, sun_direction, turbidity);
|
||||
else if(type_enum[type] == NODE_SKY_NEW)
|
||||
sky_texture_precompute_new(&sunsky, sun_direction, turbidity, ground_albedo);
|
||||
else
|
||||
assert(false);
|
||||
|
||||
if(vector_in->link)
|
||||
compiler.stack_assign(vector_in);
|
||||
|
||||
int vector_offset = vector_in->stack_offset;
|
||||
int sky_model = type_enum[type];
|
||||
|
||||
if(!tex_mapping.skip()) {
|
||||
vector_offset = compiler.stack_find_offset(SHADER_SOCKET_VECTOR);
|
||||
@ -658,7 +748,7 @@ void SkyTextureNode::compile(SVMCompiler& compiler)
|
||||
}
|
||||
|
||||
compiler.stack_assign(color_out);
|
||||
compiler.add_node(NODE_TEX_SKY, vector_offset, color_out->stack_offset);
|
||||
compiler.add_node(NODE_TEX_SKY, vector_offset, color_out->stack_offset, sky_model);
|
||||
compiler.add_node(__float_as_uint(sunsky.phi), __float_as_uint(sunsky.theta), __float_as_uint(sunsky.radiance_x), __float_as_uint(sunsky.radiance_y));
|
||||
compiler.add_node(__float_as_uint(sunsky.radiance_z), __float_as_uint(sunsky.config_x[0]), __float_as_uint(sunsky.config_x[1]), __float_as_uint(sunsky.config_x[2]));
|
||||
compiler.add_node(__float_as_uint(sunsky.config_x[3]), __float_as_uint(sunsky.config_x[4]), __float_as_uint(sunsky.config_x[5]), __float_as_uint(sunsky.config_x[6]));
|
||||
@ -677,8 +767,15 @@ void SkyTextureNode::compile(OSLCompiler& compiler)
|
||||
tex_mapping.compile(compiler);
|
||||
|
||||
SunSky sunsky;
|
||||
sky_texture_precompute(&sunsky, sun_direction, turbidity, ground_albedo);
|
||||
|
||||
if(type_enum[type] == NODE_SKY_OLD)
|
||||
sky_texture_precompute_old(&sunsky, sun_direction, turbidity);
|
||||
else if(type_enum[type] == NODE_SKY_NEW)
|
||||
sky_texture_precompute_new(&sunsky, sun_direction, turbidity, ground_albedo);
|
||||
else
|
||||
assert(false);
|
||||
|
||||
compiler.parameter("sky_model", type);
|
||||
compiler.parameter("theta", sunsky.theta);
|
||||
compiler.parameter("phi", sunsky.phi);
|
||||
compiler.parameter_color("radiance", make_float3(sunsky.radiance_x, sunsky.radiance_y, sunsky.radiance_z));
|
||||
|
@ -184,12 +184,16 @@ public:
|
||||
float turbidity;
|
||||
float ground_albedo;
|
||||
|
||||
ustring type;
|
||||
static ShaderEnum type_enum;
|
||||
|
||||
virtual bool equals(const ShaderNode *other) {
|
||||
const SkyTextureNode *sky_node = (const SkyTextureNode*)other;
|
||||
return TextureNode::equals(other) &&
|
||||
sun_direction == sky_node->sun_direction &&
|
||||
turbidity == sky_node->turbidity &&
|
||||
ground_albedo == sky_node->ground_albedo;
|
||||
ground_albedo == sky_node->ground_albedo &&
|
||||
type == sky_node->type;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -910,9 +910,12 @@ static void node_shader_buts_tex_environment_ex(uiLayout *layout, bContext *C, P
|
||||
|
||||
static void node_shader_buts_tex_sky(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
||||
{
|
||||
uiItemR(layout, ptr, "sky_type", 0, "", ICON_NONE);
|
||||
uiItemR(layout, ptr, "sun_direction", 0, "", ICON_NONE);
|
||||
uiItemR(layout, ptr, "turbidity", 0, NULL, ICON_NONE);
|
||||
uiItemR(layout, ptr, "ground_albedo", 0, NULL, ICON_NONE);
|
||||
|
||||
if (RNA_enum_get(ptr, "sky_type") == SHD_SKY_NEW)
|
||||
uiItemR(layout, ptr, "ground_albedo", 0, NULL, ICON_NONE);
|
||||
}
|
||||
|
||||
static void node_shader_buts_tex_gradient(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
||||
|
@ -718,10 +718,10 @@ typedef struct NodeTexBase {
|
||||
|
||||
typedef struct NodeTexSky {
|
||||
NodeTexBase base;
|
||||
int sky_model;
|
||||
float sun_direction[3];
|
||||
float turbidity;
|
||||
float ground_albedo;
|
||||
int pad;
|
||||
} NodeTexSky;
|
||||
|
||||
typedef struct NodeTexImage {
|
||||
@ -977,6 +977,10 @@ typedef struct NodeSunBeams {
|
||||
#define SHD_WAVE_PROFILE_SIN 0
|
||||
#define SHD_WAVE_PROFILE_SAW 1
|
||||
|
||||
/* sky texture */
|
||||
#define SHD_SKY_OLD 0
|
||||
#define SHD_SKY_NEW 1
|
||||
|
||||
/* image/environment texture */
|
||||
#define SHD_COLORSPACE_NONE 0
|
||||
#define SHD_COLORSPACE_COLOR 1
|
||||
|
@ -3599,25 +3599,36 @@ static void def_sh_tex(StructRNA *srna)
|
||||
|
||||
static void def_sh_tex_sky(StructRNA *srna)
|
||||
{
|
||||
static EnumPropertyItem prop_sky_type[] = {
|
||||
{SHD_SKY_OLD, "PREETHAM", 0, "Preetham", ""},
|
||||
{SHD_SKY_NEW, "HOSEK_WILKIE", 0, "Hosek / Wilkie", ""},
|
||||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
static float default_dir[3] = {0.0f, 0.0f, 1.0f};
|
||||
|
||||
|
||||
PropertyRNA *prop;
|
||||
|
||||
|
||||
RNA_def_struct_sdna_from(srna, "NodeTexSky", "storage");
|
||||
def_sh_tex(srna);
|
||||
|
||||
prop = RNA_def_property(srna, "sky_type", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_sdna(prop, NULL, "sky_model");
|
||||
RNA_def_property_enum_items(prop, prop_sky_type);
|
||||
RNA_def_property_ui_text(prop, "Sky Type", "");
|
||||
RNA_def_property_update(prop, 0, "rna_Node_update");
|
||||
|
||||
prop = RNA_def_property(srna, "sun_direction", PROP_FLOAT, PROP_DIRECTION);
|
||||
RNA_def_property_ui_text(prop, "Sun Direction", "Direction from where the sun is shining");
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_float_array_default(prop, default_dir);
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
|
||||
|
||||
prop = RNA_def_property(srna, "turbidity", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_range(prop, 1.0f, 10.0f);
|
||||
RNA_def_property_ui_range(prop, 1.0f, 10.0f, 10, 3);
|
||||
RNA_def_property_ui_text(prop, "Turbidity", "Atmospheric turbidity");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
|
||||
|
||||
prop = RNA_def_property(srna, "ground_albedo", PROP_FLOAT, PROP_FACTOR);
|
||||
RNA_def_property_range(prop, 0.0f, 1.0f);
|
||||
RNA_def_property_ui_text(prop, "Ground Albedo", "Ground color that is subtly reflected in the sky");
|
||||
|
@ -49,6 +49,7 @@ static void node_shader_init_tex_sky(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
tex->sun_direction[2] = 1.0f;
|
||||
tex->turbidity = 2.2f;
|
||||
tex->ground_albedo = 0.3f;
|
||||
tex->sky_model = SHD_SKY_NEW;
|
||||
|
||||
node->storage = tex;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user