diff options
author | William Reynish <billrey@me.com> | 2019-04-14 19:41:10 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-04-14 21:09:02 +0300 |
commit | f5ea1fc4fbafbac6f648ba0d9d9ef16ca8323041 (patch) | |
tree | 26db8316aa052ad327b44ef15746ac6e09896143 /source/blender/editors | |
parent | 8b0102b443571a19ab17e141623cfc029320813c (diff) |
Render: new material preview
* EEVEE support through irradiance volume and light probe.
* New shader ball shape (designed by Robin Marin).
* New cloth and liquid shapes, removed monkey.
* Replace world sphere by toggle to use world for any shape.
* Slight bevel on cube.
* More subdivision for displacement preview.
* Fixed and improved UV mapping for all shapes.
* Material icon / asset preview now uses specified shape instead of always
a sphere. So for example hair material can be displayed as hair.
Ref T57683
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/datafiles/CMakeLists.txt | 2 | ||||
-rw-r--r-- | source/blender/editors/include/ED_datafiles.h | 4 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_templates.c | 4 | ||||
-rw-r--r-- | source/blender/editors/render/render_preview.c | 76 |
4 files changed, 45 insertions, 41 deletions
diff --git a/source/blender/editors/datafiles/CMakeLists.txt b/source/blender/editors/datafiles/CMakeLists.txt index 3a67cd80234..04bd067b146 100644 --- a/source/blender/editors/datafiles/CMakeLists.txt +++ b/source/blender/editors/datafiles/CMakeLists.txt @@ -767,7 +767,7 @@ if(WITH_BLENDER) # blender UI only # blends - data_to_c_simple(../../../../release/datafiles/preview_cycles.blend SRC) + data_to_c_simple(../../../../release/datafiles/preview.blend SRC) data_to_c_simple(../../../../release/datafiles/preview_grease_pencil.blend SRC) # images diff --git a/source/blender/editors/include/ED_datafiles.h b/source/blender/editors/include/ED_datafiles.h index fa082e71bf6..43d7117a1b2 100644 --- a/source/blender/editors/include/ED_datafiles.h +++ b/source/blender/editors/include/ED_datafiles.h @@ -29,8 +29,8 @@ extern int datatoc_startup_blend_size; extern char datatoc_startup_blend[]; -extern int datatoc_preview_cycles_blend_size; -extern char datatoc_preview_cycles_blend[]; +extern int datatoc_preview_blend_size; +extern char datatoc_preview_blend[]; extern int datatoc_preview_grease_pencil_blend_size; extern char datatoc_preview_grease_pencil_blend[]; diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 1591244c9b5..897a07708d0 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -2215,7 +2215,7 @@ void uiTemplatePreview( if (!ui_preview) { ui_preview = MEM_callocN(sizeof(uiPreview), "uiPreview"); BLI_strncpy(ui_preview->preview_id, preview_id, sizeof(ui_preview->preview_id)); - ui_preview->height = (short)(UI_UNIT_Y * 5.6f); + ui_preview->height = (short)(UI_UNIT_Y * 7.6f); BLI_addtail(&ar->ui_previews, ui_preview); } @@ -2257,6 +2257,8 @@ void uiTemplatePreview( col = uiLayoutColumn(row, true); uiLayoutSetScaleX(col, 1.5); uiItemR(col, &material_ptr, "preview_render_type", UI_ITEM_R_EXPAND, "", ICON_NONE); + uiItemS(col); + uiItemR(col, &material_ptr, "use_preview_world", 0, "", ICON_WORLD); } if (pr_texture) { diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c index 0b0acbffec9..77b24a1b4d9 100644 --- a/source/blender/editors/render/render_preview.c +++ b/source/blender/editors/render/render_preview.c @@ -189,7 +189,7 @@ typedef struct IconPreview { /* *************************** Preview for buttons *********************** */ -static Main *G_pr_main_cycles = NULL; +static Main *G_pr_main = NULL; static Main *G_pr_main_grease_pencil = NULL; #ifndef WITH_HEADLESS @@ -218,19 +218,13 @@ void ED_preview_ensure_dbase(void) static bool base_initialized = false; BLI_assert(BLI_thread_is_main()); if (!base_initialized) { - G_pr_main_cycles = load_main_from_memory(datatoc_preview_cycles_blend, datatoc_preview_cycles_blend_size); + G_pr_main = load_main_from_memory(datatoc_preview_blend, datatoc_preview_blend_size); G_pr_main_grease_pencil = load_main_from_memory(datatoc_preview_grease_pencil_blend, datatoc_preview_grease_pencil_blend_size); base_initialized = true; } #endif } -static bool check_engine_supports_textures(Scene *scene) -{ - RenderEngineType *type = RE_engines_find(scene->r.engine); - return (type->flag & RE_USE_TEXTURE_PREVIEW) != 0; -} - static bool check_engine_supports_preview(Scene *scene) { RenderEngineType *type = RE_engines_find(scene->r.engine); @@ -239,8 +233,8 @@ static bool check_engine_supports_preview(Scene *scene) void ED_preview_free_dbase(void) { - if (G_pr_main_cycles) - BKE_main_free(G_pr_main_cycles); + if (G_pr_main) + BKE_main_free(G_pr_main); if (G_pr_main_grease_pencil) BKE_main_free(G_pr_main_grease_pencil); @@ -262,14 +256,16 @@ static const char *preview_collection_name(const char pr_type) return "Sphere"; case MA_CUBE: return "Cube"; - case MA_MONKEY: - return "Monkey"; + case MA_SHADERBALL: + return "Shader Ball"; + case MA_CLOTH: + return "Cloth"; + case MA_FLUID: + return "Fluid"; case MA_SPHERE_A: - return "World Sphere"; - case MA_TEXTURE: - return "Texture"; + return "World Shader Ball"; case MA_LAMP: - return "Light"; + return "Lamp"; case MA_SKY: return "Sky"; case MA_HAIR: @@ -282,8 +278,9 @@ static const char *preview_collection_name(const char pr_type) } } -static void set_preview_collection(Scene *scene, ViewLayer *view_layer, char pr_type) +static void set_preview_visibility(Scene *scene, ViewLayer *view_layer, char pr_type, int pr_method) { + /* Set appropriate layer as visibile. */ LayerCollection *lc = view_layer->layer_collections.first; const char *collection_name = preview_collection_name(pr_type); @@ -296,6 +293,18 @@ static void set_preview_collection(Scene *scene, ViewLayer *view_layer, char pr_ } } + /* Hide floor for icon renders. */ + for (Base *base = view_layer->object_bases.first; base; base = base->next) { + if (STREQ(base->object->id.name + 2, "Floor")) { + if (pr_method == PR_ICON_RENDER) { + base->object->restrictflag |= OB_RESTRICT_RENDER; + } + else { + base->object->restrictflag &= ~OB_RESTRICT_RENDER; + } + } + } + BKE_layer_collection_sync(scene, view_layer); } @@ -389,11 +398,8 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty sce->r.cfra = scene->r.cfra; - if (id_type == ID_TE && !check_engine_supports_textures(scene)) { - /* Force blender internal for texture icons and nodes render, - * seems commonly used render engines does not support - * such kind of rendering. - */ + if (id_type == ID_TE) { + /* Texture is not actually rendered with engine, just set dummy value. */ BLI_strncpy(sce->r.engine, RE_engine_id_BLENDER_EEVEE, sizeof(sce->r.engine)); } else { @@ -410,8 +416,8 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty sp->id_copy = NULL; BLI_addtail(&pr_main->materials, mat); - /* use current scene world to light sphere */ - if (mat->pr_type == MA_SPHERE_A && sp->pr_method == PR_BUTS_RENDER) { + /* Use current scene world for lighting. */ + if (mat->pr_flag == MA_PREVIEW_WORLD && sp->pr_method == PR_BUTS_RENDER) { /* Use current scene world to light sphere. */ sce->world = preview_get_localized_world(sp, scene->world); } @@ -419,17 +425,14 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty /* Use a default world color. Using the current * scene world can be slow if it has big textures. */ sce->world->use_nodes = false; - sce->world->horr = 0.5f; - sce->world->horg = 0.5f; - sce->world->horb = 0.5f; + sce->world->horr = 0.05f; + sce->world->horg = 0.05f; + sce->world->horb = 0.05f; } - if (sp->pr_method == PR_ICON_RENDER) { - set_preview_collection(sce, view_layer, MA_SPHERE_A); - } - else { - set_preview_collection(sce, view_layer, mat->pr_type); + set_preview_visibility(sce, view_layer, mat->pr_type, sp->pr_method); + if (sp->pr_method != PR_ICON_RENDER) { if (mat->nodetree && sp->pr_method == PR_NODE_RENDER) { /* two previews, they get copied by wmJob */ BKE_node_preview_init_tree(mat->nodetree, sp->sizex, sp->sizey, true); @@ -470,7 +473,6 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty sp->id_copy = NULL; BLI_addtail(&pr_main->textures, tex); } - set_preview_collection(sce, view_layer, MA_TEXTURE); if (tex && tex->nodetree && sp->pr_method == PR_NODE_RENDER) { /* two previews, they get copied by wmJob */ @@ -490,7 +492,7 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty BLI_addtail(&pr_main->lights, la); } - set_preview_collection(sce, view_layer, MA_LAMP); + set_preview_visibility(sce, view_layer, MA_LAMP, sp->pr_method); if (sce->world) { /* Only use lighting from the light. */ @@ -524,7 +526,7 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty BLI_addtail(&pr_main->worlds, wrld); } - set_preview_collection(sce, view_layer, MA_SKY); + set_preview_visibility(sce, view_layer, MA_SKY, sp->pr_method); sce->world = wrld; if (wrld && wrld->nodetree && sp->pr_method == PR_NODE_RENDER) { @@ -1178,7 +1180,7 @@ static void icon_preview_startjob_all_sizes(void *customdata, short *stop, short } if ((ma == NULL) || (ma->gp_style == NULL)) { - sp->pr_main = G_pr_main_cycles; + sp->pr_main = G_pr_main; } else { sp->pr_main = G_pr_main_grease_pencil; @@ -1359,7 +1361,7 @@ void ED_preview_shader_job(const bContext *C, void *owner, ID *id, ID *parent, M } if ((ma == NULL) || (ma->gp_style == NULL)) { - sp->pr_main = G_pr_main_cycles; + sp->pr_main = G_pr_main; } else { sp->pr_main = G_pr_main_grease_pencil; |