diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2018-05-31 14:32:53 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2018-06-01 12:01:55 +0300 |
commit | c450966e9562eb352b869f3b554d60a42dea2fa1 (patch) | |
tree | 8cdf507041087221dbf07c66f476b8618312872d /source/blender/draw/engines/workbench/workbench_private.h | |
parent | 3b2d3a3cd11d07945b18252359378ffadddfe3bd (diff) |
Workbench: Material specific settings for the specular
- Uses the roughness setting of the basic eevee material
- renamed gloss_mir to roughness
- set default of roughness to 0.25
- renamed ray_mirror to metallic
- cleaned up material rna (BI mirror struct)
- use BLINN phong model
- normalize incoming/outgoing specular light
- when using camera oriented studiolight, the SolidLight will be used
for specular highlights
- EXPERIMENT: when in world oriented studiolight only the shadow direction will be used.
- change the settings of the internal light to make scenes more
readable
Diffstat (limited to 'source/blender/draw/engines/workbench/workbench_private.h')
-rw-r--r-- | source/blender/draw/engines/workbench/workbench_private.h | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h index d40db7f248d..6fc3251a085 100644 --- a/source/blender/draw/engines/workbench/workbench_private.h +++ b/source/blender/draw/engines/workbench/workbench_private.h @@ -48,6 +48,7 @@ #define NORMAL_ENCODING_ENABLED() (true) #define WORKBENCH_REVEALAGE_ENABLED #define STUDIOLIGHT_ORIENTATION_WORLD_ENABLED(wpd) (wpd->studio_light->flag & STUDIOLIGHT_ORIENTATION_WORLD) +#define STUDIOLIGHT_ORIENTATION_CAMERA_ENABLED(wpd) (wpd->studio_light->flag & STUDIOLIGHT_ORIENTATION_CAMERA) typedef struct WORKBENCH_FramebufferList { @@ -98,6 +99,12 @@ typedef struct WORKBENCH_Data { WORKBENCH_StorageList *stl; } WORKBENCH_Data; +typedef struct WORKBENCH_UBO_Light { + float light_direction_vs[4]; + float specular_color[3]; + float energy; +} WORKBENCH_UBO_Light; + typedef struct WORKBENCH_UBO_World { float diffuse_light_x_pos[4]; float diffuse_light_x_neg[4]; @@ -109,11 +116,20 @@ typedef struct WORKBENCH_UBO_World { float background_color_high[4]; float object_outline_color[4]; float light_direction_vs[4]; - float specular_sharpness; - float pad[3]; + WORKBENCH_UBO_Light lights[3]; + int num_lights; + int pad[3]; } WORKBENCH_UBO_World; BLI_STATIC_ASSERT_ALIGN(WORKBENCH_UBO_World, 16) +typedef struct WORKBENCH_UBO_Material { + float diffuse_color[4]; + float specular_color[4]; + float roughness; + float pad[3]; +} WORKBENCH_UBO_Material; +BLI_STATIC_ASSERT_ALIGN(WORKBENCH_UBO_Material, 16) + typedef struct WORKBENCH_PrivateData { struct GHash *material_hash; struct GPUShader *prepass_solid_sh; @@ -144,7 +160,9 @@ typedef struct WORKBENCH_PrivateData { typedef struct WORKBENCH_MaterialData { /* Solid color */ - float color[4]; + WORKBENCH_UBO_Material material_data; + struct GPUUniformBuffer *material_ubo; + int object_id; int drawtype; Image *ima; @@ -199,7 +217,7 @@ void workbench_forward_cache_finish(WORKBENCH_Data *vedata); /* workbench_materials.c */ char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, int drawtype); -void workbench_material_get_solid_color(WORKBENCH_PrivateData *wpd, Object *ob, Material *mat, float *color); +void workbench_material_update_data(WORKBENCH_PrivateData *wpd, Object *ob, Material *mat, WORKBENCH_MaterialData *data); uint workbench_material_get_hash(WORKBENCH_MaterialData *material_template); int workbench_material_get_shader_index(WORKBENCH_PrivateData *wpd, int drawtype); void workbench_material_set_normal_world_matrix( |