|
Blender
V2.93
|
Go to the source code of this file.
Classes | |
| struct | LineartStaticMemPoolNode |
| struct | LineartStaticMemPool |
| struct | LineartTriangleAdjacent |
| struct | LineartTriangle |
| struct | LineartTriangleThread |
| struct | LineartElementLinkNode |
| struct | LineartLineSegment |
| struct | LineartVert |
| struct | LineartVertIntersection |
| struct | LineartEdge |
| struct | LineartLineChain |
| struct | LineartLineChainItem |
| struct | LineartChainRegisterEntry |
| struct | LineartRenderBuffer |
| struct | LineartRenderTaskInfo |
| struct | LineartBoundingArea |
Macros | |
| #define | DBL_TRIANGLE_LIM 1e-8 |
| #define | DBL_EDGE_LIM 1e-9 |
| #define | LRT_MEMORY_POOL_64MB (1 << 26) |
| #define | LRT_THREAD_EDGE_COUNT 1000 |
| #define | LRT_TILE(tile, r, c, CCount) tile[r * CCount + c] |
| #define | LRT_CLAMP(a, Min, Max) a = a < Min ? Min : (a > Max ? Max : a) |
| #define | LRT_MAX3_INDEX(a, b, c) (a > b ? (a > c ? 0 : (b > c ? 1 : 2)) : (b > c ? 1 : 2)) |
| #define | LRT_MIN3_INDEX(a, b, c) (a < b ? (a < c ? 0 : (b < c ? 1 : 2)) : (b < c ? 1 : 2)) |
| #define | LRT_MAX3_INDEX_ABC(x, y, z) (x > y ? (x > z ? a : (y > z ? b : c)) : (y > z ? b : c)) |
| #define | LRT_MIN3_INDEX_ABC(x, y, z) (x < y ? (x < z ? a : (y < z ? b : c)) : (y < z ? b : c)) |
| #define | LRT_ABC(index) (index == 0 ? a : (index == 1 ? b : c)) |
| #define | LRT_DOUBLE_CLOSE_ENOUGH(a, b) (((a) + DBL_EDGE_LIM) >= (b) && ((a)-DBL_EDGE_LIM) <= (b)) |
Enumerations | |
| enum | eLineArtElementNodeFlag { LRT_ELEMENT_IS_ADDITIONAL = (1 << 0) , LRT_ELEMENT_BORDER_ONLY = (1 << 1) , LRT_ELEMENT_NO_INTERSECTION = (1 << 2) } |
| enum | eLineArtVertFlags { LRT_VERT_HAS_INTERSECTION_DATA = (1 << 0) , LRT_VERT_EDGE_USED = (1 << 1) } |
| enum | eLineartTriangleFlags { LRT_CULL_DONT_CARE = 0 , LRT_CULL_USED = (1 << 0) , LRT_CULL_DISCARD = (1 << 1) , LRT_CULL_GENERATED = (1 << 2) , LRT_TRIANGLE_INTERSECTION_ONLY = (1 << 3) , LRT_TRIANGLE_NO_INTERSECTION = (1 << 4) } |
| #define DBL_EDGE_LIM 1e-9 |
Definition at line 312 of file MOD_lineart.h.
| #define DBL_TRIANGLE_LIM 1e-8 |
Definition at line 311 of file MOD_lineart.h.
| #define LRT_ABC | ( | index | ) | (index == 0 ? a : (index == 1 ? b : c)) |
Definition at line 409 of file MOD_lineart.h.
| #define LRT_CLAMP | ( | a, | |
| Min, | |||
| Max | |||
| ) | a = a < Min ? Min : (a > Max ? Max : a) |
Definition at line 399 of file MOD_lineart.h.
| #define LRT_DOUBLE_CLOSE_ENOUGH | ( | a, | |
| b | |||
| ) | (((a) + DBL_EDGE_LIM) >= (b) && ((a)-DBL_EDGE_LIM) <= (b)) |
Definition at line 411 of file MOD_lineart.h.
| #define LRT_MAX3_INDEX | ( | a, | |
| b, | |||
| c | |||
| ) | (a > b ? (a > c ? 0 : (b > c ? 1 : 2)) : (b > c ? 1 : 2)) |
Definition at line 401 of file MOD_lineart.h.
Definition at line 405 of file MOD_lineart.h.
| #define LRT_MEMORY_POOL_64MB (1 << 26) |
Definition at line 314 of file MOD_lineart.h.
| #define LRT_MIN3_INDEX | ( | a, | |
| b, | |||
| c | |||
| ) | (a < b ? (a < c ? 0 : (b < c ? 1 : 2)) : (b < c ? 1 : 2)) |
Definition at line 403 of file MOD_lineart.h.
Definition at line 407 of file MOD_lineart.h.
| #define LRT_THREAD_EDGE_COUNT 1000 |
Controls how many edges a worker thread is processing at one request. There's no significant performance impact on choosing different values. Don't make it too small so that the worker thread won't request too many times.
Definition at line 328 of file MOD_lineart.h.
Definition at line 397 of file MOD_lineart.h.
| typedef enum eLineArtElementNodeFlag eLineArtElementNodeFlag |
| typedef enum eLineartTriangleFlags eLineartTriangleFlags |
| typedef enum eLineArtVertFlags eLineArtVertFlags |
| typedef struct LineartBoundingArea LineartBoundingArea |
Bounding area diagram:
Example structure when subdividing 1 bounding areas: 1 area can be divided into 4 smaller children to accommodate image areas with denser triangle distribution.
lp/rp/up/bp is the list for storing pointers to adjacent bounding areas.
| typedef struct LineartChainRegisterEntry LineartChainRegisterEntry |
| typedef struct LineartEdge LineartEdge |
| typedef struct LineartElementLinkNode LineartElementLinkNode |
| typedef struct LineartLineChain LineartLineChain |
| typedef struct LineartLineChainItem LineartLineChainItem |
| typedef struct LineartLineSegment LineartLineSegment |
| typedef struct LineartRenderBuffer LineartRenderBuffer |
| typedef struct LineartRenderTaskInfo LineartRenderTaskInfo |
| typedef struct LineartStaticMemPool LineartStaticMemPool |
| typedef struct LineartStaticMemPoolNode LineartStaticMemPoolNode |
| typedef struct LineartTriangle LineartTriangle |
| typedef struct LineartTriangleAdjacent LineartTriangleAdjacent |
| typedef struct LineartTriangleThread LineartTriangleThread |
| typedef struct LineartVert LineartVert |
| typedef struct LineartVertIntersection LineartVertIntersection |
| Enumerator | |
|---|---|
| LRT_ELEMENT_IS_ADDITIONAL | |
| LRT_ELEMENT_BORDER_ONLY | |
| LRT_ELEMENT_NO_INTERSECTION | |
Definition at line 79 of file MOD_lineart.h.
| Enumerator | |
|---|---|
| LRT_CULL_DONT_CARE | |
| LRT_CULL_USED | |
| LRT_CULL_DISCARD | |
| LRT_CULL_GENERATED | |
| LRT_TRIANGLE_INTERSECTION_ONLY | |
| LRT_TRIANGLE_NO_INTERSECTION | |
Definition at line 316 of file MOD_lineart.h.
| enum eLineArtVertFlags |
| Enumerator | |
|---|---|
| LRT_VERT_HAS_INTERSECTION_DATA | |
| LRT_VERT_EDGE_USED | |
Definition at line 135 of file MOD_lineart.h.
| void ED_operatortypes_lineart | ( | void | ) |
| BLI_INLINE int lineart_LineIntersectTest2d | ( | const double * | a1, |
| const double * | a2, | ||
| const double * | b1, | ||
| const double * | b2, | ||
| double * | aRatio | ||
| ) |
Definition at line 413 of file MOD_lineart.h.
References cross_v2v2_db(), fabs(), interpd(), LRT_DOUBLE_CLOSE_ENOUGH, MAX2, MIN2, ratiod(), sub_v2_v2v2_db(), LineartBoundingArea::u, v, x, and y.
Referenced by lineart_edge_first_bounding_area(), and lineart_triangle_edge_image_space_occlusion().
| void MOD_lineart_chain_clear_picked_flag | ( | struct LineartRenderBuffer * | rb | ) |
Definition at line 892 of file lineart_chain.c.
References LineartRenderBuffer::chains, LISTBASE_FOREACH, and NULL.
Referenced by MOD_lineart_compute_feature_lines().
| float MOD_lineart_chain_compute_length | ( | LineartLineChain * | rlc | ) |
Length is in image space.
Definition at line 855 of file lineart_chain.c.
References LineartLineChain::chain, copy_v2_v2(), ListBase::first, len_v2v2(), LineartLineChainItem::next, and LineartLineChainItem::pos.
Referenced by MOD_lineart_chain_discard_short().
| void MOD_lineart_chain_connect | ( | LineartRenderBuffer * | rb | ) |
This function only connects two different chains. It will not do any clean up or smart chaining. So no: removing overlapping chains, removal of short isolated segments, and no loop reduction is implemented yet.
Definition at line 775 of file lineart_chain.c.
References BLI_addtail(), BLI_pophead(), BLI_remlink(), LineartLineChain::chain, LineartRenderBuffer::chaining_image_threshold, LineartRenderBuffer::chains, ListBase::first, LineartChainRegisterEntry::is_left, ListBase::last, LineartLineChain::level, lineart_bounding_area_get_end_point(), lineart_chain_connect(), lineart_chain_get_closest_cre(), LineartBoundingArea::linked_chains, LineartLineChain::next, NULL, LineartLineChain::picked, LineartChainRegisterEntry::picked, LineartLineChain::prev, LineartChainRegisterEntry::rlc, swap(), and LineartLineChain::transparency_mask.
Referenced by MOD_lineart_compute_feature_lines().
| int MOD_lineart_chain_count | ( | const LineartLineChain * | rlc | ) |
Definition at line 883 of file lineart_chain.c.
References LineartLineChain::chain, count, and LISTBASE_FOREACH.
Referenced by lineart_gpencil_generate().
| void MOD_lineart_chain_discard_short | ( | LineartRenderBuffer * | rb, |
| const float | threshold | ||
| ) |
Definition at line 872 of file lineart_chain.c.
References BLI_remlink(), LineartRenderBuffer::chains, ListBase::first, MOD_lineart_chain_compute_length(), and LineartLineChain::next.
Referenced by MOD_lineart_compute_feature_lines().
| void MOD_lineart_chain_feature_lines | ( | LineartRenderBuffer * | rb | ) |
Definition at line 166 of file lineart_chain.c.
References LineartLineSegment::at, LineartLineChain::chain, e, LineartVert::fbcoord, ListBase::first, LineartEdge::flags, LineartRenderBuffer::fuzzy_everything, LineartVert::gloc, LineartTriangle::gn, interp_v3_v3v3_db(), ListBase::last, LineartLineChainItem::line_type, lineart_chain_append_point(), lineart_chain_create(), lineart_chain_prepend_point(), lineart_line_get_connected(), LRT_EDGE_FLAG_ALL_TYPE, LRT_EDGE_FLAG_CHAIN_PICKED, LRT_EDGE_FLAG_CONTOUR, LRT_ITER_ALL_LINES_BEGIN, LRT_ITER_ALL_LINES_END, LRT_ITER_ALL_LINES_NEXT, MOD_lineart_get_bounding_area(), N, LineartLineSegment::next, normalize_v3(), LineartLineChain::object_ref, LineartLineSegment::occlusion, LineartLineChainItem::occlusion, POS_TO_FLOAT, LineartLineSegment::prev, LineartEdge::segments, LineartEdge::t1, LineartEdge::t2, LineartLineSegment::transparency_mask, LineartLineChainItem::transparency_mask, LineartLineChain::type, LineartEdge::v1, LineartEdge::v1_obindex, LineartEdge::v2, LineartEdge::v2_obindex, VERT_COORD_TO_FLOAT, and zero_v3().
Referenced by MOD_lineart_compute_feature_lines().
| void MOD_lineart_chain_split_angle | ( | LineartRenderBuffer * | rb, |
| float | angle_threshold_rad | ||
| ) |
This should always be the last stage!, see the end of MOD_lineart_chain_split_for_fixed_occlusion().
Definition at line 906 of file lineart_chain.c.
References angle(), angle_v2v2v2(), BLI_addtail(), BLI_pophead(), LineartLineChain::chain, LineartRenderBuffer::chains, ListBase::first, LineartLineChainItem::gpos, LineartLineChainItem::index, ListBase::last, LineartLineChain::level, LineartLineChainItem::line_type, lineart_chain_append_point(), lineart_chain_create(), M_PI, LineartLineChain::next, LineartLineChainItem::next, LineartLineChainItem::normal, NULL, LineartLineChain::object_ref, LineartLineChainItem::pos, LineartLineChain::prev, LineartLineChainItem::prev, swap(), LineartLineChain::transparency_mask, LineartLineChainItem::transparency_mask, and LineartLineChain::type.
Referenced by MOD_lineart_compute_feature_lines().
| void MOD_lineart_chain_split_for_fixed_occlusion | ( | LineartRenderBuffer * | rb | ) |
Definition at line 561 of file lineart_chain.c.
References BLI_addtail(), BLI_pophead(), LineartLineChain::chain, LineartRenderBuffer::chains, e, ListBase::first, LineartLineChainItem::gpos, LineartLineChainItem::index, ListBase::last, LineartLineChain::level, LineartLineChainItem::line_type, lineart_bounding_area_link_chain(), lineart_chain_append_point(), lineart_chain_create(), lineart_point_overlapping(), LISTBASE_FOREACH, LineartLineChain::next, LineartLineChainItem::next, LineartLineChainItem::normal, NULL, LineartLineChain::object_ref, LineartLineChainItem::occlusion, LineartLineChainItem::pos, LineartLineChain::prev, LineartLineChainItem::prev, swap(), LineartLineChain::transparency_mask, LineartLineChainItem::transparency_mask, and LineartLineChain::type.
Referenced by MOD_lineart_compute_feature_lines().
| bool MOD_lineart_compute_feature_lines | ( | Depsgraph * | depsgraph, |
| LineartGpencilModifierData * | lmd | ||
| ) |
This is the entry point of all line art calculations.
Definition at line 3651 of file lineart_cpu.c.
References LineartRenderBuffer::_source_collection, LineartRenderBuffer::_source_object, LineartRenderBuffer::_source_type, LineartRenderBuffer::angle_splitting_threshold, BKE_scene_camera_switch_update(), LineartGpencilModifierData::calculation_flags, Scene::camera, LineartGpencilModifierData::chaining_image_threshold, DEG_get_evaluated_scene(), depsgraph, ListBase::first, G, LineartGpencilModifierData::level_end, LineartGpencilModifierData::level_start, lineart_count_and_print_render_buffer_memory(), lineart_create_render_buffer(), lineart_main_add_triangles(), lineart_main_bounding_area_make_initial(), lineart_main_cull_triangles(), lineart_main_free_adjacent_data(), lineart_main_get_view_vector(), lineart_main_link_lines(), lineart_main_load_geometries(), lineart_main_occlusion_begin(), lineart_main_perspective_division(), lineart_triangle_size_get(), LRT_ALLOW_DUPLI_OBJECTS, MAX2, LineartRenderBuffer::max_occlusion_level, MIN2, MOD_lineart_chain_clear_picked_flag(), MOD_lineart_chain_connect(), MOD_lineart_chain_discard_short(), MOD_lineart_chain_feature_lines(), MOD_lineart_chain_split_angle(), MOD_lineart_chain_split_for_fixed_occlusion(), scene, LineartGpencilModifierData::source_collection, LineartGpencilModifierData::source_object, LineartGpencilModifierData::source_type, LineartRenderBuffer::triangle_size, and LineartRenderBuffer::vertex_buffer_pointers.
Referenced by bake_strokes(), bakeModifier(), and generateStrokes().
| void MOD_lineart_destroy_render_data | ( | struct LineartGpencilModifierData * | lmd | ) |
Definition at line 2629 of file lineart_cpu.c.
References G, lineart_destroy_render_data(), MEM_freeN, NULL, and LineartGpencilModifierData::render_buffer.
Referenced by bake_strokes(), bakeModifier(), and generateStrokes().
| LineartBoundingArea* MOD_lineart_get_bounding_area | ( | LineartRenderBuffer * | rb, |
| double | x, | ||
| double | y | ||
| ) |
Wrapper for more convenience.
Definition at line 3342 of file lineart_cpu.c.
References lineart_get_bounding_area(), MOD_lineart_get_parent_bounding_area(), NULL, x, and y.
Referenced by MOD_lineart_chain_feature_lines().
| LineartBoundingArea* MOD_lineart_get_parent_bounding_area | ( | LineartRenderBuffer * | rb, |
| double | x, | ||
| double | y | ||
| ) |
This only gets initial "biggest" tile.
Definition at line 3268 of file lineart_cpu.c.
References col, LineartRenderBuffer::height_per_tile, LineartRenderBuffer::initial_bounding_areas, LRT_BA_ROWS, LineartRenderBuffer::tile_count_x, LineartRenderBuffer::tile_count_y, LineartRenderBuffer::width_per_tile, x, and y.
Referenced by lineart_bounding_area_get_end_point(), lineart_bounding_area_link_chain(), and MOD_lineart_get_bounding_area().
| void MOD_lineart_gpencil_generate | ( | LineartRenderBuffer * | rb, |
| Depsgraph * | depsgraph, | ||
| Object * | ob, | ||
| bGPDlayer * | gpl, | ||
| bGPDframe * | gpf, | ||
| char | source_type, | ||
| void * | source_reference, | ||
| int | level_start, | ||
| int | level_end, | ||
| int | mat_nr, | ||
| short | edge_types, | ||
| uchar | transparency_flags, | ||
| uchar | transparency_mask, | ||
| short | thickness, | ||
| float | opacity, | ||
| const char * | source_vgname, | ||
| const char * | vgname, | ||
| int | modifier_flags | ||
| ) |
Wrapper for external calls.
Definition at line 3932 of file lineart_cpu.c.
References depsgraph, invert_m4_m4(), lineart_gpencil_generate(), LRT_EDGE_FLAG_INTERSECTION, LRT_SOURCE_COLLECTION, LRT_SOURCE_OBJECT, NULL, and Object::obmat.
Referenced by bake_strokes(), and generate_strokes_actual().