Commit Graph

569 Commits

Author SHA1 Message Date
barry
0b61b20ec6 Minor fixes to PatchBuilders related to boundary isolation assumptions:
- updated Catmark builder to use edge-point boundary tags like Loop
    - fixed Gregory face point reliance on boundary isolation assumptions
    - added comments to PatchBuilder base class to clarify intention and usage
2018-11-16 16:53:10 -08:00
barry
4e0a96f964 Improve Far::PatchMap to better support sparse and triangular PatchTables:
- identify the subrange of originating patch faces while assigning handles
    - limit queries and memory allocation to the identified subrange of faces
    - separate quadtree construction for quad and triangular patches
2018-11-12 10:51:47 -08:00
barry
d95f49b5ca Fixed bug in adaptive refinement related to irregular faces:
- reject irregular faces before combining and testing the composite tag
2018-11-08 12:36:43 -08:00
David G Yu
bf570cd019
Merge pull request #1017 from barfowl/patch_table_query
Fixed Far::PatchTable::IsFeatureAdaptive() to work for all schemes
2018-11-07 19:14:09 -08:00
David G Yu
2520bed85f
Merge pull request #1016 from barfowl/far_irregular_faces
Extended Far topology tagging to better handle irregular faces
2018-11-07 19:13:12 -08:00
barry
78e5badc72 Fixed Far::PatchTable::IsFeatureAdaptive() to work with all schemes:
- added new PatchTable member to indicate uniform (linear) construction
    - initialize new member in PatchTableFactory
    - use new member to determine result of IsFeatureAdaptive() query
2018-11-07 16:51:10 -08:00
barry
662dccfe4d Extended vertex tagging to improve handling of irregular faces:
- added new TopologyRefiner member to detect presence of irregular faces
    - added new Vtr::Level::VTag to indicate vertex incident an irregular face
    - populated new VTag bit when irregular faces present
    - updated refinement to clear new bit for refined faces
    - branch adaptive refinement in linear cases to avoid testing features
    - updated feature detection for irregular faces -- now a simple bit test
    - updated PatchBuilder with now-trivial test for incident irregular faces
2018-11-07 13:16:03 -08:00
David G Yu
92a12edcb0
Merge pull request #1015 from barfowl/far_patch_eval
Minor refactoring of Far patch basis evaluation methods
2018-11-07 09:38:49 -08:00
barry
484c2746d1 Minor refactoring of internal functions in far/patchBasis.*:
- individual basis functions now purely normalized with no PatchParam
    - two new higher level functions deal with patch type and PatchParam
    - updated Far::PatchTable and Osd evaluators that used old methods
2018-11-06 13:29:16 -08:00
barry
ff9d936ee8 Fixed MSVC warning/error regarding use of bool in expression 2018-11-06 12:38:57 -08:00
barry
cd3faaf33c Improved Far::PatchBuilder's determination of patch properties:
- clarified handling of isolated/unisolated features in IsPatchRegular()
    - simplified GetPatchBoundaryMask() to make use of bit masks
    - removed private method supporting approx-smooth-corner-as-sharp option
    - removed debugging tests verifying irregular patch points
2018-11-06 12:11:43 -08:00
David G Yu
3dbcc32a28
Merge pull request #1013 from barfowl/nonmanifold_patches
Improve patch construction around non-manifold vertices to close gaps
2018-11-05 11:40:43 -08:00
barry
0520fc53ff Extended non-manifold patches to irregular to prevent gaps:
- Far::PatchBuilder additions to identify spans around non-manifold corners
    - re-organized patch regularity test to inspect individual corner features
    - updated partial span gathering function to handle non-manifold cases
    - ensure vertex tag xordinary bit remains unset when non-manifold
2018-11-01 10:17:40 -07:00
David G Yu
a1c7b8c87f
Merge pull request #1012 from barfowl/fvar_limit_stencil_table
Added support for creation of face-varying Far::LimitStencilTables
2018-10-29 19:04:47 -07:00
barry
c59c801e9c Added support for creation of face-varying Far::LimitStencilTables:
- added necessary options to struct LimitStencilTableFactory...::Options
    - updated Create() to support creation of varying and face-varying stencils
    - updated Create() to provide clarity and stricter compatibility checks for
      the optional StencilTable and PatchTable arguments
    - modified Doxygen comments for Create() to clarify requirements of the
      optional table arguments
    - added missing StencilTableFactory::AppendLocalPointStencilTableVarying()
2018-10-29 10:46:03 -07:00
barry
313f27295b Extended Far::StencilTable data interpolation interfaces:
- changed UpdateValues() use of *T to &T for consistency with PrimvarRefiner
   - assigned unique types <T> and <U> to src and dst arguments for consistency
   - kept the *T interfaces for backward compatibility
2018-10-29 10:30:05 -07:00
David G Yu
968f6e001c
Merge pull request #1010 from barfowl/varying_patch_descriptor
Fix initialization of PatchTable's varying patch descriptor
2018-10-20 13:32:37 -07:00
barry
8fef4d6930 Fix initialization of PatchTable's varying patch descriptor:
- initialize on construction, regardless of whether varying patches present
2018-10-19 13:17:41 -07:00
barry
2910970021 Fixed naming of function parameters to suppress Doxygen warning 2018-10-19 13:15:45 -07:00
barry
d84666c829 Populate Far::PatchTable with triangular patches for Loop scheme:
- extended patch construction in base PatchBuilder to support triangles
    - added extraction of regular triangular patches to base PatchBuilder
    - converted irregular patches to supported patch types in LoopPatchBuilder
2018-10-11 17:51:56 -07:00
barry
e96bf355e0 Added low-level support in Far for triangular patches:
- fixed missing PatchDescriptor functionality for Loop triangle
    - add new PatchDescriptor::Type for Gregory triangle
    - extended PatchParam boundary mask from 4 to 5 bits (!)
    - added new PatchParam methods for parameterization of triangles
    - extended PatchMap to support triangular patches
    - added basis evaluation for triangular patch types
2018-09-27 20:09:59 -07:00
David G Yu
54346afaa9
Merge pull request #999 from barfowl/tri_adaptive_refinement
Remove Catmark-only restriction on adpative refinement in Far
2018-09-26 14:39:59 -07:00
barry
fe0b397e2f Removed assertion restricting adaptive refinement to Catmark scheme:
- split face tag analysis into functions for face and individual corner
    - avoided forced boundary isolation of triangles, preserved for quads
2018-09-25 14:29:35 -07:00
David G Yu
91478f149a
Merge pull request #995 from barfowl/fvar_patch_array_dev
Extended face-varying patch arrays to properly support two types
2018-09-19 17:29:01 -07:00
David G Yu
c732ff346a
Merge pull request #994 from barfowl/compute_local_points
Reverted PatchTable local point methods to address template issues
2018-09-17 17:54:47 -07:00
barry
b542bc78c3 Added missing include of <algorithm> for std::max with stricter compilers 2018-09-17 11:46:41 -07:00
barry
86e3712564 Fixed oversight deriving Far::LimitStencil from new template class:
- added the "public" keyword that was inadvertantly omitted
2018-09-17 09:33:08 -07:00
barry
45928c1b81 Extended face-varying patch arrays to properly support two types:
- extended Far::PatchTable's FVar channels with two descriptors and stride
    - updated Far::PatchTableFactory to properly construct FVar patch arrays
    - extended Osd::PatchArray with two descriptors and common stride
    - updated Osd::CpuPatchTable and CpuEvaluator to use PatchArray extensions
2018-09-13 16:51:53 -07:00
barry
5c9f77d83e Reverted PatchTable::ComputeLocalPointVaues...() to avoid template issues:
- reverted original methods to operate in single precision instead of both
    - removed overloads in favor of direct stencil table access and update
    - updated precision related assertions with clearer condition
    - updated far/tutorial_6 to use template stencil table access
    - updated far/tutorial_9 to use conventional stencil table access
2018-09-13 12:50:00 -07:00
David G Yu
79476c87cb
Merge pull request #991 from barfowl/val2_gregory_simplify
Simplify construction of Gregory patches with val-2 interior corners
2018-09-13 12:29:06 -07:00
barry
725d3c585b Simplified Gregory point initialization with more direct assignment:
- replaced use of Append() with Assign(index) now that row size is clear
    - added asserts for all row sizes to ensure assignment matches allocation
    - simplified utility class for SparseMatrix point/row down to bare minimum
2018-09-12 16:01:03 -07:00
barry
e0457241e8 Simplified Catmark->Gregory conversion with val-2 interior corner:
- replaced the invasive valence-2 conditions with a post-process
    - removed inefficient and now unnecessary Point::AddOrAppend()
2018-09-12 15:52:59 -07:00
barry
f58330fdee Minor extensions to Far classes to help manage large PatchTables:
- overloaded PatchTableFactory::Create() to take subset of base faces
    - overloaded TopologyRefiner::RefineAdaptive() to take subset of base faces
    - added TopologyRefinerFactory::Create() to create new TopologyRefiner
      that shares base level with another, allowing independent refinement
    - overloaded PatchTable::ComputeLocalPointValues...() to accept split
      buffers with separate base-level primvar values
    - overloaded StencilTable::UpdateValues() to accept split buffers as above
2018-09-11 16:13:06 -07:00
David G Yu
c566e8f2ab
Merge pull request #988 from barfowl/sparse_matrix_additions
Minor improvements to internal Far::SparseMatrix class
2018-08-29 18:22:35 -07:00
barry
86dd8cc912 Bug fix and method addition to Far::internal::SparseMatrix:
- fixed error in Copy() causing compilation failure on instantiation
    - added new Swap() method analogous to std::vector::swap()
2018-08-27 11:02:36 -07:00
barry
a154426d33 Added new flags to Far::PatchTableFactory::Options to:
- address indexing inconsistencies with Uniform PatchTables (#737)
    - suppress generation of Varying patches and/or their local point stencils
    - added suppression of Varying patches to far/tutorial_6
2018-08-27 10:58:46 -07:00
David G Yu
148d3005d3
Merge pull request #982 from barfowl/stencil_table_append
fix Far::StencilTable append when base StencilTable empty
2018-08-06 12:10:48 -07:00
barry
af4b1e3fec Fixed StencilTableFactory::append() when base stencils empty:
- duplicate the local point StencilTable when no base stencils
2018-08-05 22:06:56 -07:00
barry
5b9e986d62 Fix a couple oversights in recent changes supporting double precision:
- corrected Far::LimitStencilTableFactory wrapper to use StencilTable
    - promoted constants in Far::CatmarkPatchBuilder to double precision
2018-08-05 21:31:45 -07:00
barry
647039a8ee Major public addition of class templates for multiple precision:
- converted classes for stencils, tables and factories to templates
    - added backward compatible class wrappers around new templates
    - extended PatchTable to support variable precision stencil tables
    - extended PatchTableBuilder to manage PatchTable's new stencil tables
    - templated PatchTableBuilder conversion from SparseMatrix to stencils
    - extended public PatchTableFactory interface to specify precision
    - converted PrimvarRefiner class to template and added wrapper class
2018-07-28 14:56:43 -07:00
barry
f6172f9608 Minor public extensions to support multi-precision evaluation of patches:
- templated PatchParam normalization methods for multiple precision
    - instantiated double precision basis evaluation templates
    - converted PatchTable::EvaluateBasis...() methods to templates
        - added overloaded versions to assist template parameter resolution
    - extended PatchMap::FindPatch() to double precision
2018-07-28 14:43:32 -07:00
David G Yu
cdcec73088 Fixed Far::PrimvarRefiner::limitFVar prototype
Fixed the method signature of the internal limitFVar method to make
the dst argument a reference rather than a pointer to be more consistent
with earlier changes for other primvar classes. This also makes it
easier to use the public template LimitFaceVarying method to operate
on a wider range of primvar container types.
2018-07-28 13:37:03 -07:00
barry
a0fcfb54f9 Reordered #includes in far/catmarkPatchBuilder.cpp to match convention 2018-07-27 12:07:31 -07:00
barry
9b2d161c4e Internal numerical extensions to retain double precision:
- retained precision of constants in Sdc Catmark scheme
    - improved precision of constants & intermediate values in Sdc Loop scheme
    - improved precision of constants & intermediate values CatmarkPatchBuilder
    - converted all internal Far patch basis evaluation to templates
2018-07-23 11:10:56 -07:00
barry
f15d4ae02f Internal refactoring to support multiple precision:
- overloaded PatchBuilder to populate SparseMatrix as float or double
    - simplified PatchTableBuilder handling of matrices and Varying stencils
2018-07-23 11:00:35 -07:00
barfowl
7a4fe81351
Merge pull request #975 from Nazg-Gul/fix_topology_refiner_stack_memory
Thanks again!
2018-07-20 13:35:18 -07:00
barry
13b36490a7 Fixed PatchTable's ordering of varying patches when multiple arrays present:
- added new member to PatchArrayBuilder for varying patch points
    - assign varying patch points similar to vertex and fvar patches
2018-07-17 09:29:45 -07:00
Sergey Sharybin
d6f68b17e8 Fix uninitialized stack memory used in topology refiner
The issue is that FeatureMask structure has size of an integer, but only
first 11 bytes are initialized, the rest is left non-initialized to a
stack memory of RefineAdaptive(). This will cause issues with IsEmpty()
which check whether any of integer's bits are set, effectively causing
jumps dependent on a non-initialized memory.
2018-07-14 15:57:16 +02:00
David G Yu
74601558e3
Merge pull request #972 from barfowl/fvar_patch_fix
Fixed regression in PatchTable construction with face-varying patches
2018-07-03 17:46:41 -07:00
barry
365ba36d6f Fixed regression in PatchTable construction for face-varying patches:
- fixed stencil table size estimate when no adaptive refinement occurs
2018-07-03 12:06:23 -07:00