280 BL::RenderEngine &b_engine,
281 BL::BlendData &b_data,
282 BL::Depsgraph &b_depsgraph,
285 BL::ShaderNodeTree &b_ntree,
286 BL::ShaderNode &b_node)
291 if (b_node.is_a(&RNA_ShaderNodeRGBCurve)) {
292 BL::ShaderNodeRGBCurve b_curve_node(b_node);
293 BL::CurveMapping mapping(b_curve_node.mapping());
299 curves->set_min_x(min_x);
300 curves->set_max_x(max_x);
301 curves->set_curves(curve_mapping_curves);
302 curves->set_extrapolate(mapping.extend() == mapping.extend_EXTRAPOLATED);
305 if (b_node.is_a(&RNA_ShaderNodeVectorCurve)) {
306 BL::ShaderNodeVectorCurve b_curve_node(b_node);
307 BL::CurveMapping mapping(b_curve_node.mapping());
313 curves->set_min_x(min_x);
314 curves->set_max_x(max_x);
315 curves->set_curves(curve_mapping_curves);
316 curves->set_extrapolate(mapping.extend() == mapping.extend_EXTRAPOLATED);
319 else if (b_node.is_a(&RNA_ShaderNodeFloatCurve)) {
320 BL::ShaderNodeFloatCurve b_curve_node(b_node);
321 BL::CurveMapping mapping(b_curve_node.mapping());
327 curve->set_min_x(min_x);
328 curve->set_max_x(max_x);
329 curve->set_curve(curve_mapping_curve);
330 curve->set_extrapolate(mapping.extend() == mapping.extend_EXTRAPOLATED);
333 else if (b_node.is_a(&RNA_ShaderNodeValToRGB)) {
335 BL::ShaderNodeValToRGB b_ramp_node(b_node);
336 BL::ColorRamp b_color_ramp(b_ramp_node.color_ramp());
340 ramp->set_ramp(ramp_values);
341 ramp->set_ramp_alpha(ramp_alpha);
342 ramp->set_interpolate(b_color_ramp.interpolation() != BL::ColorRamp::interpolation_CONSTANT);
345 else if (b_node.is_a(&RNA_ShaderNodeRGB)) {
350 else if (b_node.is_a(&RNA_ShaderNodeValue)) {
355 else if (b_node.is_a(&RNA_ShaderNodeCameraData)) {
358 else if (b_node.is_a(&RNA_ShaderNodeInvert)) {
361 else if (b_node.is_a(&RNA_ShaderNodeGamma)) {
364 else if (b_node.is_a(&RNA_ShaderNodeBrightContrast)) {
367 else if (b_node.is_a(&RNA_ShaderNodeMixRGB)) {
368 BL::ShaderNodeMixRGB b_mix_node(b_node);
370 mix->set_mix_type((
NodeMix)b_mix_node.blend_type());
371 mix->set_use_clamp(b_mix_node.use_clamp());
374 else if (b_node.is_a(&RNA_ShaderNodeMix)) {
375 BL::ShaderNodeMix b_mix_node(b_node);
376 if (b_mix_node.data_type() == BL::ShaderNodeMix::data_type_VECTOR) {
377 if (b_mix_node.factor_mode() == BL::ShaderNodeMix::factor_mode_UNIFORM) {
379 mix_node->set_use_clamp(b_mix_node.clamp_factor());
384 mix_node->set_use_clamp(b_mix_node.clamp_factor());
388 else if (b_mix_node.data_type() == BL::ShaderNodeMix::data_type_RGBA) {
390 mix_node->set_blend_type((
NodeMix)b_mix_node.blend_type());
391 mix_node->set_use_clamp(b_mix_node.clamp_factor());
392 mix_node->set_use_clamp_result(b_mix_node.clamp_result());
397 mix_node->set_use_clamp(b_mix_node.clamp_factor());
401 else if (b_node.is_a(&RNA_ShaderNodeSeparateRGB)) {
404 else if (b_node.is_a(&RNA_ShaderNodeCombineRGB)) {
407 else if (b_node.is_a(&RNA_ShaderNodeSeparateHSV)) {
410 else if (b_node.is_a(&RNA_ShaderNodeCombineHSV)) {
413 else if (b_node.is_a(&RNA_ShaderNodeSeparateColor)) {
414 BL::ShaderNodeSeparateColor b_separate_node(b_node);
417 node = separate_node;
419 else if (b_node.is_a(&RNA_ShaderNodeCombineColor)) {
420 BL::ShaderNodeCombineColor b_combine_node(b_node);
425 else if (b_node.is_a(&RNA_ShaderNodeSeparateXYZ)) {
428 else if (b_node.is_a(&RNA_ShaderNodeCombineXYZ)) {
431 else if (b_node.is_a(&RNA_ShaderNodeHueSaturation)) {
432 node = graph->create_node<
HSVNode>();
434 else if (b_node.is_a(&RNA_ShaderNodeRGBToBW)) {
437 else if (b_node.is_a(&RNA_ShaderNodeMapRange)) {
438 BL::ShaderNodeMapRange b_map_range_node(b_node);
439 if (b_map_range_node.data_type() == BL::ShaderNodeMapRange::data_type_FLOAT_VECTOR) {
441 vector_map_range_node->set_use_clamp(b_map_range_node.clamp());
442 vector_map_range_node->set_range_type(
444 node = vector_map_range_node;
448 map_range_node->set_clamp(b_map_range_node.clamp());
449 map_range_node->set_range_type((
NodeMapRangeType)b_map_range_node.interpolation_type());
450 node = map_range_node;
453 else if (b_node.is_a(&RNA_ShaderNodeClamp)) {
454 BL::ShaderNodeClamp b_clamp_node(b_node);
456 clamp_node->set_clamp_type((
NodeClampType)b_clamp_node.clamp_type());
459 else if (b_node.is_a(&RNA_ShaderNodeMath)) {
460 BL::ShaderNodeMath b_math_node(b_node);
462 math_node->set_math_type((
NodeMathType)b_math_node.operation());
463 math_node->set_use_clamp(b_math_node.use_clamp());
466 else if (b_node.is_a(&RNA_ShaderNodeVectorMath)) {
467 BL::ShaderNodeVectorMath b_vector_math_node(b_node);
470 node = vector_math_node;
472 else if (b_node.is_a(&RNA_ShaderNodeVectorRotate)) {
473 BL::ShaderNodeVectorRotate b_vector_rotate_node(b_node);
475 vector_rotate_node->set_rotate_type(
477 vector_rotate_node->set_invert(b_vector_rotate_node.invert());
478 node = vector_rotate_node;
480 else if (b_node.is_a(&RNA_ShaderNodeVectorTransform)) {
481 BL::ShaderNodeVectorTransform b_vector_transform_node(b_node);
484 vtransform->set_convert_from(
486 vtransform->set_convert_to(
490 else if (b_node.is_a(&RNA_ShaderNodeNormal)) {
491 BL::Node::outputs_iterator out_it;
498 else if (b_node.is_a(&RNA_ShaderNodeMapping)) {
499 BL::ShaderNodeMapping b_mapping_node(b_node);
501 mapping->set_mapping_type((
NodeMappingType)b_mapping_node.vector_type());
504 else if (b_node.is_a(&RNA_ShaderNodeFresnel)) {
507 else if (b_node.is_a(&RNA_ShaderNodeLayerWeight)) {
510 else if (b_node.is_a(&RNA_ShaderNodeAddShader)) {
513 else if (b_node.is_a(&RNA_ShaderNodeMixShader)) {
516 else if (b_node.is_a(&RNA_ShaderNodeAttribute)) {
517 BL::ShaderNodeAttribute b_attr_node(b_node);
520 b_attr_node.attribute_type()));
523 else if (b_node.is_a(&RNA_ShaderNodeBackground)) {
526 else if (b_node.is_a(&RNA_ShaderNodeHoldout)) {
529 else if (b_node.is_a(&RNA_ShaderNodeBsdfDiffuse)) {
532 else if (b_node.is_a(&RNA_ShaderNodeSubsurfaceScattering)) {
533 BL::ShaderNodeSubsurfaceScattering b_subsurface_node(b_node);
537 switch (b_subsurface_node.falloff()) {
538 case BL::ShaderNodeSubsurfaceScattering::falloff_BURLEY:
541 case BL::ShaderNodeSubsurfaceScattering::falloff_RANDOM_WALK:
544 case BL::ShaderNodeSubsurfaceScattering::falloff_RANDOM_WALK_SKIN:
551 else if (b_node.is_a(&RNA_ShaderNodeBsdfMetallic)) {
552 BL::ShaderNodeBsdfMetallic b_metallic_node(b_node);
555 switch (b_metallic_node.distribution()) {
556 case BL::ShaderNodeBsdfMetallic::distribution_BECKMANN:
559 case BL::ShaderNodeBsdfMetallic::distribution_GGX:
562 case BL::ShaderNodeBsdfMetallic::distribution_MULTI_GGX:
567 switch (b_metallic_node.fresnel_type()) {
568 case BL::ShaderNodeBsdfMetallic::fresnel_type_PHYSICAL_CONDUCTOR:
571 case BL::ShaderNodeBsdfMetallic::fresnel_type_F82:
577 else if (b_node.is_a(&RNA_ShaderNodeBsdfAnisotropic)) {
578 BL::ShaderNodeBsdfAnisotropic b_glossy_node(b_node);
581 switch (b_glossy_node.distribution()) {
582 case BL::ShaderNodeBsdfAnisotropic::distribution_BECKMANN:
585 case BL::ShaderNodeBsdfAnisotropic::distribution_GGX:
588 case BL::ShaderNodeBsdfAnisotropic::distribution_ASHIKHMIN_SHIRLEY:
591 case BL::ShaderNodeBsdfAnisotropic::distribution_MULTI_GGX:
597 else if (b_node.is_a(&RNA_ShaderNodeBsdfGlass)) {
598 BL::ShaderNodeBsdfGlass b_glass_node(b_node);
600 switch (b_glass_node.distribution()) {
601 case BL::ShaderNodeBsdfGlass::distribution_BECKMANN:
604 case BL::ShaderNodeBsdfGlass::distribution_GGX:
607 case BL::ShaderNodeBsdfGlass::distribution_MULTI_GGX:
613 else if (b_node.is_a(&RNA_ShaderNodeBsdfRefraction)) {
614 BL::ShaderNodeBsdfRefraction b_refraction_node(b_node);
616 switch (b_refraction_node.distribution()) {
617 case BL::ShaderNodeBsdfRefraction::distribution_BECKMANN:
620 case BL::ShaderNodeBsdfRefraction::distribution_GGX:
626 else if (b_node.is_a(&RNA_ShaderNodeBsdfToon)) {
627 BL::ShaderNodeBsdfToon b_toon_node(b_node);
629 switch (b_toon_node.component()) {
630 case BL::ShaderNodeBsdfToon::component_DIFFUSE:
633 case BL::ShaderNodeBsdfToon::component_GLOSSY:
639 else if (b_node.is_a(&RNA_ShaderNodeBsdfHair)) {
640 BL::ShaderNodeBsdfHair b_hair_node(b_node);
642 switch (b_hair_node.component()) {
643 case BL::ShaderNodeBsdfHair::component_Reflection:
646 case BL::ShaderNodeBsdfHair::component_Transmission:
652 else if (b_node.is_a(&RNA_ShaderNodeBsdfHairPrincipled)) {
653 BL::ShaderNodeBsdfHairPrincipled b_principled_hair_node(b_node);
659 principled_hair->set_parametrization(
664 node = principled_hair;
666 else if (b_node.is_a(&RNA_ShaderNodeBsdfPrincipled)) {
667 BL::ShaderNodeBsdfPrincipled b_principled_node(b_node);
669 switch (b_principled_node.distribution()) {
670 case BL::ShaderNodeBsdfPrincipled::distribution_GGX:
673 case BL::ShaderNodeBsdfPrincipled::distribution_MULTI_GGX:
677 switch (b_principled_node.subsurface_method()) {
678 case BL::ShaderNodeBsdfPrincipled::subsurface_method_BURLEY:
681 case BL::ShaderNodeBsdfPrincipled::subsurface_method_RANDOM_WALK:
684 case BL::ShaderNodeBsdfPrincipled::subsurface_method_RANDOM_WALK_SKIN:
690 else if (b_node.is_a(&RNA_ShaderNodeBsdfTranslucent)) {
693 else if (b_node.is_a(&RNA_ShaderNodeBsdfTransparent)) {
696 else if (b_node.is_a(&RNA_ShaderNodeBsdfRayPortal)) {
699 else if (b_node.is_a(&RNA_ShaderNodeBsdfSheen)) {
700 BL::ShaderNodeBsdfSheen b_sheen_node(b_node);
702 switch (b_sheen_node.distribution()) {
703 case BL::ShaderNodeBsdfSheen::distribution_ASHIKHMIN:
706 case BL::ShaderNodeBsdfSheen::distribution_MICROFIBER:
712 else if (b_node.is_a(&RNA_ShaderNodeEmission)) {
715 else if (b_node.is_a(&RNA_ShaderNodeAmbientOcclusion)) {
716 BL::ShaderNodeAmbientOcclusion b_ao_node(b_node);
718 ao->set_samples(b_ao_node.samples());
719 ao->set_inside(b_ao_node.inside());
720 ao->set_only_local(b_ao_node.only_local());
723 else if (b_node.is_a(&RNA_ShaderNodeVolumeScatter)) {
724 BL::ShaderNodeVolumeScatter b_scatter_node(b_node);
726 switch (b_scatter_node.phase()) {
727 case BL::ShaderNodeVolumeScatter::phase_HENYEY_GREENSTEIN:
730 case BL::ShaderNodeVolumeScatter::phase_FOURNIER_FORAND:
733 case BL::ShaderNodeVolumeScatter::phase_DRAINE:
736 case BL::ShaderNodeVolumeScatter::phase_RAYLEIGH:
739 case BL::ShaderNodeVolumeScatter::phase_MIE:
745 else if (b_node.is_a(&RNA_ShaderNodeVolumeAbsorption)) {
748 else if (b_node.is_a(&RNA_ShaderNodeVolumePrincipled)) {
752 else if (b_node.is_a(&RNA_ShaderNodeNewGeometry)) {
755 else if (b_node.is_a(&RNA_ShaderNodeWireframe)) {
756 BL::ShaderNodeWireframe b_wireframe_node(b_node);
758 wire->set_use_pixel_size(b_wireframe_node.use_pixel_size());
761 else if (b_node.is_a(&RNA_ShaderNodeWavelength)) {
764 else if (b_node.is_a(&RNA_ShaderNodeBlackbody)) {
767 else if (b_node.is_a(&RNA_ShaderNodeLightPath)) {
770 else if (b_node.is_a(&RNA_ShaderNodeLightFalloff)) {
773 else if (b_node.is_a(&RNA_ShaderNodeObjectInfo)) {
776 else if (b_node.is_a(&RNA_ShaderNodeParticleInfo)) {
779 else if (b_node.is_a(&RNA_ShaderNodeHairInfo)) {
782 else if (b_node.is_a(&RNA_ShaderNodePointInfo)) {
785 else if (b_node.is_a(&RNA_ShaderNodeVolumeInfo)) {
788 else if (b_node.is_a(&RNA_ShaderNodeVertexColor)) {
789 BL::ShaderNodeVertexColor b_vertex_color_node(b_node);
791 vertex_color_node->set_layer_name(ustring(b_vertex_color_node.layer_name()));
792 node = vertex_color_node;
794 else if (b_node.is_a(&RNA_ShaderNodeBump)) {
795 BL::ShaderNodeBump b_bump_node(b_node);
797 bump->set_invert(b_bump_node.invert());
800 else if (b_node.is_a(&RNA_ShaderNodeScript)) {
802 if (scene->shader_manager->use_osl()) {
804 BL::ShaderNodeScript b_script_node(b_node);
807 string bytecode_hash = b_script_node.bytecode_hash();
809 if (!bytecode_hash.empty()) {
810 node = OSLShaderManager::osl_node(
811 graph, manager,
"", bytecode_hash, b_script_node.bytecode());
815 b_data, b_ntree, b_script_node.filepath());
816 node = OSLShaderManager::osl_node(graph, manager, absolute_filepath,
"");
824 else if (b_node.is_a(&RNA_ShaderNodeTexImage)) {
825 BL::ShaderNodeTexImage b_image_node(b_node);
826 BL::Image b_image(b_image_node.image());
827 BL::ImageUser b_image_user(b_image_node.image_user());
833 image->set_projection_blend(b_image_node.projection_blend());
834 BL::TexMapping b_texture_mapping(b_image_node.texture_mapping());
838 BL::Image::source_enum b_image_source = b_image.source();
839 PointerRNA colorspace_ptr = b_image.colorspace_settings().ptr;
846 for (BL::UDIMTile &b_tile : b_image.tiles) {
847 tiles.push_back_slow(b_tile.number());
849 image->set_tiles(
tiles);
863 int scene_frame = b_scene.frame_current();
865 if (b_image_source != BL::Image::source_TILED) {
866 image->handle = scene->image_manager->add_image(
868 image->image_params());
872 loaders.reserve(image->get_tiles().size());
873 for (
int tile_number : image->get_tiles()) {
878 image->handle = scene->image_manager->add_image(loaders, image->image_params());
882 ustring filename = ustring(
884 image->set_filename(filename);
889 else if (b_node.is_a(&RNA_ShaderNodeTexEnvironment)) {
890 BL::ShaderNodeTexEnvironment b_env_node(b_node);
891 BL::Image b_image(b_env_node.image());
892 BL::ImageUser b_image_user(b_env_node.image_user());
897 BL::TexMapping b_texture_mapping(b_env_node.texture_mapping());
901 BL::Image::source_enum b_image_source = b_image.source();
902 PointerRNA colorspace_ptr = b_image.colorspace_settings().ptr;
910 int scene_frame = b_scene.frame_current();
912 env->
handle = scene->image_manager->add_image(
923 else if (b_node.is_a(&RNA_ShaderNodeTexGradient)) {
924 BL::ShaderNodeTexGradient b_gradient_node(b_node);
926 gradient->set_gradient_type((
NodeGradientType)b_gradient_node.gradient_type());
927 BL::TexMapping b_texture_mapping(b_gradient_node.texture_mapping());
931 else if (b_node.is_a(&RNA_ShaderNodeTexVoronoi)) {
932 BL::ShaderNodeTexVoronoi b_voronoi_node(b_node);
934 voronoi->set_dimensions(b_voronoi_node.voronoi_dimensions());
937 voronoi->set_use_normalize(b_voronoi_node.normalize());
938 BL::TexMapping b_texture_mapping(b_voronoi_node.texture_mapping());
942 else if (b_node.is_a(&RNA_ShaderNodeTexMagic)) {
943 BL::ShaderNodeTexMagic b_magic_node(b_node);
945 magic->set_depth(b_magic_node.turbulence_depth());
946 BL::TexMapping b_texture_mapping(b_magic_node.texture_mapping());
950 else if (b_node.is_a(&RNA_ShaderNodeTexWave)) {
951 BL::ShaderNodeTexWave b_wave_node(b_node);
953 wave->set_wave_type((
NodeWaveType)b_wave_node.wave_type());
957 BL::TexMapping b_texture_mapping(b_wave_node.texture_mapping());
961 else if (b_node.is_a(&RNA_ShaderNodeTexChecker)) {
962 BL::ShaderNodeTexChecker b_checker_node(b_node);
964 BL::TexMapping b_texture_mapping(b_checker_node.texture_mapping());
968 else if (b_node.is_a(&RNA_ShaderNodeTexBrick)) {
969 BL::ShaderNodeTexBrick b_brick_node(b_node);
971 brick->set_offset(b_brick_node.offset());
972 brick->set_offset_frequency(b_brick_node.offset_frequency());
973 brick->set_squash(b_brick_node.squash());
974 brick->set_squash_frequency(b_brick_node.squash_frequency());
975 BL::TexMapping b_texture_mapping(b_brick_node.texture_mapping());
979 else if (b_node.is_a(&RNA_ShaderNodeTexNoise)) {
980 BL::ShaderNodeTexNoise b_noise_node(b_node);
982 noise->set_dimensions(b_noise_node.noise_dimensions());
984 noise->set_use_normalize(b_noise_node.normalize());
985 BL::TexMapping b_texture_mapping(b_noise_node.texture_mapping());
989 else if (b_node.is_a(&RNA_ShaderNodeTexGabor)) {
990 BL::ShaderNodeTexGabor b_gabor_node(b_node);
993 BL::TexMapping b_texture_mapping(b_gabor_node.texture_mapping());
997 else if (b_node.is_a(&RNA_ShaderNodeTexCoord)) {
998 BL::ShaderNodeTexCoord b_tex_coord_node(b_node);
1000 tex_coord->set_from_dupli(b_tex_coord_node.from_instancer());
1001 if (b_tex_coord_node.object()) {
1007 else if (b_node.is_a(&RNA_ShaderNodeTexSky)) {
1008 BL::ShaderNodeTexSky b_sky_node(b_node);
1010 sky->set_sky_type((
NodeSkyType)b_sky_node.sky_type());
1012 sky->set_turbidity(b_sky_node.turbidity());
1013 sky->set_ground_albedo(b_sky_node.ground_albedo());
1014 sky->set_sun_disc(b_sky_node.sun_disc());
1015 sky->set_sun_size(b_sky_node.sun_size());
1016 sky->set_sun_intensity(b_sky_node.sun_intensity());
1017 sky->set_sun_elevation(b_sky_node.sun_elevation());
1018 sky->set_sun_rotation(b_sky_node.sun_rotation());
1019 sky->set_altitude(b_sky_node.altitude());
1020 sky->set_air_density(b_sky_node.air_density());
1021 sky->set_dust_density(b_sky_node.dust_density());
1022 sky->set_ozone_density(b_sky_node.ozone_density());
1023 BL::TexMapping b_texture_mapping(b_sky_node.texture_mapping());
1027 else if (b_node.is_a(&RNA_ShaderNodeTexIES)) {
1028 BL::ShaderNodeTexIES b_ies_node(b_node);
1030 switch (b_ies_node.mode()) {
1031 case BL::ShaderNodeTexIES::mode_EXTERNAL:
1034 case BL::ShaderNodeTexIES::mode_INTERNAL:
1036 if (ies_content.empty()) {
1039 ies->set_ies(ies_content);
1044 else if (b_node.is_a(&RNA_ShaderNodeTexWhiteNoise)) {
1045 BL::ShaderNodeTexWhiteNoise b_tex_white_noise_node(b_node);
1047 white_noise_node->set_dimensions(b_tex_white_noise_node.noise_dimensions());
1048 node = white_noise_node;
1050 else if (b_node.is_a(&RNA_ShaderNodeNormalMap)) {
1051 BL::ShaderNodeNormalMap b_normal_map_node(b_node);
1054 nmap->set_attribute(ustring(b_normal_map_node.uv_map()));
1057 else if (b_node.is_a(&RNA_ShaderNodeTangent)) {
1058 BL::ShaderNodeTangent b_tangent_node(b_node);
1062 tangent->set_attribute(ustring(b_tangent_node.uv_map()));
1065 else if (b_node.is_a(&RNA_ShaderNodeUVMap)) {
1066 BL::ShaderNodeUVMap b_uvmap_node(b_node);
1068 uvm->set_attribute(ustring(b_uvmap_node.uv_map()));
1069 uvm->set_from_dupli(b_uvmap_node.from_instancer());
1072 else if (b_node.is_a(&RNA_ShaderNodeTexPointDensity)) {
1073 BL::ShaderNodeTexPointDensity b_point_density_node(b_node);
1077 point_density->
handle = scene->image_manager->add_image(
1081 b_point_density_node.cache_point_density(b_depsgraph);
1082 node = point_density;
1089 BL::Object b_ob(b_point_density_node.object());
1097 else if (b_node.is_a(&RNA_ShaderNodeBevel)) {
1098 BL::ShaderNodeBevel b_bevel_node(b_node);
1100 bevel->set_samples(b_bevel_node.samples());
1103 else if (b_node.is_a(&RNA_ShaderNodeDisplacement)) {
1104 BL::ShaderNodeDisplacement b_disp_node(b_node);
1109 else if (b_node.is_a(&RNA_ShaderNodeVectorDisplacement)) {
1110 BL::ShaderNodeVectorDisplacement b_disp_node(b_node);
1113 disp->set_attribute(ustring(
""));
1116 else if (b_node.is_a(&RNA_ShaderNodeOutputAOV)) {
1117 BL::ShaderNodeOutputAOV b_aov_node(b_node);
1119 aov->set_name(ustring(b_aov_node.aov_name()));
1124 node->
name = b_node.name();