47 uiItemL(layout,
RPT_(
"Sun disc not available in EEVEE"), ICON_ERROR);
76 tex->sun_direction[0] = 0.0f;
77 tex->sun_direction[1] = 0.0f;
78 tex->sun_direction[2] = 1.0f;
79 tex->turbidity = 2.2f;
80 tex->ground_albedo = 0.3f;
83 tex->sun_intensity = 1.0f;
85 tex->sun_rotation = 0.0f;
87 tex->air_density = 1.0f;
88 tex->dust_density = 1.0f;
89 tex->ozone_density = 1.0f;
101 float ctheta =
cosf(theta);
102 float cgamma =
cosf(gamma);
104 return (1.0 + lam[0] *
expf(lam[1] / ctheta)) *
105 (1.0 + lam[2] *
expf(lam[3] * gamma) + lam[4] * cgamma * cgamma);
110 float theta = sun_angles[0];
111 float theta2 = theta * theta;
112 float theta3 = theta2 * theta;
115 float chi = (4.0f / 9.0f - T / 120.0f) * (
M_PI - 2.0f * theta);
117 sunsky->
radiance[0] = (4.0453f * T - 4.9710f) *
tanf(chi) - 0.2155f * T + 2.4192f;
120 sunsky->
radiance[1] = (0.00166f * theta3 - 0.00375f * theta2 + 0.00209f * theta) *
T2 +
121 (-0.02903f * theta3 + 0.06377f * theta2 - 0.03202f * theta + 0.00394f) *
123 (0.11693f * theta3 - 0.21196f * theta2 + 0.06052f * theta + 0.25886f);
125 sunsky->
radiance[2] = (0.00275f * theta3 - 0.00610f * theta2 + 0.00317f * theta) *
T2 +
126 (-0.04214f * theta3 + 0.08970f * theta2 - 0.04153f * theta + 0.00516f) *
128 (0.15346f * theta3 - 0.26756f * theta2 + 0.06670f * theta + 0.26688f);
130 sunsky->
config_Y[0] = (0.1787f * T - 1.4630f);
131 sunsky->
config_Y[1] = (-0.3554f * T + 0.4275f);
132 sunsky->
config_Y[2] = (-0.0227f * T + 5.3251f);
133 sunsky->
config_Y[3] = (0.1206f * T - 2.5771f);
134 sunsky->
config_Y[4] = (-0.0670f * T + 0.3703f);
136 sunsky->
config_x[0] = (-0.0193f * T - 0.2592f);
137 sunsky->
config_x[1] = (-0.0665f * T + 0.0008f);
138 sunsky->
config_x[2] = (-0.0004f * T + 0.2125f);
139 sunsky->
config_x[3] = (-0.0641f * T - 0.8989f);
140 sunsky->
config_x[4] = (-0.0033f * T + 0.0452f);
142 sunsky->
config_y[0] = (-0.0167f * T - 0.2608f);
143 sunsky->
config_y[1] = (-0.0950f * T + 0.0092f);
144 sunsky->
config_y[2] = (-0.0079f * T + 0.2102f);
145 sunsky->
config_y[3] = (-0.0441f * T - 1.6537f);
146 sunsky->
config_y[4] = (-0.0109f * T + 0.0529f);
163 sun_angles[0] =
acosf(
tex->sun_direction[2]);
164 sun_angles[1] =
atan2f(
tex->sun_direction[0],
tex->sun_direction[1]);
166 if (
tex->sky_model == 0) {
174 "node_tex_sky_preetham",
190 else if (
tex->sky_model == 1) {
192 sun_angles[0] = fmin(
M_PI_2, sun_angles[0]);
194 tex->turbidity,
tex->ground_albedo, fmax(0.0,
M_PI_2 - sun_angles[0]));
196 float config_x07[8], config_y07[8], config_z07[8], config_xyz8[3];
197 for (
int i = 0; i < 8; ++i) {
202 for (
int i = 0; i < 3; ++i) {
206 for (
int i = 0; i < 3; i++) {
214 "node_tex_sky_hosekwilkie",
239 range.one_after_last(),
249 float sun_rotation =
fmodf(
tex->sun_rotation, 2.0f *
M_PI);
250 if (sun_rotation < 0.0f) {
251 sun_rotation += 2.0f *
M_PI;
253 sun_rotation = 2.0f *
M_PI - sun_rotation;
267 "node_tex_sky_nishita",
285 ntree, sockVector, !(
tex->sky_model == 2 &&
tex->sun_disc == 1));
295 if (
params.node_tree().typeinfo->validate_link(
301 tex->sun_disc =
false;
302 params.update_and_connect_available_socket(node,
"Vector");
317 ntype.
declare = file_ns::node_declare;
320 ntype.
initfunc = file_ns::node_shader_init_tex_sky;
323 ntype.
gpu_fn = file_ns::node_shader_gpu_tex_sky;
325 ntype.
updatefunc = file_ns::node_shader_update_sky;
Scene * CTX_data_scene(const bContext *C)
#define NODE_CLASS_TEXTURE
bool BKE_scene_uses_blender_eevee(const Scene *scene)
void BKE_texture_mapping_default(struct TexMapping *texmap, int type)
void BKE_texture_colormapping_default(struct ColorMapping *colormap)
bool GPU_stack_link(GPUMaterial *mat, const bNode *node, const char *name, GPUNodeStack *in, GPUNodeStack *out,...)
GPUNodeLink * GPU_constant(const float *num)
GPUNodeLink * GPU_image_sky(GPUMaterial *mat, int width, int height, const float *pixels, float *layer, GPUSamplerState sampler_state)
GPUNodeLink * GPU_uniform(const float *num)
@ GPU_SAMPLER_EXTEND_MODE_REPEAT
@ GPU_SAMPLER_EXTEND_MODE_EXTEND
@ GPU_SAMPLER_FILTERING_LINEAR
void uiItemL(uiLayout *layout, const char *name, int icon)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
void uiItemR(uiLayout *layout, PointerRNA *ptr, const char *propname, eUI_Item_Flag flag, const char *name, int icon)
@ UI_ITEM_R_SPLIT_EMPTY_NAME
Vector< SocketDeclaration * > outputs
local_group_size(16, 16) .push_constant(Type local_group_size(16, 16) .push_constant(Type input_tx sampler(1, ImageType::FLOAT_2D, "matte_tx") .image(0
local_group_size(16, 16) .push_constant(Type b
draw_view in_light_buf[] float
void node_type_size_preset(bNodeType *ntype, eNodeSizePreset size)
void node_set_socket_availability(bNodeTree *ntree, bNodeSocket *sock, bool is_available)
void node_type_storage(bNodeType *ntype, const char *storagename, void(*freefunc)(bNode *node), void(*copyfunc)(bNodeTree *dest_ntree, bNode *dest_node, const bNode *src_node))
void node_register_type(bNodeType *ntype)
bNodeSocket * node_find_socket(bNode *node, eNodeSocketInOut in_out, StringRef identifier)
static void node_gather_link_searches(GatherLinkSearchOpParams ¶ms)
static void sky_precompute_old(SkyModelPreetham *sunsky, const float sun_angles[], float turbidity)
static void node_shader_init_tex_sky(bNodeTree *, bNode *node)
static int node_shader_gpu_tex_sky(GPUMaterial *mat, bNode *node, bNodeExecData *, GPUNodeStack *in, GPUNodeStack *out)
static void node_shader_update_sky(bNodeTree *ntree, bNode *node)
static float sky_perez_function(const float *lam, float theta, float gamma)
static void node_declare(NodeDeclarationBuilder &b)
static void node_shader_buts_tex_sky(uiLayout *layout, bContext *C, PointerRNA *ptr)
void search_link_ops_for_declarations(GatherLinkSearchOpParams ¶ms, Span< SocketDeclaration * > declarations)
void parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))
color xyz_to_rgb(float x, float y, float z)
void register_node_type_sh_tex_sky()
void sh_node_type_base(blender::bke::bNodeType *ntype, int type, const char *name, short nclass)
void node_shader_gpu_tex_mapping(GPUMaterial *mat, bNode *node, GPUNodeStack *in, GPUNodeStack *)
void node_shader_gpu_default_tex_coord(GPUMaterial *mat, bNode *node, GPUNodeLink **link)
void get_XYZ_to_RGB_for_gpu(XYZ_to_RGB *data)
void node_free_standard_storage(bNode *node)
void node_copy_standard_storage(bNodeTree *, bNode *dest_node, const bNode *src_node)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
void SKY_arhosekskymodelstate_free(SKY_ArHosekSkyModelState *state)
SKY_ArHosekSkyModelState * SKY_arhosek_xyz_skymodelstate_alloc_init(const double turbidity, const double albedo, const double elevation)
void SKY_nishita_skymodel_precompute_texture(float *pixels, int stride, int start_y, int end_y, int width, int height, float sun_elevation, float altitude, float air_density, float dust_density, float ozone_density)
SKY_ArHosekSkyModelConfiguration configs[11]
void(* initfunc)(bNodeTree *ntree, bNode *node)
NodeGPUExecFunction gpu_fn
void(* draw_buttons)(uiLayout *, bContext *C, PointerRNA *ptr)
NodeGatherSocketLinkOperationsFunction gather_link_search_ops
NodeDeclareFunction declare
void(* updatefunc)(bNodeTree *ntree, bNode *node)