Blender  V3.3
Classes | Macros | Typedefs | Functions | Variables
eevee_materials.c File Reference
#include "DRW_render.h"
#include "BLI_alloca.h"
#include "BLI_ghash.h"
#include "BLI_listbase.h"
#include "BLI_math_bits.h"
#include "BLI_memblock.h"
#include "BLI_rand.h"
#include "BLI_string_utils.h"
#include "BKE_paint.h"
#include "BKE_particle.h"
#include "DNA_curves_types.h"
#include "DNA_modifier_types.h"
#include "DNA_view3d_types.h"
#include "DNA_world_types.h"
#include "GPU_material.h"
#include "DEG_depsgraph_query.h"
#include "eevee_engine.h"
#include "eevee_lut.h"
#include "eevee_private.h"

Go to the source code of this file.

Classes

struct  EeveeMaterialCache
 

Macros

#define RUNTIME_LUT_CREATION   0
 
#define EEVEE_PASS_CREATE(pass, state)
 
#define EEVEE_CLIP_PASS_CREATE(pass, state)
 
#define ADD_SHGROUP_CALL(shgrp, ob, geom, oedata)
 
#define ADD_SHGROUP_CALL_SAFE(shgrp, ob, geom, oedata)
 
#define MATCACHE_AS_ARRAY(matcache, member, materials_len, output_array)
 

Typedefs

typedef struct EeveeMaterialCache EeveeMaterialCache
 

Functions

struct GPUTextureEEVEE_materials_get_util_tex (void)
 
void EEVEE_material_bind_resources (DRWShadingGroup *shgrp, GPUMaterial *gpumat, EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, const int *ssr_id, const float *refract_depth, const float alpha_clip_threshold, bool use_ssrefraction, bool use_alpha_blend)
 
static void eevee_init_noise_texture (void)
 
static void eevee_init_util_texture (void)
 
void EEVEE_update_noise (EEVEE_PassList *psl, EEVEE_FramebufferList *fbl, const double offsets[3])
 
void EEVEE_materials_init (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, EEVEE_StorageList *stl, EEVEE_FramebufferList *fbl)
 
void EEVEE_materials_cache_init (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
 
BLI_INLINE void material_shadow (EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata, Material *ma, bool is_hair, EeveeMaterialCache *emc)
 
static EeveeMaterialCache material_opaque (EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata, Material *ma, const bool is_hair)
 
static EeveeMaterialCache material_transparent (EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata, Material *ma)
 
BLI_INLINE Materialeevee_object_material_get (Object *ob, int slot, bool holdout)
 
BLI_INLINE EeveeMaterialCache eevee_material_cache_get (EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata, Object *ob, int slot, bool is_hair)
 
void EEVEE_materials_cache_populate (EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata, Object *ob, bool *cast_shadow)
 
void EEVEE_particle_hair_cache_populate (EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata, Object *ob, bool *cast_shadow)
 
void EEVEE_object_curves_cache_populate (EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata, Object *ob, bool *cast_shadow)
 
void EEVEE_materials_cache_finish (EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
 
void EEVEE_materials_free (void)
 
Render Passes
void EEVEE_material_renderpasses_init (EEVEE_Data *vedata)
 
static void material_renderpass_init (GPUTexture **output_tx, const eGPUTextureFormat format)
 
void EEVEE_material_output_init (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, uint tot_samples)
 
static void material_renderpass_accumulate (EEVEE_EffectsInfo *effects, EEVEE_FramebufferList *fbl, DRWPass *renderpass, DRWPass *renderpass2, EEVEE_PrivateData *pd, GPUTexture *output_tx, struct GPUUniformBuf *renderpass_option_ubo)
 
void EEVEE_material_output_accumulate (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
 

Variables

struct {
   struct GPUTexture *   util_tex
 
   struct GPUTexture *   noise_tex
 
   float   noise_offsets [3]
 
e_data = {NULL}
 

Macro Definition Documentation

◆ ADD_SHGROUP_CALL

#define ADD_SHGROUP_CALL (   shgrp,
  ob,
  geom,
  oedata 
)
Value:
do { \
if (oedata) { \
DRW_shgroup_call_with_callback(shgrp, geom, ob, oedata); \
} \
else { \
DRW_shgroup_call(shgrp, geom, ob); \
} \
} while (0)

Definition at line 776 of file eevee_materials.c.

◆ ADD_SHGROUP_CALL_SAFE

#define ADD_SHGROUP_CALL_SAFE (   shgrp,
  ob,
  geom,
  oedata 
)
Value:
do { \
if (shgrp) { \
ADD_SHGROUP_CALL(shgrp, ob, geom, oedata); \
} \
} while (0)

Definition at line 786 of file eevee_materials.c.

◆ EEVEE_CLIP_PASS_CREATE

#define EEVEE_CLIP_PASS_CREATE (   pass,
  state 
)
Value:
do { \
DRWState st = state | DRW_STATE_CLIP_PLANES; \
DRW_PASS_INSTANCE_CREATE(psl->pass##_clip_ps, psl->pass##_ps, st); \
DRW_PASS_INSTANCE_CREATE( \
psl->pass##_clip_cull_ps, psl->pass##_cull_ps, st | DRW_STATE_CULL_BACK); \
DRW_pass_link(psl->pass##_clip_ps, psl->pass##_clip_cull_ps); \
} while (0)
@ DRW_STATE_CLIP_PLANES
Definition: DRW_render.h:342
@ DRW_STATE_CULL_BACK
Definition: DRW_render.h:316
const int state
static const pxr::TfToken st("st", pxr::TfToken::Immortal)

◆ EEVEE_PASS_CREATE

#define EEVEE_PASS_CREATE (   pass,
  state 
)
Value:
do { \
DRW_PASS_CREATE(psl->pass##_ps, state); \
DRW_PASS_CREATE(psl->pass##_cull_ps, state | DRW_STATE_CULL_BACK); \
DRW_pass_link(psl->pass##_ps, psl->pass##_cull_ps); \
} while (0)

◆ MATCACHE_AS_ARRAY

#define MATCACHE_AS_ARRAY (   matcache,
  member,
  materials_len,
  output_array 
)
Value:
for (int i = 0; i < materials_len; i++) { \
output_array[i] = matcache[i].member; \
}

Definition at line 793 of file eevee_materials.c.

◆ RUNTIME_LUT_CREATION

#define RUNTIME_LUT_CREATION   0

Definition at line 141 of file eevee_materials.c.

Typedef Documentation

◆ EeveeMaterialCache

Function Documentation

◆ eevee_init_noise_texture()

static void eevee_init_noise_texture ( void  )
static

Definition at line 136 of file eevee_materials.c.

References blue_noise, DRW_texture_create_2d(), e_data, and GPU_RGBA16F.

Referenced by EEVEE_materials_init().

◆ eevee_init_util_texture()

static void eevee_init_util_texture ( void  )
static

◆ EEVEE_material_bind_resources()

void EEVEE_material_bind_resources ( DRWShadingGroup shgrp,
struct GPUMaterial gpumat,
EEVEE_ViewLayerData sldata,
EEVEE_Data vedata,
const int *  ssr_id,
const float refract_depth,
const float  alpha_clip_threshold,
bool  use_ssrefraction,
bool  use_alpha_blend 
)

◆ eevee_material_cache_get()

BLI_INLINE EeveeMaterialCache eevee_material_cache_get ( EEVEE_Data vedata,
EEVEE_ViewLayerData sldata,
Object ob,
int  slot,
bool  is_hair 
)

◆ EEVEE_material_output_accumulate()

void EEVEE_material_output_accumulate ( EEVEE_ViewLayerData sldata,
EEVEE_Data vedata 
)

Definition at line 1064 of file eevee_materials.c.

References EEVEE_TextureList::aov_surface_accum, EEVEE_ViewLayerData::aovs, EEVEE_PassList::background_accum_ps, EEVEE_ViewLayerData::combined, EEVEE_ViewLayerData::common_data, EEVEE_ViewLayerData::common_ubo, EEVEE_ViewLayerData::diff_color, EEVEE_TextureList::diff_color_accum, EEVEE_ViewLayerData::diff_light, EEVEE_TextureList::diff_light_accum, DRW_TEXTURE_FREE_SAFE, EEVEE_reflection_output_accumulate(), EEVEE_RENDER_PASS_AOV, EEVEE_RENDER_PASS_DIFFUSE_COLOR, EEVEE_RENDER_PASS_DIFFUSE_LIGHT, EEVEE_RENDER_PASS_EMIT, EEVEE_RENDER_PASS_ENVIRONMENT, EEVEE_RENDER_PASS_SPECULAR_COLOR, EEVEE_RENDER_PASS_SPECULAR_LIGHT, EEVEE_subsurface_output_accumulate(), EFFECT_SSR, EFFECT_SSS, EEVEE_StorageList::effects, EEVEE_ViewLayerData::emit, EEVEE_TextureList::emit_accum, EEVEE_EffectsInfo::enabled_effects, EEVEE_TextureList::env_accum, EEVEE_ViewLayerData::environment, EEVEE_Data::fbl, EEVEE_StorageList::g_data, GPU_framebuffer_bind(), GPU_uniformbuf_update(), EEVEE_FramebufferList::main_fb, EEVEE_FramebufferList::material_accum_fb, EEVEE_PassList::material_accum_ps, material_renderpass_accumulate(), MAX_AOVS, NULL, EEVEE_PrivateData::num_aovs_used, EEVEE_Data::psl, EEVEE_PrivateData::render_passes, EEVEE_ViewLayerData::renderpass_ubo, EEVEE_PrivateData::renderpass_ubo, EEVEE_ViewLayerData::spec_color, EEVEE_TextureList::spec_color_accum, EEVEE_ViewLayerData::spec_light, EEVEE_TextureList::spec_light_accum, EEVEE_CommonUniformBuffer::ssr_toggle, EEVEE_Data::stl, and EEVEE_Data::txl.

Referenced by EEVEE_renderpasses_output_accumulate().

◆ EEVEE_material_output_init()

void EEVEE_material_output_init ( EEVEE_ViewLayerData sldata,
EEVEE_Data vedata,
uint  tot_samples 
)

◆ EEVEE_material_renderpasses_init()

void EEVEE_material_renderpasses_init ( EEVEE_Data vedata)

◆ EEVEE_materials_cache_finish()

void EEVEE_materials_cache_finish ( EEVEE_ViewLayerData UNUSEDsldata,
EEVEE_Data vedata 
)

◆ EEVEE_materials_cache_init()

void EEVEE_materials_cache_init ( EEVEE_ViewLayerData sldata,
EEVEE_Data vedata 
)

Definition at line 348 of file eevee_materials.c.

References ARRAY_SIZE, EEVEE_PassList::background_accum_ps, EEVEE_PrivateData::background_alpha, EEVEE_PassList::background_ps, BLI_ghash_ptr_new(), BLI_memblock_clear(), BLI_memblock_create, EEVEE_ViewLayerData::common_ubo, LightCache::cube_tx, DRW_cache_fullscreen_quad_get(), DRW_context_state_get(), DRW_PASS_CREATE, DRW_pass_create_instance(), DRW_PASS_INSTANCE_CREATE, DRW_pass_link(), DRW_shgroup_call, DRW_shgroup_create(), DRW_shgroup_material_create(), DRW_shgroup_uniform_block, DRW_shgroup_uniform_block_ref, DRW_shgroup_uniform_float(), DRW_shgroup_uniform_texture(), DRW_shgroup_uniform_texture_ref(), DRW_shgroup_uniform_vec3(), DRW_STATE_BLEND_ADD_FULL, DRW_STATE_CLIP_PLANES, DRW_STATE_DEPTH_EQUAL, DRW_STATE_DEPTH_LESS_EQUAL, DRW_STATE_STENCIL_ALWAYS, DRW_STATE_WRITE_COLOR, DRW_STATE_WRITE_DEPTH, DRW_STATE_WRITE_STENCIL, e_data, EEVEE_CLIP_PASS_CREATE, EEVEE_lookdev_cache_init(), EEVEE_material_get(), EEVEE_PASS_CREATE, EEVEE_shaders_update_noise_sh_get(), EEVEE_world_default_get(), EEVEE_StorageList::g_data, LightCache::grid_tx, EEVEE_ViewLayerData::grid_ubo, EEVEE_PrivateData::light_cache, EEVEE_ViewLayerData::light_ubo, material, EEVEE_PassList::material_accum_ps, EEVEE_ViewLayerData::material_cache, EEVEE_PassList::material_cull_ps, EEVEE_PrivateData::material_hash, EEVEE_PassList::material_ps, EEVEE_PassList::material_sss_cull_ps, EEVEE_PassList::material_sss_ps, EEVEE_TextureList::maxzbuffer, NULL, options, GPUMaterial::pass, EEVEE_TextureList::planar_pool, EEVEE_ViewLayerData::planar_ubo, EEVEE_ViewLayerData::probe_ubo, EEVEE_PrivateData::renderpass_ubo, scene, DRWContextState::scene, sh, EEVEE_ViewLayerData::shadow_cascade_pool, EEVEE_ViewLayerData::shadow_cube_pool, EEVEE_ViewLayerData::shadow_ubo, state, LightCacheTexture::tex, EEVEE_PassList::transparent_pass, EEVEE_Data::txl, EEVEE_PassList::update_noise_pass, VAR_WORLD_BACKGROUND, world, and Scene::world.

Referenced by eevee_cache_init(), eevee_lightbake_cache_create(), and EEVEE_render_cache_init().

◆ EEVEE_materials_cache_populate()

void EEVEE_materials_cache_populate ( EEVEE_Data vedata,
EEVEE_ViewLayerData sldata,
Object ob,
bool cast_shadow 
)

◆ EEVEE_materials_free()

void EEVEE_materials_free ( void  )

Definition at line 964 of file eevee_materials.c.

References DRW_TEXTURE_FREE_SAFE, and e_data.

Referenced by eevee_engine_free().

◆ EEVEE_materials_get_util_tex()

struct GPUTexture* EEVEE_materials_get_util_tex ( void  )

◆ EEVEE_materials_init()

void EEVEE_materials_init ( EEVEE_ViewLayerData sldata,
EEVEE_Data vedata,
EEVEE_StorageList stl,
EEVEE_FramebufferList fbl 
)

◆ EEVEE_object_curves_cache_populate()

void EEVEE_object_curves_cache_populate ( EEVEE_Data vedata,
EEVEE_ViewLayerData sldata,
Object ob,
bool cast_shadow 
)

◆ eevee_object_material_get()

BLI_INLINE Material* eevee_object_material_get ( Object ob,
int  slot,
bool  holdout 
)

◆ EEVEE_particle_hair_cache_populate()

void EEVEE_particle_hair_cache_populate ( EEVEE_Data vedata,
EEVEE_ViewLayerData sldata,
Object ob,
bool cast_shadow 
)

◆ EEVEE_update_noise()

void EEVEE_update_noise ( EEVEE_PassList psl,
EEVEE_FramebufferList fbl,
const double  offsets[3] 
)

◆ material_opaque()

static EeveeMaterialCache material_opaque ( EEVEE_Data vedata,
EEVEE_ViewLayerData sldata,
Material ma,
const bool  is_hair 
)
static

Definition at line 526 of file eevee_materials.c.

References Material::alpha_threshold, Material::blend_flag, Material::blend_method, BLI_assert, BLI_ghash_ensure_p(), BLI_memblock_alloc(), EEVEE_PassList::depth_cull_ps, EeveeMaterialCache::depth_grp, EeveeMaterialCache::depth_grp_p, EEVEE_PassList::depth_ps, EEVEE_PassList::depth_refract_cull_ps, EEVEE_PassList::depth_refract_ps, DRW_context_state_get(), DRW_shgroup_add_material_resources(), DRW_shgroup_create(), DRW_shgroup_create_sub(), DRW_shgroup_uniform_float_copy(), EEVEE_material_bind_resources(), EEVEE_material_default_get(), EEVEE_material_get(), EEVEE_subsurface_add_pass(), EFFECT_REFRACT, EFFECT_SSR, EEVEE_StorageList::effects, ELEM, EEVEE_EffectsInfo::enabled_effects, EEVEE_StorageList::g_data, GPU_material_flag_get(), GPU_material_get_shader(), GPU_MATFLAG_SUBSURFACE, KEY_CULL, KEY_HAIR, KEY_REFRACT, MA_BL_CULL_BACKFACE, MA_BL_SS_REFRACTION, MA_BM_CLIP, MA_BM_HASHED, EEVEE_ViewLayerData::material_cache, EEVEE_PassList::material_cull_ps, EEVEE_PrivateData::material_hash, EEVEE_PassList::material_ps, EEVEE_PassList::material_refract_cull_ps, EEVEE_PassList::material_refract_ps, material_shadow(), EEVEE_PassList::material_sss_cull_ps, EEVEE_PassList::material_sss_ps, Material::nodetree, NULL, EEVEE_Data::psl, Material::refract_depth, scene, DRWContextState::scene, SET_FLAG_FROM_TEST, sh, EeveeMaterialCache::shading_gpumat, EeveeMaterialCache::shading_grp, EeveeMaterialCache::shading_grp_p, EEVEE_Data::stl, Material::use_nodes, VAR_MAT_DEPTH, VAR_MAT_HAIR, VAR_MAT_HASH, VAR_MAT_MESH, and VAR_MAT_REFRACT.

Referenced by eevee_material_cache_get().

◆ material_renderpass_accumulate()

static void material_renderpass_accumulate ( EEVEE_EffectsInfo effects,
EEVEE_FramebufferList fbl,
DRWPass renderpass,
DRWPass renderpass2,
EEVEE_PrivateData pd,
GPUTexture output_tx,
struct GPUUniformBuf renderpass_option_ubo 
)
static

◆ material_renderpass_init()

static void material_renderpass_init ( GPUTexture **  output_tx,
const eGPUTextureFormat  format 
)
static

Definition at line 989 of file eevee_materials.c.

References DRW_texture_ensure_fullscreen_2d().

Referenced by EEVEE_material_output_init().

◆ material_shadow()

BLI_INLINE void material_shadow ( EEVEE_Data vedata,
EEVEE_ViewLayerData sldata,
Material ma,
bool  is_hair,
EeveeMaterialCache emc 
)

◆ material_transparent()

static EeveeMaterialCache material_transparent ( EEVEE_Data vedata,
EEVEE_ViewLayerData sldata,
Material ma 
)
static

Variable Documentation

◆ 

struct { ... } e_data

◆ noise_offsets

float noise_offsets[3]

Definition at line 41 of file eevee_materials.c.

◆ noise_tex

struct GPUTexture* noise_tex

Definition at line 39 of file eevee_materials.c.

◆ util_tex

struct GPUTexture* util_tex

Definition at line 38 of file eevee_materials.c.