Commit Graph

2156 Commits

Author SHA1 Message Date
barfowl
4127966587 Merge pull request #863 from davidgyu/patch_mesh_osd
Updated Osd mesh util classes for FVar refinement
2016-09-29 10:55:19 -07:00
barfowl
feda3cb054 Merge pull request #862 from davidgyu/patch_eval_osd
Osd Varying and FaceVarying Patch Evaluation
2016-09-29 10:54:56 -07:00
barfowl
0e0974188d Merge pull request #861 from davidgyu/patch_basis_osd
Added a common patchBasis implementation for Osd
2016-09-29 10:54:25 -07:00
barfowl
77daca6fcc Merge pull request #860 from davidgyu/patch_table
Added Far::PatchTable::GetVaryingPatchDescriptor()
2016-09-29 10:53:42 -07:00
barfowl
49cfba45a3 Merge pull request #859 from davidgyu/patch_descriptor
Removed bitfield size from Far::PatchDescriptor
2016-09-29 10:52:59 -07:00
barfowl
7c08b5d8f6 Merge pull request #858 from davidgyu/patch_param_restore
Reverted recent Far::PatchParam refactoring
2016-09-29 10:50:47 -07:00
David G. Yu
6575a6e326 Updated Osd mesh util classes for FVar refinement
This adds some support to the Osd::*Mesh classes for
refining and populating face-varying patches.
2016-09-29 09:58:47 -07:00
David G. Yu
236afb2c06 Osd Varying and FaceVarying Patch Evaluation
Implemented EvalPatchesVarying and EvalPatchesFaceVarying
methods for Osd::*Evaluator classes, i.e. cpu, omp, tbb,
GLXFB, GLSLCompute, OpenCL, and CUDA.

Also, the GPU Kernel implementations have been updated to use
the common patchBasis implementation instead of re-implementing
methods to compute patch basis weights locally.
2016-09-29 09:56:15 -07:00
David G. Yu
552331f6d9 Added a common patchBasis implementation for Osd
This is used to compute patch basis weights for
the Osd::*Evaluator classes that are unable to
use the C++ implementation from far/patchBasis.h,
e.g. the GLSL, HLSL, OpenCL, and CUDA kernels.

Instead of duplicating this code for each different
kernel language, we share a single implementation
which is minimally adapted to accommodate specific
language restrictions and syntax.

This implementation can also be used by client
shader code executed while drawing, e.g. to
compute patch basis weights for evaluating varying
and face-varying patches.
2016-09-29 09:53:40 -07:00
David G. Yu
5e83b995d1 Added Far::PatchTable::GetVaryingPatchDescriptor()
Also, added guards against empty containers to the
varying data accessors.
2016-09-29 09:51:19 -07:00
David G. Yu
df0cd7ac2f Removed bitfield size from Far::PatchDescriptor
This was an obsolete relic from when PatchDescriptor
was more than a single enum value, but it can cause
problems when sharing patch descriptor values between
devices.

Also, marked the GetNumFVarControlVertices() method as
deprecated.
2016-09-29 09:44:11 -07:00
David G. Yu
4e97cb2aba Reverted recent Far::PatchParam refactoring
This reverts most of the recent changes to the
organization of Far::PatchParam. In particular,
the core parameterization is no longer exposed
as a speparate PatchParamBase class.

We'll revisit this again in a later release, but
for now we will stick with a more straight
forward implementation.
2016-09-29 09:38:32 -07:00
barfowl
ae6678e1c1 Merge pull request #856 from davidgyu/limit_stencil_options
Added Derivative Options to LimitStencilFactory
2016-09-28 14:00:58 -07:00
David G Yu
3e34c6031d Added Derivative Options to LimitStencilFactory
This change updates the Far::LimitStencilFactory to
to support options to generate 1st and 2nd derivative
limit stencil weights.

For backward compatibility, the option to generate 1st
derivatives defaults to true.  While for efficiency,
the option to generate 2nd derivatives defaults to false.

Also, updated the Far::LimitStencil class to expose
computed 1st and 2nd derivative limit stencil weights.
2016-09-28 11:56:55 -07:00
David G Yu
5f220e6d0c Merge pull request #855 from barfowl/fvar_tag_bug
Fixed topology tagging bug affecting face-varying patches
2016-09-27 21:51:19 -07:00
David G Yu
36dee7c00b Merge pull request #854 from barfowl/adaptive_options
Added new options for adaptive refinement
2016-09-27 21:50:29 -07:00
barry
b3b0a93a9d Fixed face-varying tagging bug affecting refinement for patches:
- correctly tag sharpened boundaries as irregular
    - distinguish the single-value case between dart and boundary
2016-09-27 19:42:10 -07:00
barry
98451db803 Added new public members to Far::TopologyRefiner::AdaptiveOptions:
- added flag to consider features in face-varying channels
    - added flag to reduce refinement for infinitely sharp patches
    - added secondary isolation level to reduce refinement of smooth features
2016-09-27 19:30:27 -07:00
David G Yu
9a82ba67eb Merge pull request #853 from barfowl/inf_sharp_bugs
A few bug fixes and minor improvements for inf-sharp patches
2016-09-27 08:33:01 -07:00
barry
9832e11939 A few bug fixes and minor improvements for inf-sharp patches:
- updated face-varying VTag conversion to set VTag::_corner correctly
    - updated adaptive refinement to prevent over-isolation of inf-sharp features
    - fixed patch regularity test when inf-sharp and xord features not separated
      at level 0 or 1
    - generalized BSpline end-cap factory boundary test to defer to Gregory patch
      for any non-smooth corner
2016-09-26 19:14:42 -07:00
Takahito Tejima
de3a781537 Merge pull request #852 from barfowl/inf_adapt_refine
Extended adaptive refinement for inf-sharp patches and simplified
2016-09-23 17:34:46 -07:00
barry
bbd857f52d Revised adaptive refinement to use inf-sharp tags and feature masks:
- extended FeatureMask class with more extensive set of features
    - added FeatureMask methods to convert AdaptiveOptions to features
    - updated RefineAdaptive() with simplified FeatureMask creation
    - extracted core face selection to simple local functions using FeatureMasks
    - created separate face selection for face-varying channels
    - extracted inf-sharp feature selection for use by vertex and FVar selection
2016-09-23 08:20:36 -07:00
Takahito Tejima
36feeb37df Merge pull request #851 from barfowl/vspan_members
Improved internal span types for support non-manifold cases
2016-09-22 10:30:15 -07:00
barry
c17b241293 Improved internal span types for better non-manifold support:
- changed Level::VSpan start member from edge to face local index
    - added additional Level::VSpan members for non-manifold cases
    - updated existing usage of Level::VSpan for new members and methods
    - moved and updated definition of FVarLevel::ValueSpan for clarity
2016-09-19 14:18:51 -07:00
George ElKoura
831e2092dd Merge pull request #850 from barfowl/fvar_tags
Minor updates to tags for face-varying and inf-sharp topology
2016-09-16 17:33:15 -07:00
barry
89c1765c73 Minor updates to tags for face-varying and inf-sharp topology:
- removed unused tag for inf-sharp features from Vtr::Level::VTag
    - added tags for inf-sharp features to Vtr::FVarLevel::ValueTag
    - updated the conversion from ValueTag to VTag
    - removed awkward and little used tagging methods from Vtr::FVarLevel
    - replaced obsolete methods in face-varying adaptive refinement
2016-09-15 23:03:48 -07:00
Takahito Tejima
d6c2d7c095 Merge pull request #848 from barfowl/inf_sharp_patch
Updated Far::PatchTableFactory to construct infinitely-sharp patches
2016-09-09 18:40:59 -07:00
Takahito Tejima
afda004089 Merge pull request #847 from davidgyu/release_cleanup3
Fixed compile warnings in ptex examples on macOS
2016-09-09 18:40:49 -07:00
barry
d2b6505867 Updated Far::PatchTableFactory to recognize patches along inf-sharp edges:
- updated core patch construction methods to recognize inf-sharp option:
        - updated patch regularity test
        - updated regular patch boundary mask query
        - updated irregular patch corner span query
    - added irregular patch corner query when populating patches
2016-09-08 21:18:11 -07:00
David G Yu
b49d40100d Fixed compile warnings in ptex examples on macOS 2016-09-06 23:24:46 -07:00
George ElKoura
46fac4324d Merge pull request #845 from davidgyu/release_cleanup1
Removed cmake/FindIlmBase.cmake
2016-09-06 18:24:03 -07:00
George ElKoura
6982334140 Merge pull request #846 from davidgyu/release_cleanup2
Removed mayaPolySmooth example
2016-09-06 18:23:36 -07:00
David G Yu
1bf107fc3b Removed cmake/FindIlmBase.cmake
This has been unused within the OpenSubdiv project for a long time.
2016-09-06 17:11:27 -07:00
David G Yu
8babf1e12b Removed mayaPolySmooth example
Also removed the remaining Maya dependencies. These
were most useful during the early days of OpenSubdiv.
Now OpenSubdiv has been integrated directly into Maya
and these examples serve little purpose.
2016-09-06 17:08:05 -07:00
David G Yu
da07d232f3 Merge pull request #841 from barfowl/fvar_gregory
Enabled point sharing for face-varying Gregory patches
2016-09-03 17:41:56 -07:00
barry
2983f1dc2e Enabled point sharing for face-varying Gregory patches:
- added detection of face-varying boundaries in Gregory patch factory
    - re-enabled the "share points" option in PatchTableFactory
2016-09-03 17:27:50 -07:00
David G Yu
8d23b16b0b Merge pull request #840 from barfowl/fvar_patch_table
PatchTableFactory improvements for face-varying patches
2016-09-02 21:20:18 -07:00
barry
653801588e Improved topology inspection and construction of face-varying patches:
- changes mainly involve Far::PatchTableFactory
    - treatment of patches more clearly separated into regular and irregular
    - patch identification now determines regularity and defers classification
    - topology inspection specialized for regular vs irregular patches
    - face-verying patches re-use patch information when topology matches
    - added Vtr::Level methods to improve access to tags for face-varying values
    - improved initial tagging of face-varying values in Vtr::FVarLevel
2016-09-02 20:53:24 -07:00
barfowl
e14485e4a8 Merge pull request #837 from davidgyu/patch_table_fvar_mixed
Improved PatchTableFactory for mixed FVar patches
2016-08-31 14:06:45 -07:00
David G Yu
ab36c3b64f Improved PatchTableFactory for mixed FVar patches
The patches generated for a face-varying channel can be a
mix of regular patches and patches in an alternate basis
for faces that are irregular in face-varying space.

This mix of patches is packed into a single fvar value array
in the patch table using a consistent stride with the individual
patch type determined by the fvar patch param encoding.

- Added Far::PatchParamBase::IsRegular() to designate which
patches are regular.

- Updated Far::PatchTableFactory to gather mixed basis
patches when using the Gregory basis approximation for
irregular patches.

- Fixed Far::PatchTable::EvaluateBasisFaceVarying() to
use the fvar patch param encoding to determine the type
of face-varying patches.
2016-08-31 13:05:55 -07:00
barfowl
a3ef235e94 Merge pull request #836 from davidgyu/patch_fvar
PatchTableFactory changes for smooth FVar patches
2016-08-25 11:45:35 -07:00
barfowl
e8cca70915 Merge pull request #835 from davidgyu/patch_param_base
Refactored Far::PatchParam
2016-08-25 11:33:39 -07:00
barfowl
a1d3879854 Merge pull request #834 from davidgyu/patch_table_varying
Populate varying vertices in Far::PatchTable
2016-08-25 10:43:56 -07:00
David G Yu
7b85c6b7ef PatchTableFactory changes for smooth FVar patches
Updated Far::PatchTableFactory to be able to populate patches
for smooth evaluation of face-varying data channels.

- Moved computePatchTag() method to BuilderContext
- Added computeFVarPatchTag() method to BuilderContext
- Use Vtr::Level::VSpan to represent the partial ring
  around vertices for face-varying patches.
- Added the option generateFVarLinearPatches (defaults
  to true) to support the legacy behavior of generating
  linear patches for face-varying data channels regardless
  of the underlying face-varying linear interpolation modes.
2016-08-25 00:14:10 -07:00
David G Yu
30c19bea2c Fixed a typo in TopologyRefiner::RefineAdaptive 2016-08-24 23:57:18 -07:00
David G Yu
da5cf5f7ae Updated EndCapBsplineBasis conversion for fvar
For now, face-varying patch conversion to BSpline
basis for irregular patches will always use the
Gregory basis conversion.
2016-08-24 23:57:11 -07:00
David G Yu
6ae049e79c Updated Far internal patch basis methods
These methods now compute the patch basis in terms
of Far::PatchParamBase instead of Far::PatchParam
This allows these methods to be more easily reused
for evaluating patches for face-varying data.
2016-08-24 23:55:49 -07:00
David G Yu
9d787d9af5 Refactored Far::PatchParam for better reuse
This refactoring of Far::PatchParam maintains source
compatibility with earlier releases while allowing the
core patch parameterization to be reused for patches
from face-varying channels.

This introduces a new internal interface class named
Far::PatchParamInterface which provides an interface to
the core patch parameterization and which is implemented
by both Far::PatchParamBase and Far::PatchParam.

Added significant documentation detail to this new
interface class as well as two new methods
MapRefinedToCoarse() and MapCoarseToRefined()
in favor of the now deprecated Normalize().
2016-08-24 23:55:43 -07:00
David G Yu
8b302f652e Cleaned up Far::PatchParam initialization
The parameterization of irregular faces is offset by one level
of refinement from the parameterization of regular faces. This
matches the parameterization used for Ptex texture mapping onto
irregular faces.

This was expressed awkwardly during the assigment of values to
Far::PatchParam, where we pre-decremented the refinement level
for non-quad patches in order to compensate for the incorrect
pre-increment of the refinement depth value stored for non-quad
patches.
2016-08-24 19:51:35 -07:00
David G Yu
aad523a4d7 Populate varying vertices in Far::PatchTable
In order to support a consistent API for refinement and
evaluation of varying primvar data, Far::PatchTable needs
to provide indices for varying data. This adds support to
Far::PatchTableFactory for generating these indices.
2016-08-24 19:48:03 -07:00