Blender V4.3
eevee_material_info.hh File Reference

Go to the source code of this file.

Surface

#define image_out(slot, qualifier, format, name)    image(slot, format, qualifier, ImageType::FLOAT_2D, name, Frequency::PASS)
 
#define image_array_out(slot, qualifier, format, name)    image(slot, format, qualifier, ImageType::FLOAT_2D_ARRAY, name, Frequency::PASS)
 
 GPU_RGBA16F
 
 GPU_RGBA32F
 
 rp_cryptomatte_img
 
out_radiance out_gbuf_normal out_gbuf_closure2 GPU_RG16
 
 eevee_light_data
 
 eevee_lightprobe_data
 
 eevee_shadow_data
 
 out_radiance
 
DualBlend::SRC_0 eevee_utility_texture
 
DualBlend::SRC_0 eevee_sampling_data
 
DualBlend::SRC_0 eevee_hiz_data
 
DualBlend::SRC_0 eevee_volume_lib
 
 Surfel
 
push_constant(Type::FLOAT, "world_opacity_fade") .push_constant(Type eevee_global_ubo
 
push_constant(Type::FLOAT, "world_opacity_fade") .push_constant(Type eevee_render_pass_out
 
push_constant(Type::FLOAT, "world_opacity_fade") .push_constant(Type eevee_cryptomatte_out
 
 define ("MAT_RENDER_PASS_SUPPORT") .additional_info("eevee_global_ubo") .image_array_out(RBUFS_COLOR_SLOT
 
rp_color_img image_array_out (RBUFS_VALUE_SLOT, Qualifier::WRITE, GPU_R16F, "rp_value_img")
 
 storage_buf (CRYPTOMATTE_BUF_SLOT, Qualifier::READ, "vec2", "cryptomatte_object_buf[]") .image_out(RBUFS_CRYPTOMATTE_SLOT
 
 define ("MAT_DEFERRED") .define("GBUFFER_WRITE") .early_fragment_test(true) .fragment_out(0
 
out_radiance fragment_out (1, Type::UINT, "out_gbuf_header", DualBlend::NONE, DEFERRED_GBUFFER_ROG_ID) .fragment_out(2
 
out_radiance out_gbuf_normal fragment_out (3, Type::VEC4, "out_gbuf_closure1") .fragment_out(4
 
out_radiance out_gbuf_normal out_gbuf_closure2 image_array_out (GBUF_CLOSURE_SLOT, Qualifier::WRITE, GPU_RGB10_A2, "out_gbuf_closure_img") .image_array_out(GBUF_NORMAL_SLOT
 
out_radiance out_gbuf_normal out_gbuf_closure2 out_gbuf_normal_img additional_info ("eevee_global_ubo", "eevee_utility_texture", "eevee_sampling_data", "eevee_hiz_data")
 
 fragment_source ("eevee_surf_deferred_frag.glsl") .additional_info("eevee_surf_deferred_base")
 
 fragment_source ("eevee_surf_hybrid_frag.glsl") .additional_info("eevee_surf_deferred_base"
 
 define ("MAT_FORWARD") .early_fragment_test(true) .fragment_out(0
 
DualBlend::SRC_0 fragment_out (0, Type::VEC4, "out_transmittance", DualBlend::SRC_1) .fragment_source("eevee_surf_forward_frag.glsl") .additional_info("eevee_global_ubo"
 
 define ("MAT_CAPTURE") .storage_buf(SURFEL_BUF_SLOT
 
surfel_buf[] storage_buf(CAPTURE_BUF_SLOT, Qualifier::READ_WRITE, "CaptureInfoData", "capture_info_buf") .push_constant(Type define ("MAT_DEPTH") .fragment_source("eevee_surf_depth_frag.glsl") .additional_info("eevee_global_ubo"
 
push_constant(Type::FLOAT, "world_opacity_fade") .push_constant(Type fragment_out (0, Type::VEC4, "out_background") .fragment_source("eevee_renderpass_clear_frag.glsl") .additional_info("draw_fullscreen"
 
push_constant(Type::FLOAT, "world_opacity_fade") .push_constant(Type eevee_shared do_static_compilation (true)
 
 flat (Type::INT, "shadow_view_id")
 

Test shaders

Variations that are only there to test shaders at compile time.

#define EEVEE_MAT_FINAL_VARIATION(name, ...)    GPU_SHADER_CREATE_INFO(name).additional_info(__VA_ARGS__).do_static_compilation(true);
 
#define EEVEE_MAT_GEOM_VARIATIONS(prefix, ...)
 
#define EEVEE_MAT_PIPE_VARIATIONS(name, ...)
 
 int
 
 node_tree
 
 define ("EEVEE_MATERIAL_STUBS") .uniform_buf(0
 

Common

 SamplingData
 
 sampling_buf
 
 utility_tx
 
 ClipPlaneData
 
 typedef_source ("eevee_defines.hh") .typedef_source("eevee_shader_shared.hh")
 
 uniform_buf (UNIFORM_BUF_SLOT, "UniformData", "uniform_buf")
 
 define ("EEVEE_SAMPLING_DATA") .additional_info("eevee_shared") .storage_buf(SAMPLING_BUF_SLOT
 
 define ("EEVEE_UTILITY_TX") .sampler(RBUFS_UTILITY_TEX_SLOT
 
 smooth (Type::FLOAT, "clip_distance")
 
 vertex_out (eevee_clip_plane_iface) .uniform_buf(CLIP_PLANE_BUF
 
clip_plane define ("MAT_CLIP_PLANE")
 

Surface Mesh Type

smooth(Type::VEC3, "P") .smooth(Type pos draw_object_infos_new
 
smooth(Type::VEC3, "P") .smooth(Type pos draw_resource_id_varying
 
smooth(Type::VEC3, "P") .smooth(Type pos draw_view
 
 draw_modelmat_new
 
pos draw_volume_infos
 
 draw_resource_id_new
 
 draw_hair_new
 
 draw_curves_infos
 
smooth(Type::VEC3, "P") .smooth(Type additional_info ("eevee_shared") .define("MAT_GEOM_MESH") .vertex_in(0
 
smooth(Type::VEC3, "P") .smooth(Type pos vertex_in (1, Type::VEC3, "nor") .vertex_source("eevee_geom_mesh_vert.glsl") .vertex_out(eevee_surf_iface) .additional_info("draw_modelmat_new"
 
smooth(Type::FLOAT, "radius") .smooth(Type flat (Type::INT, "id")
 
pos vertex_out (eevee_surf_iface) .vertex_source("eevee_geom_volume_vert.glsl") .additional_info("draw_modelmat_new"
 
smooth(Type::VEC2, "barycentric_coords") .smooth(Type flat (Type::INT, "strand_id")
 

Volume

 GPU_R11F_G11F_B10F
 
out_scattering_img out_emissive_img GPU_R16F
 
out_scattering_img out_emissive_img out_phase_weight_img eevee_shared
 
 define ("MAT_VOLUME") .early_fragment_test(true) .image(VOLUME_PROP_SCATTERING_IMG_SLOT
 
out_scattering_img image (VOLUME_PROP_EXTINCTION_IMG_SLOT, GPU_R11F_G11F_B10F, Qualifier::READ_WRITE, ImageType::FLOAT_3D, "out_extinction_img") .image(VOLUME_PROP_EMISSION_IMG_SLOT
 
out_scattering_img out_emissive_img image (VOLUME_PROP_PHASE_IMG_SLOT, GPU_R16F, Qualifier::READ_WRITE, ImageType::FLOAT_3D, "out_phase_img") .image(VOLUME_PROP_PHASE_WEIGHT_IMG_SLOT
 
out_scattering_img out_emissive_img out_phase_weight_img image (VOLUME_OCCUPANCY_SLOT, GPU_R32UI, Qualifier::READ, ImageType::UINT_3D_ATOMIC, "occupancy_img") .fragment_source("eevee_surf_volume_frag.glsl") .additional_info("draw_modelmat_new_common"
 

Macro Definition Documentation

◆ EEVEE_MAT_FINAL_VARIATION

#define EEVEE_MAT_FINAL_VARIATION ( name,
... )    GPU_SHADER_CREATE_INFO(name).additional_info(__VA_ARGS__).do_static_compilation(true);

Definition at line 385 of file eevee_material_info.hh.

◆ EEVEE_MAT_GEOM_VARIATIONS

#define EEVEE_MAT_GEOM_VARIATIONS ( prefix,
... )
Value:
EEVEE_MAT_FINAL_VARIATION(prefix##_world, "eevee_geom_world", __VA_ARGS__) \
/* Turned off until dependency on common_view/math_lib are sorted out. */ \
/* EEVEE_MAT_FINAL_VARIATION(prefix##_gpencil, "eevee_geom_gpencil", __VA_ARGS__) */ \
EEVEE_MAT_FINAL_VARIATION(prefix##_curves, "eevee_geom_curves", __VA_ARGS__) \
EEVEE_MAT_FINAL_VARIATION(prefix##_mesh, "eevee_geom_mesh", __VA_ARGS__) \
EEVEE_MAT_FINAL_VARIATION(prefix##_point_cloud, "eevee_geom_point_cloud", __VA_ARGS__) \
EEVEE_MAT_FINAL_VARIATION(prefix##_volume, "eevee_geom_volume", __VA_ARGS__)
#define EEVEE_MAT_FINAL_VARIATION(name,...)

Definition at line 388 of file eevee_material_info.hh.

◆ EEVEE_MAT_PIPE_VARIATIONS

#define EEVEE_MAT_PIPE_VARIATIONS ( name,
... )
Value:
EEVEE_MAT_GEOM_VARIATIONS(name##_world, "eevee_surf_world", __VA_ARGS__) \
EEVEE_MAT_GEOM_VARIATIONS(name##_depth, "eevee_surf_depth", __VA_ARGS__) \
EEVEE_MAT_GEOM_VARIATIONS(name##_deferred, "eevee_surf_deferred", __VA_ARGS__) \
EEVEE_MAT_GEOM_VARIATIONS(name##_forward, "eevee_surf_forward", __VA_ARGS__) \
EEVEE_MAT_GEOM_VARIATIONS(name##_capture, "eevee_surf_capture", __VA_ARGS__) \
EEVEE_MAT_GEOM_VARIATIONS(name##_volume, "eevee_surf_volume", __VA_ARGS__) \
EEVEE_MAT_GEOM_VARIATIONS(name##_occupancy, "eevee_surf_occupancy", __VA_ARGS__) \
EEVEE_MAT_GEOM_VARIATIONS(name##_shadow_atomic, "eevee_surf_shadow_atomic", __VA_ARGS__) \
EEVEE_MAT_GEOM_VARIATIONS(name##_shadow_tbdr, "eevee_surf_shadow_tbdr", __VA_ARGS__)
#define EEVEE_MAT_GEOM_VARIATIONS(prefix,...)

Definition at line 397 of file eevee_material_info.hh.

◆ image_array_out

#define image_array_out ( slot,
qualifier,
format,
name )    image(slot, format, qualifier, ImageType::FLOAT_2D_ARRAY, name, Frequency::PASS)

Definition at line 147 of file eevee_material_info.hh.

◆ image_out

#define image_out ( slot,
qualifier,
format,
name )    image(slot, format, qualifier, ImageType::FLOAT_2D, name, Frequency::PASS)

Definition at line 145 of file eevee_material_info.hh.

Function Documentation

◆ additional_info() [1/2]

out_radiance out_gbuf_normal out_gbuf_closure2 out_gbuf_normal_img additional_info ( "eevee_global_ubo" ,
"eevee_utility_texture" ,
"eevee_sampling_data" ,
"eevee_hiz_data"  )

◆ additional_info() [2/2]

smooth(Type::VEC3, "P") .smooth(Type additional_info ( "eevee_shared" )

◆ define() [1/10]

define ( "EEVEE_MATERIAL_STUBS" )

◆ define() [2/10]

define ( "EEVEE_SAMPLING_DATA" )

◆ define() [3/10]

define ( "EEVEE_UTILITY_TX" )

◆ define() [4/10]

define ( "MAT_CAPTURE" )

◆ define() [5/10]

clip_plane define ( "MAT_CLIP_PLANE" )

◆ define() [6/10]

define ( "MAT_DEFERRED" )

◆ define() [7/10]

surfel_buf[] storage_buf(CAPTURE_BUF_SLOT, Qualifier::READ_WRITE, "CaptureInfoData", "capture_info_buf") .push_constant(Type define ( "MAT_DEPTH" )

◆ define() [8/10]

define ( "MAT_FORWARD" )

◆ define() [9/10]

define ( "MAT_RENDER_PASS_SUPPORT" )

◆ define() [10/10]

define ( "MAT_VOLUME" )

◆ do_static_compilation()

push_constant(Type::FLOAT, "world_opacity_fade") .push_constant(Type eevee_shared do_static_compilation ( true )

Colors, weights, and Circle of confusion radii for the 4 pixels to scatter. Scaling factor for the bokeh distance. Sprite pixel position with origin at sprite center. In pixels.

◆ flat() [1/3]

smooth(Type::FLOAT, "radius") .smooth(Type flat ( Type::INT ,
"id"  )

Referenced by offset_child().

◆ flat() [2/3]

flat ( Type::INT ,
"shadow_view_id"  )

◆ flat() [3/3]

smooth(Type::VEC2, "barycentric_coords") .smooth(Type flat ( Type::INT ,
"strand_id"  )

◆ fragment_out() [1/4]

push_constant(Type::FLOAT, "world_opacity_fade") .push_constant(Type fragment_out ( 0 ,
Type::VEC4 ,
"out_background"  )

◆ fragment_out() [2/4]

DualBlend::SRC_0 fragment_out ( 0 ,
Type::VEC4 ,
"out_transmittance" ,
DualBlend::SRC_1  )

TODO(Miguel Pozo): Volume RenderPasses.

◆ fragment_out() [3/4]

out_radiance fragment_out ( 1 ,
Type::UINT ,
"out_gbuf_header" ,
DualBlend::NONE ,
DEFERRED_GBUFFER_ROG_ID  )

◆ fragment_out() [4/4]

out_radiance out_gbuf_normal fragment_out ( 3 ,
Type::VEC4 ,
"out_gbuf_closure1"  )

◆ fragment_source() [1/2]

fragment_source ( "eevee_surf_deferred_frag.glsl" )

◆ fragment_source() [2/2]

fragment_source ( "eevee_surf_hybrid_frag.glsl" )

◆ image() [1/3]

out_scattering_img out_emissive_img out_phase_weight_img image ( VOLUME_OCCUPANCY_SLOT ,
GPU_R32UI ,
Qualifier::READ ,
ImageType::UINT_3D_ATOMIC ,
"occupancy_img"  )

◆ image() [2/3]

out_scattering_img image ( VOLUME_PROP_EXTINCTION_IMG_SLOT ,
GPU_R11F_G11F_B10F ,
Qualifier::READ_WRITE ,
ImageType::FLOAT_3D ,
"out_extinction_img"  )

◆ image() [3/3]

out_scattering_img out_emissive_img image ( VOLUME_PROP_PHASE_IMG_SLOT ,
GPU_R16F ,
Qualifier::READ_WRITE ,
ImageType::FLOAT_3D ,
"out_phase_img"  )

◆ image_array_out() [1/2]

out_radiance out_gbuf_normal out_gbuf_closure2 image_array_out ( GBUF_CLOSURE_SLOT ,
Qualifier::WRITE ,
GPU_RGB10_A2 ,
"out_gbuf_closure_img"  )

◆ image_array_out() [2/2]

rp_color_img image_array_out ( RBUFS_VALUE_SLOT ,
Qualifier::WRITE ,
GPU_R16F ,
"rp_value_img"  )

◆ smooth()

smooth ( Type::FLOAT ,
"clip_distance"  )

◆ storage_buf()

storage_buf ( CRYPTOMATTE_BUF_SLOT ,
Qualifier::READ ,
"vec2" ,
"cryptomatte_object_buf" [] )

◆ typedef_source()

typedef_source ( "eevee_defines.hh" )

◆ uniform_buf()

uniform_buf ( UNIFORM_BUF_SLOT ,
"UniformData" ,
"uniform_buf"  )

◆ vertex_in()

smooth(Type::VEC3, "P") .smooth(Type pos vertex_in ( 1 ,
Type::VEC3 ,
"nor"  )

◆ vertex_out() [1/2]

vertex_out ( eevee_clip_plane_iface )

◆ vertex_out() [2/2]

pos vertex_out ( eevee_surf_iface )

Variable Documentation

◆ ClipPlaneData

ClipPlaneData

Definition at line 34 of file eevee_material_info.hh.

◆ draw_curves_infos

draw_curves_infos

Definition at line 126 of file eevee_material_info.hh.

◆ draw_hair_new

draw_hair_new

Definition at line 125 of file eevee_material_info.hh.

◆ draw_modelmat_new

Frequency::GEOMETRY draw_modelmat_new

Definition at line 76 of file eevee_material_info.hh.

◆ draw_object_infos_new

pos draw_object_infos_new

Definition at line 58 of file eevee_material_info.hh.

◆ draw_resource_id_new

draw_resource_id_new

Definition at line 102 of file eevee_material_info.hh.

Referenced by gpu_shader_create_info_init().

◆ draw_resource_id_varying

pos draw_resource_id_varying

Definition at line 59 of file eevee_material_info.hh.

◆ draw_view

out_scattering_img out_emissive_img out_phase_weight_img draw_view

Definition at line 60 of file eevee_material_info.hh.

◆ draw_volume_infos

pos draw_volume_infos

Definition at line 90 of file eevee_material_info.hh.

◆ eevee_cryptomatte_out

push_constant(Type::FLOAT, "world_opacity_fade") .push_constant(Type eevee_cryptomatte_out

Definition at line 250 of file eevee_material_info.hh.

◆ eevee_global_ubo

out_scattering_img out_emissive_img out_phase_weight_img eevee_global_ubo

Definition at line 248 of file eevee_material_info.hh.

◆ eevee_hiz_data

DualBlend::SRC_0 eevee_hiz_data

Definition at line 208 of file eevee_material_info.hh.

◆ eevee_light_data

DualBlend::SRC_0 eevee_light_data

Definition at line 190 of file eevee_material_info.hh.

◆ eevee_lightprobe_data

DualBlend::SRC_0 eevee_lightprobe_data

Definition at line 191 of file eevee_material_info.hh.

◆ eevee_render_pass_out

push_constant(Type::FLOAT, "world_opacity_fade") .push_constant(Type eevee_render_pass_out

Definition at line 249 of file eevee_material_info.hh.

◆ eevee_sampling_data

out_scattering_img out_emissive_img out_phase_weight_img eevee_sampling_data

Definition at line 206 of file eevee_material_info.hh.

◆ eevee_shadow_data

DualBlend::SRC_0 eevee_shadow_data

Definition at line 192 of file eevee_material_info.hh.

◆ eevee_shared

out_scattering_img out_emissive_img out_phase_weight_img eevee_shared

Definition at line 344 of file eevee_material_info.hh.

◆ eevee_utility_texture

out_scattering_img out_emissive_img out_phase_weight_img eevee_utility_texture

Definition at line 205 of file eevee_material_info.hh.

◆ eevee_volume_lib

DualBlend::SRC_0 eevee_volume_lib

Definition at line 209 of file eevee_material_info.hh.

◆ GPU_R11F_G11F_B10F

out_scattering_img GPU_R11F_G11F_B10F

Definition at line 312 of file eevee_material_info.hh.

◆ GPU_R16F

out_scattering_img out_emissive_img GPU_R16F

Definition at line 332 of file eevee_material_info.hh.

◆ GPU_RG16

◆ GPU_RGBA16F

GPU_RGBA16F

Definition at line 153 of file eevee_material_info.hh.

◆ GPU_RGBA32F

GPU_RGBA32F

Definition at line 158 of file eevee_material_info.hh.

◆ int

int

Definition at line 383 of file eevee_material_info.hh.

◆ node_tree

node_tree

Definition at line 383 of file eevee_material_info.hh.

Referenced by blender::ed::space_node::add_node(), add_nodes(), add_realize_node_tree(), blender::ed::space_node::add_static_node(), blender::bke::compositor::add_used_passes_recursive(), animfilter_modifier_idpoin_cb(), blender::ed::space_node::any_node_selected(), blender::ed::space_node::attribute_search_exec_fn(), BKE_lib_override_library_make_local(), blo_do_versions_270(), BLO_main_validate_embedded_flag(), BLO_main_validate_embedded_liboverrides(), blender::ed::space_node::build_catalog_tree(), buttons_texture_modifier_geonodes_users_add(), COM_execute(), Render::compositor_execute(), compositor_init_node_previews(), compositor_reset_node_tree_status(), blender::ed::transform::createTransNodeData(), blender::ed::space_node::cut_links_exec(), DEG_add_node_tree_output_relation(), blender::ed::space_node::do_lasso_select_node(), do_version_curvemapping_walker(), blender::ed::geometry::draw_property_for_socket(), blender::ed::object::drop_geometry_nodes_invoke(), blender::compositor::FullFrameExecutionModel::execute(), blender::compositor::ExecutionModel::ExecutionModel(), blender::realtime_compositor::Profiler::finalize(), blender::animrig::find_related_ids(), blender::ed::space_node::find_socket_to_use_for_interface(), blender::ed::geometry::gather_node_group_ids(), blender::ed::space_node::gather_search_link_ops_for_all_assets(), blender::ed::space_node::gather_socket_link_operations(), blender::ed::space_node::get_attribute_info_from_context(), blender::ed::space_node::get_nodes_to_group(), blender::ed::space_node::get_selected_node_for_insertion(), blender::ed::space_node::get_selected_nodes(), blender::nodes::get_simulation_input_lazy_function(), blender::nodes::group_input_declare(), blender::nodes::group_output_declare(), blender::nodes::input_has_attribute_toggle(), blender::nodes::node_geo_simulation_cc::sim_input_node::LazyFunctionForSimulationInputNode::LazyFunctionForSimulationInputNode(), blender::bke::greasepencil::convert::legacy_gpencil_sanitize_annotations(), blender::ed::space_node::link_drag_search_exec_fn(), blender::ed::space_node::link_drag_search_update_fn(), blender::io::obj::linked_sockets_to_dest_id(), blender::ed::space_node::need_drag_link_tooltip(), blender::ed::space_node::node_add_file_exec(), blender::ed::space_node::node_box_select_exec(), blender::ed::space_node::node_circleselect_exec(), blender::nodes::node_geo_simulation_cc::sim_input_node::node_declare(), blender::ed::space_node::node_deselect_all(), blender::ed::space_node::node_deselect_all_input_sockets(), blender::ed::space_node::node_deselect_all_output_sockets(), blender::ed::space_node::node_group_add_poll(), blender::ed::space_node::node_group_drop_poll(), blender::ed::space_node::node_insert_on_link_flags(), blender::ed::space_node::node_insert_on_link_flags_clear(), blender::ed::space_node::node_insert_on_link_flags_set(), blender::ed::space_node::node_make_link_exec(), blender::ed::space_node::node_mouse_select(), blender::bke::node_rebuild_id_vector(), blender::ed::space_node::node_select_all_exec(), blender::ed::space_node::node_select_grouped_color(), blender::ed::space_node::node_select_grouped_exec(), blender::ed::space_node::node_select_grouped_name(), blender::ed::space_node::node_select_grouped_type(), blender::ed::space_node::node_select_linked_from_exec(), blender::ed::space_node::node_select_linked_to_exec(), blender::ed::space_node::node_select_paired(), blender::ed::space_node::node_select_same_type_step_exec(), blender::ed::space_node::node_select_single(), blender::ed::space_node::node_toggle_button_cb(), node_tree_has_composite_output(), blender::bke::node_tree_iterator_step(), blender::bke::node_update_asset_metadata(), blender::ed::space_node::nodelink_get_draw_config(), blender::ed::space_node::pick_input_link_by_link_intersect(), RE_compositor_execute(), blender::ed::geometry::run_node_group_exec(), blender::ed::geometry::run_node_group_invoke(), blender::ed::geometry::run_node_group_ui(), blender::ed::space_node::search_link_ops_for_asset_metadata(), blender::ed::space_node::should_create_drag_link_search_menu(), blender::ed::space_node::std_node_socket_draw(), blender::ed::space_node::std_node_socket_interface_draw(), blender::io::obj::store_image_textures(), blender::ed::space_node::ui_node_draw_input(), view3d_geometry_nodes_drop_poll(), and wm_file_read_post().

◆ out_radiance

out_radiance

Definition at line 199 of file eevee_material_info.hh.

◆ rp_cryptomatte_img

rp_cryptomatte_img

Definition at line 158 of file eevee_material_info.hh.

◆ sampling_buf

sampling_buf

Definition at line 23 of file eevee_material_info.hh.

◆ SamplingData

SamplingData

Definition at line 23 of file eevee_material_info.hh.

◆ Surfel

Surfel

◆ utility_tx

utility_tx

Definition at line 27 of file eevee_material_info.hh.